From 4505a8dc4c89f0c00a63be3b62a80d38915f3585 Mon Sep 17 00:00:00 2001 From: PatR Date: Sun, 26 Jan 2020 05:12:55 -0800 Subject: [PATCH] left out of "limit rate of long worm growth" --- include/extern.h | 4 ++-- src/allmain.c | 6 +++--- src/mon.c | 29 ++++++++++++++++------------- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/include/extern.h b/include/extern.h index a21b76988..ef9f64838 100644 --- a/include/extern.h +++ b/include/extern.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 extern.h $NHDT-Date: 1578895332 2020/01/13 06:02:12 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.785 $ */ +/* NetHack 3.6 extern.h $NHDT-Date: 1580044333 2020/01/26 13:12:13 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.786 $ */ /* Copyright (c) Steve Creps, 1988. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1437,7 +1437,7 @@ E int FDECL(mfndpos, (struct monst *, coord *, long *, long)); E boolean FDECL(monnear, (struct monst *, int, int)); E void NDECL(dmonsfree); E void FDECL(elemental_clog, (struct monst *)); -E int FDECL(mcalcmove, (struct monst *)); +E int FDECL(mcalcmove, (struct monst *, BOOLEAN_P)); E void NDECL(mcalcdistress); E void FDECL(replmon, (struct monst *, struct monst *)); E void FDECL(relmon, (struct monst *, struct monst **)); diff --git a/src/allmain.c b/src/allmain.c index 5998e38b8..22faeabd7 100644 --- a/src/allmain.c +++ b/src/allmain.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 allmain.c $NHDT-Date: 1578448653 2020/01/08 01:57:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.137 $ */ +/* NetHack 3.6 allmain.c $NHDT-Date: 1580044340 2020/01/26 13:12:20 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.138 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -125,7 +125,7 @@ boolean resuming; to skip dead monsters here because they will have been purged at end of their previous round of moving */ for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) - mtmp->movement += mcalcmove(mtmp); + mtmp->movement += mcalcmove(mtmp, TRUE); /* occasionally add another monster; since this takes place after movement has been allotted, the new @@ -139,7 +139,7 @@ boolean resuming; /* calculate how much time passed. */ if (u.usteed && u.umoved) { /* your speed doesn't augment steed's speed */ - moveamt = mcalcmove(u.usteed); + moveamt = mcalcmove(u.usteed, TRUE); } else { moveamt = g.youmonst.data->mmove; diff --git a/src/mon.c b/src/mon.c index 6fd50d7f7..e2d571f5e 100644 --- a/src/mon.c +++ b/src/mon.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 mon.c $NHDT-Date: 1577759850 2019/12/31 02:37:30 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.319 $ */ +/* NetHack 3.6 mon.c $NHDT-Date: 1580044343 2020/01/26 13:12:23 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.320 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Derek S. Ray, 2015. */ /* NetHack may be freely redistributed. See license for details. */ @@ -633,9 +633,11 @@ register struct monst *mtmp; return 0; } +/* calculate 'mon's movement for current turn; called from moveloop() */ int -mcalcmove(mon) +mcalcmove(mon, m_moving) struct monst *mon; +boolean m_moving; /* True: adjust for moving; False: just adjust for speed */ { int mmove = mon->data->mmove; int mmove_adj; @@ -656,17 +658,18 @@ struct monst *mon; mmove = ((rn2(2) ? 4 : 5) * mmove) / 3; } - /* Randomly round the monster's speed to a multiple of NORMAL_SPEED. - This makes it impossible for the player to predict when they'll get - a free turn (thus preventing exploits like "melee kiting"), while - retaining guarantees about shopkeepers not being outsped by a - normal-speed player, normal-speed players being unable to open up - a gap when fleeing a normal-speed monster, etc. */ - mmove_adj = mmove % NORMAL_SPEED; - mmove -= mmove_adj; - if (rn2(NORMAL_SPEED) < mmove_adj) - mmove += NORMAL_SPEED; - + if (m_moving) { + /* Randomly round the monster's speed to a multiple of NORMAL_SPEED. + This makes it impossible for the player to predict when they'll + get a free turn (thus preventing exploits like "melee kiting"), + while retaining guarantees about shopkeepers not being outsped + by a normal-speed player, normal-speed players being unable + to open up a gap when fleeing a normal-speed monster, etc. */ + mmove_adj = mmove % NORMAL_SPEED; + mmove -= mmove_adj; + if (rn2(NORMAL_SPEED) < mmove_adj) + mmove += NORMAL_SPEED; + } return mmove; }