EDIT: the "buggy" behavior is more complex than I described below. The test setup I listed exhibits the behavior easily because *all* of the poplocks on the map are the same size. This is not a normal situation in practice. The real bug works as follows: if the population under *any* poplock (no matter it's size or location) exceedes *another* poplock by >2x, then that other poplock will suppress it's associated AIsps regardless of the actual local population there. Thus on the map diagrammed below, if the 3 poplocks on isle 1 are increased to 100 each, while the poplock on isle 2 remains at 20, then a population of 200+ on isle 2 will suppress all AIsps on isle 1. The effects are tiered. The poplock on isle 2 will suppress it's own AIsps after 20 is reached. And a population of 40-60 on isle 2 will permanently shut down AIsps on isles 3,4 whose poplocks are also 20. You can explore this by adjusting the instant DGs on isle 2, remembering that on level entry 10-20 DGs will be spawned everywhere before the poplocks kick in.
EDIT2: the behavior also depends on the DG teams involved. A large green population can shut down red AIsps under poplocks on other isles. But a larger red population cannot shut down green AIsps. The setup below works because all AIsps are team green. There are always "underdog rules" in effect for mixed red + green populations under any poplock, but these extra rules don't appear to be in play for the "buggy" behavior I'm describing. Although at this point I think the poplock interactions were probably introduced on purpose to tweak the behavior of Biosphere. Too bad the rules aren't more predictable / transparent / regular.
Further below are game.txt, map & mission files to demonstrate the "buggy" behavior. Here is a schematic of the map for discussion:
Code: Select all
# map schematic: 4 islands. Each "pl" area contains poplock=20 plus one
# AIsp = 10 DGs with 2sec delay between groups. None of the poplocks overlap.
# The NW corner of island 1 has neither a poplock or an AIsp.
NW-----NE
| |pl| --2
--1-- |pl|
|pl|pl| --
SW-----SE
--3 --4
|pl| |pl|
-- --
Island 2 starts off with 40 extra DGs so it's poplock is in excess. This excess population effectively shuts down *all* AISpawnPoints (AIsp) on *all* islands. This is the buggy behavior. I'll describe some steps to further demonstrate how the poplocks interact with each other.
When first entering the level each AIsp is momentarily free to spawn DGs. This is normal -- it takes a moment for the poplocks to assert control. Exiting and re-entering the level will almost always allow one packet of DGs to be spawned at each AIsp, regardless of the current populations. This is not the bug.
The officers on each island are setup to herd the DGs into a corner. The smaller isles 2,3,4 are fully encompassed by their poplocks. The larger isle is divided into quadrants, and the NW quadrant is *not* covered by a poplock. On isle 1 the DGs are initially directed to this uncontrolled area.
So the expected behavior is for isles 2,3,4 to fill their poplocks and then stop spawning. For isle 1 the expected behavior is for the AIsps to continuously spawn DGs, since they are directed to an area outside any poplock. But this does not happen.
To further explore this, you can use a squad to kill off the DGs on isle 2. (Sorry!) Once the pop goes below 20 (the poplock number), the AIsps on isle 1 sometimes come on (see below), but those on isles 3,4 don't.
Next you can use the officers on isle 1 to direct the entire DG population to the SW corner, which is inside a poplock. Pin them down there with an officer. Now you can kill off all the DGs on the three smaller isles, and none of those AIsps will spawn anything. Neither will any of the AIsps on the big isle. It seems that any population in excess of a poplock will cause all poplocks to shut down all of their associated AIsps.
If you next send the DGs back to the NW corner, all the AIsps on every isle will start spawning. You can repeat this as often as you like. Sometimes the three AIsps on isle 1 will activate sporadically. One might spawn often, a second less frequently, and the third not at all -- all on isle 1. This seems to be related to how close the other isles are to their exact poplock values.
All these poplocks are very small with limits of just 20 DGs each. When poplocks are much larger, the amount of excess required to get the buggy behavior seems to be somewhere between 2-3x the poplock value. For example, on a different map with two poplocks = 400, it takes between 800 - 1200 DGs under one poplock to shut down all the covered AIsps under both poplocks. I couldn't pin it down since there was a radar link between the two poplocked isles. But moving all the DGs to one isle always shut down both isles.
The sporadic behaviors on isle 1 will vary if you change the poplock values and AIsp group and rate values. Poplocks = 10 and AIsp = 25 / 5sec will exhibit more of a hard lockdown than the setup discussed here.
Thanks!
-brice
Code: Select all
# game.txt
Locations_StartDefinition
# Id Avail mapFile missionFile
# ==================================================================
7 1 map_poplocks.txt mission_poplocks.txt
Locations_EndDefinition
Buildings_StartDefinition
# Id teamId locId type link online
# =======================================
Buildings_EndDefinition
Research_StartDefinition
Research Darwinian 0 1
Research Officer 0 1
Research Squad 0 4
Research Laser 0 2
Research Grenade 0 1
Research Rocket 0 1
Research Controller 0 0
Research AirStrike 0 0
Research Armour 0 0
Research TaskManager 0 3
Research Engineer 0 1
CurrentResearch Darwinian
CurrentPoints 500
Research_EndDefinition
Events_StartDefinition
Events_EndDefinition
Code: Select all
# map file: map_poplocks.txt
Landscape_StartDefinition
worldSizeX 2000
worldSizeZ 2000
cellSize 12.00
outsideHeight -10.00
landColourFile landscape_default.bmp
wavesColourFile waves_default.bmp
waterColourFile water_default.bmp
Landscape_EndDefinition
LandscapeTiles_StartDefinition
# frac height desired gen lowland
# x y z size dim scale height method seed smooth
# ========================================================
128 0.00 146 1000 1.20 1.00 100 0 1 1.00 0
583 0.00 1309 500 1.20 1.00 100 0 1 1.00 0
1368 0.00 419 500 1.20 1.00 100 0 1 1.00 0
1358 0.00 1281 500 1.20 1.00 100 0 1 1.00 0
LandscapeTiles_EndDefinition
LandFlattenAreas_StartDefinition
# x y z size
# ==========================
LandFlattenAreas_EndDefinition
Lights_StartDefinition
# x y z r g b
# =========================================
0.00 0.83 0.56 1.05 1.05 1.05
0.16 0.00 -0.99 0.95 0.95 0.95
Lights_EndDefinition
Buildings_StartDefinition
# Type id x z tm rx rz isGlobal
# ===============================================================
AISpawnPoint 0 824.85 1559.74 0 1.00 0.00 0 -1 12 10 2
AISpawnPoint 1 1598.60 1528.01 0 1.00 0.00 0 -1 12 10 2
AISpawnPoint 2 1613.24 665.22 0 1.00 0.00 0 -1 12 10 2
AISpawnPoint 3 815.92 353.33 0 1.00 0.00 0 -1 12 10 2
AISpawnPoint 4 327.72 918.63 0 1.00 0.00 0 -1 12 10 2
AISpawnPoint 5 918.45 904.61 0 1.00 0.00 0 -1 12 10 2
SpawnPopulationLock 6 328.12 924.95 1 1.00 0.00 0 258.37 20
SpawnPopulationLock 7 909.97 887.68 1 1.00 0.00 0 258.37 20
SpawnPopulationLock 8 837.33 367.04 1 1.00 0.00 0 258.37 20
SpawnPopulationLock 9 824.50 1563.69 1 1.00 0.00 0 258.37 20
SpawnPopulationLock 10 1571.19 1538.67 1 1.00 0.00 0 258.37 20
SpawnPopulationLock 11 1621.62 682.76 1 1.00 0.00 0 258.37 20
ControlTower 12 1745.98 784.43 2 1.00 0.00 1 -1
ControlTower 13 273.86 529.84 2 1.00 0.00 1 -1
ControlTower 14 936.15 1413.13 2 1.00 0.00 1 -1
ControlTower 15 1706.88 1381.20 2 1.00 0.00 1 -1
Buildings_EndDefinition
Code: Select all
# mission file: mission_poplocks.txt
CameraMounts_StartDefinition
# Name Pos Front Up
# =========================================================================
start 1086.23 1402.68 1497.54 -0.00 -0.95 -0.31 -0.00 0.31 -0.95
CameraMounts_EndDefinition
CameraAnimations_StartDefinition
CameraAnimations_EndDefinition
Buildings_StartDefinition
# Type id x z tm rx rz isGlobal
# ===========================================================
Buildings_EndDefinition
InstantUnits_StartDefinition
# Type team x z count inUnit state spread waypointX waypointZ
# ===========================================================
Officer 2 1609.0 1531.7 1 0 1 0.0 1488.8 1361.9
Officer 2 1485.1 1428.1 1 0 1 0.0 1482.3 1362.5
Officer 2 1562.4 1350.2 1 0 1 0.0 1484.5 1353.6
Officer 2 829.8 1546.9 1 0 1 0.0 705.4 1393.2
Officer 2 686.6 1460.1 1 0 1 0.0 701.9 1388.3
Officer 2 773.3 1383.6 1 0 1 0.0 699.9 1390.5
Officer 2 931.7 892.2 1 0 1 0.0 375.0 292.5
Officer 2 862.0 329.9 1 0 1 0.0 376.9 298.9
Officer 2 308.5 934.3 1 0 1 0.0 375.3 270.9
Officer 2 1607.9 659.0 1 0 1 0.0 1463.9 819.7
Officer 2 1536.9 826.9 1 0 1 0.0 1461.3 818.0
Officer 2 1473.2 720.6 1 0 1 0.0 1451.2 824.8
Officer 2 414.7 331.2 1 0 1 0.0 377.3 279.8
Officer 2 453.8 268.2 1 0 1 0.0 366.1 281.6
Officer 2 347.9 347.9 1 0 1 0.0 371.1 289.7
Darwinian 0 1471.2 800.7 40 0 -1 52.2 0.0 0.0
InstantUnits_EndDefinition
PrimaryObjectives_StartDefinition
NeverTrue
PrimaryObjectives_EndDefinition