summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-03-07 19:57:49 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-03-07 19:57:49 +0000
commit0073de23aefbc5bd21d6e5471bc830654fb07b33 (patch)
treeffc563aa4c0a5eb08ebb30e407e189ec58db3c35 /crawl-ref
parenta41cd167867789d43e2601c456d276d0fe89a4d8 (diff)
downloadcrawl-ref-0073de23aefbc5bd21d6e5471bc830654fb07b33.tar.gz
crawl-ref-0073de23aefbc5bd21d6e5471bc830654fb07b33.zip
Fix 1909592: trunk not compiling on Windows
Improve information output for vampires in the screens 'A', '@' and '%'. Reduce the "in touch with the powers of death" effect to one boost at xl 6, and disallow bat form at engorged. Also, modify messages if they are not available right away for feeding reasons. What's still missing is a way to output those temporary resistances (currently only discernible from the '%' screen), preferentially in the form of some general statements on 'A': "When hungry, you gain resistance to cold." and more detailed descriptions on '@'. Fix a couple of wrong hunger status checks. Comment out the "Very agile monsters are quite hard to hit in your current equipment." messages because to my knowledge they hold little importance right now. Please correct me if that view is wrong. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3534 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/source/abl-show.cc18
-rw-r--r--crawl-ref/source/food.cc21
-rw-r--r--crawl-ref/source/item_use.cc2
-rw-r--r--crawl-ref/source/mutation.cc19
-rw-r--r--crawl-ref/source/newgame.cc2
-rw-r--r--crawl-ref/source/output.cc43
-rw-r--r--crawl-ref/source/player.cc77
7 files changed, 113 insertions, 69 deletions
diff --git a/crawl-ref/source/abl-show.cc b/crawl-ref/source/abl-show.cc
index 4b25ad308f..61c87c46a8 100644
--- a/crawl-ref/source/abl-show.cc
+++ b/crawl-ref/source/abl-show.cc
@@ -825,10 +825,16 @@ bool activate_ability()
std::vector<talent> talents = your_talents(false);
if ( talents.empty() )
{
- mpr("Sorry, you're not good enough to have a special ability.");
+ // Vampires can't turn into bats when full to the rim with blood.
+ if (you.species == SP_VAMPIRE && you.experience_level >= 3)
+ mpr("Sorry, you're too full to transform right now.");
+ else
+ mpr("Sorry, you're not good enough to have a special ability.");
+
crawl_state.zero_turns_taken();
return false;
}
+
if ( you.duration[DUR_CONF] )
{
talents = your_talents(true);
@@ -900,6 +906,7 @@ static bool activate_talent(const talent& tal)
case ABIL_END_TRANSFORMATION:
case ABIL_DELAYED_FIREBALL:
case ABIL_MUMMY_RESTORATION:
+ case ABIL_TRAN_BAT:
hungerCheck = false;
break;
default:
@@ -1991,15 +1998,16 @@ std::vector<talent> your_talents( bool check_confused )
(you.species == SP_BLACK_DRACONIAN) ? ABIL_BREATHE_LIGHTNING :
(you.species == SP_PURPLE_DRACONIAN) ? ABIL_BREATHE_POWER :
(you.species == SP_PALE_DRACONIAN) ? ABIL_BREATHE_STEAM :
- (you.species == SP_MOTTLED_DRACONIAN)? ABIL_BREATHE_STICKY_FLAME:
- ABIL_NON_ABILITY);
+ (you.species == SP_MOTTLED_DRACONIAN)? ABIL_BREATHE_STICKY_FLAME
+ : ABIL_NON_ABILITY);
if (ability != ABIL_NON_ABILITY)
add_talent(talents, ability, check_confused );
}
}
- if (you.species == SP_VAMPIRE && you.experience_level >= 3 &&
- you.attribute[ATTR_TRANSFORMATION] != TRAN_BAT)
+ if (you.species == SP_VAMPIRE && you.experience_level >= 3
+ && you.hunger_state < HS_ENGORGED
+ && you.attribute[ATTR_TRANSFORMATION] != TRAN_BAT)
{
add_talent(talents, ABIL_TRAN_BAT, check_confused );
}
diff --git a/crawl-ref/source/food.cc b/crawl-ref/source/food.cc
index b9850752ab..4230529edd 100644
--- a/crawl-ref/source/food.cc
+++ b/crawl-ref/source/food.cc
@@ -569,7 +569,8 @@ bool eat_food(bool run_hook, int slot)
if (you.hunger >= 11000)
{
- mpr("You're too full to eat anything.");
+ mprf("You're too full to %s anything.",
+ you.species == SP_VAMPIRE ? "drain" : "eat");
crawl_state.zero_turns_taken();
return (false);
}
@@ -641,18 +642,32 @@ static bool food_change(bool suppress_message)
if (newstate < HS_SATIATED)
interrupt_activity( AI_HUNGRY );
+ else if (newstate == HS_ENGORGED && you.species == SP_VAMPIRE
+ && you.attribute[ATTR_TRANSFORMATION] == TRAN_BAT
+ && you.duration[DUR_TRANSFORMATION] > 2)
+ {
+ mpr("Your bloodfilled body can't sustain your transformation much longer.",
+ MSGCH_WARN);
+ you.duration[DUR_TRANSFORMATION] = 2;
+ }
if (suppress_message == false)
{
switch (you.hunger_state)
{
case HS_STARVING:
- mpr("You are starving!", MSGCH_FOOD);
+ if (you.species == SP_VAMPIRE)
+ mpr("You feel devoid of blood!");
+ else
+ mpr("You are starving!", MSGCH_FOOD);
learned_something_new(TUT_YOU_STARVING);
you.check_awaken(500);
break;
case HS_NEAR_STARVING:
- mpr("You are near starving.", MSGCH_FOOD);
+ if (you.species == SP_VAMPIRE)
+ mpr("You feel almost devoid of blood!");
+ else
+ mpr("You are near starving.", MSGCH_FOOD);
learned_something_new(TUT_YOU_HUNGRY);
break;
case HS_VERY_HUNGRY:
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index 3545cd8f65..7845bcd483 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -1292,7 +1292,7 @@ quiver_type get_quiver_type()
static bool Hack_Ignore_F_Inscription = false; // only for "why can't I fire" feedback
static void _get_fire_order(std::vector<int>& fire_order)
{
- for (unsigned int i_inv=Options.fire_items_start; i_inv<ENDOFPACK; i_inv++)
+ for (int i_inv=Options.fire_items_start; i_inv<ENDOFPACK; i_inv++)
{
const item_def& item = you.inv[i_inv];
if (!is_valid_item(item))
diff --git a/crawl-ref/source/mutation.cc b/crawl-ref/source/mutation.cc
index 35f3c22a78..47353ebca3 100644
--- a/crawl-ref/source/mutation.cc
+++ b/crawl-ref/source/mutation.cc
@@ -1196,21 +1196,22 @@ formatted_string describe_mutations()
break;
case SP_VAMPIRE:
- if (you.hunger_state >= HS_SATIATED)
+ if (you.hunger_state < HS_SATIATED)
{
- result += "<green>";
- result += "You are";
- result += (you.experience_level > 25) ?
- " strongly" : "";
- result += " in touch with the powers of death." EOL;
- result += "You are quite resistant to negative energy." EOL;
- result += "You can see invisible." EOL;
- result += "</green>";
+ if (you.experience_level >= 13)
+ {
+ result += "<green>";
+ result += "You are";
+ result += " in touch with the powers of death." EOL;
+ result += "</green>";
+ }
}
if (you.hunger_state <= HS_STARVING)
result += "<green>You do not heal.</green>" EOL;
else if (you.hunger_state <= HS_HUNGRY)
result += "<green>You heal slowly.</green>" EOL;
+ else if (you.hunger_state >= HS_ENGORGED)
+ result += "<green>Your natural rate of healing is extremely fast.</green>" EOL;
else if (you.hunger_state >= HS_FULL)
result += "<green>Your natural rate of healing is unusually fast.</green>" EOL;
have_any = true;
diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc
index a64d25eca1..9adc168062 100644
--- a/crawl-ref/source/newgame.cc
+++ b/crawl-ref/source/newgame.cc
@@ -2296,6 +2296,8 @@ static void give_basic_mutations(species_type speci)
case SP_VAMPIRE:
you.mutation[MUT_FANGS] = 3;
you.mutation[MUT_SLOW_METABOLISM] = 1;
+ you.mutation[MUT_ACUTE_VISION] = 1;
+ // This needs to be changed!
you.mutation[MUT_POISON_RESISTANCE] = 1;
break;
default:
diff --git a/crawl-ref/source/output.cc b/crawl-ref/source/output.cc
index c9329fe18c..f9e4e62326 100644
--- a/crawl-ref/source/output.cc
+++ b/crawl-ref/source/output.cc
@@ -208,10 +208,10 @@ static std::string describe_hunger()
case HS_VERY_HUNGRY:
return (vamp? "Very Thirsty" : "Very Hungry");
case HS_NEAR_STARVING:
- return ("Near Starving");
+ return (vamp? "Near Bloodless" : "Near Starving");
case HS_STARVING:
default:
- return ("Starving");
+ return (vamp? "Bloodless" : "Starving");
}
}
@@ -1525,14 +1525,29 @@ std::string status_mut_abilities()
if (you.duration[DUR_PRAYER])
text += "praying, ";
- if (you.duration[DUR_REGENERATION]
- && (you.species != SP_VAMPIRE || you.hunger_state >= HS_HUNGRY)
- || you.species == SP_VAMPIRE && you.hunger_state >= HS_FULL)
+ if (you.disease && !you.duration[DUR_REGENERATION]
+ || you.species == SP_VAMPIRE && you.hunger_state <= HS_STARVING)
+ {
+ text += "non-regenerating, ";
+ }
+ else if (you.duration[DUR_REGENERATION]
+ || you.species == SP_VAMPIRE && you.hunger_state != HS_SATIATED)
{
if (you.disease)
- text += "recuperating, ";
+ text += "recuperating";
else
- text += "regenerating, ";
+ text += "regenerating";
+
+ if (you.species == SP_VAMPIRE && you.hunger_state != HS_SATIATED)
+ {
+ if (you.hunger_state <= HS_HUNGRY)
+ text += " slowly";
+ else if (you.hunger_state == HS_ENGORGED)
+ text += " very quickly";
+ else if (you.hunger_state >= HS_FULL)
+ text += " quickly";
+ }
+ text += ", ";
}
// not used as resistance part already says so
@@ -1647,12 +1662,6 @@ std::string status_mut_abilities()
else if (!you.duration[DUR_HASTE] && you.duration[DUR_SWIFTNESS])
text += "swift, ";
- if (you.disease
- || you.species == SP_VAMPIRE && you.hunger_state < HS_HUNGRY)
- {
- text += "non-regenerating, ";
- }
-
if (you.attribute[ATTR_HELD])
text += "held, ";
@@ -1717,7 +1726,7 @@ std::string status_mut_abilities()
text += "\nYou are a cloud of diffuse gas.";
break;
}
-
+/*
const int to_hit = calc_your_to_hit( false ) * 2;
snprintf( info, INFO_SIZE,
@@ -1733,7 +1742,7 @@ std::string status_mut_abilities()
(to_hit < 100) ? "You feel comfortable with your ability to fight"
: "You feel confident with your ability to fight" );
text += info;
-
+*/
if (you.duration[DUR_DEATHS_DOOR])
text += "\nYou are standing in death's doorway.";
@@ -1777,6 +1786,10 @@ std::string status_mut_abilities()
have_any = true;
break;
+ case SP_VAMPIRE:
+ if (you.experience_level < 13 || you.hunger_state > HS_HUNGRY)
+ break;
+ // else fall-through
case SP_MUMMY:
text += "in touch with death";
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index aebac973fe..f4cf3381bc 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -1435,13 +1435,9 @@ int player_spec_death()
}
else if (you.species == SP_VAMPIRE)
{
- // Vampires get bonus only when not hungry
- if (you.experience_level >= 13 && you.hunger_state > HS_HUNGRY)
- {
+ // Vampires get bonus only when hungry
+ if (you.experience_level >= 13 && you.hunger_state <= HS_HUNGRY)
sd++;
- if (you.experience_level >= 26)
- sd++;
- }
}
// transformations:
@@ -2395,10 +2391,6 @@ int player_see_invis(bool calc_unid)
{
int si = 0;
- /* Vampires can see invisible */
- if (you.species == SP_VAMPIRE)
- si++;
-
si += player_equip( EQ_RINGS, RING_SEE_INVISIBLE, calc_unid );
/* armour: (checks head armour only) */
@@ -2938,13 +2930,22 @@ void level_change(bool skip_ability_increase)
case SP_VAMPIRE:
if (you.experience_level == 3)
{
- mpr( "You can now transform into a vampire bat.",
- MSGCH_INTRINSIC_GAIN );
+ if (you.hunger_state == HS_ENGORGED)
+ {
+ mpr( "If you weren't so full you could now transform "
+ "into a vampire bat.", MSGCH_INTRINSIC_GAIN );
+ }
+ else
+ {
+ mpr( "You can now transform into a vampire bat.",
+ MSGCH_INTRINSIC_GAIN );
+ }
}
- else if (you.experience_level == 13 || you.experience_level == 26)
+ else if (you.experience_level == 13)
{
- mpr( "You feel more in touch with the powers of death.",
- MSGCH_INTRINSIC_GAIN );
+ mprf( MSGCH_INTRINSIC_GAIN,
+ "You feel %sin touch with the powers of death.",
+ (you.hunger_state <= HS_HUNGRY ? "" : "strangely "));
}
break;
case SP_NAGA:
@@ -3490,7 +3491,9 @@ static void ability_increase()
void display_char_status()
{
- if (you.is_undead)
+ if (you.species == SP_VAMPIRE && you.hunger_state == HS_ENGORGED)
+ mpr( "You feel almost alive." );
+ else if (you.is_undead)
mpr( "You are undead." );
else if (you.duration[DUR_DEATHS_DOOR])
mpr( "You are standing in death's doorway." );
@@ -3558,16 +3561,30 @@ void display_char_status()
if (you.duration[DUR_PRAYER])
mpr( "You are praying." );
+ if (you.disease && !you.duration[DUR_REGENERATION]
+ || 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_HUNGRY)
- || you.species == SP_VAMPIRE && you.hunger_state >= HS_FULL)
+ && (you.species != SP_VAMPIRE || you.hunger_state > HS_STARVING))
{
if (you.disease)
mpr("You are recuperating from your illness.");
else
- mpr( "You are regenerating." );
+ mpr("You are regenerating.");
}
-
+
if (you.duration[DUR_SWIFTNESS])
mpr( "You can move swiftly." );
@@ -3667,18 +3684,6 @@ void display_char_status()
" faster than usual." : ".") );
}
- if (you.disease || 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_SATIATED)
- mpr("You heal quickly.");
- }
-
// prints a contamination message
contaminate_player( 0, true );
@@ -3687,7 +3692,7 @@ void display_char_status()
mprf("Your hands are glowing %s red.",
(you.duration[DUR_CONFUSING_TOUCH] > 40) ? "an extremely bright" :
(you.duration[DUR_CONFUSING_TOUCH] > 20) ? "bright"
- : "a soft" );
+ : "a soft" );
}
if (you.duration[DUR_SURE_BLADE])
@@ -3695,7 +3700,7 @@ void display_char_status()
mprf("You have a %sbond with your blade.",
(you.duration[DUR_SURE_BLADE] > 15) ? "strong " :
(you.duration[DUR_SURE_BLADE] > 5) ? ""
- : "weak " );
+ : "weak " );
}
int move_cost = (player_speed() * player_movement_speed()) / 10;
@@ -3727,7 +3732,7 @@ void display_char_status()
(move_cost == 10) ? "average" :
(move_cost < 13) ? "slow"
: "very slow" );
-
+/*
const int to_hit = calc_your_to_hit( false ) * 2;
// Messages based largely on percentage chance of missing the
// average EV 10 humanoid, and very agile EV 30 (pretty much
@@ -3747,7 +3752,7 @@ void display_char_status()
(to_hit < 60) ? "Very agile monsters are a bit hard to hit" :
(to_hit < 100) ? "You feel comfortable with your ability to fight"
: "You feel confident with your ability to fight" );
-
+*/
#if DEBUG_DIAGNOSTICS
mprf("To-hit: %d", to_hit);
#endif