reported by Erik). We need to figure out how the speed-trashing is happening.
Converted speed and speed_increment to ints to avoid wraparound on zero.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1229 c06c8d41-db1a-0410-9941-cceddc491573
CDKRLJIGVWQE2PMHCSLJBLYQEK7JYC4LQM7H2X3O6NMJMCCDRVIAC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
7KWDC7XFNMBLSUO2HISIROBINZBX5T67LJEEXTAORXW2YZ7VWFGAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC
QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC
7AMQN7MITMXBNVDAK5VOXTQ4TZIAOD6ZLOFJG7GQMBTY23Y2BKSAC
int monsters::base_speed(int mcls)
{
const monsterentry *m = seekmonster(mcls);
if (!m)
return (10);
int speed = m->speed;
switch (mcls)
{
case MONS_ABOMINATION_SMALL:
speed = 7 + random2avg(9, 2);
break;
case MONS_ABOMINATION_LARGE:
speed = 6 + random2avg(7, 2);
break;
case MONS_BEAST:
speed = 8 + random2(5);
break;
}
return (speed);
}
// Recalculate movement speed.
void monsters::fix_speed()
{
if (mons_is_zombified(this))
speed = base_speed(number) - 2;
else
speed = base_speed(type);
if (has_ench(ENCH_HASTE))
speed *= 2;
else if (has_ench(ENCH_SLOW))
speed /= 2;
}
// Check speed and speed_increment sanity.
void monsters::check_speed()
{
// FIXME: If speed is borked, recalculate. Need to figure out how speed
// is getting borked.
if (speed < 0 || speed > 130)
{
#ifdef DEBUG_DIAGNOSTICS
mprf(MSGCH_DIAGNOSTICS,
"Bad speed: %s, spd: %d, spi: %d, hd: %d, ench: %s",
name(DESC_PLAIN).c_str(),
speed, speed_increment, hit_dice,
comma_separated_line(enchantments.begin(),
enchantments.end()).c_str());
#endif
fix_speed();
#ifdef DEBUG_DIAGNOSTICS
mprf(MSGCH_DIAGNOSTICS, "Fixed speed for %s to %d",
name(DESC_PLAIN).c_str(), speed);
#endif
}
if (speed_increment < 0)
speed_increment = 0;
if (speed_increment > 200)
{
#ifdef DEBUG_DIAGNOSTICS
mprf(MSGCH_DIAGNOSTICS,
"Clamping speed increment on %s: %d",
name(DESC_PLAIN).c_str(), speed_increment);
#endif
speed_increment = 140;
}
}