From c02dde492584fb3d62498219ff93b1f0f388e50d Mon Sep 17 00:00:00 2001 From: ALONSO Laurent Date: Sat, 16 Jul 2022 13:48:19 +0200 Subject: [PATCH] talk: try to make "Go Back" and the keys work again, shopping: try to make work again, --- src/game/boe.actions.cpp | 11 ++++++++--- src/game/boe.dlgutil.cpp | 36 ++++++++++++++++++++++++++++++++++++ src/game/boe.newgraph.cpp | 35 ++--------------------------------- 3 files changed, 46 insertions(+), 36 deletions(-) diff --git a/src/game/boe.actions.cpp b/src/game/boe.actions.cpp index c492a410..4b40b3e2 100644 --- a/src/game/boe.actions.cpp +++ b/src/game/boe.actions.cpp @@ -1631,6 +1631,7 @@ bool handle_keystroke(const sf::Event& event){ else if(chr2 == Key::PageDown) chr2 = Key::Numpad3; sf::Event pass_event = {sf::Event::MouseButtonPressed}; + extern rectangle talk_area_rect; if(overall_mode == MODE_TALKING) { if(chr2 == Key::Escape) chr2 = Key::D; @@ -1639,8 +1640,10 @@ bool handle_keystroke(const sf::Event& event){ for(short i = 0; i < 9; i++) if(chr2 == talk_chars[i] && (!talk_end_forced || i == 6 || i == 5)) { int j = talk_end_forced ? i - 5 : i; + // related to talk_area_rect, unsure why adding +9 is needed? pass_point = talk_words[j].rect.topLeft(); - pass_point.x += 9; pass_point.y += 9; + pass_point.x += talk_area_rect.left+9; + pass_point.y += talk_area_rect.top+9; pass_point = mainPtr.mapCoordsToPixel(pass_point, mainView); pass_event.mouseButton.x = pass_point.x; pass_event.mouseButton.y = pass_point.y; @@ -1655,7 +1658,9 @@ bool handle_keystroke(const sf::Event& event){ for(short i = 0; i < 8; i++) if(chr2 == shop_chars[i]) { pass_point = shopping_rects[i][SHOPRECT_ACTIVE_AREA].topLeft(); - pass_point.x += 9; pass_point.y += 9; + // related to talk_area_rect + pass_point.x += talk_area_rect.left+9; + pass_point.y += talk_area_rect.top+9; pass_point = mainPtr.mapCoordsToPixel(pass_point, mainView); pass_event.mouseButton.x = pass_point.x; pass_event.mouseButton.y = pass_point.y; @@ -2588,7 +2593,7 @@ void handle_death() { if(univ.party.is_alive()) { if(overall_mode != MODE_STARTUP) post_load(), finish_load_party(); - return; + return; } } else if(choice == "new") { diff --git a/src/game/boe.dlgutil.cpp b/src/game/boe.dlgutil.cpp index 084872c3..f0e2da40 100644 --- a/src/game/boe.dlgutil.cpp +++ b/src/game/boe.dlgutil.cpp @@ -25,6 +25,7 @@ #include "mathutil.hpp" #include "dialogxml/dialogs/strdlog.hpp" #include "dialogxml/dialogs/choicedlog.hpp" +#include "gfx/render_shapes.hpp" #include "tools/winutil.hpp" #include "fileio/fileio.hpp" #include "fileio/resmgr/res_dialog.hpp" @@ -578,6 +579,41 @@ void start_talk_mode(short m_num,short personality,mon_num_t monst_type,short st store_pre_talk_mode = overall_mode; overall_mode = MODE_TALKING; talk_end_forced = false; + + // first initialise talk_words here + talk_words.clear(); + static const rectangle preset_rects[9] = { + rectangle{366,4,386,54}, rectangle{366,70,386,130}, rectangle{366,136,386,186}, + rectangle{389,4,409,54}, rectangle{389,70,409,120}, rectangle{389,121,409,186}, + rectangle{389,210,409,270}, rectangle{366,190,386,270}, + rectangle{343,4,363,134}, + }; + static const char*const preset_words[9] = { + "Look", "Name", "Job", + "Buy", "Sell", "Record", + "Done", "Go Back", + "Ask About...", + }; + + // Place buttons at bottom. + for(short i = 0; i < 9; i++) { + word_rect_t preset_word(preset_words[i], preset_rects[i]); + preset_word.on = Colours::DARK_GREEN; + preset_word.off = Colours::LIGHT_GREEN; + switch(i) { + case 0: preset_word.node = TALK_LOOK; break; + case 1: preset_word.node = TALK_NAME; break; + case 2: preset_word.node = TALK_JOB; break; + case 3: preset_word.node = TALK_BUY; break; + case 4: preset_word.node = TALK_SELL; break; + case 5: preset_word.node = TALK_RECORD; break; + case 6: preset_word.node = TALK_DONE; break; + case 7: preset_word.node = TALK_BACK; break; + case 8: preset_word.node = TALK_ASK; break; + } + talk_words.push_back(preset_word); + } + stat_screen_mode = MODE_SHOP; current_talk_node = TALK_LOOK; diff --git a/src/game/boe.newgraph.cpp b/src/game/boe.newgraph.cpp index 47a8b2cc..ac4075aa 100644 --- a/src/game/boe.newgraph.cpp +++ b/src/game/boe.newgraph.cpp @@ -876,45 +876,14 @@ void place_talk_str(std::string str_to_place,std::string str_to_place2,short col style.colour = Colours::TITLE_BLUE; win_draw_string(talk_gworld,dest_rect,title_string,eTextMode::LEFT_TOP,style); - talk_words.clear(); - static const rectangle preset_rects[9] = { - rectangle{366,4,386,54}, rectangle{366,70,386,130}, rectangle{366,136,386,186}, - rectangle{389,4,409,54}, rectangle{389,70,409,120}, rectangle{389,121,409,186}, - rectangle{389,210,409,270}, rectangle{366,190,386,270}, - rectangle{343,4,363,134}, - }; - static const char*const preset_words[9] = { - "Look", "Name", "Job", - "Buy", "Sell", "Record", - "Done", "Go Back", - "Ask About...", - }; - // Place buttons at bottom. if(color == 0) style.colour = Colours::DARK_GREEN; else style.colour = Colours::LIGHT_GREEN; for(short i = 0; i < 9; i++) { - if(!talk_end_forced || i == 6 || i == 5) { - word_rect_t preset_word(preset_words[i], preset_rects[i]); - preset_word.on = Colours::DARK_GREEN; - preset_word.off = Colours::LIGHT_GREEN; - switch(i) { - case 0: preset_word.node = TALK_LOOK; break; - case 1: preset_word.node = TALK_NAME; break; - case 2: preset_word.node = TALK_JOB; break; - case 3: preset_word.node = TALK_BUY; break; - case 4: preset_word.node = TALK_SELL; break; - case 5: preset_word.node = TALK_RECORD; break; - case 6: preset_word.node = TALK_DONE; break; - case 7: preset_word.node = TALK_BACK; break; - case 8: preset_word.node = TALK_ASK; break; - } - talk_words.push_back(preset_word); - rectangle draw_rect = preset_word.rect; - win_draw_string(talk_gworld,draw_rect,preset_word.word,eTextMode::LEFT_TOP,style); - } + if(!talk_end_forced || i == 6 || i == 5) + win_draw_string(talk_gworld,talk_words[i].rect,talk_words[i].word,eTextMode::LEFT_TOP,style); } style.colour = Colours::NAVY;