"you suddenly vomit" was given two turns before actually vomiting, so you
could get that message, move a bit, then get "you can move again"
after the 2 turn freeze applied along with the actual vomit
-fix mention_walls reporting secret doors as solid walls
corpses and other flammable items not subject to direct burning or fire-based
erosion which were thrown or dropped into lava remained intact
if a potion on the floor survived a land mine explosion and got propelled at
the hero, it didn't behave like a potion if it hit
+adjust candelabrum's weight when candles are attached
+when lit candelabrum burned out, persistent inventory window showed that it
+ was no longer lit but still showed phantom candles attached
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository
triggering impossible "dmonsfree: 1 removed doesn't match 0 pending"
"you observe a fog cloud where a vampire/bat was" if an unseen vampire on the
far side of a closed door shifted shape to pass under that door
+fix mention_walls reporting secret doors as solid stone
Platform- and/or Interface-Specific Fixes
schar spe; /* quality of weapon, weptool, armor or ring (+ or -);
number of charges for wand or charged tool ( >= -1 );
+ number of candles attached to candelabrum;
marks your eggs, tin variety and spinach tins;
Schroedinger's Box (1) or royal coffers for a court (2);
tells which fruit a fruit is;
end_burn(obj, TRUE);
/* candles are now gone */
useupall(obj);
+ /* candelabrum's weight is changing */
+ otmp->owt = weight(otmp);
+ update_inventory();
}
}
weight(obj)
register struct obj *obj;
{
- int wt = objects[obj->otyp].oc_weight;
+ int wt = (int) objects[obj->otyp].oc_weight;
/* glob absorpsion means that merging globs accumulates weight while
quantity stays 1, so update 'wt' to reflect that, unless owt is 0,
return (int) ((obj->quan + 50L) / 100L);
} else if (obj->otyp == HEAVY_IRON_BALL && obj->owt != 0) {
return (int) obj->owt; /* kludge for "very" heavy iron ball */
+ } else if (obj->otyp == CANDELABRUM_OF_INVOCATION && obj->spe) {
+ return wt + obj->spe * (int) objects[TALLOW_CANDLE].oc_weight;
}
return (wt ? wt * (int) obj->quan : ((int) obj->quan + 1) >> 1);
}
long timeout;
{
struct obj *obj = arg->a_obj;
- boolean canseeit, many, menorah, need_newsym;
+ boolean canseeit, many, menorah, need_newsym, need_invupdate;
xchar x, y;
char whose[BUFSZ];
if (menorah) {
obj->spe = 0; /* no more candles */
+ obj->owt = weight(obj);
} else if (Is_candle(obj) || obj->otyp == POT_OIL) {
/* get rid of candles and burning oil potions;
we know this object isn't carried by hero,
} else {
canseeit = FALSE;
}
- need_newsym = FALSE;
+ need_newsym = need_invupdate = FALSE;
/* obj->age is the age remaining at this point. */
switch (obj->otyp) {
if (canseeit) {
switch (obj->where) {
case OBJ_INVENT:
+ need_invupdate = TRUE;
+ /*FALLTHRU*/
case OBJ_MINVENT:
pline("%spotion of oil has burnt away.", whose);
break;
if (canseeit || obj->where == OBJ_INVENT) {
switch (obj->where) {
case OBJ_INVENT:
+ need_invupdate = TRUE;
+ /*FALLTHRU*/
case OBJ_MINVENT:
if (obj->otyp == BRASS_LANTERN)
pline("%slantern has run out of power.", whose);
if (menorah) {
switch (obj->where) {
case OBJ_INVENT:
+ need_invupdate = TRUE;
+ /*FALLTHRU*/
case OBJ_MINVENT:
pline("%scandelabrum's flame%s.", whose,
many ? "s die" : " dies");
} else {
switch (obj->where) {
case OBJ_INVENT:
+ /* no need_invupdate for update_inventory() necessary;
+ useupall() -> freeinv() handles it */
+ /*FALLTHRU*/
case OBJ_MINVENT:
pline("%s %s consumed!", Yname2(obj),
many ? "are" : "is");
break;
case OBJ_FLOOR:
/*
- You see some wax candles consumed!
- You see a wax candle consumed!
- */
+ You see some wax candles consumed!
+ You see a wax candle consumed!
+ */
You_see("%s%s consumed!", many ? "some " : "",
many ? xname(obj) : an(xname(obj)));
need_newsym = TRUE;
if (menorah) {
obj->spe = 0;
+ obj->owt = weight(obj);
} else {
if (carried(obj)) {
useupall(obj);
}
obj = (struct obj *) 0;
}
- break;
+ break; /* case [age ==] 0 */
default:
/*
if (obj && obj->age)
begin_burn(obj, TRUE);
-
- break;
+ break; /* case [otyp ==] candelabrum|tallow_candle|wax_candle */
default:
impossible("burn_object: unexpeced obj %s", xname(obj));
}
if (need_newsym)
newsym(x, y);
+ if (need_invupdate)
+ update_inventory();
}
/*