From: Pasi Kallinen Date: Sun, 13 Dec 2020 10:28:42 +0000 (+0200) Subject: Make Death revive faster X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=472906284699b9affccdce264e383b3474d62300;p=nethack Make Death revive faster Death will revive faster than the other riders. Make all the riders revive after 67 turns, instead of 500. There was practically a zero chance a rider would revive at 500, so keep it somewhat sensible. --- diff --git a/doc/fixes37.0 b/doc/fixes37.0 index 747429504..01ae61a10 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -336,6 +336,7 @@ when fire damage dried a wet towel, it would never reduce the wetness to 0 when water damage wet a towel, the new wetness might randomly become less when the wetness of a towel in inventory changed, persistent inventory wasn't updated to show that +make Death revive earlier, and all the Riders after 67 turns at latest Fixes to 3.7.0-x Problems that Were Exposed Via git Repository diff --git a/include/extern.h b/include/extern.h index cef35a4d8..ee4d78f68 100644 --- a/include/extern.h +++ b/include/extern.h @@ -1415,6 +1415,7 @@ E struct obj *FDECL(mk_named_object, (int, struct permonst *, int, int, const char *)); E struct obj *FDECL(rnd_treefruit_at, (int, int)); E void FDECL(set_corpsenm, (struct obj *, int)); +E long FDECL(rider_revival_time, (struct obj *, BOOLEAN_P)); E void FDECL(start_corpse_timeout, (struct obj *)); E void FDECL(bless, (struct obj *)); E void FDECL(unbless, (struct obj *)); diff --git a/src/do.c b/src/do.c index f1330eeb0..7090db33e 100644 --- a/src/do.c +++ b/src/do.c @@ -1960,9 +1960,7 @@ long timeout UNUSED; if (is_rider(mptr) && rn2(99)) { /* Rider usually tries again */ action = REVIVE_MON; - for (when = 3L; when < 67L; when++) - if (!rn2(3)) - break; + when = rider_revival_time(body, TRUE); } else { /* rot this corpse away */ You_feel("%sless hassled.", is_rider(mptr) ? "much " : ""); action = ROT_CORPSE; diff --git a/src/mkobj.c b/src/mkobj.c index 07ec33b67..85052e3fd 100644 --- a/src/mkobj.c +++ b/src/mkobj.c @@ -1146,6 +1146,23 @@ int id; } } +/* Return the number of turns after which a Rider corpse revives */ +long +rider_revival_time(body, retry) +struct obj *body; +boolean retry; +{ + long when; + long minturn = retry ? 3L : (body->corpsenm == PM_DEATH) ? 6L : 12L; + + /* Riders have a 1/3 chance per turn of reviving after 12, 6, or 3 turns. + Always revive by 67. */ + for (when = minturn; when < 67L; when++) + if (!rn2(3)) + break; + return when; +} + /* * Start a corpse decay or revive timer. * This takes the age of the corpse into consideration as of 3.4.0. @@ -1178,15 +1195,8 @@ struct obj *body; when += (long) (rnz(rot_adjust) - rot_adjust); if (is_rider(&mons[body->corpsenm])) { - /* - * Riders always revive. They have a 1/3 chance per turn - * of reviving after 12 turns. Always revive by 500. - */ action = REVIVE_MON; - for (when = 12L; when < 500L; when++) - if (!rn2(3)) - break; - + when = rider_revival_time(body, FALSE); } else if (mons[body->corpsenm].mlet == S_TROLL && !no_revival) { long age;