From 3883054d4af5e4aba14c43ebb79d1ab1f95adc66 Mon Sep 17 00:00:00 2001 From: copperwater Date: Fri, 8 May 2026 08:00:33 -0400 Subject: [PATCH 01/20] Add the giant scorpion This monster comes from SLASH'EM by way of Hack'EM. I figured that the existing standard scorpions on the Ranger quest don't actually pose much of a threat to the player, and there ought to be an intermediate scorpion-like enemy between them and Scorpius. There are a few changes from Hack'EM scorpions: - They're orange rather than red (small scorpions are red) because when the player is fighting both types on the Ranger quest, an easy visual shorthand for the more threatening type is a good thing to have. This is in line with xNetHack monster color principles anyway. - They're faster, with a speed of 18 rather than 15. - They have only one claw attack; the other claw attack is moved to the third slot, after the sting, and changed to a grapple attack. I did that mainly because a poison resistant Ranger would otherwise still only treat giant scorpions as larger, higher-HP-and-damage enemies; letting them grapple and crush the hero in one of their claws makes them tactically different. - Scorpions can grow up into giant scorpions; that seems like an omission in Hack'EM rather than an intentional choice. The giant scorpion tile is the same as the SLASH'EM/Hack'EM one. --- doc/xnh-changelog-10.0.md | 6 + include/monsters.h | 9 + src/mon.c | 2 +- src/mondata.c | 1 + win/share/monsters.txt | 1232 +++++++++++++++++++------------------ 5 files changed, 652 insertions(+), 598 deletions(-) diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index 49084c988..f4cf5e879 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -29,6 +29,12 @@ changes: - Amulets of reflection still use the shield of reflection material list. - Human Rangers can now be played as Lawful. - Rangers are 4 times as good as other roles at finding pits and spiked pits. +- Add the giant scorpion. + - It is basically a scaled-up, faster version of the regular scorpion. + - Unlike the smaller scorpion, it has a grapple attack. + - Regular scorpions can grow up into them. + - They appear on the Ranger quest. + - They are orange to be distinguishable from regular scorpions. ### Interface changes diff --git a/include/monsters.h b/include/monsters.h index 1e35b2951..6a68b97c0 100644 --- a/include/monsters.h +++ b/include/monsters.h @@ -961,6 +961,15 @@ | M1_CARNIVORE, M2_HOSTILE, 0, 8, CLR_RED, SCORPION), + MON(NAM("giant scorpion"), S_SPIDER, + LVL(12, 18, 3, 0, 0), (G_GENO | 1), + A(ATTK(AT_CLAW, AD_PHYS, 5, 2), + ATTK(AT_STNG, AD_DRST, 3, 4), + ATTK(AT_HUGS, AD_PHYS, 3, 2), NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(500, 150, MS_SILENT, MZ_LARGE), MR_POISON, MR_POISON, + M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_POIS | M1_CARNIVORE, + M2_HOSTILE, 0, + 15, CLR_ORANGE, GIANT_SCORPION), /* * trappers, lurkers, &c * Note: prior to 3.7, these were defined to do AD_DGST damage, diff --git a/src/mon.c b/src/mon.c index a944240ff..ced7d7785 100644 --- a/src/mon.c +++ b/src/mon.c @@ -835,7 +835,7 @@ make_corpse(struct monst *mtmp, unsigned int corpseflags) case PM_ROCK_MOLE: case PM_WOODCHUCK: case PM_CAVE_SPIDER: case PM_CENTIPEDE: case PM_GIANT_SPIDER: - case PM_SCORPION: + case PM_SCORPION: case PM_GIANT_SCORPION: case PM_LURKER_ABOVE: case PM_TRAPPER: case PM_PONY: case PM_HORSE: case PM_WARHORSE: case PM_FOG_CLOUD: case PM_DUST_VORTEX: case PM_ICE_VORTEX: diff --git a/src/mondata.c b/src/mondata.c index 38458a7d2..1ce339bd3 100644 --- a/src/mondata.c +++ b/src/mondata.c @@ -1342,6 +1342,7 @@ static const short grownups[][2] = { { PM_URUK_HAI, PM_ORC_CAPTAIN }, { PM_SEWER_RAT, PM_GIANT_RAT }, { PM_CAVE_SPIDER, PM_GIANT_SPIDER }, + { PM_SCORPION, PM_GIANT_SCORPION }, { PM_OGRE, PM_OGRE_LEADER }, { PM_OGRE_LEADER, PM_OGRE_TYRANT }, { PM_ELF, PM_ELF_NOBLE }, diff --git a/win/share/monsters.txt b/win/share/monsters.txt index 338ec8e62..07f12034f 100644 --- a/win/share/monsters.txt +++ b/win/share/monsters.txt @@ -3828,7 +3828,45 @@ Z = (195, 195, 195) .......JAAJA.... ................ } -# tile 198 (lurker above,male) +# tile 198 (giant scorpion, male) +{ + .......JJJJ..... + .....JJJAKKJA... + ....JJA...AJJJ.. + ....DJA.....KKA. + .....DJA....AKJA + ....CA.....JKKJA + .........AJJJJKA + ......KJJKCAJJA. + ....JJACKJJJAA.. + ..JJCKJKAJJAA... + ..HHJJJJAAAJJJA. + ..LLLHJAAJJAAAJ. + ..DJLHJAJAAJJAJ. + .DAAJJJAAJA.JAAJ + .A.DAAAJAAJA.J.. + ...A....J..JA... +} +# tile 199 (giant scorpion, female) +{ + .......JJJJ..... + .....JJJAKKJA... + ....JJA...AJJJ.. + ....DJA.....KKA. + .....DJA....AKJA + ....CA.....JKKJA + .........AJJJJKA + ......KJJKCAJJA. + ....JJACKJJJAA.. + ..JJCKJKAJJAA... + ..HHJJJJAAAJJJA. + ..LLLHJAAJJAAAJ. + ..DJLHJAJAAJJAJ. + .DAAJJJAAJA.JAAJ + .A.DAAAJAAJA.J.. + ...A....J..JA... +} +# tile 200 (lurker above,male) { .AAAAAAAAAAAAAAA ...AAGFAAGFAAA.. @@ -3847,7 +3885,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 199 (lurker above,female) +# tile 201 (lurker above,female) { .AAAAAAAAAAAAAAA ...AAGFAAGFAAA.. @@ -3866,7 +3904,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 200 (trapper,male) +# tile 202 (trapper,male) { ................ ................ @@ -3885,7 +3923,7 @@ Z = (195, 195, 195) ...AAGFAAGFAAA.. .AAAAAAAAAAAAAAA } -# tile 201 (trapper,female) +# tile 203 (trapper,female) { ................ ................ @@ -3904,7 +3942,7 @@ Z = (195, 195, 195) ...AAGFAAGFAAA.. .AAAAAAAAAAAAAAA } -# tile 202 (pony,male) +# tile 204 (pony,male) { ................ ................ @@ -3923,7 +3961,7 @@ Z = (195, 195, 195) .....LA...L..... ................ } -# tile 203 (pony,female) +# tile 205 (pony,female) { ................ ................ @@ -3942,7 +3980,7 @@ Z = (195, 195, 195) .....LA...L..... ................ } -# tile 204 (white unicorn,male) +# tile 206 (white unicorn,male) { ................ ..HP............ @@ -3961,7 +3999,7 @@ Z = (195, 195, 195) .....LA...L..... ................ } -# tile 205 (white unicorn,female) +# tile 207 (white unicorn,female) { ................ ..HP............ @@ -3980,7 +4018,7 @@ Z = (195, 195, 195) .....LA...L..... ................ } -# tile 206 (gray unicorn,male) +# tile 208 (gray unicorn,male) { ................ ..HP............ @@ -3999,7 +4037,7 @@ Z = (195, 195, 195) .....LA...L..... ................ } -# tile 207 (gray unicorn,female) +# tile 209 (gray unicorn,female) { ................ ..HP............ @@ -4018,7 +4056,7 @@ Z = (195, 195, 195) .....LA...L..... ................ } -# tile 208 (black unicorn,male) +# tile 210 (black unicorn,male) { ................ ..HP............ @@ -4037,7 +4075,7 @@ Z = (195, 195, 195) .....LP...L..... ................ } -# tile 209 (black unicorn,female) +# tile 211 (black unicorn,female) { ................ ..HP............ @@ -4056,7 +4094,7 @@ Z = (195, 195, 195) .....LP...L..... ................ } -# tile 210 (horse,male) +# tile 212 (horse,male) { ................ ................ @@ -4075,7 +4113,7 @@ Z = (195, 195, 195) .....LA....L.... ................ } -# tile 211 (horse,female) +# tile 213 (horse,female) { ................ ................ @@ -4094,7 +4132,7 @@ Z = (195, 195, 195) .....LA....L.... ................ } -# tile 212 (warhorse,male) +# tile 214 (warhorse,male) { ................ .....JJJ........ @@ -4113,7 +4151,7 @@ Z = (195, 195, 195) .....LC....LC... ................ } -# tile 213 (warhorse,female) +# tile 215 (warhorse,female) { ................ .....JJJ........ @@ -4132,7 +4170,7 @@ Z = (195, 195, 195) .....LC....LC... ................ } -# tile 214 (fog cloud,male) +# tile 216 (fog cloud,male) { .......P........ ....P..P........ @@ -4151,7 +4189,7 @@ Z = (195, 195, 195) ..P..P.P..P..... ................ } -# tile 215 (fog cloud,female) +# tile 217 (fog cloud,female) { .......P........ ....P..P........ @@ -4170,7 +4208,7 @@ Z = (195, 195, 195) ..P..P.P..P..... ................ } -# tile 216 (dust vortex,male) +# tile 218 (dust vortex,male) { ................ ................ @@ -4189,7 +4227,7 @@ Z = (195, 195, 195) ....KKKK..K..... ................ } -# tile 217 (dust vortex,female) +# tile 219 (dust vortex,female) { ................ ................ @@ -4208,7 +4246,7 @@ Z = (195, 195, 195) ....KKKK..K..... ................ } -# tile 218 (ice vortex,male) +# tile 220 (ice vortex,male) { ................ ................ @@ -4227,7 +4265,7 @@ Z = (195, 195, 195) ....NNNN..N..... ................ } -# tile 219 (ice vortex,female) +# tile 221 (ice vortex,female) { ................ ................ @@ -4246,7 +4284,7 @@ Z = (195, 195, 195) ....NNNN..N..... ................ } -# tile 220 (energy vortex,male) +# tile 222 (energy vortex,male) { ................ ................ @@ -4265,7 +4303,7 @@ Z = (195, 195, 195) ....EEEE..E..... ................ } -# tile 221 (energy vortex,female) +# tile 223 (energy vortex,female) { ................ ................ @@ -4284,7 +4322,7 @@ Z = (195, 195, 195) ....EEEE..E..... ................ } -# tile 222 (steam vortex,male) +# tile 224 (steam vortex,male) { ................ ................ @@ -4303,7 +4341,7 @@ Z = (195, 195, 195) ....PPPP..P..... ................ } -# tile 223 (steam vortex,female) +# tile 225 (steam vortex,female) { ................ ................ @@ -4322,7 +4360,7 @@ Z = (195, 195, 195) ....PPPP..P..... ................ } -# tile 224 (fire vortex,male) +# tile 226 (fire vortex,male) { ................ ................ @@ -4341,7 +4379,7 @@ Z = (195, 195, 195) ....DDDD..D..... ................ } -# tile 225 (fire vortex,female) +# tile 227 (fire vortex,female) { ................ ................ @@ -4360,7 +4398,7 @@ Z = (195, 195, 195) ....DDDD..D..... ................ } -# tile 226 (baby long worm,male) +# tile 228 (baby long worm,male) { ................ ................ @@ -4379,7 +4417,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 227 (baby long worm,female) +# tile 229 (baby long worm,female) { ................ ................ @@ -4398,7 +4436,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 228 (baby purple worm,male) +# tile 230 (baby purple worm,male) { ................ ................ @@ -4417,7 +4455,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 229 (baby purple worm,female) +# tile 231 (baby purple worm,female) { ................ ................ @@ -4436,7 +4474,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 230 (long worm,male) +# tile 232 (long worm,male) { ................ ................ @@ -4455,7 +4493,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 231 (long worm,female) +# tile 233 (long worm,female) { ................ ................ @@ -4474,7 +4512,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 232 (purple worm,male) +# tile 234 (purple worm,male) { ................ ................ @@ -4493,7 +4531,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 233 (purple worm,female) +# tile 235 (purple worm,female) { ................ ................ @@ -4512,7 +4550,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 234 (grid bug,male) +# tile 236 (grid bug,male) { ................ ................ @@ -4531,7 +4569,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 235 (grid bug,female) +# tile 237 (grid bug,female) { ................ ................ @@ -4550,7 +4588,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 236 (xan,male) +# tile 238 (xan,male) { ................ ................ @@ -4569,7 +4607,7 @@ Z = (195, 195, 195) ..G..AAAAAA..... ......AA.AA..... } -# tile 237 (xan,female) +# tile 239 (xan,female) { ................ ................ @@ -4588,7 +4626,7 @@ Z = (195, 195, 195) ..G..AAAAAA..... ......AA.AA..... } -# tile 238 (yellow light,male) +# tile 240 (yellow light,male) { ................ ......NA........ @@ -4607,7 +4645,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 239 (yellow light,female) +# tile 241 (yellow light,female) { ................ ......NA........ @@ -4626,7 +4664,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 240 (black light,male) +# tile 242 (black light,male) { ................ ......AA........ @@ -4645,7 +4683,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 241 (black light,female) +# tile 243 (black light,female) { ................ ......AA........ @@ -4664,7 +4702,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 242 (zruty,male) +# tile 244 (zruty,male) { ................ ......FFGF...... @@ -4683,7 +4721,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 243 (zruty,female) +# tile 245 (zruty,female) { ................ ......FFGF...... @@ -4702,7 +4740,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 244 (couatl,male) +# tile 246 (couatl,male) { ................ ................ @@ -4721,7 +4759,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 245 (couatl,female) +# tile 247 (couatl,female) { ................ ................ @@ -4740,7 +4778,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 246 (Aleax,male) +# tile 248 (Aleax,male) { ................ ......BBBB..I... @@ -4762,7 +4800,7 @@ Z = (195, 195, 195) # Contributing artist: Kestrel Gregorich-Trevor 27-Dec-2020 # Female Aleax wears slightly different clothing. # -# tile 247 (Aleax,female) +# tile 249 (Aleax,female) { ................ ......BBBB..I... @@ -4781,7 +4819,7 @@ Z = (195, 195, 195) ..BF.LLAALLAFB.. ................ } -# tile 248 (Angel,male) +# tile 250 (Angel,male) { ................ ................ @@ -4800,7 +4838,7 @@ Z = (195, 195, 195) ....BNNNNNNP.... ................ } -# tile 249 (Angel,female) +# tile 251 (Angel,female) { ................ ................ @@ -4819,7 +4857,7 @@ Z = (195, 195, 195) ....BNNNNNNP.... ................ } -# tile 250 (ki-rin,male) +# tile 252 (ki-rin,male) { ................ ................ @@ -4838,7 +4876,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 251 (ki-rin,female) +# tile 253 (ki-rin,female) { ................ ................ @@ -4857,7 +4895,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 252 (Archon,male) +# tile 254 (Archon,male) { ................ ......OOOO...... @@ -4880,7 +4918,7 @@ Z = (195, 195, 195) # Female archons are clean-shaven. Although of course not one # hundred percent accurate, it's convenient visual shorthand. # -# tile 253 (Archon,female) +# tile 255 (Archon,female) { ................ ......OOOO...... @@ -4899,7 +4937,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 254 (bat,male) +# tile 256 (bat,male) { ................ ................ @@ -4918,7 +4956,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 255 (bat,female) +# tile 257 (bat,female) { ................ ................ @@ -4937,7 +4975,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 256 (giant bat,male) +# tile 258 (giant bat,male) { ................ ................ @@ -4956,7 +4994,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 257 (giant bat,female) +# tile 259 (giant bat,female) { ................ ................ @@ -4975,7 +5013,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 258 (raven,male) +# tile 260 (raven,male) { ..AAAA...AAA.... .AAAAAA.AAA..... @@ -4994,7 +5032,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 259 (raven,female) +# tile 261 (raven,female) { ..AAAA...AAA.... .AAAAAA.AAA..... @@ -5013,7 +5051,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 260 (vampire bat,male) +# tile 262 (vampire bat,male) { ................ ................ @@ -5032,7 +5070,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 261 (vampire bat,female) +# tile 263 (vampire bat,female) { ................ ................ @@ -5051,7 +5089,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 262 (phoenix,male) +# tile 264 (phoenix,male) { ................ ..............D. @@ -5070,7 +5108,7 @@ Z = (195, 195, 195) .........CDDD..C ........DC.H.I.. } -# tile 263 (phoenix,female) +# tile 265 (phoenix,female) { ................ ..............D. @@ -5089,7 +5127,7 @@ Z = (195, 195, 195) .........CDDD..C ........DC.H.I.. } -# tile 264 (plains centaur,male) +# tile 266 (plains centaur,male) { ................ ...KKA.......... @@ -5112,7 +5150,7 @@ Z = (195, 195, 195) # Centaur tiles have no differentiation because the different types of # centaurs are already extremely difficult to tell apart from one another. # -# tile 265 (plains centaur,female) +# tile 267 (plains centaur,female) { ................ ...KKA.......... @@ -5131,7 +5169,7 @@ Z = (195, 195, 195) ....CA...C...... ................ } -# tile 266 (forest centaur,male) +# tile 268 (forest centaur,male) { ................ ................ @@ -5150,7 +5188,7 @@ Z = (195, 195, 195) ....CA...C...... ................ } -# tile 267 (forest centaur,female) +# tile 269 (forest centaur,female) { ................ ................ @@ -5169,7 +5207,7 @@ Z = (195, 195, 195) ....CA...C...... ................ } -# tile 268 (mountain centaur,male) +# tile 270 (mountain centaur,male) { ................ ................ @@ -5188,7 +5226,7 @@ Z = (195, 195, 195) ....CA...C...... ................ } -# tile 269 (mountain centaur,female) +# tile 271 (mountain centaur,female) { ................ ................ @@ -5207,7 +5245,7 @@ Z = (195, 195, 195) ....CA...C...... ................ } -# tile 270 (baby gray dragon,male) +# tile 272 (baby gray dragon,male) { ................ ................ @@ -5226,7 +5264,7 @@ Z = (195, 195, 195) .....BPAA..PPAA. ...........PAA.. } -# tile 271 (baby gray dragon,female) +# tile 273 (baby gray dragon,female) { ................ ................ @@ -5245,7 +5283,7 @@ Z = (195, 195, 195) .....BPAA..PPAA. ...........PAA.. } -# tile 272 (baby gold dragon,male) +# tile 274 (baby gold dragon,male) { ................ ................ @@ -5264,7 +5302,7 @@ Z = (195, 195, 195) .....PHAA..DDAA. ...........DAA.. } -# tile 273 (baby gold dragon,female) +# tile 275 (baby gold dragon,female) { ................ ................ @@ -5283,7 +5321,7 @@ Z = (195, 195, 195) .....PHAA..DDAA. ...........DAA.. } -# tile 274 (baby silver dragon,male) +# tile 276 (baby silver dragon,male) { ................ ................ @@ -5302,7 +5340,7 @@ Z = (195, 195, 195) .....PBAA..BBAA. ...........BAA.. } -# tile 275 (baby silver dragon,female) +# tile 277 (baby silver dragon,female) { ................ ................ @@ -5321,7 +5359,7 @@ Z = (195, 195, 195) .....PBAA..BBAA. ...........BAA.. } -# tile 276 (baby shimmering dragon,male) +# tile 278 (baby shimmering dragon,male) { .I.............. ...BBBBBBB.I.... @@ -5340,7 +5378,7 @@ Z = (195, 195, 195) B....BPAA..PPAAB .B.........PAAB. } -# tile 277 (baby shimmering dragon,female) +# tile 279 (baby shimmering dragon,female) { .I.............. ...BBBBBBB.I.... @@ -5359,7 +5397,7 @@ Z = (195, 195, 195) B....BPAA..PPAAB .B.........PAAB. } -# tile 278 (baby red dragon,male) +# tile 280 (baby red dragon,male) { ................ ................ @@ -5378,7 +5416,7 @@ Z = (195, 195, 195) .....IDAA..DDAA. ...........DAA.. } -# tile 279 (baby red dragon,female) +# tile 281 (baby red dragon,female) { ................ ................ @@ -5397,7 +5435,7 @@ Z = (195, 195, 195) .....IDAA..DDAA. ...........DAA.. } -# tile 280 (baby white dragon,male) +# tile 282 (baby white dragon,male) { ................ ................ @@ -5416,7 +5454,7 @@ Z = (195, 195, 195) .....NOAA..OOAA. ...........OAA.. } -# tile 281 (baby white dragon,female) +# tile 283 (baby white dragon,female) { ................ ................ @@ -5435,7 +5473,7 @@ Z = (195, 195, 195) .....NOAA..OOAA. ...........OAA.. } -# tile 282 (baby orange dragon,male) +# tile 284 (baby orange dragon,male) { ................ ................ @@ -5454,7 +5492,7 @@ Z = (195, 195, 195) .....LCAA..CCAA. ...........CAA.. } -# tile 283 (baby orange dragon,female) +# tile 285 (baby orange dragon,female) { ................ ................ @@ -5473,7 +5511,7 @@ Z = (195, 195, 195) .....LCAA..CCAA. ...........CAA.. } -# tile 284 (baby black dragon,male) +# tile 286 (baby black dragon,male) { ................ ................ @@ -5492,7 +5530,7 @@ Z = (195, 195, 195) .....AAP...AAPP. ...........APP.. } -# tile 285 (baby black dragon,female) +# tile 287 (baby black dragon,female) { ................ ................ @@ -5511,7 +5549,7 @@ Z = (195, 195, 195) .....AAP...AAPP. ...........APP.. } -# tile 286 (baby blue dragon,male) +# tile 288 (baby blue dragon,male) { ................ ................ @@ -5530,7 +5568,7 @@ Z = (195, 195, 195) .....BEAA..EEAA. ...........EAA.. } -# tile 287 (baby blue dragon,female) +# tile 289 (baby blue dragon,female) { ................ ................ @@ -5549,7 +5587,7 @@ Z = (195, 195, 195) .....BEAA..EEAA. ...........EAA.. } -# tile 288 (baby green dragon,male) +# tile 290 (baby green dragon,male) { ................ ................ @@ -5568,7 +5606,7 @@ Z = (195, 195, 195) .....GFAA..FFAA. ...........FAA.. } -# tile 289 (baby green dragon,female) +# tile 291 (baby green dragon,female) { ................ ................ @@ -5587,7 +5625,7 @@ Z = (195, 195, 195) .....GFAA..FFAA. ...........FAA.. } -# tile 290 (baby yellow dragon,male) +# tile 292 (baby yellow dragon,male) { ................ ................ @@ -5606,7 +5644,7 @@ Z = (195, 195, 195) .....NHAA..HHAA. ...........HAA.. } -# tile 291 (baby yellow dragon,female) +# tile 293 (baby yellow dragon,female) { ................ ................ @@ -5625,7 +5663,7 @@ Z = (195, 195, 195) .....NHAA..HHAA. ...........HAA.. } -# tile 292 (gray dragon,male) +# tile 294 (gray dragon,male) { ......BBBPA..... .....NPNPPPA.... @@ -5644,7 +5682,7 @@ Z = (195, 195, 195) ....BPAA...PP.A. ........PPPP.A.. } -# tile 293 (gray dragon,female) +# tile 295 (gray dragon,female) { ......BBBPA..... .....NPNPPPA.... @@ -5663,7 +5701,7 @@ Z = (195, 195, 195) ....BPAA...PP.A. ........PPPP.A.. } -# tile 294 (gold dragon,male) +# tile 296 (gold dragon,male) { ......HHHDA..... .....OHOHHDA.... @@ -5682,7 +5720,7 @@ Z = (195, 195, 195) ....PDAA...HD.A. ........DDHD.A.. } -# tile 295 (gold dragon,female) +# tile 297 (gold dragon,female) { ......HHHDA..... .....OHOHHDA.... @@ -5701,7 +5739,7 @@ Z = (195, 195, 195) ....PDAA...HD.A. ........DDHD.A.. } -# tile 296 (silver dragon,male) +# tile 298 (silver dragon,male) { ......PPPBA..... .....OBOBBBA.... @@ -5720,7 +5758,7 @@ Z = (195, 195, 195) ....PBAA...BB.A. ........BBBB.A.. } -# tile 297 (silver dragon,female) +# tile 299 (silver dragon,female) { ......PPPBA..... .....OBOBBBA.... @@ -5739,7 +5777,7 @@ Z = (195, 195, 195) ....PBAA...BB.A. ........BBBB.A.. } -# tile 298 (shimmering dragon,male) +# tile 300 (shimmering dragon,male) { .I.BF.BBBPAFB... ..BF.NPNPPPAFB.I @@ -5758,7 +5796,7 @@ Z = (195, 195, 195) ....BPAA...PP.AB ........PPPP.AB. } -# tile 299 (shimmering dragon,female) +# tile 301 (shimmering dragon,female) { .I.BF.BBBPAFB... ..BF.NPNPPPAFB.I @@ -5777,7 +5815,7 @@ Z = (195, 195, 195) ....BPAA...PP.AB ........PPPP.AB. } -# tile 300 (red dragon,male) +# tile 302 (red dragon,male) { ......IIIDA..... .....NDNDDDA.... @@ -5796,7 +5834,7 @@ Z = (195, 195, 195) ....IDAAJJJDDJA. ........DDDDJA.. } -# tile 301 (red dragon,female) +# tile 303 (red dragon,female) { ......IIIDA..... .....NDNDDDA.... @@ -5815,7 +5853,7 @@ Z = (195, 195, 195) ....IDAAJJJDDJA. ........DDDDJA.. } -# tile 302 (white dragon,male) +# tile 304 (white dragon,male) { ......NNNOA..... .....IOIOOOA.... @@ -5834,7 +5872,7 @@ Z = (195, 195, 195) ....NOAA...OOJA. ........OOOOJA.. } -# tile 303 (white dragon,female) +# tile 305 (white dragon,female) { ......NNNOA..... .....IOIOOOA.... @@ -5853,7 +5891,7 @@ Z = (195, 195, 195) ....NOAA...OOJA. ........OOOOJA.. } -# tile 304 (orange dragon,male) +# tile 306 (orange dragon,male) { ......LLLCA..... .....NCNCCCA.... @@ -5872,7 +5910,7 @@ Z = (195, 195, 195) ....LCAA.KKCCJA. ........CCCCJA.. } -# tile 305 (orange dragon,female) +# tile 307 (orange dragon,female) { ......LLLCA..... .....NCNCCCA.... @@ -5891,7 +5929,7 @@ Z = (195, 195, 195) ....LCAA.KKCCJA. ........CCCCJA.. } -# tile 306 (black dragon,male) +# tile 308 (black dragon,male) { ......AAAA...... .....NANAAA..... @@ -5910,7 +5948,7 @@ Z = (195, 195, 195) ....AAPP...AAAP. ........AAAAA... } -# tile 307 (black dragon,female) +# tile 309 (black dragon,female) { ......AAAA...... .....NANAAA..... @@ -5929,7 +5967,7 @@ Z = (195, 195, 195) ....AAPP...AAAP. ........AAAAA... } -# tile 308 (blue dragon,male) +# tile 310 (blue dragon,male) { ......BBBEA..... .....NENEEEA.... @@ -5948,7 +5986,7 @@ Z = (195, 195, 195) ....BEAA...EEJA. ...P....EEEEJA.. } -# tile 309 (blue dragon,female) +# tile 311 (blue dragon,female) { ......BBBEA..... .....NENEEEA.... @@ -5967,7 +6005,7 @@ Z = (195, 195, 195) ....BEAA...EEJA. ...P....EEEEJA.. } -# tile 310 (green dragon,male) +# tile 312 (green dragon,male) { ......GGGFA..... .....NFNFFFA.... @@ -5986,7 +6024,7 @@ Z = (195, 195, 195) ....GFAA...FFJA. ........FFFFJA.. } -# tile 311 (green dragon,female) +# tile 313 (green dragon,female) { ......GGGFA..... .....NFNFFFA.... @@ -6005,7 +6043,7 @@ Z = (195, 195, 195) ....GFAA...FFJA. ........FFFFJA.. } -# tile 312 (yellow dragon,male) +# tile 314 (yellow dragon,male) { ......NNNHA..... .....DHDHHHA.... @@ -6024,7 +6062,7 @@ Z = (195, 195, 195) ....NHAAJJJHHJA. ........HHHHJA.. } -# tile 313 (yellow dragon,female) +# tile 315 (yellow dragon,female) { ......NNNHA..... .....DHDHHHA.... @@ -6043,7 +6081,7 @@ Z = (195, 195, 195) ....NHAAJJJHHJA. ........HHHHJA.. } -# tile 314 (stalker,male) +# tile 316 (stalker,male) { ................ .......PPP...... @@ -6062,7 +6100,7 @@ Z = (195, 195, 195) .....PP..PP..... ................ } -# tile 315 (stalker,female) +# tile 317 (stalker,female) { ................ .......PPP...... @@ -6081,7 +6119,7 @@ Z = (195, 195, 195) .....PP..PP..... ................ } -# tile 316 (air elemental,male) +# tile 318 (air elemental,male) { ................ ...P.PPP..P..... @@ -6100,7 +6138,7 @@ Z = (195, 195, 195) ...PP.APPPA..... ................ } -# tile 317 (air elemental,female) +# tile 319 (air elemental,female) { ................ ...P.PPP..P..... @@ -6119,7 +6157,7 @@ Z = (195, 195, 195) ...PP.APPPA..... ................ } -# tile 318 (fire elemental,male) +# tile 320 (fire elemental,male) { ................ .H..LDDD........ @@ -6138,7 +6176,7 @@ Z = (195, 195, 195) ..LDDCADDDA..... ................ } -# tile 319 (fire elemental,female) +# tile 321 (fire elemental,female) { ................ .H..LDDD........ @@ -6157,7 +6195,7 @@ Z = (195, 195, 195) ..LDDCADDDA..... ................ } -# tile 320 (earth elemental,male) +# tile 322 (earth elemental,male) { ..F............. ....CKKK..F..... @@ -6176,7 +6214,7 @@ Z = (195, 195, 195) ..CKKJAKKKA..... ................ } -# tile 321 (earth elemental,female) +# tile 323 (earth elemental,female) { ..F............. ....CKKK..F..... @@ -6195,7 +6233,7 @@ Z = (195, 195, 195) ..CKKJAKKKA..... ................ } -# tile 322 (water elemental,male) +# tile 324 (water elemental,male) { ................ ....PBBB..E..... @@ -6214,7 +6252,7 @@ Z = (195, 195, 195) ..PBBEABBBA..... ................ } -# tile 323 (water elemental,female) +# tile 325 (water elemental,female) { ................ ....PBBB..E..... @@ -6233,7 +6271,7 @@ Z = (195, 195, 195) ..PBBEABBBA..... ................ } -# tile 324 (lichen,male) +# tile 326 (lichen,male) { ................ ................ @@ -6252,7 +6290,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 325 (lichen,female) +# tile 327 (lichen,female) { ................ ................ @@ -6271,7 +6309,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 326 (brown mold,male) +# tile 328 (brown mold,male) { ................ ................ @@ -6290,7 +6328,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 327 (brown mold,female) +# tile 329 (brown mold,female) { ................ ................ @@ -6309,7 +6347,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 328 (yellow mold,male) +# tile 330 (yellow mold,male) { ................ ................ @@ -6328,7 +6366,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 329 (yellow mold,female) +# tile 331 (yellow mold,female) { ................ ................ @@ -6347,7 +6385,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 330 (green mold,male) +# tile 332 (green mold,male) { ................ ................ @@ -6366,7 +6404,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 331 (green mold,female) +# tile 333 (green mold,female) { ................ ................ @@ -6385,7 +6423,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 332 (red mold,male) +# tile 334 (red mold,male) { ................ ................ @@ -6404,7 +6442,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 333 (red mold,female) +# tile 335 (red mold,female) { ................ ................ @@ -6423,7 +6461,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 334 (shrieker,male) +# tile 336 (shrieker,male) { ................ ................ @@ -6442,7 +6480,7 @@ Z = (195, 195, 195) ...AAAAAAAAAA... ................ } -# tile 335 (shrieker,female) +# tile 337 (shrieker,female) { ................ ................ @@ -6461,7 +6499,7 @@ Z = (195, 195, 195) ...AAAAAAAAAA... ................ } -# tile 336 (violet fungus,male) +# tile 338 (violet fungus,male) { ................ ................ @@ -6480,7 +6518,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 337 (violet fungus,female) +# tile 339 (violet fungus,female) { ................ ................ @@ -6499,7 +6537,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 338 (black mold,male) +# tile 340 (black mold,male) { ................ ................ @@ -6518,7 +6556,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 339 (black mold,female) +# tile 341 (black mold,female) { ................ ................ @@ -6537,7 +6575,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 340 (gnome,male) +# tile 342 (gnome,male) { ................ ................ @@ -6560,7 +6598,7 @@ Z = (195, 195, 195) # Female gnomes are clean-shaven. Although of course not one # hundred percent accurate, it's convenient visual shorthand. # -# tile 341 (gnome,female) +# tile 343 (gnome,female) { ................ ................ @@ -6579,7 +6617,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 342 (gnome leader,male) +# tile 344 (gnome leader,male) { ................ ................ @@ -6602,7 +6640,7 @@ Z = (195, 195, 195) # Female gnome leaders are clean-shaven. Although of course not one # hundred percent accurate, it's convenient visual shorthand. # -# tile 343 (gnome leader,female) +# tile 345 (gnome leader,female) { ................ ................ @@ -6621,7 +6659,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 344 (gnomish wizard,male) +# tile 346 (gnomish wizard,male) { ................ ................ @@ -6640,7 +6678,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 345 (gnomish wizard,female) +# tile 347 (gnomish wizard,female) { ................ ................ @@ -6659,7 +6697,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 346 (gnome ruler,male) +# tile 348 (gnome ruler,male) { ................ ................ @@ -6682,7 +6720,7 @@ Z = (195, 195, 195) # Female gnome rulers are clean-shaven. Although of course not one # hundred percent accurate, it's convenient visual shorthand. # -# tile 347 (gnome ruler,female) +# tile 349 (gnome ruler,female) { ................ ................ @@ -6701,7 +6739,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 348 (giant,male) +# tile 350 (giant,male) { ......JJJJAA.... ....JJJJJJJJA... @@ -6720,7 +6758,7 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.CLLLKAA } -# tile 349 (giant,female) +# tile 351 (giant,female) { ......JJJJAA.... ....JJJJJJJJA... @@ -6739,7 +6777,7 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.CLLLKAA } -# tile 350 (hill giant,male) +# tile 352 (hill giant,male) { ......JJJJAA.... ....JJJJJJJJA... @@ -6758,7 +6796,7 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.LLLLKAA } -# tile 351 (hill giant,female) +# tile 353 (hill giant,female) { ......JJJJAA.... ....JJJJJJJJA... @@ -6777,7 +6815,7 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.LLLLKAA } -# tile 352 (stone giant,male) +# tile 354 (stone giant,male) { ......JJJJAA.... ....JJJJJJJJA... @@ -6796,7 +6834,7 @@ Z = (195, 195, 195) .....ALJACLJAAAA ...LLLLJ.CLLLKAA } -# tile 353 (stone giant,female) +# tile 355 (stone giant,female) { ......JJJJAA.... ....JJJJJJJJA... @@ -6815,7 +6853,7 @@ Z = (195, 195, 195) .....ALJACLJAAAA ...LLLLJ.CLLLKAA } -# tile 354 (fire giant,male) +# tile 356 (fire giant,male) { ....PPDDDDAA.... ....PDDDDDDDA... @@ -6834,7 +6872,7 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.LLLLKAA } -# tile 355 (fire giant,female) +# tile 357 (fire giant,female) { ....PPDDDDAA.... ....PDDDDDDDA... @@ -6853,7 +6891,7 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.LLLLKAA } -# tile 356 (frost giant,male) +# tile 358 (frost giant,male) { .....KJJJJAA.... ....KJJJJJJJA... @@ -6876,7 +6914,7 @@ Z = (195, 195, 195) # Female frost giants are clean-shaven. Although of course not one # hundred percent accurate, it's convenient visual shorthand. # -# tile 357 (frost giant,female) +# tile 359 (frost giant,female) { .....KJJJJAA.... ....KJJJJJJJA... @@ -6895,7 +6933,7 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.CLLLKAA } -# tile 358 (ettin,male) +# tile 360 (ettin,male) { ....NN..ONOP.... ..NNOOPNNOOPP... @@ -6914,7 +6952,7 @@ Z = (195, 195, 195) .....BPAABPAAAAA ...PPPPA.BPPPFAA } -# tile 359 (ettin,female) +# tile 361 (ettin,female) { ....NN..ONOP.... ..NNOOPNNOOPP... @@ -6933,7 +6971,7 @@ Z = (195, 195, 195) .....BPAABPAAAAA ...PPPPA.BPPPFAA } -# tile 360 (storm giant,male) +# tile 362 (storm giant,male) { ......JJJJAA.... ....JJJJJJJJA... @@ -6952,7 +6990,7 @@ Z = (195, 195, 195) .....CLJACCJAAAA ...LLLLJ.LLLLKAA } -# tile 361 (storm giant,female) +# tile 363 (storm giant,female) { ......JJJJAA.... ....JJJJJJJJA... @@ -6971,7 +7009,7 @@ Z = (195, 195, 195) .....CLJACCJAAAA ...LLLLJ.LLLLKAA } -# tile 362 (titan,male) +# tile 364 (titan,male) { .....AAAAAAA.... ....AALLLLAAA... @@ -6990,7 +7028,7 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.CLLLKAA } -# tile 363 (titan,female) +# tile 365 (titan,female) { .....AAAAAAA.... ....AALLLLAAA... @@ -7009,7 +7047,7 @@ Z = (195, 195, 195) .....CLJACLJAAAA ...LLLLJ.CLLLKAA } -# tile 364 (minotaur,male) +# tile 366 (minotaur,male) { ................ .O..........O... @@ -7031,7 +7069,7 @@ Z = (195, 195, 195) # Contributing artist: Kestrel Gregorich-Trevor 27-Dec-2020 # Female minotaurs wear slightly different clothing. # -# tile 365 (minotaur,female) +# tile 367 (minotaur,female) { ................ .O..........O... @@ -7050,7 +7088,7 @@ Z = (195, 195, 195) ....CLCACLCAAAAA ..LLLLL.LLLLLAA. } -# tile 366 (jabberwock,male) +# tile 368 (jabberwock,male) { ................ ...DP........... @@ -7069,7 +7107,7 @@ Z = (195, 195, 195) ...IDAA..ID..... ................ } -# tile 367 (jabberwock,female) +# tile 369 (jabberwock,female) { ................ ...DP........... @@ -7088,7 +7126,7 @@ Z = (195, 195, 195) ...IDAA..ID..... ................ } -# tile 368 (vorpal jabberwock,male) +# tile 370 (vorpal jabberwock,male) { ................ ...GP........... @@ -7107,7 +7145,7 @@ Z = (195, 195, 195) ...FGAA..FG..... ................ } -# tile 369 (vorpal jabberwock,female) +# tile 371 (vorpal jabberwock,female) { ................ ...GP........... @@ -7126,7 +7164,7 @@ Z = (195, 195, 195) ...FGAA..FG..... ................ } -# tile 370 (Keystone Kop,male) +# tile 372 (Keystone Kop,male) { ................ ....AA.......... @@ -7145,7 +7183,7 @@ Z = (195, 195, 195) ..AA....AA...... ................ } -# tile 371 (Keystone Kop,female) +# tile 373 (Keystone Kop,female) { ................ ....AA.......... @@ -7164,7 +7202,7 @@ Z = (195, 195, 195) ..AA....AA...... ................ } -# tile 372 (Kop Sergeant,male) +# tile 374 (Kop Sergeant,male) { ................ ....AA.......... @@ -7183,7 +7221,7 @@ Z = (195, 195, 195) ..AA....AA...... ................ } -# tile 373 (Kop Sergeant,female) +# tile 375 (Kop Sergeant,female) { ................ ....AA.......... @@ -7202,7 +7240,7 @@ Z = (195, 195, 195) ..AA....AA...... ................ } -# tile 374 (Kop Lieutenant,male) +# tile 376 (Kop Lieutenant,male) { ................ ....AA.......... @@ -7221,7 +7259,7 @@ Z = (195, 195, 195) ..AA....AA...... ................ } -# tile 375 (Kop Lieutenant,female) +# tile 377 (Kop Lieutenant,female) { ................ ....AA.......... @@ -7240,7 +7278,7 @@ Z = (195, 195, 195) ..AA....AA...... ................ } -# tile 376 (Kop Kaptain,male) +# tile 378 (Kop Kaptain,male) { ................ ....AA....C..... @@ -7259,7 +7297,7 @@ Z = (195, 195, 195) ..AA....AA...... ................ } -# tile 377 (Kop Kaptain,female) +# tile 379 (Kop Kaptain,female) { ................ ....AA....C..... @@ -7278,7 +7316,7 @@ Z = (195, 195, 195) ..AA....AA...... ................ } -# tile 378 (lich,male) +# tile 380 (lich,male) { ................ ................ @@ -7297,7 +7335,7 @@ Z = (195, 195, 195) ......OOO....... ................ } -# tile 379 (lich,female) +# tile 381 (lich,female) { ................ ................ @@ -7316,7 +7354,7 @@ Z = (195, 195, 195) ......OOO....... ................ } -# tile 380 (demilich,male) +# tile 382 (demilich,male) { ................ ................ @@ -7335,7 +7373,7 @@ Z = (195, 195, 195) ......LLL....... ................ } -# tile 381 (demilich,female) +# tile 383 (demilich,female) { ................ ................ @@ -7354,7 +7392,7 @@ Z = (195, 195, 195) ......LLL....... ................ } -# tile 382 (master lich,male) +# tile 384 (master lich,male) { ...H............ ...HCH.H........ @@ -7373,7 +7411,7 @@ Z = (195, 195, 195) ......OOO....... ................ } -# tile 383 (master lich,female) +# tile 385 (master lich,female) { ...H............ ...HCH.H........ @@ -7392,7 +7430,7 @@ Z = (195, 195, 195) ......OOO....... ................ } -# tile 384 (arch-lich,male) +# tile 386 (arch-lich,male) { ................ ................ @@ -7411,7 +7449,7 @@ Z = (195, 195, 195) ......OOO....... ................ } -# tile 385 (arch-lich,female) +# tile 387 (arch-lich,female) { ................ ................ @@ -7430,7 +7468,7 @@ Z = (195, 195, 195) ......OOO....... ................ } -# tile 386 (kobold mummy,male) +# tile 388 (kobold mummy,male) { ................ ................ @@ -7449,7 +7487,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 387 (kobold mummy,female) +# tile 389 (kobold mummy,female) { ................ ................ @@ -7468,7 +7506,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 388 (gnome mummy,male) +# tile 390 (gnome mummy,male) { ................ ................ @@ -7491,7 +7529,7 @@ Z = (195, 195, 195) # Female gnome mummies are clean-shaven. Although of course not one # hundred percent accurate, it's convenient visual shorthand. # -# tile 389 (gnome mummy,female) +# tile 391 (gnome mummy,female) { ................ ................ @@ -7510,7 +7548,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 390 (orc mummy,male) +# tile 392 (orc mummy,male) { ................ ................ @@ -7529,7 +7567,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 391 (orc mummy,female) +# tile 393 (orc mummy,female) { ................ ................ @@ -7548,7 +7586,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 392 (dwarf mummy,male) +# tile 394 (dwarf mummy,male) { ................ ................ @@ -7567,7 +7605,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 393 (dwarf mummy,female) +# tile 395 (dwarf mummy,female) { ................ ................ @@ -7586,7 +7624,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 394 (elf mummy,male) +# tile 396 (elf mummy,male) { ................ ................ @@ -7605,7 +7643,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 395 (elf mummy,female) +# tile 397 (elf mummy,female) { ................ ................ @@ -7624,7 +7662,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 396 (human mummy,male) +# tile 398 (human mummy,male) { ................ ................ @@ -7643,7 +7681,7 @@ Z = (195, 195, 195) ..NNN.NNNA...... ................ } -# tile 397 (human mummy,female) +# tile 399 (human mummy,female) { ................ ................ @@ -7662,7 +7700,7 @@ Z = (195, 195, 195) ..NNN.NNNA...... ................ } -# tile 398 (ettin mummy,male) +# tile 400 (ettin mummy,male) { .....NN..ONOO... ...NNOOONNOOOO.. @@ -7681,7 +7719,7 @@ Z = (195, 195, 195) .....NOOANOOAAAA ...OOOOO.OOOOKAA } -# tile 399 (ettin mummy,female) +# tile 401 (ettin mummy,female) { .....NN..ONOO... ...NNOOONNOOOO.. @@ -7700,7 +7738,7 @@ Z = (195, 195, 195) .....NOOANOOAAAA ...OOOOO.OOOOKAA } -# tile 400 (giant mummy,male) +# tile 402 (giant mummy,male) { ......ONOOAA.... ....ONNNOOOOA... @@ -7719,7 +7757,7 @@ Z = (195, 195, 195) .....NOOANOOAAAA ...OOOOO.OOOOKAA } -# tile 401 (giant mummy,female) +# tile 403 (giant mummy,female) { ......ONOOAA.... ....ONNNOOOOA... @@ -7738,7 +7776,7 @@ Z = (195, 195, 195) .....NOOANOOAAAA ...OOOOO.OOOOKAA } -# tile 402 (red naga hatchling,male) +# tile 404 (red naga hatchling,male) { ................ ................ @@ -7757,7 +7795,7 @@ Z = (195, 195, 195) ....IIDDDDDA.... ................ } -# tile 403 (red naga hatchling,female) +# tile 405 (red naga hatchling,female) { ................ ................ @@ -7776,7 +7814,7 @@ Z = (195, 195, 195) ....IIDDDDDA.... ................ } -# tile 404 (black naga hatchling,male) +# tile 406 (black naga hatchling,male) { ................ ................ @@ -7795,7 +7833,7 @@ Z = (195, 195, 195) ....AAAAAAAA.... ................ } -# tile 405 (black naga hatchling,female) +# tile 407 (black naga hatchling,female) { ................ ................ @@ -7814,7 +7852,7 @@ Z = (195, 195, 195) ....AAAAAAAA.... ................ } -# tile 406 (golden naga hatchling,male) +# tile 408 (golden naga hatchling,male) { ................ ................ @@ -7833,7 +7871,7 @@ Z = (195, 195, 195) ....NNHHHHHA.... ................ } -# tile 407 (golden naga hatchling,female) +# tile 409 (golden naga hatchling,female) { ................ ................ @@ -7852,7 +7890,7 @@ Z = (195, 195, 195) ....NNHHHHHA.... ................ } -# tile 408 (guardian naga hatchling,male) +# tile 410 (guardian naga hatchling,male) { ................ ................ @@ -7871,7 +7909,7 @@ Z = (195, 195, 195) ....GGFFFFFA.... ................ } -# tile 409 (guardian naga hatchling,female) +# tile 411 (guardian naga hatchling,female) { ................ ................ @@ -7890,7 +7928,7 @@ Z = (195, 195, 195) ....GGFFFFFA.... ................ } -# tile 410 (red naga,male) +# tile 412 (red naga,male) { ................ ....KK.......... @@ -7909,7 +7947,7 @@ Z = (195, 195, 195) .....DDAA..DDA.. ..........DA.... } -# tile 411 (red naga,female) +# tile 413 (red naga,female) { ................ ....KK.......... @@ -7928,7 +7966,7 @@ Z = (195, 195, 195) .....DDAA..DDA.. ..........DA.... } -# tile 412 (black naga,male) +# tile 414 (black naga,male) { ................ ....KK.......... @@ -7947,7 +7985,7 @@ Z = (195, 195, 195) .....AAPP..AAP.. ..........AP.... } -# tile 413 (black naga,female) +# tile 415 (black naga,female) { ................ ....KK.......... @@ -7966,7 +8004,7 @@ Z = (195, 195, 195) .....AAPP..AAP.. ..........AP.... } -# tile 414 (golden naga,male) +# tile 416 (golden naga,male) { ................ ....KK.......... @@ -7985,7 +8023,7 @@ Z = (195, 195, 195) .....HHAA..HHA.. ..........HA.... } -# tile 415 (golden naga,female) +# tile 417 (golden naga,female) { ................ ....KK.......... @@ -8004,7 +8042,7 @@ Z = (195, 195, 195) .....HHAA..HHA.. ..........HA.... } -# tile 416 (guardian naga,male) +# tile 418 (guardian naga,male) { ................ ....KK.......... @@ -8023,7 +8061,7 @@ Z = (195, 195, 195) .....FFAA..FFA.. ..........FA.... } -# tile 417 (guardian naga,female) +# tile 419 (guardian naga,female) { ................ ....KK.......... @@ -8042,7 +8080,7 @@ Z = (195, 195, 195) .....FFAA..FFA.. ..........FA.... } -# tile 418 (ogre,male) +# tile 420 (ogre,male) { ................ ................ @@ -8061,7 +8099,7 @@ Z = (195, 195, 195) ....CJJJCLAAAAAA ..LLLLL.LLLLLAA. } -# tile 419 (ogre,female) +# tile 421 (ogre,female) { ................ ................ @@ -8080,7 +8118,7 @@ Z = (195, 195, 195) ....CJJJCLAAAAAA ..LLLLL.LLLLLAA. } -# tile 420 (ogre leader,male) +# tile 422 (ogre leader,male) { ................ ................ @@ -8099,7 +8137,7 @@ Z = (195, 195, 195) ....CJJJCLAAAAAA ..LLLLL.LLLLLAA. } -# tile 421 (ogre leader,female) +# tile 423 (ogre leader,female) { ................ ................ @@ -8118,7 +8156,7 @@ Z = (195, 195, 195) ....CJJJCLAAAAAA ..LLLLL.LLLLLAA. } -# tile 422 (ogre tyrant,male) +# tile 424 (ogre tyrant,male) { ...H..C..H...... ...HDCHCDH...... @@ -8140,7 +8178,7 @@ Z = (195, 195, 195) # Contributing artist: Kestrel Gregorich-Trevor 27-Dec-2020 # Female ogre tyrants have slightly different crowns. # -# tile 423 (ogre tyrant,female) +# tile 425 (ogre tyrant,female) { ...HH.C.HH...... ...HDCHCDH...... @@ -8159,7 +8197,7 @@ Z = (195, 195, 195) ....CJJJCLAAAAAA ..LLLLL.LLLLLAA. } -# tile 424 (gray ooze,male) +# tile 426 (gray ooze,male) { ................ ................ @@ -8178,7 +8216,7 @@ Z = (195, 195, 195) .........KCCCJ.. ................ } -# tile 425 (gray ooze,female) +# tile 427 (gray ooze,female) { ................ ................ @@ -8197,7 +8235,7 @@ Z = (195, 195, 195) .........KCCCJ.. ................ } -# tile 426 (brown pudding,male) +# tile 428 (brown pudding,male) { ................ ................ @@ -8216,7 +8254,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 427 (brown pudding,female) +# tile 429 (brown pudding,female) { ................ ................ @@ -8235,7 +8273,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 428 (green slime,male) +# tile 430 (green slime,male) { ................ ................ @@ -8254,7 +8292,7 @@ Z = (195, 195, 195) NGGFGGF..GF..... ..GGF..GGF..G... } -# tile 429 (green slime,female) +# tile 431 (green slime,female) { ................ ................ @@ -8273,7 +8311,7 @@ Z = (195, 195, 195) NGGFGGF..GF..... ..GGF..GGF..G... } -# tile 430 (black pudding,male) +# tile 432 (black pudding,male) { ........A....... ........AA...... @@ -8292,7 +8330,7 @@ Z = (195, 195, 195) ........AAAAAAAA ..........AAAA.. } -# tile 431 (black pudding,female) +# tile 433 (black pudding,female) { ........A....... ........AA...... @@ -8311,7 +8349,7 @@ Z = (195, 195, 195) ........AAAAAAAA ..........AAAA.. } -# tile 432 (elf,male) +# tile 434 (elf,male) { ................ .........G...... @@ -8330,7 +8368,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 433 (elf,female) +# tile 435 (elf,female) { ................ .........G...... @@ -8349,7 +8387,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 434 (Woodland-elf,male) +# tile 436 (Woodland-elf,male) { ................ ................ @@ -8368,7 +8406,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 435 (Woodland-elf,female) +# tile 437 (Woodland-elf,female) { ................ ................ @@ -8387,7 +8425,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 436 (Green-elf,male) +# tile 438 (Green-elf,male) { ................ ................ @@ -8406,7 +8444,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 437 (Green-elf,female) +# tile 439 (Green-elf,female) { ................ ................ @@ -8425,7 +8463,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 438 (Grey-elf,male) +# tile 440 (Grey-elf,male) { ................ ................ @@ -8444,7 +8482,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 439 (Grey-elf,female) +# tile 441 (Grey-elf,female) { ................ ................ @@ -8463,7 +8501,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 440 (elf-noble,male) +# tile 442 (elf-noble,male) { ................ ................ @@ -8482,7 +8520,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 441 (elf-noble,female) +# tile 443 (elf-noble,female) { ................ ................ @@ -8501,7 +8539,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 442 (elven monarch,male) +# tile 444 (elven monarch,male) { ................ ................ @@ -8523,7 +8561,7 @@ Z = (195, 195, 195) # Contributing artist: NullCGT 27-Dec-2020 # Female elven monarchs have slightly different crowns. # -# tile 443 (elven monarch,female) +# tile 445 (elven monarch,female) { ................ ......H..H...... @@ -8542,7 +8580,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 444 (rust monster,male) +# tile 446 (rust monster,male) { ................ ....EEEE........ @@ -8561,7 +8599,7 @@ Z = (195, 195, 195) ......AAAA...... ................ } -# tile 445 (rust monster,female) +# tile 447 (rust monster,female) { ................ ....EEEE........ @@ -8580,7 +8618,7 @@ Z = (195, 195, 195) ......AAAA...... ................ } -# tile 446 (disenchanter,male) +# tile 448 (disenchanter,male) { ................ ....PPPP........ @@ -8599,7 +8637,7 @@ Z = (195, 195, 195) ......AAAA...... ................ } -# tile 447 (disenchanter,female) +# tile 449 (disenchanter,female) { ................ ....PPPP........ @@ -8618,7 +8656,7 @@ Z = (195, 195, 195) ......AAAA...... ................ } -# tile 448 (garter snake,male) +# tile 450 (garter snake,male) { ................ ................ @@ -8637,7 +8675,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 449 (garter snake,female) +# tile 451 (garter snake,female) { ................ ................ @@ -8656,7 +8694,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 450 (snake,male) +# tile 452 (snake,male) { ................ ................ @@ -8675,7 +8713,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 451 (snake,female) +# tile 453 (snake,female) { ................ ................ @@ -8694,7 +8732,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 452 (water moccasin,male) +# tile 454 (water moccasin,male) { ................ ................ @@ -8713,7 +8751,7 @@ Z = (195, 195, 195) .....AAAAA...... ................ } -# tile 453 (water moccasin,female) +# tile 455 (water moccasin,female) { ................ ................ @@ -8732,7 +8770,7 @@ Z = (195, 195, 195) .....AAAAA...... ................ } -# tile 454 (python,male) +# tile 456 (python,male) { ................ ................ @@ -8751,7 +8789,7 @@ Z = (195, 195, 195) .....JJJJJAA.... ................ } -# tile 455 (python,female) +# tile 457 (python,female) { ................ ................ @@ -8770,7 +8808,7 @@ Z = (195, 195, 195) .....JJJJJAA.... ................ } -# tile 456 (pit viper,male) +# tile 458 (pit viper,male) { ................ ................ @@ -8789,7 +8827,7 @@ Z = (195, 195, 195) ......AAAA...... ................ } -# tile 457 (pit viper,female) +# tile 459 (pit viper,female) { ................ ................ @@ -8808,7 +8846,7 @@ Z = (195, 195, 195) ......AAAA...... ................ } -# tile 458 (cobra,male) +# tile 460 (cobra,male) { ................ ................ @@ -8827,7 +8865,7 @@ Z = (195, 195, 195) .....AAAAAAAAA.. ................ } -# tile 459 (cobra,female) +# tile 461 (cobra,female) { ................ ................ @@ -8846,7 +8884,7 @@ Z = (195, 195, 195) .....AAAAAAAAA.. ................ } -# tile 460 (troll,male) +# tile 462 (troll,male) { ................ ..AAAAAA........ @@ -8865,7 +8903,7 @@ Z = (195, 195, 195) ..KJA..KA....... ................ } -# tile 461 (troll,female) +# tile 463 (troll,female) { ................ ..AAAAAA........ @@ -8884,7 +8922,7 @@ Z = (195, 195, 195) ..KJA..KA....... ................ } -# tile 462 (ice troll,male) +# tile 464 (ice troll,male) { ................ ..OONOOO........ @@ -8903,7 +8941,7 @@ Z = (195, 195, 195) ..KJA..KA....... ................ } -# tile 463 (ice troll,female) +# tile 465 (ice troll,female) { ................ ..OONOOO........ @@ -8922,7 +8960,7 @@ Z = (195, 195, 195) ..KJA..KA....... ................ } -# tile 464 (rock troll,male) +# tile 466 (rock troll,male) { ................ ...AAAAA........ @@ -8941,7 +8979,7 @@ Z = (195, 195, 195) ..KJA..KA....... ................ } -# tile 465 (rock troll,female) +# tile 467 (rock troll,female) { ................ ...AAAAA........ @@ -8960,7 +8998,7 @@ Z = (195, 195, 195) ..KJA..KA....... ................ } -# tile 466 (water troll,male) +# tile 468 (water troll,male) { ................ ...AAAAA........ @@ -8979,7 +9017,7 @@ Z = (195, 195, 195) ..KJA..KA....... ................ } -# tile 467 (water troll,female) +# tile 469 (water troll,female) { ................ ...AAAAA........ @@ -8998,7 +9036,7 @@ Z = (195, 195, 195) ..KJA..KA....... ................ } -# tile 468 (Olog-hai,male) +# tile 470 (Olog-hai,male) { ...PPPPP........ ..PPAAAPP....... @@ -9017,7 +9055,7 @@ Z = (195, 195, 195) ..AAA.AAA....... ................ } -# tile 469 (Olog-hai,female) +# tile 471 (Olog-hai,female) { ...PPPPP........ ..PPAAAPP....... @@ -9036,7 +9074,7 @@ Z = (195, 195, 195) ..AAA.AAA....... ................ } -# tile 470 (umber hulk,male) +# tile 472 (umber hulk,male) { ................ ...AAAAA........ @@ -9055,7 +9093,7 @@ Z = (195, 195, 195) .AAAP..AAP...... ................ } -# tile 471 (umber hulk,female) +# tile 473 (umber hulk,female) { ................ ...AAAAA........ @@ -9074,7 +9112,7 @@ Z = (195, 195, 195) .AAAP..AAP...... ................ } -# tile 472 (quantum mechanic,male) +# tile 474 (quantum mechanic,male) { ................ ......LLLL...... @@ -9096,7 +9134,7 @@ Z = (195, 195, 195) # Contributing artist: Kestrel Gregorich-Trevor 27-Dec-2020 # Female quantum mechanics have a different hairstyle and no beard. # -# tile 473 (quantum mechanic,female) +# tile 475 (quantum mechanic,female) { ................ ......JJJJJ..... @@ -9115,7 +9153,7 @@ Z = (195, 195, 195) ....NAAEBAANN... ................ } -# tile 474 (mind flayer,male) +# tile 476 (mind flayer,male) { ................ .......IIIIC.... @@ -9134,7 +9172,7 @@ Z = (195, 195, 195) ......CFFCAA.... ....IIC.IIA..... } -# tile 475 (mind flayer,female) +# tile 477 (mind flayer,female) { ................ .......IIIIC.... @@ -9157,7 +9195,7 @@ Z = (195, 195, 195) # Male and female genetic engineers look the same, because the genetic # engineer tile is perfect. # -# tile 476 (genetic engineer,male) +# tile 478 (genetic engineer,male) { ................ ......LLLL...... @@ -9176,7 +9214,7 @@ Z = (195, 195, 195) ..AANAAEPAANN... ................ } -# tile 477 (genetic engineer,female) +# tile 479 (genetic engineer,female) { ................ ......LLLL...... @@ -9195,7 +9233,7 @@ Z = (195, 195, 195) ..AANAAEPAANN... ................ } -# tile 478 (master mind flayer,male) +# tile 480 (master mind flayer,male) { ................ .......IIIIC.... @@ -9214,7 +9252,7 @@ Z = (195, 195, 195) ...EEECEEEAA.... ....IIC.IIA..... } -# tile 479 (master mind flayer,female) +# tile 481 (master mind flayer,female) { ................ .......IIIIC.... @@ -9233,7 +9271,7 @@ Z = (195, 195, 195) ...EEECEEEAA.... ....IIC.IIA..... } -# tile 480 (vampire,male) +# tile 482 (vampire,male) { ................ ................ @@ -9252,7 +9290,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 481 (vampire,female) +# tile 483 (vampire,female) { ................ ................ @@ -9271,7 +9309,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 482 (vampire leader,male) +# tile 484 (vampire leader,male) { ................ .....AAAA....... @@ -9290,7 +9328,7 @@ Z = (195, 195, 195) .N..AAPP..AP.... ................ } -# tile 483 (vampire leader,female) +# tile 485 (vampire leader,female) { ................ .....AAAA....... @@ -9309,7 +9347,7 @@ Z = (195, 195, 195) .N..AAPP..AP.... ................ } -# tile 484 (vampire mage,male) +# tile 486 (vampire mage,male) { ................ ................ @@ -9328,7 +9366,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 485 (vampire mage,female) +# tile 487 (vampire mage,female) { ................ ................ @@ -9347,7 +9385,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 486 (Vlad the Impaler,male) +# tile 488 (Vlad the Impaler,male) { ................ ..N..AAAA....... @@ -9366,7 +9404,7 @@ Z = (195, 195, 195) ..N.AAPP..AP.... ................ } -# tile 487 (Vlad the Impaler,female) +# tile 489 (Vlad the Impaler,female) { ................ ..N..AAAA....... @@ -9385,7 +9423,7 @@ Z = (195, 195, 195) ..N.AAPP..AP.... ................ } -# tile 488 (barrow wight,male) +# tile 490 (barrow wight,male) { ................ ................ @@ -9410,7 +9448,7 @@ Z = (195, 195, 195) # that they look similar enough to the males that you can tell they are # barrow wights. # -# tile 489 (barrow wight,female) +# tile 491 (barrow wight,female) { ................ .......OOOOO.... @@ -9429,7 +9467,7 @@ Z = (195, 195, 195) .J.....LLAA..... ................ } -# tile 490 (wraith,male) +# tile 492 (wraith,male) { ................ ................ @@ -9448,7 +9486,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 491 (wraith,female) +# tile 493 (wraith,female) { ................ ................ @@ -9467,7 +9505,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 492 (Nazgul,male) +# tile 494 (Nazgul,male) { ................ ................ @@ -9486,7 +9524,7 @@ Z = (195, 195, 195) ......PPPPA..... ................ } -# tile 493 (Nazgul,female) +# tile 495 (Nazgul,female) { ................ ................ @@ -9505,7 +9543,7 @@ Z = (195, 195, 195) ......PPPPA..... ................ } -# tile 494 (ghost,male) +# tile 496 (ghost,male) { ................ ................ @@ -9524,7 +9562,7 @@ Z = (195, 195, 195) .O...P....P..... ........P....... } -# tile 495 (ghost,female) +# tile 497 (ghost,female) { ................ ................ @@ -9543,7 +9581,7 @@ Z = (195, 195, 195) .O...P....P..... ........P....... } -# tile 496 (shade,male) +# tile 498 (shade,male) { ................ ................ @@ -9562,7 +9600,7 @@ Z = (195, 195, 195) AAAA.AAAAJA..... ................ } -# tile 497 (shade,female) +# tile 499 (shade,female) { ................ ................ @@ -9581,7 +9619,7 @@ Z = (195, 195, 195) AAAA.AAAAJA..... ................ } -# tile 498 (xorn,male) +# tile 500 (xorn,male) { ................ ................ @@ -9600,7 +9638,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 499 (xorn,female) +# tile 501 (xorn,female) { ................ ................ @@ -9619,7 +9657,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 500 (monkey,male) +# tile 502 (monkey,male) { ................ ................ @@ -9638,7 +9676,7 @@ Z = (195, 195, 195) .....JJA.JJA.... ................ } -# tile 501 (monkey,female) +# tile 503 (monkey,female) { ................ ................ @@ -9657,7 +9695,7 @@ Z = (195, 195, 195) .....JJA.JJA.... ................ } -# tile 502 (ape,male) +# tile 504 (ape,male) { ................ ................ @@ -9676,7 +9714,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 503 (ape,female) +# tile 505 (ape,female) { ................ ................ @@ -9695,7 +9733,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 504 (owlbear,male) +# tile 506 (owlbear,male) { ................ ....K.....K..... @@ -9714,7 +9752,7 @@ Z = (195, 195, 195) ...PJPJAJPJPA... ................ } -# tile 505 (owlbear,female) +# tile 507 (owlbear,female) { ................ ....K.....K..... @@ -9733,7 +9771,7 @@ Z = (195, 195, 195) ...PJPJAJPJPA... ................ } -# tile 506 (yeti,male) +# tile 508 (yeti,male) { ................ ....BNNN........ @@ -9752,7 +9790,7 @@ Z = (195, 195, 195) ..BNNA..NNA..... ................ } -# tile 507 (yeti,female) +# tile 509 (yeti,female) { ................ ....BNNN........ @@ -9771,7 +9809,7 @@ Z = (195, 195, 195) ..BNNA..NNA..... ................ } -# tile 508 (carnivorous ape,male) +# tile 510 (carnivorous ape,male) { ................ ................ @@ -9790,7 +9828,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 509 (carnivorous ape,female) +# tile 511 (carnivorous ape,female) { ................ ................ @@ -9809,7 +9847,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 510 (sasquatch,male) +# tile 512 (sasquatch,male) { ................ ....CCCCC....... @@ -9828,7 +9866,7 @@ Z = (195, 195, 195) .CJJJKACKJJKA... ................ } -# tile 511 (sasquatch,female) +# tile 513 (sasquatch,female) { ................ ....CCCCC....... @@ -9847,7 +9885,7 @@ Z = (195, 195, 195) .CJJJKACKJJKA... ................ } -# tile 512 (kobold zombie,male) +# tile 514 (kobold zombie,male) { ................ ................ @@ -9866,7 +9904,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 513 (kobold zombie,female) +# tile 515 (kobold zombie,female) { ................ ................ @@ -9885,7 +9923,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 514 (gnome zombie,male) +# tile 516 (gnome zombie,male) { ................ ................ @@ -9904,7 +9942,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 515 (gnome zombie,female) +# tile 517 (gnome zombie,female) { ................ ................ @@ -9923,7 +9961,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 516 (orc zombie,male) +# tile 518 (orc zombie,male) { ................ ................ @@ -9942,7 +9980,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 517 (orc zombie,female) +# tile 519 (orc zombie,female) { ................ ................ @@ -9961,7 +9999,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 518 (dwarf zombie,male) +# tile 520 (dwarf zombie,male) { ................ ................ @@ -9980,7 +10018,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 519 (dwarf zombie,female) +# tile 521 (dwarf zombie,female) { ................ ................ @@ -9999,7 +10037,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 520 (elf zombie,male) +# tile 522 (elf zombie,male) { ................ ................ @@ -10018,7 +10056,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 521 (elf zombie,female) +# tile 523 (elf zombie,female) { ................ ................ @@ -10037,7 +10075,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 522 (human zombie,male) +# tile 524 (human zombie,male) { ......AAA....... .....FFGAA...... @@ -10056,7 +10094,7 @@ Z = (195, 195, 195) ....GGAGGA...... ................ } -# tile 523 (human zombie,female) +# tile 525 (human zombie,female) { ......AAA....... .....FFGAA...... @@ -10075,7 +10113,7 @@ Z = (195, 195, 195) ....GGAGGA...... ................ } -# tile 524 (ghoul,male) +# tile 526 (ghoul,male) { ......AAA....... .....OOOAA...... @@ -10094,7 +10132,7 @@ Z = (195, 195, 195) ....OOAOOA...... ................ } -# tile 525 (ghoul,female) +# tile 527 (ghoul,female) { ......AAA....... .....OOOAA...... @@ -10113,7 +10151,7 @@ Z = (195, 195, 195) ....OOAOOA...... ................ } -# tile 526 (ettin zombie,male) +# tile 528 (ettin zombie,male) { ....NN..ONOP.... ..NNOOPNNOOPP... @@ -10132,7 +10170,7 @@ Z = (195, 195, 195) .....GFAAGFAAAAA ...FFFFA.GFFFFAA } -# tile 527 (ettin zombie,female) +# tile 529 (ettin zombie,female) { ....NN..ONOP.... ..NNOOPNNOOPP... @@ -10151,7 +10189,7 @@ Z = (195, 195, 195) .....GFAAGFAAAAA ...FFFFA.GFFFFAA } -# tile 528 (giant zombie,male) +# tile 530 (giant zombie,male) { ......JJJJAA.... ....JJJJJJJJA... @@ -10170,7 +10208,7 @@ Z = (195, 195, 195) ....GFFAGFFAAAAA ...GFFAAGFFFAAAA } -# tile 529 (giant zombie,female) +# tile 531 (giant zombie,female) { ......JJJJAA.... ....JJJJJJJJA... @@ -10189,7 +10227,7 @@ Z = (195, 195, 195) ....GFFAGFFAAAAA ...GFFAAGFFFAAAA } -# tile 530 (skeleton,male) +# tile 532 (skeleton,male) { ................ ................ @@ -10208,7 +10246,7 @@ Z = (195, 195, 195) ......OOO....... ................ } -# tile 531 (skeleton,female) +# tile 533 (skeleton,female) { ................ ................ @@ -10227,7 +10265,7 @@ Z = (195, 195, 195) ......OOO....... ................ } -# tile 532 (straw golem,male) +# tile 534 (straw golem,male) { ......LJ........ ......LJHJ...... @@ -10246,7 +10284,7 @@ Z = (195, 195, 195) ....HALA.AHAAL.. ..........L..... } -# tile 533 (straw golem,female) +# tile 535 (straw golem,female) { ......LJ........ ......LJHJ...... @@ -10265,7 +10303,7 @@ Z = (195, 195, 195) ....HALA.AHAAL.. ..........L..... } -# tile 534 (paper golem,male) +# tile 536 (paper golem,male) { ................ .......OA....... @@ -10284,7 +10322,7 @@ Z = (195, 195, 195) ....OOA...OOA... ................ } -# tile 535 (paper golem,female) +# tile 537 (paper golem,female) { ................ .......OA....... @@ -10303,7 +10341,7 @@ Z = (195, 195, 195) ....OOA...OOA... ................ } -# tile 536 (rope golem,male) +# tile 538 (rope golem,male) { ................ ................ @@ -10322,7 +10360,7 @@ Z = (195, 195, 195) ...O.A....OAA... ....OA.......... } -# tile 537 (rope golem,female) +# tile 539 (rope golem,female) { ................ ................ @@ -10341,7 +10379,7 @@ Z = (195, 195, 195) ...O.A....OAA... ....OA.......... } -# tile 538 (gold golem,male) +# tile 540 (gold golem,male) { ................ ......HNH....... @@ -10360,7 +10398,7 @@ Z = (195, 195, 195) H...HNC.AHNC.A.H ..H............. } -# tile 539 (gold golem,female) +# tile 541 (gold golem,female) { ................ ......HNH....... @@ -10379,7 +10417,7 @@ Z = (195, 195, 195) H...HNC.AHNC.A.H ..H............. } -# tile 540 (leather golem,male) +# tile 542 (leather golem,male) { ......KKKK...... .....KHKHJ...... @@ -10398,7 +10436,7 @@ Z = (195, 195, 195) ...KJJA..KJJA... ....KA....KA.... } -# tile 541 (leather golem,female) +# tile 543 (leather golem,female) { ......KKKK...... .....KHKHJ...... @@ -10417,7 +10455,7 @@ Z = (195, 195, 195) ...KJJA..KJJA... ....KA....KA.... } -# tile 542 (wood golem,male) +# tile 544 (wood golem,male) { ................ ......KCKJ...... @@ -10436,7 +10474,7 @@ Z = (195, 195, 195) ....KCKJAKCKJA.. ................ } -# tile 543 (wood golem,female) +# tile 545 (wood golem,female) { ................ ......KCKJ...... @@ -10455,7 +10493,7 @@ Z = (195, 195, 195) ....KCKJAKCKJA.. ................ } -# tile 544 (flesh golem,male) +# tile 546 (flesh golem,male) { ................ ................ @@ -10474,7 +10512,7 @@ Z = (195, 195, 195) ..LLDDD..DDDDD.. ................ } -# tile 545 (flesh golem,female) +# tile 547 (flesh golem,female) { ................ ................ @@ -10493,7 +10531,7 @@ Z = (195, 195, 195) ..LLDDD..DDDDD.. ................ } -# tile 546 (clay golem,male) +# tile 548 (clay golem,male) { ................ ................ @@ -10512,7 +10550,7 @@ Z = (195, 195, 195) ..CKKKA.CKKKAA.. ................ } -# tile 547 (clay golem,female) +# tile 549 (clay golem,female) { ................ ................ @@ -10531,7 +10569,7 @@ Z = (195, 195, 195) ..CKKKA.CKKKAA.. ................ } -# tile 548 (stone golem,male) +# tile 550 (stone golem,male) { ................ ................ @@ -10550,7 +10588,7 @@ Z = (195, 195, 195) ...PPAA.PPPA.... ................ } -# tile 549 (stone golem,female) +# tile 551 (stone golem,female) { ................ ................ @@ -10569,7 +10607,7 @@ Z = (195, 195, 195) ...PPAA.PPPA.... ................ } -# tile 550 (glass golem,male) +# tile 552 (glass golem,male) { ................ .....BBBBBBA.... @@ -10588,7 +10626,7 @@ Z = (195, 195, 195) ..BNPA....NPAA.. ...BA.....BPA... } -# tile 551 (glass golem,female) +# tile 553 (glass golem,female) { ................ .....BBBBBBA.... @@ -10607,7 +10645,7 @@ Z = (195, 195, 195) ..BNPA....NPAA.. ...BA.....BPA... } -# tile 552 (iron golem,male) +# tile 554 (iron golem,male) { ................ ......PBP....... @@ -10626,7 +10664,7 @@ Z = (195, 195, 195) ....PBP.APBP.A.. ................ } -# tile 553 (iron golem,female) +# tile 555 (iron golem,female) { ................ ......PBP....... @@ -10645,7 +10683,7 @@ Z = (195, 195, 195) ....PBP.APBP.A.. ................ } -# tile 554 (human,male) +# tile 556 (human,male) { ................ ................ @@ -10667,7 +10705,7 @@ Z = (195, 195, 195) # Contributing artist: Kestrel Gregorich-Trevor 27-Dec-2020 # Female humans wear slightly different clothing. # -# tile 555 (human,female) +# tile 557 (human,female) { ................ ................ @@ -10686,7 +10724,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 556 (wererat,male) +# tile 558 (wererat,male) { ................ ................ @@ -10705,7 +10743,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 557 (wererat,female) +# tile 559 (wererat,female) { ................ ................ @@ -10724,7 +10762,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 558 (werejackal,male) +# tile 560 (werejackal,male) { ................ ................ @@ -10746,7 +10784,7 @@ Z = (195, 195, 195) # Contributing artist: Kestrel Gregorich-Trevor 27-Dec-2020 # Female werejackals wear slightly different clothing. # -# tile 559 (werejackal,female) +# tile 561 (werejackal,female) { ................ ................ @@ -10765,7 +10803,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 560 (werewolf,male) +# tile 562 (werewolf,male) { ................ ................ @@ -10787,7 +10825,7 @@ Z = (195, 195, 195) # Contributing artist: Kestrel Gregorich-Trevor 27-Dec-2020 # Female werewolves wear slightly different clothing. # -# tile 561 (werewolf,female) +# tile 563 (werewolf,female) { ................ ................ @@ -10806,7 +10844,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 562 (doppelganger,male) +# tile 564 (doppelganger,male) { ................ ......CCCC..I... @@ -10825,7 +10863,7 @@ Z = (195, 195, 195) ..CD.LLAALLADC.. ................ } -# tile 563 (doppelganger,female) +# tile 565 (doppelganger,female) { ................ ......CCCC..I... @@ -10844,7 +10882,7 @@ Z = (195, 195, 195) ..CD.LLAALLADC.. ................ } -# tile 564 (shopkeeper,male) +# tile 566 (shopkeeper,male) { ................ ................ @@ -10863,7 +10901,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 565 (shopkeeper,female) +# tile 567 (shopkeeper,female) { ................ ................ @@ -10882,7 +10920,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 566 (guard,male) +# tile 568 (guard,male) { ................ .....BBPPPAA.... @@ -10905,7 +10943,7 @@ Z = (195, 195, 195) # Female guards are clean-shaven. Although of course not one # hundred percent accurate, it's convenient visual shorthand. # -# tile 567 (guard,female) +# tile 569 (guard,female) { ................ .....BBPPPAA.... @@ -10924,7 +10962,7 @@ Z = (195, 195, 195) .....BPPABPPAAAA ....BPPP.BPPPAAA } -# tile 568 (prisoner,male) +# tile 570 (prisoner,male) { ................ ................ @@ -10943,7 +10981,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 569 (prisoner,female) +# tile 571 (prisoner,female) { ................ ................ @@ -10962,7 +11000,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 570 (Oracle,male) +# tile 572 (Oracle,male) { ................ ................ @@ -10981,7 +11019,7 @@ Z = (195, 195, 195) ....LELLLLELAA.. ................ } -# tile 571 (Oracle,female) +# tile 573 (Oracle,female) { ................ ................ @@ -11000,7 +11038,7 @@ Z = (195, 195, 195) ....LELLLLELAA.. ................ } -# tile 572 (aligned cleric,male) +# tile 574 (aligned cleric,male) { ................ INI............. @@ -11019,7 +11057,7 @@ Z = (195, 195, 195) .JACCCJJCCCAA... ................ } -# tile 573 (aligned cleric,female) +# tile 575 (aligned cleric,female) { ................ INI............. @@ -11038,7 +11076,7 @@ Z = (195, 195, 195) .JACCCJJCCCAA... ................ } -# tile 574 (high cleric,male) +# tile 576 (high cleric,male) { .INI............ IIIII.KCCK...... @@ -11057,7 +11095,7 @@ Z = (195, 195, 195) ..HACCCJJCCCAA.. ................ } -# tile 575 (high cleric,female) +# tile 577 (high cleric,female) { .INI............ IIIII.KCCK...... @@ -11076,7 +11114,7 @@ Z = (195, 195, 195) ..HACCCJJCCCAA.. ................ } -# tile 576 (soldier,male) +# tile 578 (soldier,male) { .....J.......... .....JAAA....... @@ -11095,7 +11133,7 @@ Z = (195, 195, 195) .....JJ.JJ...... ................ } -# tile 577 (soldier,female) +# tile 579 (soldier,female) { .....J.......... .....JAAA....... @@ -11114,7 +11152,7 @@ Z = (195, 195, 195) .....JJ.JJ...... ................ } -# tile 578 (sergeant,male) +# tile 580 (sergeant,male) { .....J.......... .....JFFF....... @@ -11133,7 +11171,7 @@ Z = (195, 195, 195) .....AA.AA...... ................ } -# tile 579 (sergeant,female) +# tile 581 (sergeant,female) { .....J.......... .....JFFF....... @@ -11152,7 +11190,7 @@ Z = (195, 195, 195) .....AA.AA...... ................ } -# tile 580 (nurse,male) +# tile 582 (nurse,male) { ................ .......NO....... @@ -11171,7 +11209,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 581 (nurse,female) +# tile 583 (nurse,female) { ................ .......NO....... @@ -11190,7 +11228,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 582 (lieutenant,male) +# tile 584 (lieutenant,male) { ................ .......FFF...... @@ -11209,7 +11247,7 @@ Z = (195, 195, 195) .....AA.AA...... ................ } -# tile 583 (lieutenant,female) +# tile 585 (lieutenant,female) { ................ .......FFF...... @@ -11228,7 +11266,7 @@ Z = (195, 195, 195) .....AA.AA...... ................ } -# tile 584 (captain,male) +# tile 586 (captain,male) { ................ ......FHHF...... @@ -11247,7 +11285,7 @@ Z = (195, 195, 195) .....AA.AAAAA... ................ } -# tile 585 (captain,female) +# tile 587 (captain,female) { ................ ......FHHF...... @@ -11266,7 +11304,7 @@ Z = (195, 195, 195) .....AA.AAAAA... ................ } -# tile 586 (watchman,male) +# tile 588 (watchman,male) { ................ ......PPP....... @@ -11285,7 +11323,7 @@ Z = (195, 195, 195) ....JJJ.JJJ..... ................ } -# tile 587 (watchman,female) +# tile 589 (watchman,female) { ................ ......PPP....... @@ -11304,7 +11342,7 @@ Z = (195, 195, 195) ....JJJ.JJJ..... ................ } -# tile 588 (watch captain,male) +# tile 590 (watch captain,male) { ......PPP....... .....PHHHP...... @@ -11323,7 +11361,7 @@ Z = (195, 195, 195) ....JJJ.JJJ..... ................ } -# tile 589 (watch captain,female) +# tile 591 (watch captain,female) { ......PPP....... .....PHHHP...... @@ -11342,7 +11380,7 @@ Z = (195, 195, 195) ....JJJ.JJJ..... ................ } -# tile 590 (Medusa,male) +# tile 592 (Medusa,male) { ................ ..GA...GA....... @@ -11361,7 +11399,7 @@ Z = (195, 195, 195) ..IIKIKIKIA..... ................ } -# tile 591 (Medusa,female) +# tile 593 (Medusa,female) { ................ ..GA...GA....... @@ -11380,7 +11418,7 @@ Z = (195, 195, 195) ..IIKIKIKIA..... ................ } -# tile 592 (Wizard of Yendor,male) +# tile 594 (Wizard of Yendor,male) { .EEE.....G.EEE.. ELLAI..E..EALLE. @@ -11399,7 +11437,7 @@ Z = (195, 195, 195) .EEEEHEHEHEEAAA. EEEHHEEHEEHHEEA. } -# tile 593 (Wizard of Yendor,female) +# tile 595 (Wizard of Yendor,female) { .EEE.....G.EEE.. ELLAI..E..EALLE. @@ -11418,7 +11456,7 @@ Z = (195, 195, 195) .EEEEHEHEHEEAAA. EEEHHEEHEEHHEEA. } -# tile 594 (Croesus,male) +# tile 596 (Croesus,male) { ....H..H..H..... ....HCHEHCH..... @@ -11437,7 +11475,7 @@ Z = (195, 195, 195) .GIIIKJJKKIIIGG. ................ } -# tile 595 (Croesus,female) +# tile 597 (Croesus,female) { ....H..H..H..... ....HCHEHCH..... @@ -11456,7 +11494,7 @@ Z = (195, 195, 195) .GIIIKJJKKIIIGG. ................ } -# tile 596 (Charon,male) +# tile 598 (Charon,male) { ................ .......J........ @@ -11475,7 +11513,7 @@ Z = (195, 195, 195) .JJJJJJJJJJJAAA. JJJJJJJJJJJJJJA. } -# tile 597 (Charon,female) +# tile 599 (Charon,female) { ................ .......J........ @@ -11494,7 +11532,7 @@ Z = (195, 195, 195) .JJJJJJJJJJJAAA. JJJJJJJJJJJJJJA. } -# tile 598 (water demon,male) +# tile 600 (water demon,male) { ................ ................ @@ -11513,7 +11551,7 @@ Z = (195, 195, 195) ....EEAEEA...... ................ } -# tile 599 (water demon,female) +# tile 601 (water demon,female) { ................ ................ @@ -11532,7 +11570,7 @@ Z = (195, 195, 195) ....EEAEEA...... ................ } -# tile 600 (amorous demon,male) +# tile 602 (amorous demon,male) { DD.OHHD......... DDOHHDGD........ @@ -11551,7 +11589,7 @@ Z = (195, 195, 195) ...DDKAA..DDAA.. ..DDKAA...DDDA.. } -# tile 601 (amorous demon,female) +# tile 603 (amorous demon,female) { DD.OHHD......... DDOHHDGD........ @@ -11570,7 +11608,7 @@ Z = (195, 195, 195) ....DDAA..DDAA.. ...DDJA...DDDA.. } -# tile 602 (horned devil,male) +# tile 604 (horned devil,male) { ................ ................ @@ -11589,7 +11627,7 @@ Z = (195, 195, 195) ..CDDAA.DDK..... ................ } -# tile 603 (horned devil,female) +# tile 605 (horned devil,female) { ................ ................ @@ -11608,7 +11646,7 @@ Z = (195, 195, 195) ..CDDAA.DDK..... ................ } -# tile 604 (erinys,male) +# tile 606 (erinys,male) { ..GA...GA....... ...FA.FA..GA.... @@ -11627,7 +11665,7 @@ Z = (195, 195, 195) ..BBEBEBEBA..... ................ } -# tile 605 (erinys,female) +# tile 607 (erinys,female) { ..GA...GA....... ...FA.FA..GA.... @@ -11646,7 +11684,7 @@ Z = (195, 195, 195) ..BBEBEBEBA..... ................ } -# tile 606 (barbed devil,male) +# tile 608 (barbed devil,male) { ................ ................ @@ -11665,7 +11703,7 @@ Z = (195, 195, 195) .CCDDAA.DDKK.... ................ } -# tile 607 (barbed devil,female) +# tile 609 (barbed devil,female) { ................ ................ @@ -11684,7 +11722,7 @@ Z = (195, 195, 195) .CCDDAA.DDKK.... ................ } -# tile 608 (marilith,male) +# tile 610 (marilith,male) { .D..HHH.....D... DD.HHHHHA...DD.. @@ -11703,7 +11741,7 @@ Z = (195, 195, 195) ..FGFFFFFFFFFA.. ....GFFFFFFAA... } -# tile 609 (marilith,female) +# tile 611 (marilith,female) { .D..HHH.....D... DD.HHHHHA...DD.. @@ -11722,7 +11760,7 @@ Z = (195, 195, 195) ..FGFFFFFFFFFA.. ....GFFFFFFAA... } -# tile 610 (vrock,male) +# tile 612 (vrock,male) { ................ ......OPP.O..... @@ -11741,7 +11779,7 @@ Z = (195, 195, 195) .....DFA.GGA..F. ................ } -# tile 611 (vrock,female) +# tile 613 (vrock,female) { ................ ......OPP.O..... @@ -11760,7 +11798,7 @@ Z = (195, 195, 195) .....DFA.GGA..F. ................ } -# tile 612 (hezrou,male) +# tile 614 (hezrou,male) { ................ ................ @@ -11779,7 +11817,7 @@ Z = (195, 195, 195) ...........FFFA. ................ } -# tile 613 (hezrou,female) +# tile 615 (hezrou,female) { ................ ................ @@ -11798,7 +11836,7 @@ Z = (195, 195, 195) ...........FFFA. ................ } -# tile 614 (bone devil,male) +# tile 616 (bone devil,male) { ................ ................ @@ -11817,7 +11855,7 @@ Z = (195, 195, 195) ..NOOAA.OOL..... ................ } -# tile 615 (bone devil,female) +# tile 617 (bone devil,female) { ................ ................ @@ -11836,7 +11874,7 @@ Z = (195, 195, 195) ..NOOAA.OOL..... ................ } -# tile 616 (ice devil,male) +# tile 618 (ice devil,male) { ................ ................ @@ -11855,7 +11893,7 @@ Z = (195, 195, 195) ..BNNAA.NNP..... ................ } -# tile 617 (ice devil,female) +# tile 619 (ice devil,female) { ................ ................ @@ -11874,7 +11912,7 @@ Z = (195, 195, 195) ..BNNAA.NNP..... ................ } -# tile 618 (nalfeshnee,male) +# tile 620 (nalfeshnee,male) { ................ ................ @@ -11893,7 +11931,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 619 (nalfeshnee,female) +# tile 621 (nalfeshnee,female) { ................ ................ @@ -11912,7 +11950,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 620 (pit fiend,male) +# tile 622 (pit fiend,male) { ................ .K.O.......O.K.. @@ -11931,7 +11969,7 @@ Z = (195, 195, 195) ...CDDAA.DDK.... ................ } -# tile 621 (pit fiend,female) +# tile 623 (pit fiend,female) { ................ .K.O.......O.K.. @@ -11950,7 +11988,7 @@ Z = (195, 195, 195) ...CDDAA.DDK.... ................ } -# tile 622 (sandestin,male) +# tile 624 (sandestin,male) { .....CCCCC..I... .I..CD....C..... @@ -11969,7 +12007,7 @@ Z = (195, 195, 195) .CD.DDAADDDADC.. ................ } -# tile 623 (sandestin,female) +# tile 625 (sandestin,female) { .....CCCCC..I... .I..CD....C..... @@ -11988,7 +12026,7 @@ Z = (195, 195, 195) .CD.DDAADDDADC.. ................ } -# tile 624 (balrog,male) +# tile 626 (balrog,male) { ................ .K..O.....O..K.. @@ -12007,7 +12045,7 @@ Z = (195, 195, 195) ..CDDDAA.DDDK.AA ................ } -# tile 625 (balrog,female) +# tile 627 (balrog,female) { ................ .K..O.....O..K.. @@ -12026,7 +12064,7 @@ Z = (195, 195, 195) ..CDDDAA.DDDK.AA ................ } -# tile 626 (Juiblex,male) +# tile 628 (Juiblex,male) { ................ DD.........DD... @@ -12045,7 +12083,7 @@ Z = (195, 195, 195) .CCCCCCCCCCCKA.. ................ } -# tile 627 (Juiblex,female) +# tile 629 (Juiblex,female) { ................ DD.........DD... @@ -12064,7 +12102,7 @@ Z = (195, 195, 195) .CCCCCCCCCCCKA.. ................ } -# tile 628 (Yeenoghu,male) +# tile 630 (Yeenoghu,male) { ....B.HHP....... ....BPPPP....... @@ -12083,7 +12121,7 @@ Z = (195, 195, 195) ...BPAA.PPA..... ................ } -# tile 629 (Yeenoghu,female) +# tile 631 (Yeenoghu,female) { ....B.HHP....... ....BPPPP....... @@ -12102,7 +12140,7 @@ Z = (195, 195, 195) ...BPAA.PPA..... ................ } -# tile 630 (Orcus,male) +# tile 632 (Orcus,male) { ................ .K..O.....O..K.. @@ -12121,7 +12159,7 @@ Z = (195, 195, 195) ...OOPPAOOPPAGA. ................ } -# tile 631 (Orcus,female) +# tile 633 (Orcus,female) { ................ .K..O.....O..K.. @@ -12140,7 +12178,7 @@ Z = (195, 195, 195) ...OOPPAOOPPAGA. ................ } -# tile 632 (Geryon,male) +# tile 634 (Geryon,male) { .K...........K.. .K....JJJ....KJ. @@ -12159,7 +12197,7 @@ Z = (195, 195, 195) ....FGGGFFFFFFFA .....FFFFFFFFFA. } -# tile 633 (Geryon,female) +# tile 635 (Geryon,female) { .K...........K.. .K....JJJ....KJ. @@ -12178,7 +12216,7 @@ Z = (195, 195, 195) ....FGGGFFFFFFFA .....FFFFFFFFFA. } -# tile 634 (Dispater,male) +# tile 636 (Dispater,male) { ................ ......OJJO...... @@ -12197,7 +12235,7 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 635 (Dispater,female) +# tile 637 (Dispater,female) { ................ ......OJJO...... @@ -12216,7 +12254,7 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 636 (Baalzebub,male) +# tile 638 (Baalzebub,male) { ......F...F..... .......F.F...... @@ -12235,7 +12273,7 @@ Z = (195, 195, 195) .....FFA..FF.... ................ } -# tile 637 (Baalzebub,female) +# tile 639 (Baalzebub,female) { ......F...F..... .......F.F...... @@ -12254,7 +12292,7 @@ Z = (195, 195, 195) .....FFA..FF.... ................ } -# tile 638 (Asmodeus,male) +# tile 640 (Asmodeus,male) { ................ ......OJJO...... @@ -12273,7 +12311,7 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 639 (Asmodeus,female) +# tile 641 (Asmodeus,female) { ................ ......OJJO...... @@ -12292,7 +12330,7 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 640 (Demogorgon,male) +# tile 642 (Demogorgon,male) { ...KKK..KKK..... ..KBKBK.BKBK.... @@ -12311,7 +12349,7 @@ Z = (195, 195, 195) ..GAGFAFFFAFA... ................ } -# tile 641 (Demogorgon,female) +# tile 643 (Demogorgon,female) { ...KKK..KKK..... ..KBKBK.BKBK.... @@ -12330,7 +12368,7 @@ Z = (195, 195, 195) ..GAGFAFFFAFA... ................ } -# tile 642 (Death,male) +# tile 644 (Death,male) { .BBBB....JJJ.... .BPPPP.JJJJ..... @@ -12349,7 +12387,7 @@ Z = (195, 195, 195) .CJJAAAAAAAAJJA. ACJAAAAAAAAAAAJ. } -# tile 643 (Death,female) +# tile 645 (Death,female) { .BBBB....JJJ.... .BPPPP.JJJJ..... @@ -12368,7 +12406,7 @@ Z = (195, 195, 195) .CJJAAAAAAAAJJA. ACJAAAAAAAAAAAJ. } -# tile 644 (Pestilence,male) +# tile 646 (Pestilence,male) { F........JJJ.... ..F....JJJJ..... @@ -12387,7 +12425,7 @@ Z = (195, 195, 195) ..JJFBFAFFAJJJA. .JJAAFAFAAAAAAJ. } -# tile 645 (Pestilence,female) +# tile 647 (Pestilence,female) { F........JJJ.... ..F....JJJJ..... @@ -12406,7 +12444,7 @@ Z = (195, 195, 195) ..JJFBFAFFAJJJA. .JJAAFAFAAAAAAJ. } -# tile 646 (Famine,male) +# tile 648 (Famine,male) { .........JJJ.... .......JJJ...... @@ -12425,7 +12463,7 @@ Z = (195, 195, 195) K...JJAAAJJAA... K..JJAAAAAJJJA.. } -# tile 647 (Famine,female) +# tile 649 (Famine,female) { .........JJJ.... .......JJJ...... @@ -12444,7 +12482,7 @@ Z = (195, 195, 195) K...JJAAAJJAA... K..JJAAAAAJJJA.. } -# tile 648 (mail daemon,male) +# tile 650 (mail daemon,male) { ...OP.BEEE.PO... ...OOEBEEEEOOD.. @@ -12463,7 +12501,7 @@ Z = (195, 195, 195) ..CDDDAAA.DDDK.. ................ } -# tile 649 (mail daemon,female) +# tile 651 (mail daemon,female) { ...OP.BEEE.PO... ...OOEBEEEEOOD.. @@ -12482,7 +12520,7 @@ Z = (195, 195, 195) ..CDDDAAA.DDDK.. ................ } -# tile 650 (djinni,male) +# tile 652 (djinni,male) { .LL..NNN..LL.... ..L..NGNA.L..... @@ -12501,7 +12539,7 @@ Z = (195, 195, 195) .........IFED... ................ } -# tile 651 (djinni,female) +# tile 653 (djinni,female) { .LL..NNN..LL.... ..L..NGNA.L..... @@ -12520,7 +12558,7 @@ Z = (195, 195, 195) .........IFED... ................ } -# tile 652 (jellyfish,male) +# tile 654 (jellyfish,male) { ................ .....PBPA....... @@ -12539,7 +12577,7 @@ Z = (195, 195, 195) ..PEE.P.E..E.... .P..E.P..E...... } -# tile 653 (jellyfish,female) +# tile 655 (jellyfish,female) { ................ .....PBPA....... @@ -12558,7 +12596,7 @@ Z = (195, 195, 195) ..PEE.P.E..E.... .P..E.P..E...... } -# tile 654 (piranha,male) +# tile 656 (piranha,male) { ................ ................ @@ -12577,7 +12615,7 @@ Z = (195, 195, 195) .....E..P....... ....E..E...E.... } -# tile 655 (piranha,female) +# tile 657 (piranha,female) { ................ ................ @@ -12596,7 +12634,7 @@ Z = (195, 195, 195) .....E..P....... ....E..E...E.... } -# tile 656 (shark,male) +# tile 658 (shark,male) { ................ ................ @@ -12615,7 +12653,7 @@ Z = (195, 195, 195) PDNPPEE..EE..... .PPPE..EEE..E... } -# tile 657 (shark,female) +# tile 659 (shark,female) { ................ ................ @@ -12634,7 +12672,7 @@ Z = (195, 195, 195) PDNPPEE..EE..... .PPPE..EEE..E... } -# tile 658 (giant eel,male) +# tile 660 (giant eel,male) { ................ ................ @@ -12653,7 +12691,7 @@ Z = (195, 195, 195) ...EE.AAAAE.E... ..E...EE.E...E.. } -# tile 659 (giant eel,female) +# tile 661 (giant eel,female) { ................ ................ @@ -12672,7 +12710,7 @@ Z = (195, 195, 195) ...EE.AAAAE.E... ..E...EE.E...E.. } -# tile 660 (electric eel,male) +# tile 662 (electric eel,male) { ................ ................ @@ -12691,7 +12729,7 @@ Z = (195, 195, 195) ...EE.AAADE.E... ..E...EE.E...E.. } -# tile 661 (electric eel,female) +# tile 663 (electric eel,female) { ................ ................ @@ -12710,7 +12748,7 @@ Z = (195, 195, 195) ...EE.AAADE.E... ..E...EE.E...E.. } -# tile 662 (kraken,male) +# tile 664 (kraken,male) { ................ ................ @@ -12729,7 +12767,7 @@ Z = (195, 195, 195) EEEEEEE..EE..... ..EEE..EEE..E... } -# tile 663 (kraken,female) +# tile 665 (kraken,female) { ................ ................ @@ -12748,7 +12786,7 @@ Z = (195, 195, 195) EEEEEEE..EE..... ..EEE..EEE..E... } -# tile 664 (newt,male) +# tile 666 (newt,male) { ................ ................ @@ -12767,7 +12805,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 665 (newt,female) +# tile 667 (newt,female) { ................ ................ @@ -12786,7 +12824,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 666 (gecko,male) +# tile 668 (gecko,male) { ................ ................ @@ -12805,7 +12843,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 667 (gecko,female) +# tile 669 (gecko,female) { ................ ................ @@ -12824,7 +12862,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 668 (iguana,male) +# tile 670 (iguana,male) { ................ ................ @@ -12843,7 +12881,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 669 (iguana,female) +# tile 671 (iguana,female) { ................ ................ @@ -12862,7 +12900,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 670 (baby crocodile,male) +# tile 672 (baby crocodile,male) { ................ ................ @@ -12881,7 +12919,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 671 (baby crocodile,female) +# tile 673 (baby crocodile,female) { ................ ................ @@ -12900,7 +12938,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 672 (lizard,male) +# tile 674 (lizard,male) { ................ ................ @@ -12919,7 +12957,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 673 (lizard,female) +# tile 675 (lizard,female) { ................ ................ @@ -12938,7 +12976,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 674 (chameleon,male) +# tile 676 (chameleon,male) { ................ ................ @@ -12957,7 +12995,7 @@ Z = (195, 195, 195) .DD............. ................ } -# tile 675 (chameleon,female) +# tile 677 (chameleon,female) { ................ ................ @@ -12976,7 +13014,7 @@ Z = (195, 195, 195) .DD............. ................ } -# tile 676 (crocodile,male) +# tile 678 (crocodile,male) { ................ ................ @@ -12995,7 +13033,7 @@ Z = (195, 195, 195) .DF............. ................ } -# tile 677 (crocodile,female) +# tile 679 (crocodile,female) { ................ ................ @@ -13014,7 +13052,7 @@ Z = (195, 195, 195) .DF............. ................ } -# tile 678 (salamander,male) +# tile 680 (salamander,male) { ................ ................ @@ -13033,7 +13071,7 @@ Z = (195, 195, 195) ..ACCA.......... ...AAA.......... } -# tile 679 (salamander,female) +# tile 681 (salamander,female) { ................ ................ @@ -13052,7 +13090,7 @@ Z = (195, 195, 195) ..ACCA.......... ...AAA.......... } -# tile 680 (long worm tail,male) +# tile 682 (long worm tail,male) { ........ILLLL... ......IILLAA.... @@ -13071,7 +13109,7 @@ Z = (195, 195, 195) .LLLIIIILLLA.... ...LLLLLAAA..... } -# tile 681 (long worm tail,female) +# tile 683 (long worm tail,female) { ........ILLLL... ......IILLAA.... @@ -13090,7 +13128,7 @@ Z = (195, 195, 195) .LLLIIIILLLA.... ...LLLLLAAA..... } -# tile 682 (archeologist,male) +# tile 684 (archeologist,male) { ................ ................ @@ -13113,7 +13151,7 @@ Z = (195, 195, 195) # Female archeologist tile is a reference to a certain archeologist # known for raiding tombs. # -# tile 683 (archeologist,female) +# tile 685 (archeologist,female) { ................ ................ @@ -13132,7 +13170,7 @@ Z = (195, 195, 195) .....CJJ.JKJ.... ................ } -# tile 684 (barbarian,male) +# tile 686 (barbarian,male) { ................ ................ @@ -13151,7 +13189,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 685 (barbarian,female) +# tile 687 (barbarian,female) { ................ ................ @@ -13170,7 +13208,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 686 (cave dweller,male) +# tile 688 (cave dweller,male) { ................ ................ @@ -13189,7 +13227,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 687 (cave dweller,female) +# tile 689 (cave dweller,female) { ................ ................ @@ -13208,7 +13246,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 688 (healer,male) +# tile 690 (healer,male) { ................ .......NN....... @@ -13227,7 +13265,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 689 (healer,female) +# tile 691 (healer,female) { ................ .......NN....... @@ -13246,7 +13284,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 690 (knight,male) +# tile 692 (knight,male) { ................ ................ @@ -13265,7 +13303,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 691 (knight,female) +# tile 693 (knight,female) { ................ ................ @@ -13284,7 +13322,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 692 (monk,male) +# tile 694 (monk,male) { ................ ................ @@ -13303,7 +13341,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 693 (monk,female) +# tile 695 (monk,female) { ................ ................ @@ -13322,7 +13360,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 694 (cleric,male) +# tile 696 (cleric,male) { ................ ................ @@ -13341,7 +13379,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 695 (cleric,female) +# tile 697 (cleric,female) { ................ .......JJ....... @@ -13360,7 +13398,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 696 (ranger,male) +# tile 698 (ranger,male) { ................ ................ @@ -13379,7 +13417,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 697 (ranger,female) +# tile 699 (ranger,female) { ................ ................ @@ -13398,7 +13436,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 698 (rogue,male) +# tile 700 (rogue,male) { ................ ................ @@ -13417,7 +13455,7 @@ Z = (195, 195, 195) .....KKA.KKA.... ................ } -# tile 699 (rogue,female) +# tile 701 (rogue,female) { ................ ................ @@ -13436,7 +13474,7 @@ Z = (195, 195, 195) .....KKA.KKA.... ................ } -# tile 700 (samurai,male) +# tile 702 (samurai,male) { ................ ................ @@ -13455,7 +13493,7 @@ Z = (195, 195, 195) .....IIA.IIA.... ................ } -# tile 701 (samurai,female) +# tile 703 (samurai,female) { ................ ................ @@ -13474,7 +13512,7 @@ Z = (195, 195, 195) .....IIA.IIA.... ................ } -# tile 702 (tourist,male) +# tile 704 (tourist,male) { ................ ................ @@ -13493,7 +13531,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 703 (tourist,female) +# tile 705 (tourist,female) { ................ ................ @@ -13512,7 +13550,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 704 (valkyrie,male) +# tile 706 (valkyrie,male) { ................ ................ @@ -13531,7 +13569,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 705 (valkyrie,female) +# tile 707 (valkyrie,female) { ................ ................ @@ -13550,7 +13588,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 706 (wizard,male) +# tile 708 (wizard,male) { ................ .........BP..... @@ -13569,7 +13607,7 @@ Z = (195, 195, 195) ....BPPPPPPE.... ................ } -# tile 707 (wizard,female) +# tile 709 (wizard,female) { ................ .........BP..... @@ -13588,7 +13626,7 @@ Z = (195, 195, 195) ....BPPPPPPE.... ................ } -# tile 708 (Lord Carnarvon,male) +# tile 710 (Lord Carnarvon,male) { .......JJ....... ......KJJJ...... @@ -13607,7 +13645,7 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 709 (Lord Carnarvon,female) +# tile 711 (Lord Carnarvon,female) { .......JJ....... ......KJJJ...... @@ -13626,7 +13664,7 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 710 (Pelias,male) +# tile 712 (Pelias,male) { ................ .......JJ....... @@ -13645,7 +13683,7 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 711 (Pelias,female) +# tile 713 (Pelias,female) { ................ .......JJ....... @@ -13664,7 +13702,7 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 712 (Shaman Karnov,male) +# tile 714 (Shaman Karnov,male) { ................ .......JJA...... @@ -13683,7 +13721,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 713 (Shaman Karnov,female) +# tile 715 (Shaman Karnov,female) { ................ .......JJA...... @@ -13702,7 +13740,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 714 (Earendil,male) +# tile 716 (Earendil,male) { .........G...... ....B..GGF..B... @@ -13721,7 +13759,7 @@ Z = (195, 195, 195) .....AAAAAA..... ................ } -# tile 715 (Earendil,female) +# tile 717 (Earendil,female) { .........G...... ....B..GGF..B... @@ -13740,7 +13778,7 @@ Z = (195, 195, 195) .....AAAAAA..... ................ } -# tile 716 (Elwing,male) +# tile 718 (Elwing,male) { .........G...... ....B..GGF..B... @@ -13759,7 +13797,7 @@ Z = (195, 195, 195) .....AAAAAA..... ................ } -# tile 717 (Elwing,female) +# tile 719 (Elwing,female) { .........G...... ....B..GGF..B... @@ -13778,7 +13816,7 @@ Z = (195, 195, 195) .....AAAAAA..... ................ } -# tile 718 (Hippocrates,male) +# tile 720 (Hippocrates,male) { ................ ....LLLCCD...... @@ -13797,7 +13835,7 @@ Z = (195, 195, 195) .LCCCCCCCDA..... ................ } -# tile 719 (Hippocrates,female) +# tile 721 (Hippocrates,female) { ................ ....LLLCCD...... @@ -13816,7 +13854,7 @@ Z = (195, 195, 195) .LCCCCCCCDA..... ................ } -# tile 720 (King Arthur,male) +# tile 722 (King Arthur,male) { ................ ................ @@ -13835,7 +13873,7 @@ Z = (195, 195, 195) ....PPAA.PPA.... ................ } -# tile 721 (King Arthur,female) +# tile 723 (King Arthur,female) { ................ ................ @@ -13854,7 +13892,7 @@ Z = (195, 195, 195) ....PPAA.PPA.... ................ } -# tile 722 (Chan-Sune Lama,male) +# tile 724 (Chan-Sune Lama,male) { ................ .......LL....... @@ -13873,7 +13911,7 @@ Z = (195, 195, 195) ..JACCCCCCCCAA.. ................ } -# tile 723 (Chan-Sune Lama,female) +# tile 725 (Chan-Sune Lama,female) { ................ .......LL....... @@ -13892,7 +13930,7 @@ Z = (195, 195, 195) ..JACCCCCCCCAA.. ................ } -# tile 724 (Arch Priest,male) +# tile 726 (Arch Priest,male) { ..N............. .NNN..JLLJ...... @@ -13911,7 +13949,7 @@ Z = (195, 195, 195) ..HACCCJJCCCAA.. ................ } -# tile 725 (Arch Priest,female) +# tile 727 (Arch Priest,female) { ..N............. .NNN..JLLJ...... @@ -13930,7 +13968,7 @@ Z = (195, 195, 195) ..HACCCJJCCCAA.. ................ } -# tile 726 (Orion,male) +# tile 728 (Orion,male) { ................ ................ @@ -13949,7 +13987,7 @@ Z = (195, 195, 195) ......BPAPAA.A.. .....PPA.PPA.... } -# tile 727 (Orion,female) +# tile 729 (Orion,female) { ................ ................ @@ -13968,7 +14006,7 @@ Z = (195, 195, 195) ......BPAPAA.A.. .....PPA.PPA.... } -# tile 728 (Master of Thieves,male) +# tile 730 (Master of Thieves,male) { ................ ...H.....H...... @@ -13987,7 +14025,7 @@ Z = (195, 195, 195) ...JJA..JJA..... ................ } -# tile 729 (Master of Thieves,female) +# tile 731 (Master of Thieves,female) { ................ ...H.....H...... @@ -14006,7 +14044,7 @@ Z = (195, 195, 195) ...JJA..JJA..... ................ } -# tile 730 (Lord Sato,male) +# tile 732 (Lord Sato,male) { .....AAA........ .....AAA........ @@ -14025,7 +14063,7 @@ Z = (195, 195, 195) ..IIIA.IIIAA.... ................ } -# tile 731 (Lord Sato,female) +# tile 733 (Lord Sato,female) { .....AAA........ .....AAA........ @@ -14044,7 +14082,7 @@ Z = (195, 195, 195) ..IIIA.IIIAA.... ................ } -# tile 732 (Twoflower,male) +# tile 734 (Twoflower,male) { ................ ................ @@ -14063,7 +14101,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 733 (Twoflower,female) +# tile 735 (Twoflower,female) { ................ ................ @@ -14082,7 +14120,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 734 (Norn,male) +# tile 736 (Norn,male) { ................ ................ @@ -14101,7 +14139,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 735 (Norn,female) +# tile 737 (Norn,female) { ................ ................ @@ -14120,7 +14158,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 736 (Neferet the Green,male) +# tile 738 (Neferet the Green,male) { ................ ................ @@ -14139,7 +14177,7 @@ Z = (195, 195, 195) ...BPPPPPPPE.... ................ } -# tile 737 (Neferet the Green,female) +# tile 739 (Neferet the Green,female) { ................ ................ @@ -14158,7 +14196,7 @@ Z = (195, 195, 195) ...BPPPPPPPE.... ................ } -# tile 738 (Schliemann,male) +# tile 740 (Schliemann,male) { .......JJ....... ......KJJJ...... @@ -14177,7 +14215,7 @@ Z = (195, 195, 195) .....JJA.JJA.... ................ } -# tile 739 (Schliemann,female) +# tile 741 (Schliemann,female) { .......JJ....... ......KJJJ...... @@ -14196,7 +14234,7 @@ Z = (195, 195, 195) .....JJA.JJA.... ................ } -# tile 740 (Thoth Amon,male) +# tile 742 (Thoth Amon,male) { ................ ......OJJO...... @@ -14215,7 +14253,7 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 741 (Thoth Amon,female) +# tile 743 (Thoth Amon,female) { ................ ......OJJO...... @@ -14234,7 +14272,7 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 742 (Tiamat,male) +# tile 744 (Tiamat,male) { ......GGGFA..... .....NFNFEEA.... @@ -14253,7 +14291,7 @@ Z = (195, 195, 195) ....GFAA...CCJA. ........FFFFJA.. } -# tile 743 (Tiamat,female) +# tile 745 (Tiamat,female) { ......GGGFA..... .....NFNFEEA.... @@ -14272,7 +14310,7 @@ Z = (195, 195, 195) ....GFAA...CCJA. ........FFFFJA.. } -# tile 744 (Goblin King,male) +# tile 746 (Goblin King,male) { ................ ................ @@ -14291,7 +14329,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 745 (Goblin King,female) +# tile 747 (Goblin King,female) { ................ ................ @@ -14310,7 +14348,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 746 (Cyclops,male) +# tile 748 (Cyclops,male) { ................ ....LLLLL....... @@ -14329,7 +14367,7 @@ Z = (195, 195, 195) ....CJJJCLAAAAAA ..LLLLL.LLLLLAA. } -# tile 747 (Cyclops,female) +# tile 749 (Cyclops,female) { ................ ....LLLLL....... @@ -14350,7 +14388,7 @@ Z = (195, 195, 195) } #: Ixoth is a male red dragon #: [for many years his tile erroneously depicted a demon] -# tile 748 (Ixoth,male) +# tile 750 (Ixoth,male) { ......O......... ...KJ.DDD.O..... @@ -14369,7 +14407,7 @@ Z = (195, 195, 195) DDDAADDDDADD.... ADD.AADD..AD.... } -# tile 749 (Ixoth,female) +# tile 751 (Ixoth,female) { ......O......... ...KJ.DDD.O..... @@ -14388,7 +14426,7 @@ Z = (195, 195, 195) DDDAADDDDADD.... ADD.AADD..AD.... } -# tile 750 (Master Kaen,male) +# tile 752 (Master Kaen,male) { ................ .......KKA...... @@ -14407,7 +14445,7 @@ Z = (195, 195, 195) ...KJJJJJJJJJA.. ................ } -# tile 751 (Master Kaen,female) +# tile 753 (Master Kaen,female) { ................ .......KKA...... @@ -14426,7 +14464,7 @@ Z = (195, 195, 195) ...KJJJJJJJJJA.. ................ } -# tile 752 (Nalzok,male) +# tile 754 (Nalzok,male) { ....O......O.... ....O......O.... @@ -14445,7 +14483,7 @@ Z = (195, 195, 195) ..CDDDAAA.DDDK.. ................ } -# tile 753 (Nalzok,female) +# tile 755 (Nalzok,female) { ....O......O.... ....O......O.... @@ -14464,7 +14502,7 @@ Z = (195, 195, 195) ..CDDDAAA.DDDK.. ................ } -# tile 754 (Scorpius,male) +# tile 756 (Scorpius,male) { .....JLJLJAA.... ....JA.JCJCKAA.. @@ -14483,7 +14521,7 @@ Z = (195, 195, 195) ...D...JAAJA.JJ. ........JA.JA... } -# tile 755 (Scorpius,female) +# tile 757 (Scorpius,female) { .....JLJLJAA.... ....JA.JCJCKAA.. @@ -14502,7 +14540,7 @@ Z = (195, 195, 195) ...D...JAAJA.JJ. ........JA.JA... } -# tile 756 (Master Assassin,male) +# tile 758 (Master Assassin,male) { ................ ................ @@ -14521,7 +14559,7 @@ Z = (195, 195, 195) .....AAA.AAA.... ................ } -# tile 757 (Master Assassin,female) +# tile 759 (Master Assassin,female) { ................ ................ @@ -14540,7 +14578,7 @@ Z = (195, 195, 195) .....AAA.AAA.... ................ } -# tile 758 (Ashikaga Takauji,male) +# tile 760 (Ashikaga Takauji,male) { ................ ................ @@ -14559,7 +14597,7 @@ Z = (195, 195, 195) .....IIA.IIA.... ................ } -# tile 759 (Ashikaga Takauji,female) +# tile 761 (Ashikaga Takauji,female) { ................ ................ @@ -14578,7 +14616,7 @@ Z = (195, 195, 195) .....IIA.IIA.... ................ } -# tile 760 (Lord Surtur,male) +# tile 762 (Lord Surtur,male) { ....PPDDDDAA.... ....PDDDDDDDA... @@ -14597,7 +14635,7 @@ Z = (195, 195, 195) .....BPPABPPAAAA ...LLLLJ.BLLLKAA } -# tile 761 (Lord Surtur,female) +# tile 763 (Lord Surtur,female) { ....PPDDDDAA.... ....PDDDDDDDA... @@ -14616,7 +14654,7 @@ Z = (195, 195, 195) .....BPPABPPAAAA ...LLLLJ.BLLLKAA } -# tile 762 (Anaraxis the Black,male) +# tile 764 (Anaraxis the Black,male) { ................ ......AAA....... @@ -14635,7 +14673,7 @@ Z = (195, 195, 195) AAAAAAAAAAAAAAAA ................ } -# tile 763 (Anaraxis the Black,female) +# tile 765 (Anaraxis the Black,female) { ................ ......AAA....... @@ -14654,7 +14692,7 @@ Z = (195, 195, 195) AAAAAAAAAAAAAAAA ................ } -# tile 764 (student,male) +# tile 766 (student,male) { ................ ................ @@ -14673,7 +14711,7 @@ Z = (195, 195, 195) .....CJJ.JKJ.... ................ } -# tile 765 (student,female) +# tile 767 (student,female) { ................ ................ @@ -14692,7 +14730,7 @@ Z = (195, 195, 195) .....CJJ.JKJ.... ................ } -# tile 766 (chieftain,male) +# tile 768 (chieftain,male) { ................ ................ @@ -14711,7 +14749,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 767 (chieftain,female) +# tile 769 (chieftain,female) { ................ ................ @@ -14730,7 +14768,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 768 (neanderthal,male) +# tile 770 (neanderthal,male) { ................ ................ @@ -14749,7 +14787,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 769 (neanderthal,female) +# tile 771 (neanderthal,female) { ................ ................ @@ -14768,7 +14806,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 770 (High-elf,male) +# tile 772 (High-elf,male) { .........G...... .......GGF...... @@ -14787,7 +14825,7 @@ Z = (195, 195, 195) ......GFAFAA.... .....KLA.LKA.... } -# tile 771 (High-elf,female) +# tile 773 (High-elf,female) { .........G...... .......GGF...... @@ -14806,7 +14844,7 @@ Z = (195, 195, 195) ......GFAFAA.... .....KLA.LKA.... } -# tile 772 (attendant,male) +# tile 774 (attendant,male) { ................ ................ @@ -14825,7 +14863,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 773 (attendant,female) +# tile 775 (attendant,female) { ................ ................ @@ -14844,7 +14882,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 774 (page,male) +# tile 776 (page,male) { ................ ................ @@ -14863,7 +14901,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 775 (page,female) +# tile 777 (page,female) { ................ ................ @@ -14882,7 +14920,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 776 (abbot,male) +# tile 778 (abbot,male) { ................ ................ @@ -14901,7 +14939,7 @@ Z = (195, 195, 195) ....CDCCCDDA.A.. ...CCCCCCCDD.... } -# tile 777 (abbot,female) +# tile 779 (abbot,female) { ................ ................ @@ -14920,7 +14958,7 @@ Z = (195, 195, 195) ....CDCCCDDA.A.. ...CCCCCCCDD.... } -# tile 778 (acolyte,male) +# tile 780 (acolyte,male) { ................ ................ @@ -14939,7 +14977,7 @@ Z = (195, 195, 195) ....LCCCCCDD.... ................ } -# tile 779 (acolyte,female) +# tile 781 (acolyte,female) { ................ ................ @@ -14958,7 +14996,7 @@ Z = (195, 195, 195) ....LCCCCCDD.... ................ } -# tile 780 (hunter,male) +# tile 782 (hunter,male) { ................ ................ @@ -14977,7 +15015,7 @@ Z = (195, 195, 195) ....JPPA.PPA.... ................ } -# tile 781 (hunter,female) +# tile 783 (hunter,female) { ................ ................ @@ -14996,7 +15034,7 @@ Z = (195, 195, 195) ....JPPA.PPA.... ................ } -# tile 782 (thug,male) +# tile 784 (thug,male) { ................ ................ @@ -15015,7 +15053,7 @@ Z = (195, 195, 195) .....KKA.KKA.... ................ } -# tile 783 (thug,female) +# tile 785 (thug,female) { ................ ................ @@ -15034,7 +15072,7 @@ Z = (195, 195, 195) .....KKA.KKA.... ................ } -# tile 784 (ninja,male) +# tile 786 (ninja,male) { ................ ................ @@ -15053,7 +15091,7 @@ Z = (195, 195, 195) .....AAA.AAA.... ................ } -# tile 785 (ninja,female) +# tile 787 (ninja,female) { ................ ................ @@ -15072,7 +15110,7 @@ Z = (195, 195, 195) .....AAA.AAA.... ................ } -# tile 786 (roshi,male) +# tile 788 (roshi,male) { ................ ................ @@ -15091,7 +15129,7 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 787 (roshi,female) +# tile 789 (roshi,female) { ................ ................ @@ -15110,7 +15148,7 @@ Z = (195, 195, 195) .....PPA.PPA.... ................ } -# tile 788 (guide,male) +# tile 790 (guide,male) { ................ ................ @@ -15129,7 +15167,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 789 (guide,female) +# tile 791 (guide,female) { ................ ................ @@ -15148,7 +15186,7 @@ Z = (195, 195, 195) .....LLA.LLA.... ................ } -# tile 790 (warrior,male) +# tile 792 (warrior,male) { .....O....O..... .....NO..ON..... @@ -15167,7 +15205,7 @@ Z = (195, 195, 195) .....KLA.LKA.... ................ } -# tile 791 (warrior,female) +# tile 793 (warrior,female) { .....O....O..... .....NO..ON..... @@ -15186,7 +15224,7 @@ Z = (195, 195, 195) .....KLA.LKA.... ................ } -# tile 792 (apprentice,male) +# tile 794 (apprentice,male) { ................ ................ @@ -15205,7 +15243,7 @@ Z = (195, 195, 195) ....BPPPPPPE.... ................ } -# tile 793 (apprentice,female) +# tile 795 (apprentice,female) { ................ ................ @@ -15224,7 +15262,7 @@ Z = (195, 195, 195) ....BPPPPPPE.... ................ } -# tile 794 (invisible monster, nogender) +# tile 796 (invisible monster, nogender) { ................ ................ From c8e42032bf1412b746efc34ead5387a78ad67746 Mon Sep 17 00:00:00 2001 From: copperwater Date: Fri, 8 May 2026 08:11:39 -0400 Subject: [PATCH 02/20] Make giant spider and giant scorpion saddleable It seemed like it should be possible to ride a tame giant scorpion into battle if one has a saddle for it. Giant spiders becoming saddleable is a side-effect, but one that also makes sense. (Yes, a standard saddle probably isn't equipped to fit around an arachnid's exoskeleton, but that gets handwaved just like with other weird body shape creatures like jabberwocks.) --- doc/xnh-changelog-10.0.md | 2 ++ src/steed.c | 1 + 2 files changed, 3 insertions(+) diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index f4cf5e879..90089d7ef 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -35,6 +35,8 @@ changes: - Regular scorpions can grow up into them. - They appear on the Ranger quest. - They are orange to be distinguishable from regular scorpions. +- Allow large s-class monsters (giant spider and giant scorpion) to be saddled + and ridden. ### Interface changes diff --git a/src/steed.c b/src/steed.c index f076539ca..c26105526 100644 --- a/src/steed.c +++ b/src/steed.c @@ -7,6 +7,7 @@ /* Monsters that might be ridden */ static NEARDATA const char steeds[] = { S_QUADRUPED, S_UNICORN, S_ANGEL, S_CENTAUR, S_DRAGON, S_JABBERWOCK, + S_SPIDER, '\0' }; staticfn boolean landing_spot(coord *, int, int); From 5bf0b1919e2ecbae1f6a2c56bf82c37046b4bcad Mon Sep 17 00:00:00 2001 From: copperwater Date: Fri, 8 May 2026 20:59:48 -0400 Subject: [PATCH 03/20] Add a new material: hard light This is in preparation for a new object which will be made of hard light. It isn't really intended to take part in the object materials system where other objects can be made out of it, but some design thoughts if that ever becomes a thing (and which did inform the numbers assigned to this material): Hard light is a magical construct which can be conjured without that much difficulty by intermediately skilled magic users, but which does take a lot of effort and skill to form into a useful shape and hold it. Typically maintaining one of these constructs takes concentration, and an enchantment placed to hold it in its shape without concentration will rely on proximity to a living body and degrade rapidly without it. Consequently, it's unheard of to find an item made of it just lying around, and shopkeepers won't pay well for it because they're aware it will disintegrate before they'll be able to sell it. It's exceedingly lightweight, and strong but not impervious to attacks. It's one of the few materials that can hit incorporeal beings like shades regardless of its beatitude. This commit also sets the array size of the various material arrays to NUM_MATERIAL_TYPES; there's no good reason why they should remain indefinite-length. --- doc/xnh-changelog-10.0.md | 2 ++ include/objclass.h | 1 + src/artifact.c | 6 ++++-- src/decl.c | 2 +- src/mkobj.c | 10 ++++++---- src/shk.c | 5 +++-- 6 files changed, 17 insertions(+), 9 deletions(-) diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index 90089d7ef..79817a0f2 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -37,6 +37,8 @@ changes: - They are orange to be distinguishable from regular scorpions. - Allow large s-class monsters (giant spider and giant scorpion) to be saddled and ridden. +- Add a new material: hard light, which is a magic construct that is + lightweight and fairly strong. ### Interface changes diff --git a/include/objclass.h b/include/objclass.h index db86e6007..b9b4cdba1 100644 --- a/include/objclass.h +++ b/include/objclass.h @@ -32,6 +32,7 @@ enum obj_material_types { GLASS = 19, GEMSTONE = 20, MINERAL = 21, + HARD_LIGHT = 22, NUM_MATERIAL_TYPES }; diff --git a/src/artifact.c b/src/artifact.c index 37fa0e37c..86c088ba3 100644 --- a/src/artifact.c +++ b/src/artifact.c @@ -537,8 +537,10 @@ shade_glare(struct obj *obj) { const struct artifact *arti; - /* any silver object is effective; bone too, though it gets no bonus */ - if (obj->material == SILVER || obj->material == BONE) + /* any silver object is effective; bone too, though it gets no bonus; + * physically substantial light also can touch them */ + if (obj->material == SILVER || obj->material == BONE + || obj->material == HARD_LIGHT) return TRUE; /* non-silver artifacts with bonus against undead also are effective */ arti = get_artifact(obj); diff --git a/src/decl.c b/src/decl.c index cef298ba2..3bbb57008 100644 --- a/src/decl.c +++ b/src/decl.c @@ -115,7 +115,7 @@ const char *materialnm[] = { "mysterious", "liquid", "wax", "organic", "wooden", "bone", "dragonhide", "iron", "metal", "copper", "silver", "gold", "platinum", "mithril", "plastic", "glass", - "gemstone", "stone" }; + "gemstone", "stone", "hard light" }; const char quitchars[] = " \r\n\033"; NEARDATA struct savefile_info sfcap, sfrestinfo, sfsaveinfo; const int shield_static[SHIELD_COUNT] = { diff --git a/src/mkobj.c b/src/mkobj.c index 8f572b273..34528f3b5 100644 --- a/src/mkobj.c +++ b/src/mkobj.c @@ -2035,7 +2035,7 @@ set_bknown( * overpowered by weighing about one-tenth as much as the iron counterpart. * Instead, use arbitrary units. */ static -const int matdensities[] = { +const int matdensities[NUM_MATERIAL_TYPES] = { 0, // will cause div/0 errors if anything is this material 10, // LIQUID 15, // WAX @@ -2057,7 +2057,8 @@ const int matdensities[] = { 20, // PLASTIC 60, // GLASS 55, // GEMSTONE - 70 // MINERAL + 70, // MINERAL + 5, // HARD_LIGHT }; /* @@ -2176,7 +2177,7 @@ weight(struct obj *obj) * adjusted up so that there are no negatives. * The units involved here are AC points (but again, only the difference * matters.) */ -const int matac[] = { +const int matac[NUM_MATERIAL_TYPES] = { 0, 0, // LIQUID 1, // WAX @@ -2198,7 +2199,8 @@ const int matac[] = { 3, // PLASTIC 5, // GLASS 7, // GEMSTONE - 6 // MINERAL + 6, // MINERAL + 6, // HARD_LIGHT }; /* Compute the bonus or penalty to AC an armor piece should get for being a diff --git a/src/shk.c b/src/shk.c index 794b9507a..08d262142 100644 --- a/src/shk.c +++ b/src/shk.c @@ -2781,7 +2781,7 @@ get_cost_of_shop_item( * approximation would be something like "zorkmids per aum". * We only care about the ratio of two of these together. */ static -const int matprices[] = { +const int matprices[NUM_MATERIAL_TYPES] = { 0, 1, /* LIQUID */ 1, /* WAX */ @@ -2803,7 +2803,8 @@ const int matprices[] = { 3, /* PLASTIC */ 20, /* GLASS */ 500, /* GEMSTONE */ - 10 /* MINERAL */ + 10, /* MINERAL */ + 2 /* HARD_LIGHT */ }; staticfn long From 3576e50e5b0ec43e4e51bda789f0d6f07b82ce0e Mon Sep 17 00:00:00 2001 From: copperwater Date: Sun, 10 May 2026 09:13:36 -0400 Subject: [PATCH 04/20] Rename the Longbow of Diana to Longbow of Orion In preparation for Ranger quest story changes. This commit merely changes the name. For backwards compatibility, searching the encyclopedia for "Longbow of Diana" will still produce the correct entry. --- dat/Ran-goal.lua | 2 +- dat/data.base | 3 ++- doc/xnh-changelog-10.0.md | 1 + include/artilist.h | 4 ++-- src/role.c | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/dat/Ran-goal.lua b/dat/Ran-goal.lua index a28b0c10b..2a91bdb77 100644 --- a/dat/Ran-goal.lua +++ b/dat/Ran-goal.lua @@ -36,7 +36,7 @@ des.stair("up", 19,10) -- Non diggable walls des.non_diggable(selection.area(00,00,75,19)) -- Objects -des.object({ id = "bow", x=37, y=10, buc="blessed", spe=0, name="The Longbow of Diana" }) +des.object({ id = "bow", x=37, y=10, buc="blessed", spe=0, name="The Longbow of Orion" }) des.object("chest", 37, 10) des.object({ coord = { 36, 09 } }) des.object({ coord = { 36, 10 } }) diff --git a/dat/data.base b/dat/data.base index 2aa5a5b08..689138e1a 100644 --- a/dat/data.base +++ b/dat/data.base @@ -742,7 +742,7 @@ boulder ears the sea-sound of Poseidon. Then I knew this time I would do it; and so I did. [ The King Must Die, by Mary Renault ] -~*longbow of diana +~*longbow of* ~long bow bow * bow @@ -3533,6 +3533,7 @@ loki Midgard, the mistress of the netherworld, Hel, and the wolf Fenrir, who will devour the sun at Ragnarok. *longbow of diana +*longbow of orion This legendary bow grants ESP when carried and can reflect magical attacks when wielded. When invoked it provides a supply of arrows. # long worm -- see "worm" diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index 79817a0f2..a06ab6e6b 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -39,6 +39,7 @@ changes: and ridden. - Add a new material: hard light, which is a magic construct that is lightweight and fairly strong. +- Rename the Longbow of Diana to the Longbow of Orion. ### Interface changes diff --git a/include/artilist.h b/include/artilist.h index 758f072f9..6d356be35 100644 --- a/include/artilist.h +++ b/include/artilist.h @@ -294,10 +294,10 @@ static NEARDATA struct artifact artilist[] = { 0, 12, 2000L, NO_COLOR, SILVER, MITRE_OF_HOLINESS), */ - A("The Longbow of Diana", BOW, + A("The Longbow of Orion", BOW, (SPFX_NOGEN | SPFX_RESTR | SPFX_INTEL | SPFX_REFLECT), SPFX_ESP, 0, PHYS(5, 0), NO_DFNS, NO_CARY, CREATE_AMMO, A_CHAOTIC, PM_RANGER, NON_PM, - 0, 12, 4000L, NO_COLOR, DEFAULT_MAT, LONGBOW_OF_DIANA), + 0, 12, 4000L, NO_COLOR, DEFAULT_MAT, LONGBOW_OF_ORION), /* MKoT has an additional carry property if the Key is not cursed (for rogues) or blessed (for non-rogues): #untrap of doors and chests diff --git a/src/role.c b/src/role.c index f6e5f9413..d2b46d5e4 100644 --- a/src/role.c +++ b/src/role.c @@ -323,7 +323,7 @@ const struct Role roles[NUM_ROLES+1] = { PM_SCORPION, S_CENTAUR, S_SPIDER, - ART_LONGBOW_OF_DIANA, + ART_LONGBOW_OF_ORION, MH_HUMAN | MH_ELF | MH_GNOME | MH_ORC | ROLE_MALE | ROLE_FEMALE | ROLE_LAWFUL | ROLE_NEUTRAL | ROLE_CHAOTIC, /* Str Int Wis Dex Con Cha */ From 8949ba46dd5ee0da90582f85a60e6df12a3e9090 Mon Sep 17 00:00:00 2001 From: copperwater Date: Sun, 10 May 2026 10:55:21 -0400 Subject: [PATCH 05/20] Add the arrow of light This is also an key part of the Ranger quest overhaul, being the primary weapon they will get as a reward for completing it. Arrows of light are designed to be very powerful, one-shotting a lot of monsters with their devastatingly high HP damage, but also very limited in order to avoid being exploitable. To that end, they're fragile enough to disintegrate when used or even when dropped (though they can be stolen or put in containers), and there is a hard cap of 5 on how many arrows can exist at once. As of this commit, you can only obtain them by wishing and then only one at a time, but the plan is to have the Longbow create them upon invoke - the hard cap therefore serves to prevent the hero from sitting in a closet, stowing arrows away somewhere the game didn't think to look for them, and building up a huge stockpile. I considered implementations that would avoid using a global variable to track the amount of arrows, but ended up discarding them. The easiest way to do that would be to make the arrow disintegrate upon simply leaving the hero's inventory. The "proper" way to do this would be an obj_no_longer_held or freeinv refactor where those functions become capable of deleting the object, but then this has to be passed up to all direct and indirect callers to make them aware of their obj argument possibly being destroyed, making it quite a big refactor which I didn't want to undertake. If other hard light objects are ever added, this should probably be reconsidered, or else they should trigger a destruction timer in obj_no_longer_held which adds possible timer headaches but at least would allow the code to assume obj_no_longer_held still won't outright destroy any objects. At the same time, I realized that a simple, hacky implementation which inserts arrow disintegration hooks into common places where the arrow leaves the hero's inventory (adding to a container, being stolen, hitting the floor for any reason) would be prone to exploits, because any method that can get an item out of the inventory some other way would be used to circumvent the intended limit on light arrows you can have at one time. Also, it would be odd not to be able to put arrows of light into a carried container. The flavor text for when light arrows interact with monsters is primarily based on how they work in The Legend of Zelda: The Wind Waker. This commit also slightly modifies the defer_breakwep uhitm code (since arrows of light now use it alongside glass weapons), adding an impossible if something sets defer_breakwep but the weapon doesn't appear to be eligible for breakage, and not setting defer_breakwep on ordinary non-glass weapons. --- doc/xnh-changelog-10.0.md | 4 + include/decl.h | 3 + include/objects.h | 3 + src/decl.c | 3 +- src/do.c | 11 + src/dothrow.c | 4 + src/objnam.c | 17 + src/read.c | 19 +- src/shk.c | 2 + src/uhitm.c | 66 ++- src/weapon.c | 10 + win/share/objects.txt | 889 +++++++++++++++++++------------------- 12 files changed, 587 insertions(+), 444 deletions(-) diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index a06ab6e6b..80fd6c8cd 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -40,6 +40,10 @@ changes: - Add a new material: hard light, which is a magic construct that is lightweight and fairly strong. - Rename the Longbow of Diana to the Longbow of Orion. +- Add a new object: arrow of light. It is a weightless arrow made of hard light + that deals exceptionally high damage but disintegrates after hitting + something or falling to the floor. Monsters it kills in one shot will leave + no corpse, and monsters it fails to kill will be blinded and stunned. ### Interface changes diff --git a/include/decl.h b/include/decl.h index 2c2e55996..a463f8348 100644 --- a/include/decl.h +++ b/include/decl.h @@ -1165,6 +1165,9 @@ struct instance_globals_saved_d { struct instance_globals_saved_e { /* decl.c */ struct exclusion_zone *exclusion_zones; + /* do.c */ + int extant_arrows_of_light; +#define MAX_LIGHT_ARROWS 5 }; struct instance_globals_saved_h { diff --git a/include/objects.h b/include/objects.h index 0fdfac11a..962660308 100644 --- a/include/objects.h +++ b/include/objects.h @@ -145,6 +145,9 @@ PROJECTILE("orcish arrow", "crude arrow", ORCISH_ARROW), PROJECTILE("ya", "long arrow", 0, 15, 1, 4, 7, 7, 1, WOOD, -P_BOW, HI_WOOD, YA), +PROJECTILE("arrow of light", NoDes, + 1, 0, 0, 100, 8, 8, 0, HARD_LIGHT, -P_BOW, CLR_WHITE, + ARROW_OF_LIGHT), PROJECTILE("crossbow bolt", NoDes, 1, 55, 1, 2, 4, 6, 0, IRON, -P_CROSSBOW, HI_METAL, CROSSBOW_BOLT), diff --git a/src/decl.c b/src/decl.c index 3bbb57008..8ebfc09ef 100644 --- a/src/decl.c +++ b/src/decl.c @@ -930,7 +930,8 @@ static const struct instance_globals_saved_d init_svd = { static const struct instance_globals_saved_e init_sve = { /* decl.c */ - NULL /* exclusion_zones */ + NULL, /* exclusion_zones */ + 0 /* extant_arrows_of_light */ }; static const struct instance_globals_saved_h init_svh = { diff --git a/src/do.c b/src/do.c index 7e30f7951..b0f68cdde 100644 --- a/src/do.c +++ b/src/do.c @@ -282,6 +282,17 @@ flooreffects( bury_objs(x, y); newsym(x, y); res = TRUE; + } else if (obj->otyp == ARROW_OF_LIGHT) { + /* hack so litroom will light the right point */ + obj->ox = x; + obj->oy = y; + litroom(TRUE, obj); + /* can't delay vision recalc because we need to print a message */ + vision_recalc(0); + if (cansee(x, y)) + pline("%s into motes of light.", Tobjnam(obj, "disintegrate")); + useupf(obj, obj->quan); + res = TRUE; } else if (is_lava(x, y)) { res = lava_damage(obj, x, y); } else if (is_pool(x, y)) { diff --git a/src/dothrow.c b/src/dothrow.c index 0f3264ee9..a98d6ca16 100644 --- a/src/dothrow.c +++ b/src/dothrow.c @@ -2054,6 +2054,10 @@ should_mulch_missile(struct obj *obj) || objects[obj->otyp].oc_magic) return FALSE; + /* arrows of light are always one-shots */ + if (obj->otyp == ARROW_OF_LIGHT) + return TRUE; + /* The previous version of this logic made sure early-game characters * couldn't use their ranged ammo much or it'd all break. That isn't what we * want. So instead, we use a combination of skill and max skill to diff --git a/src/objnam.c b/src/objnam.c index 043b61440..00a788b16 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -5401,6 +5401,23 @@ readobjnam(char *bp, struct obj *no_wish) /* WEAPON_CLASS test excludes gems, gray stones */ || (d.oclass == WEAPON_CLASS && is_ammo(d.otmp)))))) d.otmp->quan = (long) d.cnt; + + /* post-fixup for arrows of light, which you can only get 1 of per wish + * in normal play (rather than 20) */ + if (d.typ == ARROW_OF_LIGHT && !wizard) + d.otmp->quan = 1L; + } + + /* also don't allow wishing to exceed the limit on extant arrows of light */ + if (d.typ == ARROW_OF_LIGHT) { + if (!wizard && sve.extant_arrows_of_light >= MAX_LIGHT_ARROWS) { + pline("The wish fails!"); + obfree(d.otmp, (struct obj *) 0); + d.otmp = &hands_obj; + return d.otmp; + } + else + sve.extant_arrows_of_light += d.otmp->quan; } if (d.islit && (d.typ == OIL_LAMP || d.typ == MAGIC_LAMP diff --git a/src/read.c b/src/read.c index bca0653da..d1770aa17 100644 --- a/src/read.c +++ b/src/read.c @@ -2650,12 +2650,14 @@ set_lit(coordxy x, coordxy y, genericptr_t val) void litroom( boolean on, /* True: make nearby area lit; False: cursed scroll */ - struct obj *obj) /* scroll, spellbook (for spell), or wand of light */ + struct obj *obj) /* scroll, spellbook (for spell), wand of light, or + * arrow of light */ { struct obj *otmp, *nextobj; boolean blessed_effect = (obj && obj->oclass == SCROLL_CLASS && obj->blessed); boolean no_op = (u.uswallow || Underwater || Is_waterlevel(&u.uz)); + boolean lightarrow = (obj && obj->otyp == ARROW_OF_LIGHT); char is_lit = 0; /* value is irrelevant but assign something anyway; its * address is used as a 'not null' flag for set_lit() */ int radius = 0; @@ -2721,7 +2723,7 @@ litroom( pline("%s shines briefly.", Monnam(u.ustuck)); else pline("%s glistens.", Monnam(u.ustuck)); - } else if (!Blind) { + } else if (!Blind && !lightarrow) { pline("A lit field %ssurrounds you!", no_op ? "briefly " : ""); } } @@ -2758,13 +2760,22 @@ litroom( radius = 11; } } + else if (lightarrow) { + radius = 3; + } else { radius = 5; } if (radius > 0) { - do_clear_area(u.ux, u.uy, radius, set_lit, - (genericptr_t) (on ? &is_lit : (char *) 0)); + if (lightarrow) { + do_clear_area(obj->ox, obj->oy, radius, set_lit, + (genericptr_t) (on ? &is_lit : (char *) 0)); + } + else { + do_clear_area(u.ux, u.uy, radius, set_lit, + (genericptr_t) (on ? &is_lit : (char *) 0)); + } } /* diff --git a/src/shk.c b/src/shk.c index 08d262142..ab23402e9 100644 --- a/src/shk.c +++ b/src/shk.c @@ -1135,6 +1135,8 @@ obfree(struct obj *obj, struct obj *merge) maybe_reset_pick(obj); if (obj->otyp == BOULDER) obj->next_boulder = 0; + if (obj->otyp == ARROW_OF_LIGHT && !merge) + sve.extant_arrows_of_light -= obj->quan; shkp = 0; if (obj->unpaid) { diff --git a/src/uhitm.c b/src/uhitm.c index 0a035e456..dcc63fa3b 100644 --- a/src/uhitm.c +++ b/src/uhitm.c @@ -1044,6 +1044,26 @@ hmon_hitmon_weapon_ranged( hmd->hittxt = TRUE; } } + if (!hmd->thrown && obj == uwep && obj->otyp == ARROW_OF_LIGHT) { + /* this will still work, but very ineffectively compared to shooting + * them; note that if hmd->thrown (i.e. thrown without bow), they will + * still just deal d2 damage and evaporate when they hit the floor */ + hmd->dmg = dmgval(obj, mon) * obj->quan / MAX_LIGHT_ARROWS; + You("pierce %s with %s.", mon_nam(mon), yname(obj)); + pline("Light sprays wastefully from the wound as %s.", + obj->quan == 1L ? "it evaporates" : "they evaporate"); + obj->ox = mon->mx; /* hack so litroom will light the right point */ + obj->oy = mon->my; + litroom(TRUE, obj); + vision_recalc(0); /* another hack because litroom suspends vision + * recalculation, but it will still be suspended by + * the time we get to xkilled and the monster will be + * referred to as "it" */ + hmd->hittxt = TRUE; + useupall(obj); + /* corpse is still left because the monster didn't get hit critically + * enough to disintegrate */ + } if (!hmd->thrown && obj == uwep && obj->otyp == BOOMERANG && rnl(4) == 4 - 1) { boolean more_than_1 = (obj->quan > 1L); @@ -1116,6 +1136,34 @@ hmon_hitmon_weapon_melee( * some reason being Skilled+ gives a penalty?) */ hmd->get_dmg_bonus = FALSE; hmd->dmg -= weapon_dam_bonus(uwep); + } else if (obj->otyp == ARROW_OF_LIGHT) { + /* no critical hit effect since this already does very high damage, just + * cosmetic messages (and avoiding corpse creation) */ + pline("%s pierces deep into %s!", Yname2(obj), mon_nam(mon)); + hmd->hittxt = TRUE; + if (hmd->dmg > mon->mhp + /* it will almost certainly kill a gremlin anyway, but there's no + * kill like overkill */ + || mon->data == &mons[PM_GREMLIN]) { + pline("Transfixed, %s glows and explodes in a burst of radiance!", + mon_nam(mon)); + /* hack so litroom will light the right point */ + obj->ox = mon->mx; + obj->oy = mon->my; + litroom(TRUE, obj); + vision_recalc(0); + xkilled(mon, XKILL_NOMSG | XKILL_NOCORPSE); + hmd->already_killed = TRUE; + } + else { + pline( + "Dazzling rays burst from the wound, and %s staggers blindly!", + mon_nam(mon)); + mon->mstun = 1; + mon->mblinded = 1; + } + /* arrow will be destroyed but we can't break it here */ + hmd->defer_breakwep = TRUE; } else if (mon->mflee && Role_if(PM_ROGUE) && !Upolyd /* multi-shot throwing is too powerful here */ && hmd->hand_to_hand) { @@ -1295,7 +1343,8 @@ hmon_hitmon_weapon_melee( * one of the only remaining parameters passed around rather than being * in struct _hitmon_data, that doesn't suffice to prevent * use-after-free. Flag it for potential breakage later. */ - hmd->defer_breakwep = TRUE; + if (obj->material == GLASS) + hmd->defer_breakwep = TRUE; crack_glass_obj(some_armor(mon)); } } @@ -2102,9 +2151,18 @@ hmon_hitmon( print_mon_wounded(mon, saved_mhp); wakeup(mon, TRUE, TRUE); } - /* now try to crack the glass weapon, if used */ - if (hmd.defer_breakwep) - (void) crack_glass_obj(obj); + + /* now potentially break the weapon, if it was flagged to get damaged or + * broken */ + if (hmd.defer_breakwep) { + if (obj->otyp == ARROW_OF_LIGHT) + delobj(obj); + else if (obj->material == GLASS) + (void) crack_glass_obj(obj); + else + impossible("defer_breakwep with weapon typ %d, mat %d", + obj->otyp, obj->material); + } return hmd.destroyed ? FALSE : TRUE; } diff --git a/src/weapon.c b/src/weapon.c index a4b6c4764..4fbfd976e 100644 --- a/src/weapon.c +++ b/src/weapon.c @@ -285,6 +285,10 @@ dmgval(struct obj *otmp, struct monst *mon) break; } } + if (otyp == ARROW_OF_LIGHT) { + /* override prior wsdam/wldam calculation */ + tmp = d(8, 8) + 24; /* 60 average damage */ + } if (Is_weapon) { tmp += otmp->spe; @@ -364,6 +368,12 @@ dmgval(struct obj *otmp, struct monst *mon) * vs incorporeal enemies is the simplest way to do it. */ bonus += 1; } + if (otyp == ARROW_OF_LIGHT && mon_hates_blessings(mon) + /* while it would be more consistent for this to not exclude + * uniques, it would almost certainly trivialize archfiend + * encounters */ + && !unique_corpstat(mon->data)) + bonus *= 2; /* if the weapon is going to get a double damage bonus, adjust this bonus so that effectively it's added after the doubling */ diff --git a/win/share/objects.txt b/win/share/objects.txt index 178069340..0af920adf 100644 --- a/win/share/objects.txt +++ b/win/share/objects.txt @@ -468,7 +468,26 @@ Z = (195, 195, 195) NNPA............ .AA............. } -# tile 22 (crossbow bolt) +# tile 22 (arrow of light) +{ + ................ + ..........MM.... + .........MHMN... + .........HMNHN.. + .........NNHNA.. + ........HNAAA... + .......HNA...... + ......HNA....... + .....HNA........ + ....HNA......... + ...HNA.......... + .NHNA........... + .NHHA........... + .HNNA........... + ..AAA........... + ................ +} +# tile 23 (crossbow bolt) { ................ ................ @@ -487,7 +506,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 23 (dart) +# tile 24 (dart) { ................ ................ @@ -506,7 +525,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 24 (throwing star / shuriken) +# tile 25 (throwing star / shuriken) { ................ ................ @@ -525,7 +544,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 25 (boomerang) +# tile 26 (boomerang) { ................ ................ @@ -544,7 +563,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 26 (spear) +# tile 27 (spear) { ................ ..............N. @@ -563,7 +582,7 @@ Z = (195, 195, 195) ..JAA........... ................ } -# tile 27 (runed spear / elven spear) +# tile 28 (runed spear / elven spear) { ................ ..............N. @@ -582,7 +601,7 @@ Z = (195, 195, 195) ..JAA........... ................ } -# tile 28 (crude spear / orcish spear) +# tile 29 (crude spear / orcish spear) { ................ ..............N. @@ -601,7 +620,7 @@ Z = (195, 195, 195) ..JAA........... ................ } -# tile 29 (stout spear / dwarvish spear) +# tile 30 (stout spear / dwarvish spear) { ................ ................ @@ -620,7 +639,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 30 (throwing spear / javelin) +# tile 31 (throwing spear / javelin) { ................ ..............OA @@ -639,7 +658,7 @@ Z = (195, 195, 195) .OA............. ................ } -# tile 31 (trident) +# tile 32 (trident) { ................ ...PA........... @@ -658,7 +677,7 @@ Z = (195, 195, 195) ............JA.. ................ } -# tile 32 (dagger) +# tile 33 (dagger) { ................ ................ @@ -677,7 +696,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 33 (runed dagger / elven dagger) +# tile 34 (runed dagger / elven dagger) { ................ ................ @@ -696,7 +715,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 34 (crude dagger / orcish dagger) +# tile 35 (crude dagger / orcish dagger) { ................ ................ @@ -715,7 +734,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 35 (athame) +# tile 36 (athame) { ................ ................ @@ -734,7 +753,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 36 (scalpel) +# tile 37 (scalpel) { ................ ................ @@ -753,7 +772,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 37 (knife) +# tile 38 (knife) { ................ ................ @@ -772,7 +791,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 38 (worm tooth) +# tile 39 (worm tooth) { ................ ................ @@ -791,7 +810,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 39 (crysknife) +# tile 40 (crysknife) { ................ ................ @@ -810,7 +829,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 40 (axe) +# tile 41 (axe) { ................ .....OPA........ @@ -829,7 +848,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 41 (double-headed axe / battle-axe) +# tile 42 (double-headed axe / battle-axe) { ................ ................ @@ -848,7 +867,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 42 (short sword) +# tile 43 (short sword) { ................ ................ @@ -867,7 +886,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 43 (runed short sword / elven short sword) +# tile 44 (runed short sword / elven short sword) { ................ ................ @@ -886,7 +905,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 44 (crude short sword / orcish short sword) +# tile 45 (crude short sword / orcish short sword) { ................ ................ @@ -905,7 +924,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 45 (broad short sword / dwarvish short sword) +# tile 46 (broad short sword / dwarvish short sword) { ................ ................ @@ -924,7 +943,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 46 (curved sword / scimitar) +# tile 47 (curved sword / scimitar) { ................ ................ @@ -943,7 +962,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 47 (saber) +# tile 48 (saber) { ................ ................ @@ -962,7 +981,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 48 (broadsword) +# tile 49 (broadsword) { ................ ................ @@ -981,7 +1000,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 49 (runed broadsword / elven broadsword) +# tile 50 (runed broadsword / elven broadsword) { ................ ................ @@ -1000,7 +1019,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 50 (long sword) +# tile 51 (long sword) { ................ .............O.. @@ -1019,7 +1038,7 @@ Z = (195, 195, 195) .AAA............ ................ } -# tile 51 (two-handed sword) +# tile 52 (two-handed sword) { ..............N. .............NO. @@ -1038,7 +1057,7 @@ Z = (195, 195, 195) .AAA............ ................ } -# tile 52 (samurai sword / katana) +# tile 53 (samurai sword / katana) { ................ ..............N. @@ -1057,7 +1076,7 @@ Z = (195, 195, 195) ..AA............ ................ } -# tile 53 (long samurai sword / tsurugi) +# tile 54 (long samurai sword / tsurugi) { ................ ................ @@ -1076,7 +1095,7 @@ Z = (195, 195, 195) ..AA............ ................ } -# tile 54 (runed broadsword / runesword) +# tile 55 (runed broadsword / runesword) { ................ .............A.. @@ -1095,7 +1114,7 @@ Z = (195, 195, 195) .PPP............ ................ } -# tile 55 (vulgar polearm / partisan) +# tile 56 (vulgar polearm / partisan) { ................ .............PO. @@ -1114,7 +1133,7 @@ Z = (195, 195, 195) .JJAA........... JJAA............ } -# tile 56 (single-edged polearm / glaive) +# tile 57 (single-edged polearm / glaive) { .............KA. ............KNOA @@ -1133,7 +1152,7 @@ Z = (195, 195, 195) JAA............. AA.............. } -# tile 57 (angled poleaxe / halberd) +# tile 58 (angled poleaxe / halberd) { ................ .........OOOA... @@ -1152,7 +1171,7 @@ Z = (195, 195, 195) JJAA............ JAA............. } -# tile 58 (beaked polearm / bec de corbin) +# tile 59 (beaked polearm / bec de corbin) { ................ ................ @@ -1171,7 +1190,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 59 (broad pick / dwarvish mattock) +# tile 60 (broad pick / dwarvish mattock) { ................ ................ @@ -1190,7 +1209,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 60 (lance) +# tile 61 (lance) { PA.............. .PA............. @@ -1209,7 +1228,7 @@ Z = (195, 195, 195) ..........OA.ONO ..............ON } -# tile 61 (mace) +# tile 62 (mace) { ................ ................ @@ -1228,7 +1247,7 @@ Z = (195, 195, 195) ...A............ ................ } -# tile 62 (morning star) +# tile 63 (morning star) { ................ ................ @@ -1247,7 +1266,7 @@ Z = (195, 195, 195) ......KA........ ................ } -# tile 63 (war hammer) +# tile 64 (war hammer) { ..........O..... .........PPOA... @@ -1266,7 +1285,7 @@ Z = (195, 195, 195) .JA............. ................ } -# tile 64 (club) +# tile 65 (club) { ................ ................ @@ -1285,7 +1304,7 @@ Z = (195, 195, 195) .JA............. ................ } -# tile 65 (rubber hose) +# tile 66 (rubber hose) { ................ ................ @@ -1304,7 +1323,7 @@ Z = (195, 195, 195) ....AAA......... ................ } -# tile 66 (staff / quarterstaff) +# tile 67 (staff / quarterstaff) { ................ .............JK. @@ -1323,7 +1342,7 @@ Z = (195, 195, 195) .JJAA........... ..A............. } -# tile 67 (thonged club / aklys) +# tile 68 (thonged club / aklys) { ................ ................ @@ -1342,7 +1361,7 @@ Z = (195, 195, 195) ......OA.OA..... .......OOA...... } -# tile 68 (flail) +# tile 69 (flail) { ................ ............KJ.. @@ -1361,7 +1380,7 @@ Z = (195, 195, 195) ..JA............ ................ } -# tile 69 (bullwhip) +# tile 70 (bullwhip) { ................ ................ @@ -1380,7 +1399,7 @@ Z = (195, 195, 195) ......AAA....... ................ } -# tile 70 (bow) +# tile 71 (bow) { ................ .....K.......... @@ -1399,7 +1418,7 @@ Z = (195, 195, 195) .....KAA........ ................ } -# tile 71 (runed bow / elven bow) +# tile 72 (runed bow / elven bow) { .....K.......... .....KP......... @@ -1418,7 +1437,7 @@ Z = (195, 195, 195) .....KPAAA...... .....KAA........ } -# tile 72 (crude bow / orcish bow) +# tile 73 (crude bow / orcish bow) { ................ ................ @@ -1437,7 +1456,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 73 (long bow / yumi) +# tile 74 (long bow / yumi) { .....L.......... .....LP......... @@ -1456,7 +1475,7 @@ Z = (195, 195, 195) .....LPAAA...... .....LAA........ } -# tile 74 (sling) +# tile 75 (sling) { ................ ................ @@ -1475,7 +1494,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 75 (crossbow) +# tile 76 (crossbow) { ................ ................ @@ -1494,7 +1513,7 @@ Z = (195, 195, 195) ........OA...... ................ } -# tile 76 (elven helm) +# tile 77 (elven helm) { ................ ................ @@ -1513,7 +1532,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 77 (skull cap / orcish helm) +# tile 78 (skull cap / orcish helm) { ................ ................ @@ -1532,7 +1551,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 78 (hard hat / dwarvish helm) +# tile 79 (hard hat / dwarvish helm) { ................ ................ @@ -1551,7 +1570,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 79 (fedora) +# tile 80 (fedora) { ................ ................ @@ -1570,7 +1589,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 80 (conical hat / cornuthaum) +# tile 81 (conical hat / cornuthaum) { ................ .......E........ @@ -1589,7 +1608,7 @@ Z = (195, 195, 195) ....EEEEEEE..... ................ } -# tile 81 (conical hat / dunce cap) +# tile 82 (conical hat / dunce cap) { ................ .......E........ @@ -1608,7 +1627,7 @@ Z = (195, 195, 195) ....EEEEEEE..... ................ } -# tile 82 (dented pot) +# tile 83 (dented pot) { ................ ................ @@ -1627,7 +1646,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 83 (crystal helmet / helm of brilliance) +# tile 84 (crystal helmet / helm of brilliance) { ................ ................ @@ -1646,7 +1665,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 84 (plumed helmet / helmet) +# tile 85 (plumed helmet / helmet) { .......DID...... ......DIBI...... @@ -1665,7 +1684,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 85 (etched helmet / helm of caution) +# tile 86 (etched helmet / helm of caution) { ................ ................ @@ -1684,7 +1703,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 86 (crested helmet / helm of opposite alignment) +# tile 87 (crested helmet / helm of opposite alignment) { ................ ................ @@ -1703,7 +1722,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 87 (visored helmet / helm of telepathy) +# tile 88 (visored helmet / helm of telepathy) { ................ ................ @@ -1722,7 +1741,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 88 (gray dragon scales) +# tile 89 (gray dragon scales) { ................ ................ @@ -1741,7 +1760,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 89 (gold dragon scales) +# tile 90 (gold dragon scales) { ................ ................ @@ -1760,7 +1779,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 90 (silver dragon scales) +# tile 91 (silver dragon scales) { ................ ................ @@ -1779,7 +1798,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 91 (shimmering dragon scales) +# tile 92 (shimmering dragon scales) { ................ ................ @@ -1798,7 +1817,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 92 (red dragon scales) +# tile 93 (red dragon scales) { ................ ................ @@ -1817,7 +1836,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 93 (white dragon scales) +# tile 94 (white dragon scales) { ................ ................ @@ -1836,7 +1855,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 94 (orange dragon scales) +# tile 95 (orange dragon scales) { ................ ................ @@ -1855,7 +1874,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 95 (black dragon scales) +# tile 96 (black dragon scales) { ................ ................ @@ -1874,7 +1893,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 96 (blue dragon scales) +# tile 97 (blue dragon scales) { ................ ................ @@ -1893,7 +1912,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 97 (green dragon scales) +# tile 98 (green dragon scales) { ................ ................ @@ -1912,7 +1931,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 98 (yellow dragon scales) +# tile 99 (yellow dragon scales) { ................ ................ @@ -1931,7 +1950,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 99 (plate mail) +# tile 100 (plate mail) { ................ ................ @@ -1950,7 +1969,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 100 (crystal plate mail) +# tile 101 (crystal plate mail) { ................ ................ @@ -1969,7 +1988,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 101 (splint mail) +# tile 102 (splint mail) { ................ ................ @@ -1988,7 +2007,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 102 (banded mail) +# tile 103 (banded mail) { ................ ................ @@ -2007,7 +2026,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 103 (chain mail) +# tile 104 (chain mail) { ................ ................ @@ -2026,7 +2045,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 104 (scale mail) +# tile 105 (scale mail) { ................ ................ @@ -2045,7 +2064,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 105 (studded armor) +# tile 106 (studded armor) { ................ ................ @@ -2064,7 +2083,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 106 (ring mail) +# tile 107 (ring mail) { ................ ................ @@ -2083,7 +2102,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 107 (dwarvish ring mail) +# tile 108 (dwarvish ring mail) { ................ ................ @@ -2102,7 +2121,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 108 (elven ring mail) +# tile 109 (elven ring mail) { ................ ...N.N.NO.O.O... @@ -2121,7 +2140,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 109 (crude ring mail / orcish ring mail) +# tile 110 (crude ring mail / orcish ring mail) { ................ ................ @@ -2140,7 +2159,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 110 (light armor) +# tile 111 (light armor) { ................ ................ @@ -2159,7 +2178,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 111 (jacket) +# tile 112 (jacket) { ................ ................ @@ -2178,7 +2197,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 112 (Hawaiian shirt) +# tile 113 (Hawaiian shirt) { ................ ................ @@ -2197,7 +2216,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 113 (T-shirt) +# tile 114 (T-shirt) { ................ ................ @@ -2216,7 +2235,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 114 (mummy wrapping) +# tile 115 (mummy wrapping) { ................ ................ @@ -2235,7 +2254,7 @@ Z = (195, 195, 195) ..N.AAN.NA.OO... ................ } -# tile 115 (faded pall / elven cloak) +# tile 116 (faded pall / elven cloak) { ................ ................ @@ -2254,7 +2273,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 116 (coarse mantelet / orcish cloak) +# tile 117 (coarse mantelet / orcish cloak) { ................ ................ @@ -2273,7 +2292,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 117 (hooded cloak / dwarvish cloak) +# tile 118 (hooded cloak / dwarvish cloak) { ................ ................ @@ -2292,7 +2311,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 118 (slippery cloak / oilskin cloak) +# tile 119 (slippery cloak / oilskin cloak) { ................ ................ @@ -2311,7 +2330,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 119 (robe) +# tile 120 (robe) { ................ ......CCC....... @@ -2330,7 +2349,7 @@ Z = (195, 195, 195) ...ACCCCCCAAA... ....AAAAAAAA.... } -# tile 120 (apron / alchemy smock) +# tile 121 (apron / alchemy smock) { ................ ................ @@ -2349,7 +2368,7 @@ Z = (195, 195, 195) .....NNNNNAA.... ......AAAAA..... } -# tile 121 (plain cloak) +# tile 122 (plain cloak) { ................ ................ @@ -2368,7 +2387,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 122 (tattered cape / cloak of protection) +# tile 123 (tattered cape / cloak of protection) { ................ ................ @@ -2387,7 +2406,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 123 (opera cloak / cloak of invisibility) +# tile 124 (opera cloak / cloak of invisibility) { ................ ......NNN....... @@ -2406,7 +2425,7 @@ Z = (195, 195, 195) ..AANNNNNNAOOAA. ....AAAAAAAAAA.. } -# tile 124 (ornamental cope / cloak of magic resistance) +# tile 125 (ornamental cope / cloak of magic resistance) { ................ ................ @@ -2425,7 +2444,7 @@ Z = (195, 195, 195) ..AAAAAAAAAAAP.. ...PPPPPPPPPPP.. } -# tile 125 (dusty cloak / cloak of displacement) +# tile 126 (dusty cloak / cloak of displacement) { ................ ................ @@ -2444,7 +2463,7 @@ Z = (195, 195, 195) .....PPPPPAA.... .......PPAA..... } -# tile 126 (small shield) +# tile 127 (small shield) { ................ ................ @@ -2463,7 +2482,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 127 (blue and green shield / elven shield) +# tile 128 (blue and green shield / elven shield) { ................ ................ @@ -2482,7 +2501,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 128 (white-handed shield / Uruk-hai shield) +# tile 129 (white-handed shield / Uruk-hai shield) { ................ ...K.KKKJJJ.J... @@ -2501,7 +2520,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 129 (red-eyed shield / orcish shield) +# tile 130 (red-eyed shield / orcish shield) { ................ ................ @@ -2520,7 +2539,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 130 (large shield) +# tile 131 (large shield) { ................ ...N.NNNOOO.O... @@ -2539,7 +2558,7 @@ Z = (195, 195, 195) ........AA...... ................ } -# tile 131 (large round shield / dwarvish roundshield) +# tile 132 (large round shield / dwarvish roundshield) { ................ ................ @@ -2558,7 +2577,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 132 (polished shield / shield of reflection) +# tile 133 (polished shield / shield of reflection) { ................ ................ @@ -2577,7 +2596,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 133 (old gloves / gloves) +# tile 134 (old gloves / gloves) { ................ ................ @@ -2596,7 +2615,7 @@ Z = (195, 195, 195) .........AAA.... ................ } -# tile 134 (padded gloves / gauntlets of fumbling) +# tile 135 (padded gloves / gauntlets of fumbling) { ................ ................ @@ -2615,7 +2634,7 @@ Z = (195, 195, 195) .........AAA.... ................ } -# tile 135 (riding gloves / gauntlets of power) +# tile 136 (riding gloves / gauntlets of power) { ................ ................ @@ -2634,7 +2653,7 @@ Z = (195, 195, 195) .........AAA.... ................ } -# tile 136 (fencing gloves / gauntlets of dexterity) +# tile 137 (fencing gloves / gauntlets of dexterity) { ................ ................ @@ -2653,7 +2672,7 @@ Z = (195, 195, 195) .........AAA.... ................ } -# tile 137 (walking shoes / low boots) +# tile 138 (walking shoes / low boots) { ................ ................ @@ -2672,7 +2691,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 138 (hard shoes / dwarvish boots) +# tile 139 (hard shoes / dwarvish boots) { ................ ................ @@ -2691,7 +2710,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 139 (jackboots / high boots) +# tile 140 (jackboots / high boots) { .......CCKKKK... ......CKAAAAJJ.. @@ -2710,7 +2729,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 140 (combat boots / speed boots) +# tile 141 (combat boots / speed boots) { ................ ................ @@ -2729,7 +2748,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 141 (jungle boots / water walking boots) +# tile 142 (jungle boots / water walking boots) { ................ ................ @@ -2748,7 +2767,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 142 (hiking boots / jumping boots) +# tile 143 (hiking boots / jumping boots) { ................ ................ @@ -2767,7 +2786,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 143 (mud boots / elven boots) +# tile 144 (mud boots / elven boots) { ................ ................ @@ -2786,7 +2805,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 144 (buckled boots / kicking boots) +# tile 145 (buckled boots / kicking boots) { ................ ................ @@ -2805,7 +2824,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 145 (riding boots / fumble boots) +# tile 146 (riding boots / fumble boots) { ................ ................ @@ -2824,7 +2843,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 146 (snow boots / levitation boots) +# tile 147 (snow boots / levitation boots) { ................ ................ @@ -2843,7 +2862,7 @@ Z = (195, 195, 195) ...A.A.A.A.A.A.. ................ } -# tile 147 (wooden / adornment) +# tile 148 (wooden / adornment) { ................ ................ @@ -2862,7 +2881,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 148 (granite / gain strength) +# tile 149 (granite / gain strength) { ................ ................ @@ -2881,7 +2900,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 149 (opal / gain constitution) +# tile 150 (opal / gain constitution) { ................ ................ @@ -2900,7 +2919,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 150 (clay / increase accuracy) +# tile 151 (clay / increase accuracy) { ................ ................ @@ -2919,7 +2938,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 151 (coral / increase damage) +# tile 152 (coral / increase damage) { ................ ................ @@ -2938,7 +2957,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 152 (black onyx / protection) +# tile 153 (black onyx / protection) { ................ ................ @@ -2957,7 +2976,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 153 (moonstone / regeneration) +# tile 154 (moonstone / regeneration) { ................ ................ @@ -2976,7 +2995,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 154 (tiger eye / searching) +# tile 155 (tiger eye / searching) { ................ ................ @@ -2995,7 +3014,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 155 (jade / stealth) +# tile 156 (jade / stealth) { ................ ................ @@ -3014,7 +3033,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 156 (bronze / sustain ability) +# tile 157 (bronze / sustain ability) { ................ ................ @@ -3033,7 +3052,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 157 (agate / levitation) +# tile 158 (agate / levitation) { ................ ................ @@ -3052,7 +3071,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 158 (topaz / hunger) +# tile 159 (topaz / hunger) { ................ ................ @@ -3071,7 +3090,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 159 (sapphire / aggravate monster) +# tile 160 (sapphire / aggravate monster) { ................ ................ @@ -3090,7 +3109,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 160 (ruby / conflict) +# tile 161 (ruby / conflict) { ................ ................ @@ -3109,7 +3128,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 161 (diamond / warning) +# tile 162 (diamond / warning) { ................ ................ @@ -3128,7 +3147,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 162 (pearl / poison resistance) +# tile 163 (pearl / poison resistance) { ................ ................ @@ -3147,7 +3166,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 163 (iron / fire resistance) +# tile 164 (iron / fire resistance) { ................ ................ @@ -3166,7 +3185,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 164 (brass / cold resistance) +# tile 165 (brass / cold resistance) { ................ ................ @@ -3185,7 +3204,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 165 (copper / shock resistance) +# tile 166 (copper / shock resistance) { ................ ................ @@ -3204,7 +3223,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 166 (twisted / free action) +# tile 167 (twisted / free action) { ................ ................ @@ -3223,7 +3242,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 167 (steel / slow digestion) +# tile 168 (steel / slow digestion) { ................ ................ @@ -3242,7 +3261,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 168 (silver / teleportation) +# tile 169 (silver / teleportation) { ................ ................ @@ -3261,7 +3280,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 169 (gold / teleport control) +# tile 170 (gold / teleport control) { ................ ................ @@ -3280,7 +3299,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 170 (ivory / polymorph) +# tile 171 (ivory / polymorph) { ................ ................ @@ -3299,7 +3318,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 171 (emerald / polymorph control) +# tile 172 (emerald / polymorph control) { ................ ................ @@ -3318,7 +3337,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 172 (wire / invisibility) +# tile 173 (wire / invisibility) { ................ ................ @@ -3337,7 +3356,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 173 (engagement / see invisible) +# tile 174 (engagement / see invisible) { ................ ................ @@ -3356,7 +3375,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 174 (shiny / protection from shape changers) +# tile 175 (shiny / protection from shape changers) { ................ ................ @@ -3375,7 +3394,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 175 (glittery / carrying) +# tile 176 (glittery / carrying) { ................ ................ @@ -3394,7 +3413,7 @@ Z = (195, 195, 195) ...N............ ................ } -# tile 176 (circular / amulet of ESP) +# tile 177 (circular / amulet of ESP) { ................ ......LLLLLAA... @@ -3413,7 +3432,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 177 (spherical / amulet of life saving) +# tile 178 (spherical / amulet of life saving) { ................ ......LLLLLAA... @@ -3432,7 +3451,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 178 (oval / amulet of strangulation) +# tile 179 (oval / amulet of strangulation) { ................ ......LLLLLLAA.. @@ -3451,7 +3470,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 179 (triangular / amulet of restful sleep) +# tile 180 (triangular / amulet of restful sleep) { ................ ......LLLLLAA... @@ -3470,7 +3489,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 180 (pyramidal / amulet versus poison) +# tile 181 (pyramidal / amulet versus poison) { ................ ......LLLLLAA... @@ -3489,7 +3508,7 @@ Z = (195, 195, 195) ....KJJJJJJJJA.. .......AAAAAAA.. } -# tile 181 (square / amulet of change) +# tile 182 (square / amulet of change) { ................ ......LLLLLAA... @@ -3508,7 +3527,7 @@ Z = (195, 195, 195) .......AAAAA.... ................ } -# tile 182 (concave / amulet of unchanging) +# tile 183 (concave / amulet of unchanging) { ................ ......LLLLLAA... @@ -3527,7 +3546,7 @@ Z = (195, 195, 195) .......KCCAA.... ........AAA..... } -# tile 183 (hexagonal / amulet of reflection) +# tile 184 (hexagonal / amulet of reflection) { ................ ......LLLLLAA... @@ -3546,7 +3565,7 @@ Z = (195, 195, 195) ........AAA..... ................ } -# tile 184 (octagonal / amulet of magical breathing) +# tile 185 (octagonal / amulet of magical breathing) { ................ ......LLLLLAA... @@ -3565,7 +3584,7 @@ Z = (195, 195, 195) .......KKKAA.... ........AAA..... } -# tile 185 (perforated / amulet of guarding) +# tile 186 (perforated / amulet of guarding) { ................ ......LLLLLAA... @@ -3584,7 +3603,7 @@ Z = (195, 195, 195) .......KKKAA.... ........AAA..... } -# tile 186 (cubical / amulet of flying) +# tile 187 (cubical / amulet of flying) { ................ ......LLLLLAA... @@ -3603,7 +3622,7 @@ Z = (195, 195, 195) ......CKKKKA.... .......AAAAA.... } -# tile 187 (Amulet of Yendor / cheap plastic imitation of the Amulet of Yendor) +# tile 188 (Amulet of Yendor / cheap plastic imitation of the Amulet of Yendor) { ................ ......HHHHHAA... @@ -3622,7 +3641,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 188 (Amulet of Yendor / Amulet of Yendor) +# tile 189 (Amulet of Yendor / Amulet of Yendor) { ................ ......HHHHHAA... @@ -3641,7 +3660,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 189 (large box) +# tile 190 (large box) { ................ ................ @@ -3660,7 +3679,7 @@ Z = (195, 195, 195) CKKKKKKKKKKJAA.. .AAAAAAAAAAAA... } -# tile 190 (chest) +# tile 191 (chest) { ................ ................ @@ -3679,7 +3698,7 @@ Z = (195, 195, 195) CKKKKKKKKKKJAA.. .AAAAAAAAAAAA... } -# tile 191 (ice box) +# tile 192 (ice box) { ................ ................ @@ -3698,7 +3717,7 @@ Z = (195, 195, 195) NBBBBBBBBBBPAA.. .AAAAAAAAAAAA... } -# tile 192 (bag / sack) +# tile 193 (bag / sack) { ................ ................ @@ -3717,7 +3736,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 193 (bag / oilskin sack) +# tile 194 (bag / oilskin sack) { ................ ................ @@ -3736,7 +3755,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 194 (bag / bag of holding) +# tile 195 (bag / bag of holding) { ................ ................ @@ -3755,7 +3774,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 195 (bag / bag of tricks) +# tile 196 (bag / bag of tricks) { ................ ................ @@ -3774,7 +3793,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 196 (key / skeleton key) +# tile 197 (key / skeleton key) { ................ ................ @@ -3793,7 +3812,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 197 (lock pick) +# tile 198 (lock pick) { ................ ................ @@ -3812,7 +3831,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 198 (credit card) +# tile 199 (credit card) { ................ ................ @@ -3831,7 +3850,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 199 (candle / tallow candle) +# tile 200 (candle / tallow candle) { ................ ................ @@ -3850,7 +3869,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 200 (candle / wax candle) +# tile 201 (candle / wax candle) { ................ ................ @@ -3869,7 +3888,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 201 (lantern) +# tile 202 (lantern) { ................ ................ @@ -3888,7 +3907,7 @@ Z = (195, 195, 195) .....AAAAAAA.... ................ } -# tile 202 (lamp / oil lamp) +# tile 203 (lamp / oil lamp) { ................ ................ @@ -3907,7 +3926,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 203 (lamp / magic lamp) +# tile 204 (lamp / magic lamp) { ................ ................ @@ -3926,7 +3945,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 204 (expensive camera) +# tile 205 (expensive camera) { ................ ................ @@ -3945,7 +3964,7 @@ Z = (195, 195, 195) ...PPPPPPPPPPPP. ................ } -# tile 205 (looking glass / mirror) +# tile 206 (looking glass / mirror) { ................ ................ @@ -3964,7 +3983,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 206 (glass orb / crystal ball) +# tile 207 (glass orb / crystal ball) { ................ ................ @@ -3983,7 +4002,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 207 (lenses) +# tile 208 (lenses) { ................ ................ @@ -4002,7 +4021,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 208 (blindfold) +# tile 209 (blindfold) { ................ ................ @@ -4021,7 +4040,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 209 (towel) +# tile 210 (towel) { ................ ................ @@ -4040,7 +4059,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 210 (saddle) +# tile 211 (saddle) { ................ ................ @@ -4059,7 +4078,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 211 (leash) +# tile 212 (leash) { ................ ................ @@ -4078,7 +4097,7 @@ Z = (195, 195, 195) .....AAAA....... ................ } -# tile 212 (stethoscope) +# tile 213 (stethoscope) { ................ ................ @@ -4097,7 +4116,7 @@ Z = (195, 195, 195) ........AAA..... ................ } -# tile 213 (tinning kit) +# tile 214 (tinning kit) { ................ ................ @@ -4116,7 +4135,7 @@ Z = (195, 195, 195) ......AAA....... ................ } -# tile 214 (tin opener) +# tile 215 (tin opener) { ................ ................ @@ -4135,7 +4154,7 @@ Z = (195, 195, 195) ........AA...... ................ } -# tile 215 (can of grease) +# tile 216 (can of grease) { ................ ................ @@ -4154,7 +4173,7 @@ Z = (195, 195, 195) .......AAAA..... ................ } -# tile 216 (figurine) +# tile 217 (figurine) { ................ ................ @@ -4173,7 +4192,7 @@ Z = (195, 195, 195) .....JJJJJAA.... ................ } -# tile 217 (magic marker) +# tile 218 (magic marker) { ................ ................ @@ -4192,7 +4211,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 218 (land mine) +# tile 219 (land mine) { ................ ................ @@ -4211,7 +4230,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 219 (beartrap) +# tile 220 (beartrap) { ................ ................ @@ -4230,7 +4249,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 220 (whistle / pea whistle) +# tile 221 (whistle / pea whistle) { ................ ................ @@ -4249,7 +4268,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 221 (whistle / magic whistle) +# tile 222 (whistle / magic whistle) { ................ ................ @@ -4268,7 +4287,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 222 (flute / mundane flute) +# tile 223 (flute / mundane flute) { ................ ................ @@ -4287,7 +4306,7 @@ Z = (195, 195, 195) ..A............. ................ } -# tile 223 (flute / magic flute) +# tile 224 (flute / magic flute) { ................ ................ @@ -4306,7 +4325,7 @@ Z = (195, 195, 195) ..A............. ................ } -# tile 224 (horn / tooled horn) +# tile 225 (horn / tooled horn) { ................ ................ @@ -4325,7 +4344,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 225 (horn / frost horn) +# tile 226 (horn / frost horn) { ................ ................ @@ -4344,7 +4363,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 226 (horn / fire horn) +# tile 227 (horn / fire horn) { ................ ................ @@ -4363,7 +4382,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 227 (horn / horn of plenty) +# tile 228 (horn / horn of plenty) { ................ ................ @@ -4382,7 +4401,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 228 (harp / mundane harp) +# tile 229 (harp / mundane harp) { ................ ................ @@ -4401,7 +4420,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 229 (harp / magic harp) +# tile 230 (harp / magic harp) { ................ ................ @@ -4420,7 +4439,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 230 (bell) +# tile 231 (bell) { ................ .......KA....... @@ -4439,7 +4458,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 231 (bugle) +# tile 232 (bugle) { ................ ................ @@ -4458,7 +4477,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 232 (drum / leather drum) +# tile 233 (drum / leather drum) { ................ ................ @@ -4477,7 +4496,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 233 (drum / drum of earthquake) +# tile 234 (drum / drum of earthquake) { ................ ................ @@ -4496,7 +4515,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 234 (pick-axe) +# tile 235 (pick-axe) { ................ ................ @@ -4515,7 +4534,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 235 (grappling hook) +# tile 236 (grappling hook) { .............N.. ..............P. @@ -4534,7 +4553,7 @@ Z = (195, 195, 195) ..OOA..OOOA..... ....OOOAA....... } -# tile 236 (unicorn horn) +# tile 237 (unicorn horn) { ................ ................ @@ -4553,7 +4572,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 237 (candelabrum / Candelabrum of Invocation) +# tile 238 (candelabrum / Candelabrum of Invocation) { .......N........ .......D........ @@ -4572,7 +4591,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 238 (engraved silver bell / Bell of Opening) +# tile 239 (engraved silver bell / Bell of Opening) { ................ .......OA....... @@ -4591,7 +4610,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 239 (tripe ration) +# tile 240 (tripe ration) { ................ ................ @@ -4610,7 +4629,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 240 (corpse) +# tile 241 (corpse) { ................ .....D.DPLN..... @@ -4629,7 +4648,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 241 (egg) +# tile 242 (egg) { ................ ................ @@ -4648,7 +4667,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 242 (meatball) +# tile 243 (meatball) { ................ ................ @@ -4667,7 +4686,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 243 (meat stick) +# tile 244 (meat stick) { ................ ................ @@ -4686,7 +4705,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 244 (enormous meatball) +# tile 245 (enormous meatball) { ................ ................ @@ -4705,7 +4724,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 245 (meat ring) +# tile 246 (meat ring) { ................ ................ @@ -4724,7 +4743,7 @@ Z = (195, 195, 195) ......AAAAA..... ................ } -# tile 246 (glob of gray ooze) +# tile 247 (glob of gray ooze) { ................ ................ @@ -4743,7 +4762,7 @@ Z = (195, 195, 195) ...AAA.AAAAA.... ................ } -# tile 247 (glob of brown pudding) +# tile 248 (glob of brown pudding) { ................ ................ @@ -4762,7 +4781,7 @@ Z = (195, 195, 195) ...AAA.AAAAA.... ................ } -# tile 248 (glob of green slime) +# tile 249 (glob of green slime) { ................ ................ @@ -4781,7 +4800,7 @@ Z = (195, 195, 195) ...AAA.AAAAA.... ................ } -# tile 249 (glob of black pudding) +# tile 250 (glob of black pudding) { ................ ................ @@ -4800,7 +4819,7 @@ Z = (195, 195, 195) ...AAA.AAAAA.... ................ } -# tile 250 (kelp frond) +# tile 251 (kelp frond) { ....FA.......... ....FFA......... @@ -4819,7 +4838,7 @@ Z = (195, 195, 195) .....FFFFA...... ......FFFFA..... } -# tile 251 (eucalyptus leaf) +# tile 252 (eucalyptus leaf) { ................ ................ @@ -4838,7 +4857,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 252 (apple) +# tile 253 (apple) { ................ ................ @@ -4857,7 +4876,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 253 (orange) +# tile 254 (orange) { ................ ................ @@ -4876,7 +4895,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 254 (pear) +# tile 255 (pear) { ................ ................ @@ -4895,7 +4914,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 255 (melon) +# tile 256 (melon) { ................ ................ @@ -4914,7 +4933,7 @@ Z = (195, 195, 195) ......AAA....... ................ } -# tile 256 (banana) +# tile 257 (banana) { ................ ................ @@ -4933,7 +4952,7 @@ Z = (195, 195, 195) .....AAAAA...... ................ } -# tile 257 (carrot) +# tile 258 (carrot) { ................ ..........F..F.. @@ -4952,7 +4971,7 @@ Z = (195, 195, 195) ...A............ ................ } -# tile 258 (sprig of wolfsbane) +# tile 259 (sprig of wolfsbane) { ................ ................ @@ -4971,7 +4990,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 259 (clove of garlic) +# tile 260 (clove of garlic) { ................ ................ @@ -4990,7 +5009,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 260 (slime mold) +# tile 261 (slime mold) { ................ ................ @@ -5009,7 +5028,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 261 (lump of royal jelly) +# tile 262 (lump of royal jelly) { ................ ................ @@ -5028,7 +5047,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 262 (cream pie) +# tile 263 (cream pie) { ................ ................ @@ -5047,7 +5066,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 263 (candy bar) +# tile 264 (candy bar) { ................ ................ @@ -5066,7 +5085,7 @@ Z = (195, 195, 195) ....A........... ................ } -# tile 264 (fortune cookie) +# tile 265 (fortune cookie) { ................ ................ @@ -5085,7 +5104,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 265 (pancake) +# tile 266 (pancake) { ................ ................ @@ -5104,7 +5123,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 266 (lembas wafer) +# tile 267 (lembas wafer) { ................ ................ @@ -5123,7 +5142,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 267 (cram ration) +# tile 268 (cram ration) { ................ ...JKA.......... @@ -5142,7 +5161,7 @@ Z = (195, 195, 195) .....AAAAAA..... ................ } -# tile 268 (food ration) +# tile 269 (food ration) { ...JJA.......... ...BPA.......... @@ -5161,7 +5180,7 @@ Z = (195, 195, 195) ....KKKKKKKKKA.. .....AAAAAAAA... } -# tile 269 (K-ration) +# tile 270 (K-ration) { ................ ................ @@ -5180,7 +5199,7 @@ Z = (195, 195, 195) ....KKKKKKKKKA.. .....AAAAAAAA... } -# tile 270 (C-ration) +# tile 271 (C-ration) { ................ ................ @@ -5199,7 +5218,7 @@ Z = (195, 195, 195) ....KKKKKKKKKA.. .....AAAAAAAA... } -# tile 271 (tin) +# tile 272 (tin) { ................ ................ @@ -5218,7 +5237,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 272 (ruby / gain ability) +# tile 273 (ruby / gain ability) { ................ ................ @@ -5237,7 +5256,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 273 (pink / restore ability) +# tile 274 (pink / restore ability) { ................ ................ @@ -5256,7 +5275,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 274 (orange / confusion) +# tile 275 (orange / confusion) { ................ ................ @@ -5275,7 +5294,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 275 (yellow / blindness) +# tile 276 (yellow / blindness) { ................ ................ @@ -5294,7 +5313,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 276 (emerald / paralysis) +# tile 277 (emerald / paralysis) { ................ ................ @@ -5313,7 +5332,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 277 (dark green / speed) +# tile 278 (dark green / speed) { ................ ................ @@ -5332,7 +5351,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 278 (cyan / levitation) +# tile 279 (cyan / levitation) { ................ ................ @@ -5351,7 +5370,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 279 (sky blue / hallucination) +# tile 280 (sky blue / hallucination) { ................ ................ @@ -5370,7 +5389,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 280 (brilliant blue / invisibility) +# tile 281 (brilliant blue / invisibility) { ................ ................ @@ -5389,7 +5408,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 281 (magenta / see invisible) +# tile 282 (magenta / see invisible) { ................ ................ @@ -5408,7 +5427,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 282 (purple-red / healing) +# tile 283 (purple-red / healing) { ................ ................ @@ -5427,7 +5446,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 283 (puce / extra healing) +# tile 284 (puce / extra healing) { ................ ................ @@ -5446,7 +5465,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 284 (milky / gain level) +# tile 285 (milky / gain level) { ................ ................ @@ -5465,7 +5484,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 285 (swirly / enlightenment) +# tile 286 (swirly / enlightenment) { ................ ................ @@ -5484,7 +5503,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 286 (bubbly / monster detection) +# tile 287 (bubbly / monster detection) { ................ ................ @@ -5503,7 +5522,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 287 (smoky / object detection) +# tile 288 (smoky / object detection) { ................ ................ @@ -5522,7 +5541,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 288 (cloudy / gain energy) +# tile 289 (cloudy / gain energy) { ................ ................ @@ -5541,7 +5560,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 289 (effervescent / sleeping) +# tile 290 (effervescent / sleeping) { ................ ................ @@ -5560,7 +5579,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 290 (black / full healing) +# tile 291 (black / full healing) { ................ ................ @@ -5579,7 +5598,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 291 (golden / polymorph) +# tile 292 (golden / polymorph) { ................ ................ @@ -5598,7 +5617,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 292 (brown / booze) +# tile 293 (brown / booze) { ................ ................ @@ -5617,7 +5636,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 293 (fizzy / sickness) +# tile 294 (fizzy / sickness) { ................ ................ @@ -5636,7 +5655,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 294 (dark / fruit juice) +# tile 295 (dark / fruit juice) { ................ ................ @@ -5655,7 +5674,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 295 (white / acid) +# tile 296 (white / acid) { ................ ................ @@ -5674,7 +5693,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 296 (murky / oil) +# tile 297 (murky / oil) { ................ ................ @@ -5693,7 +5712,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 297 (clear / water) +# tile 298 (clear / water) { ................ ................ @@ -5712,7 +5731,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 298 (ZELGO MER / enchant armor) +# tile 299 (ZELGO MER / enchant armor) { ................ ................ @@ -5731,7 +5750,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 299 (JUYED AWK YACC / destroy armor) +# tile 300 (JUYED AWK YACC / destroy armor) { ................ ................ @@ -5750,7 +5769,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 300 (NR 9 / confuse monster) +# tile 301 (NR 9 / confuse monster) { ................ ................ @@ -5769,7 +5788,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 301 (XIXAXA XOXAXA XUXAXA / scare monster) +# tile 302 (XIXAXA XOXAXA XUXAXA / scare monster) { ................ ................ @@ -5788,7 +5807,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 302 (PRATYAVAYAH / remove curse) +# tile 303 (PRATYAVAYAH / remove curse) { ................ ................ @@ -5807,7 +5826,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 303 (DAIYEN FOOELS / enchant weapon) +# tile 304 (DAIYEN FOOELS / enchant weapon) { ................ ................ @@ -5826,7 +5845,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 304 (LEP GEX VEN ZEA / create monster) +# tile 305 (LEP GEX VEN ZEA / create monster) { ................ ................ @@ -5845,7 +5864,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 305 (PRIRUTSENIE / taming) +# tile 306 (PRIRUTSENIE / taming) { ................ ................ @@ -5864,7 +5883,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 306 (ELBIB YLOH / genocide) +# tile 307 (ELBIB YLOH / genocide) { ................ ................ @@ -5883,7 +5902,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 307 (VERR YED HORRE / light) +# tile 308 (VERR YED HORRE / light) { ................ ................ @@ -5902,7 +5921,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 308 (VENZAR BORGAVVE / teleportation) +# tile 309 (VENZAR BORGAVVE / teleportation) { ................ ................ @@ -5921,7 +5940,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 309 (THARR / gold detection) +# tile 310 (THARR / gold detection) { ................ ................ @@ -5940,7 +5959,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 310 (YUM YUM / food detection) +# tile 311 (YUM YUM / food detection) { ................ ................ @@ -5959,7 +5978,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 311 (KERNOD WEL / identify) +# tile 312 (KERNOD WEL / identify) { ................ ................ @@ -5978,7 +5997,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 312 (ELAM EBOW / magic mapping) +# tile 313 (ELAM EBOW / magic mapping) { ................ ................ @@ -5997,7 +6016,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 313 (EGULED EL IOM SERPA / water) +# tile 314 (EGULED EL IOM SERPA / water) { ................ ................ @@ -6016,7 +6035,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 314 (DUAM XNAHT / amnesia) +# tile 315 (DUAM XNAHT / amnesia) { ................ ................ @@ -6035,7 +6054,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 315 (ANDOVA BEGARIN / fire) +# tile 316 (ANDOVA BEGARIN / fire) { ................ ................ @@ -6054,7 +6073,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 316 (KIRJE / earth) +# tile 317 (KIRJE / earth) { ................ ................ @@ -6073,7 +6092,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 317 (VE FORBRYDERNE / punishment) +# tile 318 (VE FORBRYDERNE / punishment) { ................ ................ @@ -6092,7 +6111,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 318 (HACKEM MUCHE / charging) +# tile 319 (HACKEM MUCHE / charging) { ................ ................ @@ -6111,7 +6130,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 319 (VELOX NEB / stinking cloud) +# tile 320 (VELOX NEB / stinking cloud) { ................ ................ @@ -6130,7 +6149,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 320 (FOOBIE BLETCH) +# tile 321 (FOOBIE BLETCH) { ................ ................ @@ -6149,7 +6168,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 321 (TEMOV) +# tile 322 (TEMOV) { ................ ................ @@ -6168,7 +6187,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 322 (GARVEN DEH) +# tile 323 (GARVEN DEH) { ................ ................ @@ -6187,7 +6206,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 323 (READ ME) +# tile 324 (READ ME) { ................ ................ @@ -6206,7 +6225,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 324 (ETAOIN SHRDLU) +# tile 325 (ETAOIN SHRDLU) { ................ ................ @@ -6225,7 +6244,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 325 (LOREM IPSUM) +# tile 326 (LOREM IPSUM) { ................ ................ @@ -6244,7 +6263,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 326 (FNORD) +# tile 327 (FNORD) { ................ ................ @@ -6263,7 +6282,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 327 (KO BATE) +# tile 328 (KO BATE) { ................ ................ @@ -6282,7 +6301,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 328 (ABRA KA DABRA) +# tile 329 (ABRA KA DABRA) { ................ ................ @@ -6301,7 +6320,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 329 (ASHPD SODALG) +# tile 330 (ASHPD SODALG) { ................ ................ @@ -6320,7 +6339,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 330 (ZLORFIK) +# tile 331 (ZLORFIK) { ................ ................ @@ -6339,7 +6358,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 331 (GNIK SISI VLE) +# tile 332 (GNIK SISI VLE) { ................ ................ @@ -6358,7 +6377,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 332 (HAPAX LEGOMENON) +# tile 333 (HAPAX LEGOMENON) { ................ ................ @@ -6377,7 +6396,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 333 (EIRIS SAZUN IDISI) +# tile 334 (EIRIS SAZUN IDISI) { ................ ................ @@ -6396,7 +6415,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 334 (PHOL ENDE WODAN) +# tile 335 (PHOL ENDE WODAN) { ................ ................ @@ -6415,7 +6434,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 335 (GHOTI) +# tile 336 (GHOTI) { ................ ................ @@ -6434,7 +6453,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 336 (MAPIRO MAHAMA DIROMAT) +# tile 337 (MAPIRO MAHAMA DIROMAT) { ................ ................ @@ -6453,7 +6472,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 337 (VAS CORP BET MANI) +# tile 338 (VAS CORP BET MANI) { ................ ................ @@ -6472,7 +6491,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 338 (XOR OTA) +# tile 339 (XOR OTA) { ................ ................ @@ -6491,7 +6510,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 339 (STRC PRST SKRZ KRK) +# tile 340 (STRC PRST SKRZ KRK) { ................ ................ @@ -6510,7 +6529,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 340 (stamped / mail) +# tile 341 (stamped / mail) { ................ ................ @@ -6529,7 +6548,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 341 (unlabeled / blank paper) +# tile 342 (unlabeled / blank paper) { ................ ................ @@ -6548,7 +6567,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 342 (parchment / dig) +# tile 343 (parchment / dig) { ................ ................ @@ -6567,7 +6586,7 @@ Z = (195, 195, 195) .......JJJAA.... ................ } -# tile 343 (vellum / magic missile) +# tile 344 (vellum / magic missile) { ................ ................ @@ -6586,7 +6605,7 @@ Z = (195, 195, 195) .......JJJAA.... ................ } -# tile 344 (ragged / fireball) +# tile 345 (ragged / fireball) { ................ ................ @@ -6605,7 +6624,7 @@ Z = (195, 195, 195) ......OOJJAA.... ................ } -# tile 345 (dog eared / cone of cold) +# tile 346 (dog eared / cone of cold) { ................ ................ @@ -6624,7 +6643,7 @@ Z = (195, 195, 195) .......JJJAA.... ................ } -# tile 346 (mottled / sleep) +# tile 347 (mottled / sleep) { ................ ................ @@ -6643,7 +6662,7 @@ Z = (195, 195, 195) .......JJJAA.... ................ } -# tile 347 (stained / finger of death) +# tile 348 (stained / finger of death) { ................ ................ @@ -6662,7 +6681,7 @@ Z = (195, 195, 195) .......JJJAA.... ................ } -# tile 348 (cloth / light) +# tile 349 (cloth / light) { ................ ................ @@ -6681,7 +6700,7 @@ Z = (195, 195, 195) .......PPPAA.... ................ } -# tile 349 (leathery / detect monsters) +# tile 350 (leathery / detect monsters) { ................ ................ @@ -6700,7 +6719,7 @@ Z = (195, 195, 195) .......JJJAA.... ................ } -# tile 350 (white / healing) +# tile 351 (white / healing) { ................ ................ @@ -6719,7 +6738,7 @@ Z = (195, 195, 195) .......PNNAA.... ................ } -# tile 351 (pink / knock) +# tile 352 (pink / knock) { ................ ................ @@ -6738,7 +6757,7 @@ Z = (195, 195, 195) .......IIIAA.... ................ } -# tile 352 (red / force bolt) +# tile 353 (red / force bolt) { ................ ................ @@ -6757,7 +6776,7 @@ Z = (195, 195, 195) .......DDDAA.... ................ } -# tile 353 (orange / confuse monster) +# tile 354 (orange / confuse monster) { ................ ................ @@ -6776,7 +6795,7 @@ Z = (195, 195, 195) .......CCCAA.... ................ } -# tile 354 (yellow / cure blindness) +# tile 355 (yellow / cure blindness) { ................ ................ @@ -6795,7 +6814,7 @@ Z = (195, 195, 195) .......HHHAA.... ................ } -# tile 355 (velvet / drain life) +# tile 356 (velvet / drain life) { ................ ................ @@ -6814,7 +6833,7 @@ Z = (195, 195, 195) .......EEEAA.... ................ } -# tile 356 (light green / slow monster) +# tile 357 (light green / slow monster) { ................ ................ @@ -6833,7 +6852,7 @@ Z = (195, 195, 195) .......GGGAA.... ................ } -# tile 357 (dark green / wizard lock) +# tile 358 (dark green / wizard lock) { ................ ................ @@ -6852,7 +6871,7 @@ Z = (195, 195, 195) .......FFFAA.... ................ } -# tile 358 (turquoise / create monster) +# tile 359 (turquoise / create monster) { ................ ................ @@ -6871,7 +6890,7 @@ Z = (195, 195, 195) .......FBBAA.... ................ } -# tile 359 (cyan / detect food) +# tile 360 (cyan / detect food) { ................ ................ @@ -6890,7 +6909,7 @@ Z = (195, 195, 195) .......BBBAA.... ................ } -# tile 360 (light blue / cause fear) +# tile 361 (light blue / cause fear) { ................ ................ @@ -6909,7 +6928,7 @@ Z = (195, 195, 195) .......BBBAA.... ................ } -# tile 361 (dark blue / clairvoyance) +# tile 362 (dark blue / clairvoyance) { ................ ................ @@ -6928,7 +6947,7 @@ Z = (195, 195, 195) .......EEEAA.... ................ } -# tile 362 (indigo / cure sickness) +# tile 363 (indigo / cure sickness) { ................ ................ @@ -6947,7 +6966,7 @@ Z = (195, 195, 195) .......EEEAA.... ................ } -# tile 363 (magenta / charm monster) +# tile 364 (magenta / charm monster) { ................ ................ @@ -6966,7 +6985,7 @@ Z = (195, 195, 195) .......IIIAA.... ................ } -# tile 364 (purple / haste self) +# tile 365 (purple / haste self) { ................ ................ @@ -6985,7 +7004,7 @@ Z = (195, 195, 195) .......IIIAA.... ................ } -# tile 365 (violet / detect unseen) +# tile 366 (violet / detect unseen) { ................ ................ @@ -7004,7 +7023,7 @@ Z = (195, 195, 195) .......IIIAA.... ................ } -# tile 366 (tan / levitation) +# tile 367 (tan / levitation) { ................ ................ @@ -7023,7 +7042,7 @@ Z = (195, 195, 195) .......KKKAA.... ................ } -# tile 367 (plaid / extra healing) +# tile 368 (plaid / extra healing) { ................ ................ @@ -7042,7 +7061,7 @@ Z = (195, 195, 195) .......EFDAA.... ................ } -# tile 368 (light brown / restore ability) +# tile 369 (light brown / restore ability) { ................ ................ @@ -7061,7 +7080,7 @@ Z = (195, 195, 195) .......JJJAA.... ................ } -# tile 369 (dark brown / invisibility) +# tile 370 (dark brown / invisibility) { ................ ................ @@ -7080,7 +7099,7 @@ Z = (195, 195, 195) .......JJJAA.... ................ } -# tile 370 (gray / detect treasure) +# tile 371 (gray / detect treasure) { ................ ................ @@ -7099,7 +7118,7 @@ Z = (195, 195, 195) .......PPPAA.... ................ } -# tile 371 (wrinkled / remove curse) +# tile 372 (wrinkled / remove curse) { ................ ................ @@ -7118,7 +7137,7 @@ Z = (195, 195, 195) ......JJKKAA.... ................ } -# tile 372 (dusty / magic mapping) +# tile 373 (dusty / magic mapping) { ................ ................ @@ -7137,7 +7156,7 @@ Z = (195, 195, 195) .KAKA..JJJAA.... ................ } -# tile 373 (copper / turn undead) +# tile 374 (copper / turn undead) { ................ ................ @@ -7156,7 +7175,7 @@ Z = (195, 195, 195) .......JCJAA.... ................ } -# tile 374 (silver / polymorph) +# tile 375 (silver / polymorph) { ................ ................ @@ -7175,7 +7194,7 @@ Z = (195, 195, 195) .......PPPAA.... ................ } -# tile 375 (gold / teleport away) +# tile 376 (gold / teleport away) { ................ ................ @@ -7194,7 +7213,7 @@ Z = (195, 195, 195) .......HHHAA.... ................ } -# tile 376 (glittering / create familiar) +# tile 377 (glittering / create familiar) { ................ ................ @@ -7213,7 +7232,7 @@ Z = (195, 195, 195) .......PPPAN.... .......N........ } -# tile 377 (shining / cancellation) +# tile 378 (shining / cancellation) { ....N........... .......N........ @@ -7232,7 +7251,7 @@ Z = (195, 195, 195) .......PPPAA.... ................ } -# tile 378 (dull / protection) +# tile 379 (dull / protection) { ................ ................ @@ -7251,7 +7270,7 @@ Z = (195, 195, 195) .......JJJAA.... ................ } -# tile 379 (thin / jumping) +# tile 380 (thin / jumping) { ................ ................ @@ -7270,7 +7289,7 @@ Z = (195, 195, 195) .......JJJAA.... ................ } -# tile 380 (thick / stone to flesh) +# tile 381 (thick / stone to flesh) { ................ ................ @@ -7289,7 +7308,7 @@ Z = (195, 195, 195) .......JJJAA.... ................ } -# tile 381 (checkered / chain lightning) +# tile 382 (checkered / chain lightning) { ................ ................ @@ -7308,7 +7327,7 @@ Z = (195, 195, 195) .......AAA...... ................ } -# tile 382 (plain / blank paper) +# tile 383 (plain / blank paper) { ................ ................ @@ -7327,7 +7346,7 @@ Z = (195, 195, 195) .......JJJAA.... ................ } -# tile 383 (paperback / novel) +# tile 384 (paperback / novel) { ................ ................ @@ -7346,7 +7365,7 @@ Z = (195, 195, 195) .......EEEAA.... ................ } -# tile 384 (papyrus / Book of the Dead) +# tile 385 (papyrus / Book of the Dead) { ................ ................ @@ -7365,7 +7384,7 @@ Z = (195, 195, 195) .......AAA...... ................ } -# tile 385 (glass / light) +# tile 386 (glass / light) { ................ ................ @@ -7384,7 +7403,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 386 (balsa / secret door detection) +# tile 387 (balsa / secret door detection) { ................ ................ @@ -7403,7 +7422,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 387 (crystal / enlightenment) +# tile 388 (crystal / enlightenment) { ................ ................ @@ -7422,7 +7441,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 388 (maple / create monster) +# tile 389 (maple / create monster) { ................ ................ @@ -7441,7 +7460,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 389 (pine / wishing) +# tile 390 (pine / wishing) { ................ ................ @@ -7460,7 +7479,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 390 (oak / nothing) +# tile 391 (oak / nothing) { ................ ................ @@ -7479,7 +7498,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 391 (ebony / striking) +# tile 392 (ebony / striking) { ................ ................ @@ -7498,7 +7517,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 392 (marble / make invisible) +# tile 393 (marble / make invisible) { ................ ................ @@ -7517,7 +7536,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 393 (tin / slow monster) +# tile 394 (tin / slow monster) { ................ ................ @@ -7536,7 +7555,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 394 (brass / speed monster) +# tile 395 (brass / speed monster) { ................ ................ @@ -7555,7 +7574,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 395 (copper / undead turning) +# tile 396 (copper / undead turning) { ................ ................ @@ -7574,7 +7593,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 396 (silver / polymorph) +# tile 397 (silver / polymorph) { ................ ................ @@ -7593,7 +7612,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 397 (platinum / cancellation) +# tile 398 (platinum / cancellation) { ................ ................ @@ -7612,7 +7631,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 398 (iridium / teleportation) +# tile 399 (iridium / teleportation) { ................ ................ @@ -7631,7 +7650,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 399 (zinc / opening) +# tile 400 (zinc / opening) { ................ ................ @@ -7650,7 +7669,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 400 (aluminum / locking) +# tile 401 (aluminum / locking) { ................ ................ @@ -7669,7 +7688,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 401 (uranium / probing) +# tile 402 (uranium / probing) { ................ ................ @@ -7688,7 +7707,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 402 (iron / digging) +# tile 403 (iron / digging) { ................ ................ @@ -7707,7 +7726,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 403 (steel / magic missile) +# tile 404 (steel / magic missile) { ................ ................ @@ -7726,7 +7745,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 404 (hexagonal / fire) +# tile 405 (hexagonal / fire) { ................ ................ @@ -7745,7 +7764,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 405 (short / cold) +# tile 406 (short / cold) { ................ ................ @@ -7764,7 +7783,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 406 (runed / sleep) +# tile 407 (runed / sleep) { ................ ................ @@ -7783,7 +7802,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 407 (long / death) +# tile 408 (long / death) { ................ .............NO. @@ -7802,7 +7821,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 408 (curved / lightning) +# tile 409 (curved / lightning) { ................ .......NO....... @@ -7821,7 +7840,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 409 (forked) +# tile 410 (forked) { ................ ................ @@ -7840,7 +7859,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 410 (spiked) +# tile 411 (spiked) { ................ ................ @@ -7859,7 +7878,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 411 (jeweled) +# tile 412 (jeweled) { ................ ................ @@ -7878,7 +7897,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 412 (gold) +# tile 413 (gold) { ................ ................ @@ -7897,7 +7916,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 413 (gilded) +# tile 414 (gilded) { ................ ................ @@ -7916,7 +7935,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 414 (gold piece) +# tile 415 (gold piece) { ................ ................ @@ -7935,7 +7954,7 @@ Z = (195, 195, 195) .........HA..... ...........HA... } -# tile 415 (white / dilithium crystal) +# tile 416 (white / dilithium crystal) { ................ ................ @@ -7954,7 +7973,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 416 (white / diamond) +# tile 417 (white / diamond) { ................ ................ @@ -7973,7 +7992,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 417 (red / ruby) +# tile 418 (red / ruby) { ................ ................ @@ -7992,7 +8011,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 418 (orange / jacinth) +# tile 419 (orange / jacinth) { ................ ................ @@ -8011,7 +8030,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 419 (blue / sapphire) +# tile 420 (blue / sapphire) { ................ ................ @@ -8030,7 +8049,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 420 (black / black opal) +# tile 421 (black / black opal) { ................ ................ @@ -8049,7 +8068,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 421 (green / emerald) +# tile 422 (green / emerald) { ................ ................ @@ -8068,7 +8087,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 422 (green / turquoise) +# tile 423 (green / turquoise) { ................ ................ @@ -8087,7 +8106,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 423 (yellow / citrine) +# tile 424 (yellow / citrine) { ................ ................ @@ -8106,7 +8125,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 424 (green / aquamarine) +# tile 425 (green / aquamarine) { ................ ................ @@ -8125,7 +8144,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 425 (yellowish brown / amber) +# tile 426 (yellowish brown / amber) { ................ ................ @@ -8144,7 +8163,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 426 (yellowish brown / topaz) +# tile 427 (yellowish brown / topaz) { ................ ................ @@ -8163,7 +8182,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 427 (black / jet) +# tile 428 (black / jet) { ................ ................ @@ -8182,7 +8201,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 428 (white / opal) +# tile 429 (white / opal) { ................ ................ @@ -8201,7 +8220,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 429 (yellow / chrysoberyl) +# tile 430 (yellow / chrysoberyl) { ................ ................ @@ -8220,7 +8239,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 430 (red / garnet) +# tile 431 (red / garnet) { ................ ................ @@ -8239,7 +8258,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 431 (violet / amethyst) +# tile 432 (violet / amethyst) { ................ ................ @@ -8258,7 +8277,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 432 (red / jasper) +# tile 433 (red / jasper) { ................ ................ @@ -8277,7 +8296,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 433 (violet / fluorite) +# tile 434 (violet / fluorite) { ................ ................ @@ -8296,7 +8315,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 434 (black / obsidian) +# tile 435 (black / obsidian) { ................ ................ @@ -8315,7 +8334,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 435 (orange / agate) +# tile 436 (orange / agate) { ................ ................ @@ -8334,7 +8353,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 436 (green / jade) +# tile 437 (green / jade) { ................ ................ @@ -8353,7 +8372,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 437 (white / worthless piece of white glass) +# tile 438 (white / worthless piece of white glass) { ................ ................ @@ -8372,7 +8391,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 438 (blue / worthless piece of blue glass) +# tile 439 (blue / worthless piece of blue glass) { ................ ................ @@ -8391,7 +8410,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 439 (red / worthless piece of red glass) +# tile 440 (red / worthless piece of red glass) { ................ ................ @@ -8410,7 +8429,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 440 (yellowish brown / worthless piece of yellowish brown glass) +# tile 441 (yellowish brown / worthless piece of yellowish brown glass) { ................ ................ @@ -8429,7 +8448,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 441 (orange / worthless piece of orange glass) +# tile 442 (orange / worthless piece of orange glass) { ................ ................ @@ -8448,7 +8467,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 442 (yellow / worthless piece of yellow glass) +# tile 443 (yellow / worthless piece of yellow glass) { ................ ................ @@ -8467,7 +8486,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 443 (black / worthless piece of black glass) +# tile 444 (black / worthless piece of black glass) { ................ ................ @@ -8486,7 +8505,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 444 (green / worthless piece of green glass) +# tile 445 (green / worthless piece of green glass) { ................ ................ @@ -8505,7 +8524,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 445 (violet / worthless piece of violet glass) +# tile 446 (violet / worthless piece of violet glass) { ................ ................ @@ -8524,7 +8543,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 446 (gray / luckstone) +# tile 447 (gray / luckstone) { ................ ................ @@ -8543,7 +8562,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 447 (gray / touchstone) +# tile 448 (gray / touchstone) { ................ ................ @@ -8562,7 +8581,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 448 (gray / thiefstone) +# tile 449 (gray / thiefstone) { ................ ................ @@ -8581,7 +8600,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 449 (gray / flint) +# tile 450 (gray / flint) { ................ ................ @@ -8600,7 +8619,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 450 (rock) +# tile 451 (rock) { ................ ................ @@ -8619,7 +8638,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 451 (boulder) +# tile 452 (boulder) { ................ ................ @@ -8638,7 +8657,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 452 (statue) +# tile 453 (statue) { ................ ........JJ...... @@ -8657,7 +8676,7 @@ Z = (195, 195, 195) .....JJJJJJAA... ................ } -# tile 453 (heavy iron ball) +# tile 454 (heavy iron ball) { ................ ................ @@ -8676,7 +8695,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 454 (iron chain) +# tile 455 (iron chain) { ................ ................ @@ -8695,7 +8714,7 @@ Z = (195, 195, 195) ...........PP.PA ............AA.. } -# tile 455 (splash of venom / splash of blinding venom) +# tile 456 (splash of venom / splash of blinding venom) { ................ ................ @@ -8714,7 +8733,7 @@ Z = (195, 195, 195) ................ ................ } -# tile 456 (splash of venom / splash of acid venom) +# tile 457 (splash of venom / splash of acid venom) { ................ ................ From 3956b9f88ee38b438852d4b7bcb0d77fcbcf4f66 Mon Sep 17 00:00:00 2001 From: copperwater Date: Sun, 10 May 2026 18:09:31 -0400 Subject: [PATCH 06/20] Make the Longbow create arrows of light when invoked This is the key buff to the Longbow, making it the primary source of arrows of light. The initial idea was to have it top you up with as many new arrows as the game can allow to exist, but I think it is slightly better balanced and more strategical if it provides 3 instead (allowing people to stockpile if they want, but in order to get the most out of a second invoke, you need to use at least one arrow...) The old create-regular-arrows effect is still present, occurring when no arrows of light can be created. I slightly improved these too, since it was considered a pretty underpowered invoke: now the arrows will match your race if you're an elf or gnome (not that this matters if you plan on using the Longbow to fire them) and have their enchantment set to the Longbow's enchantment, providing an incentive to enchant the Longbow. Arrows of light will /not/ get free enchantment, since they do enough damage already. This also adds a message describing the arrows appearing, since it was kind of weird to invoke the Longbow and get no feedback except the addinv message. Unless the inventory was full, but I also changed the hold_another_object message because the arrows "falling out" of the bow is kind of weird too. --- doc/xnh-changelog-10.0.md | 7 +++++++ src/artifact.c | 36 +++++++++++++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index 80fd6c8cd..9389dc99a 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -44,6 +44,13 @@ changes: that deals exceptionally high damage but disintegrates after hitting something or falling to the floor. Monsters it kills in one shot will leave no corpse, and monsters it fails to kill will be blinded and stunned. +- The Longbow of Orion's invoke effect now creates arrows of light, granting + either 3 of them, or if that would make there be more than 5 arrows of light + in the game, as many as can be created to bring the total to 5. + - If there are already 5 in the game, it creates ordinary arrows enchanted + equal to the Longbow's enchantment. + - These ordinary arrows will be elven arrows if you are an elf and orcish + arrows if you are an orc. ### Interface changes diff --git a/src/artifact.c b/src/artifact.c index 86c088ba3..b1dc8a2b3 100644 --- a/src/artifact.c +++ b/src/artifact.c @@ -2089,7 +2089,15 @@ arti_invoke(struct obj *obj) enlightenment(MAGICENLIGHTENMENT, ENL_GAMEINPROGRESS); break; case CREATE_AMMO: { - struct obj *otmp = mksobj(ARROW, TRUE, FALSE); + struct obj *otmp; + + if (sve.extant_arrows_of_light >= MAX_LIGHT_ARROWS) + otmp = mksobj(Race_if(PM_ELF) ? ELVEN_ARROW + : Race_if(PM_ORC) ? ORCISH_ARROW + : ARROW, + TRUE, FALSE); + else + otmp = mksobj(ARROW_OF_LIGHT, TRUE, FALSE); if (!otmp) { nothing_special(obj); @@ -2098,7 +2106,11 @@ arti_invoke(struct obj *obj) otmp->blessed = obj->blessed; otmp->cursed = obj->cursed; otmp->bknown = obj->bknown; + otmp->known = obj->known; + otmp->rknown = obj->rknown; otmp->oeroded = otmp->oeroded2 = 0; + if (otmp->otyp != ARROW_OF_LIGHT) + otmp->spe = obj->spe; if (obj->blessed) { if (otmp->spe < 0) otmp->spe = 0; @@ -2108,9 +2120,27 @@ arti_invoke(struct obj *obj) otmp->spe = 0; } else otmp->quan += rnd(5); + + if (otmp->otyp == ARROW_OF_LIGHT) { + /* quan rules above are for fallback case of normal arrows, + * arrows of light always give either 3 or whatever number + * ensures the total number in existence don't go beyond + * MAX_LIGHT_ARROWS */ + otmp->quan = min(MAX_LIGHT_ARROWS - sve.extant_arrows_of_light, + 3); + sve.extant_arrows_of_light += otmp->quan; + } otmp->owt = weight(otmp); - otmp = hold_another_object(otmp, "Suddenly %s out.", - aobjnam(otmp, "fall"), (char *) 0); + + pline("In a %s flash, %s%s!", + (Role_if(PM_RANGER) && svq.quest_status.killed_nemesis) + ? "twinkling" : "glimmering", + otmp->quan == 1L ? "an " : "", + aobjnam(otmp, "appear")); + + otmp = hold_another_object(otmp, "But you have to drop %s.", + otmp->quan >= 1L ? "it" : "them", + (char *) 0); nhUse(otmp); break; } From 1fef794d6020978963218c13712b4cdf1df76e2b Mon Sep 17 00:00:00 2001 From: copperwater Date: Sun, 10 May 2026 18:20:55 -0400 Subject: [PATCH 07/20] Replace Orion with Cedalion as the Ranger quest leader This is the first Ranger quest change that's directly about the changed story: Orion's not in the picture because Scorpius slew him. In his place, calling you to the quest, is his lieutenant, servant and guide, Cedalion. He is a lesser known but still well-attested figure in most Orion myths, assigned to guide Orion from atop his shoulder as he wandered after having his eyes put out. I kept most of the statblock unchanged on the basis that it's adjusted for making it tough to kill him to get early entry to the quest, but he is regular human size instead of MZ_HUGE, because he's not a giant like Orion is. I also did not give Cedalion the ability to tear webs that Orion had; the only quest enemies in here seem to be giants, and again Cedalion isn't a giant. --- dat/Ran-strt.lua | 8 ++++---- doc/xnh-changelog-10.0.md | 2 ++ include/monsters.h | 6 +++--- src/mon.c | 2 +- src/role.c | 2 +- src/trap.c | 1 - 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/dat/Ran-strt.lua b/dat/Ran-strt.lua index 1707095c7..70e797f0e 100644 --- a/dat/Ran-strt.lua +++ b/dat/Ran-strt.lua @@ -6,7 +6,7 @@ -- -- The "start" level for the quest. -- --- Here you meet your (besieged) class leader, Orion, +-- Here you meet your (besieged) class leader, Cedalion, -- and receive your quest assignment. -- des.level_init({ style = "solidfill", fg = "." }); @@ -71,14 +71,14 @@ for i=1,d(4,3) do end des.replace_terrain({ selection=grass, fromterrain='.', toterrain='g' }) --- Orion and his faithful dog -des.monster({ id = "Orion", coord = {20, 10}, inventory = function() +-- Cedalion and his faithful dog +des.monster({ id = "Cedalion", coord = {20, 10}, inventory = function() des.object({ id = "light armor", spe = 4 }); des.object({ id = "yumi", spe = 4 }); des.object({ id = "ya", spe = 4, quantity = 50 }); end }) des.monster({ id = "large dog", x=20, y=11, name="Sirius", peaceful=1 }) --- The treasure of Orion +-- The treasure of Cedalion des.object({ id = "chest", trapped = 0, x=20, y=10, contents = function() des.object({ id = "bow", buc = "blessed" }) diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index 9389dc99a..3477d4974 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -51,6 +51,8 @@ changes: equal to the Longbow's enchantment. - These ordinary arrows will be elven arrows if you are an elf and orcish arrows if you are an orc. +- Orion is replaced as the Ranger quest leader with Cedalion, his lieutenant + and guide. ### Interface changes diff --git a/include/monsters.h b/include/monsters.h index 6a68b97c0..89bfc8a22 100644 --- a/include/monsters.h +++ b/include/monsters.h @@ -3606,15 +3606,15 @@ M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, 30, CLR_WHITE, ARCH_PRIEST), - MON(NAM("Orion"), S_HUMAN, LVL(20, 15, 0, 90, 0), (G_NOGEN | G_UNIQ), + MON(NAM("Cedalion"), S_HUMAN, LVL(20, 15, 0, 90, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_MAGC, AD_SPEL, 4, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2200, 700, MS_LEADER, MZ_HUGE), 0, 0, + SIZ(2200, 700, MS_LEADER, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS | M1_SWIM | M1_AMPHIBIOUS, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISION | M3_INFRAVISIBLE, - 24, HI_LORD, ORION), + 24, HI_LORD, CEDALION), /* Note: Master of Thieves is also the Tourist's nemesis. */ MON(NAM("Master of Thieves"), S_HUMAN, diff --git a/src/mon.c b/src/mon.c index ced7d7785..0f9eca862 100644 --- a/src/mon.c +++ b/src/mon.c @@ -937,7 +937,7 @@ make_corpse(struct monst *mtmp, unsigned int corpseflags) case PM_LORD_CARNARVON: case PM_PELIAS: case PM_SHAMAN_KARNOV: case PM_HIPPOCRATES: case PM_KING_ARTHUR: case PM_CHAN_SUNE_LAMA: - case PM_ARCH_PRIEST: case PM_ORION: case PM_MASTER_OF_THIEVES: + case PM_ARCH_PRIEST: case PM_CEDALION: case PM_MASTER_OF_THIEVES: case PM_LORD_SATO: case PM_TWOFLOWER: case PM_NORN: case PM_NEFERET_THE_GREEN: case PM_SCHLIEMANN: case PM_THOTH_AMON: case PM_TIAMAT: case PM_CYCLOPS: diff --git a/src/role.c b/src/role.c index d2b46d5e4..57405d6c0 100644 --- a/src/role.c +++ b/src/role.c @@ -316,7 +316,7 @@ const struct Role roles[NUM_ROLES+1] = { "the cave of the wumpus", PM_RANGER, PM_LITTLE_DOG /* Orion & canis major */, - PM_ORION, + PM_CEDALION, PM_HUNTER, PM_SCORPIUS, PM_FOREST_CENTAUR, diff --git a/src/trap.c b/src/trap.c index e004443eb..b5833a4d6 100644 --- a/src/trap.c +++ b/src/trap.c @@ -2313,7 +2313,6 @@ trapeffect_web( case PM_BALROG: case PM_KRAKEN: case PM_MASTODON: - case PM_ORION: case PM_NORN: case PM_CYCLOPS: case PM_LORD_SURTUR: From 1dd3971058b6fefb542f825c7169ba0ffcf318ec Mon Sep 17 00:00:00 2001 From: copperwater Date: Sun, 10 May 2026 19:27:58 -0400 Subject: [PATCH 08/20] Longbow of Orion sets a minimum multishot Final Longbow buff: make it much better for multishot and therefore combat in general. Late-game it's very annoying to be facing a crowd of foes and randomly only fire 1 arrow at them; the swinginess of this approach makes it harder to justify using a ranged weapon instead of melee. Note that it doesn't enable you to multishoot better than you could otherwise. This minimum takes into account what you would naturally get as your highest possible multishot, and lowers the floor to that accordingly. --- doc/xnh-changelog-10.0.md | 4 ++++ src/dothrow.c | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index 3477d4974..cf8dd18fe 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -53,6 +53,10 @@ changes: arrows if you are an orc. - Orion is replaced as the Ranger quest leader with Cedalion, his lieutenant and guide. +- Wielding the Longbow of Orion puts a floor on the amount of multishot you get + from arrows fired from it. This floor is 1 (no multishot) if you wouldn't be + able to multishoot with it, or 2 if you can only shoot a maximum of 2 arrows, + but otherwise it's 3. ### Interface changes diff --git a/src/dothrow.c b/src/dothrow.c index a98d6ca16..0e08a215f 100644 --- a/src/dothrow.c +++ b/src/dothrow.c @@ -197,6 +197,7 @@ throw_obj(struct obj *obj, int shotlimit) /* otherwise any stackable (non-ammo) weapon */ : obj->oclass == WEAPON_CLASS) && !(Confusion || Stunned)) { + int multishot_floor = 1; /* some roles don't get a volley bonus until becoming expert */ weakmultishot = (Role_if(PM_WIZARD) || Role_if(PM_CLERIC) || (Role_if(PM_HEALER) && skill != P_KNIFE) @@ -249,8 +250,10 @@ throw_obj(struct obj *obj, int shotlimit) elven and orcish rangers loss of bonus for use of racial bow plus racial arrows if they switch to the Longbow of Diana) */ if (uwep && is_quest_artifact(uwep) - && ammo_and_launcher(obj, uwep)) + && ammo_and_launcher(obj, uwep)) { ++multishot; + multishot_floor = min(multishot, 3); + } } /* crossbows are slow to load and probably shouldn't allow multiple @@ -262,6 +265,7 @@ throw_obj(struct obj *obj, int shotlimit) multishot = rnd(multishot); multishot = rnd(multishot); + multishot = max(multishot_floor, multishot); if ((long) multishot > obj->quan) multishot = (int) obj->quan; if (shotlimit > 0 && multishot > shotlimit) From 922287075d5a4b4cb85c0d714592a1786e6ab098 Mon Sep 17 00:00:00 2001 From: copperwater Date: Sun, 10 May 2026 19:38:44 -0400 Subject: [PATCH 09/20] Tweak the Ranger quest start level This is not a significant overhaul since this level was already heavily modified from the infamous 1-wide labyrinth in xNetHack 3.0. Mostly I just moved the downstair to the middle of the top/bottom edge, removed Sirius (due to quest story changes and Orion no longer being the leader), and changed up the centaur generation a bit. I also took advantage of the recent feature to block monster spawning in certain areas and made the central grove a no-spawning area. One of the friendly hunters was generating on top of iron bars for some reason; this appeared to be a coordinate error in a previous xNetHack change to the level, so I adjusted that. --- dat/Ran-strt.lua | 70 +++++++++++++++++++-------------------- doc/xnh-changelog-10.0.md | 3 ++ 2 files changed, 37 insertions(+), 36 deletions(-) diff --git a/dat/Ran-strt.lua b/dat/Ran-strt.lua index 70e797f0e..c73b3b0c8 100644 --- a/dat/Ran-strt.lua +++ b/dat/Ran-strt.lua @@ -44,12 +44,14 @@ des.replace_terrain({ region = {48,00,52,20}, fromterrain=".", toterrain="T", ch des.replace_terrain({ region = {53,00,77,20}, fromterrain=".", toterrain="T", chance=4 }) -- Stairs -local rightedge = selection.line(77,00, 77,21) -local dnstair = rightedge:rndcoord() -des.stair("down", dnstair) +des.stair("down", 46,20) --- Guarantee a treeless path from the stair to the forest entry -des.terrain({ selection = selection.randline(77, dnstair.y, 43,09, 6), typ=".", lit=1 }) +-- Guarantee treeless path from the stair to the forest entry, but using (58,13) +-- as a "junction" so it doesn't carve into the hardcoded tree area +des.replace_terrain({ selection = selection.randline(44,09, 58,13, 6), + fromterrain='T', toterrain="." }) +des.replace_terrain({ selection = selection.randline(58,13, 46,20, 6), + fromterrain='T', toterrain="." }) -- Portal arrival point; just about anywhere on the right hand side of the map des.levregion({ region = {51,2,77,18}, exclude = {0,0,40,20}, region_islev = 1, type="branch" }) @@ -57,7 +59,18 @@ des.levregion({ region = {51,2,77,18}, exclude = {0,0,40,20}, region_islev = 1, -- Altar (entry text says there's one here) des.altar({ x=11, y=10, align="coaligned", type="altar" }) --- -- Random grass patches +-- Prevent monster generation within the sacred grove +des.exclusion({ type = "monster-generation", region = { 10,09, 39,11 } }) + +-- Define valid spawning area for monsters +-- (note the above exclusion won't prevent lua-file random placement from +-- putting them in the grove, so we have to do it manually) +-- This intentionally comes before grass is placed so we can filter_mapchar('.') +-- and not exclude grass patches +local spawnable = selection.area(00,00,77,21) - selection.area(10,09,39,11) +spawnable = spawnable:filter_mapchar('.') + +-- Random grass patches local grass = selection.new() local everything = selection.area(00, 00, 77, 21) for i=1,d(4,3) do @@ -71,13 +84,12 @@ for i=1,d(4,3) do end des.replace_terrain({ selection=grass, fromterrain='.', toterrain='g' }) --- Cedalion and his faithful dog +-- Cedalion des.monster({ id = "Cedalion", coord = {20, 10}, inventory = function() des.object({ id = "light armor", spe = 4 }); des.object({ id = "yumi", spe = 4 }); des.object({ id = "ya", spe = 4, quantity = 50 }); end }) -des.monster({ id = "large dog", x=20, y=11, name="Sirius", peaceful=1 }) -- The treasure of Cedalion des.object({ id = "chest", trapped = 0, x=20, y=10, contents = function() @@ -99,7 +111,7 @@ des.monster("hunter", 21, 09) des.monster("hunter", 19, 10) des.monster("hunter", 21, 10) des.monster("hunter", 19, 11) -des.monster("hunter", 20, 12) +des.monster("hunter", 20, 11) des.monster("hunter", 21, 11) -- Non diggable trees @@ -117,30 +129,16 @@ for i=1,2 + d(3) do des.object() end --- Monsters on siege duty. -des.monster({ id = "forest centaur", x=19, y=03, peaceful = 0 }) -des.monster({ id = "forest centaur", x=19, y=04, peaceful = 0 }) -des.monster({ id = "forest centaur", x=19, y=05, peaceful = 0 }) -des.monster({ id = "forest centaur", x=21, y=03, peaceful = 0 }) -des.monster({ id = "forest centaur", x=21, y=04, peaceful = 0 }) -des.monster({ id = "forest centaur", x=21, y=05, peaceful = 0 }) -des.monster({ id = "forest centaur", x=01, y=09, peaceful = 0 }) -des.monster({ id = "forest centaur", x=02, y=09, peaceful = 0 }) -des.monster({ id = "forest centaur", x=03, y=09, peaceful = 0 }) -des.monster({ id = "forest centaur", x=01, y=11, peaceful = 0 }) -des.monster({ id = "forest centaur", x=02, y=11, peaceful = 0 }) -des.monster({ id = "forest centaur", x=03, y=11, peaceful = 0 }) -des.monster({ id = "forest centaur", x=19, y=15, peaceful = 0 }) -des.monster({ id = "forest centaur", x=19, y=16, peaceful = 0 }) -des.monster({ id = "forest centaur", x=19, y=17, peaceful = 0 }) -des.monster({ id = "forest centaur", x=21, y=15, peaceful = 0 }) -des.monster({ id = "forest centaur", x=21, y=16, peaceful = 0 }) -des.monster({ id = "forest centaur", x=21, y=17, peaceful = 0 }) -des.monster({ id = "plains centaur", peaceful=0 }) -des.monster({ id = "plains centaur", peaceful=0 }) -des.monster({ id = "plains centaur", peaceful=0 }) -des.monster({ id = "plains centaur", peaceful=0 }) -des.monster({ id = "plains centaur", peaceful=0 }) -des.monster({ id = "plains centaur", peaceful=0 }) -des.monster({ id = "scorpion", peaceful=0 }) -des.monster({ id = "scorpion", peaceful=0 }) +-- Monsters attacking the grove +for i = 1, 12 do + des.monster({ id = "forest centaur", peaceful = 0, coord=spawnable:rndcoord(1) }) +end +for i = 1, 6 do + des.monster({ id = "plains centaur", peaceful=0, coord=spawnable:rndcoord(1) }) +end +for i = 1, 3 do + des.monster({ class = "C", peaceful=0, coord=spawnable:rndcoord(1) }) + des.monster({ id = "mountain centaur", peaceful=0, coord=spawnable:rndcoord(1) }) +end +des.monster({ id = "scorpion", peaceful=0, coord=spawnable:rndcoord(1) }) +des.monster({ id = "scorpion", peaceful=0, coord=spawnable:rndcoord(1) }) diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index cf8dd18fe..af13a5973 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -57,6 +57,9 @@ changes: from arrows fired from it. This floor is 1 (no multishot) if you wouldn't be able to multishoot with it, or 2 if you can only shoot a maximum of 2 arrows, but otherwise it's 3. +- The Ranger quest has received an overhaul: + - The home level is lightly redesigned (from when it was redone in xNetHack + 3.0); monsters will no longer spawn in the sacred grove. ### Interface changes From 186ec796470188cb5720c6f989f96c5cf3feef98 Mon Sep 17 00:00:00 2001 From: copperwater Date: Mon, 11 May 2026 16:34:48 -0400 Subject: [PATCH 10/20] fixup for giant scorpion (tile is now changed) --- win/share/monsters.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/win/share/monsters.txt b/win/share/monsters.txt index 07f12034f..9a506e952 100644 --- a/win/share/monsters.txt +++ b/win/share/monsters.txt @@ -3840,9 +3840,9 @@ Z = (195, 195, 195) ......KJJKCAJJA. ....JJACKJJJAA.. ..JJCKJKAJJAA... - ..HHJJJJAAAJJJA. - ..LLLHJAAJJAAAJ. - ..DJLHJAJAAJJAJ. + ..HKKJJJAAAJJJA. + ..HKKKJAAJJAAAJ. + ..DKHHJAJAAJJAJ. .DAAJJJAAJA.JAAJ .A.DAAAJAAJA.J.. ...A....J..JA... @@ -3859,9 +3859,9 @@ Z = (195, 195, 195) ......KJJKCAJJA. ....JJACKJJJAA.. ..JJCKJKAJJAA... - ..HHJJJJAAAJJJA. - ..LLLHJAAJJAAAJ. - ..DJLHJAJAAJJAJ. + ..HKKJJJAAAJJJA. + ..HKKKJAAJJAAAJ. + ..DKHHJAJAAJJAJ. .DAAJJJAAJA.JAAJ .A.DAAAJAAJA.J.. ...A....J..JA... From 438a62679aa91397e57c9f7fca2b3a7c45280023 Mon Sep 17 00:00:00 2001 From: copperwater Date: Mon, 11 May 2026 16:35:05 -0400 Subject: [PATCH 11/20] fixup for Orion -> Cedalion change --- win/share/monsters.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win/share/monsters.txt b/win/share/monsters.txt index 9a506e952..4d5967ed6 100644 --- a/win/share/monsters.txt +++ b/win/share/monsters.txt @@ -13968,7 +13968,7 @@ Z = (195, 195, 195) ..HACCCJJCCCAA.. ................ } -# tile 728 (Orion,male) +# tile 728 (Cedalion,male) { ................ ................ @@ -13987,7 +13987,7 @@ Z = (195, 195, 195) ......BPAPAA.A.. .....PPA.PPA.... } -# tile 729 (Orion,female) +# tile 729 (Cedalion,female) { ................ ................ From 97d4c32fdacaf3a3359804596889ecd160caec3e Mon Sep 17 00:00:00 2001 From: copperwater Date: Mon, 11 May 2026 21:33:44 -0400 Subject: [PATCH 12/20] Add make_spanning_tree function in nhlib.lua Because I can't help but come up with entirely new algorithms when implementing the most basic filler levels, I found myself making a Ranger upper filler level that involved Yet Another Spanning Tree Algorithm. Since I keep coming up with ideas that involve spanning trees, I decided to just bite the bullet and make a general-purpose algorithm and put it in nhlib.lua. This algorithm is basically a generalization of the one that was in the wizard1 level, and this commit replaces the wizard1 code with a call to make_spanning_tree as a proof of concept. There are other places like the Super Honeycomb themed room (but NOT wizard2) that could be refactored to use this function, but aren't done in this commit. --- dat/nhlib.lua | 42 +++++++++++++++++++++++++++++++++++++++ dat/wizard1.lua | 31 ++++++----------------------- doc/xnh-changelog-10.0.md | 2 ++ 3 files changed, 50 insertions(+), 25 deletions(-) diff --git a/dat/nhlib.lua b/dat/nhlib.lua index 1f8864822..6dea6a38e 100644 --- a/dat/nhlib.lua +++ b/dat/nhlib.lua @@ -181,3 +181,45 @@ function tutorial_turn() end -- nh.pline("TUT:turn"); end + +-- xnethack: generic spanning tree algorithm for special levels (specifically +-- randomized, unweighted Kruskal's algorithm) +-- argument 1, "edges": Table of tables describing node edges. +-- Conventionally, edges[*][1] should be the lower of the two node numbers it +-- connects and edges[*][2] should be the higher of the two, but this isn't +-- actually required. The table can optionally carry more information in +-- higher indices; this function won't look at them. +-- argument 2, "numnodes": Number of nodes in the graph. +-- argument 3, "startnode": Starting node id; if nil, one will be picked +-- randomly. +-- argument 4, "callback": Function that is responsible for doing whatever the +-- caller wants it to do to establish the connection, such as by actually +-- changing terrain to make the edge real on the map. It will be called with +-- a edges[*] sub-table. +function make_spanning_tree(edges, numnodes, startnode, callback) + -- Construct hash table storing which nodes have been reached already. + local reached = {} + for i = 1,numnodes do + reached[i] = false + end + if startnode == nil then + startnode = d(numnodes) + end + reached[startnode] = true + local num_reached = 1 + while num_reached < numnodes do + -- Select random edges until we find one that would connect a new node. + local pick = nil + repeat + pick = d(#edges) + until reached[edges[pick][1]] ~= reached[edges[pick][2]] + + -- Invoke callback will do to physically add the edge. + callback(edges[pick]) + + -- both rooms are now reachable (one already was) + reached[edges[pick][1]] = true + reached[edges[pick][2]] = true + num_reached = num_reached + 1 + end +end diff --git a/dat/wizard1.lua b/dat/wizard1.lua index e4ce1b214..c971c52ce 100644 --- a/dat/wizard1.lua +++ b/dat/wizard1.lua @@ -108,31 +108,12 @@ local conns = { } local TOTAL_ROOMS = 24 -- still not counting Wizard's -local reached = { } -for i = 1,TOTAL_ROOMS do - reached[i] = false -end - --- pick 1 initial room to build spanning tree from -local initroom = d(TOTAL_ROOMS) -reached[initroom] = true -local nreached = 1 -while nreached < TOTAL_ROOMS do - local pick = d(#conns) - while reached[conns[pick][1]] == reached[conns[pick][2]] do - pick = d(#conns) - end - - -- take a random point from the line and make it a secret door - local cc = selection.line(conns[pick][3],conns[pick][4], - conns[pick][5],conns[pick][6]):rndcoord() - des.door({ state='secret', coord=cc }) - - -- update reached; both rooms are now reachable (one already was) - reached[conns[pick][1]] = true - reached[conns[pick][2]] = true - nreached = nreached + 1 -end +make_spanning_tree(conns, TOTAL_ROOMS, nil, function(edge) + -- take a random point from the line stored in edge[3..6] and make it a + -- secret door + local cc = selection.line(edge[3],edge[4], edge[5],edge[6]):rndcoord() + des.door({ state='closed', coord=cc }) +end) -- Now connect the Wizard's chamber. -- Note that these doors are placed such that the player cannot hit the Wizard diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index af13a5973..426ce3351 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -69,3 +69,5 @@ changes: ### Architectural changes +- Add a make_spanning_tree function in the Lua nhlib file, which constructs a + general spanning tree from a given unweighted graph. From 64bfe3b5677fa9fb6d4f6618ce3eaa9d3bae0311 Mon Sep 17 00:00:00 2001 From: copperwater Date: Wed, 13 May 2026 07:29:16 -0400 Subject: [PATCH 13/20] Overhaul Ranger upper filler level The level I replaced in this commit got points for at least being distinctive for a cavern fill, due to the walls being trees, but once you got past that it was still just a boring cavern. As with most quest fillers, this level had randomized stairs implying a downward traverse (especially out of place in this quest; you're descending from the sky?) so this fixes one stairway at the middle top of the map and the other stairway inside one of two caverns. The idea there is that it's not clear which of the two is the actual Cave of the Wumpus. I threw out the cavern fill and replaced it with an algorithm that makes a spanning tree between various "junction" waypoints on the map, conveying a better sense of following trails through the forest. Hopefully this creates a better "exploration" gameplay sense. A fair bit of code is dedicated to avoiding both inaccessible holes in the forest and diagonal gaps that would require squeezing or cutting a tree down. I added in 1 waiting giant scorpion to the monster loadout on this level to make it a possibility but not a guarantee that the player will see one before the lower filler level. --- dat/Ran-fila.lua | 294 ++++++++++++++++++++++++++++++++++---- doc/xnh-changelog-10.0.md | 3 + 2 files changed, 270 insertions(+), 27 deletions(-) diff --git a/dat/Ran-fila.lua b/dat/Ran-fila.lua index caeae5d9b..73ecfff02 100644 --- a/dat/Ran-fila.lua +++ b/dat/Ran-fila.lua @@ -3,33 +3,273 @@ -- Copyright (c) 1991 by M. Stephenson -- NetHack may be freely redistributed. See license for details. -- -des.level_init({ style = "solidfill", fg = " " }); +des.level_init({ style = "solidfill", fg = " ", lit = 1 }); -des.level_flags("mazelevel", "outdoors", "noflip"); +des.level_flags("mazelevel", "hardfloor", "outdoors", "noflipy"); -des.level_init({ style="mines", fg=".", bg="T", smoothed=true, joined=true, walled=true }) +-- boundary syms (B) indicate "trail junctions", which will be connected by +-- tree-less paths; other blobs of them are places that we deliberately want to +-- avoid generating trees on. +-- The map extends the full available height (i.e. no layer of stone at any +-- point) in order to prevent the randline paths from wandering outside the +-- intended area. +des.map([[ +TTTTTTTTTBTTTTTTTTTTTTTTTTTTTTTTTTBBBBBBBBTTTTTTTTTTTTTTTTTTTBTTTTTTTTTTTTT +T.........................................................................T +T..................B......................................................T +T.........................................................................T +T.................................B..........B.......................B....T +B.........................................................................T +T.........................................................................T +T.......................B..........................B......................T +T.........................................................................T +T...............................................................B.........T +T...........B.............................................................T +T.........................................................................B +T.......................................B.................................T +T...................................................................------- +T...BBB.......................................................BBB---- +----BBB..........B............................................BBB| #### + -B--.......................................................--B- ### # + # ---.......................B..................B..........| #### ## + #### |.....................................................| # + # -----.................................................---- ## +## |TBTTTTTTTTTTTTTTTTTTTTTTTTTTBTTTTTTTTTTTTTTTTTTTBBBB| # +]]); --- -des.stair("up") -des.stair("down") --- -des.object() -des.object() -des.object() -des.object() -des.object() -des.object() -des.object() --- -des.trap() -des.trap() -des.trap() -des.trap() --- -des.monster({ id = "mountain centaur", peaceful=0 }) -des.monster({ id = "mountain centaur", peaceful=0 }) -des.monster({ id = "forest centaur", peaceful=0 }) -des.monster({ id = "forest centaur", peaceful=0 }) -des.monster({ id = "forest centaur", peaceful=0 }) -des.monster({ class = "C", peaceful=0 }) -des.monster({ id = "scorpion", peaceful=0 }) +-- In graph form, from which a spanning tree will be taken: +-- 1 2 .....3.. +-- ............. ...... . ... ..... .. .... +-- .. . 4 ........ .. ... ..... ... . . +-- ... . . ... 5 6 .. . 7 +-- 8 . .. . ......... . . ..... .. . . .... +-- ...... . . 9 . . 10 . .. . +-- . ....... . . . . . ... ...........11 . +-- . 12 . . . . ... . . ........ . +-- . . . . . . ... . . 13 +-- . ... . . . 14 . . ..... +-- . . . . . . ... . ...... +-- 15 .......... . . . . ... . 16 +-- (goal 1) 17 . . . ... . ....(goal 2) +-- . .............. ... . . ..... . +-- . 18 . 19 . +-- . ....... ... . ..... .... . +-- ......... .... .... ..... +-- 20 21 22 + +-- Upstair back to the home level is near the middle of the top edge. +local ustairx = 34 + nh.rn2(8) +des.stair("up", ustairx, 00) + +-- Downstair is in one of the random caves. +if percent(50) then + des.stair("down", 00,20) +else + des.stair("down", 74,20) +end + +-- Forest the level. +des.replace_terrain({ region={00,00,74,20}, fromterrain='.', toterrain='T', chance=85 }) + +junctions = { + { x=09, y=00 }, + { x=ustairx, y=00 }, + { x=61, y=00, }, + { x=19, y=02, }, + { x=34, y=04, }, + { x=45, y=04, }, + { x=69, y=04, }, + { x=00, y=05, }, + { x=24, y=08, }, + { x=51, y=08, }, + { x=64, y=09, }, + { x=12, y=10, }, + { x=74, y=11, }, + { x=40, y=12, }, + { x=06, y=14, }, + { x=62, y=14, }, + { x=17, y=15, }, + { x=27, y=17, }, + { x=51, y=17, }, + { x=14, y=20, }, + { x=41, y=20, }, + { x=61, y=20, } +} +local NUM_JUNCTIONS = 22 + +local all_edges = { + { 1, 4}, + { 1, 8}, + { 1, 12}, + { 2, 5}, + { 2, 6}, + { 3, 6}, + { 3, 7}, + { 3, 10}, + { 3, 11}, + { 4, 5}, + { 4, 9}, + { 4, 12}, + { 5, 6}, + { 5, 9}, + { 5, 14}, + { 6, 10}, + { 6, 14}, + { 7, 11}, + { 7, 13}, + { 8, 12}, + { 8, 15}, + { 9, 12}, + { 9, 14}, + { 9, 17}, + { 9, 18}, + {10, 11}, + {10, 14}, + {11, 13}, + {11, 16}, + {12, 15}, + {12, 17}, + {13, 16}, + {14, 18}, + {14, 19}, + {14, 21}, + {15, 17}, + {16, 19}, + {16, 22}, + {17, 18}, + {17, 20}, + {18, 20}, + {18, 21}, + {19, 21}, + {19, 22}, + -- 20 thru 22 don't have any higher-numbered nodes to connect to +} + +-- Given an edge, carve a trail between its two endpoints. +function cut_trail(edge) + local x1 = junctions[edge[1]].x + local y1 = junctions[edge[1]].y + local x2 = junctions[edge[2]].x + local y2 = junctions[edge[2]].y + local sel = nil + ---- Avoid randlines walking outside the map (into what is valid terrain, but + ---- still stone). + --repeat + -- sel = selection.randline(x1,y1, x2, y2, 5) + des.terrain({ selection=selection.randline(x1,y1, x2, y2, 3), typ='.' }) +end + +-- Connect up all the junctions. +make_spanning_tree(all_edges, NUM_JUNCTIONS, 2, cut_trail) + +-- Add a few extra paths. +-- It's fine if this picks a path that was already cut; such doubled trails +-- happen in real life sometimes. +for i = 1,5 do + local edge = all_edges[d(#all_edges)] + cut_trail(edge) +end + +-- Correct for potential diagonal gaps left by randline (or holes from +-- replace_terrain next to the lines) that the hero would have to squeeze +-- through. While this level is diggable, Rangers get a penalty for chopping +-- down trees and it wouldn't be nice to make them do that. +-- (Need to do both directions with the 'x' characters because selection.match +-- requires odd-sized mapfrag and doing it in only one direction could result in +-- failure to match on the edge of the map.) +-- The repeat block is necessary because it's possible that turning a tree into +-- a ROOM space creates a new diagonal gap. +local totpoints = 0 +repeat + totpoints = 0 + local cut1 = selection.match([[ +T.x +.Tx +xxx]]) + cut1:iterate(function(x, y) + totpoints = totpoints + 1 + if percent(50) then + x = x - 1 + y = y - 1 + end + des.terrain(x, y, '.') + end) + + local cut2 = selection.match([[ +xxx +xT. +x.T]]) + cut2:iterate(function(x, y) + totpoints = totpoints + 1 + if percent(50) then + x = x + 1 + y = y + 1 + end + des.terrain(x, y, '.') + end) + + local cut3 = selection.match([[ +.Tx +T.x +xxx]]) + cut3:iterate(function(x, y) + totpoints = totpoints + 1 + if percent(50) then + x = x - 1 + else + y = y - 1 + end + des.terrain(x, y, '.') + end) + + local cut4 = selection.match([[ +xxx +x.T +xT.]]) + cut4:iterate(function(x, y) + totpoints = totpoints + 1 + if percent(50) then + x = x + 1 + else + y = y + 1 + end + des.terrain(x, y, '.') + end) +until totpoints == 0 + +-- the replace_terrain could have left inaccessible holes in the middle of tree +-- clusters; rather than setting the inaccessibles flags on this level (which +-- would provide a wealth of escape items), remove any such holes. +-- 1. convert boundary syms into floor (basically running remove_boundary_syms +-- before level has finished loading) so that floodfill won't stop on them +des.replace_terrain({ region={00,00,74,20}, fromterrain='B', toterrain='.' }) +-- 2. obtain selection of all floor +local everything = selection.area(00,00,74,20) +local floor = everything:filter_mapchar('.') +-- 3. flood fill from area immediately surrounding the stairs +local nearstairs = selection.area(33,00,42,01):filter_mapchar('.') +local reachfromstairs = selection.new() +nearstairs:iterate(function(x, y) + if reachfromstairs:get(x, y) == 0 then + reachfromstairs = reachfromstairs + selection.floodfill(x, y) + end +end) + +des.terrain(floor - reachfromstairs, 'T') + +-- Traps, objects and monsters. +for i = 1,9 do + des.object() +end + +for i = 1,6 do + des.trap() +end + +for i = 1,2 do + des.monster({ id = "mountain centaur", peaceful=0 }) + des.monster({ id = "forest centaur", peaceful=0 }) + des.monster({ class = "C", peaceful=0 }) + des.monster({ id = "scorpion", peaceful=0 }) +end +des.monster({ id = "giant scorpion", peaceful=0, waiting=1 }) diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index 426ce3351..656cc888f 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -60,6 +60,9 @@ changes: - The Ranger quest has received an overhaul: - The home level is lightly redesigned (from when it was redone in xNetHack 3.0); monsters will no longer spawn in the sacred grove. + - The upper filler level is no longer a cavern fill with trees as the + background but is still somewhat similar, consisting of randomized trails + through a forest leading into one of two caves. ### Interface changes From 7cb844a359dc0c1ee6332d0dc2879ff1b010539e Mon Sep 17 00:00:00 2001 From: copperwater Date: Sun, 17 May 2026 12:20:01 -0400 Subject: [PATCH 14/20] Rewrite Ranger quest text The Ranger quest story isn't among the most poorly differentiated of them - the ongoing conflict with the centaurs is all right as a reason for the start level being beseiged - but it did suffer from some things that made it bland and some things that didn't make sense. (Scorpius is the mortal enemy of Orion - so why is he sending YOU to kill him while he sits around in the grove? And why would he ally with centaurs? And why is he building a palace with a throne he shouldn't physically be able to occupy anyway?) The most significant change to the story that drives all the other changes is that Scorpius has already killed Orion, and Cedalion is leading the remaining hunters in his stead. Many of these other changes make the story draw on the mythology of Orion, such as Scorpius being sent by Gaia after he intended to kill all the beasts on the earth, and both of them being placed in the sky as constellations afterwards. During writing the story I decided that the bow cannot create arrows of light until you successfully kill Scorpius, because the arrows of light derive directly from Orion's blessing from the stars. (How it still does this for non-Rangers who wish for the bow is another matter I don't have the answer to.) Another experimental change in the story is to make Scorpius entirely mute, because again, scorpion. I always felt like his dialogue was a little odd, even if imagining him as a talking animal. So this is an attempt to see if it'll work with mere descriptive messages instead of dialogue, within the constraints of the existing system for delivering those messages - for instance, you still get a big multiline text window when you first face him, but it's entirely description and threatening behavior. The centaur conflict is kept, because I liked the thematic parallels and gameplay of fighting a lot of enemies who use ranged weapons themselves and try to keep their distance. I also didn't really change anything with the Cave of the Wumpus, other than to make references to how the Wumpus can deliver instant death (it can't yet but will soon). This level is a wholesale reference to Hunt the Wumpus, including in its quest text, and I think it works fine as the Ranger locate level. Due to the nature of quest overhauls, some parts of the changed text reflect things that are not part of the previous commits and don't exist yet. --- dat/quest.lua | 279 +++++++++++++++++++++++++------------- doc/xnh-changelog-10.0.md | 3 + 2 files changed, 185 insertions(+), 97 deletions(-) diff --git a/dat/quest.lua b/dat/quest.lua index 41784870e..a9056329e 100644 --- a/dat/quest.lua +++ b/dat/quest.lua @@ -2173,30 +2173,46 @@ to run out.]], }, }, Ran = { + arti_but_not_neme = { + -- Ran should not actually see this text because the code is supposed + -- to skip over that call site (otherwise you would never get leader's + -- encouragement) + text = "error: arti_but_not_neme should not be shown" + }, assignquest = { - synopsis = "[%nC has stolen %o. Infiltrate %i and retrieve %oh for us.]", + synopsis = "[%nC has slain Orion. Take his bow and avenge his death.]", output = "text", - text = [["You are indeed ready, %p. I shall tell you what has transpired, -and why we so desperately need your help: + text = [[ +"You are indeed ready, %p. Hear now the tale of our destruction: -"A short time ago, the mountain centaurs to the east invaded -and enslaved the plains centaurs in this area. The local -leader is now only a figurehead, and serves %n. +"Our lord Orion is dead. -"During our last gathering of worship here, we were beset by hordes of -hostile centaurs, as you witnessed. In the first onslaught a group, -headed by %n %niself, managed to breach the grove and steal -%o. +"He and I, along with a contingent of %gp, were negotiating a peace +treaty with the centaurs of the eastern lands. It went well at first, +but their chieftain was prideful and goaded Orion with subtle insults. +Orion slew him and several of his lieutenants in wrath, and shouted to +the fleeing centaurs that he would not stop killing until every beast on +earth lay dead at his feet. -"Since then, we have been besieged. We do not know how much longer -we will be able to maintain our magical barriers. +"The centaurs must have laid this boast before their patron goddess, +Gaia, for when they regrouped and counterattacked in force, the earth +broke open and crawling things emerged to come to their aid. The +greatest and most terrible among these was %n. -"If we are to survive, you, %p, must infiltrate -%i. There, you will find a pathway down, to the -underground cavern of %n. He has always coveted -%o, and will surely keep it. +"Orion must have known that %nS coming was the hour of his doom. +He entrusted me with his great bow and commanded the rest of us to +retreat to this grove, though I hid on a nearby hill and watched +helplessly as %n overwhelmed Orion with %j deadly poison. -"Recover %o for us, %p! Only then will %d be safe."]], +"The centaurs continue to press the attack, and these surviving hunters +are far too green to break through their siege, let alone face %n. +But you could. You are our best hope for avenging Orion. + +"As it was given to me, I will entrust you with %o. +With it, you shall never want for ammunition, which should serve you +well in the deadly %i. + +"Prevail against %n, %p! Avenge the loss of our great lord!"]], }, badalign = { synopsis = "[You are not sufficiently %a. Come back when you have purified yourself.]", @@ -2209,89 +2225,112 @@ we maintain a pure devotion to things %a! badlevel = { synopsis = "[You are too inexperienced. Come back when you are %Ra.]", output = "text", - text = [["%p, you are yet too inexperienced to withstand the demands of that -which we need you to do. %RA might just be able to do this thing. + text = [["%p, you would certainly perish if you set off now. +%RA might just be able to do this thing. "Return to us when you have learned more, my %S."]], }, discourage = { - "\"Your %d is nothing, %c. You are mine now!\"", - "\"Run away little %c! You can never hope to defeat %n!\"", - "\"My servants will rip you to shreds!\"", - "\"I shall display your head as a trophy. What do you think about that wall?\"", - "\"I shall break your %ls grove, and destroy all the %gP!\"", - "\"%d has abandoned you, %c. You are doomed.\"", - "\"%rA? %lC sends a mere %r against me? Hah!\"", - "\"%lC has failed, %c. %oC will never leave here.\"", - "\"You really think you can defeat me, eh %c? You are wrong!\"", - "\"You weaken, %c. I shall kill you now.\"", + "%n clacks %nj pincers.", + "%nS stinger whirls down and barely misses you.", + "%n stamps the ground with one of %nj front legs.", + "%n backs up momentarily, then rushes back forward in a false charge.", + -- avoid the above strings being printed too repetitively by padding + -- out the array + "", "", "", "", "", }, encourage = { - "\"It is rumored that the Forest and Mountain Centaurs have resolved their ancient feud and now band together against us.\"", - "\"%nC is strong, and very smart.\"", - "\"Use %o, when you find it. It will help you survive to reach us.\"", + "\"All hope at peace with the centaurs has been lost. They now band together against us.\"", + "\"%nC has a deadly sting. You must keep your distance and avoid it!\"", + "\"Invoking %O now only summons mundane arrows, but those are still useful.\"", "\"Remember, let %d be your guide.\"", - "\"Call upon %d when you face %n. The very act of doing so will infuriate him, and give you advantage.\"", - "\"%n and his kind have always hated us.\"", + "\"Do not start killing creatures indiscriminately. We must not provoke Gaia's fury again.\"", + "\"The various centaur tribes have ancient feuds, but they have set those aside.\"", "\"We cannot hold the grove much longer, %p. Hurry!\"", - "\"To infiltrate %i, you must be very stealthy.\"", - "\"Remember that %n is a braggart. Trust not what he says.\"", - "\"You can triumph, %p, if you trust in %d.\"", + "\"The Wumpus could slay you or me in one blow. Yet you must traverse its cave...\"", + "\"Trust your senses, stay on alert, and naught can take you by surprise.\"", + "\"%nC may summon its brethren to help. Do not get surrounded!\"", }, firsttime = { synopsis = "[The ancient forest grove is surrounded by centaurs.]", output = "text", - text = [[You arrive in familiar surroundings. In the distance, you %x the -ancient forest grove, the place of worship to %d. + text = [[ +You arrive in familiar surroundings. In the distance, you %x the +ancient forest grove, the place of worship to %d that Orion keeps +sacred. + +But why has Cedalion summoned you, rather than Orion? -Something is wrong, though. Surrounding the grove are centaurs! -And they've noticed you!]], +Something is wrong. Grim-faced centaurs have spotted you and are +closing in to attack!]], }, goal_first = { - synopsis = "[You descend into a subterranean complex. Hooves clatter in the distance.]", + synopsis = "[The forest is dark here. %nC must be nearby.]", output = "text", - text = [[You descend into a weird place, in which roughly cut cave-like walls -join with smooth, finished ones, as if someone was in the midst of -finishing off the construction of a subterranean complex. + text = [[ +The forest has grown darker with every mile that passes beneath your +feet. The dense canopy blots out the overcast sky, turning the twilight +hour to darkest night. + +Wisps of fog trail slowly across the forest floor, and the silence is +broken only by the occasional rustling nearby and the strange baying +sounds echoing +from somewhere more distant. -Off in the distance, you hear a sound like the clattering of many -hooves on rock.]], +Nearby, a hump of earth breaks open and a scorpion skitters out of it. + +You don't need your tracking knowledge to know that %nC must be nearby.]], }, goal_next = { - text = "Once again, you enter the distorted castle of %n.", + text = "Once again, you enter the dark heart of the forest.", }, gotit = { - synopsis = "[You pick up %o and feel power. It's time to return %oh to %l.]", + -- Note: this is printed at the START of the ranger quest. + synopsis = "[You take %O and shoot into the sky. You are committed now.]", output = "text", - text = [[As you pick up %o, it seems to glow, and a warmth -fills you completely. You realize that its power is what has protected -your %sp against their enemies for so long. + text = [[ +You turn over %o in your hands, recalling all the times +you saw Orion wielding it and the unerring accuracy he had with it. You +swear to yourself that you shall do right by him. -You must now return it to %l without delay -- their lives depend -on your speed.]], +%l hands you an arrow, which you nock. The bow is of greater +stature than you are used to, and it is difficult to draw at first, but +you do draw the arrow back, pointing it into the sky in the direction +%l indicates, the direction where you will find %n. The +other %gP pause what they are doing to watch. + +With a mighty twang, you loose the arrow and it sails into the sky, +farther than you've ever shot before. The other %gP murmur assent; +now you are committed. + +To seek the death of Scorpius -- or perish in the attempt.]], }, guardtalk_after = { "\"%pC! I have not seen you in many moons. How do you fare?\"", - "\"Birdsong has returned to the grove, surely this means you have defeated %n.\"", - "\"%lC seems to have regained some of his strength.\"", - "\"So, tell us how you entered %i, in case some new evil arises there.\"", - "\"Is that truly %o that I see you carrying?\"", + "\"Birdsong has returned to the grove; surely this means you have defeated %n.\"", + "\"Since you slew %n, the centaurs have abandoned the siege.\"", + "\"So, tell us how you passed through %i, in case some new evil arises there.\"", + "\"It's amazing how you carry %o with such grace. What is it like to wield it?\"", }, guardtalk_before = { "\"%pC! I have not seen you in many moons. How do you fare?\"", - "\"%nC continues to threaten the grove. But we hold fast.\"", - "\"%lC is growing weak. The magic required to defend the grove drains us.\"", - "\"Remember %i is hard to enter. Beware the distraction of leatherwings.\"", - "\"We must regain %o. Without it we will be overrun.\"", + "\"The woods have gone quiet since Orion left us.\"", + "\"The centaurs have hemmed us in. Only here in the center can we still resist them.\"", + "\"I worry about %l. We all grieve, but he is letting it distract him.\"", + "\"None of us save Orion have ever passed through %i and lived.\"", + "\"%oC looks awfully big for you. Are you sure you can wield it?\"", }, hasamulet = { synopsis = "[You have the Amulet! Take it to the Astral Plane and offer it to %d.]", output = "text", - text = [["You have it! You have recovered the Amulet of Yendor! -Now attend to me, %p, and I will tell you what must be done: + text = [[ +"You have it! You have recovered the Amulet of Yendor! + +Now attend to me, %p, for here is what Orion planned to +tell you should you obtain it: "The Amulet has within it magic, the capability to transport you to -the Astral Plane, where the primary circle of %d resides. +the Astral Plane, where the holy circle of %d resides. "To activate this magic, you must travel upwards as far as you can. When you reach the temple, sacrifice the Amulet to %d. @@ -2299,26 +2338,48 @@ When you reach the temple, sacrifice the Amulet to %d. "Thus will you fulfill your destiny."]], }, killed_nemesis = { - synopsis = "[%nC curses you as %nh dies.]", + synopsis = "[You %x Orion in the stars; he blesses you and empowers his bow.]", output = "text", - text = [[%nC collapses to the ground, cursing you and %l, then says: + text = [[ +As %nS death throes subside, you feel the wind picking up. The +clouds clear, and in the dark night sky you %x a constellation that +wasn't there before. Somehow, you know it is Orion, striding +triumphantly across the heavens. As you gaze on it, you hear Orion's +voice. + +"Thank you, %p, for ridding the world of %n. I +am avenged, and I can rest. + +"%d has placed me among the stars; from the stars do I now bless you. +When you call upon the power of my longbow, the arrows it produces will +be spun from starlight, empowering them greatly. Use them well. - "You have defeated me, %r! But I curse you one final time, with - my dying breath! You shall die before you leave my castle!"]], +"Please convey my regrets to %l. The charge of the sacred grove +now passes to %li. + +"Go forth, my %S, with my gratitude." +]], }, leader_first = { - synopsis = "[You have returned, %p. We need your help. Are you ready?]", + synopsis = "[You have returned, but Orion is dead. I must see how experienced you are.]", output = "text", - text = [["%pC! You have returned! Thank %d. + text = [[ +"%pC! You have returned! Thank %d. + +"What? You want to know where Orion is? He has been... slain." + +A tear trickles down %lS cheek before he wipes it away. -"We have great need of you. But first, I must see if you have the -required abilities to take on this responsibility."]], +"Before I tell you the whole story, I must see if you have become +experienced enough to take on this responsibility."]], }, leader_last = { synopsis = "[You are not sufficiently %a. We renounce your %shood.]", output = "text", - text = [["%pC! You have doomed us all. You fairly radiate %L influences -and weaken the power we have raised in this grove as a result! + text = [[ +"%pC! You have doomed us all. You are a disgrace to +all those who name themselves %a and weaken the power we have +raised in this grove as a result! "Begone! We renounce your %shood with us! You are an outcast now!"]], }, @@ -2355,53 +2416,77 @@ You are in room 9 of the cave. There are tunnels to rooms synopsis = "[You are still a %r! Can you really do this?]", output = "text", text = [[ -"You are so young! Still a %r! Can you fight the centaurs? Can you -really find and infiltrate %i, take on %n, and recover -%o for us?"]], +"You are so young! Still %rA! Can you fight the centaurs? Can you +really find and survive %i and take on %n?]], }, nemesis_first = { - synopsis = "[You have come to recover %o, but I shall keep %oh and you shall die.]", + synopsis = "[You face %n. But he is more terrible than you imagined.]", output = "text", - text = [["So, %c. %lC has sent you to recover %o. + text = [[ +At last, you are face to face with %n. But %nh is far more +terrible than you ever imagined. + +Towering over you, armored in gleaming black carapace, with pincers that +could crush you whole. Dark eyes glitter at you with malice that belies +a more than animal mind. + +Why did you get so close? -"Well, I shall keep that bauble. It pleases me. You, %c, shall die."]], +Dripping with venom, the stinger flashes down again.]], }, nemesis_next = { - text = "\"Back again, eh? Well, a mere %r is no threat to me! Die, %c!\"", + text = "%n clicks %nj jaws and advances again.", }, nemesis_other = { - text = "\"You haven't learned your lesson, %c. You can't kill me! You shall die now.\"", + text = "%nS eyes glint menacingly.", }, nemesis_wantsit = { - text = [["I shall have %o from you, %r. Then I shall -kill you."]], + -- this is special cased not to occur since a ranger presumably will + -- frequently have the artifact already when facing nemesis + text = "error: nemesis_wantsit should not be shown" }, nexttime = { text = "Once again, you stand before %H.", }, offeredit = { - synopsis = "[You have succeeded. Take %o with you as you go to find the Amulet.]", + synopsis = "[The centaurs have fled. Take %O with you as you search for the Amulet.]", output = "text", - text = [["%pC! You have succeeded! I feared it was not possible! + text = [[ +"Thank you, %p. I knew you could do it. + +"Last evening, the centaurs were closing in on the heart of the grove to +put an end to us, our arrows exhausted and the sacred protections of +Apollo spent. But as night fell, we beheld Orion striding across the +firmament, written in stars. I knew then that you had triumphed. The +centaurs, who read the night skies and had seen their victory written +there, were alarmed, for their foretellings had been shattered. They +broke and fled. -"You have returned with %o! +"But this is not a lasting peace, and Orion will not reign forever in +the sky. Apollo sent me a vision in a dream while I slept, showing me +that Scorpius, too, has been placed into the stars to oppose Orion. At +the turning of the seasons, Orion will retreat and Scorpius will +advance, and under his sign our enemies will again assail us. -"I fear, now, that the Centaurs will regroup and plot yet another raid. -This will take some time, but if you can recover the Amulet of Yendor -for %d before that happens, we will be eternally safe. +"Before then, you must recover the Amulet of Yendor for Apollo. With +it, his holy groves will be eternally safe. -"Take %o with you. It will aid in your quest for -the Amulet."]], +"Take the Longbow of Orion with you. You are Orion's chosen hero now, +as well as Apollo's, and it rightfully belongs with you. It will serve +you well in your search for the Amulet."]], }, offeredit2 = { synopsis = "[You are the keeper of %o now. Go and find the Amulet.]", output = "text", text = [[%l flexes %o reverently. -"With this wondrous bow, one need never run out of arrows. -You are its keeper now, and the time has come to resume your -search for the Amulet. %Z await your return -through the magic portal that brought you here."]], +"With this wondrous bow, one need never run out of arrows. And with the +blessing of Orion upon you, you shall wield the mighty arrows of light +that can pierce even the heart of Moloch. + +"You are the bow's keeper now, and the time has come to resume your +search for the Amulet. %Z await your return through +the magic portal that brought you here."]], }, othertime = { text = [[You have the oddest feeling that this may be the last time you diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index 656cc888f..e7ef12ed1 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -63,6 +63,9 @@ changes: - The upper filler level is no longer a cavern fill with trees as the background but is still somewhat similar, consisting of randomized trails through a forest leading into one of two caves. + - The story has not been severely changed, but more closely tracks the + mythological conflict between Orion and Scorpius. The largest change is + that Orion is already dead and the mission is one of vengeance. ### Interface changes From 357b475bfa4794d62972a24caf2e2aac3bad01df Mon Sep 17 00:00:00 2001 From: copperwater Date: Sun, 17 May 2026 17:08:50 -0400 Subject: [PATCH 15/20] Give the Longbow of Orion at the start of the Ranger quest This is intended to be another incremental experiment in Quest diversity: in all other quests the nemesis hoards the artifact and you have to get it from them. Here, the artifact is not integral to the quest story or accomplishing the mission, so there's no reason why Cedalion can't just give it to you in the hopes it'll help you succeed. To balance this out, and to align it with the quest story changes, the bow cannot make light arrows until Scorpius dies. --- dat/Ran-goal.lua | 1 - dat/Ran-strt.lua | 1 + doc/xnh-changelog-10.0.md | 4 ++++ src/artifact.c | 3 ++- src/quest.c | 32 ++++++++++++++++++++++++++++++-- 5 files changed, 37 insertions(+), 4 deletions(-) diff --git a/dat/Ran-goal.lua b/dat/Ran-goal.lua index 2a91bdb77..2796520ec 100644 --- a/dat/Ran-goal.lua +++ b/dat/Ran-goal.lua @@ -36,7 +36,6 @@ des.stair("up", 19,10) -- Non diggable walls des.non_diggable(selection.area(00,00,75,19)) -- Objects -des.object({ id = "bow", x=37, y=10, buc="blessed", spe=0, name="The Longbow of Orion" }) des.object("chest", 37, 10) des.object({ coord = { 36, 09 } }) des.object({ coord = { 36, 10 } }) diff --git a/dat/Ran-strt.lua b/dat/Ran-strt.lua index c73b3b0c8..6d2001888 100644 --- a/dat/Ran-strt.lua +++ b/dat/Ran-strt.lua @@ -89,6 +89,7 @@ des.monster({ id = "Cedalion", coord = {20, 10}, inventory = function() des.object({ id = "light armor", spe = 4 }); des.object({ id = "yumi", spe = 4 }); des.object({ id = "ya", spe = 4, quantity = 50 }); + des.object({ id = "bow", buc="blessed", spe=0, name="The Longbow of Orion" }) end }) -- The treasure of Cedalion des.object({ id = "chest", trapped = 0, x=20, y=10, diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index e7ef12ed1..50fcf972a 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -66,6 +66,10 @@ changes: - The story has not been severely changed, but more closely tracks the mythological conflict between Orion and Scorpius. The largest change is that Orion is already dead and the mission is one of vengeance. + - You receive the Longbow of Orion from Cedalion as soon as you get assigned + the quest. However, it will not create arrows of light until Scorpius is + killed, though it can still create normal arrows and its passive extrinsics + still apply. ### Interface changes diff --git a/src/artifact.c b/src/artifact.c index b1dc8a2b3..0bf681a86 100644 --- a/src/artifact.c +++ b/src/artifact.c @@ -2091,7 +2091,8 @@ arti_invoke(struct obj *obj) case CREATE_AMMO: { struct obj *otmp; - if (sve.extant_arrows_of_light >= MAX_LIGHT_ARROWS) + if (sve.extant_arrows_of_light >= MAX_LIGHT_ARROWS + || (Role_if(PM_RANGER) && !svq.quest_status.killed_nemesis)) otmp = mksobj(Race_if(PM_ELF) ? ELVEN_ARROW : Race_if(PM_ORC) ? ORCISH_ARROW : ARROW, diff --git a/src/quest.c b/src/quest.c index 808bbed08..613840535 100644 --- a/src/quest.c +++ b/src/quest.c @@ -17,6 +17,7 @@ staticfn void on_goal(void); staticfn boolean not_capable(void); staticfn int is_pure(boolean); staticfn void expulsion(boolean); +staticfn boolean qarti_given_at_start(void); staticfn boolean arti_fulfills_quest(void); staticfn void chat_with_leader(struct monst *); staticfn void chat_with_nemesis(void); @@ -225,12 +226,23 @@ expulsion(boolean seal) } } +/* Is the quest artifact handed out at the /start/ of the quest? + * If so, showing it to the leader is not significant. */ +staticfn boolean +qarti_given_at_start(void) +{ + return (Role_if(PM_RANGER)); +} + /* Does returning to the leader with the quest artifact complete the quest? * (Currently, if not, the completion condition is assumed to be killing the * nemesis.) */ staticfn boolean arti_fulfills_quest(void) { + if (qarti_given_at_start()) { + return FALSE; + } if (Role_if(PM_VALKYRIE) || Role_if(PM_MONK)) { return FALSE; } @@ -335,7 +347,7 @@ chat_with_leader(struct monst *mtmp) qt_pager("posthanks"); /* Rule 3: You've got the artifact and are back to return it. */ - } else if (u.uhave.questart) { + } else if (u.uhave.questart && !qarti_given_at_start()) { struct obj *otmp; for (otmp = gi.invent; otmp; otmp = otmp->nobj) @@ -403,6 +415,22 @@ chat_with_leader(struct monst *mtmp) qt_pager("assignquest"); exercise(A_WIS, TRUE); Qstat(got_quest) = TRUE; + if (qarti_given_at_start()) { + struct obj *otmp; + for (otmp = mtmp->minvent; otmp; otmp = otmp->nobj) + if (is_quest_artifact(otmp)) + break; + if (otmp) { + extract_from_minvent(mtmp, otmp, TRUE, TRUE); + addinv(otmp); /* this will immediately trigger 'gotit' */ + } + else { + /* leader doesn't have quest artifact? could be stolen from + * them, or they were killed and resurrected */ + verbalize("Forgive me, I must have misplaced %s.", + artiname(gu.urole.questarti)); + } + } } } } @@ -455,7 +483,7 @@ nemesis_speaks(void) * whether this flag is set or not because nemesis_speaks should only get * called when nearby anyway. */ if (!Qstat(in_battle) || covetous_nonwarper(&mons[gu.urole.neminum])) { - if (u.uhave.questart) + if (u.uhave.questart && !qarti_given_at_start()) qt_pager("nemesis_wantsit"); else if (Qstat(made_goal) == 1 || !Qstat(met_nemesis)) qt_pager("nemesis_first"); From 130a856175255dbc481d84874e840c3ccae8b50a Mon Sep 17 00:00:00 2001 From: copperwater Date: Sun, 17 May 2026 17:25:18 -0400 Subject: [PATCH 16/20] Nerf the Longbow of Orion for non-Rangers In line with how many quest artifacts aren't as effective if you've wished them up as another role, so too is the Longbow. It will summon one arrow of light per invoke (still maxing out at 5) and the arrows don't deal as much damage. But multishooting them will still be pretty devastating. This might be an overnerf, but I'd rather err on that side rather than possibly overbuffing non-Rangers by letting the Longbow create the same amount of light arrows for everybody. Rangers who have the Longbow but have not yet killed Scorpius are treated the same as non-Rangers for all purposes except acquiring arrows of light via invoke, which they cannot do until they kill Scorpius. --- doc/xnh-changelog-10.0.md | 3 +++ src/artifact.c | 15 ++++++++++----- src/weapon.c | 6 ++++++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index 50fcf972a..66ef5a685 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -44,9 +44,12 @@ changes: that deals exceptionally high damage but disintegrates after hitting something or falling to the floor. Monsters it kills in one shot will leave no corpse, and monsters it fails to kill will be blinded and stunned. + - The arrow of light deals half its normal damage if you are not a Ranger who + has killed Scorpius. - The Longbow of Orion's invoke effect now creates arrows of light, granting either 3 of them, or if that would make there be more than 5 arrows of light in the game, as many as can be created to bring the total to 5. + - If you are not a Ranger, only one arrow of light will be created. - If there are already 5 in the game, it creates ordinary arrows enchanted equal to the Longbow's enchantment. - These ordinary arrows will be elven arrows if you are an elf and orcish diff --git a/src/artifact.c b/src/artifact.c index 0bf681a86..24f4a4c4a 100644 --- a/src/artifact.c +++ b/src/artifact.c @@ -2124,11 +2124,16 @@ arti_invoke(struct obj *obj) if (otmp->otyp == ARROW_OF_LIGHT) { /* quan rules above are for fallback case of normal arrows, - * arrows of light always give either 3 or whatever number - * ensures the total number in existence don't go beyond - * MAX_LIGHT_ARROWS */ - otmp->quan = min(MAX_LIGHT_ARROWS - sve.extant_arrows_of_light, - 3); + * arrows of light for Rangers always give either 3 or whatever + * number ensures the total number in existence don't go beyond + * MAX_LIGHT_ARROWS, 1 for non-rangers */ + if (Role_if(PM_RANGER)) { + otmp->quan = min(MAX_LIGHT_ARROWS + - sve.extant_arrows_of_light, 3); + } + else { + otmp->quan = 1; + } sve.extant_arrows_of_light += otmp->quan; } otmp->owt = weight(otmp); diff --git a/src/weapon.c b/src/weapon.c index 4fbfd976e..3badd4a24 100644 --- a/src/weapon.c +++ b/src/weapon.c @@ -288,6 +288,12 @@ dmgval(struct obj *otmp, struct monst *mon) if (otyp == ARROW_OF_LIGHT) { /* override prior wsdam/wldam calculation */ tmp = d(8, 8) + 24; /* 60 average damage */ + if (Role_if(PM_RANGER) && svq.quest_status.killed_nemesis + && !svc.context.mon_moving) + ; + else + /* without Orion's blessing, they are not as effective */ + tmp /= 2; } if (Is_weapon) { tmp += otmp->spe; From e4f988c232fc06f0302f433d297a7d8c4ea3f653 Mon Sep 17 00:00:00 2001 From: copperwater Date: Sun, 17 May 2026 17:33:36 -0400 Subject: [PATCH 17/20] fixup for role quest text --- dat/quest.lua | 2 +- src/role.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dat/quest.lua b/dat/quest.lua index a9056329e..766237869 100644 --- a/dat/quest.lua +++ b/dat/quest.lua @@ -2210,7 +2210,7 @@ But you could. You are our best hope for avenging Orion. "As it was given to me, I will entrust you with %o. With it, you shall never want for ammunition, which should serve you -well in the deadly %i. +well in the deadly %it. "Prevail against %n, %p! Avenge the loss of our great lord!"]], }, diff --git a/src/role.c b/src/role.c index 57405d6c0..61933065c 100644 --- a/src/role.c +++ b/src/role.c @@ -312,8 +312,8 @@ const struct Role roles[NUM_ROLES+1] = { { "Marksman", "Markswoman" } }, "Apollo", "_Diana", "Mars", /* Roman/planets */ "Ran", - "Orion's camp", - "the cave of the wumpus", + "Orion's Grove", + "the Cave of the Wumpus", PM_RANGER, PM_LITTLE_DOG /* Orion & canis major */, PM_CEDALION, From 2b26fb291b6989e5b0d58bedb3392506830c25b9 Mon Sep 17 00:00:00 2001 From: copperwater Date: Sun, 17 May 2026 17:35:10 -0400 Subject: [PATCH 18/20] Swap centaurs and scorpions in Ranger quest monster generation With the greater focus on scorpions in the Quest, it didn't make sense to continue to spawn lots of centaurs as time goes on. Scorpions and other creepy-crawlies are mentioned as emerging out of the earth to fight, so them popping up makes more thematic sense too. Centaur presences on levels are better provided by initial generation (primarily on the first three levels; there will be fewer of them on the late levels). Ideally the specific monster to generate most of the time would be a little stronger than the regular scorpion but not as strong as the giant scorpion (which I don't want spawning frequently on the home level, for instance). I suppose I could buff the regular scorpion a bit but I overall like the balance of the two. --- doc/xnh-changelog-10.0.md | 2 ++ src/role.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index 66ef5a685..87ba8abf1 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -73,6 +73,8 @@ changes: the quest. However, it will not create arrows of light until Scorpius is killed, though it can still create normal arrows and its passive extrinsics still apply. + - Scorpions and other s-class monsters generate more frequently on the quest, + with centaurs generating less frequently. ### Interface changes diff --git a/src/role.c b/src/role.c index 61933065c..f3ac3ae6b 100644 --- a/src/role.c +++ b/src/role.c @@ -319,10 +319,10 @@ const struct Role roles[NUM_ROLES+1] = { PM_CEDALION, PM_HUNTER, PM_SCORPIUS, - PM_FOREST_CENTAUR, PM_SCORPION, - S_CENTAUR, + PM_FOREST_CENTAUR, S_SPIDER, + S_CENTAUR, ART_LONGBOW_OF_ORION, MH_HUMAN | MH_ELF | MH_GNOME | MH_ORC | ROLE_MALE | ROLE_FEMALE | ROLE_LAWFUL | ROLE_NEUTRAL | ROLE_CHAOTIC, From 38fbd420ab5ee1add7fd2b0468c45c3ace6cac56 Mon Sep 17 00:00:00 2001 From: copperwater Date: Sun, 17 May 2026 21:24:40 -0400 Subject: [PATCH 19/20] Add saddleability of monsters to monster lookup This is partly for giant scorpions, since I imagine no one would even know they could tame and saddle one otherwise, but now it's discoverable (especially since a reaction of players to seeing a giant scorpion may be to use monster lookup on it). Otherwise, it's a nice small improvement to monster lookup. I did have to move the logic out of can_saddle into a new saddleable() function; there's nothing in can_saddle that requires anything besides the permonst, so I don't know why it requires a struct monst. Regardless, I felt it was better to leave can_saddle's signature as-is and not change all its callers. --- doc/xnh-changelog-10.0.md | 1 + include/extern.h | 1 + src/pager.c | 1 + src/steed.c | 15 +++++++++++---- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/doc/xnh-changelog-10.0.md b/doc/xnh-changelog-10.0.md index 87ba8abf1..3909acf24 100644 --- a/doc/xnh-changelog-10.0.md +++ b/doc/xnh-changelog-10.0.md @@ -81,6 +81,7 @@ changes: - An extended achievement (which does not correspond to any bits in the xlogfile achieve field) is awarded for solving the Wizard's Puzzle, which is encoded in achieveX as "solved_wiz_puzzle". +- Monster lookup shows whether or not a monster can be saddled. ### Architectural changes diff --git a/include/extern.h b/include/extern.h index d4ed424b5..4e03172b1 100644 --- a/include/extern.h +++ b/include/extern.h @@ -3186,6 +3186,7 @@ extern struct obj *findgold(struct obj *, boolean) NO_NNARGS; /* ### steed.c ### */ extern void rider_cant_reach(void); +extern boolean saddleable(struct permonst *) NONNULLARG1; extern boolean can_saddle(struct monst *) NONNULLARG1; extern int use_saddle(struct obj *) NONNULLARG1; extern void put_saddle_on_mon(struct obj *, struct monst *) NONNULLARG2; diff --git a/src/pager.c b/src/pager.c index b82fc2087..26d4eb71b 100644 --- a/src/pager.c +++ b/src/pager.c @@ -1081,6 +1081,7 @@ add_mon_info(winid datawin, struct permonst * pm) APPENDC(is_undead(pm), "undead"); if (!is_undead(pm)) APPENDC(nonliving(pm), "nonliving"); + APPENDC(saddleable(pm), "rideable with a saddle"); if (*buf) { Snprintf(buf2, BUFSZ, "Is %s.", buf); MONPUTSTR(buf2); diff --git a/src/steed.c b/src/steed.c index c26105526..22aefadc5 100644 --- a/src/steed.c +++ b/src/steed.c @@ -22,17 +22,24 @@ rider_cant_reach(void) /*** Putting the saddle on ***/ -/* Can this monster wear a saddle? */ +/* Can a monster of this species wear a saddle? */ boolean -can_saddle(struct monst *mtmp) +saddleable(struct permonst *ptr) { - struct permonst *ptr = mtmp->data; - return (strchr(steeds, ptr->mlet) && (ptr->msize >= MZ_MEDIUM) && (!humanoid(ptr) || ptr->mlet == S_CENTAUR) && !amorphous(ptr) && !noncorporeal(ptr) && !is_whirly(ptr) && !unsolid(ptr)); } +/* Can this monster wear a saddle? + * (I'm not sure why this takes a struct monst and not a struct permonst.) */ +boolean +can_saddle(struct monst *mtmp) +{ + struct permonst *ptr = mtmp->data; + return saddleable(ptr); +} + int use_saddle(struct obj *otmp) { From ebd71d544e25cad46f4168e37864c9cfff379701 Mon Sep 17 00:00:00 2001 From: Cameron Lentz <48235540+Ardub23@users.noreply.github.com> Date: Mon, 18 May 2026 21:17:55 -0600 Subject: [PATCH 20/20] Bumping into unseen peacefuls doesn't anger them If the hero walked into a creature without attacking, the creature would react as if the hero had attacked violently--but only if the creature was peaceful (not tame), and only if the hero couldn't see them. There is no clear reason for this to occur, given that the hero's action is both innocent and harmless. And it can cause frustration if a strong peaceful creature (such as a quest leader) decides to go invisible or hide. Now, bumping into an unseen peaceful creature will awaken it without being treated as an attack. --- src/uhitm.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/uhitm.c b/src/uhitm.c index dcc63fa3b..0b6ddf1e9 100644 --- a/src/uhitm.c +++ b/src/uhitm.c @@ -249,13 +249,7 @@ attack_checks( && m_next2u(mtmp)) set_ustuck(mtmp); } - /* #H7329 - if hero is on engraved "Elbereth", this will end up - * assessing an alignment penalty and removing the engraving - * even though no attack actually occurs. Since it also angers - * peacefuls, we're operating as if an attack attempt did occur - * and the Elbereth behavior is consistent. - */ - wakeup(mtmp, TRUE, TRUE); /* always necessary; also un-mimics mimics */ + wakeup(mtmp, FALSE, TRUE); /* always necessary; also un-mimics mimics */ return TRUE; }