From 96e92b165541848f964e86ba3e7ed5b3c0e94635 Mon Sep 17 00:00:00 2001 From: Celtic Minstrel Date: Sun, 9 Mar 2025 15:30:11 -0400 Subject: [PATCH] Allow selecting any preset terrain when creating a town. The option of "grass with flowers" is removed. If you want that, select grass, then select frill up terrain. --- rsrc/dialogs/new-town.xml | 15 +++++---------- src/scenedit/scen.townout.cpp | 21 +++++++++------------ 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/rsrc/dialogs/new-town.xml b/rsrc/dialogs/new-town.xml index a9514e58..d20d0a2e 100644 --- a/rsrc/dialogs/new-town.xml +++ b/rsrc/dialogs/new-town.xml @@ -16,15 +16,10 @@ Medium (48x48) Small (32x32) - Preset terrain: - - - Just cave floor - Plain Grass - Grass with flowers - - + Preset terrain: + + + + diff --git a/src/scenedit/scen.townout.cpp b/src/scenedit/scen.townout.cpp index 44fd6fdc..e57efb22 100644 --- a/src/scenedit/scen.townout.cpp +++ b/src/scenedit/scen.townout.cpp @@ -1561,12 +1561,19 @@ aNewTown::~aNewTown() { } bool new_town() { + ter_num_t preset = 0; cChoiceDlog new_dlg("new-town", {"okay", "cancel"}); new_dlg->getControl("num").setTextToNum(scenario.towns.size()); + new_dlg->getControl("choose-preset").attachClickHandler([&preset](cDialog& me, std::string, eKeyMod) { + preset = choose_text(STRT_TER, preset, &me, "Select a preset terrain:"); + dynamic_cast(me["preset"]).setPict(scenario.ter_types[preset].picture); + me["preset-name"].setText(scenario.ter_types[preset].name); + return true; + }); + new_dlg->getControl("preset-name").setText(scenario.ter_types[preset].name); if(new_dlg.show() == "cancel") return false; std::string size = dynamic_cast(new_dlg->getControl("size")).getSelected(); - std::string preset = dynamic_cast(new_dlg->getControl("preset")).getSelected(); if(size == "lg") scenario.addTown(AREA_LARGE); else if(size == "med") scenario.addTown(AREA_MEDIUM); @@ -1577,17 +1584,7 @@ bool new_town() { for(short i = 0; i < town->max_dim; i++) for(short j = 0; j < town->max_dim; j++) - if(preset == "cave") { - town->terrain(i,j) = 0; - } else { - town->terrain(i,j) = 2; - if(preset == "flowers") { - if(get_ran(1,0,8) == 0) - town->terrain(i,j) = 3; - else if(get_ran(1,0,10) == 0) - town->terrain(i,j) = 4; - } - } + town->terrain(i,j) = preset; undo_list.add(action_ptr(new aNewTown(scenario.towns.back()))); change_made = true;