]> granicus.if.org Git - nethack/commitdiff
Make Death revive faster
authorPasi Kallinen <paxed@alt.org>
Sun, 13 Dec 2020 10:28:42 +0000 (12:28 +0200)
committerPasi Kallinen <paxed@alt.org>
Sun, 13 Dec 2020 10:28:45 +0000 (12:28 +0200)
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.

doc/fixes37.0
include/extern.h
src/do.c
src/mkobj.c

index 7474295049fccc44997a03176cdd3cf216a3dd32..01ae61a10987673d1b19c6dc5d3eb3f4b1a7b01f 100644 (file)
@@ -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
index cef35a4d8fe11ac0ac814b156dbf647d6c9bff86..ee4d78f68dad86c8af75ed1f3090a53f70570abd 100644 (file)
@@ -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 *));
index f1330eeb05a8ed1d16253fa3d6f289be1f772f7b..7090db33efb82a0a257cc53fc602e49bdbe1e9d1 100644 (file)
--- 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;
index 07ec33b67e53a447d0fa1b9eb4b7ce679b62a5ba..85052e3fd8270ebb08a6b61d12f40b497ecb7009 100644 (file)
@@ -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;