summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-04-01 19:15:21 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-04-01 19:15:21 +0000
commit99beaf9eb5a1ef9ee360732140f89dae8e44d57c (patch)
tree6610352eeba268f22e438dbfd1ff9677c64ebedd
parent11c08abe629362a45f0276212dfcd5ca2069b9b8 (diff)
downloadcrawl-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
-rw-r--r--crawl-ref/source/effects.cc9
-rw-r--r--crawl-ref/source/makeitem.cc4
-rw-r--r--crawl-ref/source/monstuff.cc11
-rw-r--r--crawl-ref/source/monstuff.h2
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