]> granicus.if.org Git - nethack/commitdiff
Using a cursed tin whistle in a vault summons the guard
authorPasi Kallinen <paxed@alt.org>
Fri, 4 Aug 2017 19:41:26 +0000 (22:41 +0300)
committerPasi Kallinen <paxed@alt.org>
Fri, 4 Aug 2017 19:41:26 +0000 (22:41 +0300)
...since guards respond to shrill whistles.
Based on a patch by Leon Arnott.

doc/fixes36.1
include/extern.h
include/hack.h
src/apply.c
src/vault.c

index 73803752a28d31f5660a189980db2beeacecf706..c29309ad383165872f8acd4b7a3c52a09f96dc98 100644 (file)
@@ -405,6 +405,7 @@ fix the 'A' command to have the 'D' command's fix for C331-1 (quirk for
        response, to operate on applicable all items, there would still be a
        followup menu asking to choose specific items)
 eating 1 tin from stack of N (for N >= 2) on shop's floor forced hero to buy 2
+using a cursed whistle in a vault will summon the guard immediately
 
 
 Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository
index c65148d2718e13df298d593fecab64b56ce8d357..7d49b29d169717e04281ee4a0aa09e5f7697414f 100644 (file)
@@ -2510,6 +2510,7 @@ E int FDECL(hide_privileges, (BOOLEAN_P));
 E void FDECL(newegd, (struct monst *));
 E void FDECL(free_egd, (struct monst *));
 E boolean FDECL(grddead, (struct monst *));
+E void NDECL(vault_summon_gd);
 E char FDECL(vault_occupied, (char *));
 E void NDECL(invault);
 E int FDECL(gd_move, (struct monst *));
index dffb26c5c35175c741df5022ee48579f3b6c5f60..c4691ae269dfbe5d45b0687bdacc0d0d130a1cfd 100644 (file)
@@ -34,6 +34,9 @@ enum encumbrance_types {
 /* weight increment of heavy iron ball */
 #define IRON_BALL_W_INCR 160
 
+/* number of turns it takes for vault guard to show up */
+#define VAULT_GUARD_TIME 30
+
 /* hunger states - see hu_stat in eat.c */
 enum hunger_state_types {
     SATIATED = 0,
index fca3f8e36f2d237fd002ca49453133bde9da766f..6337eb49d0904b2ad07a38096f84e9e8f30d12bd 100644 (file)
@@ -445,6 +445,8 @@ struct obj *obj;
     } else {
         You(whistle_str, obj->cursed ? "shrill" : "high");
         wake_nearby();
+        if (obj->cursed)
+            vault_summon_gd();
     }
 }
 
index f076986f5b837340db078f79835956290545578e..296116c5320ca31e6cb67fc549c4ca3146ca95a1 100644 (file)
@@ -191,6 +191,13 @@ findgd()
     return (struct monst *) 0;
 }
 
+void
+vault_summon_gd()
+{
+    if (vault_occupied(u.urooms) && !findgd())
+        u.uinvault = (VAULT_GUARD_TIME - 1);
+}
+
 char
 vault_occupied(array)
 char *array;
@@ -221,7 +228,8 @@ invault()
     vaultroom -= ROOMOFFSET;
 
     guard = findgd();
-    if (++u.uinvault % 30 == 0 && !guard) { /* if time ok and no guard now. */
+    if (++u.uinvault % VAULT_GUARD_TIME == 0 && !guard) {
+        /* if time ok and no guard now. */
         char buf[BUFSZ];
         register int x, y, dd, gx, gy;
         int lx = 0, ly = 0;