Merge branch 'NetHack-3.6.2'

This commit is contained in:
nhmall
2018-12-21 09:38:22 -05:00
6 changed files with 78 additions and 8 deletions

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 o_init.c $NHDT-Date: 1528332336 2018/06/07 00:45:36 $ $NHDT-Branch: NetHack-3.6.2 $:$NHDT-Revision: 1.24 $ */
/* NetHack 3.6 o_init.c $NHDT-Date: 1545383615 2018/12/21 09:13:35 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.25 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2011. */
/* NetHack may be freely redistributed. See license for details. */
@@ -362,8 +362,11 @@ boolean credit_hero;
exercise(A_WIS, TRUE);
}
/* moves==1L => initial inventory, gameover => final disclosure */
if (moves > 1L && !program_state.gameover)
if (moves > 1L && !program_state.gameover) {
if (objects[oindx].oc_class == GEM_CLASS)
gem_learned(oindx); /* could affect price of unpaid gems */
update_inventory();
}
}
}
@@ -390,6 +393,9 @@ register int oindx;
disco[dindx - 1] = 0;
else
impossible("named object not in disco");
if (objects[oindx].oc_class == GEM_CLASS)
gem_learned(oindx); /* ok, it's actually been unlearned */
update_inventory();
}
}

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 pager.c $NHDT-Date: 1545129848 2018/12/18 10:44:08 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.142 $ */
/* NetHack 3.6 pager.c $NHDT-Date: 1545361111 2018/12/21 02:58:31 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.143 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2018. */
/* NetHack may be freely redistributed. See license for details. */
@@ -576,6 +576,8 @@ char *supplemental_name;
if (*dbase_str == ' ')
++dbase_str;
}
if (!strncmp(dbase_str, "pair of ", 8))
dbase_str += 8;
if (!strncmp(dbase_str, "tame ", 5))
dbase_str += 5;
else if (!strncmp(dbase_str, "peaceful ", 9))
@@ -640,6 +642,14 @@ char *supplemental_name;
ep = strstri(dbase_str, ", ");
if (ep && ep > dbase_str)
*ep = '\0';
/* remove article from 'alt' name ("a pair of lenses named
The Eyes of the Overworld" simplified above to "lenses named
The Eyes of the Overworld", now reduced to "The Eyes of the
Overworld", skip "The" as with base name processing) */
if (!strncmpi(alt, "a ", 2)
|| !strncmpi(alt, "an ", 3)
|| !strncmpi(alt, "the ", 4))
alt = index(alt, ' ') + 1;
/* remove charges or "(lit)" or wizmode "(N aum)" */
if ((ep = strstri(dbase_str, " (")) != 0 && ep > dbase_str)
*ep = '\0';

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 shk.c $NHDT-Date: 1545036290 2018/12/17 08:44:50 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.143 $ */
/* NetHack 3.6 shk.c $NHDT-Date: 1545383616 2018/12/21 09:13:36 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.144 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
@@ -2278,6 +2278,45 @@ register struct monst *shkp;
return tmp;
}
/* unlike alter_cost() which operates on a specific item, identifying or
forgetting a gem causes all unpaid gems of its type to change value */
void
gem_learned(oindx)
int oindx;
{
struct obj *obj;
struct monst *shkp;
struct bill_x *bp;
int ct;
/*
* Unfortunately, shop bill doesn't have object type included,
* just obj->oid for each unpaid stack, so we have to go through
* every bill and every item on that bill and match up against
* every unpaid stack on the level....
*
* Fortunately, there's no need to catch up when changing dungeon
* levels even if we ID'd or forget some gems while gone from a
* level. There won't be any shop bills when arriving; they were
* either paid before leaving or got treated as robbery and it's
* too late to adjust pricing.
*/
for (shkp = next_shkp(fmon, TRUE); shkp;
shkp = next_shkp(shkp->nmon, TRUE)) {
ct = ESHK(shkp)->billct;
bp = ESHK(shkp)->bill;
while (--ct >= 0) {
obj = find_oid(bp->bo_id);
if (!obj) /* shouldn't happen */
continue;
if ((oindx != STRANGE_OBJECT) ? (obj->otyp == oindx)
: (obj->oclass == GEM_CLASS))
bp->price = get_cost(obj, shkp);
++bp;
}
}
}
/* called when an item's value has been enhanced; if it happens to be
on any shop bill, update that bill to reflect the new higher price
[if the new price drops for some reason, keep the old one in place] */