From 935a62d7f5fe8223bbe186bac059dc1735833f46 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Tue, 26 Aug 2025 14:28:53 -0500 Subject: [PATCH] preview town node generic dialogs --- src/game/boe.specials.cpp | 6 ------ src/scenario/special-town.cpp | 16 ++++------------ src/scenario/special.hpp | 7 +++++++ src/scenedit/scen.keydlgs.cpp | 13 +++++++++++++ 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/game/boe.specials.cpp b/src/game/boe.specials.cpp index 3c47eabc1..65638f0bd 100644 --- a/src/game/boe.specials.cpp +++ b/src/game/boe.specials.cpp @@ -3812,12 +3812,6 @@ void ifthen_spec(const runtime_state& ctx) { } void townmode_spec(const runtime_state& ctx) { - static const char*const stairDlogs[8] = { - "basic-stair-up", "basic-stair-down", - "basic-slope-up", "basic-slope-down", - "slimy-stair-up", "slimy-stair-down", - "dark-slope-up", "dark-slope-down" - }; bool check_mess = true; std::array strs; short r1; diff --git a/src/scenario/special-town.cpp b/src/scenario/special-town.cpp index 0dd56fd94..9d2204369 100644 --- a/src/scenario/special-town.cpp +++ b/src/scenario/special-town.cpp @@ -67,26 +67,18 @@ namespace { node_properties_t S_NUKE = node_builder_t(eSpecType::TOWN_NUKE_MONSTS) .msg() .ex1a(STRT_MONST); - // TODO Implement preview node_properties_t S_LEVER_G = node_builder_t(eSpecType::TOWN_GENERIC_LEVER) - .ex1b(eSpecPicker::NODE) - .no_preview(); - // TODO Implement preview + .ex1b(eSpecPicker::NODE); node_properties_t S_PORTAL_G = node_builder_t(eSpecType::TOWN_GENERIC_PORTAL) - .loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN) - .no_preview(); - // TODO Implement preview + .loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::ACTIVE_TOWN); node_properties_t S_BUTTON_G = node_builder_t(eSpecType::TOWN_GENERIC_BUTTON) - .ex1b(eSpecPicker::NODE) - .no_preview(); - // TODO implement preview + .ex1b(eSpecPicker::NODE); node_properties_t S_STAIR_G = node_builder_t(eSpecType::TOWN_GENERIC_STAIR) .loc(eSpecField::EX1A, eSpecField::EX1B, eLocType::SPECIFIED_TOWN, eSpecField::EX2A) .ex2a(STRT_TOWN) .ex2b(STRT_STAIR) .ex2c(STRT_STAIR_MODE) - .jump(eSpecPicker::NONE) - .no_preview(); + .jump(eSpecPicker::NONE); // TODO implement preview node_properties_t S_LEVER = node_builder_t(eSpecType::TOWN_LEVER) .msg1(eSpecPicker::MSG_SEQUENCE) diff --git a/src/scenario/special.hpp b/src/scenario/special.hpp index a7f8437ac..bd6069621 100644 --- a/src/scenario/special.hpp +++ b/src/scenario/special.hpp @@ -172,6 +172,13 @@ enum eStrType { STRT_LABEL_ALIGN, STRT_HORSE, STRT_BOAT, }; +const char*const stairDlogs[8] = { + "basic-stair-up", "basic-stair-down", + "basic-slope-up", "basic-slope-down", + "slimy-stair-up", "slimy-stair-down", + "dark-slope-up", "dark-slope-down" +}; + enum class eSpecPicker { NONE, MSG_SINGLE, MSG_PAIR, MSG_SEQUENCE, MSG_SEQUENCE_VAR, diff --git a/src/scenedit/scen.keydlgs.cpp b/src/scenedit/scen.keydlgs.cpp index 7da5dfd12..5b7dc6c59 100644 --- a/src/scenedit/scen.keydlgs.cpp +++ b/src/scenedit/scen.keydlgs.cpp @@ -880,6 +880,19 @@ static bool preview_spec_enc_dlog(cDialog& me, std::string, cSpecial& special, s cDialog::defaultBackground = cDialog::BG_DARK; switch(special.type){ + case eSpecType::TOWN_GENERIC_STAIR: + if(special.ex2b < 8) + cChoiceDlog(stairDlogs[max(0,special.ex2b)],{"climb","leave"}).show(); + break; + case eSpecType::TOWN_GENERIC_BUTTON: + cChoiceDlog("basic-button",{"yes","no"}).show(); + break; + case eSpecType::TOWN_GENERIC_PORTAL: + cChoiceDlog("basic-portal",{"yes","no"}).show(); + break; + case eSpecType::TOWN_GENERIC_LEVER: + cChoiceDlog("basic-lever",{"pull", "leave"}).show(); + break; case eSpecType::IF_NUM_RESPONSE:{ int min = special.m2; int max = special.m3;