Skip to content

Commit

Permalink
github issue #828 - confuse monster effect when \
Browse files Browse the repository at this point in the history
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
  • Loading branch information
PatR committed Jul 28, 2022
1 parent cb9044c commit a9fec4e
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 21 deletions.
2 changes: 2 additions & 0 deletions doc/fixes3-7-0.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
39 changes: 21 additions & 18 deletions src/read.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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;
}
}

Expand Down
10 changes: 7 additions & 3 deletions src/uhitm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down

0 comments on commit a9fec4e

Please sign in to comment.