more monster intrinsics
Provide more control over message handling for monsters' use of equipment. This fixes the statue revival problem (inappropriate feedback when monster puts on speed boots) mentioned in the earlier "intrinsics of dead monsters" patch.
This commit is contained in:
+2
-1
@@ -2271,7 +2271,8 @@ E void FDECL(setworn, (struct obj *,long));
|
|||||||
E void FDECL(setnotworn, (struct obj *));
|
E void FDECL(setnotworn, (struct obj *));
|
||||||
E void FDECL(mon_set_minvis, (struct monst *));
|
E void FDECL(mon_set_minvis, (struct monst *));
|
||||||
E void FDECL(mon_adjust_speed, (struct monst *,int,struct obj *));
|
E void FDECL(mon_adjust_speed, (struct monst *,int,struct obj *));
|
||||||
E void FDECL(update_mon_intrinsics, (struct monst *,struct obj *,BOOLEAN_P));
|
E void FDECL(update_mon_intrinsics,
|
||||||
|
(struct monst *,struct obj *,BOOLEAN_P,BOOLEAN_P));
|
||||||
E int FDECL(find_mac, (struct monst *));
|
E int FDECL(find_mac, (struct monst *));
|
||||||
E void FDECL(m_dowear, (struct monst *,BOOLEAN_P));
|
E void FDECL(m_dowear, (struct monst *,BOOLEAN_P));
|
||||||
E struct obj *FDECL(which_armor, (struct monst *,long));
|
E struct obj *FDECL(which_armor, (struct monst *,long));
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* SCCS Id: @(#)dog.c 3.4 2002/03/09 */
|
/* SCCS Id: @(#)dog.c 3.4 2002/09/08 */
|
||||||
/* 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. */
|
||||||
|
|
||||||
@@ -152,7 +152,7 @@ makedog()
|
|||||||
otmp->dknown = otmp->bknown = otmp->rknown = 1;
|
otmp->dknown = otmp->bknown = otmp->rknown = 1;
|
||||||
otmp->owornmask = W_SADDLE;
|
otmp->owornmask = W_SADDLE;
|
||||||
otmp->leashmon = mtmp->m_id;
|
otmp->leashmon = mtmp->m_id;
|
||||||
update_mon_intrinsics(mtmp, otmp, TRUE);
|
update_mon_intrinsics(mtmp, otmp, TRUE, TRUE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
/* SCCS Id: @(#)mhitm.c 3.4 2002/02/17 */
|
/* SCCS Id: @(#)mhitm.c 3.4 2002/09/08 */
|
||||||
/* 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. */
|
||||||
|
|
||||||
@@ -991,7 +991,7 @@ label2: if (mdef->mhp > 0) return 0;
|
|||||||
if (otmp->owornmask & W_WEP)
|
if (otmp->owornmask & W_WEP)
|
||||||
setmnotwielded(mdef,otmp);
|
setmnotwielded(mdef,otmp);
|
||||||
otmp->owornmask = 0L;
|
otmp->owornmask = 0L;
|
||||||
update_mon_intrinsics(mdef, otmp, FALSE);
|
update_mon_intrinsics(mdef, otmp, FALSE, FALSE);
|
||||||
}
|
}
|
||||||
/* add_to_minv() might free otmp [if it merges] */
|
/* add_to_minv() might free otmp [if it merges] */
|
||||||
if (vis)
|
if (vis)
|
||||||
|
|||||||
@@ -1559,13 +1559,8 @@ register struct monst *mdef;
|
|||||||
/* some objects may end up outside the statue */
|
/* some objects may end up outside the statue */
|
||||||
while ((obj = mdef->minvent) != 0) {
|
while ((obj = mdef->minvent) != 0) {
|
||||||
obj_extract_self(obj);
|
obj_extract_self(obj);
|
||||||
if (obj->owornmask) {
|
if (obj->owornmask)
|
||||||
/* don't want map updates if invisibility
|
update_mon_intrinsics(mdef, obj, FALSE, TRUE);
|
||||||
toggles or messages if speed changes */
|
|
||||||
in_mklev = TRUE;
|
|
||||||
update_mon_intrinsics(mdef, obj, FALSE);
|
|
||||||
in_mklev = FALSE;
|
|
||||||
}
|
|
||||||
obj_no_longer_held(obj);
|
obj_no_longer_held(obj);
|
||||||
if (obj->owornmask & W_WEP)
|
if (obj->owornmask & W_WEP)
|
||||||
setmnotwielded(mdef,obj);
|
setmnotwielded(mdef,obj);
|
||||||
|
|||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
/* SCCS Id: @(#)mthrowu.c 3.4 2002/07/23 */
|
/* SCCS Id: @(#)mthrowu.c 3.4 2002/09/08 */
|
||||||
/* 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. */
|
||||||
|
|
||||||
@@ -492,7 +492,7 @@ struct obj *obj;
|
|||||||
possibly_unwield(mon);
|
possibly_unwield(mon);
|
||||||
if (obj->owornmask) {
|
if (obj->owornmask) {
|
||||||
mon->misc_worn_check &= ~obj->owornmask;
|
mon->misc_worn_check &= ~obj->owornmask;
|
||||||
update_mon_intrinsics(mon, obj, FALSE);
|
update_mon_intrinsics(mon, obj, FALSE, FALSE);
|
||||||
}
|
}
|
||||||
obfree(obj, (struct obj*) 0);
|
obfree(obj, (struct obj*) 0);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
/* SCCS Id: @(#)pickup.c 3.4 2002/08/21 */
|
/* SCCS Id: @(#)pickup.c 3.4 2002/09/08 */
|
||||||
/* 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. */
|
||||||
|
|
||||||
@@ -1614,7 +1614,7 @@ boolean *prev_loot;
|
|||||||
if ((unwornmask = otmp->owornmask) != 0L) {
|
if ((unwornmask = otmp->owornmask) != 0L) {
|
||||||
mtmp->misc_worn_check &= ~unwornmask;
|
mtmp->misc_worn_check &= ~unwornmask;
|
||||||
otmp->owornmask = 0L;
|
otmp->owornmask = 0L;
|
||||||
update_mon_intrinsics(mtmp, otmp, FALSE);
|
update_mon_intrinsics(mtmp, otmp, FALSE, FALSE);
|
||||||
}
|
}
|
||||||
otmp = hold_another_object(otmp, "You drop %s!", doname(otmp),
|
otmp = hold_another_object(otmp, "You drop %s!", doname(otmp),
|
||||||
(const char *)0);
|
(const char *)0);
|
||||||
|
|||||||
+2
-7
@@ -554,13 +554,8 @@ boolean is_pet; /* If true, pet should keep wielded/worn items */
|
|||||||
costly_spot(mtmp->mx, mtmp->my))
|
costly_spot(mtmp->mx, mtmp->my))
|
||||||
otmp->no_charge = 1;
|
otmp->no_charge = 1;
|
||||||
#endif
|
#endif
|
||||||
if (otmp->owornmask) {
|
if (otmp->owornmask)
|
||||||
/* don't want map updates if invisibility
|
update_mon_intrinsics(mtmp, otmp, FALSE, TRUE);
|
||||||
toggles or messages if speed changes */
|
|
||||||
in_mklev = TRUE;
|
|
||||||
update_mon_intrinsics(mtmp, otmp, FALSE);
|
|
||||||
in_mklev = FALSE;
|
|
||||||
}
|
|
||||||
/* obj_no_longer_held(otmp); -- done by place_object */
|
/* obj_no_longer_held(otmp); -- done by place_object */
|
||||||
if (otmp->owornmask & W_WEP)
|
if (otmp->owornmask & W_WEP)
|
||||||
setmnotwielded(mtmp, otmp);
|
setmnotwielded(mtmp, otmp);
|
||||||
|
|||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
/* SCCS Id: @(#)steed.c 3.4 2002/05/31 */
|
/* SCCS Id: @(#)steed.c 3.4 2002/09/08 */
|
||||||
/* Copyright (c) Kevin Hugo, 1998-1999. */
|
/* Copyright (c) Kevin Hugo, 1998-1999. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -139,7 +139,7 @@ use_saddle(otmp)
|
|||||||
mtmp->misc_worn_check |= W_SADDLE;
|
mtmp->misc_worn_check |= W_SADDLE;
|
||||||
otmp->owornmask = W_SADDLE;
|
otmp->owornmask = W_SADDLE;
|
||||||
otmp->leashmon = mtmp->m_id;
|
otmp->leashmon = mtmp->m_id;
|
||||||
update_mon_intrinsics(mtmp, otmp, TRUE);
|
update_mon_intrinsics(mtmp, otmp, TRUE, FALSE);
|
||||||
} else
|
} else
|
||||||
pline("%s resists!", Monnam(mtmp));
|
pline("%s resists!", Monnam(mtmp));
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
/* SCCS Id: @(#)uhitm.c 3.4 2002/08/21 */
|
/* SCCS Id: @(#)uhitm.c 3.4 2002/09/08 */
|
||||||
/* 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. */
|
||||||
|
|
||||||
@@ -1134,7 +1134,7 @@ struct attack *mattk;
|
|||||||
MON_NOWEP(mdef);
|
MON_NOWEP(mdef);
|
||||||
}
|
}
|
||||||
otmp->owornmask = 0L;
|
otmp->owornmask = 0L;
|
||||||
update_mon_intrinsics(mdef, otmp, FALSE);
|
update_mon_intrinsics(mdef, otmp, FALSE, FALSE);
|
||||||
|
|
||||||
if (otmp == stealoid) /* special message for final item */
|
if (otmp == stealoid) /* special message for final item */
|
||||||
pline("%s finishes taking off %s suit.",
|
pline("%s finishes taking off %s suit.",
|
||||||
|
|||||||
+18
-7
@@ -1,4 +1,4 @@
|
|||||||
/* SCCS Id: @(#)worn.c 3.4 2002/08/30 */
|
/* SCCS Id: @(#)worn.c 3.4 2002/09/08 */
|
||||||
/* 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. */
|
||||||
|
|
||||||
@@ -208,10 +208,10 @@ struct obj *obj; /* item to make known if effect can be seen */
|
|||||||
|
|
||||||
/* armor put on or taken off; might be magical variety */
|
/* armor put on or taken off; might be magical variety */
|
||||||
void
|
void
|
||||||
update_mon_intrinsics(mon, obj, on)
|
update_mon_intrinsics(mon, obj, on, silently)
|
||||||
struct monst *mon;
|
struct monst *mon;
|
||||||
struct obj *obj;
|
struct obj *obj;
|
||||||
boolean on;
|
boolean on, silently;
|
||||||
{
|
{
|
||||||
int unseen;
|
int unseen;
|
||||||
uchar mask;
|
uchar mask;
|
||||||
@@ -227,8 +227,13 @@ boolean on;
|
|||||||
mon->minvis = !mon->invis_blkd;
|
mon->minvis = !mon->invis_blkd;
|
||||||
break;
|
break;
|
||||||
case FAST:
|
case FAST:
|
||||||
|
{
|
||||||
|
boolean save_in_mklev = in_mklev;
|
||||||
|
if (silently) in_mklev = TRUE;
|
||||||
mon_adjust_speed(mon, 0, obj);
|
mon_adjust_speed(mon, 0, obj);
|
||||||
|
in_mklev = save_in_mklev;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
/* properties handled elsewhere */
|
/* properties handled elsewhere */
|
||||||
case ANTIMAGIC:
|
case ANTIMAGIC:
|
||||||
case REFLECTING:
|
case REFLECTING:
|
||||||
@@ -262,8 +267,13 @@ boolean on;
|
|||||||
mon->minvis = mon->perminvis;
|
mon->minvis = mon->perminvis;
|
||||||
break;
|
break;
|
||||||
case FAST:
|
case FAST:
|
||||||
|
{
|
||||||
|
boolean save_in_mklev = in_mklev;
|
||||||
|
if (silently) in_mklev = TRUE;
|
||||||
mon_adjust_speed(mon, 0, obj);
|
mon_adjust_speed(mon, 0, obj);
|
||||||
|
in_mklev = save_in_mklev;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case FIRE_RES:
|
case FIRE_RES:
|
||||||
case COLD_RES:
|
case COLD_RES:
|
||||||
case SLEEP_RES:
|
case SLEEP_RES:
|
||||||
@@ -310,7 +320,7 @@ boolean on;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* if couldn't see it but now can, or vice versa, update display */
|
/* if couldn't see it but now can, or vice versa, update display */
|
||||||
if (unseen ^ !canseemon(mon))
|
if (!silently && (unseen ^ !canseemon(mon)))
|
||||||
newsym(mon->mx, mon->my);
|
newsym(mon->mx, mon->my);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -474,10 +484,10 @@ outer_break:
|
|||||||
if (mon->mfrozen) mon->mcanmove = 0;
|
if (mon->mfrozen) mon->mcanmove = 0;
|
||||||
}
|
}
|
||||||
if (old)
|
if (old)
|
||||||
update_mon_intrinsics(mon, old, FALSE);
|
update_mon_intrinsics(mon, old, FALSE, creation);
|
||||||
mon->misc_worn_check |= flag;
|
mon->misc_worn_check |= flag;
|
||||||
best->owornmask |= flag;
|
best->owornmask |= flag;
|
||||||
update_mon_intrinsics(mon, best, TRUE);
|
update_mon_intrinsics(mon, best, TRUE, creation);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct obj *
|
struct obj *
|
||||||
@@ -499,8 +509,9 @@ struct monst *mon;
|
|||||||
struct obj *obj;
|
struct obj *obj;
|
||||||
{
|
{
|
||||||
mon->misc_worn_check &= ~obj->owornmask;
|
mon->misc_worn_check &= ~obj->owornmask;
|
||||||
|
if (obj->owornmask)
|
||||||
|
update_mon_intrinsics(mon, obj, FALSE, FALSE);
|
||||||
obj->owornmask = 0L;
|
obj->owornmask = 0L;
|
||||||
update_mon_intrinsics(mon, obj, FALSE);
|
|
||||||
|
|
||||||
obj_extract_self(obj);
|
obj_extract_self(obj);
|
||||||
place_object(obj, mon->mx, mon->my);
|
place_object(obj, mon->mx, mon->my);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* SCCS Id: @(#)zap.c 3.4 2002/07/23 */
|
/* SCCS Id: @(#)zap.c 3.4 2002/09/08 */
|
||||||
/* 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. */
|
||||||
|
|
||||||
@@ -244,8 +244,8 @@ struct obj *otmp;
|
|||||||
#ifdef STEED
|
#ifdef STEED
|
||||||
} else if (!!(obj = which_armor(mtmp, W_SADDLE))) {
|
} else if (!!(obj = which_armor(mtmp, W_SADDLE))) {
|
||||||
mtmp->misc_worn_check &= ~obj->owornmask;
|
mtmp->misc_worn_check &= ~obj->owornmask;
|
||||||
|
update_mon_intrinsics(mtmp, obj, FALSE, FALSE);
|
||||||
obj->owornmask = 0L;
|
obj->owornmask = 0L;
|
||||||
update_mon_intrinsics(mtmp, obj, FALSE);
|
|
||||||
obj_extract_self(obj);
|
obj_extract_self(obj);
|
||||||
place_object(obj, mtmp->mx, mtmp->my);
|
place_object(obj, mtmp->mx, mtmp->my);
|
||||||
/* call stackobj() if we ever drop anything that can merge */
|
/* call stackobj() if we ever drop anything that can merge */
|
||||||
|
|||||||
Reference in New Issue
Block a user