summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/player.cc
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-03-14 11:45:19 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-03-14 11:45:19 +0000
commit96a3b31ff02c4f260140f26d9cb79948c67b2dec (patch)
treef31731e5e41ee3cd678776e55914818f33fe19eb /crawl-ref/source/player.cc
parentb023db56a817c7dea12b16004eb9cb72de1b3edb (diff)
downloadcrawl-ref-96a3b31ff02c4f260140f26d9cb79948c67b2dec.tar.gz
crawl-ref-96a3b31ff02c4f260140f26d9cb79948c67b2dec.zip
Vampires are now only poison resistant if thirsty or worse, and I've
added a list of their current resistances and such to the status (@) output, depending on their state of hunger. If poison resistant they'll now also attempt to drain monsters of type CE_POISONOUS. The regeneration rate at full and "alive" has been lowered significantly. (The effect of a permanent ring of regeneration without any of the drawbacks was much too strong.) Oh, and non-thirsty vampires (satiated or above) can now be rotted, e.g. by potions of decay. Also, Red Draconians and White Draconians now gain their resistances at xl 14 rather than 18, as suggested in FR 1865186. (I'm leaving the rest of that FR alone for now.) git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3632 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/player.cc')
-rw-r--r--crawl-ref/source/player.cc90
1 files changed, 71 insertions, 19 deletions
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index 4efee38c60..88f58592ef 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -971,9 +971,9 @@ int player_regen(void)
return (rr);
case HS_FULL:
case HS_VERY_FULL:
- return (rr + 20);
+ return (rr + 10);
case HS_ENGORGED:
- return (rr + 40);
+ return (rr + 20);
}
}
@@ -1420,6 +1420,10 @@ int player_res_poison(bool calc_unid, bool temp)
{
int rp = 0;
+ // only thirsty vampires are naturally poison resistant
+ if (you.species == SP_VAMPIRE && you.hunger_state <= HS_HUNGRY)
+ rp++;
+
/* rings of poison resistance */
rp += player_equip( EQ_RINGS, RING_POISON_RESISTANCE, calc_unid );
@@ -3153,7 +3157,7 @@ void level_change(bool skip_ability_increase)
redraw_screen();
}
- if (you.experience_level == 18)
+ if (you.experience_level == 14)
{
switch (you.species)
{
@@ -3163,13 +3167,15 @@ void level_change(bool skip_ability_increase)
case SP_WHITE_DRACONIAN:
perma_mutate(MUT_COLD_RESISTANCE, 1);
break;
- case SP_BLACK_DRACONIAN:
- perma_mutate(MUT_SHOCK_RESISTANCE, 1);
- break;
default:
break;
}
}
+ else if (you.species == SP_BLACK_DRACONIAN
+ && you.experience_level == 18)
+ {
+ perma_mutate(MUT_SHOCK_RESISTANCE, 1);
+ }
if (!(you.experience_level % 3))
hp_adjust++;
@@ -3581,6 +3587,60 @@ void display_char_status()
mpr( "You are standing in death's doorway." );
else
mpr( "You are alive." );
+
+ if (you.species == SP_VAMPIRE)
+ {
+ std::string msg = "At your current hunger state you ";
+ std::vector<std::string> attrib;
+
+ switch (you.hunger_state)
+ {
+ case HS_STARVING:
+ attrib.push_back("resist poison");
+ attrib.push_back("are susceptible to fire");
+ attrib.push_back("significantly resist cold");
+ attrib.push_back("strongly resist negative energy");
+ attrib.push_back("resist torment");
+ if (you.experience_level >= 13)
+ attrib.push_back("are in touch with the powers of death");
+ attrib.push_back("do not heal!");
+ break;
+ case HS_NEAR_STARVING:
+ attrib.push_back("resist poison");
+ attrib.push_back("significantly resist cold");
+ attrib.push_back("strongly resist negative energy");
+ if (you.experience_level >= 13)
+ attrib.push_back("are in touch with the powers of death");
+ attrib.push_back("heal slowly!");
+ break;
+ case HS_HUNGRY:
+ case HS_VERY_HUNGRY:
+ attrib.push_back("resist poison");
+ attrib.push_back("resist cold");
+ attrib.push_back("significantly resist negative energy");
+ if (you.experience_level >= 13)
+ attrib.push_back("are in touch with the powers of death");
+ attrib.push_back("heal slowly!");
+ break;
+ case HS_SATIATED:
+ attrib.push_back("resist negative energy.");
+ break;
+ case HS_FULL:
+ case HS_VERY_FULL:
+ attrib.push_back("heal quickly.");
+ break;
+ case HS_ENGORGED:
+ attrib.push_back("heal extremely quickly.");
+ break;
+ }
+
+ if (!attrib.empty())
+ {
+ msg += comma_separated_line(attrib.begin(), attrib.end(),
+ ", and ", ", ");
+ mpr(msg.c_str());
+ }
+ }
switch (you.attribute[ATTR_TRANSFORMATION])
{
@@ -3644,19 +3704,10 @@ void display_char_status()
mpr( "You are praying." );
if (you.disease && !you.duration[DUR_REGENERATION]
- || you.species == SP_VAMPIRE && you.hunger_state <= HS_STARVING)
+ && (you.species != SP_VAMPIRE || you.hunger_state > HS_STARVING))
{
mpr("You do not heal.");
}
- else if (you.species == SP_VAMPIRE)
- {
- if (you.hunger_state <= HS_HUNGRY)
- mpr("You heal slowly.");
- else if (you.hunger_state == HS_ENGORGED)
- mpr("You heal very quickly.");
- else if (you.hunger_state >= HS_FULL)
- mpr("You heal quickly.");
- }
if (you.duration[DUR_REGENERATION]
&& (you.species != SP_VAMPIRE || you.hunger_state > HS_STARVING))
@@ -4998,7 +5049,8 @@ bool rot_player( int amount )
if (amount <= 0)
return false;
- if (you.is_undead)
+ if (you.is_undead
+ && (you.species != SP_VAMPIRE || you.hunger_state <= HS_HUNGRY))
{
mpr( "You feel terrible." );
return false;
@@ -5648,9 +5700,9 @@ int player::damage_brand(int)
case TRAN_BAT:
if (you.species == SP_VAMPIRE && one_chance_in(5))
- {
ret = SPWPN_VAMPIRICISM;
- } // else fall through
+ break;
+
default:
break;
}