diff --git a/data.c b/data.c index d247196..d80df04 100644 --- a/data.c +++ b/data.c @@ -4026,7 +4026,7 @@ void initobjects(void) { addflag(lastot->flags, F_EXTRADESC, NA, NA, NA, "Spell power determines how long the magnetic shield will last."); addflag(lastot->flags, F_SPELLSCHOOL, SS_ALLOMANCY, NA, NA, NULL); addflag(lastot->flags, F_SPELLLEVEL, 3, NA, NA, NULL); - addot(OT_S_HEATMETAL, "heat metal", "Causes all metal in the target area to become red hot.", MT_NOTHING, 0, OC_SPELL, SZ_TINY); + addot(OT_S_HEATMETAL, "heat metal", "Causes all metal in the target area to become red hot for 1-2 turns.", MT_NOTHING, 0, OC_SPELL, SZ_TINY); addflag(lastot->flags, F_SPELLSCHOOL, SS_ALLOMANCY, NA, NA, NULL); addflag(lastot->flags, F_SPELLSCHOOL, SS_FIRE, NA, NA, NULL); addflag(lastot->flags, F_SPELLLEVEL, 3, NA, NA, NULL); diff --git a/io.c b/io.c index 6f61b38..46b59ff 100644 --- a/io.c +++ b/io.c @@ -6718,7 +6718,7 @@ char *makedesc_ob(object_t *o, char *retbuf) { } else { snprintf(buf, BUFLEN, "It is in perfect condition."); } - if (playerknowsobhp(o)) { // show exact hp numbers + if (obhpknown(o)) { // show exact hp numbers int pct; pct = (int)(((float)f->val[0] / (float)f->val[1]) * 100.0); snprintf(hpbuf, BUFLEN, " [%d%%, %d/%d hp]", pct, f->val[0], f->val[1]); diff --git a/lf.c b/lf.c index feae708..7fde7db 100644 --- a/lf.c +++ b/lf.c @@ -25709,12 +25709,17 @@ int real_touch(lifeform_t *lf, object_t *o, int onpurpose) { */ // flaming or red-hot objects? - if (!isimmuneto(lf->flags, DT_FIRE, B_FALSE)) { - int resistant = B_FALSE; + if (!isimmuneto(lf->flags, DT_FIRE, B_FALSE)) { // only check for DT_FIRE, no such thing as 'heat resistance' + int resistant = B_FALSE,equipped = B_FALSE; if (isresistantto(lf->flags, DT_FIRE, B_FALSE)) { resistant = B_TRUE; } + // if 'onpurpose = false' and it's equipped, then really the object it touching us. + if (isequipped(o) && (o->pile->owner == lf) && !onpurpose) { + equipped = B_TRUE; + } + getflags(o->flags, retflag, &nretflags, F_ONFIRE, F_HOT, F_NONE); // IMPORTANT - check ONFIRE first! for (i = 0; i < nretflags; i++) { f = retflag[i]; @@ -25742,9 +25747,20 @@ int real_touch(lifeform_t *lf, object_t *o, int onpurpose) { f->known = B_TRUE; getobname(o, obname, o->amt); // get name again after making flag known if (isplayer(lf)) { - msg("^bOw! You burn your hands on %s.",obname); + if (equipped) { + char burnbuf[BUFLEN]; + sprintf(burnbuf, "%s burns you!", obname); + capitalise(burnbuf); + msg("^b%s",burnbuf); + } else { + msg("^bOw! You burn your hands on %s.",obname); + } } else if (cansee(player, lf)) { - msg("%s burns %sself on %s.",lfname, it(lf), obname); + if (equipped) { + msg("%s%s %s burns %s!", lfname, getpossessive(lfname), noprefix(obname), it(lf)); + } else { + msg("%s burns %sself on %s.", lfname, it(lf), obname); + } } snprintf(buf, BUFLEN, "touching %s",obname); if (f->id == F_ONFIRE) { diff --git a/objects.c b/objects.c index 4e847ca..600f087 100644 --- a/objects.c +++ b/objects.c @@ -9816,6 +9816,7 @@ int obgoesinbones(object_t *o) { int obhpknown(object_t *o) { + int showfullhp = B_FALSE; if (isarmour(o) && getskill(player, SK_ARMOUR)) { showfullhp = B_TRUE; } else if (isshield(o) && getskill(player, SK_SHIELDS)) { @@ -9826,6 +9827,7 @@ int obhpknown(object_t *o) { getskill(player, SK_SEWING)) { showfullhp = B_TRUE; } + return showfullhp; } enum DAMTYPE oblastdamtype(object_t *o) { diff --git a/spell.c b/spell.c index d02dead..540d50e 100644 --- a/spell.c +++ b/spell.c @@ -8313,7 +8313,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (cansee(player, target)) { if (seenbyplayer) *seenbyplayer = B_TRUE; } - makehot(o, amt, rnd(3,6)); + makehot(o, amt, rnd(1,2)); } } } @@ -8343,7 +8343,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (seenbyplayer) *seenbyplayer = B_TRUE; donesomething = B_TRUE; } - makehot(o, amt, rnd(3,6)); + makehot(o, amt, rnd(1,2)); if (isplayer(caster)) { char obname[BUFLEN]; getobname(o, obname, o->amt);