addinv_nomerge()

Replace several instances of
 obj->nomerge = 1;
 addinv(obj);
 obj->nomerge = 0;
with new
 addinv_nomerge(obj);
and add various related comments.
This commit is contained in:
PatR
2023-09-19 14:40:33 -07:00
parent 3fdcd5f4e0
commit dd05f5183e
8 changed files with 42 additions and 33 deletions

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 extern.h $NHDT-Date: 1693359531 2023/08/30 01:38:51 $ $NHDT-Branch: keni-crashweb2 $:$NHDT-Revision: 1.1281 $ */ /* NetHack 3.7 extern.h $NHDT-Date: 1695159584 2023/09/19 21:39:44 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1287 $ */
/* Copyright (c) Steve Creps, 1988. */ /* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1148,6 +1148,7 @@ extern void addinv_core1(struct obj *);
extern void addinv_core2(struct obj *); extern void addinv_core2(struct obj *);
extern struct obj *addinv(struct obj *); extern struct obj *addinv(struct obj *);
extern struct obj *addinv_before(struct obj *, struct obj *); extern struct obj *addinv_before(struct obj *, struct obj *);
extern struct obj *addinv_nomerge(struct obj *);
extern struct obj *hold_another_object(struct obj *, const char *, extern struct obj *hold_another_object(struct obj *, const char *,
const char *, const char *); const char *, const char *);
extern void useupall(struct obj *); extern void useupall(struct obj *);

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 apply.c $NHDT-Date: 1685202442 2023/05/27 15:47:22 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.420 $ */ /* NetHack 3.7 apply.c $NHDT-Date: 1695159606 2023/09/19 21:40:06 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.422 $ */
/* 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. */
@@ -3499,9 +3499,7 @@ use_royal_jelly(struct obj **optr)
update_inventory(); /* freeinv() updated perminv w/ obj omitted */ update_inventory(); /* freeinv() updated perminv w/ obj omitted */
} else { } else {
/* this lump was already separate; pervent merge */ /* this lump was already separate; pervent merge */
obj->nomerge = 1; addinv_nomerge(obj); /* put unused lump back; updates perminv */
addinv(obj); /* put the unused lump back; updates perminv */
obj->nomerge = 0;
} }
return ECMD_CANCEL; return ECMD_CANCEL;
} }

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 dothrow.c $NHDT-Date: 1683334246 2023/05/06 00:50:46 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.266 $ */ /* NetHack 3.7 dothrow.c $NHDT-Date: 1695159620 2023/09/19 21:40:20 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.269 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */ /*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1834,9 +1834,9 @@ return_throw_to_inv(
/* if 'obj' wasn't from a stack split or if it wouldn't merge back /* if 'obj' wasn't from a stack split or if it wouldn't merge back
(maybe new erosion damage?) then it needs to be added to invent; (maybe new erosion damage?) then it needs to be added to invent;
don't merge with any other stack even if there is a compatible one don't merge with any other stack even if there is a compatible one
(others with similar erosion?) */ (others with similar erosion?); can't use addinv_nomerge() here */
if (!otmp) { if (!otmp) {
obj->nomerge = 1; obj->nomerge = 1; /* redundant unless 'oldslot' somehow went away */
obj = addinv_before(obj, oldslot); obj = addinv_before(obj, oldslot);
obj->nomerge = 0; obj->nomerge = 0;

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 eat.c $NHDT-Date: 1674294705 2023/01/21 09:51:45 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.301 $ */ /* NetHack 3.7 eat.c $NHDT-Date: 1695159623 2023/09/19 21:40:23 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.310 $ */
/* 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. */
@@ -367,9 +367,7 @@ touchfood(struct obj *otmp)
dropy(otmp); dropy(otmp);
sellobj_state(SELL_NORMAL); sellobj_state(SELL_NORMAL);
} else { } else {
otmp->nomerge = 1; /* used to prevent merge */ otmp = addinv_nomerge(otmp);
otmp = addinv(otmp);
otmp->nomerge = 0;
} }
} }
return otmp; return otmp;

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 invent.c $NHDT-Date: 1672827802 2023/01/04 10:23:22 $ $NHDT-Branch: naming-overflow-fix $:$NHDT-Revision: 1.439 $ */ /* NetHack 3.7 invent.c $NHDT-Date: 1695159625 2023/09/19 21:40:25 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.449 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Derek S. Ray, 2015. */ /*-Copyright (c) Derek S. Ray, 2015. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -860,11 +860,11 @@ addinv_core1(struct obj *obj)
if (is_mines_prize(obj)) { if (is_mines_prize(obj)) {
record_achievement(ACH_MINE_PRIZE); record_achievement(ACH_MINE_PRIZE);
gc.context.achieveo.mines_prize_oid = 0; /* done with luckstone o_id */ gc.context.achieveo.mines_prize_oid = 0; /* done with luckstone o_id */
obj->nomerge = 0; obj->nomerge = 0; /* was set in create_object(sp_lev.c) */
} else if (is_soko_prize(obj)) { } else if (is_soko_prize(obj)) {
record_achievement(ACH_SOKO_PRIZE); record_achievement(ACH_SOKO_PRIZE);
gc.context.achieveo.soko_prize_oid = 0; /* done with bag/amulet o_id */ gc.context.achieveo.soko_prize_oid = 0; /* done with bag/amulet o_id */
obj->nomerge = 0; obj->nomerge = 0; /* (got set in sp_lev.c) */
} }
} }
@@ -914,7 +914,7 @@ addinv_core0(struct obj *obj, struct obj *other_obj,
reset_justpicked(gi.invent); reset_justpicked(gi.invent);
} }
addinv_core1(obj); addinv_core1(obj); /* handle most side effects of carrying obj */
/* for addinv_before(); if something has been removed and is now being /* for addinv_before(); if something has been removed and is now being
reinserted, try to put it in the same place instead of merging or reinserted, try to put it in the same place instead of merging or
@@ -975,7 +975,7 @@ addinv_core0(struct obj *obj, struct obj *other_obj,
setuqwep(obj); setuqwep(obj);
added: added:
obj->pickup_prev = 1; obj->pickup_prev = 1;
addinv_core2(obj); addinv_core2(obj); /* handle extrinsics conferred by carrying obj */
carry_obj_effects(obj); /* carrying affects the obj */ carry_obj_effects(obj); /* carrying affects the obj */
if (update_perm_invent) if (update_perm_invent)
update_inventory(); update_inventory();
@@ -989,13 +989,28 @@ addinv(struct obj *obj)
return addinv_core0(obj, (struct obj *) 0, TRUE); return addinv_core0(obj, (struct obj *) 0, TRUE);
} }
/* add obj to the hero's inventory by inserting in front of a specific item */ /* add obj to the hero's inventory by inserting in front of a specific item;
used for throw-and-return in case '!fixinv' is in effect */
struct obj * struct obj *
addinv_before(struct obj *obj, struct obj *other_obj) addinv_before(struct obj *obj, struct obj *other_obj)
{ {
/* if 'other_obj' is present this will implicitly be 'nomerge' */
return addinv_core0(obj, other_obj, TRUE); return addinv_core0(obj, other_obj, TRUE);
} }
/* return value will always be 'obj' */
struct obj *
addinv_nomerge(struct obj *obj)
{
struct obj *result;
unsigned save_nomerge = obj->nomerge;
obj->nomerge = 1;
result = addinv(obj);
obj->nomerge = save_nomerge;
return result;
}
/* /*
* Some objects are affected by being carried. * Some objects are affected by being carried.
* Make those adjustments here. Called _after_ the object * Make those adjustments here. Called _after_ the object
@@ -1063,7 +1078,8 @@ hold_another_object(
} }
if (Fumbling) { if (Fumbling) {
obj->nomerge = 1; obj->nomerge = 1;
/* dropping expects obj to be in invent */ /* dropping expects obj to be in invent; since it's going to be
dropped, avoid perminv update when temporarily adding it */
obj = addinv_core0(obj, (struct obj *) 0, FALSE); obj = addinv_core0(obj, (struct obj *) 0, FALSE);
goto drop_it; goto drop_it;
} else { } else {

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 nhlua.c $NHDT-Date: 1673740532 2023/01/14 23:55:32 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.95 $ */ /* NetHack 3.7 nhlua.c $NHDT-Date: 1695159626 2023/09/19 21:40:26 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.115 $ */
/* Copyright (c) 2018 by Pasi Kallinen */ /* Copyright (c) 2018 by Pasi Kallinen */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1583,9 +1583,7 @@ nhl_gamestate(lua_State *L)
wornmask = otmp->owornmask; wornmask = otmp->owornmask;
otmp->owornmask = 0L; otmp->owornmask = 0L;
extract_nobj(otmp, &gmst_invent); extract_nobj(otmp, &gmst_invent);
otmp->nomerge = 1; addinv_nomerge(otmp);
addinv(otmp);
otmp->nomerge = 0;
if (wornmask) if (wornmask)
setworn(otmp, wornmask); setworn(otmp, wornmask);
} }

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 sp_lev.c $NHDT-Date: 1646428015 2022/03/04 21:06:55 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.259 $ */ /* NetHack 3.7 sp_lev.c $NHDT-Date: 1695159628 2023/09/19 21:40:28 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.339 $ */
/* Copyright (c) 1989 by Jean-Christophe Collet */ /* Copyright (c) 1989 by Jean-Christophe Collet */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -2349,7 +2349,8 @@ create_object(object *o, struct mkroom *croom)
if (!gc.context.achieveo.mines_prize_oid) { if (!gc.context.achieveo.mines_prize_oid) {
gc.context.achieveo.mines_prize_oid = otmp->o_id; gc.context.achieveo.mines_prize_oid = otmp->o_id;
gc.context.achieveo.mines_prize_otyp = otmp->otyp; gc.context.achieveo.mines_prize_otyp = otmp->otyp;
/* prevent stacking; cleared when achievement is recorded */ /* prevent stacking; cleared when achievement is recorded;
will be reset in addinv_core1() */
otmp->nomerge = 1; otmp->nomerge = 1;
} else { } else {
impossible(prize_warning, "mines end"); impossible(prize_warning, "mines end");
@@ -2358,7 +2359,8 @@ create_object(object *o, struct mkroom *croom)
if (!gc.context.achieveo.soko_prize_oid) { if (!gc.context.achieveo.soko_prize_oid) {
gc.context.achieveo.soko_prize_oid = otmp->o_id; gc.context.achieveo.soko_prize_oid = otmp->o_id;
gc.context.achieveo.soko_prize_otyp = otmp->otyp; gc.context.achieveo.soko_prize_otyp = otmp->otyp;
otmp->nomerge = 1; /* redundant; Sokoban prizes don't stack */ otmp->nomerge = 1; /* redundant; Sokoban prizes don't stack;
* will be reset in addinv_core1() */
} else { } else {
impossible(prize_warning, "sokoban end"); impossible(prize_warning, "sokoban end");
} }

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 wield.c $NHDT-Date: 1650875488 2022/04/25 08:31:28 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.90 $ */ /* NetHack 3.7 wield.c $NHDT-Date: 1695159631 2023/09/19 21:40:31 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.97 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2009. */ /*-Copyright (c) Robert Patrick Rankin, 2009. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -430,9 +430,7 @@ dowield(void)
if (finish_splitting) { if (finish_splitting) {
/* wep was split off from something; give it its own invlet */ /* wep was split off from something; give it its own invlet */
freeinv(wep); freeinv(wep);
wep->nomerge = 1; addinv_nomerge(wep);
addinv(wep);
wep->nomerge = 0;
} }
/* Set your new primary weapon */ /* Set your new primary weapon */
@@ -635,9 +633,7 @@ doquiver_core(const char *verb) /* "ready" or "fire" */
quivering: quivering:
if (finish_splitting) { if (finish_splitting) {
freeinv(newquiver); freeinv(newquiver);
newquiver->nomerge = 1; addinv_nomerge(newquiver);
addinv(newquiver);
newquiver->nomerge = 0;
} }
if (!strcmp(verb, "ready")) { if (!strcmp(verb, "ready")) {