Convert more dialogs related to town settings

This commit is contained in:
2014-12-19 16:29:15 -05:00
parent 728c294d0e
commit e88eb9b949
5 changed files with 323 additions and 201 deletions

View File

@@ -533,7 +533,7 @@ static void put_out_wand_in_dlog(cDialog& me, short which_out_wand, const cOutdo
me["endy"].setTextToNum(store_out_wand.end_spec2);
}
void save_out_wand(cDialog& me, short store_which_out_wand, cOutdoors::cWandering& store_out_wand, short mode) {
static void save_out_wand(cDialog& me, short store_which_out_wand, cOutdoors::cWandering& store_out_wand, short mode) {
store_out_wand.spec_on_meet = me["onmeet"].getTextAsNum();
store_out_wand.spec_on_win = me["onwin"].getTextAsNum();
store_out_wand.spec_on_flee = me["onflee"].getTextAsNum();
@@ -559,7 +559,6 @@ void save_out_wand(cDialog& me, short store_which_out_wand, cOutdoors::cWanderin
static bool edit_out_wand_event_filter(cDialog& me, std::string item_hit, short& store_which_out_wand, cOutdoors::cWandering& store_out_wand, short mode) {
if(!me.toast(true)) return true;
save_out_wand(me, store_which_out_wand, store_out_wand, mode);
short i,spec;
cCreature store_m;
if(item_hit == "left") {
me.untoast();
@@ -637,263 +636,198 @@ void edit_out_wand(short mode) {
wand_dlg.run();
}
bool save_town_details() {
#if 0
char str[256];
CDGT(832,2,(char *) str);
sprintf(town->town_strs(0),"%-29.29s",str);
town->town_chop_time = CDGN(832,3);
if(cre(town->town_chop_time,-1,10000,"The day the town becomes abandoned must be from 0 to 10000 (or -1 if it doesn't)."
,"",832)) return false;
town->town_chop_key = CDGN(832,4);
if(cre(town->town_chop_key,-1,10,"The event which prevents the town from becoming abandoned must be from 1 to 10 (-1 or 0 for none)."
,"",832)) return false;
town->lighting_type = cd_get_led_range(832,19,22);
town->max_num_monst = CDGN(832,5);
town->difficulty = CDGN(832,6);
if(cre(town->difficulty,0,10,"The town difficulty must be between 0 (easiest) and 10 (hardest)."
,"",832)) return false;
#endif
static bool save_town_details(cDialog& me, std::string, eKeyMod) {
if(!me.toast(true)) return true;
town->town_name = me["name"].getText();
town->town_chop_time = me["chop"].getTextAsNum();
town->town_chop_key = me["key"].getTextAsNum();
town->max_num_monst = me["population"].getTextAsNum();
town->difficulty = me["difficulty"].getTextAsNum();
std::string lighting = dynamic_cast<cLedGroup&>(me["lighting"]).getSelected();
if(lighting == "lit") town->lighting_type = LIGHT_NORMAL;
else if(lighting == "dark") town->lighting_type = LIGHT_DARK;
else if(lighting == "drains") town->lighting_type = LIGHT_DRAINS;
else if(lighting == "no-light") town->lighting_type = LIGHT_NONE;
return true;
}
void put_town_details_in_dlog() {
#if 0
CDST(832,2,town->town_strs(0));
CDSN(832,3,town->town_chop_time);
CDSN(832,4,town->town_chop_key);
cd_set_led_range(832,19,22,town->lighting_type);
CDSN(832,5,town->max_num_monst);
CDSN(832,6,town->difficulty);
#endif
}
void edit_town_details_event_filter (short item_hit) {
#if 0
switch(item_hit) {
case 7:
if(save_town_details())
toast_dialog();
break;
default:
cd_hit_led_range(832,19,22,item_hit);
break;
static void put_town_details_in_dlog(cDialog& me) {
me["name"].setText(town->town_name);
me["chop"].setTextToNum(town->town_chop_time);
me["key"].setTextToNum(town->town_chop_key);
me["population"].setTextToNum(town->max_num_monst);
me["difficulty"].setTextToNum(town->difficulty);
cLedGroup& lighting = dynamic_cast<cLedGroup&>(me["lighting"]);
switch(town->lighting_type) {
case LIGHT_NORMAL: lighting.setSelected("lit"); break;
case LIGHT_DARK: lighting.setSelected("dark"); break;
case LIGHT_DRAINS: lighting.setSelected("drains"); break;
case LIGHT_NONE: lighting.setSelected("no-light"); break;
}
#endif
}
void edit_town_details() {
// ignore parent in Mac version
short town_details_hit;
#if 0
cd_create_dialog_parent_num(832,0);
using namespace std::placeholders;
cDialog town_dlg("edit-town-details.xml");
town_dlg["okay"].attachClickHandler(save_town_details);
town_dlg["chop"].attachFocusHandler(std::bind(check_range_msg, _1, _2, _3, -1, 10000, "The day the town becomes abandoned", "-1 if it doesn't"));
town_dlg["key"].attachFocusHandler(std::bind(check_range_msg, _1, _2, _3, -1, 10, "The event which prevents the town from becoming abandoned", "-1 or 0 for none"));
town_dlg["difficulty"].attachFocusHandler(std::bind(check_range_msg, _1, _2, _3, 0, 10, "The town difficulty", "0 - easiest, 10 - hardest"));
put_town_details_in_dlog();
put_town_details_in_dlog(town_dlg);
town_details_hit = cd_run_dialog();
cd_kill_dialog(832);
#endif
town_dlg.run();
}
bool save_town_events() {
short i;
#if 0
for(i = 0; i < 8; i++) {
town->timer_spec_times[i] = CDGN(833,2 + i);
town->timer_specs[i] = CDGN(833,10 + i);
if(cre(town->timer_specs[i],-1,99,"The town special nodes must be between 0 at 99 (or -1 for no special)."
,"",833)) return false;
static bool save_town_events(cDialog& me, std::string, eKeyMod) {
if(!me.toast(true)) return true;
for(int i = 0; i < 8; i++) {
std::string id = std::to_string(i + 1);
town->timer_spec_times[i] = me["time" + id].getTextAsNum();
town->timer_specs[i] = me["spec" + id].getTextAsNum();
}
#endif
return true;
}
void put_town_events_in_dlog() {
static void put_town_events_in_dlog(cDialog& me) {
short i;
#if 0
for(i = 0; i < 8; i++) {
CDSN(833,2 + i,town->timer_spec_times[i]);
CDSN(833,10 + i,town->timer_specs[i]);
std::string id = std::to_string(i + 1);
me["time" + id].setTextToNum(town->timer_spec_times[i]);
me["spec" + id].setTextToNum(town->timer_specs[i]);
}
#endif
}
void edit_town_events_event_filter (short item_hit) {
short spec;
#if 0
switch(item_hit) {
case 18:
if(save_town_events())
toast_dialog();
break;
default:
if((item_hit >= 26) && (item_hit <= 33)) {
if(!save_town_events())
break;
spec = CDGN(833,item_hit - 26 + 10);
if((spec < 0) || (spec > 99)) {
spec = get_fresh_spec(2);
if(spec < 0) {
give_error("You can't create a new special encounter because there are no more free special nodes.",
"To free a special node, set its type to No Special and set its Jump To special to -1.",833);
break;
}
CDSN(833,item_hit - 26 + 10,spec);
}
edit_spec_enc(spec,2,833);
if((spec >= 0) && (spec < 100) && (town->specials[spec].pic < 0))
CDSN(833,item_hit - 26 + 10,-1);
}
break;
static bool edit_town_events_event_filter(cDialog& me, std::string item_hit, eKeyMod) {
std::string id = item_hit.substr(4);
short spec = me["spec" + id].getTextAsNum();
if(spec < 0 || spec > 99) {
spec = get_fresh_spec(2);
if(spec < 0) {
giveError("You can't create a new special encounter because there are no more free special nodes.",
"To free a special node, set its type to No Special and set its Jump To special to -1.",&me);
return true;
}
}
#endif
if(edit_spec_enc(spec,2,&me))
me["spec" + id].setTextToNum(spec);
return true;
}
void edit_town_events() {
// ignore parent in Mac version
short advanced_town_hit;
#if 0
using namespace std::placeholders;
cd_create_dialog_parent_num(833,0);
cDialog evt_dlg("edit-town-events.xml");
evt_dlg["okay"].attachClickHandler(save_town_events);
evt_dlg.attachClickHandlers(edit_town_events_event_filter, {"edit1", "edit2", "edit3", "edit4", "edit5", "edit6", "edit7", "edit8"});
evt_dlg.attachFocusHandlers(std::bind(check_range_msg, _1, _2, _3, -1, 99, "The town special node", "-1 for no special"), {"spec1", "spec2", "spec3", "spec4", "spec5", "spec6", "spec7", "spec8"});
put_town_events_in_dlog();
put_town_events_in_dlog(evt_dlg);
advanced_town_hit = cd_run_dialog();
cd_kill_dialog(833);
#endif
evt_dlg.run();
}
bool save_advanced_town() {
short i;
#if 0
for(i = 0; i < 4; i++) {
town->exit_specs[i] = CDGN(834,2 + i);
if(cre(town->exit_specs[i],-1,99,"The town exit specials must be between 0 at 99 (or -1 for no special)."
,"",834)) return false;
town->exit_locs[i].x = CDGN(834,8 + i * 2);
if(cre(town->exit_locs[i].x,-1,47,"The town exit coordinates must be from 0 to 47 (or -1 if you want them ignored)."
,"",834)) return false;
town->exit_locs[i].y = CDGN(834,9 + i * 2);
if(cre(town->exit_locs[i].y,-1,47,"The town exit coordinates must be from 0 to 47 (or -1 if you want them ignored)."
,"",834)) return false;
static bool save_advanced_town(cDialog& me, std::string, eKeyMod) {
if(!me.toast(true)) return true;
for(int i = 0; i < 4; i++) {
std::string id = std::to_string(i + 1);
town->exit_specs[i] = me["onexit" + id].getTextAsNum();
town->exit_locs[i].x = me["exit" + id + "-x"].getTextAsNum();
town->exit_locs[i].y = me["exit" + id + "-y"].getTextAsNum();
}
town->spec_on_entry = CDGN(834,6);
town->spec_on_entry_if_dead = CDGN(834,7);
if(cre(town->spec_on_entry,-1,99,"The town entry specials must be from 0 to 99 (or -1 for no special)."
,"",834)) return false;
if(cre(town->spec_on_entry_if_dead,-1,99,"The town entry specials must be from 0 to 99 (or -1 for no special)."
,"",834)) return false;
scenario.town_hidden[cur_town] = cd_get_led(834,37);
#endif
town->spec_on_entry = me["onenter"].getTextAsNum();
town->spec_on_entry_if_dead = me["onenterdead"].getTextAsNum();
scenario.town_hidden[cur_town] = dynamic_cast<cLed&>(me["hidden"]).getState() != led_off;
return true;
}
void put_advanced_town_in_dlog() {
static void put_advanced_town_in_dlog(cDialog& me) {
short i;
#if 0
for(i = 0; i < 4; i++) {
CDSN(834,2 + i,town->exit_specs[i]);
CDSN(834,8 + i * 2,town->exit_locs[i].x);
CDSN(834,9 + i * 2,town->exit_locs[i].y);
std::string id = std::to_string(i + 1);
me["onexit" + id].setTextToNum(town->exit_specs[i]);
me["exit" + id + "-x"].setTextToNum(town->exit_locs[i].x);
me["exit" + id + "-y"].setTextToNum(town->exit_locs[i].y);
}
CDSN(834,6,town->spec_on_entry);
CDSN(834,7,town->spec_on_entry_if_dead);
cd_set_led(834,37,scenario.town_hidden[cur_town]);
#endif
}
void edit_advanced_town_event_filter (short item_hit) {
#if 0
switch(item_hit) {
case 16:
if(save_advanced_town())
toast_dialog();
break;
case 17:
toast_dialog();
break;
case 37:
cd_flip_led(834,37,item_hit);
break;
}
#endif
me["onenter"].setTextToNum(town->spec_on_entry);
me["onenterdead"].setTextToNum(town->spec_on_entry_if_dead);
dynamic_cast<cLed&>(me["hidden"]).setState(scenario.town_hidden[cur_town] ? led_red : led_off);
}
void edit_advanced_town() {
// ignore parent in Mac version
short advanced_town_hit;
#if 0
using namespace std::placeholders;
cd_create_dialog_parent_num(834,0);
cDialog town_dlg("edit-town-advanced.xml");
town_dlg["okay"].attachClickHandler(save_advanced_town);
town_dlg["cancel"].attachClickHandler(std::bind(&cDialog::toast, &town_dlg, false));
auto loc_check = std::bind(check_range_msg, _1, _2, _3, -1, 47, "The town exit coordinates", "-1 if you want them ignored");
auto spec_check = std::bind(check_range_msg, _1, _2, _3, -1, 99, _4, "-1 for no special");
town_dlg.attachFocusHandlers(std::bind(spec_check, _1, _2, _3, "The town exit special"), {"onexit1", "onexit2", "onexit3", "onexit4"});
town_dlg.attachFocusHandlers(std::bind(spec_check, _1, _2, _3, "Thw town entry special"), {"onenter", "onenterdead"});
town_dlg.attachFocusHandlers(loc_check, {"exit1-x", "exit2-x", "exit3-x", "exit4-x"});
town_dlg.attachFocusHandlers(loc_check, {"exit1-y", "exit2-y", "exit3-y", "exit4-y"});
put_advanced_town_in_dlog();
put_advanced_town_in_dlog(town_dlg);
advanced_town_hit = cd_run_dialog();
cd_kill_dialog(834);
#endif
town_dlg.run();
}
bool save_town_wand() {
short i,j;
#if 0
for(i = 0; i < 4; i++)
for(j = 0; j < 4; j++) {
town->wandering[i].monst[j] = CDGN(835,2 + i * 4 + j);
if(cre(town->wandering[i].monst[j],0,255,"Wandering monsters must all be from 0 to 255 (0 means no monster)."
,"",835)) return false;
static bool save_town_wand(cDialog& me, std::string, eKeyMod) {
if(!me.toast(true)) return true;
for(int i = 0; i < 4; i++) {
std::string base_id = "group" + std::to_string(i + 1) + "-monst";
for(int j = 0; j < 4; j++) {
std::string id = base_id + std::to_string(j + 1);
town->wandering[i].monst[j] = me[id].getTextAsNum();
}
#endif
}
return true;
}
void put_town_wand_in_dlog() {
short i,j;
#if 0
for(i = 0; i < 4; i++)
for(j = 0; j < 4; j++) {
CDSN(835,2 + i * 4 + j,town->wandering[i].monst[j]);
static void put_town_wand_in_dlog(cDialog& me) {
for(int i = 0; i < 4; i++) {
std::string base_id = "group" + std::to_string(i + 1) + "-monst";
for(int j = 0; j < 4; j++) {
std::string id = base_id + std::to_string(j + 1);
me[id].setTextToNum(town->wandering[i].monst[j]);
}
#endif
}
}
void edit_town_wand_event_filter (short item_hit) {
short i,j;
#if 0
switch(item_hit) {
case 18:
if(save_town_wand())
toast_dialog();
break;
case 27: case 28: case 29: case 30:
for(i = 0; i < 4; i++) {
j = choose_text_res(-1,0,255,town->wandering[item_hit - 27].monst[i],835,"Choose Which Monster:");
if(j < 0)
i = 5;
else {
CDSN(835,2 + (item_hit - 27) * 4 + i,j);
}
}
break;
static bool edit_town_wand_event_filter(cDialog& me, std::string item_hit, eKeyMod) {
static const char*const titles[4] = {
"Choose First Monster: (1 appears)",
"Choose Second Monster: (1 appears)",
"Choose Third Monster: (1 appears)",
"Choose Fourth Monster: (1-2 appears)",
};
short group = item_hit[6] - '0';
std::string base_id = "group" + std::to_string(group) + "-monst";
for(int i = 0; i < 4; i++) {
std::string id = base_id + std::to_string(i + 1);
short n = choose_text(STRT_MONST, town->wandering[group].monst[i], &me, titles[i]);
if(n == town->wandering[group].monst[i]) break;
me[id].setTextToNum(n);
}
#endif
return true;
}
void edit_town_wand() {
// ignore parent in Mac version
short town_wand_hit;
#if 0
using namespace std::placeholders;
cd_create_dialog_parent_num(835,0);
cDialog wand_dlg("edit-town-wandering.xml");
wand_dlg["okay"].attachClickHandler(save_town_wand);
auto check_monst = std::bind(check_range_msg, _1, _2, _3, 0, 255, "Wandering monsters", "0 means no monster");
// Just go through and attach the same focus handler to ALL text fields.
// There's 16 of them, so this is kinda the easiest way to do it.
wand_dlg.forEach([&check_monst](std::string, cControl& ctrl) {
if(ctrl.getType() == CTRL_FIELD)
ctrl.attachFocusHandler(check_monst);
});
put_town_wand_in_dlog();
put_town_wand_in_dlog(wand_dlg);
town_wand_hit = cd_run_dialog();
cd_kill_dialog(835);
#endif
wand_dlg.run();
}
bool save_basic_dlog() {

View File

@@ -0,0 +1,61 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
<dialog skin='light' defbtn='okay' debug='true'>
<!-- OK button -->
<field name='onexit1' top='77' left='308' width='67' height='16'/>
<field name='onexit2' top='105' left='308' width='67' height='16'/>
<field name='onexit3' top='77' left='440' width='67' height='16'/>
<field name='onexit4' top='105' left='440' width='67' height='16'/>
<field name='onenter' top='142' left='405' width='67' height='16'/>
<field name='onenterdead' top='170' left='405' width='67' height='16'/>
<field name='exit1-x' top='231' left='323' width='39' height='16'/>
<field name='exit1-y' top='231' left='371' width='39' height='16'/>
<field name='exit2-x' top='258' left='323' width='39' height='16'/>
<field name='exit2-y' top='258' left='371' width='39' height='16'/>
<field name='exit3-x' top='285' left='323' width='39' height='16'/>
<field name='exit3-y' top='285' left='371' width='39' height='16'/>
<field name='exit4-x' top='312' left='323' width='39' height='16'/>
<field name='exit4-y' top='312' left='371' width='39' height='16'/>
<button name='okay' type='regular' top='367' left='452'>OK</button>
<button name='cancel' type='regular' def-key='esc' top='367' left='386'>Cancel</button>
<pict type='dlog' num='16' top='8' left='8'/>
<text size='large' top='6' left='50' width='256' height='17'>Advanced town details</text>
<text top='25' left='50' width='439' height='40'>
You can use this window to edit some of the more esoteric details for each town,
such as specials called when entering or leaving town.
All of these options are decribed in the documentation chapter on town editing.
</text>
<text top='207' left='50' width='197' height='64'>
Exit town location:
(these are the locations the party ends up at outdoors if they leave in the given direction.
Leave at -1 for the regular location to be used.)
</text>
<text top='134' left='50' width='202' height='66'>
Town entry special node:
(Enter the number of the town special node to call if the party enters the town when its still alive, and/or when its been abandoned.)
</text>
<text top='68' left='50' width='197' height='64'>
Exit town specials:
(These are the numbers of the town special nodes to call when the party tries to leave town in the given direction.)
</text>
<text top='143' left='259' width='137' height='15'>Still alive</text>
<text top='170' left='259' width='137' height='15'>Been abandoned</text>
<text top='77' left='250' width='49' height='15'>Top</text>
<text top='105' left='251' width='49' height='15'>Left</text>
<text top='77' left='381' width='53' height='15'>Bottom</text>
<text top='105' left='382' width='49' height='15'>Right</text>
<text top='232' left='257' width='49' height='15'>Top</text>
<text top='259' left='258' width='49' height='15'>Left</text>
<text top='285' left='258' width='53' height='15'>Bottom</text>
<text top='313' left='259' width='49' height='15'>Right</text>
<text top='207' left='331' width='35' height='15'>X</text>
<text top='207' left='379' width='40' height='15'>Y</text>
<!--
TODO: Move this LED label into the LED element.
-->
<text top='336' left='50' width='320' height='27'>
Town hidden?
(This town cannot be seen until its made visible with a special encounter.)
</text>
<led name='hidden' top='342' left='373'/>
</dialog>

View File

@@ -0,0 +1,39 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
<dialog skin='light' defbtn='okay' debug='true'>
<!-- OK button -->
<field name='name' top='29' left='186' width='151' height='16'/>
<field name='chop' top='77' left='327' width='43' height='16'/>
<field name='key' top='101' left='327' width='43' height='16'/>
<field name='population' top='219' left='294' width='54' height='16'/>
<field name='difficulty' top='265' left='294' width='54' height='16'/>
<button name='okay' type='regular' top='317' left='309'>OK</button>
<pict type='dlog' num='16' top='8' left='8'/>
<text size='large' top='6' left='50' width='256' height='17'>Town Details</text>
<text top='30' left='50' width='130' height='14'>Town name:</text>
<text top='58' left='50' width='130' height='14'>Town timing:</text>
<text top='78' left='59' width='242' height='14'>Day when town dies: (if -1, it doesn't)</text>
<text top='98' left='59' width='261' height='41'>Number of event which prevents town death (if -1 or 0, none) - see chapter in documentation on time for more details.</text>
<text top='143' left='50' width='63' height='14'>Lighting:</text>
<!--
TODO: Put these LED labels in the LED elementes
-->
<text top='143' left='122' width='164' height='14'>Fully Lit</text>
<text top='160' left='122' width='164' height='14'>Dark</text>
<text top='177' left='122' width='204' height='14'>Very dark (light used 10x as fast</text>
<text top='194' left='122' width='164' height='14'>Totally dark (no light)</text>
<group name='lighting'>
<led name='lit' top='143' left='329'/>
<led name='dark' top='160' left='329'/>
<led name='drains' top='177' left='329'/>
<led name='no-light' top='194' left='329'/>
</group>
<text top='216' left='50' width='234' height='42'>
Maximum number of monsters:
(When this many monsters are killed, the dungeon will be abandoned)
</text>
<text top='262' left='50' width='235' height='53'>
Town difficulty (0-10):
(Determines how fast wandering monsters appear, how nasty traps are, and how hard it is to unlock doors.)
</text>
</dialog>

View File

@@ -0,0 +1,43 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
<dialog skin='light' defbtn='okay' debug='true'>
<!-- OK button -->
<field name='time1' top='122' left='146' width='67' height='16'/>
<field name='time2' top='150' left='146' width='67' height='16'/>
<field name='time3' top='178' left='146' width='67' height='16'/>
<field name='time4' top='206' left='146' width='67' height='16'/>
<field name='time5' top='234' left='146' width='67' height='16'/>
<field name='time6' top='262' left='146' width='67' height='16'/>
<field name='time7' top='290' left='146' width='67' height='16'/>
<field name='time8' top='318' left='146' width='67' height='16'/>
<field name='spec1' top='122' left='270' width='39' height='16'/>
<field name='spec2' top='150' left='270' width='39' height='16'/>
<field name='spec3' top='178' left='270' width='39' height='16'/>
<field name='spec4' top='206' left='270' width='39' height='16'/>
<field name='spec5' top='234' left='270' width='39' height='16'/>
<field name='spec6' top='262' left='270' width='39' height='16'/>
<field name='spec7' top='290' left='270' width='39' height='16'/>
<field name='spec8' top='318' left='270' width='39' height='16'/>
<button name='okay' type='regular' top='317' left='431'>OK</button>
<pict type='dlog' num='16' top='8' left='8'/>
<text size='large' top='6' left='50' width='256' height='17'>Town event timers</text>
<text top='25' left='50' width='439' height='40'>
At certain time intervals, you can have a town special node be called.
Enter below the number of moves between each calling of the special node, and the number of the node to call.
</text>
<text top='68' left='50' width='439' height='14'>For more information on how this works, see the documentation.</text>
<text top='88' left='123' width='120' height='28'>Number of moves between each call.</text>
<text top='88' left='244' width='118' height='25'>Town special node to call.</text>
<text top='216' left='4' width='106' height='120'>
Note: If you leave the time between calls at 0, no special node is called.
Dont have special nodes called too often ... it slows the game down.
</text>
<button name='edit1' type='large' top='119' left='325'>Create/Edit</button>
<button name='edit2' type='large' top='147' left='325'>Create/Edit</button>
<button name='edit3' type='large' top='174' left='325'>Create/Edit</button>
<button name='edit4' type='large' top='203' left='325'>Create/Edit</button>
<button name='edit5' type='large' top='231' left='325'>Create/Edit</button>
<button name='edit6' type='large' top='258' left='325'>Create/Edit</button>
<button name='edit7' type='large' top='287' left='325'>Create/Edit</button>
<button name='edit8' type='large' top='315' left='325'>Create/Edit</button>
</dialog>

View File

@@ -0,0 +1,45 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
<dialog skin='light' defbtn='okay' debug='true'>
<!-- OK button -->
<field name='group1-monst1' top='137' left='174' width='39' height='16'/>
<field name='group1-monst2' top='165' left='174' width='39' height='16'/>
<field name='group1-monst3' top='193' left='174' width='39' height='16'/>
<field name='group1-monst4' top='221' left='174' width='39' height='16'/>
<field name='group2-monst1' top='137' left='239' width='39' height='16'/>
<field name='group2-monst2' top='165' left='239' width='39' height='16'/>
<field name='group2-monst3' top='193' left='239' width='39' height='16'/>
<field name='group2-monst4' top='221' left='239' width='39' height='16'/>
<field name='group3-monst1' top='137' left='304' width='39' height='16'/>
<field name='group3-monst2' top='165' left='304' width='39' height='16'/>
<field name='group3-monst3' top='193' left='304' width='39' height='16'/>
<field name='group3-monst4' top='221' left='304' width='39' height='16'/>
<field name='group4-monst1' top='137' left='369' width='39' height='16'/>
<field name='group4-monst2' top='165' left='369' width='39' height='16'/>
<field name='group4-monst3' top='193' left='369' width='39' height='16'/>
<field name='group4-monst4' top='221' left='369' width='39' height='16'/>
<button name='okay' type='regular' top='243' left='436'>OK</button>
<text top='6' left='50' width='256' height='17'>Town wandering monsters</text>
<text top='25' left='50' width='439' height='40'>
Wandering monsters in towns appear in groups of up to 5.
Enter the numbers of the wandering monsters in each group type,
or press the Choose button to select the appearing monsters from a list.
</text>
<text top='68' left='50' width='437' height='40'>
A group of wandering monsters contains one each of the first three monsters, and 1 or 2 of the fourth.
Leave a field at 0 for no monster to appear.
</text>
<text top='115' left='166' width='58' height='14'>Group 1</text>
<pict type='dlog' num='16' top='8' left='8'/>
<text top='115' left='231' width='58' height='14'>Group 2</text>
<text top='115' left='294' width='58' height='14'>Group 3</text>
<text top='115' left='357' width='58' height='14'>Group 4</text>
<button name='choose1' type='regular' top='243' left='162'>Choose</button>
<button name='choose2' type='regular' top='243' left='227'>Choose</button>
<button name='choose3' type='regular' top='243' left='292'>Choose</button>
<button name='choose4' type='regular' top='243' left='357'>Choose</button>
<text top='138' left='8' width='150' height='14'>Monster 1 (1 appears)</text>
<text top='166' left='8' width='150' height='14'>Monster 2 (1 appears)</text>
<text top='194' left='8' width='150' height='14'>Monster 3 (1 appears)</text>
<text top='222' left='8' width='150' height='14'>Monster 4 (1-2 appears)</text>
</dialog>