Some cleanup for saving bones

This commit is contained in:
PatR
2022-06-11 00:09:14 -07:00
parent 542ab25da1
commit 01fb6a703f

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 bones.c $NHDT-Date: 1596498151 2020/08/03 23:42:31 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.103 $ */
/* NetHack 3.7 bones.c $NHDT-Date: 1654931350 2022/06/11 07:09:10 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.119 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985,1993. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
@@ -253,18 +253,21 @@ give_to_nearby_mon(struct obj *otmp, int x, int y)
/* called by savebones(); also by finish_paybill(shk.c) */
void
drop_upon_death(struct monst *mtmp, /* monster if hero turned into one (other than ghost) */
struct obj *cont, /* container if hero is turned into a statue */
int x, int y)
drop_upon_death(
struct monst *mtmp, /* monster if hero rises as one (non ghost) */
struct obj *cont, /* container if hero is turned into a statue */
int x, int y)
{
struct obj *otmp;
/* when dual-wielding, the second weapon gets dropped rather than welded if
it becomes cursed; ensure that that won't happen here by ending dual-wield */
/* when dual-wielding, the second weapon gets dropped rather than
welded if it becomes cursed; ensure that that won't happen here
by ending dual-wield */
u.twoweap = FALSE; /* bypass set_twoweap() */
/* all inventory is dropped (for the normal case), even non-droppable things
like worn armor and accessories, welded weapon, or cursed loadstones */
/* all inventory is dropped (for the normal case), even non-droppable
things like worn armor and accessories, welded weapon, or cursed
loadstones */
while ((otmp = g.invent) != 0) {
obj_extract_self(otmp);
/* when turning into green slime, all gear remains held;
@@ -311,7 +314,7 @@ fixuporacle(struct monst *oracle)
if (!Is_oracle_level(&u.uz))
return FALSE;
oracle->mpeaceful = 1;
oracle->mpeaceful = 1; /* for behavior toward next character */
o_ridx = levl[oracle->mx][oracle->my].roomno - ROOMOFFSET;
if (o_ridx >= 0 && g.rooms[o_ridx].rtype == DELPHI)
return TRUE; /* no fixup needed */
@@ -427,22 +430,24 @@ savebones(int how, time_t when, struct obj *corpse)
make_bones:
unleash_all();
iter_mons(remove_mon_from_bones);
/* new ghost or other undead isn't punished even if hero was;
end-of-game disclosure has already had a chance to report the
Punished status so we don't need to preserve it any further */
if (Punished)
unpunish(); /* unwear uball, destroy uchain */
/* in case dismounting kills steed [is that even possible?], do so
before cleaning up dead monsters */
if (u.usteed)
dismount_steed(DISMOUNT_BONES);
dmonsfree(); /* discard dead or gone monsters */
/* mark all fruits as nonexistent; when we come to them we'll mark
* them as existing (using goodfruit())
*/
iter_mons(remove_mon_from_bones); /* send various unique monsters away, */
dmonsfree(); /* then discard dead or gone monsters */
/* mark all named fruits as nonexistent; if/when we come to instances
of any of them we'll mark those as existing (using goodfruit()) */
for (f = g.ffruit; f; f = f->nextf)
f->fid = -f->fid;
/* check iron balls separately--maybe they're not carrying it */
if (uball)
uball->owornmask = uchain->owornmask = 0L;
/* dispose of your possessions, usually cursed */
if (u.ugrave_arise == (NON_PM - 1)) {
struct obj *otmp;
@@ -531,7 +536,8 @@ savebones(int how, time_t when, struct obj *corpse)
/* format name+role,&c, death reason, and date+time;
gender and alignment reflect final values rather than what the
character started out as, same as topten and logfile entries */
Sprintf(newbones->who, "%s-%.3s-%.3s-%.3s-%.3s", g.plname, g.urole.filecode,
Sprintf(newbones->who, "%s-%.3s-%.3s-%.3s-%.3s",
g.plname, g.urole.filecode,
g.urace.filecode, genders[flags.female].filecode,
aligns[1 - u.ualign.type].filecode);
formatkiller(newbones->how, sizeof newbones->how, how, TRUE);