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;elsespeed = 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_DIAGNOSTICSmprf(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());#endiffix_speed();#ifdef DEBUG_DIAGNOSTICSmprf(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_DIAGNOSTICSmprf(MSGCH_DIAGNOSTICS,"Clamping speed increment on %s: %d",name(DESC_PLAIN).c_str(), speed_increment);#endifspeed_increment = 140;}}