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.
This commit is contained in:
nethack.rankin
2006-01-03 05:28:13 +00:00
parent fe5d79c859
commit 3d97eafe18
2 changed files with 16 additions and 15 deletions
+2
View File
@@ -175,6 +175,8 @@ large amorphous, whirly, noncorporeal, or slithy creatures can fit through
tight diagonal gaps despite their size tight diagonal gaps despite their size
avoid "You summoned it!" for unseen monster produced by same-race offering avoid "You summoned it!" for unseen monster produced by same-race offering
recognize "mindflayer" as an alternative spelling for "mind flayer" 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 Platform- and/or Interface-Specific Fixes
+14 -15
View File
@@ -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. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -11,7 +11,8 @@ STATIC_PTR int NDECL(forcelock);
STATIC_VAR NEARDATA struct xlock_s { STATIC_VAR NEARDATA struct xlock_s {
struct rm *door; struct rm *door;
struct obj *box; struct obj *box;
int picktyp, chance, usedtime; int picktyp, /* key|pick|card for unlock, sharp vs blunt for #force */
chance, usedtime;
} xlock; } xlock;
STATIC_DCL const char *NDECL(lock_action); STATIC_DCL const char *NDECL(lock_action);
@@ -435,22 +436,20 @@ doforce() /* try to force a chest with your weapon */
register int c, picktyp; register int c, picktyp;
char qbuf[QBUFSZ]; char qbuf[QBUFSZ];
if(!uwep || /* proper type test */ if (!uwep || /* proper type test */
(uwep->oclass != WEAPON_CLASS && !is_weptool(uwep) && ((uwep->oclass == WEAPON_CLASS || is_weptool(uwep)) ?
uwep->oclass != ROCK_CLASS) || (objects[uwep->otyp].oc_skill < P_DAGGER ||
(objects[uwep->otyp].oc_skill < P_DAGGER) || objects[uwep->otyp].oc_skill == P_FLAIL ||
(objects[uwep->otyp].oc_skill > P_LANCE) || objects[uwep->otyp].oc_skill > P_LANCE) :
uwep->otyp == FLAIL || uwep->otyp == AKLYS uwep->oclass != ROCK_CLASS)) {
#ifdef KOPS You_cant("force anything %s weapon.",
|| uwep->otyp == RUBBER_HOSE !uwep ? "when not wielding a" :
#endif (uwep->oclass != WEAPON_CLASS && !is_weptool(uwep)) ?
) { "without a proper" : "with that");
You_cant("force anything without a %sweapon.",
(uwep) ? "proper " : "");
return(0); return(0);
} }
picktyp = is_blade(uwep); picktyp = is_blade(uwep) && !is_pick(uwep);
if(xlock.usedtime && xlock.box && picktyp == xlock.picktyp) { if(xlock.usedtime && xlock.box && picktyp == xlock.picktyp) {
You("resume your attempt to force the lock."); You("resume your attempt to force the lock.");
set_occupation(forcelock, "forcing the lock", 0); set_occupation(forcelock, "forcing the lock", 0);