Split calculating your movement speed out of moveloop
This commit is contained in:
+50
-41
@@ -13,6 +13,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void moveloop_preamble(boolean);
|
static void moveloop_preamble(boolean);
|
||||||
|
static void u_calc_moveamt(int);
|
||||||
static void moveloop_core(void);
|
static void moveloop_core(void);
|
||||||
#ifdef POSITIONBAR
|
#ifdef POSITIONBAR
|
||||||
static void do_positionbar(void);
|
static void do_positionbar(void);
|
||||||
@@ -85,6 +86,53 @@ moveloop_preamble(boolean resuming)
|
|||||||
update_inventory();
|
update_inventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
u_calc_moveamt(int wtcap)
|
||||||
|
{
|
||||||
|
int moveamt = 0;
|
||||||
|
|
||||||
|
/* calculate how much time passed. */
|
||||||
|
if (u.usteed && u.umoved) {
|
||||||
|
/* your speed doesn't augment steed's speed */
|
||||||
|
moveamt = mcalcmove(u.usteed, TRUE);
|
||||||
|
} else {
|
||||||
|
moveamt = g.youmonst.data->mmove;
|
||||||
|
|
||||||
|
if (Very_fast) { /* speed boots, potion, or spell */
|
||||||
|
/* gain a free action on 2/3 of turns */
|
||||||
|
if (rn2(3) != 0)
|
||||||
|
moveamt += NORMAL_SPEED;
|
||||||
|
} else if (Fast) { /* intrinsic */
|
||||||
|
/* gain a free action on 1/3 of turns */
|
||||||
|
if (rn2(3) == 0)
|
||||||
|
moveamt += NORMAL_SPEED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (wtcap) {
|
||||||
|
case UNENCUMBERED:
|
||||||
|
break;
|
||||||
|
case SLT_ENCUMBER:
|
||||||
|
moveamt -= (moveamt / 4);
|
||||||
|
break;
|
||||||
|
case MOD_ENCUMBER:
|
||||||
|
moveamt -= (moveamt / 2);
|
||||||
|
break;
|
||||||
|
case HVY_ENCUMBER:
|
||||||
|
moveamt -= ((moveamt * 3) / 4);
|
||||||
|
break;
|
||||||
|
case EXT_ENCUMBER:
|
||||||
|
moveamt -= ((moveamt * 7) / 8);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
g.youmonst.movement += moveamt;
|
||||||
|
if (g.youmonst.movement < 0)
|
||||||
|
g.youmonst.movement = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
moveloop_core(void)
|
moveloop_core(void)
|
||||||
{
|
{
|
||||||
@@ -92,7 +140,7 @@ moveloop_core(void)
|
|||||||
char ch;
|
char ch;
|
||||||
int abort_lev;
|
int abort_lev;
|
||||||
#endif
|
#endif
|
||||||
int moveamt = 0, wtcap = 0, change = 0;
|
int wtcap = 0, change = 0;
|
||||||
boolean monscanmove = FALSE;
|
boolean monscanmove = FALSE;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
@@ -142,46 +190,7 @@ moveloop_core(void)
|
|||||||
(void) makemon((struct permonst *) 0, 0, 0,
|
(void) makemon((struct permonst *) 0, 0, 0,
|
||||||
NO_MM_FLAGS);
|
NO_MM_FLAGS);
|
||||||
|
|
||||||
/* calculate how much time passed. */
|
u_calc_moveamt(wtcap);
|
||||||
if (u.usteed && u.umoved) {
|
|
||||||
/* your speed doesn't augment steed's speed */
|
|
||||||
moveamt = mcalcmove(u.usteed, TRUE);
|
|
||||||
} else {
|
|
||||||
moveamt = g.youmonst.data->mmove;
|
|
||||||
|
|
||||||
if (Very_fast) { /* speed boots, potion, or spell */
|
|
||||||
/* gain a free action on 2/3 of turns */
|
|
||||||
if (rn2(3) != 0)
|
|
||||||
moveamt += NORMAL_SPEED;
|
|
||||||
} else if (Fast) { /* intrinsic */
|
|
||||||
/* gain a free action on 1/3 of turns */
|
|
||||||
if (rn2(3) == 0)
|
|
||||||
moveamt += NORMAL_SPEED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (wtcap) {
|
|
||||||
case UNENCUMBERED:
|
|
||||||
break;
|
|
||||||
case SLT_ENCUMBER:
|
|
||||||
moveamt -= (moveamt / 4);
|
|
||||||
break;
|
|
||||||
case MOD_ENCUMBER:
|
|
||||||
moveamt -= (moveamt / 2);
|
|
||||||
break;
|
|
||||||
case HVY_ENCUMBER:
|
|
||||||
moveamt -= ((moveamt * 3) / 4);
|
|
||||||
break;
|
|
||||||
case EXT_ENCUMBER:
|
|
||||||
moveamt -= ((moveamt * 7) / 8);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
g.youmonst.movement += moveamt;
|
|
||||||
if (g.youmonst.movement < 0)
|
|
||||||
g.youmonst.movement = 0;
|
|
||||||
settrack();
|
settrack();
|
||||||
|
|
||||||
g.monstermoves++; /* [obsolete (for a long time...)] */
|
g.monstermoves++; /* [obsolete (for a long time...)] */
|
||||||
|
|||||||
Reference in New Issue
Block a user