summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crawl-ref/source/effects.cc24
-rw-r--r--crawl-ref/source/player.cc35
2 files changed, 31 insertions, 28 deletions
diff --git a/crawl-ref/source/effects.cc b/crawl-ref/source/effects.cc
index 021e4b08f7..3d32b3fcbd 100644
--- a/crawl-ref/source/effects.cc
+++ b/crawl-ref/source/effects.cc
@@ -3105,8 +3105,28 @@ void handle_time(long time_delta)
// Adjust the player's stats if s/he's diseased (or recovering).
if (!you.disease)
{
- // With slow healing 3, you have no stat recovery.
- if (x_chance_in_y(3 - player_mutation_level(MUT_SLOW_HEALING), 3))
+ bool recovery = true;
+
+ // The better-fed you are, the faster your stat recovery.
+ if (you.species == SP_VAMPIRE)
+ {
+ if (you.hunger_state == HS_STARVING)
+ // No stat recovery for starving vampires.
+ recovery = false;
+ else if (you.hunger_state <= HS_HUNGRY)
+ // Halved stat recovery for hungry vampires.
+ recovery = coinflip();
+ }
+
+ // Slow heal mutation. Applied last.
+ // Each level reduces your stat recovery by one third.
+ if (recovery)
+ {
+ recovery =
+ x_chance_in_y(3 - player_mutation_level(MUT_SLOW_HEALING), 3);
+ }
+
+ if (recovery)
{
if (you.strength < you.max_strength && one_chance_in(100))
restore_stat(STAT_STRENGTH, 0, false, true);
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index 43c22b9096..0b5d0fa414 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -1066,35 +1066,18 @@ int player_regen()
// The better-fed you are, the faster you heal.
if (you.species == SP_VAMPIRE)
{
- switch (you.hunger_state)
- {
- case HS_STARVING:
- // No regeneration for starving vampires!
+ if (you.hunger_state == HS_STARVING)
+ // No regeneration for starving vampires.
rr = 0;
- break;
-
- case HS_NEAR_STARVING:
- case HS_VERY_HUNGRY:
- case HS_HUNGRY:
- // Halved if hungry.
+ else if (you.hunger_state == HS_ENGORGED)
+ // More bonus regeneration for engorged vampires.
+ rr += 20;
+ else if (you.hunger_state <= HS_HUNGRY)
+ // Halved regeneration for hungry vampires.
rr /= 2;
- break;
-
- case HS_SATIATED:
- // No effect at standard hunger.
- break;
-
- case HS_FULL:
- case HS_VERY_FULL:
- // Bonus for being full.
+ else if (you.hunger_state >= HS_FULL)
+ // Bonus regeneration for full vampires.
rr += 10;
- break;
-
- case HS_ENGORGED:
- // Bigger bonus for being engorged.
- rr += 20;
- break;
- }
}
// Slow heal mutation. Applied last.