more object->dknown handling

Fix a couple of places that set obj->dknown to 0 to deal with some
special cases where it should be left at 1.  (Other places do that
but deal with potions where hardcoded 0 remains appropriate.)
This commit is contained in:
PatR
2021-05-13 09:38:53 -07:00
parent b630d5e038
commit dae25564bc
4 changed files with 20 additions and 11 deletions

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 extern.h $NHDT-Date: 1620861202 2021/05/12 23:13:22 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.970 $ */
/* NetHack 3.7 extern.h $NHDT-Date: 1620923916 2021/05/13 16:38:36 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.971 $ */
/* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1307,6 +1307,7 @@ extern void replace_object(struct obj *, struct obj *);
extern struct obj *unknwn_contnr_contents(struct obj *);
extern void bill_dummy_object(struct obj *);
extern void costly_alteration(struct obj *, int);
extern void clear_dknown(struct obj *);
extern void unknow_object(struct obj *);
extern struct obj *mksobj(int, boolean, boolean);
extern int bcsign(struct obj *);

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 mkobj.c $NHDT-Date: 1620861208 2021/05/12 23:13:28 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.199 $ */
/* NetHack 3.7 mkobj.c $NHDT-Date: 1620923920 2021/05/13 16:38:40 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.200 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Derek S. Ray, 2015. */
/* NetHack may be freely redistributed. See license for details. */
@@ -706,13 +706,12 @@ costly_alteration(struct obj* obj, int alter_type)
static const char dknowns[] = { WAND_CLASS, RING_CLASS, POTION_CLASS,
SCROLL_CLASS, GEM_CLASS, SPBOOK_CLASS,
WEAPON_CLASS, TOOL_CLASS, 0 };
WEAPON_CLASS, TOOL_CLASS, VENOM_CLASS, 0 };
/* some init for a brand new object, or partial re-init when hero loses
potentially known info about an object (called when an unseen monster
picks up or uses it); moved from invent.c to here for access to dknowns */
/* set obj->dknown to 0 for most types of objects, to 1 otherwise;
split off from unknow_object() */
void
unknow_object(struct obj *obj)
clear_dknown(struct obj *obj)
{
obj->dknown = index(dknowns, obj->oclass) ? 0 : 1;
if ((obj->otyp >= ELVEN_SHIELD && obj->otyp <= ORCISH_SHIELD)
@@ -723,6 +722,15 @@ unknow_object(struct obj *obj)
object, globby flag won't be set yet so isn't available to check */
if (Is_pudding(obj))
obj->dknown = 1;
}
/* some init for a brand new object, or partial re-init when hero loses
potentially known info about an object (called when an unseen monster
picks up or uses it); moved from invent.c to here for access to dknowns */
void
unknow_object(struct obj *obj)
{
clear_dknown(obj); /* obj->dknown = 0; */
obj->bknown = obj->rknown = 0;
obj->cknown = obj->lknown = 0;

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 mon.c $NHDT-Date: 1614074654 2021/02/23 10:04:14 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.370 $ */
/* NetHack 3.7 mon.c $NHDT-Date: 1620923921 2021/05/13 16:38:41 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.375 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Derek S. Ray, 2015. */
/* NetHack may be freely redistributed. See license for details. */
@@ -663,7 +663,7 @@ make_corpse(register struct monst* mtmp, unsigned int corpseflags)
* if the corpse's obj->dknown is 0.
*/
if (Blind && !sensemon(mtmp))
obj->dknown = 0;
clear_dknown(obj); /* obj->dknown = 0; */
stackobj(obj);
newsym(x, y);

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 mthrowu.c $NHDT-Date: 1620329778 2021/05/06 19:36:18 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.113 $ */
/* NetHack 3.7 mthrowu.c $NHDT-Date: 1620923922 2021/05/13 16:38:42 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.114 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Pasi Kallinen, 2016. */
/* NetHack may be freely redistributed. See license for details. */
@@ -505,7 +505,7 @@ m_throw(
singleobj->owornmask = 0; /* threw one of multiple weapons in hand? */
if (!canseemon(mon))
singleobj->dknown = 0;
clear_dknown(singleobj); /* singleobj->dknown = 0; */
if ((singleobj->cursed || singleobj->greased) && (dx || dy) && !rn2(7)) {
if (canseemon(mon) && flags.verbose) {