-$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.300 $ $NHDT-Date: 1554841009 2019/04/09 20:16:49 $
+$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.301 $ $NHDT-Date: 1555022325 2019/04/11 22:38:45 $
This fixes36.2 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.1 in April 2018. Please note, however,
if a migrating long worm couldn't be placed, or some other monster was given
an existing long worm's place and it couldn't be put somewhere else,
a "trying to place monster at <0,0>" warning would occur
+if hero throws a pick-axe into a shop and shopkeeper catches it, shk will say
+ "get out of my way, scum" even if there's no monster at pick-axe spot
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
-/* NetHack 3.6 extern.h $NHDT-Date: 1554857123 2019/04/10 00:45:23 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.700 $ */
+/* NetHack 3.6 extern.h $NHDT-Date: 1555022327 2019/04/11 22:38:47 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.701 $ */
/* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */
E void FDECL(m_into_limbo, (struct monst *));
E void FDECL(mnexto, (struct monst *));
E void FDECL(maybe_mnexto, (struct monst *));
-E boolean FDECL(mnearto, (struct monst *, XCHAR_P, XCHAR_P, BOOLEAN_P));
+E int FDECL(mnearto, (struct monst *, XCHAR_P, XCHAR_P, BOOLEAN_P));
E void FDECL(m_respond, (struct monst *));
E void FDECL(setmangry, (struct monst *, BOOLEAN_P));
E void FDECL(wakeup, (struct monst *, BOOLEAN_P));
-/* NetHack 3.6 mkmaze.c $NHDT-Date: 1543185071 2018/11/25 22:31:11 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.67 $ */
+/* NetHack 3.6 mkmaze.c $NHDT-Date: 1555022325 2019/04/11 22:38:45 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.68 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Pasi Kallinen, 2018. */
/* NetHack may be freely redistributed. See license for details. */
case CONS_MON: {
struct monst *mon = (struct monst *) cons->list;
+
(void) mnearto(mon, cons->x, cons->y, TRUE);
break;
}
-/* NetHack 3.6 mon.c $NHDT-Date: 1554580625 2019/04/06 19:57:05 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.280 $ */
+/* NetHack 3.6 mon.c $NHDT-Date: 1555022326 2019/04/11 22:38:46 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.281 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Derek S. Ray, 2015. */
/* NetHack may be freely redistributed. See license for details. */
/* mnearto()
* Put monster near (or at) location if possible.
* Returns:
- * true if relocation was successful
- * false otherwise
+ * 2 if another monster was moved out of this one's way;
+ * 1 if relocation was successful (without moving another one);
+ * 0 otherwise.
+ * Note: if already at the target spot, result is 1 rather than 0.
+ *
+ * Might be called recursively if 'move_other' is True; if so, that argument
+ * will be False on the nested call so there won't be any further recursion.
*/
-boolean
+int
mnearto(mtmp, x, y, move_other)
register struct monst *mtmp;
xchar x, y;
struct monst *othermon = (struct monst *) 0;
xchar newx, newy;
coord mm;
+ int res = 1;
if (mtmp->mx == x && mtmp->my == y && m_at(x, y) == mtmp)
- return TRUE;
+ return res;
if (move_other && (othermon = m_at(x, y)) != 0) {
if (othermon->wormno)
remove_worm(othermon);
else
remove_monster(x, y);
+
+ othermon->mx = othermon->my = 0; /* 'othermon' is not on the map */
}
newx = x;
* no end of trouble.
*/
if (!enexto(&mm, newx, newy, mtmp->data))
- return FALSE;
+ return 0;
if (!isok(mm.x, mm.y))
- return FALSE;
+ return 0;
newx = mm.x;
newy = mm.y;
}
rloc_to(mtmp, newx, newy);
if (move_other && othermon) {
- xchar oldx = othermon->mx, oldy = othermon->my;
-
- othermon->mx = othermon->my = 0;
- (void) mnearto(othermon, x, y, FALSE);
- if (othermon->mx == 0 && othermon->my == 0) {
- /* reloc failed */
- othermon->mx = oldx;
- othermon->my = oldy;
+ res = 2; /* moving another monster out of the way */
+ if (!mnearto(othermon, x, y, FALSE)) /* no 'move_other' this time */
m_into_limbo(othermon);
- }
}
- return TRUE;
+ return res;
}
/* monster responds to player action; not the same as a passive attack;