summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/output.cc
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-12-28 14:09:26 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-12-28 14:09:26 +0000
commit90d0e8c3f9d3fdcd0aa0ef1a479ad178ca3ad7e2 (patch)
tree0b0c8adc8bd00bc67b00f9e76e5db073339792e0 /crawl-ref/source/output.cc
parent971e4ca792042d987cd898ae8144f849da188f2f (diff)
downloadcrawl-ref-90d0e8c3f9d3fdcd0aa0ef1a479ad178ca3ad7e2.tar.gz
crawl-ref-90d0e8c3f9d3fdcd0aa0ef1a479ad178ca3ad7e2.zip
Fix 2471146: equipment being melded due to mutations.
Fix 2426301: melding not working properly for Merfolk transformation. Colour melded equipment darkgrey on the % screen. Disallow Merfolk slipping out of their boots if doing so would kill the player due to stat loss. (Falling into water when flying will still kill them.) When this is the case, deep water is regarded as unsafe for travel. TODO: Ending a transformation should likewise be impossible if doing so would cause stat loss due to unmelding of items. Add a stat_colour option to highlight the stats when they're below a given threshold. By default, lightred at 1, red at 2-3. You could argue for setting the default to 7 but that would mean colouring almost all stats for each beginning character. (FR 2022232) Tidy up the stat colouring methods. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8004 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/output.cc')
-rw-r--r--crawl-ref/source/output.cc107
1 files changed, 68 insertions, 39 deletions
diff --git a/crawl-ref/source/output.cc b/crawl-ref/source/output.cc
index ec6343346b..22a9e1a186 100644
--- a/crawl-ref/source/output.cc
+++ b/crawl-ref/source/output.cc
@@ -53,8 +53,8 @@
// Color for captions like 'Health:', 'Str:', etc.
#define HUD_CAPTION_COLOR Options.status_caption_colour
-// Color for values, which come after captions.
-static const short HUD_VALUE_COLOR = LIGHTGREY;
+// Colour for values, which come after captions.
+static const short HUD_VALUE_COLOUR = LIGHTGREY;
// ----------------------------------------------------------------------
// colour_bar
@@ -227,7 +227,7 @@ void update_turn_count()
cgotoxy(19+6, 8, GOTO_STAT);
// Show the turn count starting from 1. You can still quit on turn 0.
- textcolor(HUD_VALUE_COLOR);
+ textcolor(HUD_VALUE_COLOUR);
cprintf("%ld", you.num_turns);
textcolor(LIGHTGREY);
}
@@ -280,20 +280,21 @@ static const char* _describe_hunger(int& color)
static void _print_stats_mp(int x, int y)
{
// Calculate colour
- short mp_colour = HUD_VALUE_COLOR;
+ short mp_colour = HUD_VALUE_COLOUR;
{
int mp_percent = (you.max_magic_points == 0
? 100
: (you.magic_points * 100) / you.max_magic_points);
- for ( unsigned int i = 0; i < Options.mp_colour.size(); ++i )
- if ( mp_percent <= Options.mp_colour[i].first )
+
+ for (unsigned int i = 0; i < Options.mp_colour.size(); ++i)
+ if (mp_percent <= Options.mp_colour[i].first)
mp_colour = Options.mp_colour[i].second;
}
cgotoxy(x+8, y, GOTO_STAT);
textcolor(mp_colour);
cprintf("%d", you.magic_points);
- textcolor(HUD_VALUE_COLOR);
+ textcolor(HUD_VALUE_COLOUR);
cprintf("/%d", you.max_magic_points );
int col = _count_digits(you.magic_points)
@@ -310,7 +311,7 @@ static void _print_stats_hp(int x, int y)
const int max_max_hp = get_real_hp(true, true);
// Calculate colour
- short hp_colour = HUD_VALUE_COLOR;
+ short hp_colour = HUD_VALUE_COLOUR;
{
const int hp_percent =
(you.hp * 100) / (max_max_hp ? max_max_hp : you.hp);
@@ -327,7 +328,7 @@ static void _print_stats_hp(int x, int y)
cprintf(max_max_hp != you.hp_max ? "HP: " : "Health: ");
textcolor(hp_colour);
cprintf( "%d", you.hp );
- textcolor(HUD_VALUE_COLOR);
+ textcolor(HUD_VALUE_COLOUR);
cprintf( "/%d", you.hp_max );
if (max_max_hp != you.hp_max)
cprintf( " (%d)", max_max_hp );
@@ -336,10 +337,50 @@ static void _print_stats_hp(int x, int y)
for (int i = 18-col; i > 0; i--)
cprintf(" ");
- if (! Options.classic_hud)
+ if (!Options.classic_hud)
HP_Bar.draw(19, y, you.hp, you.hp_max);
}
+short _get_stat_colour(stat_type stat)
+{
+ int val = 0, max_val = 0;
+ switch (stat)
+ {
+ case STAT_STRENGTH:
+ val = you.strength;
+ max_val = you.max_strength;
+ break;
+ case STAT_INTELLIGENCE:
+ val = you.intel;
+ max_val = you.max_intel;
+ break;
+ case STAT_DEXTERITY:
+ val = you.dex;
+ max_val = you.max_dex;
+ break;
+ default:
+ ASSERT(false);
+ }
+
+ // Check the stat_colour option for warning thresholds.
+ for (unsigned int i = 0; i < Options.stat_colour.size(); ++i)
+ if (val <= Options.stat_colour[i].first)
+ return (Options.stat_colour[i].second);
+
+ // Stat is magically increased.
+ if (you.duration[DUR_DIVINE_STAMINA]
+ || stat == STAT_STRENGTH && you.duration[DUR_MIGHT])
+ {
+ return (LIGHTBLUE); // no end of effect warning
+ }
+
+ // Stat is degenerated.
+ if (val < max_val)
+ return (YELLOW);
+
+ return (HUD_VALUE_COLOUR);
+}
+
// XXX: alters state! Does more than just print!
static void _print_stats_str(int x, int y)
{
@@ -353,13 +394,7 @@ static void _print_stats_str(int x, int y)
cgotoxy(x+5, y, GOTO_STAT);
- if (you.duration[DUR_MIGHT] || you.duration[DUR_DIVINE_STAMINA])
- textcolor(LIGHTBLUE); // no end of effect warning
- else if (you.strength < you.max_strength)
- textcolor(YELLOW);
- else
- textcolor(HUD_VALUE_COLOR);
-
+ textcolor(_get_stat_colour(STAT_STRENGTH));
cprintf( "%d", you.strength );
if (you.strength != you.max_strength)
@@ -382,13 +417,7 @@ static void _print_stats_int(int x, int y)
cgotoxy(x+5, y, GOTO_STAT);
- if (you.duration[DUR_DIVINE_STAMINA])
- textcolor(LIGHTBLUE); // no end of effect warning
- else if (you.intel < you.max_intel)
- textcolor(YELLOW);
- else
- textcolor(HUD_VALUE_COLOR);
-
+ textcolor(_get_stat_colour(STAT_INTELLIGENCE));
cprintf( "%d", you.intel );
if (you.intel != you.max_intel)
@@ -409,13 +438,7 @@ static void _print_stats_dex(int x, int y)
cgotoxy(x+5, y, GOTO_STAT);
- if (you.duration[DUR_DIVINE_STAMINA])
- textcolor(LIGHTBLUE); // no end of effect warning
- else if (you.dex < you.max_dex)
- textcolor(YELLOW);
- else
- textcolor(HUD_VALUE_COLOR);
-
+ textcolor(_get_stat_colour(STAT_DEXTERITY));
cprintf( "%d", you.dex );
if (you.dex != you.max_dex)
@@ -433,7 +456,7 @@ static void _print_stats_ac(int x, int y)
else if (you.duration[DUR_ICY_ARMOUR] || you.duration[DUR_STONESKIN])
textcolor( LIGHTBLUE );
else
- textcolor( HUD_VALUE_COLOR );
+ textcolor( HUD_VALUE_COLOUR );
cprintf( "%2d ", player_AC() );
// SH: (two lines lower)
@@ -441,14 +464,14 @@ static void _print_stats_ac(int x, int y)
if (you.duration[DUR_CONDENSATION_SHIELD] || you.duration[DUR_DIVINE_SHIELD])
textcolor( LIGHTBLUE );
else
- textcolor( HUD_VALUE_COLOR );
+ textcolor( HUD_VALUE_COLOUR );
cprintf( "%2d ", player_shield_class() );
}
static void _print_stats_ev(int x, int y)
{
cgotoxy(x+4, y, GOTO_STAT);
- textcolor(you.duration[DUR_FORESCRY] ? LIGHTBLUE : HUD_VALUE_COLOR);
+ textcolor(you.duration[DUR_FORESCRY] ? LIGHTBLUE : HUD_VALUE_COLOUR);
cprintf( "%2d ", player_evasion() );
}
@@ -834,7 +857,7 @@ void print_stats(void)
// Increase y-value for all following lines.
yhack = 1;
cgotoxy(1+6, 8, GOTO_STAT);
- textcolor(HUD_VALUE_COLOR);
+ textcolor(HUD_VALUE_COLOUR);
cprintf("%d", you.gold);
}
@@ -843,7 +866,7 @@ void print_stats(void)
cgotoxy(1,8 + yhack, GOTO_STAT);
textcolor(Options.status_caption_colour);
cprintf("Exp Pool: ");
- textcolor(HUD_VALUE_COLOR);
+ textcolor(HUD_VALUE_COLOUR);
#if DEBUG_DIAGNOSTICS
cprintf("%d/%d (%d) ",
you.skill_cost_level, you.exp_available, you.experience);
@@ -935,7 +958,7 @@ void print_stats_level()
textcolor(HUD_CAPTION_COLOR);
cprintf("Place: ");
- textcolor(HUD_VALUE_COLOR);
+ textcolor(HUD_VALUE_COLOUR);
#if DEBUG_DIAGNOSTICS
cprintf( "(%d) ", you.your_level + 1 );
#endif
@@ -1658,14 +1681,20 @@ static void _print_overview_screen_equip(column_composer& cols,
{
const int item_idx = you.equip[e_order[i]];
const item_def& item = you.inv[item_idx];
- const char* colname = colour_to_str(item.colour).c_str();
+
+ // Colour melded equipment dark grey.
+ const char* colname =
+ player_wearing_slot(e_order[i]) ?
+ colour_to_str(item.colour).c_str() : "darkgrey";
+
const char equip_char = index_to_letter(item_idx);
snprintf(buf, sizeof buf,
- "%s<w>%c</w> - <%s>%s</%s>",
+ "%s<w>%c</w> - <%s>%s%s</%s>",
slot,
equip_char,
colname,
+ !player_wearing_slot(e_order[i]) ? "melded " : "",
item.name(DESC_PLAIN, true).substr(0,42).c_str(),
colname);
equip_chars.push_back(equip_char);