tool to find creature in town
This commit is contained in:
@@ -92,7 +92,7 @@ ePalBtn town_buttons[6][10] = {
|
|||||||
{PAL_SPEC, PAL_COPY_SPEC, PAL_ERASE_SPEC, PAL_EDIT_SPEC, PAL_SPEC_SPOT, PAL_BOAT, PAL_HORSE, PAL_COPY_TER, PAL_CHANGE, PAL_TERRAIN},
|
{PAL_SPEC, PAL_COPY_SPEC, PAL_ERASE_SPEC, PAL_EDIT_SPEC, PAL_SPEC_SPOT, PAL_BOAT, PAL_HORSE, PAL_COPY_TER, PAL_CHANGE, PAL_TERRAIN},
|
||||||
{PAL_ROAD, PAL_WEB, PAL_CRATE, PAL_BARREL, PAL_BLOCK, PAL_EDIT_STORAGE, PAL_EDIT_ITEM, PAL_COPY_ITEM, PAL_ERASE_ITEM, PAL_ITEM},
|
{PAL_ROAD, PAL_WEB, PAL_CRATE, PAL_BARREL, PAL_BLOCK, PAL_EDIT_STORAGE, PAL_EDIT_ITEM, PAL_COPY_ITEM, PAL_ERASE_ITEM, PAL_ITEM},
|
||||||
{PAL_FIRE_BARR, PAL_FORCE_BARR, PAL_QUICKFIRE, PAL_FORCECAGE, PAL_BLANK, PAL_PASTE, PAL_EDIT_MONST, PAL_COPY_MONST, PAL_ERASE_MONST, PAL_MONST},
|
{PAL_FIRE_BARR, PAL_FORCE_BARR, PAL_QUICKFIRE, PAL_FORCECAGE, PAL_BLANK, PAL_PASTE, PAL_EDIT_MONST, PAL_COPY_MONST, PAL_ERASE_MONST, PAL_MONST},
|
||||||
{PAL_SFX_SB, PAL_SFX_MB, PAL_SFX_LB, PAL_SFX_SS, PAL_SFX_LS, PAL_SFX_ASH, PAL_SFX_BONE, PAL_SFX_ROCK, PAL_ERASE_FIELD, PAL_BLANK},
|
{PAL_SFX_SB, PAL_SFX_MB, PAL_SFX_LB, PAL_SFX_SS, PAL_SFX_LS, PAL_SFX_ASH, PAL_SFX_BONE, PAL_SFX_ROCK, PAL_ERASE_FIELD, PAL_FIND_MONST},
|
||||||
};
|
};
|
||||||
|
|
||||||
rectangle working_rect;
|
rectangle working_rect;
|
||||||
@@ -1792,11 +1792,16 @@ static bool handle_toolpal_action(location cur_point2) {
|
|||||||
mode_count = 2;
|
mode_count = 2;
|
||||||
set_string("Create saved item rect","Select upper left corner");
|
set_string("Create saved item rect","Select upper left corner");
|
||||||
break;
|
break;
|
||||||
case PAL_WANDER:
|
case PAL_FIND_MONST:{
|
||||||
overall_mode = MODE_SET_WANDER_POINTS;
|
short which = choose_townperson(-1, nullptr);
|
||||||
mode_count = 4;
|
if(which >= 0){
|
||||||
set_string("Place first wandering monster arrival point","");
|
cTownperson& pers = town->creatures[which];
|
||||||
break;
|
|
||||||
|
cen_x = pers.start_loc.x;
|
||||||
|
cen_y = pers.start_loc.y;
|
||||||
|
redraw_screen();
|
||||||
|
}
|
||||||
|
}break;
|
||||||
case PAL_CHANGE: // replace terrain
|
case PAL_CHANGE: // replace terrain
|
||||||
swap_terrain();
|
swap_terrain();
|
||||||
draw_main_screen();
|
draw_main_screen();
|
||||||
|
@@ -105,9 +105,10 @@ enum eStrMode {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum ePalBtn {
|
enum ePalBtn {
|
||||||
|
// The organization here is terrible... the numbers are badly out of order
|
||||||
PAL_BLANK = -1,
|
PAL_BLANK = -1,
|
||||||
PAL_PENCIL = 0, PAL_BRUSH_LG = 1, PAL_BRUSH_SM = 2, PAL_SPRAY_LG = 3, PAL_SPRAY_SM = 4, PAL_DROPPER = 5, PAL_RECT_HOLLOW = 6, PAL_RECT_FILLED = 7, PAL_BUCKET = 8,
|
PAL_PENCIL = 0, PAL_BRUSH_LG = 1, PAL_BRUSH_SM = 2, PAL_SPRAY_LG = 3, PAL_SPRAY_SM = 4, PAL_DROPPER = 5, PAL_RECT_HOLLOW = 6, PAL_RECT_FILLED = 7, PAL_BUCKET = 8,
|
||||||
PAL_ZOOM = 10, PAL_ERASER = 11, PAL_EDIT_SIGN = 12, PAL_TEXT_AREA = 13, PAL_WANDER = 14, PAL_CHANGE = 15, PAL_TOWN_BORDER = 16, PAL_EDIT_TOWN = 17, PAL_EDIT_STORAGE = 18,
|
PAL_ZOOM = 10, PAL_ERASER = 11, PAL_EDIT_SIGN = 12, PAL_TEXT_AREA = 13, PAL_FIND_MONST = 14, PAL_CHANGE = 15, PAL_TOWN_BORDER = 16, PAL_EDIT_TOWN = 17, PAL_EDIT_STORAGE = 18,
|
||||||
PAL_EDIT_ITEM = 20, PAL_COPY_ITEM = 21, PAL_ERASE_ITEM = 22, PAL_SPEC = 23, PAL_COPY_SPEC = 24, PAL_PASTE = 25, PAL_ERASE_SPEC = 26, PAL_EDIT_SPEC = 27, PAL_START = 28,
|
PAL_EDIT_ITEM = 20, PAL_COPY_ITEM = 21, PAL_ERASE_ITEM = 22, PAL_SPEC = 23, PAL_COPY_SPEC = 24, PAL_PASTE = 25, PAL_ERASE_SPEC = 26, PAL_EDIT_SPEC = 27, PAL_START = 28,
|
||||||
PAL_EDIT_MONST = 30, PAL_COPY_MONST = 31, PAL_ERASE_MONST = 32, PAL_ERASE_FIELD = 33, PAL_ENTER_N = 34, PAL_ENTER_W = 35, PAL_ENTER_S = 36, PAL_ENTER_E = 37, PAL_COPY_TER = 38,
|
PAL_EDIT_MONST = 30, PAL_COPY_MONST = 31, PAL_ERASE_MONST = 32, PAL_ERASE_FIELD = 33, PAL_ENTER_N = 34, PAL_ENTER_W = 35, PAL_ENTER_S = 36, PAL_ENTER_E = 37, PAL_COPY_TER = 38,
|
||||||
PAL_WEB = 40, PAL_CRATE = 41, PAL_BARREL = 42, PAL_FIRE_BARR = 43, PAL_FORCE_BARR = 44, PAL_QUICKFIRE = 45, PAL_SPEC_SPOT = 46, PAL_BLOCK = 47, PAL_FORCECAGE = 48,
|
PAL_WEB = 40, PAL_CRATE = 41, PAL_BARREL = 42, PAL_FIRE_BARR = 43, PAL_FORCE_BARR = 44, PAL_QUICKFIRE = 45, PAL_SPEC_SPOT = 46, PAL_BLOCK = 47, PAL_FORCECAGE = 48,
|
||||||
|
@@ -1253,6 +1253,37 @@ static std::string get_control_for_field(eSpecField field) {
|
|||||||
return "num";
|
return "num";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
short choose_townperson(short cur_sel, cDialog* parent) {
|
||||||
|
if(cur_sel < 0) cur_sel = 0;
|
||||||
|
|
||||||
|
std::vector<pic_num_t> pics;
|
||||||
|
std::vector<std::string> labels;
|
||||||
|
for(size_t i = 0; i < town->creatures.size(); ++i){
|
||||||
|
const cTownperson& person = town->creatures[i];
|
||||||
|
if(person.number <= 0) {
|
||||||
|
pics.push_back(-1);
|
||||||
|
labels.push_back("");
|
||||||
|
}else{
|
||||||
|
const cMonster& monst = scenario.scen_monsters[person.number];
|
||||||
|
pics.push_back(monst.picture_num);
|
||||||
|
std::string name = monst.m_name;
|
||||||
|
if(person.personality >= 0){
|
||||||
|
int pers_town_num = person.personality / 10;
|
||||||
|
name = scenario.towns[pers_town_num]->talking.people[person.personality % 10].title;
|
||||||
|
}
|
||||||
|
// TODO use loc_str
|
||||||
|
labels.push_back(fmt::format("{} at {}", name, boost::lexical_cast<std::string>(person.start_loc)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cPictChoice choice(pics, labels, PIC_MONST, parent);
|
||||||
|
choice->getControl("prompt").setText("Select a creature:");
|
||||||
|
if(choice.show(cur_sel)){
|
||||||
|
return choice.getSelected();
|
||||||
|
}else{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static bool edit_spec_enc_value(cDialog& me, std::string item_hit, node_stack_t& edit_stack) {
|
static bool edit_spec_enc_value(cDialog& me, std::string item_hit, node_stack_t& edit_stack) {
|
||||||
std::string field = item_hit.substr(0, item_hit.find_first_of('-'));
|
std::string field = item_hit.substr(0, item_hit.find_first_of('-'));
|
||||||
bool alt_button = item_hit.substr(item_hit.find_first_of('-') + 1) == "edit2";
|
bool alt_button = item_hit.substr(item_hit.find_first_of('-') + 1) == "edit2";
|
||||||
@@ -1581,28 +1612,8 @@ static bool edit_spec_enc_value(cDialog& me, std::string item_hit, node_stack_t&
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(alt_button){
|
if(alt_button){
|
||||||
std::vector<pic_num_t> pics;
|
|
||||||
std::vector<std::string> labels;
|
|
||||||
for(size_t i = 0; i < town->creatures.size(); ++i){
|
|
||||||
const cTownperson& person = town->creatures[i];
|
|
||||||
if(person.number <= 0) {
|
|
||||||
pics.push_back(-1);
|
|
||||||
labels.push_back("");
|
|
||||||
}else{
|
|
||||||
const cMonster& monst = scenario.scen_monsters[person.number];
|
|
||||||
pics.push_back(monst.picture_num);
|
|
||||||
std::string name = monst.m_name;
|
|
||||||
if(person.personality >= 0){
|
|
||||||
int pers_town_num = person.personality / 10;
|
|
||||||
name = scenario.towns[pers_town_num]->talking.people[person.personality % 10].title;
|
|
||||||
}
|
|
||||||
labels.push_back(fmt::format("{} at {}", name, boost::lexical_cast<std::string>(person.start_loc)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
size_t sel = val < 0 ? town->creatures.size() + val : val;
|
size_t sel = val < 0 ? town->creatures.size() + val : val;
|
||||||
cPictChoice choice(pics, labels, PIC_MONST, &me);
|
size_t new_sel = choose_townperson(sel, &me);
|
||||||
choice.show(sel);
|
|
||||||
size_t new_sel = choice.getSelected();
|
|
||||||
if(val < 0){
|
if(val < 0){
|
||||||
store = -(town->creatures.size() - new_sel);
|
store = -(town->creatures.size() - new_sel);
|
||||||
}else{
|
}else{
|
||||||
|
@@ -24,6 +24,8 @@ void edit_scen_intro();
|
|||||||
bool edit_area_rect_str(info_rect_t& r);
|
bool edit_area_rect_str(info_rect_t& r);
|
||||||
size_t num_strs(eStrMode str_mode);
|
size_t num_strs(eStrMode str_mode);
|
||||||
|
|
||||||
|
short choose_townperson(short cur_sel = 0, cDialog* parent = nullptr);
|
||||||
|
|
||||||
pic_num_t choose_damage_type(short cur, cDialog* parent, bool allow_spec);
|
pic_num_t choose_damage_type(short cur, cDialog* parent, bool allow_spec);
|
||||||
short choose_field_type(short cur, cDialog* parent, bool includeSpec);
|
short choose_field_type(short cur, cDialog* parent, bool includeSpec);
|
||||||
snd_num_t choose_sound(short cur, cDialog* parent, std::string title = "Which sound?");
|
snd_num_t choose_sound(short cur, cDialog* parent, std::string title = "Which sound?");
|
||||||
|
Reference in New Issue
Block a user