-NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.525 $ $NHDT-Date: 1620329775 2021/05/06 19:36:15 $
+NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.526 $ $NHDT-Date: 1620348705 2021/05/07 00:51:45 $
General Fixes and Modified Features
-----------------------------------
when an unseen non-pet picks up or uses an item, hero loses known/dknown/
bknown/cknown/lknown memory of that item (so becomes unidentified; in
particular, player won't be asked what to call unseen thrown potion)
+wishing for a partly eaten wraith corpse yielded "partly eaten food (1) more
+ nutritious than untouched food (0)"
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
-/* NetHack 3.7 extern.h $NHDT-Date: 1620329773 2021/05/06 19:36:13 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.968 $ */
+/* NetHack 3.7 extern.h $NHDT-Date: 1620348705 2021/05/07 00:51:45 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.969 $ */
/* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */
extern void init_uhunger(void);
extern int Hear_again(void);
extern void reset_eat(void);
+extern unsigned obj_nutrition(struct obj *);
extern int doeat(void);
extern int use_tin_opener(struct obj *);
extern void gethungry(void);
-/* NetHack 3.7 eat.c $NHDT-Date: 1603507384 2020/10/24 02:43:04 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.235 $ */
+/* NetHack 3.7 eat.c $NHDT-Date: 1620348708 2021/05/07 00:51:48 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.242 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
static const char *food_xname(struct obj *, boolean);
static void choke(struct obj *);
static void recalc_wt(void);
-static unsigned obj_nutrition(struct obj *);
static struct obj *touchfood(struct obj *);
static void do_reset_eat(void);
static void done_eating(boolean);
}
/* base nutrition of a food-class object */
-static unsigned
+unsigned
obj_nutrition(struct obj *otmp)
{
unsigned nut = (otmp->otyp == CORPSE) ? mons[otmp->corpsenm].cnutrit
Hallucination
? "You suddenly dread being peeled and mimic %s again!"
: "You now prefer mimicking %s again.",
- an(Upolyd ? pmname(g.youmonst.data, Ugender) : g.urace.noun));
+ an(Upolyd ? pmname(g.youmonst.data, Ugender)
+ : g.urace.noun));
g.eatmbuf = dupstr(buf);
g.nomovemsg = g.eatmbuf;
g.afternmv = eatmdone;
void
consume_oeaten(struct obj *obj, int amt)
{
+ if (!obj_nutrition(obj)) {
+ char itembuf[40];
+ int otyp = obj->otyp;
+
+ if (otyp == CORPSE || otyp == EGG || otyp == TIN) {
+ Strcpy(itembuf, (otyp == CORPSE) ? "corpse"
+ : (otyp == EGG) ? "egg"
+ : (otyp == TIN) ? "tin" : "other?");
+ Sprintf(eos(itembuf), " [%d]", obj->corpsenm);
+ } else {
+ Sprintf(itembuf, "%d", otyp);
+ }
+ impossible(
+ "oeaten: attempting to set 0 nutrition food (%s) partially eaten",
+ itembuf);
+ return;
+ }
+
/*
* This is a hack to try to squelch several long standing mystery
* food bugs. A better solution would be to rewrite the entire
-/* NetHack 3.7 objnam.c $NHDT-Date: 1612053751 2021/01/31 00:42:31 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.313 $ */
+/* NetHack 3.7 objnam.c $NHDT-Date: 1620348711 2021/05/07 00:51:51 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.315 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2011. */
/* NetHack may be freely redistributed. See license for details. */
}
if (d.halfeaten && d.otmp->oclass == FOOD_CLASS) {
- if (d.otmp->otyp == CORPSE)
- d.otmp->oeaten = mons[d.otmp->corpsenm].cnutrit;
- else
- d.otmp->oeaten = objects[d.otmp->otyp].oc_nutrition;
- /* (do this adjustment before setting up object's weight) */
- consume_oeaten(d.otmp, 1);
+ unsigned nut = obj_nutrition(d.otmp);
+
+ /* do this adjustment before setting up object's weight; skip
+ "partly eaten" for food with 0 nutrition (wraith corpse) or for
+ anything that couldn't take more than one bite (1 nutrition;
+ ought to check for one-bite instead but that's complicated) */
+ if (nut > 1) {
+ d.otmp->oeaten = nut;
+ consume_oeaten(d.otmp, 1);
+ }
}
d.otmp->owt = weight(d.otmp);
if (d.very && d.otmp->otyp == HEAVY_IRON_BALL)