still more Master Key of Thievery
Make #untrap while carrying the non-cursed (for rogues) or blessed (for non-rogues) Key work the same as #invoke has been doing (without regard to its bless/curse state): when used on trapped door or chest, that trap will always be found and disarming it will always succeed. It should work when carried by monsters too: if they try to open a trapped door while carrying the Key (must be blessed since they're not rogues) the trap will be automatically disarmed. (Caveat: that hasn't been adequately tested.) TODO (maybe...): change the #invoke property to detect unseen/secret door detection instead of #untrap. The latter isn't completely redundant; it works when the Key is cursed. But quest artifacts strongly resist becoming cursed so that isn't a particularly useful distinction. Also, trap hints when wielding the Key without gloves didn't notice adjacent door and chest traps. Now it does. And the behavior is slightly different: known traps covered by objects or monsters are treated like unknown traps as far as the hot/cold hints go.
This commit is contained in:
16
src/lock.c
16
src/lock.c
@@ -18,7 +18,6 @@ STATIC_PTR int NDECL(picklock);
|
||||
STATIC_PTR int NDECL(forcelock);
|
||||
|
||||
STATIC_DCL const char *NDECL(lock_action);
|
||||
STATIC_DCL boolean FDECL(is_magic_key, (struct monst *, struct obj *));
|
||||
STATIC_DCL boolean FDECL(obstructed, (int, int, BOOLEAN_P));
|
||||
STATIC_DCL void FDECL(chest_shatter_msg, (struct obj *));
|
||||
|
||||
@@ -275,21 +274,6 @@ maybe_reset_pick()
|
||||
reset_pick();
|
||||
}
|
||||
|
||||
/* Master Key is magic key if its bless/curse state meets our criteria:
|
||||
not cursed for rogues or blessed for non-rogues */
|
||||
STATIC_OVL boolean
|
||||
is_magic_key(mon, obj)
|
||||
struct monst *mon; /* if null, non-rogue is assumed */
|
||||
struct obj *obj;
|
||||
{
|
||||
if (((obj && obj->oartifact == ART_MASTER_KEY_OF_THIEVERY)
|
||||
&& ((mon == &youmonst) ? Role_if(PM_ROGUE)
|
||||
: (mon && mon->data == &mons[PM_ROGUE])))
|
||||
? !obj->cursed : obj->blessed)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* for doapply(); if player gives a direction or resumes an interrupted
|
||||
previous attempt then it costs hero a move even if nothing ultimately
|
||||
happens; when told "can't do that" before being asked for direction
|
||||
|
||||
Reference in New Issue
Block a user