diff options
Diffstat (limited to 'crawl-ref/source')
-rw-r--r-- | crawl-ref/source/describe.cc | 19 | ||||
-rw-r--r-- | crawl-ref/source/externs.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/items.cc | 9 | ||||
-rw-r--r-- | crawl-ref/source/mutation.cc | 27 | ||||
-rw-r--r-- | crawl-ref/source/player.cc | 1 | ||||
-rw-r--r-- | crawl-ref/source/religion.cc | 17 | ||||
-rw-r--r-- | crawl-ref/source/religion.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/skills2.cc | 19 | ||||
-rw-r--r-- | crawl-ref/source/tilereg.cc | 53 | ||||
-rw-r--r-- | crawl-ref/source/tilesdl.cc | 6 | ||||
-rw-r--r-- | crawl-ref/source/travel.h | 1 |
11 files changed, 117 insertions, 37 deletions
diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index 1f0f006e4c..c7e92a6740 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -3357,13 +3357,18 @@ static void _detailed_god_description(god_type which_god) cgotoxy(1, bottom_line); formatted_string::parse_string( - "Press '<w>!</w>' to toggle between the overview and the more detailed " +#ifndef USE_TILE + "Press '<w>!</w>'" +#else + "<w>Right-click</w>" +#endif + " to toggle between the overview and the more detailed " "description.").display(); mouse_control mc(MOUSE_MODE_MORE); const int keyin = getch(); - if (keyin == '!') + if (keyin == '!' || keyin == CK_MOUSE_CMD) describe_god(which_god, true); } @@ -3594,13 +3599,17 @@ void describe_god( god_type which_god, bool give_title ) cgotoxy(1, bottom_line); textcolor(LIGHTGREY); formatted_string::parse_string( - "Press '<w>!</w>' to toggle between the overview and the more detailed " +#ifndef USE_TILE + "Press '<w>!</w>'" +#else + "<w>Right-click</w>" +#endif + " to toggle between the overview and the more detailed " "description.").display(); mouse_control mc(MOUSE_MODE_MORE); - const int keyin = getch(); - if (keyin == '!') + if (keyin == '!' || keyin == CK_MOUSE_CMD) _detailed_god_description(which_god); } diff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.h index 2baac38d86..9f9edf78bc 100644 --- a/crawl-ref/source/externs.h +++ b/crawl-ref/source/externs.h @@ -945,6 +945,7 @@ public: int water_in_sight; // Is there deep water in LoS? #ifdef USE_TILE coord_def last_clicked_grid; // The map position the player last clicked on. + int last_clicked_item; // The inventory cell the player last clicked on. #endif // Warning: these two are quite different. diff --git a/crawl-ref/source/items.cc b/crawl-ref/source/items.cc index e0fec19f33..47cccee2a7 100644 --- a/crawl-ref/source/items.cc +++ b/crawl-ref/source/items.cc @@ -1255,12 +1255,9 @@ void pickup() mprf(MSGCH_PROMPT, "Pick up %s? (y/n/a/*?g,/q)", get_message_colour_tags(mitm[o], DESC_NOCAP_A, MSGCH_PROMPT).c_str()); -#ifndef USE_TILE - keyin = get_ch(); -#else - // TODO enne - why? - keyin = getch_ck(); -#endif + + mouse_control mc(MOUSE_MODE_MORE); + keyin = getch(); } if (keyin == '*' || keyin == '?' || keyin == ',' || keyin == 'g' diff --git a/crawl-ref/source/mutation.cc b/crawl-ref/source/mutation.cc index d0dc286ae2..1748f8f0aa 100644 --- a/crawl-ref/source/mutation.cc +++ b/crawl-ref/source/mutation.cc @@ -26,6 +26,7 @@ REVISION("$Rev$"); #include "externs.h" +#include "cio.h" #include "defines.h" #include "effects.h" #include "format.h" @@ -1547,8 +1548,14 @@ formatted_string describe_mutations() { result += EOL EOL; result += EOL EOL; - result += "Press '<w>!</w>' to toggle between mutations and " - "properties depending on your" EOL "hunger status." EOL; + result += +#ifndef USE_TILE + "Press '<w>!</w>'" +#else + "<w>Right-click</w>" +#endif + " to toggle between mutations and properties depending on your" EOL + "hunger status." EOL; } return formatted_string::parse_string(result); @@ -1637,16 +1644,23 @@ static void _display_vampire_attributes() } result += EOL; - result += "Press '<w>!</w>' to toggle between mutations and properties depending on your " EOL - "hunger status." EOL; + result += +#ifndef USE_TILE + "Press '<w>!</w>'" +#else + "<w>Right-click</w>" +#endif + " to toggle between mutations and properties depending on your" EOL + "hunger status." EOL; const formatted_string vp_props = formatted_string::parse_string(result); vp_props.display(); if (you.species == SP_VAMPIRE) { + mouse_control mc(MOUSE_MODE_MORE); const int keyin = getch(); - if (keyin == '!') + if (keyin == '!' || keyin == CK_MOUSE_CMD) display_mutations(); } } @@ -1661,8 +1675,9 @@ void display_mutations() if (you.species == SP_VAMPIRE) { mutation_fs.display(); + mouse_control mc(MOUSE_MODE_MORE); const int keyin = getch(); - if (keyin == '!') + if (keyin == '!' || keyin == CK_MOUSE_CMD) _display_vampire_attributes(); } else diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 47ecf9cc32..e86bc5a5cb 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -5894,6 +5894,7 @@ void player::init() #ifdef USE_TILE last_clicked_grid = coord_def(); + last_clicked_item = -1; #endif if (m_quiver) diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc index dcb6d64fe3..a04111cf06 100644 --- a/crawl-ref/source/religion.cc +++ b/crawl-ref/source/religion.cc @@ -6518,6 +6518,20 @@ void offer_items() } } +bool player_can_join_god(god_type which_god) +{ + if (you.species == SP_DEMIGOD) + return (false); + + if (player_is_unholy() && is_good_god(which_god)) + return (false); + + if (which_god == GOD_BEOGH && you.species != SP_HILL_ORC) + return (false); + + return (true); +} + void god_pitch(god_type which_god) { mprf("You %s the altar of %s.", @@ -6530,8 +6544,7 @@ void god_pitch(god_type which_god) // return, or not allow worshippers from other religions. -- bwr // Gods can be racist... - if (player_is_unholy() && is_good_god(which_god) - || which_god == GOD_BEOGH && you.species != SP_HILL_ORC) + if (!player_can_join_god(which_god)) { you.turn_is_over = false; simple_god_message(" does not accept worship from those such as you!", diff --git a/crawl-ref/source/religion.h b/crawl-ref/source/religion.h index 7a922030be..9f59c1a685 100644 --- a/crawl-ref/source/religion.h +++ b/crawl-ref/source/religion.h @@ -82,6 +82,7 @@ void pray(); void end_prayer(); void handle_god_time(void); int god_colour(god_type god); +bool player_can_join_god(god_type which_god); void god_pitch(god_type which_god); int piety_rank(int piety = -1); void offer_items(); diff --git a/crawl-ref/source/skills2.cc b/crawl-ref/source/skills2.cc index 3364cf334c..aacb6c817a 100644 --- a/crawl-ref/source/skills2.cc +++ b/crawl-ref/source/skills2.cc @@ -23,6 +23,7 @@ REVISION("$Rev$"); #include <conio.h> #endif +#include "cio.h" #include "describe.h" #include "externs.h" #include "fight.h" @@ -1543,7 +1544,7 @@ const int spec_skills[ NUM_SPECIES ][40] = // SP_GREY_ELF placeholder. { }, - + // SP_GNOME placeholder. { } @@ -1765,10 +1766,14 @@ static void _display_skill_table(bool show_aptitudes, bool show_description) if (_player_knows_aptitudes()) { cgotoxy(1, bottom_line); - formatted_string::parse_string("Press '<w>!</w>' to toggle between " - "<cyan>progress</cyan> and " - "<red>aptitude</red> " - "display.").display(); + formatted_string::parse_string( +#ifndef USE_TILE + "Press '<w>!</w>'" +#else + "<w>Right-click</w>" +#endif + " to toggle between <cyan>progress</cyan> and " + "<red>aptitude</red> display.").display(); } } } @@ -1782,8 +1787,10 @@ void show_skills() { _display_skill_table(show_aptitudes, show_description); + mouse_control mc(MOUSE_MODE_MORE); const int keyin = getch(); - if (keyin == '!' && _player_knows_aptitudes()) + if ((keyin == '!' || keyin == CK_MOUSE_CMD) + && _player_knows_aptitudes()) { show_aptitudes = !show_aptitudes; continue; diff --git a/crawl-ref/source/tilereg.cc b/crawl-ref/source/tilereg.cc index 042945d912..7ff7b35ca0 100644 --- a/crawl-ref/source/tilereg.cc +++ b/crawl-ref/source/tilereg.cc @@ -23,6 +23,7 @@ REVISION("$Rev$"); #include "newgame.h" #include "mon-util.h" #include "player.h" +#include "religion.h" #include "spells3.h" #include "stuff.h" #include "terrain.h" @@ -879,19 +880,26 @@ int DungeonRegion::handle_mouse(MouseEvent &event) switch (event.button) { case MouseEvent::LEFT: + { if (!(event.mod & MOD_SHIFT)) return 'g'; - switch (grid_stair_direction(grd(gc))) + const dungeon_feature_type grid = grd(gc); + switch (grid_stair_direction(grid)) { - case CMD_GO_DOWNSTAIRS: - return ('>'); - case CMD_GO_UPSTAIRS: - return ('<'); - default: - return 0; + case CMD_GO_DOWNSTAIRS: + return ('>'); + case CMD_GO_UPSTAIRS: + return ('<'); + default: + if (is_altar(grid) + && player_can_join_god(grid_altar_god(grid))) + { + return ('p'); + } + return 0; } - + } case MouseEvent::RIGHT: if (!(event.mod & MOD_SHIFT)) return '%'; // Character overview. @@ -1011,8 +1019,25 @@ bool DungeonRegion::update_tip_text(std::string& tip) if (igrd(m_cursor[CURSOR_MOUSE]) != NON_ITEM) tip += "\n[L-Click] Pick up items (g)"; - if (grid_stair_direction(grd(m_cursor[CURSOR_MOUSE])) != CMD_NO_CMD) - tip += "\n[Shift-L-Click] use stairs (</>)"; + const dungeon_feature_type grid = grd(m_cursor[CURSOR_MOUSE]); + const command_type dir = grid_stair_direction(grid); + if (dir != CMD_NO_CMD) + { + tip += "\n[Shift-L-Click] "; + if (grid == DNGN_ENTER_SHOP) + tip += "enter shop"; + else if (is_gate(grid)) + tip += "enter gate"; + else + tip += "use stairs"; + + if (dir == CMD_GO_DOWNSTAIRS) + tip += " (>)"; + else + tip += " (<)"; + } + else if (is_altar(grid) && player_can_join_god(grid_altar_god(grid))) + tip += "\n[Shift-L-Click] pray on altar (p)"; // Character overview. tip += "\n[R-Click] Overview (%)"; @@ -1441,6 +1466,9 @@ void InventoryRegion::place_cursor(const coord_def &cursor) m_dirty = true; } + if (m_cursor != cursor) + you.last_clicked_item = -1; + m_cursor = cursor; if (m_cursor == NO_CURSOR || cursor_index() >= m_items.size()) @@ -1502,6 +1530,7 @@ int InventoryRegion::handle_mouse(MouseEvent &event) else tile_item_use(idx); } + you.last_clicked_item = item_idx; // TODO enne - need to redraw inventory here? return CK_MOUSE_CMD; } @@ -1512,6 +1541,7 @@ int InventoryRegion::handle_mouse(MouseEvent &event) if (event.mod & MOD_SHIFT) { tile_item_eat_floor(idx); + you.last_clicked_item = item_idx; } else { @@ -1808,6 +1838,9 @@ bool InventoryRegion::update_alt_text(std::string &alt) if (item_idx >= m_items.size() || m_items[item_idx].empty()) return (false); + if (item_idx == you.last_clicked_item) + return (false); + int idx = m_items[item_idx].idx; const item_def *item; diff --git a/crawl-ref/source/tilesdl.cc b/crawl-ref/source/tilesdl.cc index ea16bd47c4..edcbf16516 100644 --- a/crawl-ref/source/tilesdl.cc +++ b/crawl-ref/source/tilesdl.cc @@ -613,10 +613,12 @@ int TilesFramework::handle_mouse(MouseEvent &event) // Handle "more" mode globally here, rather than duplicate across regions. if (mouse_control::current_mode() == MOUSE_MODE_MORE - && event.button == MouseEvent::LEFT && event.event == MouseEvent::PRESS) { - return CK_MOUSE_CLICK; + if (event.button == MouseEvent::LEFT) + return CK_MOUSE_CLICK; + else if (event.button == MouseEvent::RIGHT) + return CK_MOUSE_CMD; } // TODO enne - in what cases should the buttons be returned? diff --git a/crawl-ref/source/travel.h b/crawl-ref/source/travel.h index 4dbde13a77..7f3a7702a3 100644 --- a/crawl-ref/source/travel.h +++ b/crawl-ref/source/travel.h @@ -70,6 +70,7 @@ bool is_stair(dungeon_feature_type gridc); bool is_travelable_stair(dungeon_feature_type gridc); bool is_gate(dungeon_feature_type gridc); command_type direction_to_command( char x, char y ); +bool is_altar(dungeon_feature_type gridc); bool is_resting( void ); #ifdef CLUA_BINDINGS const char *trap_name(const coord_def &p); |