fix "deleting worn object" impossibility
Migrating objects overload obj->owornmask with a destination code, so rot_corpse needs to clear that before deleting corpses. (Buried objects don't touch owornmask, so rot_organic, which does the actual object deletion, shouldn't need any similar change.) The corpses with owornmask 3 that have been observed recently were slated to arrive on the up stairs, so presumeably fell down the down stairs of the current level and rotted before the hero went down. Put plainly, it was the [post-3.4.3] impossible() check which was in error, not the active game data.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.5 dig.c $NHDT-Date: 1426465434 2015/03/16 00:23:54 $ $NHDT-Branch: debug $:$NHDT-Revision: 1.73 $ */
|
||||
/* NetHack 3.5 dig.c $NHDT-Date: 1430697288 2015/05/03 23:54:48 $ $NHDT-Branch: master $:$NHDT-Revision: 1.86 $ */
|
||||
/* NetHack 3.5 dig.c $Date: 2012/02/16 03:01:37 $ $Revision: 1.67 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -1862,6 +1862,10 @@ long timeout; /* unused */
|
||||
setmnotwielded(obj->ocarry,obj);
|
||||
MON_NOWEP(obj->ocarry);
|
||||
}
|
||||
} else if (obj->where == OBJ_MIGRATING) {
|
||||
/* clear destination flag so that obfree()'s check for
|
||||
freeing a worn object doesn't get a false hit */
|
||||
obj->owornmask = 0L;
|
||||
}
|
||||
rot_organic(arg, timeout);
|
||||
if (on_floor) {
|
||||
|
||||
Reference in New Issue
Block a user