Correct timing when attaching lit candles to the candelabrum

Before this commit, attaching a lit candle would reduce the amount
of fuel in the candelabrum to 0, 15 or 75 turns due to a failure to
account for time stored in the candle's burn timer. Fixing this is
very important because a time of 0 turns on the candelabrum is not
supposed to be possible.
This commit is contained in:
Alex Smith
2020-03-19 19:56:16 +00:00
parent a142ac8140
commit dd6ebbacea
2 changed files with 16 additions and 4 deletions

View File

@@ -1215,12 +1215,14 @@ struct obj **optr;
register struct obj *otmp;
const char *s = (obj->quan != 1) ? "candles" : "candle";
char qbuf[QBUFSZ], qsfx[QBUFSZ], *q;
boolean was_lamplit;
if (u.uswallow) {
You(no_elbow_room);
return;
}
/* obj is the candle; otmp is the candelabrum */
otmp = carrying(CANDELABRUM_OF_INVOCATION);
if (!otmp || otmp->spe == 7) {
use_lamp(obj);
@@ -1247,14 +1249,23 @@ struct obj **optr;
s = (obj->quan != 1) ? "candles" : "candle";
} else
*optr = 0;
/* The candle's age field doesn't correctly reflect the amount
of fuel in it while it's lit, because the fuel is measured
by the timer. So to get accurate age updating, we need to
end the burn temporarily while attaching the candle. */
was_lamplit = obj->lamplit;
if (was_lamplit)
end_burn(obj, TRUE);
You("attach %ld%s %s to %s.", obj->quan, !otmp->spe ? "" : " more", s,
the(xname(otmp)));
if (!otmp->spe || otmp->age > obj->age)
otmp->age = obj->age;
otmp->spe += (int) obj->quan;
if (otmp->lamplit && !obj->lamplit)
if (otmp->lamplit && !was_lamplit)
pline_The("new %s magically %s!", s, vtense(s, "ignite"));
else if (!otmp->lamplit && obj->lamplit)
else if (!otmp->lamplit && was_lamplit)
pline("%s out.", (obj->quan > 1L) ? "They go" : "It goes");
if (obj->unpaid)
verbalize("You %s %s, you bought %s!",
@@ -1268,8 +1279,6 @@ struct obj **optr;
if (otmp->lamplit)
obj_merge_light_sources(otmp, otmp);
/* candles are no longer a separate light source */
if (obj->lamplit)
end_burn(obj, TRUE);
/* candles are now gone */
useupall(obj);
/* candelabrum's weight is changing */