Page 1 of 1

### XP given by popcorn monsters

Posted: Friday, 15th May 2020, 19:26
DCSS has a lot of unthreatening monster encounters, commonly called "popcorn". I'm interested in the following questions. At any point in the game:

• What proportion of monsters generated are popcorn?
• How much XP do these popcorn monsters give, as a proportion of the total XP?

First, we have to define "popcorn". There's no universal definition, of course. I use the following arbitrary, but fairly reasonable definition:

Look at all the monsters you've killed so far and sort them by XP value. Calculate a "threshold" as the 80th percentile. Any generated monster in the future which gives less XP than this threshold is popcorn.

[I did some sanity checks that this definition makes sense. If anything, it undercounts popcorn. Details under spoiler tag.]

Spoiler: show
Some example of popcorn monsters at various depths, using the above criterion:
D:2 bat
D:3 orc
D:4 dart slug
D:6 hound zombie
D:7 orc priest
D:8 orc wizard
D:9 crimson imp
D:10 bullfrog
Orc:1 centaur
Orc:2 ogre

The following graph looks at a sample HuBe run up until Orc:2. It shows how many popcorn monsters are generated, and how much XP is retained if these monsters are removed from the pool.
[Edit: X-axis shows the number of monsters killed so far]

As you can see, anywhere from a quarter to a half of monsters are popcorn, and these monsters give negligible XP.

Old thread giving some practical suggestions to reduce the popcorn monsters.

### Re: XP given by popcorn monsters

Posted: Friday, 15th May 2020, 23:53
What is on the x-axis?

Sorry if I'm just being dense here.

### Re: XP given by popcorn monsters

Posted: Saturday, 16th May 2020, 01:08
Surely at least 80% of monsters are popcorn?
I'm also confused by the x-axis. What's happening at 325 au?

### Re: XP given by popcorn monsters

Posted: Saturday, 16th May 2020, 03:21
Seems like if you use XP to determine what is popcorn then draw conclusions about changes in XP by removing popcorn, you will get inherently biased results.

Not that the results are necessarily wrong, but it would be nice to see some other method of determining what is popcorn like maybe how often players die to that monster at that dungeon level.

### Re: XP given by popcorn monsters

Posted: Saturday, 16th May 2020, 06:28
Replies inline:
vt wrote:What is on the x-axis?

Sorry if I'm just being dense here.

Sorry, I forgot to label the axes. X-axis is the number of monsters killed so far in the game.

Kramin42 wrote:Seems like if you use XP to determine what is popcorn then draw conclusions about changes in XP by removing popcorn, you will get inherently biased results.

Not that the results are necessarily wrong, but it would be nice to see some other method of determining what is popcorn like maybe how often players die to that monster at that dungeon level.

It's not clear what you mean by "inherently biased", but it is not true that all XP-based systems will give the same kind of graph. I have made this point before, but I'll make it again here.

DCSS's XP system is very top-heavy. For instance, an Ogre gives a hundred times more XP than a goblin. So, if we remove half the goblins in the game, we remove half the monsters in the game, but barely touch the XP in the game. That's why speedrunners aren't too underleveled even when they skip all the content in the game.

One can easily imagine XP systems which are not so top-heavy. In those systems, removing popcorn will drastically change the amount of XP in the game.

To defend the use of XP to define "popcorn" in a bit more in detail: the XP value of a monster ("exper_value" function) includes attempts to determine the "difficulty" of a monster, using some heuristics: like "what HD it is", "is it a spellcaster", etc. These heuristics are not perfect of course, but they are a reasonable basis. Some more elaboration in this thread.

The spoiler text includes some examples of what kind of monsters are considered "popcorn", using the criteria above. They all seem reasonable to me.

### Re: XP given by popcorn monsters

Posted: Saturday, 16th May 2020, 06:41
bel wrote:For instance, an Ogre gives a hundred times more XP than a goblin.
I suspect you came to this conclusion by checking the "XP:" value given by monster (Gretell/Cerebot). Monster XP is actually based on the specific monster's max HP, which is randomized for most monsters. Although monster will report that a goblin gives 1 XP, that is only true for goblins with 3 max HP; the 4 and 5 max HP goblins give 2 XP. So on average, an ogre gives more like 70 times as much experience as a goblin.

This might seem nitpicky but I feel that if you're going to try to answer these questions about XP you should make sure the XP values you're using are correct.

### Re: XP given by popcorn monsters

Posted: Saturday, 16th May 2020, 06:43
I got the XP values directly from the game. I modded my local copy of DCSS to dump all the monster deaths and XP obtained to the morgue file, then I used a python script to parse the morgue.

Here's the morgue file:
Code:
` Dungeon Crawl Stone Soup version 0.25-a0-1080-g72af00c55a (tiles) character file.Game seed: 18413716777052311302, levelgen mode: deterministicpopcorn the Carver (Human Berserker)               Turns: 18462, Time: 00:54:32Health: 96/96      AC: 20    Str: 24    XL:     12   Next: 75%Magic:  17/17      EV: 11    Int:  7    God:    Trog [*****.]Gold:   1052       SH:  0    Dex: 18    Spells: 11/11 levels leftrFire    . . .     SeeInvis .   R - +4 great swordrCold    + . .     Gourm    .   (shield currently unavailable)rNeg     . . .     Faith    .   w - +2 plate armour {rC+}rPois    +         Spirit   .   (no helmet)rElec    .         Reflect  .   (no cloak)rCorr    .         Harm     .   Z - +0 pair of glovesMR       .....                  G - +2 pair of bootsStlth    ..........             (no amulet)HPRegen  0.26/turn              p - ring of poison resistanceMPRegen  0.15/turn              O - +6 ring of dexterity@: no status effectsA: no striking featuresa: Berserk, Trog's Hand, Brothers in Arms, Renounce ReligionYou are on level 2 of the Orcish Mines.You worship Trog.Trog is extremely pleased with you.You are hungry.You have visited 2 branches of the dungeon, and seen 12 of its levels.You have collected 1615 gold pieces.You have spent 563 gold pieces at shops.Inventory:Hand Weapons a - a +0 demon blade b - a +0 shortbow J - the +5 rapier "Goameh" {freeze, rElec}   (You found it on level 7 of the Dungeon)         It has been specially enchanted to freeze those struck by it, causing extra   injury to most foes and up to half again as much damage against particularly   susceptible opponents. It can also slow down cold-blooded creatures.      It insulates you from electricity. R - a +4 great sword (weapon) X - an arbalestMissiles m - 17 boomerangs (quivered) u - 3 boomerangs of dispersal x - 77 sling bullets z - 43 bolts A - 107 arrows P - 2 silver boomerangs S - a throwing net T - 3 curare-tipped dartsArmour i - +0 steam dragon scales s - a +0 chain mail w - a +2 plate armour of cold resistance (worn) D - a +1 leather armour of cold resistance G - a +2 pair of boots (worn) H - a +0 plate armour of poison resistance K - the +0 pair of gloves of the Blind Marksman {rElec rC- Str+3 Int-5}   (You found it on level 8 of the Dungeon)         It affects your strength (+3).   It affects your intelligence (-5).   It makes you vulnerable to cold.   It insulates you from electricity.      If you switch to wearing this armour, your AC will remain unchanged. Z - a +0 pair of gloves (worn)Jewellery p - a ring of poison resistance (left hand) C - an uncursed ring of resist corrosion O - a +6 ring of dexterity (right hand)Wands d - a wand of flame (27) l - a wand of iceblast (1) q - a wand of polymorph (10) E - a wand of digging (9) U - a wand of enslavement (5)Scrolls e - 3 scrolls of fog f - a scroll labeled DOWEADWIONK j - 4 scrolls of remove curse k - 3 scrolls labeled TOGIK ZISHU r - 3 scrolls of blinking t - 2 scrolls labeled MILUUX IBESK v - 3 scrolls of teleportation F - a scroll labeled SURROS HARGH M - 5 scrolls of magic mappingPotions g - a potion of invisibility h - 3 potions of curing n - a potion of flight o - a potion of might y - 3 potions of haste B - a potion of resistance L - 2 metallic amethyst potions N - 2 orange potions Q - a bubbling amethyst potion V - a yellow potion W - a bubbling clear potionComestibles c - 25 rations   Skills: + Level 9.5 Fighting * Level 12.7 Long Blades + Level 8.5 Armour + Level 5.9 Dodging * Level 7.9 EvocationsYou have 11 spell levels left.You don't know any spells.Your spell library contains the following spells: Spells                   Type           Power        Failure   Level  Hunger Poisonous Vapours        Pois/Air       #.....       100%        2    ###.... Conjure Flame            Conj/Fire      #.......     100%        3    ####... Mephitic Cloud           Conj/Pois/Air  #.......     100%        3    ####... Freezing Cloud           Conj/Ice/Air   #.........   100%        6    ####### Ring of Flames           Chrm/Fire      #.........   100%        7    #######Dungeon Overview and Level AnnotationsBranches:Dungeon (10/15)            Temple (0/1) D:4             Orc (2/2) D:10    Elf (0/3) Orc:2         Lair: D:8-11      Altars:AshenzariElyvilonFedhasGozagMakhlebOkawaruQazlalSif MunaVehumetWu JianXomZinThe Shining OneShops:D:6 *   D:8 *   Orc:1 }   Orc:2 *[[(Message HistoryYou see here a +0 club.Done exploring.Unknown command.Search for what [Enter for "gift", or ? for help]? shopUnknown command.Search for what [Enter for "shop", or ? for help]? orc:2 && shopThere is an entrance to Falab's Antique Armour Boutique here.You can access your shopping list by pressing '\$'.There is an entrance to Miull's Assorted Antiques here.f - a scroll labeled DOWEADWIONKL - 2 metallic amethyst potions (gained 1)N - 2 orange potions (gained 1)Thank you for shopping at Miull's Assorted Antiques!You can access your shopping list by pressing '\$'.Unknown command.Unknown command.You are feeling hungry.There is an entrance to Ciach's Antique Armour Emporium here.Unknown command.Save game and exit? .#####         ##.......##..# #...##          #∩.#.##...##.###....#         ##..#..##..##..##...##         #∩.#....#...##.##...#          #..#........##.###.##          #.#.........##.##...#          #.#......#####.##..##          #...............).##           #.#......#####.######          #.#.........##.###..##         #..#........##.##....#         #@.#....#...##.##....#         ##..#..##..##..##....##         #∩.#.##...##.###.....#         ##.......##..# #....##          ##.....##..## #..###      ###   #####....##  #...#      ##.#       ######   #..##    ###..##################..#    ##.....#..##...........).##    #........................##    ##........................#    #.......................There are no monsters in sight!Vanquished Creatures  2 orc high priests (Orc:2)  3 orc knights  6 orc sorcerers (Orc:2)  Joseph (D:7)  Maggie (D:6)  4 trolls  3 hippogriffs  Sigmund (D:2)  A human (D:10)  15 yaks  A hungry ghost (D:9)  4 hogs (D:10)  A warg (Orc:1)  2 water moccasins  4 sky beasts  5 ice beasts  A black bear (D:10)  7 ogres  8 orc warriors  3 phantoms  A necrophage (D:8)  4 centaurs  2 big kobolds  A bullfrog (D:9)  6 scorpions  4 wights (D:8)  3 crimson imps  2 bullfrog zombies (D:8)  A centaur skeleton (D:7)  A centaur zombie (D:6)  2 bullfrog skeletons  4 jellies  11 orc priests  25 orc wizards  3 hounds  An iguana (D:5)  6 worker ants  A killer bee zombie (D:10)  A hound zombie (D:5)  3 hound skeletons  14 gnolls  12 adders  3 shadow imps  2 adder zombies (D:6)  2 adder skeletons (D:6)  4 worms  3 dart slugs  5 leopard geckos  51 orcs  A giant cockroach (D:3)  6 goblins  6 hobgoblins  17 jackals  8 quokkas  5 ball pythons  A ball python zombie (D:5)  6 bats  3 frilled lizards  15 kobolds  5 rats324 creatures vanquished.Vanquished Creatures (collateral kills)  An orc high priest (Orc:2)  An orc knight (Orc:2)  A troll (Orc:1)3 creatures vanquished.Grand Total: 327 creatures vanquishedNotesTurn   | Place    | Note-------+----------+-------------------------------------------     0 | D:1      | popcorn the Human Berserker began the quest for the Orb.     0 | D:1      | Reached XP level 1. HP: 18/18 MP: 1/1    25 | D:1      | Killed a hobgoblin got XP: 2   142 | D:1      | Killed a goblin got XP: 2   151 | D:1      | Killed a jackal got XP: 2   153 | D:1      | Killed a jackal got XP: 2   154 | D:1      | Killed a jackal got XP: 2   154 | D:1      | Reached XP level 2. HP: 15/24 MP: 2/2   335 | D:1      | Killed a bat got XP: 1   348 | D:1      | Killed a frilled lizard got XP: 1   402 | D:1      | Killed a goblin got XP: 2   406 | D:1      | Killed a rat got XP: 1   413 | D:1      | Killed a hobgoblin got XP: 2   418 | D:1      | Killed a kobold got XP: 1   578 | D:1      | Killed a hobgoblin got XP: 2   607 | D:1      | Killed a rat got XP: 1   608 | D:1      | Killed a rat got XP: 1   654 | D:1      | Killed a kobold got XP: 1  1033 | D:2      | Killed a kobold got XP: 1  1056 | D:2      | Killed a goblin got XP: 2  1059 | D:2      | Killed a jackal got XP: 2  1075 | D:2      | Killed a jackal got XP: 2  1075 | D:2      | Reached XP level 3. HP: 21/29 MP: 3/3  1079 | D:2      | Reached ** piety under Trog  1079 | D:2      | Killed a jackal got XP: 2  1221 | D:2      | Killed a rat got XP: 1  1303 | D:2      | Killed a bat got XP: 2  1311 | D:2      | Killed a quokka got XP: 2  1313 | D:2      | Killed a dart slug got XP: 4  1650 | D:2      | Killed an adder got XP: 13  1650 | D:2      | Reached skill level 4 in Long Blades  1780 | D:2      | Killed a worm got XP: 5  1927 | D:2      | Noticed Sigmund  1933 | D:2      | Killed a bat got XP: 1  2052 | D:2      | Killed a worm got XP: 5  2307 | D:2      | Killed a worm got XP: 5  2307 | D:2      | Reached XP level 4. HP: 30/35 MP: 4/4  2365 | D:2      | Killed a dart slug got XP: 4  2429 | D:2      | Killed a hobgoblin got XP: 2  2508 | D:2      | Killed a goblin got XP: 2  2538 | D:2      | Killed a quokka got XP: 2  2554 | D:2      | Killed a goblin got XP: 2  2562 | D:2      | Killed a bat got XP: 2  2619 | D:2      | Killed Sigmund  2619 | D:2      | Killed Sigmund got XP: 212  2619 | D:2      | Reached skill level 5 in Long Blades  2619 | D:2      | Reached XP level 5. HP: 43/43 MP: 5/5  2619 | D:2      | Reached XP level 6. HP: 49/49 MP: 6/6  2680 | D:3      | Found an iron altar of Okawaru.  2683 | D:3      | Killed a hobgoblin got XP: 2  2685 | D:3      | Killed a bat got XP: 2  2705 | D:3      | Killed a worm got XP: 5  2707 | D:3      | Killed a giant cockroach got XP: 2  2747 | D:3      | Killed a leopard gecko got XP: 3  2931 | D:3      | Killed an orc got XP: 3  3051 | D:3      | Found a burning altar of Makhleb.  3053 | D:3      | Killed a ball python got XP: 1  3071 | D:3      | Killed a jackal got XP: 2  3081 | D:3      | Killed a jackal got XP: 2  3086 | D:3      | Killed a jackal got XP: 2  3095 | D:3      | Killed a jackal got XP: 2  3107 | D:3      | Killed a frilled lizard got XP: 1  3147 | D:3      | Killed a bat got XP: 2  3160 | D:3      | Killed a kobold got XP: 1  3224 | D:3      | Killed an orc got XP: 3  3227 | D:3      | Killed a frilled lizard got XP: 1  3255 | D:3      | Killed an orc got XP: 3  3267 | D:3      | Killed an orc got XP: 3  3277 | D:3      | Killed an orc got XP: 3  3281 | D:3      | Killed an orc got XP: 3  3288 | D:3      | Killed an adder got XP: 13  3290 | D:3      | Killed a ball python got XP: 2  3536 | D:3      | Killed a ball python got XP: 1  3703 | D:3      | Killed an orc got XP: 3  3706 | D:3      | Killed an orc got XP: 3  3740 | D:3      | Killed an orc got XP: 3  3767 | D:3      | Killed an orc priest got XP: 43  3949 | D:3      | Found a glowing golden altar of the Shining One.  3964 | D:3      | Killed an orc got XP: 3  4070 | D:3      | Killed an adder got XP: 13  4148 | D:3      | Killed a dart slug got XP: 4  4340 | D:3      | Reached *** piety under Trog  4340 | D:3      | Killed a goblin got XP: 2  4343 | D:3      | Killed an orc wizard got XP: 43  4343 | D:3      | Reached skill level 6 in Long Blades  4344 | D:3      | Killed an orc got XP: 3  4350 | D:3      | Killed a hobgoblin got XP: 2  4363 | D:3      | Killed an orc got XP: 3  4377 | D:3      | Killed an orc got XP: 3  4507 | D:3      | Killed an orc got XP: 3  4508 | D:3      | Killed a rat got XP: 1  4643 | D:4      | Killed an adder got XP: 14  4681 | D:4      | Found a staircase to the Ecumenical Temple.  4691 | D:4      | Killed an orc got XP: 3  4696 | D:4      | Killed a leopard gecko got XP: 3  4790 | D:4      | Killed a quokka got XP: 2  4910 | D:4      | Killed an orc wizard got XP: 40  4910 | D:4      | Reached XP level 7. HP: 43/55 MP: 7/7  4997 | D:4      | Killed an adder got XP: 14  5023 | D:4      | Killed an orc got XP: 3  5143 | D:4      | Killed an ogre got XP: 127  5235 | D:4      | Killed an orc got XP: 3  5264 | D:4      | Found an opulent altar of Gozag.  5295 | D:4      | Found a shattered altar of Ashenzari.  5457 | D:4      | Killed an orc got XP: 3  5457 | D:4      | Reached skill level 5 in Fighting  5472 | D:4      | Killed an orc got XP: 3  5476 | D:4      | Killed an orc wizard got XP: 35  5504 | D:4      | Killed an orc got XP: 3  5516 | D:4      | Killed an orc wizard got XP: 35  5707 | D:4      | Killed an adder got XP: 13  5872 | D:4      | Found a white marble altar of Elyvilon.  5882 | D:5      | Entered Level 5 of the Dungeon  5902 | D:5      | Killed an orc got XP: 3  5909 | D:5      | Killed a jackal got XP: 2  5922 | D:5      | Killed a worker ant got XP: 32  5950 | D:5      | Killed a hound skeleton got XP: 18  6009 | D:5      | Killed an orc got XP: 3  6020 | D:5      | Killed an orc wizard got XP: 42  6028 | D:5      | Killed an orc got XP: 3  6089 | D:5      | Killed an orc got XP: 3  6122 | D:5      | Killed an orc got XP: 3  6127 | D:5      | Killed an orc got XP: 3  6155 | D:5      | Reached **** piety under Trog  6155 | D:5      | Killed a worker ant got XP: 33  6202 | D:5      | Killed an orc got XP: 3  6208 | D:5      | Killed an adder got XP: 13  6209 | D:5      | Killed a hound zombie got XP: 20  6224 | D:5      | Killed a shadow imp got XP: 12  6224 | D:5      | Reached skill level 7 in Long Blades  6233 | D:5      | Killed a hound got XP: 42  6233 | D:5      | Reached XP level 8. HP: 52/62 MP: 8/8  6318 | D:5      | Killed a scorpion got XP: 70  6347 | D:5      | Killed a crimson imp got XP: 48  6612 | D:5      | Killed a jelly got XP: 43  6637 | D:5      | Killed a water moccasin got XP: 147  6696 | D:5      | Killed an adder got XP: 13  6788 | D:5      | Killed a hound skeleton got XP: 19  6810 | D:5      | Killed a ball python got XP: 2  6868 | D:5      | Found a radiant altar of Vehumet.  6875 | D:5      | Killed a kobold got XP: 1  6877 | D:5      | Killed an orc got XP: 3  7070 | D:5      | Killed a jackal got XP: 2  7074 | D:5      | Killed a jackal got XP: 2  7085 | D:5      | Killed a hound got XP: 45  7087 | D:5      | Killed an adder got XP: 13  7224 | D:5      | Killed a gnoll got XP: 15  7379 | D:5      | Killed a scorpion got XP: 72  7398 | D:5      | Killed a ball python zombie got XP: 1  7441 | D:5      | Killed a gnoll got XP: 14  7444 | D:5      | Killed a gnoll got XP: 15  7449 | D:5      | Killed a gnoll got XP: 14  7554 | D:5      | Killed a jackal got XP: 2  7562 | D:5      | Killed a jackal got XP: 2  7570 | D:5      | Killed a jackal got XP: 2  7575 | D:5      | Killed a jackal got XP: 2  7629 | D:5      | Killed an iguana got XP: 36  7633 | D:5      | Killed a gnoll got XP: 14  7680 | D:5      | Killed a jelly got XP: 42  7680 | D:5      | Reached skill level 8 in Long Blades  7688 | D:5      | Killed a gnoll got XP: 15  7691 | D:5      | Killed a gnoll got XP: 13  7700 | D:5      | Killed a gnoll got XP: 14  7999 | D:6      | Killed a scorpion got XP: 66  8010 | D:6      | Killed an ice beast got XP: 129  8012 | D:6      | Killed a centaur got XP: 112  8012 | D:6      | Reached XP level 9. HP: 69/69 MP: 9/9  8014 | D:6      | Killed a ball python got XP: 1  8116 | D:6      | Killed an adder skeleton got XP: 5  8153 | D:6      | Killed an adder zombie got XP: 6  8168 | D:6      | Killed a hound skeleton got XP: 18  8234 | D:6      | Killed a jelly got XP: 54  8296 | D:6      | Killed a phantom got XP: 124  8445 | D:6      | Killed an orc got XP: 3  8456 | D:6      | Killed an orc wizard got XP: 42  8466 | D:6      | Killed an orc wizard got XP: 40  8469 | D:6      | Killed an orc got XP: 3  8471 | D:6      | Killed an orc got XP: 3  8609 | D:6      | Killed a centaur zombie got XP: 44  8614 | D:6      | Killed an adder zombie got XP: 5  8646 | D:6      | Noticed Maggie  8658 | D:6      | Killed a quokka got XP: 2  8664 | D:6      | Killed Maggie  8664 | D:6      | Killed Maggie got XP: 398  8664 | D:6      | Reached skill level 9 in Long Blades  8664 | D:6      | Reached skill level 5 in Armour  8711 | D:6      | Killed a leopard gecko got XP: 3  8847 | D:6      | Found Reaj Ziahoecw's General Store.  8895 | D:6      | Killed a gnoll got XP: 15  8899 | D:6      | Killed a gnoll got XP: 15  8903 | D:6      | Killed a gnoll got XP: 15  9052 | D:6      | Found a stormy altar of Qazlal.  9056 | D:6      | Found a blossoming altar of Fedhas.  9075 | D:6      | Killed an adder skeleton got XP: 5  9249 | D:6      | Killed a centaur got XP: 119  9354 | D:6      | Killed an orc wizard got XP: 36  9370 | D:6      | Killed an orc got XP: 3  9444 | D:7      | Noticed a hippogriff  9464 | D:6      | Killed a hippogriff  9464 | D:6      | Killed a hippogriff got XP: 239  9587 | D:7      | Killed an ice beast got XP: 124  9775 | D:7      | Killed a hound got XP: 42  9813 | D:7      | Found an ornate altar of the Wu Jian Council.  9849 | D:7      | Killed an ogre got XP: 116  9909 | D:7      | Reached ***** piety under Trog  9909 | D:7      | Killed a quokka got XP: 2  9977 | D:7      | Killed a scorpion got XP: 67 10069 | D:7      | Killed a worker ant got XP: 32 10171 | D:7      | Killed an ice beast got XP: 136 10277 | D:7      | Found a glowing golden altar of the Shining One. 10279 | D:7      | Noticed Joseph 10321 | D:7      | Killed Joseph 10321 | D:7      | Killed Joseph got XP: 466 10321 | D:7      | Reached skill level 10 in Long Blades 10321 | D:7      | Reached XP level 10. HP: 79/79 MP: 10/10 10388 | D:7      | Killed a centaur skeleton got XP: 45 10428 | D:7      | Killed a sky beast got XP: 139 10615 | D:7      | Killed a quokka got XP: 2 10622 | D:7      | Killed a crimson imp got XP: 52 10671 | D:7      | Killed a worker ant got XP: 36 10711 | D:7      | Killed a leopard gecko got XP: 3 10747 | D:7      | Killed a leopard gecko got XP: 3 10770 | D:7      | Killed a gnoll got XP: 14 10863 | D:7      | Got a dazzling rapier 10864 | D:7      | Identified the +5 rapier "Goameh" {freeze, rElec} (You                  | found it on level 7 of the Dungeon) 10887 | D:7      | Killed a gnoll got XP: 14 10903 | D:7      | Killed a gnoll got XP: 13 11033 | D:8      | Killed a bullfrog skeleton got XP: 43 11037 | D:8      | Killed a hippogriff got XP: 255 11037 | D:8      | Reached skill level 1 in Evocations 11041 | D:8      | Killed an adder got XP: 13 11044 | D:8      | Killed an ogre got XP: 113 11076 | D:8      | Killed an adder got XP: 13 11112 | D:8      | Killed a shadow imp got XP: 11 11115 | D:8      | Killed an ogre got XP: 121 11205 | D:8      | Got a pair of warped gloves 11211 | D:8      | Identified the cursed +0 pair of gloves of the Blind                  | Marksman {rElec rC- Str+3 Int-5} (You found it on level 8                  | of the Dungeon) 11234 | D:8      | Killed a worker ant got XP: 33 11240 | D:8      | Found Seozuy's General Store. 11243 | D:8      | Bought a scroll of fog for 28 gold pieces 11243 | D:8      | Bought a scroll of noise for 14 gold pieces 11250 | D:8      | Found a glowing silver altar of Zin. 11268 | D:8      | Killed a sky beast got XP: 127 11297 | D:8      | Found a shimmering altar of Xom. 11318 | D:8      | Found a shimmering blue altar of Sif Muna. 11335 | D:8      | Killed a necrophage got XP: 121 11375 | D:8      | Killed a bullfrog zombie got XP: 47 11423 | D:8      | Killed an orc wizard got XP: 36 11452 | D:8      | Killed an orc got XP: 3 11454 | D:8      | Killed an orc got XP: 3 11470 | D:8      | Killed a sky beast got XP: 133 11471 | D:8      | Killed an orc got XP: 3 11610 | D:8      | Killed a scorpion got XP: 66 11612 | D:8      | Killed an orc wizard got XP: 40 11621 | D:8      | Identified a scroll of acquirement 11656 | D:8      | Killed a wight got XP: 56 11726 | D:6      | Bought a +2 plate armour of cold resistance for 440 gold                  | pieces 11798 | D:8      | Killed a bullfrog zombie got XP: 49 11835 | D:8      | Killed a wight got XP: 56 11887 | D:8      | Killed a jelly got XP: 42 11918 | D:8      | Killed a wight got XP: 57 11950 | D:8      | Killed a wight got XP: 57 12085 | D:9      | Killed a phantom got XP: 129 12106 | D:9      | Killed a shadow imp got XP: 11 12141 | D:9      | Killed a hungry ghost got XP: 189 12159 | D:9      | Killed an ice beast got XP: 132 12192 | D:9      | Killed a scorpion got XP: 70 12203 | D:9      | Killed a worker ant got XP: 32 12218 | D:9      | Killed a yak got XP: 193 12222 | D:9      | Killed a yak got XP: 196 12229 | D:9      | Killed a yak got XP: 226 12229 | D:9      | Reached skill level 11 in Long Blades 12232 | D:9      | Killed a yak got XP: 213 12236 | D:9      | Killed a yak got XP: 220 12239 | D:9      | Killed a yak got XP: 199 12239 | D:9      | Reached XP level 11. HP: 42/86 MP: 13/13 12500 | D:9      | Killed a kobold got XP: 2 12508 | D:9      | Killed a kobold got XP: 1 12512 | D:9      | Killed a kobold got XP: 1 12512 | D:9      | Killed a kobold got XP: 2 12514 | D:9      | Killed a kobold got XP: 2 12525 | D:9      | Killed a kobold got XP: 1 12540 | D:9      | Killed a big kobold got XP: 97 12563 | D:9      | Killed a yak got XP: 206 12567 | D:9      | Killed a yak got XP: 193 12571 | D:9      | Killed a yak got XP: 220 12574 | D:9      | Killed a crimson imp got XP: 50 12643 | D:9      | Killed an adder got XP: 14 12736 | D:9      | Killed an orc priest got XP: 43 12739 | D:9      | Killed an orc got XP: 3 12742 | D:9      | Killed an orc got XP: 3 12743 | D:9      | Killed an orc got XP: 3 12747 | D:9      | Killed an orc wizard got XP: 42 12859 | D:9      | Killed a quokka got XP: 2 13074 | D:9      | Killed a centaur got XP: 112 13193 | D:9      | Killed a bullfrog got XP: 85 13363 | D:9      | Killed a quokka got XP: 2 13721 | D:10     | Entered Level 10 of the Dungeon 13795 | D:10     | Killed a hippogriff got XP: 232 13816 | D:10     | Killed a centaur got XP: 108 13876 | D:10     | Killed a kobold got XP: 2 13888 | D:10     | Killed a water moccasin got XP: 147 13895 | D:10     | Killed a black bear got XP: 128 13926 | D:10     | Killed a bullfrog skeleton got XP: 39 13951 | D:10     | Killed a kobold got XP: 1 13951 | D:10     | Killed a big kobold got XP: 100 13953 | D:10     | Killed a kobold got XP: 2 13960 | D:10     | Killed a kobold got XP: 2 13967 | D:10     | Killed a sky beast got XP: 124 14006 | D:10     | Killed an orc wizard got XP: 40 14006 | D:10     | Reached skill level 5 in Evocations 14011 | D:10     | Killed an orc got XP: 3 14017 | D:10     | Killed an orc wizard got XP: 35 14122 | D:10     | Killed a phantom got XP: 131 14148 | D:10     | Killed an orc warrior got XP: 124 14150 | D:10     | Killed an orc wizard got XP: 42 14152 | D:10     | Killed an orc got XP: 3 14280 | D:10     | Found a staircase to the Orcish Mines. 14294 | D:10     | Killed an ice beast got XP: 127 14330 | D:10     | Killed a hog got XP: 178 14337 | D:10     | Killed a human got XP: 207 14344 | D:10     | Killed a hog got XP: 196 14353 | D:10     | Killed a hog got XP: 196 14386 | D:10     | Killed a hog got XP: 189 14447 | D:10     | Killed a killer bee zombie got XP: 29 14456 | D:10     | Killed a yak got XP: 202 14462 | D:10     | Killed a yak got XP: 213 14466 | D:10     | Killed a yak got XP: 196 14476 | D:10     | Killed a yak got XP: 220 14479 | D:10     | Killed a yak got XP: 209 14486 | D:10     | Killed a yak got XP: 213 14750 | Gauntlet | Killed an ogre got XP: 0 14750 | Gauntlet | Killed an orc got XP: 0 14750 | Gauntlet | Killed an octopode got XP: 0 14750 | Gauntlet | Killed a halfling got XP: 0 14750 | Lair:6   | Killed an elf got XP: 0 14750 | Lair:6   | Killed an elf got XP: 0 14750 | Lair:6   | Killed a dwarf got XP: 0 14750 | Lair:6   | Killed an orc got XP: 0 14750 | Lair:6   | Killed an elf got XP: 0 14750 | Lair:6   | Killed a human got XP: 0 14750 | Lair:6   | Killed an elf got XP: 0 14750 | Lair:6   | Killed a human got XP: 0 14750 | Lair:6   | Killed an orc got XP: 0 14750 | Lair:6   | Killed an orc got XP: 0 14750 | Lair:6   | Killed an orc got XP: 0 14750 | Lair:6   | Killed a human got XP: 0 14750 | Lair:6   | Killed a human got XP: 0 14750 | Lair:6   | Killed a human got XP: 0 14750 | Orc:1    | Entered Level 1 of the Orcish Mines 14750 | Orc:1    | Found Myup's Gadget Boutique. 14753 | Orc:1    | Killed an orc priest got XP: 41 14756 | Orc:1    | Killed an orc wizard got XP: 35 14757 | Orc:1    | Killed an orc wizard got XP: 35 14781 | Orc:1    | Killed an ogre got XP: 125 14890 | Orc:1    | Killed a troll got XP: 348 14957 | Orc:1    | Killed an orc wizard got XP: 40 14966 | Orc:1    | Killed a troll got XP: 307 14970 | Orc:1    | Killed a troll got XP: 317 14970 | Orc:1    | Killed an orc got XP: 3 14972 | Orc:1    | Killed an orc priest got XP: 41 14982 | Orc:1    | Killed an orc got XP: 3 15175 | Orc:1    | Noticed an orc knight 15227 | Orc:1    | Killed a warg got XP: 178 15228 | Orc:1    | Killed an orc knight 15228 | Orc:1    | Killed an orc knight got XP: 678 15229 | Orc:1    | Killed a troll got XP: 224 15253 | Orc:1    | a deep troll got XP: 0 (ally) was killed 15313 | Orc:1    | Killed an orc got XP: 3 15553 | Orc:1    | Killed an orc got XP: 3 15748 | Orc:2    | Entered Level 2 of the Orcish Mines 15758 | Orc:2    | Noticed an orc sorcerer 15771 | Orc:2    | Killed an orc sorcerer 15771 | Orc:2    | Killed an orc sorcerer got XP: 589 15771 | Orc:2    | Reached skill level 12 in Long Blades 15771 | Orc:2    | Reached skill level 5 in Dodging 15771 | Orc:2    | Reached XP level 12. HP: 48/95 MP: 16/16 15773 | Orc:2    | Killed an ogre got XP: 121 15791 | Orc:2    | Killed an orc priest got XP: 41 15798 | Orc:2    | Killed an orc wizard got XP: 40 15802 | Orc:2    | Killed an orc got XP: 3 15804 | Orc:2    | Killed an orc got XP: 3 15806 | Orc:2    | Killed an orc got XP: 3 15979 | Orc:2    | Killed an orc got XP: 3 15980 | Orc:2    | Killed an orc got XP: 3 15981 | Orc:2    | Killed an orc priest got XP: 43 15982 | Orc:2    | Killed an orc wizard got XP: 35 15992 | Orc:2    | Killed an orc wizard got XP: 36 16085 | Orc:2    | Received a gift from Trog 16085 | Orc:2    | Killed a troll got XP: 317 16190 | Orc:2    | Killed an orc got XP: 3 16200 | Orc:2    | Killed an orc got XP: 3 16204 | Orc:2    | Killed an ogre got XP: 121 16206 | Orc:2    | Killed an orc priest got XP: 41 16212 | Orc:2    | Killed an orc warrior got XP: 125 16215 | Orc:2    | Killed an orc wizard got XP: 35 16528 | Orc:2    | Found a staircase to the Elven Halls. 16693 | Orc:2    | Killed an orc sorcerer got XP: 532 16693 | Orc:2    | Killed a chaos spawn got XP: 0 16876 | Orc:2    | Noticed an orc high priest 16900 | Orc:2    | Killed an orc wizard got XP: 40 16902 | Orc:2    | Noticed a sun demon 16904 | Orc:2    | Killed a rust devil got XP: 0 16906 | Orc:2    | Noticed a soul eater 16906 | Orc:2    | Killed an orc high priest 16906 | Orc:2    | Killed an orc high priest got XP: 442 16906 | Orc:2    | Killed a soul eater got XP: 0 16906 | Orc:2    | Killed a ynoxinul got XP: 0 16908 | Orc:2    | Killed an orc knight got XP: 311 16909 | Orc:2    | a two-headed ogre got XP: 0 (ally) was killed 16915 | Orc:2    | Killed a sun demon got XP: 0 16916 | Orc:2    | Killed an ice devil got XP: 0 16918 | Orc:2    | Killed a red devil got XP: 0 17149 | Orc:2    | Killed an orc sorcerer got XP: 554 17170 | Orc:2    | Killed a neqoxec got XP: 0 17170 | Orc:2    | Killed a crimson imp got XP: 0 17170 | Orc:2    | Killed a shadow imp got XP: 0 17182 | Orc:2    | Killed an orc priest got XP: 36 17189 | Orc:2    | Killed an orc sorcerer got XP: 532 17290 | Orc:2    | Killed an orange demon got XP: 0 17297 | Orc:2    | Killed an orange demon got XP: 0 17338 | Orc:2    | Killed an orc sorcerer got XP: 554 17342 | Orc:2    | Killed an orc sorcerer got XP: 601 17667 | Orc:2    | Killed an orc priest got XP: 46 17715 | Orc:2    | Killed an orc knight got XP: 656 17769 | Orc:2    | Killed an orc warrior got XP: 141 17772 | Orc:2    | Killed an orc priest got XP: 41 17786 | Orc:2    | Noticed an orc high priest 17822 | Orc:2    | Noticed a sun demon 17849 | Orc:2    | Killed a chaos spawn got XP: 0 17856 | Orc:2    | Killed a sun demon got XP: 0 17858 | Orc:2    | Killed a smoke demon got XP: 0 17881 | Orc:2    | Killed an orc high priest 17881 | Orc:2    | Killed an orc high priest got XP: 798 17947 | Orc:2    | Killed an orc warrior got XP: 136 17983 | Orc:2    | Killed an orc wizard got XP: 35 18019 | Orc:2    | Killed an orc warrior got XP: 137 18087 | Orc:2    | Noticed an orc high priest 18091 | Orc:2    | Killed an ufetubus got XP: 0 18091 | Orc:2    | Killed an ufetubus got XP: 0 18092 | Orc:2    | Killed an orc wizard got XP: 35 18093 | Orc:2    | Killed an ufetubus got XP: 0 18094 | Orc:2    | Killed an orc high priest 18094 | Orc:2    | Killed an orc high priest got XP: 855 18094 | Orc:2    | Killed a ynoxinul got XP: 0 18094 | Orc:2    | Killed an ufetubus got XP: 0 18094 | Orc:2    | Killed an ufetubus got XP: 0 18094 | Orc:2    | Killed an ufetubus got XP: 0 18094 | Orc:2    | Killed an ufetubus got XP: 0 18094 | Orc:2    | Killed an ufetubus got XP: 0 18094 | Orc:2    | Killed a rust devil got XP: 0 18094 | Orc:2    | Killed an orange demon got XP: 0 18154 | Orc:2    | Killed an orc wizard got XP: 35 18160 | Orc:2    | Killed an orc warrior got XP: 136 18172 | Orc:2    | Killed an orc warrior got XP: 136 18184 | Orc:2    | Killed an orc knight got XP: 607 18303 | Orc:2    | Killed an orc warrior got XP: 130 18353 | Orc:2    | Killed an orc priest got XP: 43 18367 | Orc:2    | Found Opo Citefe's Weapon Boutique. 18374 | Orc:2    | Found Miull's Assorted Antiques. 18375 | Orc:2    | Found Falab's Antique Armour Boutique. 18376 | Orc:2    | Found Ciach's Antique Armour Emporium. 18454 | Orc:2    | Bought a scroll labeled DOWEADWIONK for 29 gold pieces 18454 | Orc:2    | Bought a metallic amethyst potion for 26 gold pieces 18454 | Orc:2    | Bought an orange potion for 26 gold piecesIllustrated notesSkill      XL: |  1  2  3  4  5  6  7  8  9 10 11 12 |---------------+-------------------------------------+-----Long Blades    |        4  5     6  7  8 10 11 12    | 12.7Fighting       |           4        5  6  7  8  9    |  9.5Armour         |                    3  4  6  7     8 |  8.5Evocations     |                             3  6  7 |  7.9Dodging        |                             3  5    |  5.9Action                   |  1- 3 |  4- 6 |  7- 9 | 10-12 || total-------------------------+-------+-------+-------+-------++-------Melee: Falchion          |   106 |   176 |   569 |    51 ||   902       Great sword       |       |       |       |   304 ||   304       Rapier            |       |       |       |    72 ||    72       Demon blade       |       |       |       |   187 ||   187 Fire: Shortbow          |       |       |     9 |       ||     9Throw: Boomerang         |       |       |    13 |    22 ||    35       Dart              |       |       |       |     1 ||     1Invok: Berserk           |     2 |     4 |     6 |     5 ||    17       Trog's Hand       |       |     1 |       |     3 ||     4       Brothers in Arms  |       |       |       |     2 ||     2Evoke: Wand              |       |       |    12 |     5 ||    17  Use: Scroll            |       |     6 |     2 |     8 ||    16       Potion            |       |     2 |     1 |       ||     3 Stab: Sleeping          |       |     1 |       |       ||     1       Distracted        |       |       |       |     1 ||     1       Paralysed         |       |       |       |     1 ||     1  Eat: Chunk             |     4 |    11 |    22 |    30 ||    67       Ration            |     1 |       |       |     2 ||     3Armor: Animal skin       |    27 |    17 |       |       ||    44       Scale mail        |       |    45 |    33 |       ||    78       Ring mail         |       |     6 |       |       ||     6       Chain mail        |       |       |   255 |    44 ||   299       Plate armour      |       |       |       |   263 ||   263Dodge: Dodged            |    59 |   105 |   181 |   192 ||   537Rpst.: Falchion          |    21 |    35 |    44 |     4 ||   104       Great sword       |       |       |       |    27 ||    27       Demon blade       |       |       |       |    14 ||    14Table legend: A = Non-vault XP B = Vault XP C = Vault XP percentage of total XP D = Non-vault monster count E = Vault monster count F = Vault count percentage of total count                 A         B        C        D         E        F               +---------+---------+-------+---------+---------+-------      Total |   14703 |    9360 |  38.9 |     283 |      44 |  13.5            +---------+---------+-------+---------+---------+-------        D:1 |      23 |       0 |   0.0 |      15 |       0 |   0.0        D:2 |      61 |     212 |  77.7 |      20 |       1 |   4.8        D:3 |     194 |       0 |   0.0 |      38 |       0 |   0.0        D:4 |     301 |       0 |   0.0 |      15 |       0 |   0.0        D:5 |     707 |     209 |  22.8 |      37 |       8 |  17.8        D:6 |    1035 |     470 |  31.2 |      22 |       5 |  18.5        D:7 |     840 |     466 |  35.7 |      17 |       1 |   5.6        D:8 |    1498 |       0 |   0.0 |      24 |       0 |   0.0        D:9 |    2894 |       0 |   0.0 |      33 |       0 |   0.0       D:10 |    2672 |     966 |  26.6 |      26 |       5 |  16.1      Orc:1 |    2381 |       0 |   0.0 |      16 |       0 |   0.0      Orc:2 |    2097 |    7037 |  77.0 |      20 |      24 |  54.5            +---------+---------+-------+---------+---------+-------`

### Re: XP given by popcorn monsters

Posted: Monday, 18th May 2020, 06:05
Kramin42 wrote:[...] but it would be nice to see some other method of determining what is popcorn like maybe how often players die to that monster at that dungeon level.

I thought a little bit more about this, but there are several complications in using this method:

• The monster which got the killing blow is not necessarily the monster which was "responsible" in killing the player.
• Monsters have widely varying generation rates, so if 10 orcs and 1 ogre generate, the orcs could have an artificially high killing rate just by their sheer numbers.

I do not see any easy way to get around these problems.

### Re: XP given by popcorn monsters

Posted: Monday, 18th May 2020, 16:38
bel wrote:
Kramin42 wrote:[...] but it would be nice to see some other method of determining what is popcorn like maybe how often players die to that monster at that dungeon level.

I thought a little bit more about this, but there are several complications in using this method:

• The monster which got the killing blow is not necessarily the monster which was "responsible" in killing the player.
• Monsters have widely varying generation rates, so if 10 orcs and 1 ogre generate, the orcs could have an artificially high killing rate just by their sheer numbers.

I do not see any easy way to get around these problems.

The second could be compensated for using objstat data. Not sure if there's anything to be done about the first one (though I'm not sure it's especially significant.)

### Re: XP given by popcorn monsters

Posted: Wednesday, 27th May 2020, 19:06
I used a different methodology to calculate popcorn as suggested by Kramin42 and byrel above. In particular, I did the following:

I looked at monster kills on every floor using Sequell (excluding boring games). So, suppose hobgoblin has about 8000 kills on D:1. I divided this number by the total deaths on the floor. This is the "raw danger" of the monster.

I divided the "raw danger" by the number of the monsters generated, on average, on the floor (using objstat data). This is the "normalized danger".
Spoiler: show
Unfortunately objstat data lumps together all zombies and skeletons. So I excluded these monsters from my calculation. All calculations are for version 0.24.

I then set an arbitrary threshold for what constitutes popcorn: "the normalized danger of the monster should be less than 0.75".
Spoiler: show
I determined this threshold by looking at various monsters and seeing what looked reasonable. Results were similar to the methodology above.

Rest of the methodology is the same as above. To repeat: At any point in the game, suppose you've killed some monsters. Look at all the monsters in the future, and determine how many of them are popcorn, and calculate how much XP they give.

Here's a graph: as you can see, about half of the monsters are popcorn, and removing the popcorn retains about 85% of the total XP.

### Re: XP given by popcorn monsters

Posted: Wednesday, 27th May 2020, 20:33
It looks like at time t you're plotting the average of the period [t, t_end]

### Re: XP given by popcorn monsters

Posted: Wednesday, 27th May 2020, 21:10
Yes, to make it comparable to the previous method.

As mentioned in the OP, I'm interested in the question: how many of the monsters you encounter (at any given time) are popcorn. One could just look at a small time period just after the current time (though the measure would become more noisy -- we could get around this problem by taking a lot of morgue files and then averaging the numbers).

In any case, the shape of the graph (which is mostly flat / within a small-ish range) suggests that it wouldn't make a big difference what exact time period we take.

### Re: XP given by popcorn monsters

Posted: Wednesday, 27th May 2020, 21:37
The graph is flat because because you're looking at the period [t,t_end] (You're plotting f(t) = av([t,t_end), with a fixed end point). That's why it's flat at the start and spiky at the end. At least that's what it looks like is happening; I don't have the data myself.
If something interesting was happening in the early game, we couldn't see it. With this presentation.
I think picking a fixed time interval would be more sensible. If you're going to have a fixed time point t_start would be easier to understand.

### Re: XP given by popcorn monsters

Posted: Wednesday, 27th May 2020, 22:51
The spike at the end is because of random noise, because there are very few monsters left to analyze in the period [t, t_end]. It doesn't have any significance.

Also, I did Orc immediately after D:10; this is where the morgue ends. Orc tends to have a lot of popcorn.

### Re: XP given by popcorn monsters

Posted: Thursday, 28th May 2020, 22:18
I wrote a post about related tedium issues last summer which I admittedly feel kind of dumb for taking the time to write because it seems as though making "macro" changes to reduce tedium in mainline Crawl is something that just will not ever happen over a short period of time. I guess I just don't understand why the approach to making the game better adhere to its own stated design philosophy is incrementalism when there exists an "official", non-"live" version of the game where changes can be made and reverted at a rapid pace. So I guess what I'm saying is Hellmonk please release Hellcrawl 2.

### Re: XP given by popcorn monsters

Posted: Tuesday, 21st July 2020, 08:33
Several months late but to powergame's post above:

I think that fixing this particular problem is not that big of a "macro" change. Changing the spawn tables ("mon-pick-data.h") to not have adders generate on D:9 is a pretty reasonable and very minor change, frankly. For instance, recently, crimson imps were replaced with ufetubi; it's not inconceivable that this kind of thing could be done for many monsters.

You just have to do this kind of change to a lot of monsters, which is a rather time-consuming task. We also need to be careful to not go overboard because it could affect game balance. The graphs above suggest that there's a lot of room to cut popcorn generation without affecting XP in a serious way.

If there's some interest in changing the spawn tables, I could modify my code above to automatically generate lists of "popcorn" monsters on every floor. One could manually inspect whether these lists make sense, and if so, change the spawn tables so that those monsters no longer generate.

### Re: XP given by popcorn monsters

Posted: Thursday, 23rd July 2020, 13:29
Now that there is the Delver background - is there not a legitimate use for popcorn monsters on levels 2 to, say, 7 to give delvers opportunities for some initial experience for their characters without having to go all the way up to D1?

### Re: XP given by popcorn monsters

Posted: Friday, 24th July 2020, 02:55
I would be interested in consulting the spreadsheets you produce.

### Re: XP given by popcorn monsters

Posted: Friday, 24th July 2020, 04:00
bel wrote:Several months late but to powergame's post above:

I think that fixing this particular problem is not that big of a "macro" change. Changing the spawn tables ("mon-pick-data.h") to not have adders generate on D:9 is a pretty reasonable and very minor change, frankly. For instance, recently, crimson imps were replaced with ufetubi; it's not inconceivable that this kind of thing could be done for many monsters.

You just have to do this kind of change to a lot of monsters, which is a rather time-consuming task. We also need to be careful to not go overboard because it could affect game balance. The graphs above suggest that there's a lot of room to cut popcorn generation without affecting XP in a serious way.

If there's some interest in changing the spawn tables, I could modify my code above to automatically generate lists of "popcorn" monsters on every floor. One could manually inspect whether these lists make sense, and if so, change the spawn tables so that those monsters no longer generate.

Thanks for the response. I would appreciate that a lot actually, I have messed around with Crawl's source before so it won't go unused. Although I am pretty bad with git (haven't used it beyond tutorials) so I have never put anything I've done online.