diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-04-01 19:15:21 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-04-01 19:15:21 +0000 |
commit | 99beaf9eb5a1ef9ee360732140f89dae8e44d57c (patch) | |
tree | 6610352eeba268f22e438dbfd1ff9677c64ebedd /crawl-ref | |
parent | 11c08abe629362a45f0276212dfcd5ca2069b9b8 (diff) | |
download | crawl-ref-99beaf9eb5a1ef9ee360732140f89dae8e44d57c.tar.gz crawl-ref-99beaf9eb5a1ef9ee360732140f89dae8e44d57c.zip |
Fixed monsters not regenerating at the right rate when catching up time spent off-level. Slightly dropped the generation of bucklers in the Elven Halls.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@4031 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref')
-rw-r--r-- | crawl-ref/source/effects.cc | 9 | ||||
-rw-r--r-- | crawl-ref/source/makeitem.cc | 4 | ||||
-rw-r--r-- | crawl-ref/source/monstuff.cc | 11 | ||||
-rw-r--r-- | crawl-ref/source/monstuff.h | 2 |
4 files changed, 18 insertions, 8 deletions
diff --git a/crawl-ref/source/effects.cc b/crawl-ref/source/effects.cc index 5921bece0f..37a202e573 100644 --- a/crawl-ref/source/effects.cc +++ b/crawl-ref/source/effects.cc @@ -2847,8 +2847,13 @@ void update_level( double elapsedTime ) heal_monster( mon, turns, false ); } else - { - heal_monster( mon, (turns / 10), false ); + { + // Set a lower ceiling of 0.1 on the regen rate. + const int regen_rate = + std::max(mons_natural_regen_rate(mon) * 2, 5); + + heal_monster( mon, div_rand_round(turns * regen_rate, 50), + false ); } catchup_monster_moves( mon, turns ); diff --git a/crawl-ref/source/makeitem.cc b/crawl-ref/source/makeitem.cc index 85de54279c..741fbcc5ce 100644 --- a/crawl-ref/source/makeitem.cc +++ b/crawl-ref/source/makeitem.cc @@ -3758,7 +3758,7 @@ void give_shield(monsters *mon, int level) case MONS_DEEP_ELF_SOLDIER: case MONS_DEEP_ELF_FIGHTER: - if (one_chance_in(5)) + if (one_chance_in(6)) make_item_for_monster(mon, OBJ_ARMOUR, ARM_BUCKLER, level, MAKE_ITEM_ELVEN); break; @@ -3777,7 +3777,7 @@ void give_shield(monsters *mon, int level) level, MAKE_ITEM_NO_RACE); break; case MONS_DEEP_ELF_KNIGHT: - if (coinflip()) + if (one_chance_in(3)) make_item_for_monster(mon, OBJ_ARMOUR, ARM_BUCKLER, level, MAKE_ITEM_ELVEN); break; diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc index 2ff479c020..69e0cdfbb1 100644 --- a/crawl-ref/source/monstuff.cc +++ b/crawl-ref/source/monstuff.cc @@ -4502,7 +4502,7 @@ static void _monster_add_energy(monsters *monster) monster->speed_increment += energy_gained; } -static int _monster_natural_regen_roll(monsters *monster) +int mons_natural_regen_rate(monsters *monster) { // A HD divider ranging from 3 (at 1 HD) to 1 (at 8 HD). int divider = @@ -4525,9 +4525,12 @@ static int _monster_natural_regen_roll(monsters *monster) break; } - const int regen_rate = - std::max(div_rand_round(monster->hit_dice, divider), 1); + return (std::max(div_rand_round(monster->hit_dice, divider), 1)); +} +static inline bool _mons_natural_regen_roll(monsters *monster) +{ + const int regen_rate = mons_natural_regen_rate(monster); return (random2(25) < regen_rate); } @@ -4556,7 +4559,7 @@ static void _monster_regenerate(monsters *monster) && env.cgrid(monster->pos()) == EMPTY_CLOUD && one_chance_in(3)) - || _monster_natural_regen_roll(monster)) + || _mons_natural_regen_roll(monster)) { heal_monster(monster, 1, false); } diff --git a/crawl-ref/source/monstuff.h b/crawl-ref/source/monstuff.h index 3a2b4e21b5..104b0fcffb 100644 --- a/crawl-ref/source/monstuff.h +++ b/crawl-ref/source/monstuff.h @@ -175,4 +175,6 @@ int mons_missile_damage(const item_def *launch, const item_def *missile); int mons_thrown_weapon_damage(const item_def *weap); +int mons_natural_regen_rate(monsters *monster); + #endif |