From cb9e43519fceeb519843be05ace4d1edef35f7bd Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Thu, 23 Jan 2025 20:28:43 -0600 Subject: [PATCH] allow empty strings in talk node keys --- src/scenedit/scen.townout.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/scenedit/scen.townout.cpp b/src/scenedit/scen.townout.cpp index 44439bfc..20d658d9 100644 --- a/src/scenedit/scen.townout.cpp +++ b/src/scenedit/scen.townout.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "scen.global.hpp" #include "scenario/scenario.hpp" #include "scenario/town.hpp" @@ -25,6 +26,8 @@ #include "fileio/fileio.hpp" #include "fileio/resmgr/res_dialog.hpp" +using boost::algorithm::trim; + extern short cen_x, cen_y, overall_mode; extern bool mouse_button_held,change_made; extern short cur_viewing_mode; @@ -932,6 +935,16 @@ static bool check_talk_key(cDialog& me, std::string item_hit, bool losing) { if(!losing) return true; std::string key = me[item_hit].getText(); bool passes = true; + + // An empty string is fine, it just means there's only one key. + if(key.empty()){ + // But there needs to be at least one. + if(me["key1"].getText() == me["key2"].getText()){ + showError("At least one of the words in this node must be filled."); + return false; + } + return true; + } if(key.length() != 4) passes = false; for(size_t i = 0; i < 4; i++) { if(i < key.length() && !islower(key[i])) @@ -1088,8 +1101,10 @@ static bool save_talk_node(cDialog& me, std::stack& talk_edit_stack, talk_node.personality = me["who"].getTextAsNum(); std::string link = me["key1"].getText(); + if(link.empty()) link = " "; std::copy(link.begin(), link.begin() + 4, talk_node.link1); link = me["key2"].getText(); + if(link.empty()) link = " "; std::copy(link.begin(), link.begin() + 4, talk_node.link2); for(int i = 0; i < 4; i++) { @@ -1118,9 +1133,12 @@ static void put_talk_node_in_dlog(cDialog& me, std::stack& talk_edit std::string link = ""; for(int i = 0; i < 4; i++) link += talk_node.link1[i]; + // I don't want 4 spaces in the text fields + trim(link); me["key1"].setText(link); link = ""; for(int i = 0; i < 4; i++) link += talk_node.link2[i]; + trim(link); me["key2"].setText(link); int iDescBase = int(talk_node.type) * 7;