diff options
-rw-r--r-- | crawl-ref/docs/crawl_options.txt | 48 | ||||
-rw-r--r-- | crawl-ref/init.txt | 17 | ||||
-rw-r--r-- | crawl-ref/source/abl-show.cc | 2 | ||||
-rw-r--r-- | crawl-ref/source/command.cc | 47 | ||||
-rw-r--r-- | crawl-ref/source/enum.h | 5 | ||||
-rw-r--r-- | crawl-ref/source/externs.h | 7 | ||||
-rw-r--r-- | crawl-ref/source/food.cc | 83 | ||||
-rw-r--r-- | crawl-ref/source/initfile.cc | 23 | ||||
-rw-r--r-- | crawl-ref/source/invent.h | 8 | ||||
-rw-r--r-- | crawl-ref/source/itemname.cc | 51 | ||||
-rw-r--r-- | crawl-ref/source/itemname.h | 5 | ||||
-rw-r--r-- | crawl-ref/source/menu.cc | 8 | ||||
-rw-r--r-- | crawl-ref/source/menu.h | 9 | ||||
-rw-r--r-- | crawl-ref/source/notes.cc | 2 | ||||
-rw-r--r-- | crawl-ref/source/output.cc | 90 | ||||
-rw-r--r-- | crawl-ref/source/spl-book.cc | 2 | ||||
-rw-r--r-- | crawl-ref/source/spl-cast.cc | 2 |
17 files changed, 355 insertions, 54 deletions
diff --git a/crawl-ref/docs/crawl_options.txt b/crawl-ref/docs/crawl_options.txt index 96b7dc7aa9..54573741b9 100644 --- a/crawl-ref/docs/crawl_options.txt +++ b/crawl-ref/docs/crawl_options.txt @@ -54,9 +54,11 @@ The contents of this text are: easy_exit_menu, default_autoprayer, sort_menus 4-j Message and Display Improvements. hp_warning, mp_warning, hp_colour, mp_colour, always_greet, - terse_hand, delay_message_clear, menu_colour, message_colour, - increasing_skill_progress, show_inventory_weights, - show_turns, show_beam, item_stack_summary_minimum + terse_hand, delay_message_clear, menu_colour, + menu_colour_prefix_id, menu_colour_prefix_class + message_colour, increasing_skill_progress, + show_inventory_weights, show_turns, show_beam, + item_stack_summary_minimum 4-k Missiles. fire_items_start, fire_order 4-l Message Channels. @@ -936,6 +938,9 @@ menu_colour = <colour>:<regex> menu_colour = green:(worn|neck|hand|weapon) menu_colour = red: cursed + To colour identified artefacts, try + menu_colour = white:( [-+] the) + If you frequently die because you forget to use emergency items, try menu_colour = cyan:(potions? of heal wounds|teleportation) menu_colour = lightcyan:(blinking|wand of (fire|cold|draining)) @@ -950,6 +955,33 @@ menu_colour = <colour>:<regex> read with '?:'). The following line will show level ups in white: menu_colour = white:Reached XP level +menu_colour_prefix_id = false + Setting this option to true will prefix the string against + which menu_colour regexes are matched (not the string + displayed) with the item's identification state: "unidentified" + for unidentified, "known" for wands for which you know the type + but don't know the number of charges, and for rings with plusses + for which you know the type but don't know the plus value, and + "identified" for other identified items. + + Note that the prefix is put before the the *entire* string which + is displayed, so if you're wielding a uncursed dagger which has + the 'a' slot, the string the regexes will match against is + "identified a - an uncursed dagger (weapon)". + +menu_colour_prefix_class = false + Setting this option to true will prefix the string against which + menu_colour regexes are matched (not the string displayed) with + the item's object type: armour, weapon, wand, etc. If both + this option and menu_colour_prefix_id are set to true, then + the identification string comes before the object type string + (i.e., "identified weapon", "known wand", etc). + + Note that the prefix is put before the the *entire* string which + is displayed, so if you're wielding a uncursed dagger which has + the 'a' slot, the string the regexes will match against is + "weapon a - an uncursed dagger (weapon)". + message_colour = <colour>:[<channel>:]<regex> message_colour allows you to override colours for individual messages. For instance, if you find the low hp warning to be insufficiently @@ -1184,6 +1216,10 @@ use_notes = true - Dying You can use the command ':' for manually adding notes. +user_note_prefix = <string> + Prefixes manually added notes with the given string, to make + them easier to find. + note_items = <regexes> When an item is identified, it will be noted if it is an artifact (fixed, unrand, or random) or if its short description matches a regex. @@ -1412,6 +1448,12 @@ classic_item_colours = false This option will not affect the colour of existing items, only items generated after the option is set. +detailed_hunger = false + If set to true, then Crawl will tell you about three additional + hunger states: near starving, very hungry, and very full. + These hunger states are informational only, and have no effect + upon game play. + 6-b DOS and Windows. ------------------------ diff --git a/crawl-ref/init.txt b/crawl-ref/init.txt index 3801452118..4a4108cb20 100644 --- a/crawl-ref/init.txt +++ b/crawl-ref/init.txt @@ -177,6 +177,8 @@ stab_brand = hi:blue # show_turns = true # show_beam = true # item_stack_summary_minimum = 500 +# menu_colour_prefix_id = true +# menu_colour_prefix_class = true # Colouring for the inventory menu_colour = lightred: cursed.*(worn|neck|hand|weapon)\) @@ -184,6 +186,16 @@ menu_colour = green:(worn|neck|hand|weapon)\) menu_colour = red: cursed menu_colour = red: rotting +# Identified artefacts +menu_colour = white:( [-+] the) + +# These lines will colour ego items; they require that +# menu_colour_prefix_id and menu_colour_prefix_class be set to true + +# menu_colour = green:(^identified armour .* pair of .* of ) +# menu_colour = lightgrey:(^identified armour .* pair of ) +# menu_colour = green:(^identified (weapon|armour) .* of ) + # Colouring for the notes menu_colour = white:Reached XP level @@ -228,11 +240,12 @@ message_colour = lightcyan:LOW MAGIC WARNING # dump_message_count = 7 # dump_order = header,hiscore,stats,misc,notes,inventory,turns_by_place, # dump_order += skills,spells,overview,mutations,messages,screenshot -# dump_order += kills_by_place,,kills +# dump_order += kills_by_place,kills ##### 5-b Notes ################################# # # use_notes = false +# user_note_prefix=@@@ # note_items = rod,book,rune # ood_interesting = 8 # note_hp_percent = 5 @@ -258,6 +271,8 @@ message_colour = lightcyan:LOW MAGIC WARNING # # classic_item_colours = true # +# detailed_hunger = true +# # See crawl_options.txt for the options # char_set, cset_ascii, cset_ibm, cset_dec, cset_any, feature, mon_glyph diff --git a/crawl-ref/source/abl-show.cc b/crawl-ref/source/abl-show.cc index cf3ca6eece..5110941556 100644 --- a/crawl-ref/source/abl-show.cc +++ b/crawl-ref/source/abl-show.cc @@ -883,7 +883,7 @@ static bool activate_talent(const talent& tal) break; } - if (hungerCheck && you.hunger_state < HS_HUNGRY) + if (hungerCheck && you.hunger_state <= HS_STARVING) { mpr("You're too hungry."); return (false); diff --git a/crawl-ref/source/command.cc b/crawl-ref/source/command.cc index 604d77cad3..eb4c5fee51 100644 --- a/crawl-ref/source/command.cc +++ b/crawl-ref/source/command.cc @@ -361,6 +361,7 @@ void list_armour() for (int i = EQ_CLOAK; i <= EQ_BODY_ARMOUR; i++) { const int armour_id = you.equip[i]; + int colour = MSGCOL_BLACK; estr.str(""); estr.clear(); @@ -376,7 +377,11 @@ void list_armour() << " : "; if (armour_id != -1) + { estr << you.inv[armour_id].name(DESC_INVENTORY); + colour = menu_colour(estr.str(), + menu_colour_item_prefix(you.inv[armour_id])); + } else if (!you_can_wear(i,true)) estr << " (unavailable)"; else if (!you_tran_can_wear(i, true)) @@ -386,7 +391,10 @@ void list_armour() else estr << " none"; - mpr( estr.str().c_str(), MSGCH_EQUIPMENT, menu_colour(estr.str()) ); + if (colour == MSGCOL_BLACK) + colour = menu_colour(estr.str()); + + mpr( estr.str().c_str(), MSGCH_EQUIPMENT, colour); } } // end list_armour() @@ -397,6 +405,7 @@ void list_jewellery(void) for (int i = EQ_LEFT_RING; i <= EQ_AMULET; i++) { const int jewellery_id = you.equip[i]; + int colour = MSGCOL_BLACK; jstr.str(""); jstr.clear(); @@ -408,15 +417,23 @@ void list_jewellery(void) << " : "; if (jewellery_id != -1) + { jstr << you.inv[jewellery_id].name(DESC_INVENTORY); + std::string + prefix = menu_colour_item_prefix(you.inv[jewellery_id]); + colour = menu_colour(jstr.str(), prefix); + } else if (!you_tran_can_wear(i)) jstr << " (currently unavailable)"; else jstr << " none"; - mpr( jstr.str().c_str(), MSGCH_EQUIPMENT, menu_colour(jstr.str()) ); + if (colour == MSGCOL_BLACK) + colour = menu_colour(jstr.str()); + + mpr( jstr.str().c_str(), MSGCH_EQUIPMENT, colour); } -} // end list_jewellery() +} void list_weapons(void) { @@ -427,10 +444,13 @@ void list_weapons(void) // Yes, this is already on the screen... I'm outputing it // for completeness and to avoid confusion. std::string wstring = "Current : "; + int colour; if (weapon_id != -1) { wstring += you.inv[weapon_id].name(DESC_INVENTORY_EQUIP); + colour = menu_colour(wstring, + menu_colour_item_prefix(you.inv[weapon_id])); } else { @@ -440,9 +460,10 @@ void list_weapons(void) wstring += " (currently unavailable)"; else wstring += " empty hands"; + colour = menu_colour(wstring); } - mpr(wstring.c_str(), MSGCH_EQUIPMENT, menu_colour(wstring)); + mpr(wstring.c_str(), MSGCH_EQUIPMENT, colour); // Print out the swap slots for (int i = 0; i <= 1; i++) @@ -457,17 +478,23 @@ void list_weapons(void) else wstring = "Secondary : "; + colour = MSGCOL_BLACK; if (is_valid_item( you.inv[i]) && (you.inv[i].base_type == OBJ_WEAPONS || you.inv[i].base_type == OBJ_STAVES || you.inv[i].base_type == OBJ_MISCELLANY)) { wstring += you.inv[i].name(DESC_INVENTORY_EQUIP); + colour = menu_colour(wstring, + menu_colour_item_prefix(you.inv[i])); } else wstring += " none"; - mpr(wstring.c_str(), MSGCH_EQUIPMENT, menu_colour(wstring)); + if (colour == MSGCOL_BLACK) + colour = menu_colour(wstring); + + mpr(wstring.c_str(), MSGCH_EQUIPMENT, colour); } // Now we print out the current default fire weapon @@ -475,12 +502,20 @@ void list_weapons(void) const int item = get_fire_item_index(); + colour = MSGCOL_BLACK; if (item == ENDOFPACK) wstring += " nothing"; else + { wstring += you.inv[item].name(DESC_INVENTORY_EQUIP); + colour = menu_colour(wstring, + menu_colour_item_prefix(you.inv[item])); + } + + if (colour == MSGCOL_BLACK) + colour = menu_colour(wstring); - mpr( wstring.c_str(), MSGCH_EQUIPMENT, menu_colour(wstring) ); + mpr( wstring.c_str(), MSGCH_EQUIPMENT, colour ); } // end list_weapons() static bool cmdhelp_textfilter(const std::string &tag) diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 63ac725453..d5b091f080 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -1177,10 +1177,13 @@ enum hunger_state // you.hunger_state { HS_RAVENOUS, // 0: not used within code, really HS_STARVING, + HS_NEAR_STARVING, + HS_VERY_HUNGRY, HS_HUNGRY, HS_SATIATED, // "not hungry" state HS_FULL, - HS_ENGORGED // 5 + HS_VERY_FULL, + HS_ENGORGED // 8 }; enum item_status_flag_type // per item flags: ie. ident status, cursed status diff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.h index 326dee57b5..083c5c83ce 100644 --- a/crawl-ref/source/externs.h +++ b/crawl-ref/source/externs.h @@ -1416,6 +1416,7 @@ public: bool note_skill_max; // take note when skills reach new max bool note_all_spells; // take note when learning any spell bool use_notes; // take (and dump) notes + std::string user_note_prefix; // Prefix for user notes int note_hp_percent; // percentage hp for notetaking int ood_interesting; // how many levels OOD is noteworthy? int easy_confirm; // make yesno() confirming easier @@ -1439,6 +1440,7 @@ public: bool no_dark_brand; // Attribute for branding friendly monsters bool macro_meta_entry; // Allow user to use numeric sequences when // creating macros + bool detailed_hunger; // Informational-only hunger levels int fire_items_start; // index of first item for fire command std::vector<unsigned> fire_order; // missile search order for 'f' command @@ -1515,7 +1517,7 @@ public: int explore_stop_prompt; bool explore_greedy; // Explore goes after items as well. - + // How much more eager greedy-explore is for items than to explore. int explore_item_greed; @@ -1523,6 +1525,9 @@ public: std::vector<colour_mapping> menu_colour_mappings; std::vector<message_colour_mapping> message_colour_mappings; + bool menu_colour_prefix_class; // Prefix item class to string + bool menu_colour_prefix_id; // Prefix id-status to string + std::vector<menu_sort_condition> sort_menus; int dump_kill_places; // How to dump place information for kills. diff --git a/crawl-ref/source/food.cc b/crawl-ref/source/food.cc index f72ef2cf80..260100732d 100644 --- a/crawl-ref/source/food.cc +++ b/crawl-ref/source/food.cc @@ -543,37 +543,92 @@ static bool food_change(bool suppress_message) // get new hunger state if (you.hunger <= 1000) newstate = HS_STARVING; + else if (you.hunger <= 1533) + newstate = HS_NEAR_STARVING; + else if (you.hunger <= 2066) + newstate = HS_VERY_HUNGRY; else if (you.hunger <= 2600) newstate = HS_HUNGRY; else if (you.hunger < 7000) newstate = HS_SATIATED; - else if (you.hunger < 11000) + else if (you.hunger < 9000) newstate = HS_FULL; + else if (you.hunger < 11000) + newstate = HS_VERY_FULL; if (newstate != you.hunger_state) { + char oldstate = you.hunger_state; state_changed = true; you.hunger_state = newstate; set_redraw_status( REDRAW_HUNGER ); // Stop the travel command, if it's in progress and we just got hungry - if (newstate < HS_SATIATED) - interrupt_activity( AI_HUNGRY ); + if (Options.detailed_hunger) + { + if (newstate < HS_SATIATED) + interrupt_activity( AI_HUNGRY ); + } + else + { + // Don't interrupt on changing from hungry to very hungry + // or very hungry to near starving if they don't want + // detailed hunger info. + if (newstate == HS_STARVING || + (newstate < HS_SATIATED && oldstate >= HS_SATIATED)) + interrupt_activity( AI_HUNGRY ); + + // Don't inform user of changing from hungry to very hungry + // or very hungry to near starving if they don't want + // detailed hunger info. + if (newstate < HS_SATIATED && oldstate < HS_SATIATED && + newstate != HS_STARVING) + suppress_message = true; + } if (suppress_message == false) { - switch (you.hunger_state) + if (Options.detailed_hunger) { - case HS_STARVING: - mpr("You are starving!", MSGCH_FOOD); - learned_something_new(TUT_YOU_STARVING); - break; - case HS_HUNGRY: - mpr("You are feeling hungry.", MSGCH_FOOD); - learned_something_new(TUT_YOU_HUNGRY); - break; - default: - break; + switch (you.hunger_state) + { + case HS_STARVING: + mpr("You are starving!", MSGCH_FOOD); + learned_something_new(TUT_YOU_STARVING); + break; + case HS_HUNGRY: + mpr("You are feeling hungry.", MSGCH_FOOD); + learned_something_new(TUT_YOU_HUNGRY); + break; + case HS_VERY_HUNGRY: + mpr("You are feeling very hungry.", MSGCH_FOOD); + learned_something_new(TUT_YOU_HUNGRY); + break; + case HS_NEAR_STARVING: + mpr("You are near starving.", MSGCH_FOOD); + learned_something_new(TUT_YOU_HUNGRY); + break; + default: + break; + } + } + else + { + switch (you.hunger_state) + { + case HS_STARVING: + mpr("You are starving!", MSGCH_FOOD); + learned_something_new(TUT_YOU_STARVING); + break; + case HS_HUNGRY: + case HS_VERY_HUNGRY: + case HS_NEAR_STARVING: + mpr("You are feeling hungry.", MSGCH_FOOD); + learned_something_new(TUT_YOU_HUNGRY); + break; + default: + break; + } } } } diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc index 1b885bddfd..76171d5d4f 100644 --- a/crawl-ref/source/initfile.cc +++ b/crawl-ref/source/initfile.cc @@ -610,6 +610,7 @@ void game_options::reset_options() autopickup_no_burden = false; use_notes = true; + user_note_prefix = ""; note_all_skill_levels = false; note_skill_max = false; note_all_spells = false; @@ -661,6 +662,7 @@ void game_options::reset_options() assign_item_slot = SS_FORWARD; macro_meta_entry = true; + detailed_hunger = false; // 10 was the cursor step default on Linux. level_map_cursor_step = 7; @@ -775,6 +777,8 @@ void game_options::reset_options() travel_stop_message.clear(); sound_mappings.clear(); menu_colour_mappings.clear(); + menu_colour_prefix_class = false; + menu_colour_prefix_id = false; message_colour_mappings.clear(); drop_filter.clear(); map_file_name.clear(); @@ -2065,6 +2069,11 @@ void game_options::read_option_line(const std::string &str, bool runscript) { use_notes = read_bool( field, use_notes ); } + else if (key == "user_note_prefix") + { + // field is already cleaned up from trim_string() + user_note_prefix = field; + } else if (key == "note_skill_max") { note_skill_max = read_bool( field, note_skill_max ); @@ -2302,6 +2311,10 @@ void game_options::read_option_line(const std::string &str, bool runscript) { macro_meta_entry = read_bool(field, macro_meta_entry); } + else if (key == "detailed_hunger") + { + detailed_hunger = read_bool(field, detailed_hunger); + } else if (key == "stop_travel" || key == "travel_stop_message") { std::vector<std::string> fragments = split_string(",", field); @@ -2458,6 +2471,16 @@ void game_options::read_option_line(const std::string &str, bool runscript) } } } + else if (key == "menu_colour_prefix_class" || + key == "menu_color_prefix_class") + { + menu_colour_prefix_class = read_bool(field, menu_colour_prefix_class); + } + else if (key == "menu_colour_prefix_id" || + key == "menu_color_prefix_id") + { + menu_colour_prefix_id = read_bool(field, menu_colour_prefix_id); + } else if (key == "message_colour" || key == "message_color") { add_message_colour_mappings(field); diff --git a/crawl-ref/source/invent.h b/crawl-ref/source/invent.h index d21379c22f..46b30a33c2 100644 --- a/crawl-ref/source/invent.h +++ b/crawl-ref/source/invent.h @@ -18,6 +18,7 @@ #include <vector> #include "menu.h" #include "enum.h" +#include "itemname.h" enum object_selector { @@ -85,6 +86,13 @@ public: const bool is_item_equipped() const; const int item_freshness() const; + virtual int highlight_colour() const + { + return menu_colour(get_text(), + menu_colour_item_prefix( *( (item_def*) item) ) ); + } + + private: void add_class_hotkeys(const item_def &i); }; diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc index 0fa28e52c2..783951d8b9 100644 --- a/crawl-ref/source/itemname.cc +++ b/crawl-ref/source/itemname.cc @@ -1986,3 +1986,54 @@ bool is_interesting_item( const item_def& item ) return (true); return (false); } + +const std::string menu_colour_item_prefix(const item_def &item) +{ + std::string str = ""; + + if (Options.menu_colour_prefix_id) + { + if (item_ident(item, ISFLAG_KNOW_TYPE) + || item.base_type == OBJ_FOOD + || item.base_type == OBJ_CORPSES) + { + str += "identified "; + } + else + { + if (get_ident_type(item.base_type, + item.sub_type) == ID_KNOWN_TYPE) + { + // Wands are only fully identified if we know the + // number of charges. + if (item.base_type == OBJ_WANDS) + str += "known "; + // Rings are fully identified simply by knowing their + // type, unless the ring has plusses, like a ring of + // dexterity. + else if (item.base_type == OBJ_JEWELLERY + && !jewellery_is_amulet(item)) + { + if (item.plus == 0 && item.plus2 == 0) + str += "identified "; + else + str += "known "; + } + // All other types of magical items are fully identified + // simply by knowing the type + else + str += "identified "; + } + else + str += "unidentified "; + } + } + + if (Options.menu_colour_prefix_class) + { + str += item_class_name(item.base_type, true) + " "; + } + + return str; +} + diff --git a/crawl-ref/source/itemname.h b/crawl-ref/source/itemname.h index 33ce92f5fd..d0b47d9c0a 100644 --- a/crawl-ref/source/itemname.h +++ b/crawl-ref/source/itemname.h @@ -113,4 +113,9 @@ item_type_id_state_type get_ident_type(object_class_type basetype, void set_ident_type( object_class_type basetype, int subtype, item_type_id_state_type setting, bool force = false); +/* *********************************************************************** + * called from: command - itemname - invent.h + * *********************************************************************** */ +const std::string menu_colour_item_prefix(const item_def &item); + #endif diff --git a/crawl-ref/source/menu.cc b/crawl-ref/source/menu.cc index c379460d8f..660786404e 100644 --- a/crawl-ref/source/menu.cc +++ b/crawl-ref/source/menu.cc @@ -991,12 +991,14 @@ bool slider_menu::line_up() // Menu colouring // -int menu_colour(const std::string &text) +int menu_colour(const std::string &text, const std::string &prefix) { + std::string tmp_text = prefix + text; + for (int i = 0, size = Options.menu_colour_mappings.size(); i < size; ++i) { colour_mapping &cm = Options.menu_colour_mappings[i]; - if (cm.pattern.matches(text)) + if (cm.pattern.matches(tmp_text)) return (cm.colour); } return (-1); @@ -1004,7 +1006,7 @@ int menu_colour(const std::string &text) int MenuHighlighter::entry_colour(const MenuEntry *entry) const { - return (::menu_colour(entry->get_text())); + return entry->highlight_colour(); } /////////////////////////////////////////////////////////////////////// diff --git a/crawl-ref/source/menu.h b/crawl-ref/source/menu.h index f169263a98..f2fbc5b359 100644 --- a/crawl-ref/source/menu.h +++ b/crawl-ref/source/menu.h @@ -47,6 +47,9 @@ struct menu_letter struct item_def; +int menu_colour(const std::string &itemtext, + const std::string &prefix = ""); + struct MenuEntry { std::string text; @@ -103,6 +106,11 @@ struct MenuEntry return text; } + virtual int highlight_colour() const + { + return (menu_colour(get_text())); + } + virtual bool selected() const { return selected_qty > 0 && quantity; @@ -403,7 +411,6 @@ protected: bool jump_to( int linenum ); }; -int menu_colour(const std::string &itemtext); int linebreak_string( std::string& s, int wrapcol, int maxcol ); int linebreak_string2( std::string& s, int maxcol ); void print_formatted_paragraph( std::string &s, int maxcol, diff --git a/crawl-ref/source/notes.cc b/crawl-ref/source/notes.cc index 37fcc9a502..c675b30639 100644 --- a/crawl-ref/source/notes.cc +++ b/crawl-ref/source/notes.cc @@ -318,7 +318,7 @@ std::string Note::describe( bool when, bool where, bool what ) const result << name; break; case NOTE_USER_NOTE: - result << name; + result << Options.user_note_prefix << name; break; case NOTE_MESSAGE: result << name; diff --git a/crawl-ref/source/output.cc b/crawl-ref/source/output.cc index 5f080bf755..8a61126fc1 100644 --- a/crawl-ref/source/output.cc +++ b/crawl-ref/source/output.cc @@ -334,7 +334,8 @@ void print_stats(void) const item_def& wpn = you.inv[you.equip[EQ_WEAPON]]; textcolor(wpn.colour); - const int prefcol = menu_colour(wpn.name(DESC_INVENTORY)); + const std::string prefix = menu_colour_item_prefix(wpn); + const int prefcol = menu_colour(wpn.name(DESC_INVENTORY), prefix); if (prefcol != -1) textcolor(prefcol); @@ -390,30 +391,79 @@ void print_stats(void) break; } - switch (you.hunger_state) + if (Options.detailed_hunger) { - case HS_ENGORGED: - textcolor( LIGHTGREEN ); - cprintf( "Engorged" ); - break; + switch (you.hunger_state) + { + case HS_ENGORGED: + textcolor( LIGHTGREEN ); + cprintf( "Engorged" ); + break; - case HS_FULL: - textcolor( GREEN ); - cprintf( "Full" ); - break; + case HS_VERY_FULL: + textcolor( GREEN ); + cprintf( "Very Full" ); + break; - case HS_SATIATED: - break; + case HS_FULL: + textcolor( GREEN ); + cprintf( "Full" ); + break; - case HS_HUNGRY: - textcolor( YELLOW ); - cprintf( "Hungry" ); - break; + case HS_SATIATED: + break; - case HS_STARVING: - textcolor( RED ); - cprintf( "Starving" ); - break; + case HS_HUNGRY: + textcolor( YELLOW ); + cprintf( "Hungry" ); + break; + + case HS_VERY_HUNGRY: + textcolor( YELLOW ); + cprintf( "Very Hungry" ); + break; + + case HS_NEAR_STARVING: + textcolor( YELLOW ); + cprintf( "Near Starving" ); + break; + + case HS_STARVING: + textcolor( RED ); + cprintf( "Starving" ); + break; + } + } + else + { + switch (you.hunger_state) + { + case HS_ENGORGED: + textcolor( LIGHTGREEN ); + cprintf( "Engorged" ); + break; + + case HS_VERY_FULL: + case HS_FULL: + textcolor( GREEN ); + cprintf( "Full" ); + break; + + case HS_SATIATED: + break; + + case HS_HUNGRY: + case HS_VERY_HUNGRY: + case HS_NEAR_STARVING: + textcolor( YELLOW ); + cprintf( "Hungry" ); + break; + + case HS_STARVING: + textcolor( RED ); + cprintf( "Starving" ); + break; + } } textcolor( LIGHTGREY ); diff --git a/crawl-ref/source/spl-book.cc b/crawl-ref/source/spl-book.cc index 69a88c8991..f4fe9263c6 100644 --- a/crawl-ref/source/spl-book.cc +++ b/crawl-ref/source/spl-book.cc @@ -1474,7 +1474,7 @@ int staff_spell( int staff ) food = diff * 5; } - if (food && (you.hunger_state < HS_HUNGRY || you.hunger <= food)) + if (food && (you.hunger_state <= HS_STARVING || you.hunger <= food)) { mpr("You don't have the energy to cast that spell."); return (-1); diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc index 47099858e5..49600fab71 100644 --- a/crawl-ref/source/spl-cast.cc +++ b/crawl-ref/source/spl-cast.cc @@ -652,7 +652,7 @@ bool cast_a_spell() } if (you.is_undead != US_UNDEAD - && (you.hunger_state < HS_HUNGRY + && (you.hunger_state <= HS_STARVING || you.hunger <= spell_hunger( spell ))) { mpr("You don't have the energy to cast that spell."); |