A top level issue, I have no problem with dynamic mode sticking around if someone wants to give it TLC, if someone wants a more action-oriented game and it doesn’t break things (which I think it wouldn’t), that’s great. I was planning on eventually ditching it entirely, but that was due to no one showing interest in working on it (as opposed to interest in having someone else work on it, which doesn’t count
)
To get technical, my biggest problem with dynamic was that zombies spawned well in sight range of the player, which is fundamentally unfair, and doesn’t strike me as fitting the tone of the genre, where you’re worried about masses of enemies, but they don’t just automatically ambush you every time you encounter them. The problem was, if you spawned zombies out of sight of the player, the player simply had to retreat as soon as they saw zombies to dodge that “wave”. I played with this triggering a new spawn event, but it struck me as fundamentally unstable. At this point I gave up and wrote the prototype static spawn system. So the fundamental problem was spawning zombies without ambushing the player, but also without allowing them to game the system to avoid conflict.
I can’t really quote a specific post, but I’m seeing a drift from “all zombies are spawned inside the reality bubble on a timer”, to “zombie populations are periodically replenished”. I’m wondering if the mechanism you might want is something like this:
On submap generation, statically spawn date appropriate zombies on submaps where zombies appear, these zombies are persistent.
When a submap is loaded, it checks how many/dangerous the zombies on it are, and if it decides it’s not enough challenge* there, it adds and/or upgrades some of them, these zombies are also persistent.
Submap generation/loading always happens out of sight of the player, so you’re guaranteed to not have zombies pop within sight of the player.
If the player isn’t moving and the game decides it wants more zombies, it could spawn them at either the border of the map, or the border of the player’s maximum sight range, and if you want them to be agressive you could spawn them with a “memory” of hearing a loud noise or something at the plater’s location (or the location where an actual sound happened).
With this, the difference between dynamic and static becomes that dynamic replenishes populations based on a combination of heuristics, whereas static simulates changes to the populations in-place. It would get rid of a good bit of alternate code for handling “dynamic” mosters that are re-absorbed into their local population when the player leaves the area.
*This level of challenge can have as many inputs as you like, date, recent attention-attracting events such as loud noises, cursed artifacts, missions, whatever.