Ice caves have an innate difficulty counter based on depth of the entrance, which can change monster sets. I made "hard" (currently D:15-, Elf, Vaults) ice caves with demons (nearly all of them at that depth) have a 1/3 chance for two blizzard demons instead of a singular ice fiend, for the sake of variety and randomization (though depending on the character two can be argued to be a comparable threat):
- Code:
[from the most used version of the monster set code, function ice_cave_caverns_undead_demon_monster_set(e)]
[six monster definitions beforehand]
e.mons("patrolling ice fiend")
e.kmons("8 = blizzard demon")
e.shuffle("7` / 7` / `8")
With six MONS: (or, e.mons()) definitions beforehand, the ice fiend is a 7, and since that is where the default assignment of MONS stops, the next line defines 8 as a blizzard demon. The vaults in question are all set up to start with two `s and one 7, and the shuffle here swap positions based on glyph to thus put two 8s where the `s were and one ` where the 7 is, followed by defining ` back as . (floor), later on. With SHUFFLE (or e.shuffle()), /s serve as set dividers of equal weighting: with two of one arrangement and one of another arrangement, Crawl will choose the 7s arrangement 2/3 times and 8s 1/3 times. Thus, to reiterate simply enough, the vault will place a singular ice fiend 2/3s of the time and two blizzard demons 1/3 of the time. (Thus concludes today's convoluted vault syntax lesson.)
You've probably just gotten lucky in not getting any ice fiends, unless I've somehow completely screwed things up.
Arguments could probably be made over needing more blizzard demons to equate or it being more fun to fight an ice fiend instead of two blizzard demons in an ice cave, whatever, ice caves are limited in capacities as stands without massive cheats like volcanoes.