Merge branch 'master' into NetHack-3.7

This commit is contained in:
nhmall
2019-06-24 19:47:22 -04:00
5 changed files with 39 additions and 21 deletions

View File

@@ -1,4 +1,4 @@
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.65 $ $NHDT-Date: 1561314651 2019/06/23 18:30:51 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.66 $ $NHDT-Date: 1561414302 2019/06/24 22:11:42 $
This fixes36.3 file is here to capture information about updates in the 3.6.x This fixes36.3 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.2 in May 2019. Please note, however, lineage following the release of 3.6.2 in May 2019. Please note, however,
@@ -87,6 +87,7 @@ partly eaten food with one bite left had message anomalies when eaten; the
wizard mode ^I menu could list "Not carrying anything" after inventory items wizard mode ^I menu could list "Not carrying anything" after inventory items
if perm_invent option was On (even on tty where that's not supported) if perm_invent option was On (even on tty where that's not supported)
change #adjust to treat carrying only gold as not having anything to adjust change #adjust to treat carrying only gold as not having anything to adjust
saving bones with 'perm_invent' On could result in "Bad fruit #N" warnings
Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository

View File

@@ -477,6 +477,7 @@ enum bodypart_types {
#define POTION_OCCUPANT_CHANCE(n) (13 + 2 * (n)) #define POTION_OCCUPANT_CHANCE(n) (13 + 2 * (n))
#define WAND_BACKFIRE_CHANCE 100 #define WAND_BACKFIRE_CHANCE 100
#define BALL_IN_MON (u.uswallow && uball && uball->where == OBJ_FREE) #define BALL_IN_MON (u.uswallow && uball && uball->where == OBJ_FREE)
#define CHAIN_IN_MON (u.uswallow && uchain && uchain->where == OBJ_FREE)
#define NODIAG(monnum) ((monnum) == PM_GRID_BUG) #define NODIAG(monnum) ((monnum) == PM_GRID_BUG)
/* Flags to control menus */ /* Flags to control menus */

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 end.c $NHDT-Date: 1559675615 2019/06/04 19:13:35 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.176 $ */ /* NetHack 3.6 end.c $NHDT-Date: 1561414303 2019/06/24 22:11:43 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.178 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1023,6 +1023,12 @@ done_object_cleanup()
/* placebc(); */ /* placebc(); */
lift_covet_and_placebc(override_restriction); lift_covet_and_placebc(override_restriction);
} }
/* persistent inventory window now obsolete since disclosure uses
a normal popup one; avoids "Bad fruit #n" when saving bones */
if (iflags.perm_invent) {
iflags.perm_invent = FALSE;
update_inventory(); /* make interface notice the change */
}
return; return;
} }
@@ -1202,6 +1208,8 @@ int how;
deal with ball and chain possibly being temporarily off the map */ deal with ball and chain possibly being temporarily off the map */
if (!g.program_state.panicking) if (!g.program_state.panicking)
done_object_cleanup(); done_object_cleanup();
/* in case we're panicking; normally cleared by done_object_cleanup() */
iflags.perm_invent = FALSE;
/* remember time of death here instead of having bones, rip, and /* remember time of death here instead of having bones, rip, and
topten figure it out separately and possibly getting different topten figure it out separately and possibly getting different

View File

@@ -643,7 +643,8 @@ unsigned int *stuckid, *steedid;
struct sysflag newgamesysflags; struct sysflag newgamesysflags;
#endif #endif
struct context_info newgamecontext; /* all 0, but has some pointers */ struct context_info newgamecontext; /* all 0, but has some pointers */
struct obj *otmp, *tmp_bc; struct obj *otmp;
struct obj *bc_obj;
char timebuf[15]; char timebuf[15];
unsigned long uid; unsigned long uid;
boolean defer_perm_invent; boolean defer_perm_invent;
@@ -782,17 +783,15 @@ unsigned int *stuckid, *steedid;
if (nhfp->fieldlevel && nhfp->addinfo) if (nhfp->fieldlevel && nhfp->addinfo)
sfi_addinfo(nhfp, "objchain", "start", "invent", 0); sfi_addinfo(nhfp, "objchain", "start", "invent", 0);
g.invent = restobjchn(nhfp, FALSE, FALSE); g.invent = restobjchn(nhfp, FALSE, FALSE);
/* tmp_bc only gets set here if the ball & chain were orphaned
because you were swallowed; otherwise they will be on the floor /* restore dangling (not on floor or in inventory) ball and/or chain */
or in your inventory */ bc_obj = restobjchn(nhfp, FALSE, FALSE);
tmp_bc = restobjchn(nhfp, FALSE, FALSE); while(bc_obj) {
if (tmp_bc) { struct obj * nobj = bc_obj->nobj;
for (otmp = tmp_bc; otmp; otmp = otmp->nobj) { if (bc_obj->owornmask)
if (otmp->owornmask) setworn(bc_obj, bc_obj->owornmask);
setworn(otmp, otmp->owornmask); bc_obj->nobj = (struct obj *)0;
} bc_obj = nobj;
if (!uball || !uchain)
impossible("restgamestate: lost ball & chain");
} }
g.migrating_objs = restobjchn(nhfp, FALSE, FALSE); g.migrating_objs = restobjchn(nhfp, FALSE, FALSE);
g.migrating_mons = restmonchn(nhfp, FALSE); g.migrating_mons = restmonchn(nhfp, FALSE);
@@ -818,6 +817,10 @@ unsigned int *stuckid, *steedid;
for (otmp = g.invent; otmp; otmp = otmp->nobj) for (otmp = g.invent; otmp; otmp = otmp->nobj)
if (otmp->owornmask) if (otmp->owornmask)
setworn(otmp, otmp->owornmask); setworn(otmp, otmp->owornmask);
if ((uball && !uchain) || (uchain && !uball))
impossible("restgamestate: lost ball & chain");
/* reset weapon so that player will get a reminder about "bashing" /* reset weapon so that player will get a reminder about "bashing"
during next fight when bare-handed or wielding an unconventional during next fight when bare-handed or wielding an unconventional
item; for pick-axe, we aren't able to distinguish between having item; for pick-axe, we aren't able to distinguish between having

View File

@@ -287,6 +287,7 @@ savegamestate(nhfp)
NHFILE *nhfp; NHFILE *nhfp;
{ {
unsigned long uid; unsigned long uid;
struct obj * bc_objs = (struct obj *)0;
#ifdef MFLOPPY #ifdef MFLOPPY
count_only = (nhfp->mode & COUNTING); count_only = (nhfp->mode & COUNTING);
@@ -337,14 +338,18 @@ NHFILE *nhfp;
save_light_sources(nhfp, RANGE_GLOBAL); save_light_sources(nhfp, RANGE_GLOBAL);
saveobjchn(nhfp, g.invent); saveobjchn(nhfp, g.invent);
if (BALL_IN_MON) {
/* prevent loss of ball & chain when swallowed */ /* save ball and chain if they are currently dangling free (i.e. not on
uball->nobj = uchain; floor or in inventory) */
uchain->nobj = (struct obj *) 0; if (CHAIN_IN_MON) {
saveobjchn(nhfp, uball); uchain->nobj = bc_objs;
} else { bc_objs = uchain;
saveobjchn(nhfp, (struct obj *) 0);
} }
if (BALL_IN_MON) {
uball->nobj = bc_objs;
bc_objs = uball;
}
saveobjchn(nhfp, bc_objs);
saveobjchn(nhfp, g.migrating_objs); saveobjchn(nhfp, g.migrating_objs);
savemonchn(nhfp, g.migrating_mons); savemonchn(nhfp, g.migrating_mons);