github issue #828 - confuse monster effect when \

hero is invisible without being able to see invisible

Issue reported by EndHack:  you could see your hands glow red when
reading a scroll of confuse monster or casting the spell of confuse
monster even if you were unable to see yourself.

Switch to the blind feedback (tingling instead of glowing red) if
invisible without see invisible.

Also, have uncursed scroll or low skilled spell confer 1..2 turns
of glowing hands instead of always just 1.  (Blessed/highly skilled
stays at 2..9 turns.)

Fixes #828
This commit is contained in:
PatR
2022-07-28 13:42:35 -07:00
parent cb9044c23f
commit a9fec4e0ae
3 changed files with 30 additions and 21 deletions

View File

@@ -981,6 +981,8 @@ allow cutting a known spider web with wielded weapon by force-fighting the web
holes and trapdoors have a fixed exit level
recent changes to losedogs() could result in an infinite loop when migrating
monsters try to arrive as hero moves to a different level
when invisible without see invisible you could see your hands glowing red
after reading a scroll of confuse monster and delivering melee hits
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository

View File

@@ -1273,9 +1273,10 @@ static void
seffect_confuse_monster(struct obj **sobjp)
{
struct obj *sobj = *sobjp;
boolean sblessed = sobj->blessed;
boolean scursed = sobj->cursed;
boolean confused = (Confusion != 0);
boolean sblessed = sobj->blessed,
scursed = sobj->cursed,
confused = (Confusion != 0),
altfeedback = (Blind || Invisible);
if (g.youmonst.data->mlet != S_HUMAN || scursed) {
if (!HConfusion)
@@ -1284,36 +1285,38 @@ seffect_confuse_monster(struct obj **sobjp)
} else if (confused) {
if (!sblessed) {
Your("%s begin to %s%s.", makeplural(body_part(HAND)),
Blind ? "tingle" : "glow ",
Blind ? "" : hcolor(NH_PURPLE));
altfeedback ? "tingle" : "glow ",
altfeedback ? "" : hcolor(NH_PURPLE));
make_confused(HConfusion + rnd(100), FALSE);
} else {
pline("A %s%s surrounds your %s.",
Blind ? "" : hcolor(NH_RED),
Blind ? "faint buzz" : " glow", body_part(HEAD));
altfeedback ? "" : hcolor(NH_RED),
altfeedback ? "faint buzz" : " glow", body_part(HEAD));
make_confused(0L, TRUE);
}
} else {
int incr = 0;
if (!sblessed) {
Your("%s%s %s%s.", makeplural(body_part(HAND)),
Blind ? "" : " begin to glow",
Blind ? (const char *) "tingle" : hcolor(NH_RED),
altfeedback ? "" : " begin to glow",
altfeedback ? (const char *) "tingle" : hcolor(NH_RED),
u.umconf ? " even more" : "");
u.umconf++;
incr = rnd(2);
} else {
if (Blind)
if (altfeedback)
Your("%s tingle %s sharply.", makeplural(body_part(HAND)),
u.umconf ? "even more" : "very");
else
Your("%s glow a%s brilliant %s.",
Your("%s glow %s brilliant %s.",
makeplural(body_part(HAND)),
u.umconf ? "n even more" : "", hcolor(NH_RED));
/* after a while, repeated uses become less effective */
if (u.umconf >= 40)
u.umconf++;
else
u.umconf += rn1(8, 2);
u.umconf ? "an even more" : "a", hcolor(NH_RED));
incr = rn1(8, 2);
}
/* after a while, repeated uses become less effective */
if (u.umconf >= 40)
incr = 1;
u.umconf += (unsigned) incr;
}
}

View File

@@ -5435,17 +5435,21 @@ RESTORE_WARNING_FORMAT_NONLITERAL
static void
nohandglow(struct monst *mon)
{
char *hands = makeplural(body_part(HAND));
char *hands;
boolean altfeedback;
if (!u.umconf || mon->mconf)
return;
hands = makeplural(body_part(HAND));
altfeedback = (Blind || Invisible); /* Invisible == Invis && !See_invis */
if (u.umconf == 1) {
if (Blind)
if (altfeedback)
Your("%s stop tingling.", hands);
else
Your("%s stop glowing %s.", hands, hcolor(NH_RED));
} else {
if (Blind)
if (altfeedback)
pline_The("tingling in your %s lessens.", hands);
else
Your("%s no longer glow so brightly %s.", hands, hcolor(NH_RED));