R788 - bones corpses shouldn't all be human
u.umonnum was used to create the corpse in a bones file. However, unless you're polymorphed and manage to actually die in that form, u.umonnum refers to a role monster, which all have M2_HUMAN set, so they're all human. Even if the role monsters were mutated dynamically when the game starts, the problem would still exist, just in a different form. Use urace to determine the corpse type instead.
This commit is contained in:
@@ -91,6 +91,7 @@ monsters should not repeatedly try to teleport on noteleport levels
|
|||||||
crocodiles legs are not designed for kicking open doors, chests, et al.
|
crocodiles legs are not designed for kicking open doors, chests, et al.
|
||||||
walls of one of the luckstone locations in minend-3 were diggable
|
walls of one of the luckstone locations in minend-3 were diggable
|
||||||
minetn-6 could place downstairs in a cut-off location
|
minetn-6 could place downstairs in a cut-off location
|
||||||
|
corpses in bones files don't retain their role characteristic
|
||||||
|
|
||||||
|
|
||||||
Platform- and/or Interface-Specific Fixes
|
Platform- and/or Interface-Specific Fixes
|
||||||
|
|||||||
12
src/end.c
12
src/end.c
@@ -646,7 +646,17 @@ die:
|
|||||||
u.ugrave_arise = (NON_PM - 1); /* statue instead of corpse */
|
u.ugrave_arise = (NON_PM - 1); /* statue instead of corpse */
|
||||||
else if (u.ugrave_arise == NON_PM &&
|
else if (u.ugrave_arise == NON_PM &&
|
||||||
!(mvitals[u.umonnum].mvflags & G_NOCORPSE)) {
|
!(mvitals[u.umonnum].mvflags & G_NOCORPSE)) {
|
||||||
corpse = mk_named_object(CORPSE, &mons[u.umonnum],
|
int mnum = u.umonnum;
|
||||||
|
|
||||||
|
if (!Upolyd) {
|
||||||
|
/* Base corpse on race when not poly'd since original
|
||||||
|
* u.umonnum is based on role, and all role monsters
|
||||||
|
* are human.
|
||||||
|
*/
|
||||||
|
mnum = (flags.female && urace.femalenum != NON_PM) ?
|
||||||
|
urace.femalenum : urace.malenum;
|
||||||
|
}
|
||||||
|
corpse = mk_named_object(CORPSE, &mons[mnum],
|
||||||
u.ux, u.uy, plname);
|
u.ux, u.uy, plname);
|
||||||
Sprintf(pbuf, "%s, %s%s", plname,
|
Sprintf(pbuf, "%s, %s%s", plname,
|
||||||
killer_format == NO_KILLER_PREFIX ? "" :
|
killer_format == NO_KILLER_PREFIX ? "" :
|
||||||
|
|||||||
Reference in New Issue
Block a user