From 3d97eafe18ba78f9f9842f0b220ce0800bf0ab55 Mon Sep 17 00:00:00 2001 From: "nethack.rankin" Date: Tue, 3 Jan 2006 05:28:13 +0000 Subject: [PATCH] fix #H11 - forcing lock with mattock From a bug report: dwarvish mattock was subject to breaking when attempting to force a lock, because it is treated as a bladed weapon. So is pick-axe; they're both defined as blunt (WHACK attack mode), but the definition of is_blade() erroneously includes them since P_PICK_AXE falls between P_DAGGER and P_SABER. That skill should be renumbered, but I haven't investigated what else might happen when that's done so this fix uses a special case instead. I noticed that there was an unnecessary old check for rubber hose; it's excluded along with whip by the skill > P_LANCE test. When fixing that up, I realized that the obscure feature of forcing via statue was broken; it always failed the skill < P_DAGGER test. Also, I took away the exception for aklys; even though designed as a throwing weapon, it is used as a club. I wasn't sure about the exception for flail; it is perfectly capable of bashing things but the code apparently excludes it for use as a prying implement. Switching its check to P_FLAIL catches grappling hook along with it. --- doc/fixes34.4 | 2 ++ src/lock.c | 29 ++++++++++++++--------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/doc/fixes34.4 b/doc/fixes34.4 index b99520276..d54af647a 100644 --- a/doc/fixes34.4 +++ b/doc/fixes34.4 @@ -175,6 +175,8 @@ large amorphous, whirly, noncorporeal, or slithy creatures can fit through tight diagonal gaps despite their size avoid "You summoned it!" for unseen monster produced by same-race offering recognize "mindflayer" as an alternative spelling for "mind flayer" +treat mattock as blunt object when forcing locks +restore capability to force locks with wielded statue Platform- and/or Interface-Specific Fixes diff --git a/src/lock.c b/src/lock.c index 43e9df0af..f13f1cdba 100644 --- a/src/lock.c +++ b/src/lock.c @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)lock.c 3.5 2005/06/02 */ +/* SCCS Id: @(#)lock.c 3.5 2006/01/02 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -11,7 +11,8 @@ STATIC_PTR int NDECL(forcelock); STATIC_VAR NEARDATA struct xlock_s { struct rm *door; struct obj *box; - int picktyp, chance, usedtime; + int picktyp, /* key|pick|card for unlock, sharp vs blunt for #force */ + chance, usedtime; } xlock; STATIC_DCL const char *NDECL(lock_action); @@ -435,22 +436,20 @@ doforce() /* try to force a chest with your weapon */ register int c, picktyp; char qbuf[QBUFSZ]; - if(!uwep || /* proper type test */ - (uwep->oclass != WEAPON_CLASS && !is_weptool(uwep) && - uwep->oclass != ROCK_CLASS) || - (objects[uwep->otyp].oc_skill < P_DAGGER) || - (objects[uwep->otyp].oc_skill > P_LANCE) || - uwep->otyp == FLAIL || uwep->otyp == AKLYS -#ifdef KOPS - || uwep->otyp == RUBBER_HOSE -#endif - ) { - You_cant("force anything without a %sweapon.", - (uwep) ? "proper " : ""); + if (!uwep || /* proper type test */ + ((uwep->oclass == WEAPON_CLASS || is_weptool(uwep)) ? + (objects[uwep->otyp].oc_skill < P_DAGGER || + objects[uwep->otyp].oc_skill == P_FLAIL || + objects[uwep->otyp].oc_skill > P_LANCE) : + uwep->oclass != ROCK_CLASS)) { + You_cant("force anything %s weapon.", + !uwep ? "when not wielding a" : + (uwep->oclass != WEAPON_CLASS && !is_weptool(uwep)) ? + "without a proper" : "with that"); return(0); } - picktyp = is_blade(uwep); + picktyp = is_blade(uwep) && !is_pick(uwep); if(xlock.usedtime && xlock.box && picktyp == xlock.picktyp) { You("resume your attempt to force the lock."); set_occupation(forcelock, "forcing the lock", 0); -- 2.40.0