From 7fdaf923679d670492f4c07435e792f1d56c1a4e Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Thu, 30 Apr 2026 09:15:22 +0100 Subject: [PATCH] Reduce generation probabilities of the wand of digging In earlier versions of NetHack, wands of digging generated fairly often, allowing players to do a large amount of digging through the maze walls in Gehennom and giving them a chance of an early escape item. In the current version, the need for both of these things has been reduced: supply chests give a supply of early escape items (including wands of digging), and Gehennom is no longer mostly made of mazes with diggable walls. As such, there is no longer a reason to generate wands of digging in such large numbers, even though it was correct in the past. This commit modifies some of the generation probabilities for wands of digging in order to make them less abundant, in order to work better with the code changes since the previous version. --- doc/fixes3-7-0.txt | 1 + include/objects.h | 8 ++++---- src/makemon.c | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index d9a068c73..65da5b0cf 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -1603,6 +1603,7 @@ when starting a new game as a monk, newsym(0,0) was being called (adjabil -> became level 1; seen 'monster' was the hero who hadn't been placed on the map yet) incorporate a fix to prevent segfault due to rolling boulder trap +wands of digging generate less often lategame Fixes to 3.7.0-x General Problems Exposed Via git Repository diff --git a/include/objects.h b/include/objects.h index 41076db28..b9c35f273 100644 --- a/include/objects.h +++ b/include/objects.h @@ -1453,7 +1453,7 @@ WAND("secret door detection", WAN_SECRET_DOOR_DETECTION), WAND("enlightenment", "crystal", 15, 150, 1, NODIR, GLASS, HI_GLASS, WAN_ENLIGHTENMENT), -WAND("create monster", "maple", 45, 200, 1, NODIR, WOOD, HI_WOOD, +WAND("create monster", "maple", 50, 200, 1, NODIR, WOOD, HI_WOOD, WAN_CREATE_MONSTER), WAND("wishing", "pine", 5, 500, 1, NODIR, WOOD, HI_WOOD, WAN_WISHING), @@ -1477,13 +1477,13 @@ WAND("cancellation", "platinum", 45, 200, 1, IMMEDIATE, PLATINUM, CLR_WHITE, WAN_CANCELLATION), WAND("teleportation", "iridium", 45, 200, 1, IMMEDIATE, METAL, CLR_BRIGHT_CYAN, WAN_TELEPORTATION), -WAND("opening", "zinc", 25, 150, 1, IMMEDIATE, METAL, HI_METAL, +WAND("opening", "zinc", 30, 150, 1, IMMEDIATE, METAL, HI_METAL, WAN_OPENING), -WAND("locking", "aluminum", 25, 150, 1, IMMEDIATE, METAL, HI_METAL, +WAND("locking", "aluminum", 30, 150, 1, IMMEDIATE, METAL, HI_METAL, WAN_LOCKING), WAND("probing", "uranium", 30, 150, 1, IMMEDIATE, METAL, HI_METAL, WAN_PROBING), -WAND("digging", "iron", 55, 150, 1, RAY, IRON, HI_METAL, +WAND("digging", "iron", 40, 150, 1, RAY, IRON, HI_METAL, WAN_DIGGING), /* magic missile ... lightning must be in this order; see buzz() */ WAND("magic missile", "steel", 50, 150, 1, RAY, IRON, HI_METAL, diff --git a/src/makemon.c b/src/makemon.c index 6f158ee01..5cbb98cb3 100644 --- a/src/makemon.c +++ b/src/makemon.c @@ -738,7 +738,7 @@ m_initinv(struct monst *mtmp) break; case S_GIANT: if (ptr == &mons[PM_MINOTAUR]) { - if (!rn2(3) || (gi.in_mklev && Is_earthlevel(&u.uz))) + if (!rn2(8) || (gi.in_mklev && Is_earthlevel(&u.uz))) (void) mongets(mtmp, WAN_DIGGING); } else if (is_giant(ptr)) { for (cnt = rn2((int) (mtmp->m_lev / 2)); cnt; cnt--) {