heat metal spell is way too strong, instakilled my char with 50-60 hp. Reduce heat duration from 3-6 turns to 1-2 turns.

This commit is contained in:
Rob Pearce 2016-06-01 15:38:06 +10:00
parent 39160a7c24
commit f9a03e40e6
5 changed files with 26 additions and 8 deletions

2
data.c
View File

@ -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);

2
io.c
View File

@ -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]);

20
lf.c
View File

@ -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,10 +25747,21 @@ 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)) {
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)) {
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) {
dt = DT_FIRE;

View File

@ -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) {

View File

@ -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);