ball&chain bit

A check for bad restoration (ball without chain or vice versa) issued
a warning but then left the problem around to trip up other code.
'Fix' the problem by clearing those owornmask slots and their pointers.
Doesn't try to recover memory if the one that's found is OBJ_FREE.

Also some formatting.
This commit is contained in:
PatR
2019-06-25 11:02:07 -07:00
parent d0a32762ab
commit 88f19c57e4
2 changed files with 16 additions and 9 deletions

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 restore.c $NHDT-Date: 1555201698 2019/04/14 00:28:18 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.129 $ */
/* NetHack 3.6 restore.c $NHDT-Date: 1561485720 2019/06/25 18:02:00 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.131 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Michael Allison, 2009. */
/* NetHack may be freely redistributed. See license for details. */
@@ -647,17 +647,18 @@ unsigned int *stuckid, *steedid;
/* restore dangling (not on floor or in inventory) ball and/or chain */
bc_obj = restobjchn(fd, FALSE, FALSE);
while(bc_obj) {
struct obj * nobj = bc_obj->nobj;
while (bc_obj) {
struct obj *nobj = bc_obj->nobj;
if (bc_obj->owornmask)
setworn(bc_obj, bc_obj->owornmask);
bc_obj->nobj = (struct obj *)0;
bc_obj->nobj = (struct obj *) 0;
bc_obj = nobj;
}
migrating_objs = restobjchn(fd, FALSE, FALSE);
migrating_mons = restmonchn(fd, FALSE);
mread(fd, (genericptr_t) mvitals, sizeof(mvitals));
mread(fd, (genericptr_t) mvitals, sizeof mvitals);
/*
* There are some things after this that can have unintended display
@@ -671,8 +672,12 @@ unsigned int *stuckid, *steedid;
if (otmp->owornmask)
setworn(otmp, otmp->owornmask);
if ((uball && !uchain) || (uchain && !uball))
if ((uball && !uchain) || (uchain && !uball)) {
impossible("restgamestate: lost ball & chain");
/* poor man's unpunish() */
setworn((struct obj *) 0, W_CHAIN);
setworn((struct obj *) 0, W_BALL);
}
/* reset weapon so that player will get a reminder about "bashing"
during next fight when bare-handed or wielding an unconventional