diff --git a/doc/fixes36.1 b/doc/fixes36.1 index 68dacfdab..d990e736c 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -185,6 +185,9 @@ wand/spell/breath zaps that reached the edge of the level on the Plane of Air stop amulets and other items which aren't affected by erosion damage from being subjected to erosion damage grammar bit: polyself w/ gender change yielded "you turn into a Elvenking" +some blindness cures ignored u.ucreamed +some instances of stun or confusion timers were being overridden rather than + incremented when new stun or confusion damage was suffered Platform- and/or Interface-Specific Fixes diff --git a/src/eat.c b/src/eat.c index 269fcaf28..4c69cf147 100644 --- a/src/eat.c +++ b/src/eat.c @@ -1502,7 +1502,9 @@ struct obj *obj; make_confused(HConfusion + d(2, 4), FALSE); } else if (!rn2(4) && !Blind) { pline("Everything suddenly goes dark."); - make_blinded((long) d(2, 10), FALSE); + /* hero is not Blind, but Blinded timer might be nonzero if + blindness is being overridden by the Eyes of the Overworld */ + make_blinded((Blinded & TIMEOUT) + (long) d(2, 10), FALSE); if (!Blind) Your1(vision_clears); } else if (!rn2(3)) { @@ -1785,6 +1787,9 @@ struct obj *otmp; #endif } else if (otmp->otyp == EGG && stale_egg(otmp)) { pline("Ugh. Rotten egg."); /* perhaps others like it */ + /* increasing existing nausea means that it will take longer + before eventual vomit, but also means that constitution + will be abused more times before illness completes */ make_vomiting((Vomiting & TIMEOUT) + (long) d(10, 4), TRUE); } else { give_feedback: diff --git a/src/mhitu.c b/src/mhitu.c index f7f0afde2..9f3d70b14 100644 --- a/src/mhitu.c +++ b/src/mhitu.c @@ -2147,10 +2147,15 @@ register struct attack *mattk; /* not blind at this point implies you're wearing the Eyes of the Overworld; make them block this particular stun attack too */ - if (!Blind) + if (!Blind) { Your1(vision_clears); - else - make_stunned((long) d(1, 3), TRUE); + } else { + long oldstun = (HStun & TIMEOUT), newstun = (long) rnd(3); + + /* we don't want to increment stun duration every time + or sighted hero will become incapacitated */ + make_stunned(max(oldstun, newstun), TRUE); + } } } break; diff --git a/src/potion.c b/src/potion.c index 53de9e8d9..568c48d99 100644 --- a/src/potion.c +++ b/src/potion.c @@ -1090,8 +1090,12 @@ register boolean curesick, cureblind; u.uhp = (u.uhpmax += nxtra); } } - if (cureblind) + if (cureblind) { + /* 3.6.1: it's debatible whether healing magic should clean off + mundane 'dirt', but if it doesn't, blindness isn't cured */ + u.ucreamed = 0; make_blinded(0L, TRUE); + } if (curesick) { make_vomiting(0L, TRUE); make_sick(0L, (char *) 0, TRUE, SICK_ALL); diff --git a/src/pray.c b/src/pray.c index 4c2df62a6..604e0663f 100644 --- a/src/pray.c +++ b/src/pray.c @@ -289,7 +289,7 @@ worst_cursed_item() } else if (uright && uright->cursed) { /* right ring */ otmp = uright; } else if (ublindf && ublindf->cursed) { /* eyewear */ - otmp = ublindf; /* must be non-blinding lenses */ + otmp = ublindf; /* must be non-blinding lenses */ /* if weapon wasn't handled above, do it now */ } else if (welded(uwep)) { /* weapon */ otmp = uwep; @@ -1048,8 +1048,15 @@ aligntyp g_align; ABASE(A_STR) = AMAX(A_STR); if (u.uhunger < 900) init_uhunger(); + /* luck couldn't have been negative at start of prayer because + the prayer would have failed, but might have been decremented + due to a timed event (delayed death of peaceful monster hit + by hero-created stinking cloud) during the praying interval */ if (u.uluck < 0) u.uluck = 0; + /* superfluous; if hero was blinded we'd be handling trouble + rather than issuing a pat-on-head */ + u.ucreamed = 0; make_blinded(0L, TRUE); context.botl = 1; break; diff --git a/src/sit.c b/src/sit.c index b91da1581..b39df58ea 100644 --- a/src/sit.c +++ b/src/sit.c @@ -184,6 +184,7 @@ dosit() if (u.uhp >= (u.uhpmax - 5)) u.uhpmax += 4; u.uhp = u.uhpmax; + u.ucreamed = 0; make_blinded(0L, TRUE); make_sick(0L, (char *) 0, FALSE, SICK_ALL); heal_legs(); diff --git a/src/spell.c b/src/spell.c index 6110a8472..a8adba34c 100644 --- a/src/spell.c +++ b/src/spell.c @@ -866,8 +866,8 @@ int spell; break; case 7: case 8: - make_stunned(old_conf + 2L * duration / 3L, FALSE); /* 20% */ - make_confused(old_stun + duration / 3L, FALSE); + make_stunned(old_stun + 2L * duration / 3L, FALSE); /* 20% */ + make_confused(old_conf + duration / 3L, FALSE); break; case 9: make_stunned(old_stun + duration, FALSE); /* 10% */