Merge branch 'bugfixes'
Conflicts: data/mp/multiplay/skirmish/nullbot-main.js.incmaster
commit
4fda6753bc
|
@ -0,0 +1,4 @@
|
|||
[AI]
|
||||
name = "Hover AI"
|
||||
js = nullbot-hover.js
|
||||
tip = "An AI specially tweaked for sea maps, based on NullBot"
|
|
@ -0,0 +1,8 @@
|
|||
|
||||
const DEF_LIGHT = 0; // change 0 to 1 to get a weaker AI with lower CPU usage
|
||||
|
||||
include("multiplay/skirmish/nullbot-header.js.inc");
|
||||
|
||||
include("multiplay/skirmish/nullbot-hover.js.inc");
|
||||
|
||||
include("multiplay/skirmish/nullbot-main.js.inc");
|
|
@ -0,0 +1,250 @@
|
|||
|
||||
/******************************/
|
||||
/* Hover branch specific code */
|
||||
/******************************/
|
||||
|
||||
function constructPersonality() {
|
||||
|
||||
this.MIN_BUILDERS = 3; // the usual number of trucks that construct base structures
|
||||
this.MAX_BUILDERS = 3; // the maximum number of trucks that construct base structures
|
||||
this.MIN_OILERS = 2; // the usual number of trucks used for oil hunting
|
||||
this.MAX_OILERS = 6; // the maximum number of trucks used for oil hunting
|
||||
// special trick for Hover AI: need to make sure hover trucks are built
|
||||
this.MIN_DEFENDERS = 1; // the minimum number of tanks before producing more trucks than necessary
|
||||
this.DEFENSIVENESS = 3; // regulates chance of spending money on defensive structures
|
||||
this.PEACE_TIME = 12; // the amount of minutes for free scouting (regrouping disabled, no defenses built)
|
||||
|
||||
this.THIS_AI_MAKES_TANKS = true;
|
||||
this.THIS_AI_MAKES_CYBORGS = false;
|
||||
this.THIS_AI_MAKES_VTOLS = true;
|
||||
|
||||
this.researchPathPrimary = [
|
||||
"R-Sys-Engineering01",
|
||||
"R-Struc-Research-Module",
|
||||
"R-Wpn-Rocket05-MiniPod",
|
||||
"R-Vehicle-Prop-Hover",
|
||||
"R-Wpn-Rocket02-MRL",
|
||||
"R-Vehicle-Body05",
|
||||
"R-Wpn-Rocket-ROF01",
|
||||
"R-Struc-RepairFacility",
|
||||
"R-Defense-MRL",
|
||||
"R-Defense-Pillbox06",
|
||||
"R-Vehicle-Body11",
|
||||
"R-Wpn-Rocket-ROF02",
|
||||
"R-Struc-RprFac-Upgrade01",
|
||||
"R-Defense-WallTower06",
|
||||
];
|
||||
|
||||
this.researchPathFundamental = [
|
||||
"R-Struc-Power-Upgrade01c",
|
||||
"R-Sys-Sensor-Tower02",
|
||||
"R-Vehicle-Body12",
|
||||
"R-Struc-Power-Upgrade03a",
|
||||
"R-Struc-Materials03",
|
||||
"R-Struc-VTOLPad-Upgrade01",
|
||||
"R-Struc-RprFac-Upgrade04",
|
||||
"R-Vehicle-Body09",
|
||||
"R-Vehicle-Body10",
|
||||
"R-Struc-Research-Upgrade09",
|
||||
"R-Struc-VTOLPad-Upgrade06",
|
||||
"R-Vehicle-Body14",
|
||||
"R-Wpn-LasSat",
|
||||
"R-Struc-Materials09",
|
||||
"R-Struc-RprFac-Upgrade06",
|
||||
];
|
||||
|
||||
this.researchPathAT = [
|
||||
"R-Wpn-Rocket-ROF03",
|
||||
"R-Defense-Sunburst",
|
||||
"R-Defense-Super-Rocket",
|
||||
"R-Defense-HvyA-Trocket",
|
||||
"R-Defense-WallTower-HvyA-Trocket",
|
||||
"R-Defense-GuardTower-ATMiss",
|
||||
"R-Defense-WallTower-A-Tmiss",
|
||||
"R-Wpn-Missile-ROF03",
|
||||
"R-Wpn-Missile-Damage03",
|
||||
"R-Wpn-Missile-Accuracy02",
|
||||
"R-Defense-Super-Missile",
|
||||
];
|
||||
|
||||
this.researchPathAP = this.researchPathAT;
|
||||
|
||||
this.researchPathAA = [
|
||||
"R-Defense-Sunburst",
|
||||
"R-Defense-SamSite1",
|
||||
"R-Defense-SamSite2",
|
||||
];
|
||||
|
||||
this.researchPathAB = [
|
||||
"R-Wpn-Rocket03-HvAT",
|
||||
"R-Defense-IDFRocket",
|
||||
"R-Defense-HvyArtMissile",
|
||||
];
|
||||
|
||||
this.tankBodies = [
|
||||
[
|
||||
"Body14SUP", // dragon
|
||||
"Body13SUP", // wyvern
|
||||
"Body10MBT", // vengeance
|
||||
"Body9REC", // tiger
|
||||
"Body7ABT", // retribution
|
||||
"Body12SUP", // mantis
|
||||
"Body11ABT", // python
|
||||
"Body8MBT", // scorpion
|
||||
"Body5REC", // cobra
|
||||
"Body1REC", // viper
|
||||
],
|
||||
];
|
||||
|
||||
this.tankPropulsions = [
|
||||
[
|
||||
"hover01", // hover
|
||||
],
|
||||
];
|
||||
|
||||
this.vtolBodies = [
|
||||
"Body7ABT", // retribution
|
||||
"Body6SUPP", // panther
|
||||
"Body8MBT", // scorpion
|
||||
"Body5REC", // cobra
|
||||
];
|
||||
|
||||
// this particular AI doesn't research
|
||||
// most of the AP weapons anyway, but it
|
||||
// will utilize AP weapons researched
|
||||
// by his allies or available at start
|
||||
this.apWeapons = [
|
||||
[
|
||||
"Missile-MdArt", // seraph
|
||||
"Laser2PULSEMk1", // pulse laser
|
||||
"MG5TWINROTARY", // tag
|
||||
"PlasmiteFlamer", // plasmite
|
||||
"MG4ROTARYMk1", // ag
|
||||
"Flame2", // inferno
|
||||
"Rocket-MRL", // mini-rocket arty
|
||||
],
|
||||
];
|
||||
|
||||
this.atWeapons = [
|
||||
[
|
||||
"Missile-A-T", // scourge
|
||||
"Rocket-HvyA-T", // tk
|
||||
"Rocket-LtA-T", // lancer
|
||||
],
|
||||
];
|
||||
|
||||
this.abWeapons = [
|
||||
[
|
||||
"Missile-MdArt", // seraph
|
||||
"Rocket-BB", // bunker buster
|
||||
"Rocket-MRL", // mra
|
||||
],
|
||||
];
|
||||
|
||||
this.aaWeapons = [
|
||||
[
|
||||
"Missile-HvySAM", // vindicator
|
||||
"Missile-LtSAM", // avenger
|
||||
"Rocket-Sunburst", // sunburst
|
||||
],
|
||||
];
|
||||
|
||||
this.vtolWeapons = [
|
||||
"Missile-VTOL-AT", // scourge
|
||||
"Rocket-VTOL-HvyA-T", // tk
|
||||
"Rocket-VTOL-LtA-T", // lancer
|
||||
"Rocket-VTOL-Pod", // minipod
|
||||
];
|
||||
|
||||
this.apCyborgStats = [
|
||||
[
|
||||
],
|
||||
];
|
||||
|
||||
this.atCyborgStats = [
|
||||
[
|
||||
],
|
||||
];
|
||||
|
||||
this.defenses = [
|
||||
[
|
||||
"GuardTower-ATMiss", // scourge tower
|
||||
"Emplacement-HvyATrocket", // tk emplacement
|
||||
"GuardTower5", // lancer tower
|
||||
"GuardTower6", // minipod tower
|
||||
],
|
||||
[
|
||||
"Emplacement-MdART-pit", // seraph emplacement
|
||||
"Emplacement-MRL-pit", // mra emplacement
|
||||
],
|
||||
[
|
||||
"X-Super-Missile", // super missile fort
|
||||
"X-Super-Rocket", // super rocket fort
|
||||
],
|
||||
];
|
||||
|
||||
this.artillery = [
|
||||
[
|
||||
"Emplacement-HvART-pit", // archangel
|
||||
"Emplacement-Rocket06-IDF", // ripples
|
||||
],
|
||||
];
|
||||
|
||||
this.antiair = [
|
||||
"P0-AASite-Laser", // stormbringer
|
||||
"P0-AASite-SAM2", // vindicator
|
||||
"P0-AASite-SAM1", // avenger
|
||||
"AASite-QuadRotMg", // whirlwind
|
||||
"P0-AASite-Sunburst", // sunburst
|
||||
"AASite-QuadBof", // flak cannon
|
||||
"AASite-QuadMg1", // hurricane
|
||||
];
|
||||
|
||||
this.hardpoints = [
|
||||
[
|
||||
"WallTower-Atmiss", // scourge
|
||||
"WallTower-HvATrocket", // tk
|
||||
"WallTower06", // lancer
|
||||
],
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
// Builds initial structures in the following order:
|
||||
// lab, lab, factory, lab, generator, generator, lab, CC, factory
|
||||
// Doesn't build the 2nd factory until 10th minute of the game.
|
||||
// Demolishes the 4th research lab when hovers are available
|
||||
// Then build extra structures if necessary.
|
||||
// Also make sure we have at least one generator before our initial money runs out
|
||||
function buildOrder() {
|
||||
var labCount = enumStruct(me, lab).length;
|
||||
var factoryCount = enumStruct(me, factory).length;
|
||||
var commandCount = enumStruct(me, command).length;
|
||||
var genCount = enumStruct(me, generator).length;
|
||||
var derrickCount = enumStruct(me, derrick).length;
|
||||
var vtolCount = enumStruct(me, vtolfac).length;
|
||||
var labsNeeded=4;
|
||||
if (countAllies()>3)
|
||||
--labsNeeded;
|
||||
if (countAllies()>1 || iHaveHovers())
|
||||
--labsNeeded;
|
||||
if (genCount < 2 && playerPower(me) < EXTREME_LOW_POWER && isStructureAvailable(generator,me))
|
||||
return buildBasicStructure(generator);
|
||||
if (labCount < 2 && isStructureAvailable(lab,me))
|
||||
return buildBasicStructure(lab);
|
||||
if (factoryCount < 1 && isStructureAvailable(factory,me))
|
||||
return buildBasicStructure(factory);
|
||||
if (labCount < 3 && isStructureAvailable(lab,me))
|
||||
return buildBasicStructure(lab,0);
|
||||
if ((genCount < 2) && isStructureAvailable(generator,me))
|
||||
return buildBasicStructure(generator);
|
||||
if (labCount < labsNeeded && isStructureAvailable(lab,me))
|
||||
return buildBasicStructure(lab,0);
|
||||
if (commandCount < 1 && isStructureAvailable(command,me))
|
||||
return buildBasicStructure(command);
|
||||
if (factoryCount < 2 && isStructureAvailable(factory,me) && (!earlyGame(10)&&!UNUSUAL_SITUATION))
|
||||
return buildBasicStructure(factory,0);
|
||||
if (vtolCount < 1 && isStructureAvailable(vtolfac,me))
|
||||
return buildBasicStructure(vtolfac,0);
|
||||
return false;
|
||||
}
|
|
@ -23,6 +23,8 @@ var NUM_HARASS = 4; // the number of units to maintain in the harass group
|
|||
var NUM_VTOL_GROUPS = MIN_VTOL_GROUPS;
|
||||
var ABS_MAX_TRUCKS = 10; // try not to make too many trucks
|
||||
|
||||
var NO_VTOL = 0; // the script will set it to 1 if VTOLs are disabled via structure limits
|
||||
|
||||
var RATE_AP = 2; // these values affect the amount of a certain weapon class in the mix
|
||||
var RATE_AT = 1; // this is for anti-tank
|
||||
var RATE_AA = 0; // how much more AA do we need
|
||||
|
@ -233,6 +235,8 @@ function dontRunOutOfPower() {
|
|||
|
||||
// checks if a structure is a dedicated anti-air defense
|
||||
function isDedicatedAA(struct) {
|
||||
if (NO_VTOL)
|
||||
return false;
|
||||
if (typeof(struct.canHitAir)!="undefined" && typeof(struct.canHitGround)!="undefined") {
|
||||
return struct.canHitAir && !struct.canHitGround;
|
||||
} else {
|
||||
|
@ -262,7 +266,7 @@ function enemyCountBalance(enemy) {
|
|||
borg:16,
|
||||
vtol:4,
|
||||
defs:2,
|
||||
aa:7
|
||||
aa:(NO_VTOL ? 0 : 7)
|
||||
};
|
||||
// the rest involves deity cheating
|
||||
if (typeof(enemyInfo[enemy])!="undefined") {
|
||||
|
@ -324,7 +328,7 @@ function groupCountBalance(gr) {
|
|||
// the heart of the AI adaptation algorithm
|
||||
function adaptationMatrix(ap, at, aa, ab, tank, borg, vtol, defs) {
|
||||
if (difficulty == EASY || difficulty == MEDIUM)
|
||||
return {ap:8,at:4,aa:2,ab:1};
|
||||
return {ap:8,at:4,aa:(NO_VTOL?0:2),ab:1};
|
||||
// the rest involves deity cheating
|
||||
var newAP, newAT, newAA, newAB;
|
||||
var totalMe=ap+at+aa+ab;
|
||||
|
@ -339,6 +343,8 @@ function adaptationMatrix(ap, at, aa, ab, tank, borg, vtol, defs) {
|
|||
newAT = Math.floor(newAT); if (newAT < 1) newAT=1;
|
||||
newAA = Math.floor(newAA); if (newAA < 0) newAA=0;
|
||||
newAB = Math.floor(newAB); if (newAB < 0) newAB=0;
|
||||
if (NO_VTOL)
|
||||
newAA = 0;
|
||||
return {ap:newAP,at:newAT,aa:newAA,ab:newAB};
|
||||
}
|
||||
|
||||
|
@ -361,7 +367,7 @@ function adapt() {
|
|||
if (difficulty == EASY || difficulty == MEDIUM) {
|
||||
RATE_AP = 16;
|
||||
RATE_AT = 7;
|
||||
RATE_AA = 3;
|
||||
RATE_AA = (NO_VTOL ? 0 : 3);
|
||||
RATE_AB = 3;
|
||||
} else { // the rest involves deity cheating
|
||||
var enemyBorgCount = 0, enemyTankCount = 0, enemyVtolCount = 0, enemyBuildingCount = 0;
|
||||
|
@ -793,6 +799,8 @@ function buildCB() {
|
|||
|
||||
// build anti-air defenses at specific spots
|
||||
function buildAA() {
|
||||
if (NO_VTOL)
|
||||
return false;
|
||||
var x=lastAirAttackX, y = lastAirAttackY;
|
||||
if (x == -1 || y == -1)
|
||||
return false;
|
||||
|
@ -1361,6 +1369,8 @@ function doResearch() {
|
|||
ret.vtol = 1;
|
||||
ret.defs = 1;
|
||||
}
|
||||
if (NO_VTOL)
|
||||
ret.vtol = 0;
|
||||
var total=ret.tank+ret.borg+ret.vtol+ret.defs;
|
||||
if (random(total)<ret.borg)
|
||||
if (followResearchPath(lablist[i],personality.researchPathAP)) {
|
||||
|
@ -2638,6 +2648,9 @@ function eventGameInit() {
|
|||
function eventStartLevel() {
|
||||
if (typeof(global.scavengerPlayer)=="undefined") // HACK: until scavengerPlayer is exposed to scripts.
|
||||
global.scavengerPlayer = Math.max(7, maxPlayers);
|
||||
if (getStructureLimit(vtolfac, me) == 0) {
|
||||
NO_VTOL = 1;
|
||||
}
|
||||
personality=new constructPersonality();
|
||||
basePosition=startPositions[me];
|
||||
if (isStructureAvailable(fmod,me)) {
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[AI]
|
||||
name = "Turtle AI"
|
||||
js = nullbot-turtle.js
|
||||
tip = "Tower wars AI, based on NullBot"
|
|
@ -0,0 +1,8 @@
|
|||
|
||||
const DEF_LIGHT = 0; // change 0 to 1 to get a weaker AI with lower CPU usage
|
||||
|
||||
include("multiplay/skirmish/nullbot-header.js.inc");
|
||||
|
||||
include("multiplay/skirmish/nullbot-turtle.js.inc");
|
||||
|
||||
include("multiplay/skirmish/nullbot-main.js.inc");
|
|
@ -0,0 +1,285 @@
|
|||
|
||||
/********************************/
|
||||
/* Generic branch specific code */
|
||||
/********************************/
|
||||
|
||||
function constructPersonality() {
|
||||
|
||||
this.MIN_BUILDERS = 2; // the usual number of trucks that construct base structures
|
||||
this.MAX_BUILDERS = 3; // the maximum number of trucks that construct base structures
|
||||
this.MIN_OILERS = 4; // the usual number of trucks used for oil hunting
|
||||
this.MAX_OILERS = 15; // the maximum number of trucks used for oil hunting
|
||||
this.MIN_DEFENDERS = 0; // the minimum number of tanks before producing more trucks than necessary
|
||||
this.DEFENSIVENESS = 0; // regulates chance of spending money on defensive structures
|
||||
this.PEACE_TIME = 0; // the amount of minutes for free scouting (regrouping disabled, no defenses built)
|
||||
|
||||
this.THIS_AI_MAKES_TANKS = false;
|
||||
this.THIS_AI_MAKES_CYBORGS = false;
|
||||
this.THIS_AI_MAKES_VTOLS = true;
|
||||
|
||||
this.researchPathPrimary = [
|
||||
"R-Defense-Tower01",
|
||||
"R-Wpn-MG-Damage03",
|
||||
"R-Struc-PowerModuleMk1",
|
||||
"R-Defense-Tower06",
|
||||
"R-Defense-Pillbox01",
|
||||
"R-Defense-WallTower01",
|
||||
"R-Defense-WallUpgrade02",
|
||||
"R-Defense-MRL",
|
||||
"R-Wpn-Rocket-ROF01",
|
||||
"R-Defense-MortarPit",
|
||||
"R-Sys-Sensor-Tower02",
|
||||
"R-Defense-Pillbox06",
|
||||
"R-Defense-WallTower06",
|
||||
"R-Defense-Sunburst",
|
||||
"R-Defense-HvyMor",
|
||||
"R-Defense-WallUpgrade03",
|
||||
"R-Struc-Materials03",
|
||||
"R-Vehicle-Body05",
|
||||
"R-Vehicle-Metals02",
|
||||
"R-Sys-CBSensor-Tower01",
|
||||
"R-Defense-IDFRocket",
|
||||
"R-Struc-Power-Upgrade01c",
|
||||
"R-Struc-VTOLPad-Upgrade01",
|
||||
"R-Wpn-Bomb02",
|
||||
"R-Defense-Howitzer",
|
||||
"R-Wpn-Rocket-ROF03",
|
||||
"R-Defense-HvyA-Trocket",
|
||||
"R-Defense-WallTower-HvyA-Trocket",
|
||||
"R-Defense-Super-Rocket",
|
||||
"R-Vehicle-Metals05",
|
||||
"R-Wpn-Bomb-Accuracy03",
|
||||
"R-Struc-VTOLPad-Upgrade03",
|
||||
"R-Defense-WallUpgrade06",
|
||||
"R-Struc-Materials06",
|
||||
"R-Struc-Power-Upgrade03a",
|
||||
"R-Sys-Autorepair-General",
|
||||
"R-Sys-SpyTower",
|
||||
"R-Wpn-Bomb05",
|
||||
"R-Defense-HvyHowitzer",
|
||||
"R-Defense-GuardTower-ATMiss",
|
||||
"R-Defense-WallTower-A-Tmiss",
|
||||
"R-Defense-SamSite1",
|
||||
"R-Defense-HvyArtMissile",
|
||||
"R-Vehicle-Metals09",
|
||||
"R-Wpn-Missile-Damage03",
|
||||
"R-Wpn-Missile-ROF03",
|
||||
"R-Wpn-Missile-Accuracy02",
|
||||
"R-Defense-SamSite2",
|
||||
"R-Vehicle-Body07",
|
||||
"R-Struc-Materials06",
|
||||
"R-Wpn-LasSat",
|
||||
"R-Defense-WallUpgrade09",
|
||||
"R-Defense-Super-Missile",
|
||||
"R-Defense-EMPMortar",
|
||||
"R-Defense-EMPCannon",
|
||||
"R-Struc-Materials09",
|
||||
"R-Defense-WallUpgrade12",
|
||||
"R-Struc-VTOLPad-Upgrade06",
|
||||
];
|
||||
|
||||
this.researchPathFundamental = [
|
||||
];
|
||||
|
||||
this.researchPathAP = [
|
||||
];
|
||||
|
||||
this.researchPathAT = [
|
||||
];
|
||||
|
||||
this.researchPathAA = [
|
||||
];
|
||||
|
||||
this.researchPathAB = [
|
||||
];
|
||||
|
||||
this.tankBodies = [
|
||||
[
|
||||
],
|
||||
];
|
||||
|
||||
this.tankPropulsions = [
|
||||
[
|
||||
],
|
||||
];
|
||||
|
||||
this.vtolBodies = [
|
||||
"Body7ABT", // retribution
|
||||
"Body6SUPP", // panther
|
||||
"Body8MBT", // scorpion
|
||||
"Body5REC", // cobra
|
||||
];
|
||||
|
||||
this.apWeapons = [
|
||||
[
|
||||
],
|
||||
];
|
||||
|
||||
this.atWeapons = [
|
||||
[
|
||||
],
|
||||
];
|
||||
|
||||
this.abWeapons = [
|
||||
[
|
||||
],
|
||||
];
|
||||
|
||||
this.aaWeapons = [
|
||||
[
|
||||
],
|
||||
];
|
||||
|
||||
this.vtolWeapons = [
|
||||
"Bomb5-VTOL-Plasmite", // plasmite bombs
|
||||
"RailGun2-VTOL", // rail gun
|
||||
"Bomb4-VTOL-HvyINC", // thermite bombs
|
||||
"Bomb2-VTOL-HvHE", // heap bombs
|
||||
"RailGun1-VTOL", // needle
|
||||
"Missile-VTOL-AT", // scourge
|
||||
"Laser2PULSE-VTOL", // pulse laser
|
||||
"Cannon5Vulcan-VTOL", // ac
|
||||
"Rocket-VTOL-HvyA-T", // tk
|
||||
"Bomb3-VTOL-LtINC", // phosphor bombs
|
||||
"MG4ROTARY-VTOL", // ag
|
||||
"Cannon4AUTO-VTOL", // hpv
|
||||
"Rocket-VTOL-LtA-T", // lancer
|
||||
"Bomb1-VTOL-LtHE", // cluster bombs
|
||||
"MG3-VTOL", // hmg
|
||||
"Rocket-VTOL-Pod", // minipod
|
||||
];
|
||||
|
||||
this.apCyborgStats = [
|
||||
];
|
||||
|
||||
this.atCyborgStats = [
|
||||
];
|
||||
|
||||
this.defenses = [
|
||||
[
|
||||
],
|
||||
];
|
||||
|
||||
this.artillery = [
|
||||
[
|
||||
"Emplacement-Howitzer150", // ground shaker
|
||||
"Emplacement-Howitzer-Incenediary", // incendiary howitzer
|
||||
"Emplacement-RotHow", // hellstorm
|
||||
"Emplacement-Howitzer105", // howitzer
|
||||
"Emplacement-MortarPit-Incenediary", // incendiary mortar
|
||||
"Emplacement-MortarPit02", // bombard
|
||||
"Emplacement-RotMor", // pepperpot
|
||||
"Emplacement-MortarPit01", // mortar
|
||||
],
|
||||
[
|
||||
"Emplacement-HvART-pit", // archangel
|
||||
"Emplacement-Rocket06-IDF", // ripples
|
||||
"Emplacement-MortarPit02", // bombard
|
||||
"Emplacement-MortarPit-Incenediary", // incendiary mortar
|
||||
"Emplacement-RotMor", // pepperpot
|
||||
"Emplacement-MortarPit01", // mortar
|
||||
],
|
||||
];
|
||||
|
||||
this.antiair = [
|
||||
"P0-AASite-Laser", // stormbringer
|
||||
"P0-AASite-SAM2", // vindicator
|
||||
"P0-AASite-SAM1", // avenger
|
||||
"AASite-QuadRotMg", // whirlwind
|
||||
"P0-AASite-Sunburst", // sunburst
|
||||
"AASite-QuadBof", // flak cannon
|
||||
"AASite-QuadMg1", // hurricane
|
||||
];
|
||||
|
||||
this.hardpoints = [
|
||||
[
|
||||
"GuardTower-ATMiss", // scourge tower
|
||||
"GuardTower-ATMiss", // scourge tower
|
||||
"Emplacement-HvyATrocket", // tk emplacement
|
||||
"GuardTower5", // lancer tower
|
||||
"GuardTower6", // minipod tower
|
||||
"GuardTower1", // mg tower
|
||||
],
|
||||
[
|
||||
"Emplacement-MdART-pit", // seraph
|
||||
"Emplacement-MdART-pit", // seraph
|
||||
"Emplacement-MdART-pit", // seraph
|
||||
"Emplacement-MRL-pit", // mra emplacement
|
||||
"WallTower01", // hmg
|
||||
"PillBox1", // mg bunker
|
||||
"GuardTower1", // mg tower
|
||||
],
|
||||
[
|
||||
"X-Super-Missile", // super missile fort
|
||||
"X-Super-Rocket", // super rocket fort
|
||||
"GuardTower5", // lancer tower
|
||||
"GuardTower6", // minipod tower
|
||||
"PillBox1", // mg bunker
|
||||
"GuardTower1", // mg tower
|
||||
],
|
||||
[
|
||||
"Emplacement-MortarEMP", // emp mortar
|
||||
"Sys-SpyTower", // nexus link tower
|
||||
"Emplacement-MdART-pit", // seraph
|
||||
"GuardTower-ATMiss", // scourge tower
|
||||
"Emplacement-HvyATrocket", // tk emplacement
|
||||
"Emplacement-MRL-pit", // mra emplacement
|
||||
"GuardTower6", // minipod tower
|
||||
"PillBox1", // mg bunker
|
||||
"GuardTower1", // mg tower
|
||||
],
|
||||
[
|
||||
"WallTower-Atmiss", // scourge
|
||||
"WallTower-HvATrocket", // tk
|
||||
"WallTower06", // lancer
|
||||
"WallTower01", // hmg
|
||||
"PillBox1", // mg bunker
|
||||
"GuardTower1", // mg tower
|
||||
],
|
||||
[
|
||||
"WallTower-EMP", // emp
|
||||
"Emplacement-MdART-pit", // seraph
|
||||
"Emplacement-MRL-pit", // mra emplacement
|
||||
"WallTower01", // hmg
|
||||
"PillBox1", // mg bunker
|
||||
"GuardTower1", // mg tower
|
||||
],
|
||||
];
|
||||
|
||||
this.hardpoints = this.hardpoints.concat(this.artillery);
|
||||
this.hardpoints[this.hardpoints.length]=this.antiair;
|
||||
this.hardpoints[this.hardpoints.length]=this.antiair;
|
||||
this.hardpoints[this.hardpoints.length]=this.antiair;
|
||||
|
||||
}
|
||||
|
||||
// Builds initial structures in the following order:
|
||||
// factory, lab, cc, lab, lab
|
||||
// Then build extra structures if necessary.
|
||||
// Also make sure we have at least one generator before our initial money runs out
|
||||
function buildOrder() {
|
||||
var labCount = enumStruct(me, lab).length;
|
||||
var factoryCount = enumStruct(me, factory).length;
|
||||
var commandCount = enumStruct(me, command).length;
|
||||
var genCount = enumStruct(me, generator).length;
|
||||
var derrickCount = enumStruct(me, derrick).length;
|
||||
var borgCount = enumStruct(me, borgfac).length;
|
||||
var vtolCount = enumStruct(me, vtolfac).length;
|
||||
if (genCount < 2 && playerPower(me) < EXTREME_LOW_POWER && isStructureAvailable(generator,me))
|
||||
return buildBasicStructure(generator);
|
||||
if (factoryCount < 1 && isStructureAvailable(factory,me))
|
||||
return buildBasicStructure(factory);
|
||||
if (labCount < 1 && isStructureAvailable(lab,me))
|
||||
return buildBasicStructure(lab);
|
||||
if (commandCount < 1 && isStructureAvailable(command,me))
|
||||
return buildBasicStructure(command);
|
||||
if (labCount < 2 && isStructureAvailable(lab,me))
|
||||
return buildBasicStructure(lab,0);
|
||||
if ((genCount < 2) && isStructureAvailable(generator,me))
|
||||
return buildBasicStructure(generator);
|
||||
if (labCount < 3 && isStructureAvailable(lab,me))
|
||||
return buildBasicStructure(lab,0);
|
||||
if (vtolCount < 1 && isStructureAvailable(vtolfac,me))
|
||||
return buildBasicStructure(vtolfac,0);
|
||||
return false;
|
||||
}
|
Loading…
Reference in New Issue