Skip to content

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.

Features & systemsScenarios & AIAI & teams

Changed in 0.2.0

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 valueMeaning
Cell 0,0No cell. The placement search picks one when the structure is built.
Type -1A base defense placeholder. The planner picks the type and the cell.
Type -2Stop. Nothing at or after this node is built.
Type -3Plan a perimeter wall.

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>].
map file
[GDI]
NodeCount=4
000=MYCONST,42,58 ; example construction yard BuildingType
001=MYWEAP,45,58 ; example war factory BuildingType
002=-1,0,0 ; base defense; the planner picks the type and the cell
003=MYPOWR,0,0 ; example power plant BuildingType; cell picked at build time

A house with an empty list generates a plan at either of these moments:

  • a computer house’s MCV deploys into a ConstructionYard=yes BuildingType outside a campaign game;
  • a house passes to the computer while it owns a structure that BuildConst lists.

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.

These steps generate a plan for a house that has none. They never change a list the scenario supplied.

  1. Candidates. A BuildingType is a candidate when all of these hold:

    • its Owner includes the country this house acts as;
    • it is AIBuildThis=yes;
    • its TechLevel is 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, GAPLUG3 and GAPLUG4 is picked at random and left out.
  2. Seed. The queue starts from three rules:

    • A construction yard comes first: the first candidate, in [BuildingTypes] order, that BuildConst lists.
    • The first BuildPower entry 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 BuildBarracks entry the country may own moves to the front of the candidate order, and the first BuildWeapons entry to second place, so step 3 tests them first.
  3. Expansion. The planner makes repeated passes over the remaining candidates. Each pass queues every candidate whose Prerequisite list is met by the queue as it stood when the pass began:

    • A named BuildingType must already be queued. A type that BuildConst lists always counts as met.
    • POWER always counts as met.
    • FACTORY needs the first BuildWeapons entry the acted country may own to be queued.
    • BARRACKS needs the first BuildBarracks entry the country may own to be queued.
    • RADAR needs the first BuildRadar entry the country may own to be queued.
    • TECH needs the first BuildTech entry the country may own to be queued.
    • GDIFACTORY needs any type from PrerequisiteGDIFactory to be queued, and NODFACTORY any type from PrerequisiteNodFactory.

    A Helipad=yes type is queued one to three extra times. The hard-coded GAPLUG waits 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.

  4. Refineries. When the queue holds the first BuildRefinery entry the acted country may own, 2 - Difficulty more copies of it are inserted at random positions after it.

  5. 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’s AIBaseDefenseCoefficient, truncated again. C is the combined cost, at this house’s prices, of the queue entries copied so far, not counting the first. Towers and placeholders add nothing to C.
    • When the wanted count exceeds the number of placeholders added so far, the difference is added as -1 placeholders. Each is preceded by the first AIWallTowers entry 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) * AIBaseDefensePlaceholders further placeholders follow, each preceded by that tower, in either of these cases:

  6. Wall. A -3 node closes the list when both the global AIBuildsWalls and the side’s are yes.

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 chosenSlot the computer house holds2 - Difficulty, the extra refineries3 - Difficulty, the placeholder multiplier
Easy2, the [Difficult] section01
Normal1, the [Normal] section12
Hard0, the [Easy] section23

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.

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 BuildConst lists.

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 -2 node stops the house. Nothing after it is built.
  • A -3 node is removed from the list, and the perimeter wall planner appends the wall nodes.
  • A -1 placeholder, or a node of one of the acted side’s AIWallTowers types 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.

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.

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 AIBaseSpacing on 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=yes type 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 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.

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.

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 TechLevel is 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 AIWallTowers entry of the acted side. As in planning, POWER and any type BuildConst lists 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 -1 placeholder, 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.

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=yes sets the anti-air value to damage times the warhead’s Verses percentage against heavy armor.
  • A projectile with AG=yes, the default, sets the anti-armor value the same way, and the anti-infantry value from the Verses percentage against none.

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.

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.

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 BuildConst construction yard;
  • the node’s type drains power.

The plant comes from the acted side. The house takes the first of these that applies:

  1. The side’s PowerTurbine, when the house owns one of the side’s RegularPowerPlant structures with a free upgrade slot and a random draw passes AIUseTurbineUpgradeProbability. That probability is a fraction of 1. At its default, the turbine is chosen whenever a slot is free.
  2. The side’s AdvancedPowerPlant, when the structures the house owns meet its prerequisites.
  3. The side’s RegularPowerPlant.
  4. When the side names no RegularPowerPlant, the first BuildPower entry 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 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=yes node back into a -1 placeholder, 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.

[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.

79 of 79

KeyDescriptionValueWhen omitted
AABulletTypeAllows the projectile to be fired at targets that are in the air.booleanno
AALimitNo effectglobal rulesParsed ceiling on anti-aircraft buildings that the engine never uses.integer10
AARatioNo effectglobal rulesParsed fraction that the engine never uses.floating point.14
AdjacentBuildingTypeHow far this building searches for an eligible anchor while it is being placed.integer3
AdvancedPowerPlantSideclassComputed
AGBulletTypeAllows the projectile to be fired at targets that are on the ground.booleanyes
AIBaseDefenseCoefficientSidefloating pointComputed
AIBaseDefensePlaceholdersSideintegerComputed
AIBaseDefensesWithWallsSidebooleanComputed
AIBaseSpacingglobal rulesCells of clearance kept around a building when base ground is reserved and computer placements are searched.integer1
AIBuildsWallsSide, global rulesWhether computer houses plan a perimeter wall around their bases.booleanVaries by type
AIBuildThisBuildingTypeAllows a computer house to put the BuildingType into the base plan it generates.booleanno
AIUseTurbineUpgradeProbabilityglobal rulesThe chance that a computer house answers a power shortfall with a power turbine upgrade instead of a new power plant.floating point1
AirstripLimitNo effectglobal rulesParsed ceiling on airstrips that the engine never uses.integer5
AirstripRatioNo effectglobal rulesParsed airstrip share of a computer base that the engine never uses.floating point.12
AIWallDefenseSidefloating pointComputed
AIWallDefenseCoefficientSidefloating pointComputed
AIWallTowersSidelist of BuildingTypesComputed
BarracksLimitNo effectglobal rulesParsed ceiling on barracks that the engine never uses.integer2
BarracksRatioNo effectglobal rulesParsed barracks share of a computer base that the engine never uses.floating point.16
BaseNormalBuildingTypeWhether this placed building can anchor later building placements.booleanyes
BaseSizeAddNo effectglobal rulesParsed allowance over a rival base's size that the engine never uses.integer3
BuildAANo effectglobal rulesParsed anti-aircraft defense list for a computer base that the engine never uses.typelist(empty)
BuildBarracksglobal rulesThe barracks a computer house resolves a generic barracks prerequisite to, in order of preference.typelist(empty)
BuildConstglobal rulesThe construction yard BuildingTypes; a building of any listed type is a construction yard.typelist(empty)
BuildDefenseNo effectglobal rulesParsed defensive structure list for a computer base that the engine never uses.typelist(empty)
BuildHelipadNo effectglobal rulesParsed helipad list for a computer base that the engine never uses.typelist(empty)
BuildPDefenseNo effectglobal rulesParsed power-hungry defense list for a computer base that the engine never uses.typelist(empty)
BuildPowerglobal rulesThe power plants a computer house plans first, in order of preference.typelist(empty)
BuildRadarglobal rulesThe buildings a computer house resolves a generic radar prerequisite to, in order of preference.typelist(empty)
BuildRefineryglobal rulesThe refineries a computer house plans and measures its income against, in order of preference.typelist(empty)
BuildTechglobal rulesThe buildings a computer house resolves a generic tech prerequisite to, in order of preference.typelist(empty)
BuildWeaponsglobal rulesThe war factories a computer house resolves a generic factory prerequisite to, in order of preference.typelist(empty)
ConcreteWallsglobal rulesThe walls a computer house builds its base perimeter from, in order of preference.typelist(empty)
ConstructionYardBuildingTypeA 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.booleanno
DefenseLimitNo effectglobal rulesParsed ceiling on defensive buildings that the engine never uses.integer40
DefenseRatioNo effectglobal rulesParsed defensive share of a computer base that the engine never uses.floating point.5
EWGatesglobal rulesThe gates a computer house fits into the east-west runs of its base perimeter, in order of preference.typelist(empty)
GDIBaseDefenseCoefficientglobal rulesSeeds the first side's AIBaseDefenseCoefficient.floating point1
GDIPowerPlantglobal rulesSeeds the first side's RegularPowerPlant.classnone
GDIPowerTurbineglobal rulesSeeds the first side's PowerTurbine.classnone
GDIWallDefenseglobal rulesSeeds the first side's AIWallDefense.floating pointComputed
GDIWallDefenseCoefficientglobal rulesSeeds the first side's AIWallDefenseCoefficient.floating pointComputed
HelipadBuildingTypeLets a BuildingType accept an aircraft as a docking target.booleanno
HelipadLimitNo effectglobal rulesParsed ceiling on helipads that the engine never uses.integer5
HelipadRatioNo effectglobal rulesParsed helipad share of a computer base that the engine never uses.floating point.12
InfantryBaseMultNo effectglobal rulesParsed multiplier on building count for infantry production that the engine never uses.integer2
InfantryReserveNo effectglobal rulesParsed cash threshold for infantry production that the engine never uses.integer2000
IsBaseDefenseBuildingType, TeamTypeGives a BuildingType the computed ratings the computer picks base defenses by, or counts a TeamType against its house's defensive team total.booleanno
MaximumBaseDefenseValueglobal rulesCaps each of the three defense values computed for a base defense BuildingType.integer60
MultiplayPassiveHouseTypeKeeps the country's computer houses from building or choosing attacks and, in skirmish and multiplayer games, takes its houses out of the contest.booleanno
NodAdvancedPowerglobal rulesSeeds the second side's AdvancedPowerPlant.classnone
NodAIBuildsWallsglobal rulesSeeds the second side's AIBuildsWalls.booleanyes
NodBaseDefenseCoefficientglobal rulesSeeds the second side's AIBaseDefenseCoefficient.floating point1
NodeCountscenario basesThe number of base node entries read from the house's section.integer0
NodRegularPowerglobal rulesSeeds the second side's RegularPowerPlant.classnone
NSGatesglobal rulesThe gates a computer house fits into the north-south runs of its base perimeter, in order of preference.typelist(empty)
OwnerAircraftType, BuildingType, InfantryType, UnitTypeThe countries that may own the type.list of HouseTypes(empty)
PercentBuiltNo effectscenario basesA base completion figure that is read but has no effect.integer0
PlacementDelayglobal rulesMinutes a factory waits before trying again when the object it finished cannot leave yet.floating point.05
PowerEmergencyNo effectglobal rulesParsed power fraction that the engine never uses.floating point.75
PowersUpBuildingBuildingTypeThe ObjectType ID of the structure this type plugs into as an upgrade.stringnone
PowerSurplusNo effectglobal rulesParsed power margin that the engine never uses.integer50
PowerTurbineSideclassComputed
PrerequisiteAircraftType, BuildingType, InfantryType, UnitTypeThe structures a house must own before the type appears on its build list.list of BuildingTypes(empty)
PrerequisiteGDIFactoryglobal rulesThe BuildingTypes that satisfy a GDIFACTORY prerequisite.list of BuildingTypes(empty)
PrerequisiteNodFactoryglobal rulesThe BuildingTypes that satisfy a NODFACTORY prerequisite.list of BuildingTypes(empty)
RefineryLimitNo effectglobal rulesParsed ceiling on refineries that the engine never uses.integer4
RefineryRatioNo effectglobal rulesParsed refinery share of a computer base that the engine never uses.floating point.16
RegularPowerPlantSideclassComputed
TechLevelNo effect in some scopes7 applicable typesThe 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.integerVaries by type
TeslaLimitNo effectglobal rulesParsed ceiling on Tesla coils that the engine never uses.integer10
TeslaRatioNo effectglobal rulesParsed Tesla coil share of a computer base that the engine never uses.floating point.16
UseMPAIBaseNodesscenariosWhether the computer houses of a skirmish or multiplayer game follow the base plans the map wrote for their start positions.booleanno
VersesWarheadTypeThe percentage of a weapon's damage the warhead delivers against each armor class, in armor order.string100%,100%,100%,100%,100%
WallTowerglobal rulesThe BuildingType that joins a brick or sandbag wall run from any direction.classnone
WarLimitNo effectglobal rulesParsed ceiling on war factories that the engine never uses.integer2
WarRatioNo effectglobal rulesParsed war factory share of a computer base that the engine never uses.floating point.1
WeederBuildingType, UnitTypeMakes a BuildingType the structure vein harvesters dock at, or a UnitType a vein harvester.booleanno

History

  1. Changed0.2.0In development

    Count every listed construction yard as one

  2. Changed0.2.0In development

    Test defense prerequisites against the acted side's towers

  3. Changed0.2.0In development

    Resolve every role list against the country a house acts as

  4. Changed0.2.0In development

    Read base building from the side a house acts as

  5. Changed0.2.0In development

    Let a base plan satisfy a side factory prerequisite

  6. Changed0.2.0In development

    Read computer base plans from the spawn house sections