alternate spellings if they occurred at the end ("corpse of mumakil")
but only some when they occurred elsewhere ("gray-elf corpse" worked,
"mumakil corpse" yielded "does not exist") depending upon name length
+couldn't wish for werecreature corpse or tin because monster name lookup
+ always matched the beast form which is flagged no-corpse; switch to
+ human form for "were<creature>"
+wishing for werecreature figurine always made one that created the monster in
+ beast form if activated; allow "human were<creature>" to explicitly
+ specify werecreature's human form (for corpses and tins as well as
+ figurines); override the restriction against human figurines for that
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
{ "woodland nymph", PM_WOOD_NYMPH },
{ "halfling", PM_HOBBIT }, /* potential guess for polyself */
{ "genie", PM_DJINNI }, /* potential guess for ^G/#wizgenesis */
+ /* prefix used to workaround duplicate monster names for
+ monsters with alternate forms */
+ { "human wererat", PM_HUMAN_WERERAT },
+ { "human werejackal", PM_HUMAN_WEREJACKAL },
+ { "human werewolf", PM_HUMAN_WEREWOLF },
+ /* for completeness */
+ { "rat wererat", PM_WERERAT },
+ { "jackal werejackal", PM_WEREJACKAL },
+ { "wolf werewolf", PM_WEREWOLF },
/* Hyphenated names -- it would be nice to handle these via
fuzzymatch() but it isn't able to ignore trailing stuff */
{ "ki rin", PM_KI_RIN },
/* set otmp->corpsenm or dragon scale [mail] */
if (mntmp >= LOW_PM) {
+ int humanwere;
+
if (mntmp == PM_LONG_WORM_TAIL)
mntmp = PM_LONG_WORM;
+ /* werecreatures in beast form are all flagged no-corpse so for
+ corpses and tins, switch to their corresponding human form;
+ for figurines, override the can't-be-human restriction instead */
+ if (typ != FIGURINE && is_were(&mons[mntmp])
+ && (g.mvitals[mntmp].mvflags & G_NOCORPSE) != 0
+ && (humanwere = counter_were(mntmp)) != NON_PM)
+ mntmp = humanwere;
switch (typ) {
case TIN:
set_corpsenm(otmp, mntmp);
break;
case FIGURINE:
- if (!(mons[mntmp].geno & G_UNIQ) && !is_human(&mons[mntmp])
+ if (!(mons[mntmp].geno & G_UNIQ)
+ && (!is_human(&mons[mntmp]) || is_were(&mons[mntmp]))
#ifdef MAIL_STRUCTURES
&& mntmp != PM_MAIL_DAEMON
#endif