use a more precise jumping path for far, non-straight line destinations
increase damage bonus applies when kicking while polymorphed into a monster
form which has a kicking attack, just like for other kicks
+if magically removing steed's saddle is fatal, don't leave it saddled in bones
Platform- and/or Interface-Specific Fixes
E int FDECL(steal, (struct monst *, char *));
E int FDECL(mpickobj, (struct monst *,struct obj *));
E void FDECL(stealamulet, (struct monst *));
+E void FDECL(mdrop_obj, (struct monst *,struct obj *,BOOLEAN_P));
E void FDECL(mdrop_special_objs, (struct monst *));
E void FDECL(relobj, (struct monst *,int,BOOLEAN_P));
#ifdef GOLDOBJ
-/* SCCS Id: @(#)steal.c 3.5 2006/06/25 */
+/* SCCS Id: @(#)steal.c 3.5 2007/04/16 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
STATIC_PTR int NDECL(stealarm);
STATIC_DCL const char *FDECL(equipname, (struct obj *));
-STATIC_DCL void FDECL(mdrop_obj, (struct monst *,struct obj *,BOOLEAN_P));
STATIC_OVL const char *
equipname(otmp)
}
/* drop one object taken from a (possibly dead) monster's inventory */
-STATIC_OVL void
+void
mdrop_obj(mon, obj, verbosely)
struct monst *mon;
struct obj *obj;
boolean verbosely;
{
int omx = mon->mx, omy = mon->my;
+ boolean update_mon = FALSE;
if (obj->owornmask) {
/* perform worn item handling if the monster is still alive */
if (mon->mhp > 0) {
mon->misc_worn_check &= ~obj->owornmask;
- update_mon_intrinsics(mon, obj, FALSE, TRUE);
+ update_mon = TRUE;
#ifdef STEED
/* don't charge for an owned saddle on dead steed */
} else if (mon->mtame && (obj->owornmask & W_SADDLE) &&
place_object(obj, omx, omy);
stackobj(obj);
}
+ /* do this last, after placing obj on floor; removing steed's saddle
+ throws rider, possibly inflicting fatal damage and producing bones */
+ if (update_mon) update_mon_intrinsics(mon, obj, FALSE, TRUE);
}
/* some monsters bypass the normal rules for moving between levels or
break;
#ifdef STEED
} else if ((obj = which_armor(mtmp, W_SADDLE)) != 0) {
- mtmp->misc_worn_check &= ~obj->owornmask;
- update_mon_intrinsics(mtmp, obj, FALSE, FALSE);
- obj->owornmask = 0L;
+ char buf[BUFSZ];
+
+ Sprintf(buf, "%s %s", s_suffix(Monnam(mtmp)),
+ distant_name(obj, xname));
+ if (cansee(mtmp->mx, mtmp->my)) {
+ if (!canspotmon(mtmp))
+ Strcpy(buf, An(distant_name(obj, xname)));
+ pline("%s falls to the %s.",
+ buf, surface(mtmp->mx, mtmp->my));
+ } else if (canspotmon(mtmp)) {
+ pline("%s falls off.", buf);
+ }
obj_extract_self(obj);
- place_object(obj, mtmp->mx, mtmp->my);
- /* call stackobj() if we ever drop anything that can merge */
- newsym(mtmp->mx, mtmp->my);
-#endif
+ mdrop_obj(mtmp, obj, FALSE);
+#endif /* STEED */
}
break;
case SPE_HEALING: