Context: Megabase, 10kspm. Biters are my main source of UPS drain at the moment (see: my suite of UPS saving mods). Specifically, if I use console commands to kill all biters and their bases, disable pollution, etc, then my UPS goes from ~27 to a solid 60. I am running on 0.18.17.
What I have realized is that my pollution cloud extends to 38,000 chunks, causing 8000-ish of them to be active, most with spawners. Digging into the game logic, I found a few knobs to turn:
Below where I have "biter-spawner", I make the same changes to "spitter-spawner" as well. For the "map-settings" below, those are changed via console command in my existing save-game for testing purposes.
- data.raw["unit-spawner"]["biter-spawner"].result_units Making the result array create only behemoth units at evolution 1.0
- data.raw["unit-spawner"]["biter-spawner"].spawning_cooldown = {360,1} Am I correct in thinking this means at evolution 1.0, spawn a biter every tick?
- data.raw["unit-spawner"]["biter-spawner"].max_count_of_owned_units It is unclear if units that get spawned, then assigned to a group, count toward this or not. It appears not? Increasing this seems to dramatically worsen performance, with no benefit (no additional biters seem to spawn unless max_friends_around_to_spawn is also increased). CPU busy-wait?
- data.raw["unit-spawner"]["biter-spawner"].pollution_absorption_absolute Am I right in thinking this is the maximum amount of pollution a spawner can old? Similar to the capacitance of a laser turret or accumulator? Does it refill per-tick, or at some other interval?
- data.raw["unit-spawner"]["biter-spawner"].pollution_absorption_proportional What does this do? My best guess was maybe it scales pollution_absorption_absolute with the evolution factor? What does it do at evolution 1.0?
- data.raw.unit["behemoth-biter"].spawning_time_modifier This doesn't seem to do anything? I changed it from 12 to 1 and biters appear to spawn at the same interval.
- data.raw["map-settings"]["map-settings"].unit_group.max_group_gathering_time I'm aware the true 'gathering time' is a random value between the min and max of this setting. What is unclear is if a group hits max_unit_group_size before the 'gathering time' is reached, does the group depart immediately, or hang around? My own tests are inconclusive.
- data.raw["map-settings"]["map-settings"].unit_group.max_gathering_unit_groups This does increase how fast biters spawn, but at a dramatic performance cost.
What I imagine is that the pollution cloud only expands out once the spawners within the cloud can no longer produce units fast enough to absorb it all. This already seems to be happening, but I can't make the spawners spawn any faster than I already have. Update: As I wrote this post I realized the limiting factor I've hit is how fast the biters walk away from the spawner when joining the group. The time it takes them to go from being assigned to the group, to moving outside of spawning_radius is the limiting factor.
I really wish there was a setting for 'walking speed to group rally point', because I'd totally set that to like 100x normal walking speed or something. :p Alternatively, if there was a way to tell the AI to just have every spawner create a constant stream of biters at my walls as fast as there was pollution to create them, then I'd be good with that too!