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:
@@ -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 *);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
30
src/invent.c
30
src/invent.c
@@ -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 {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
10
src/wield.c
10
src/wield.c
@@ -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")) {
|
||||||
|
|||||||
Reference in New Issue
Block a user