opposite direction of a thrown object didn't bring along the chain
recognize "kirin" as alias for "ki-rin" when asked to create a monster
make unique swallowing monsters (Juiblex) resist magical digging from inside
+correctly account for fuel remaining when lit candles are attached
+ to candelabrum (the previous code would make the game unwinnable if
+ there were 15 or fewer turns remaining)
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
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);
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!",
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 */