AI base planning and building
How a computer house plans its base as an ordered build list, picks what to build next, and chooses where to place it.
A computer house builds its base from a base node list. Each entry in the list, a node, names one BuildingType and the cell where that structure belongs. The house always builds the first node it has not built yet, so list order is build order and there is no priority scoring. The only exceptions are the power and money interventions, which insert a node ahead of the current one.
A node can leave its cell open, and its type can be an instruction instead of a structure:
| Node value | Meaning |
|---|---|
Cell 0,0 | No cell. The placement search picks one when the structure is built. |
Type -1 | A base defense placeholder. The planner picks the type and the cell. |
Type -2 | Stop. Nothing at or after this node is built. |
Type -3 | Plan a perimeter wall. |
Where the plan comes from
Section titled “Where the plan comes from”A scenario stores a house’s node list in that house’s section of the map file. NodeCount gives the number of entries, which use the zero-padded keys 000, 001 and so on, read in order. Each entry is a BuildingType ID followed by the cell X and Y of the structure’s north-west foundation corner. An entry that starts with - is one of the instructions above. Structures the scenario starts with are ordinary map objects, and a node counts as built when a matching structure already stands on its cell.
A house following a map plan is either of these:
- a campaign house, which reads its list from the section named after it, such as
[GDI]; - a skirmish or multiplayer house on a map that sets
UseMPAIBaseNodes=yes. The house holding start position N, counted from zero, reads its list from the spawn house section[Spawn<N+1>].
[GDI]NodeCount=4000=MYCONST,42,58 ; example construction yard BuildingType001=MYWEAP,45,58 ; example war factory BuildingType002=-1,0,0 ; base defense; the planner picks the type and the cell003=MYPOWR,0,0 ; example power plant BuildingType; cell picked at build timeA house with an empty list generates a plan at either of these moments:
- a computer house’s MCV deploys into a
ConstructionYard=yesBuildingType outside a campaign game; - a house passes to the computer while it owns a structure that
BuildConstlists.
A list the scenario supplies, including one from a spawn house section, prevents generation. At either of those moments, a generated plan puts its first node on the construction yard’s cell, and a supplied plan moves only its first ConstructionYard=yes node onto the yard.
A house that passes to the computer also has its new plan fitted to the base it already holds. Nodes move onto owned structures of their type, its existing base defenses and power plants are written into the plan, and the walls it owns are sold.
Building the plan
Section titled “Building the plan”These steps generate a plan for a house that has none. They never change a list the scenario supplied.
-
Candidates. A BuildingType is a candidate when all of these hold:
- its
Ownerincludes the country this house acts as; - it is
AIBuildThis=yes; - its
TechLevelis within the house’s tech level; - it is not
Weeder=yes, unless the map has a veinhole monster; - it is not the excluded plug. When the Firestorm addon is enabled, one of the hard-coded IDs
GAPLUG2,GAPLUG3andGAPLUG4is picked at random and left out.
- its
-
Seed. The queue starts from three rules:
- A construction yard comes first: the first candidate, in
[BuildingTypes]order, thatBuildConstlists. - The first
BuildPowerentry the acted country may own comes next, whether or not it is a candidate. When that power plant is also a candidate, step 3 queues it a second time. - The first
BuildBarracksentry the country may own moves to the front of the candidate order, and the firstBuildWeaponsentry to second place, so step 3 tests them first.
- A construction yard comes first: the first candidate, in
-
Expansion. The planner makes repeated passes over the remaining candidates. Each pass queues every candidate whose
Prerequisitelist is met by the queue as it stood when the pass began:- A named BuildingType must already be queued. A type that
BuildConstlists always counts as met. POWERalways counts as met.FACTORYneeds the firstBuildWeaponsentry the acted country may own to be queued.BARRACKSneeds the firstBuildBarracksentry the country may own to be queued.RADARneeds the firstBuildRadarentry the country may own to be queued.TECHneeds the firstBuildTechentry the country may own to be queued.GDIFACTORYneeds any type fromPrerequisiteGDIFactoryto be queued, andNODFACTORYany type fromPrerequisiteNodFactory.
A
Helipad=yestype is queued one to three extra times. The hard-codedGAPLUGwaits until a pass queues nothing else. Passes stop when one queues nothing, and a candidate whose prerequisites were never met stays out of the plan. - A named BuildingType must already be queued. A type that
-
Refineries. When the queue holds the first
BuildRefineryentry the acted country may own,2 - Difficultymore copies of it are inserted at random positions after it. -
Defenses. A queue of fewer than three entries becomes the plan unchanged, with no defenses and no wall node from step 6. Otherwise the first three entries are copied as they stand. Before copying each later entry, the plan adds base-defense placeholders:
- The wanted count is
(C - 2000) / 1500, truncated to a whole number, times the acted side’sAIBaseDefenseCoefficient, truncated again.Cis the combined cost, at this house’s prices, of the queue entries copied so far, not counting the first. Towers and placeholders add nothing toC. - When the wanted count exceeds the number of placeholders added so far, the difference is added as
-1placeholders. Each is preceded by the firstAIWallTowersentry the acted country may own, when there is one.
For example, with a coefficient of 1, two placeholders are wanted once the entries copied after the first cost 5000 in total. Below 3500, none are wanted.
After the last entry,
(3 - Difficulty) *AIBaseDefensePlaceholdersfurther placeholders follow, each preceded by that tower, in either of these cases:- the side will not build a wall, because the side’s
AIBuildsWallsor the globalAIBuildsWallsisno; - the side sets
AIBaseDefensesWithWalls=yes.
- The wanted count is
-
Wall. A
-3node closes the list when both the globalAIBuildsWallsand the side’s areyes.
Difficulty in steps 4 and 5 is the house’s difficulty slot: [Easy] is 0, [Normal] 1 and [Difficult] 2. A computer house normally holds the inverse of the setting the player chose, so a harder game gives the plan more extra refineries and more placeholders. The table assumes that inverse. In a game with more than one human player, CompEasyBonus can move a computer house one slot lower, and a launch file’s [HouseHandicaps] entry sets a seat’s slot directly.
| Setting chosen | Slot the computer house holds | 2 - Difficulty, the extra refineries | 3 - Difficulty, the placeholder multiplier |
|---|---|---|---|
| Easy | 2, the [Difficult] section | 0 | 1 |
| Normal | 1, the [Normal] section | 1 | 2 |
| Hard | 0, the [Easy] section | 2 | 3 |
The same 3 - Difficulty term caps the wall defenses a house appends after its perimeter wall, when its side lists a wall tower its country may own.
Choosing what to build next
Section titled “Choosing what to build next”A computer house picks its next structure when all of these hold:
- it is not a human player’s house;
- its country is not
MultiplayPassive=yes; - its production mode allows structure work, which is always the case in a campaign;
- it has no structure already pending;
- it owns a structure that
BuildConstlists.
It takes the first node that does not count as built. A node counts as built when any of these holds:
- a structure of the node’s type, owned by this house, has its foundation corner on the node’s cell;
- the house’s structure on that cell already carries the node’s type as an upgrade. Each node that names the same upgrade at that cell needs its own copy;
- the node names a wall type, and its cell holds that wall’s overlay or any structure.
A node whose cell is 0,0 never matches a structure, so it stays unbuilt until its structure is placed and the placement writes a cell into it.
What happens to the node depends on its type:
- A
-2node stops the house. Nothing after it is built. - A
-3node is removed from the list, and the perimeter wall planner appends the wall nodes. - A
-1placeholder, or a node of one of the acted side’sAIWallTowerstypes that has no cell, goes to the defense planner. If the planner cannot fill it, the node is deleted. A tower node also takes the node after it. - Any other node becomes the house’s pending structure. A construction yard starts producing it once the house is started and has more than 10 credits.
Because the house always takes the first unbuilt node, a node that no owned factory can produce holds up every node after it.
Choosing a spot
Section titled “Choosing a spot”The house picks the cell when the finished structure leaves the construction yard. It looks for the first unbuilt node of the structure’s type:
- If that node has a cell, the structure goes there when it is an upgrade or when the compactness test accepts the cell. Otherwise the placement search picks a new cell.
- If the node has no cell, or no node matches, the placement search picks one. An upgrade instead goes onto an owned structure it can plug into, preferring the least upgraded one.
The chosen cell is written back into the node.
An upgrade node that already has a cell keeps it only while the structure on that cell is the type it plugs into and still has room for it. Otherwise the node loses its cell before production starts. This check applies only to an upgrade whose PowersUpToLevel is -1.
The placement search
Section titled “The placement search”Every structure placed on the map, by any house, reserves its footprint plus AIBaseSpacing cells on every side for its owner. The exception is a structure that sets UndeploysInto and is not a construction yard, which reserves nothing. The owner’s base rectangle grows to hold that reserved area.
The search starts from the edge of the reserved area: cells with at least one, but not all eight, reserved neighbors. It tries those edge cells in order of preference. An ordinary structure prefers cells near the base center. A base defense prefers cells that existing defenses cover least, toward the quadrant chosen for it in Base defenses.
The base center is a cell set by one of three events:
- a computer house’s MCV deploys outside a campaign game, which sets it to the new construction yard’s cell;
- a house passes to the computer, which sets it to the cell of a construction yard it owns;
- the Auto Base Building trigger action turns base building on, which sets it to the house’s first construction yard.
A house with no base center skips the search and all of its tests. Its structure targets the center of the house’s structures, averaged with more weight on expensive ones. The defense quadrants and the wall height reference are then measured from cell 0,0. A campaign plan with 0,0 cells or -1 placeholders therefore needs the Auto Base Building action.
From each edge cell the search looks outward, away from the reserved area, and tries up to three positions in a line. A position is accepted when all of these hold:
- the structure’s footprint, grown by
AIBaseSpacingon every side, contains no cell this house has reserved and lies inside the playable area; - every cell of the foundation is clear to build on. A type that lays a tile under itself needs only one clear cell, and a
PlaceAnywhere=yestype skips this test; - the ground height at the position is within 2 of the height at the base center;
- the compactness test accepts the position.
When nothing passes, the search relaxes the first test in two stages, so a cramped base still builds. Each edge cell gets a second try that starts one cell closer to the base and drops the AIBaseSpacing margin from that test. After every edge cell has failed, a second pass skips that test entirely. If the second pass also fails, the search finds no cell, and the structure is abandoned as described below.
The compactness test
Section titled “The compactness test”The compactness test always passes for a house following a map plan, so its base spreads wherever the other tests allow.
For every other house, the test requires a cell this house has reserved near the candidate position. The area checked is the footprint grown by AIBaseSpacing, plus a ring outside it. The ring is one cell wide on the north and west sides and AIBaseSpacing plus one cells wide on the south and east. This keeps a skirmish or multiplayer base joined to what it already holds.
Clearing the site
Section titled “Clearing the site”Allied vehicles, infantry and aircraft standing on the foundation are told to move off it. The construction yard then waits PlacementDelay minutes before trying again.
The structure is abandoned when the search finds no cell, when placement fails, or when the site holds a permanent obstruction. A permanent obstruction is any of these:
- an overlay that cannot be built over, except a GDI concrete wall under a
WallTower; - a terrain object;
- a structure that cannot take this one as an upgrade;
- an object of a house that is not an ally.
Abandoning a structure refunds its cost and deletes it. A wall or gate node is then deleted. For any other type, every node claiming the failed cell loses its cell, so the next attempt searches again. An upgrade with no structure to go on is abandoned too, and its node is deleted when it is the next unbuilt node.
After a WallTower is placed, the next node after it whose type is IsBaseDefense=yes moves onto the tower’s cell.
Base defenses
Section titled “Base defenses”A threat cell is a cell the base is expected to be attacked through, and the house’s list of them is its threat ring. Only the perimeter wall planner fills a threat ring, with the wall cells it lays. It does so only for a side whose AIWallTowers names a type the acted country may own. Each defense node filled from the ring uses up one of its cells. A house with no ring, or an empty one, fills its defense nodes through the placement search instead.
The defense planner first picks the quadrant of the base, around the base center, that most needs a defense. It totals the anti-air, anti-armor and anti-infantry values of the house’s structures in each quadrant and takes the quadrant with the lowest total. With a threat ring, only quadrants holding at least one threat cell are considered.
The planner then picks the defense category with the smallest share of that quadrant’s total. Ties go to anti-infantry, then anti-armor, then anti-air.
A BuildingType is a candidate for that category when all of these hold:
- the country the house acts as may own it;
- its value in that category is above zero;
- its
TechLevelis within the house’s tech level; - its prerequisites are met by the house’s owned structures other than base defenses and wall towers, plus every
AIWallTowersentry of the acted side. As in planning,POWERand any typeBuildConstlists always count as met.
When the chosen category has no candidate, the planner uses the first of anti-armor, anti-infantry and anti-air that has one. With no candidates in any category, the node is deleted. The planner draws one candidate at random, weighted by 10000 / cost plus its value in the category, so cheap defenses are favored.
Each existing defense covers the cells within 6 of it. Its coverage of a cell is its value in the category, weakened with distance as value / ((distance - 1) * 0.1 + 1).
The defense’s cell depends on the threat ring:
- With a threat ring, the defense takes the threat cell in the chosen quadrant that existing defenses cover least in that category.
- Without a ring, the placement search picks the cell, and a failed search deletes the node.
A tower node is a node of one of the acted side’s AIWallTowers types that has no cell. It is filled differently from a -1 placeholder:
- The planner chooses only among defenses that plug into that tower type.
- The tower node keeps its type and takes the chosen cell.
- If the next node is still a
-1placeholder, it becomes the chosen defense at the same cell. Otherwise the chosen defense is not queued. - When that defense is queued and the house has a threat ring, a wall node at the same cell is deleted.
When no candidate plugs into the tower, the tower node becomes a standalone defense, as a -1 placeholder would. The placeholder after it is filled later.
Defense values
Section titled “Defense values”A BuildingType’s anti-air, anti-armor and anti-infantry values are computed when the rules are loaded. Only a type with IsBaseDefense=yes and a primary weapon gets them. From that weapon, damage is Damage / (ROF * 0.025), truncated to a whole number:
- A projectile with
AA=yessets the anti-air value todamagetimes the warhead’sVersespercentage againstheavyarmor. - A projectile with
AG=yes, the default, sets the anti-armor value the same way, and the anti-infantry value from theVersespercentage againstnone.
Each value is capped at MaximumBaseDefenseValue. Every other type keeps all three values at zero, so it is never a defense candidate.
An owned structure whose type has a zero value in a category counts the first non-zero value among the upgrades plugged into it.
Walls and gates
Section titled “Walls and gates”The perimeter wall planner walks the four edges of the wall ring, the base rectangle grown by one cell on each side. A cell can take a wall when all of these hold:
- its height is within 2 of the height at the base center;
- neither it nor its outward neighbor is rock, water or ice;
- it has no overlay, or only one that can be built over;
- neither it nor its outward neighbor holds a structure;
- neither it nor its outward neighbor holds a terrain object;
- it is not a ramp;
- it lies inside the playable area.
Neighboring suitable cells along an edge form a run. What a run becomes depends on the cell that ends it:
- A cell that fails only the overlay or ramp test makes the run plain wall at any length, with no gate.
- After such a cell, the next cell on the same edge that fails any other test is treated the same way. The run it ends also becomes plain wall with no gate, even at five or more cells.
- Any other end, including the end of the edge, gives a run of five or more cells wall nodes with a gate at its midpoint. A shorter run is left without a wall.
Walls use the first ConcreteWalls entry the acted country may own. A gate takes three cells of its run: the first EWGates entry on the north and south edges, and the first NSGates entry on the east and west. All wall nodes are appended before any gate node.
Make sure every country whose side builds walls may own a ConcreteWalls, an EWGates and an NSGates entry. The game crashes when the planner lays a wall or gate and the country may own no entry of that kind.
For a side with an AIWallTowers entry the acted country may own, the wall cells also become the threat ring. The planner then appends pairs of a tower node and a -1 placeholder. It adds one pair per five wall nodes, capped at (3 - Difficulty) * AIWallDefenseCoefficient+AIWallDefense, rounded down to a whole number of pairs.
Finally the base rectangle becomes the wall ring, so a later -3 node plans its wall one ring further out.
Power and money interventions
Section titled “Power and money interventions”A house that is not following a map plan checks power before it starts a structure. It inserts a power plant node just before the current node when all of these hold:
- the node’s drain added to the house’s current drain exceeds its current power output;
- the node is not a
BuildConstconstruction yard; - the node’s type drains power.
The plant comes from the acted side. The house takes the first of these that applies:
- The side’s
PowerTurbine, when the house owns one of the side’sRegularPowerPlantstructures with a free upgrade slot and a random draw passesAIUseTurbineUpgradeProbability. That probability is a fraction of 1. At its default, the turbine is chosen whenever a slot is free. - The side’s
AdvancedPowerPlant, when the structures the house owns meet its prerequisites. - The side’s
RegularPowerPlant. - When the side names no
RegularPowerPlant, the firstBuildPowerentry the acted country may own.
With no plant to insert, the node is built as it stands.
A house that is not following a map plan also sells its base when it cannot make money. That happens when it lacks a refinery or a harvester and cannot afford the missing one. It works through the node list from the back:
- A structure carrying an upgrade loses its top upgrade, and the house is credited that upgrade’s full cost.
- Any other structure is sold.
- Walls and gates are sold and their nodes removed.
The house sells until its money covers what it needs: a harvester when it owns both a refinery and a war factory, a refinery otherwise. It then cancels everything in production. It either orders the harvester, or inserts a refinery node ahead of the next unbuilt node and removes the later refinery nodes.
The house sends every vehicle, infantry and aircraft it owns to hunt in any of these cases:
- selling everything in the list does not raise enough;
- the money is raised only when selling reaches the first node in the list. The house still orders the harvester or inserts the refinery node;
- it needs a refinery and the next unbuilt node is the first in the list, so no refinery node is inserted.
Rebuilding
Section titled “Rebuilding”Rebuilding needs no separate mechanism. A structure taken off the map, destroyed or sold, no longer matches its node, so the node becomes a gap the house fills again in list order.
When a structure that matches a node is taken off the map, every other node on its cell loses its cell. What happens to a base defense’s node depends on the house:
- A house that is not following a map plan turns an
IsBaseDefense=yesnode back into a-1placeholder, so the planner picks a fresh type and cell. - A house following a map plan keeps the node and rebuilds the same defense on the same cell.
Parsed settings without effect
Section titled “Parsed settings without effect”[AI] holds a block of ratio and limit settings that no decision reads: RefineryRatio, RefineryLimit, BarracksRatio, BarracksLimit, WarRatio, WarLimit, DefenseRatio, DefenseLimit, AARatio, AALimit, TeslaRatio, TeslaLimit, HelipadRatio, HelipadLimit, AirstripRatio, AirstripLimit, BaseSizeAdd, InfantryReserve, InfantryBaseMult and PowerEmergency.
The type lists BuildDefense, BuildPDefense, BuildAA and BuildHelipad are parsed but never read. Base defenses come from the defense values instead.
PowerSurplus is parsed but never reaches a house, whose power margin stays at zero. The power intervention therefore fires as soon as a structure’s drain would exceed the house’s output.
PercentBuilt in a house’s map section is read and written back unchanged, and controls nothing.
Related settings
79 of 79
| Key | Description | Value | When omitted |
|---|---|---|---|
AABulletType | Allows the projectile to be fired at targets that are in the air. | boolean | no |
AALimitNo effectglobal rules | Parsed ceiling on anti-aircraft buildings that the engine never uses. | integer | 10 |
AARatioNo effectglobal rules | Parsed fraction that the engine never uses. | floating point | .14 |
AdjacentBuildingType | How far this building searches for an eligible anchor while it is being placed. | integer | 3 |
AdvancedPowerPlantSide | class | Computed | |
AGBulletType | Allows the projectile to be fired at targets that are on the ground. | boolean | yes |
AIBaseDefenseCoefficientSide | floating point | Computed | |
AIBaseDefensePlaceholdersSide | integer | Computed | |
AIBaseDefensesWithWallsSide | boolean | Computed | |
AIBaseSpacingglobal rules | Cells of clearance kept around a building when base ground is reserved and computer placements are searched. | integer | 1 |
AIBuildsWallsSide, global rules | Whether computer houses plan a perimeter wall around their bases. | boolean | Varies by type |
AIBuildThisBuildingType | Allows a computer house to put the BuildingType into the base plan it generates. | boolean | no |
AIUseTurbineUpgradeProbabilityglobal rules | The chance that a computer house answers a power shortfall with a power turbine upgrade instead of a new power plant. | floating point | 1 |
AirstripLimitNo effectglobal rules | Parsed ceiling on airstrips that the engine never uses. | integer | 5 |
AirstripRatioNo effectglobal rules | Parsed airstrip share of a computer base that the engine never uses. | floating point | .12 |
AIWallDefenseSide | floating point | Computed | |
AIWallDefenseCoefficientSide | floating point | Computed | |
AIWallTowersSide | list of BuildingTypes | Computed | |
BarracksLimitNo effectglobal rules | Parsed ceiling on barracks that the engine never uses. | integer | 2 |
BarracksRatioNo effectglobal rules | Parsed barracks share of a computer base that the engine never uses. | floating point | .16 |
BaseNormalBuildingType | Whether this placed building can anchor later building placements. | boolean | yes |
BaseSizeAddNo effectglobal rules | Parsed allowance over a rival base's size that the engine never uses. | integer | 3 |
BuildAANo effectglobal rules | Parsed anti-aircraft defense list for a computer base that the engine never uses. | typelist | (empty) |
BuildBarracksglobal rules | The barracks a computer house resolves a generic barracks prerequisite to, in order of preference. | typelist | (empty) |
BuildConstglobal rules | The construction yard BuildingTypes; a building of any listed type is a construction yard. | typelist | (empty) |
BuildDefenseNo effectglobal rules | Parsed defensive structure list for a computer base that the engine never uses. | typelist | (empty) |
BuildHelipadNo effectglobal rules | Parsed helipad list for a computer base that the engine never uses. | typelist | (empty) |
BuildPDefenseNo effectglobal rules | Parsed power-hungry defense list for a computer base that the engine never uses. | typelist | (empty) |
BuildPowerglobal rules | The power plants a computer house plans first, in order of preference. | typelist | (empty) |
BuildRadarglobal rules | The buildings a computer house resolves a generic radar prerequisite to, in order of preference. | typelist | (empty) |
BuildRefineryglobal rules | The refineries a computer house plans and measures its income against, in order of preference. | typelist | (empty) |
BuildTechglobal rules | The buildings a computer house resolves a generic tech prerequisite to, in order of preference. | typelist | (empty) |
BuildWeaponsglobal rules | The war factories a computer house resolves a generic factory prerequisite to, in order of preference. | typelist | (empty) |
ConcreteWallsglobal rules | The walls a computer house builds its base perimeter from, in order of preference. | typelist | (empty) |
ConstructionYardBuildingType | A BuildingType with this flag animates while a structure it built is going up, refuses ordinary undeploy orders, and starts a computer house's base when an MCV deploys into it. | boolean | no |
DefenseLimitNo effectglobal rules | Parsed ceiling on defensive buildings that the engine never uses. | integer | 40 |
DefenseRatioNo effectglobal rules | Parsed defensive share of a computer base that the engine never uses. | floating point | .5 |
EWGatesglobal rules | The gates a computer house fits into the east-west runs of its base perimeter, in order of preference. | typelist | (empty) |
GDIBaseDefenseCoefficientglobal rules | Seeds the first side's AIBaseDefenseCoefficient. | floating point | 1 |
GDIPowerPlantglobal rules | Seeds the first side's RegularPowerPlant. | class | none |
GDIPowerTurbineglobal rules | Seeds the first side's PowerTurbine. | class | none |
GDIWallDefenseglobal rules | Seeds the first side's AIWallDefense. | floating point | Computed |
GDIWallDefenseCoefficientglobal rules | Seeds the first side's AIWallDefenseCoefficient. | floating point | Computed |
HelipadBuildingType | Lets a BuildingType accept an aircraft as a docking target. | boolean | no |
HelipadLimitNo effectglobal rules | Parsed ceiling on helipads that the engine never uses. | integer | 5 |
HelipadRatioNo effectglobal rules | Parsed helipad share of a computer base that the engine never uses. | floating point | .12 |
InfantryBaseMultNo effectglobal rules | Parsed multiplier on building count for infantry production that the engine never uses. | integer | 2 |
InfantryReserveNo effectglobal rules | Parsed cash threshold for infantry production that the engine never uses. | integer | 2000 |
IsBaseDefenseBuildingType, TeamType | Gives a BuildingType the computed ratings the computer picks base defenses by, or counts a TeamType against its house's defensive team total. | boolean | no |
MaximumBaseDefenseValueglobal rules | Caps each of the three defense values computed for a base defense BuildingType. | integer | 60 |
MultiplayPassiveHouseType | Keeps the country's computer houses from building or choosing attacks and, in skirmish and multiplayer games, takes its houses out of the contest. | boolean | no |
NodAdvancedPowerglobal rules | Seeds the second side's AdvancedPowerPlant. | class | none |
NodAIBuildsWallsglobal rules | Seeds the second side's AIBuildsWalls. | boolean | yes |
NodBaseDefenseCoefficientglobal rules | Seeds the second side's AIBaseDefenseCoefficient. | floating point | 1 |
NodeCountscenario bases | The number of base node entries read from the house's section. | integer | 0 |
NodRegularPowerglobal rules | Seeds the second side's RegularPowerPlant. | class | none |
NSGatesglobal rules | The gates a computer house fits into the north-south runs of its base perimeter, in order of preference. | typelist | (empty) |
OwnerAircraftType, BuildingType, InfantryType, UnitType | The countries that may own the type. | list of HouseTypes | (empty) |
PercentBuiltNo effectscenario bases | A base completion figure that is read but has no effect. | integer | 0 |
PlacementDelayglobal rules | Minutes a factory waits before trying again when the object it finished cannot leave yet. | floating point | .05 |
PowerEmergencyNo effectglobal rules | Parsed power fraction that the engine never uses. | floating point | .75 |
PowersUpBuildingBuildingType | The ObjectType ID of the structure this type plugs into as an upgrade. | string | none |
PowerSurplusNo effectglobal rules | Parsed power margin that the engine never uses. | integer | 50 |
PowerTurbineSide | class | Computed | |
PrerequisiteAircraftType, BuildingType, InfantryType, UnitType | The structures a house must own before the type appears on its build list. | list of BuildingTypes | (empty) |
PrerequisiteGDIFactoryglobal rules | The BuildingTypes that satisfy a GDIFACTORY prerequisite. | list of BuildingTypes | (empty) |
PrerequisiteNodFactoryglobal rules | The BuildingTypes that satisfy a NODFACTORY prerequisite. | list of BuildingTypes | (empty) |
RefineryLimitNo effectglobal rules | Parsed ceiling on refineries that the engine never uses. | integer | 4 |
RefineryRatioNo effectglobal rules | Parsed refinery share of a computer base that the engine never uses. | floating point | .16 |
RegularPowerPlantSide | class | Computed | |
TechLevelNo effect in some scopes7 applicable types | The level an object type requires, the level a house holds, the starting value of the tech level setting for skirmish and network games, or a TeamType level that nothing reads. | integer | Varies by type |
TeslaLimitNo effectglobal rules | Parsed ceiling on Tesla coils that the engine never uses. | integer | 10 |
TeslaRatioNo effectglobal rules | Parsed Tesla coil share of a computer base that the engine never uses. | floating point | .16 |
UseMPAIBaseNodesscenarios | Whether the computer houses of a skirmish or multiplayer game follow the base plans the map wrote for their start positions. | boolean | no |
VersesWarheadType | The percentage of a weapon's damage the warhead delivers against each armor class, in armor order. | string | 100%,100%,100%,100%,100% |
WallTowerglobal rules | The BuildingType that joins a brick or sandbag wall run from any direction. | class | none |
WarLimitNo effectglobal rules | Parsed ceiling on war factories that the engine never uses. | integer | 2 |
WarRatioNo effectglobal rules | Parsed war factory share of a computer base that the engine never uses. | floating point | .1 |
WeederBuildingType, UnitType | Makes a BuildingType the structure vein harvesters dock at, or a UnitType a vein harvester. | boolean | no |
No keys match the current filters.
History
- Changed0.2.0In development
- Changed0.2.0In development
- Changed0.2.0In development
- Changed0.2.0In development
- Changed0.2.0In development
- Changed0.2.0In development