diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 08267b61e..b3473abe2 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -1000,6 +1000,7 @@ blind hero was notified when brass lantern burned out even though it isn't warm enough to detect that by touch; manually switching the lantern on or off can be determined that way so still gives on/off message turn on statushilites automatically if any are defined +change poison instakill to damage with attribute and max hp loss Fixes to 3.7.0-x Problems that Were Exposed Via git Repository diff --git a/src/attrib.c b/src/attrib.c index b74fcf5ab..43f3759a3 100644 --- a/src/attrib.c +++ b/src/attrib.c @@ -314,10 +314,21 @@ poisoned(const char *reason, /* controls what messages we display */ i = !fatal ? 1 : rn2(fatal + (thrown_weapon ? 20 : 0)); if (i == 0 && typ != A_CHA) { - /* instant kill */ - u.uhp = -1; - g.context.botl = TRUE; - pline_The("poison was deadly..."); + /* sometimes survivable instant kill */ + loss = 6 + d(4, 6); + if (u.uhp <= loss) { + u.uhp = -1; + g.context.botl = TRUE; + pline_The("poison was deadly..."); + } else { + /* survived, but with severe reaction */ + u.uhpmax = max(3, u.uhpmax - (loss / 2)); + losehp(loss, pkiller, kprefix); /* poison damage */ + if (adjattrib(A_CON, (typ != A_CON) ? -1 : -3, TRUE)) + poisontell(A_CON, TRUE); + if (typ != A_CON && adjattrib(typ, -3, 1)) + poisontell(typ, TRUE); + } } else if (i > 5) { boolean cloud = !strcmp(reason, "gas cloud");