From IRC: Spawn frequency and spawn group rewrite

Rather than the current system I propose the following spawn system.

Each SpawnGroup is composed of two elements:
DefaultSpawn => monster
Spawnlist => [ [monster, frequency], …]

Frequency runs from 1 to 1000, and is equivalent to “tenths of percents”.

Function:
When spawning, check spawn group. Random from 1 to 1000. If within first spawnlist frequency, spawn, else subtract first spawnlist frequency and check next monster in list.
If no list monster is spawned, fall through and spawns the “default spawn” monster.

Effect:
It’s easy to see exactly how common a monster is. A value of “10” will make this creature spawn 1 out of every 100 times a monster from this group is spawned, no matter how many other monsters are added.
It’s easy to have the same monsters spawn with different frequencies in different locations. This would allow us to make special zombies more common in certain areas, for example.

Example:
mongroup LabGroup[zombie, [[science_zombie, 50%],[spitter, 25%]]
mongroup Hospital[zombie, [[spitter, 10%],[boomer, 35%], [brute, 5%]]
mongroup Town[zombie, [[spitter, 5%],[shock, 5%], [boomer:5%], [brute, 5%], [hulk, .1%], [necromancer, .1%]]

I don’t think implementation would be that hard, either - though it’s still a medium-term, rather than immediate, goal.

Sounds pretty cool, I’dd love to do this for you guys, I could do the system that defines the groups and the function(s) that return a monster from a group, but I don’t know enough about the cataclysm code to implement the system once it’s done.