]> granicus.if.org Git - nethack/commitdiff
tweaks to role-specific prediscovered objects
authorPatR <rankin@nethack.org>
Sun, 16 May 2021 02:13:29 +0000 (19:13 -0700)
committerPatR <rankin@nethack.org>
Sun, 16 May 2021 02:13:29 +0000 (19:13 -0700)
Characters who start out knowing non-magic armor should not know
cornuthaum and dunce cap.  (Which suggests that those probably
ought to be classified as magic.)

Take away knowledge of polearms from barbarians and valkyries.

Add knowledge of all bows/crossbows, arrows/bolts, and spears to
rangers.

Add knowledge of all daggers to rogues.  (Very minor; non-elves
recognize elven daggers and non-orcs recognize orcish daggers.)

doc/fixes37.0
src/u_init.c

index 5dab079e1c446f2e48c6313b1720c4cdf4ec7d27..6c3b9fffd9bbd7f6fe82a44ae8a1ba90cca2a9de 100644 (file)
@@ -1,4 +1,4 @@
-NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.533 $ $NHDT-Date: 1621037617 2021/05/15 00:13:37 $
+NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.534 $ $NHDT-Date: 1621131203 2021/05/16 02:13:23 $
 
 General Fixes and Modified Features
 -----------------------------------
@@ -514,6 +514,11 @@ suppress "This <foo> corpse takes {delicious|okay|terrible}" if preceded by
        poisonous"
 innocuous items like scrolls or eucalyptus leaves did harm when falling on
        hero's head after being thrown upward
+fighter types who start out knowing all non-magic armor should not know
+       cornuthaum and dunce cap
+prediscovered weapons adjustmens:  only knights and samurai know polearms;
+       rangers know launchers (bows), ammo (arrows), and spears regardless
+       of their race/species; likewise, rogues know all daggers
 
 
 Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
index 4c069f3d7ba2ab95ae5623a25399388c797afb6f..45a0012f514d17ee1235903a0a33fbe653436862 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.7 u_init.c        $NHDT-Date: 1606009005 2020/11/22 01:36:45 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.72 $ */
+/* NetHack 3.7 u_init.c        $NHDT-Date: 1621131203 2021/05/16 02:13:23 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.75 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /*-Copyright (c) Robert Patrick Rankin, 2017. */
 /* NetHack may be freely redistributed.  See license for details. */
@@ -565,15 +565,46 @@ knows_object(int obj)
 }
 
 /* Know ordinary (non-magical) objects of a certain class,
- * like all gems except the loadstone and luckstone.
- */
+   like all gems except the loadstone and luckstone. */
 static void
 knows_class(char sym)
 {
-    register int ct;
-    for (ct = 1; ct < NUM_OBJECTS; ct++)
+    struct obj odummy, *o;
+    int ct;
+
+    odummy = cg.zeroobj;
+    odummy.oclass = sym;
+    o = &odummy; /* for use in various obj.h macros */
+
+    /*
+     * Note:  the exceptions here can be bypassed if necessary by
+     *        calling knows_object() directly.  So an elven ranger,
+     *        for example, knows all elven weapons despite the bow,
+     *        arrow, and spear limitation below.
+     */
+
+    for (ct = g.bases[(uchar) sym]; ct < g.bases[(uchar) sym + 1]; ct++) {
+        /* not flagged as magic but shouldn't be pre-discovered */
+        if (ct == CORNUTHAUM || ct == DUNCE_CAP)
+            continue;
+        if (sym == WEAPON_CLASS) {
+            odummy.otyp = ct; /* update 'o' */
+            /* arbitrary: only knights and samurai recognize polearms */
+            if ((!Role_if(PM_KNIGHT) && !Role_if(PM_SAMURAI)) && is_pole(o))
+                continue;
+            /* rangers know all launchers (bows, &c), ammo (arrows, &c),
+               and spears regardless of race/species, but not other weapons */
+            if (Role_if(PM_RANGER)
+                && (!is_launcher(o) && !is_ammo(o) && !is_spear(o)))
+                continue;
+            /* rogues know daggers, regardless of racial variations */
+            if (Role_if(PM_ROGUE) && (objects[o->otyp].oc_skill != P_DAGGER))
+                continue;
+        }
+
         if (objects[ct].oc_class == sym && !objects[ct].oc_magic)
             knows_object(ct);
+    }
 }
 
 void
@@ -682,7 +713,7 @@ u_init(void)
         ini_inv(Barbarian);
         if (!rn2(6))
             ini_inv(Lamp);
-        knows_class(WEAPON_CLASS);
+        knows_class(WEAPON_CLASS); /* excluding polearms */
         knows_class(ARMOR_CLASS);
         skill_init(Skill_B);
         break;
@@ -701,7 +732,7 @@ u_init(void)
         break;
     case PM_KNIGHT:
         ini_inv(Knight);
-        knows_class(WEAPON_CLASS);
+        knows_class(WEAPON_CLASS); /* all weapons */
         knows_class(ARMOR_CLASS);
         /* give knights chess-like mobility--idea from wooledge@..cwru.edu */
         HJumping |= FROMOUTSIDE;
@@ -742,6 +773,7 @@ u_init(void)
         Ranger[RAN_TWO_ARROWS].trquan = rn1(10, 50);
         Ranger[RAN_ZERO_ARROWS].trquan = rn1(10, 30);
         ini_inv(Ranger);
+        knows_class(WEAPON_CLASS); /* bows, arrows, spears only */
         skill_init(Skill_Ran);
         break;
     case PM_ROGUE:
@@ -751,6 +783,7 @@ u_init(void)
         if (!rn2(5))
             ini_inv(Blindfold);
         knows_object(SACK);
+        knows_class(WEAPON_CLASS); /* daggers only */
         skill_init(Skill_R);
         break;
     case PM_SAMURAI:
@@ -758,7 +791,7 @@ u_init(void)
         ini_inv(Samurai);
         if (!rn2(5))
             ini_inv(Blindfold);
-        knows_class(WEAPON_CLASS);
+        knows_class(WEAPON_CLASS); /* all weapons */
         knows_class(ARMOR_CLASS);
         skill_init(Skill_S);
         break;
@@ -780,7 +813,7 @@ u_init(void)
         ini_inv(Valkyrie);
         if (!rn2(6))
             ini_inv(Lamp);
-        knows_class(WEAPON_CLASS);
+        knows_class(WEAPON_CLASS); /* excludes polearms */
         knows_class(ARMOR_CLASS);
         skill_init(Skill_V);
         break;