More reduction of reliance on hard-coded limits
This commit is contained in:
@@ -2561,7 +2561,7 @@ void do_monster_turn() {
|
||||
case eMonstSummon::LEVEL: what_summon = get_summon_monster(minmax(0, 4, abil.summon.what)); break;
|
||||
case eMonstSummon::SPECIES:
|
||||
for(k = 0; k < 200; k++) {
|
||||
j = get_ran(1,0,255);
|
||||
j = get_ran(1,0,univ.scenario.scen_monsters.size() - 1);
|
||||
if(univ.scenario.scen_monsters[j].m_type == eRace(abil.summon.what)) {
|
||||
what_summon = j;
|
||||
break;
|
||||
|
@@ -16,7 +16,7 @@ extern cUniverse univ;
|
||||
cItem get_stored_item(short which) {
|
||||
cItem s_item;
|
||||
|
||||
if((which >= 400) || (which < 0)) {
|
||||
if((which >= univ.scenario.scen_items.size()) || (which < 0)) {
|
||||
s_item = cItem();
|
||||
return s_item;
|
||||
}
|
||||
|
@@ -165,7 +165,7 @@ static void init_party_scen_data() {
|
||||
for(i = 0; i < 20; i++)
|
||||
univ.party.key_times[i] = 30000;
|
||||
univ.party.party_event_timers.clear();
|
||||
for(i = 0; i < 50; i++)
|
||||
for(i = 0; i < univ.scenario.special_items.size(); i++)
|
||||
univ.party.spec_items[i] = univ.scenario.special_items[i].flags >= 10;
|
||||
for(i = 0; i < univ.scenario.quests.size(); i++) {
|
||||
if(univ.scenario.quests[i].flags >= 10) {
|
||||
@@ -290,10 +290,6 @@ void put_party_in_scen(std::string scen_name) {
|
||||
}
|
||||
give_help(1,2);
|
||||
|
||||
// this is kludgy, put here to prevent problems
|
||||
for(i = 0; i < 50; i++)
|
||||
univ.party.spec_items[i] = univ.scenario.special_items[i].flags >= 100;
|
||||
|
||||
// Compatibility flags
|
||||
if(univ.scenario.format.prog_make_ver[0] < 2){
|
||||
PSD[SDF_RESURRECT_NO_BALM] = 1;
|
||||
|
@@ -123,7 +123,7 @@ void start_town_mode(short which_town, short entry_dir) {
|
||||
}
|
||||
|
||||
// Now adjust town number as necessary.
|
||||
for(i = 0; i < 10; i++)
|
||||
for(i = 0; i < univ.scenario.town_mods.size(); i++)
|
||||
if(univ.scenario.town_mods[i].spec >= 0 && univ.scenario.town_mods[i].spec < 200 &&
|
||||
town_number == univ.scenario.town_mods[i].spec &&
|
||||
univ.party.sd_legit(univ.scenario.town_mods[i].x,univ.scenario.town_mods[i].y)) {
|
||||
|
@@ -64,19 +64,19 @@ cScenario::cScenario(bool init_strings) {
|
||||
bg_fight = 4;
|
||||
bg_town = 13;
|
||||
bg_dungeon = 9;
|
||||
for(i = 0; i < 10; i++) {
|
||||
for(i = 0; i < town_mods.size(); i++) {
|
||||
town_mods[i].spec = -1;
|
||||
}
|
||||
for(i = 0; i < 3; i++) {
|
||||
store_item_towns[i] = -1;
|
||||
}
|
||||
for(i = 0; i < 50; i++) {
|
||||
for(i = 0; i < special_items.size(); i++) {
|
||||
special_items[i].special = -1;
|
||||
}
|
||||
for(i = 0; i < scenario_timers.size(); i++) {
|
||||
scenario_timers[i].node = -1;
|
||||
}
|
||||
for(i = 0; i < 400; i++) {
|
||||
for(i = 0; i < scen_items.size(); i++) {
|
||||
scen_items[i] = cItem();
|
||||
}
|
||||
if(!init_strings) return;
|
||||
|
@@ -107,13 +107,14 @@ void menu_activate() {
|
||||
void update_item_menu() {
|
||||
id targ = [[file_menu itemAtIndex: 0] target];
|
||||
auto& item_list = univ.scenario.scen_items;
|
||||
int per_menu = item_list.size() / 4;
|
||||
for(int j = 0; j < 4; j++){
|
||||
[items_menu[j] removeAllItems];
|
||||
if(!scen_items_loaded) {
|
||||
[[items_menu[j] addItemWithTitle: @"Items Not Loaded" action: @selector(itemMenu:) keyEquivalent: @""] setEnabled: NO];
|
||||
} else for(int i = 0; i < 100; i++) {
|
||||
ItemWrapper* item = [ItemWrapper withItem: i + 100 * j];
|
||||
NSString* item_name = [NSString stringWithCString: item_list[i + j * 100].full_name.c_str() encoding: NSASCIIStringEncoding];
|
||||
} else for(int i = 0; i < per_menu; i++) {
|
||||
ItemWrapper* item = [ItemWrapper withItem: i + per_menu * j];
|
||||
NSString* item_name = [NSString stringWithCString: item_list[i + j * per_menu].full_name.c_str() encoding: NSASCIIStringEncoding];
|
||||
NSMenuItem* choice = [items_menu[j] addItemWithTitle: item_name action: @selector(itemMenu:) keyEquivalent: @""];
|
||||
[choice setTarget: targ];
|
||||
// TODO: Also disable gold or food
|
||||
|
@@ -98,16 +98,18 @@ void init_menubar() {
|
||||
void update_item_menu() {
|
||||
if(menuHandle == NULL) return;
|
||||
auto& item_list = univ.scenario.scen_items;
|
||||
int per_menu = item_list.size() / 4;
|
||||
int per_col = per_menu / 4;
|
||||
for(int j = 0; j < 4; j++) {
|
||||
HMENU items_menu = GetSubMenu(menuHandle, ITEMS_MENU_POS + j);
|
||||
while(GetMenuItemCount(items_menu)) RemoveMenu(items_menu, 0, MF_BYPOSITION);
|
||||
if(!scen_items_loaded) {
|
||||
AppendMenuA(items_menu, MF_STRING | MF_GRAYED, 1000, "Items Not Loaded");
|
||||
} else for(int i = 0; i < 100; i++) {
|
||||
cItem& item = item_list[i + j * 100];
|
||||
} else for(int i = 0; i < per_menu; i++) {
|
||||
cItem& item = item_list[i + j * per_menu];
|
||||
UINT flags = MF_STRING | MF_ENABLED;
|
||||
if(i % 25 == 0) flags |= MF_MENUBARBREAK;
|
||||
AppendMenuA(items_menu, flags, 1000 + j * 100 + i, item.full_name.c_str());
|
||||
if(i % per_col == 0) flags |= MF_MENUBARBREAK;
|
||||
AppendMenuA(items_menu, flags, 1000 + j * per_menu + i, item.full_name.c_str());
|
||||
// TODO: Also disable gold or food
|
||||
EnableMenuItem(items_menu, i, MF_BYPOSITION | (item.variety != eItemType::NO_ITEM ? MF_ENABLED : MF_GRAYED));
|
||||
}
|
||||
|
@@ -1471,7 +1471,7 @@ void handle_keystroke(sf::Event event) {
|
||||
|
||||
default:
|
||||
if((chr >= 97) && (chr <= 122)) {
|
||||
for(i = 0; i < 256; i++) {
|
||||
for(i = 0; i < scenario.ter_types.size(); i++) {
|
||||
j = current_terrain_type + i + 1;
|
||||
j = j % 256;
|
||||
if(scenario.ter_types[j].shortcut_key == chr) {
|
||||
@@ -1582,7 +1582,7 @@ void unfrill_terrain() {
|
||||
}
|
||||
|
||||
static ter_num_t find_object_part(unsigned char num, short x, short y, ter_num_t fallback){
|
||||
for(int i = 0; i < 256; i++){
|
||||
for(int i = 0; i < scenario.ter_types.size(); i++){
|
||||
if(scenario.ter_types[i].obj_num == num &&
|
||||
scenario.ter_types[i].obj_pos.x == x &&
|
||||
scenario.ter_types[i].obj_pos.y == y)
|
||||
@@ -1593,7 +1593,7 @@ static ter_num_t find_object_part(unsigned char num, short x, short y, ter_num_t
|
||||
|
||||
ter_num_t get_ground_from_ter(ter_num_t ter){
|
||||
unsigned char ground = scenario.ter_types[ter].ground_type;
|
||||
for(int i = 0; i < 256; i++)
|
||||
for(int i = 0; i < scenario.ter_types.size(); i++)
|
||||
if(scenario.ter_types[i].ground_type == ground)
|
||||
return i;
|
||||
return 0;
|
||||
@@ -1869,7 +1869,7 @@ bool place_item(location spot_hit,short which_item,bool property,bool always,sho
|
||||
|
||||
short x;
|
||||
|
||||
if((which_item < 0) || (which_item > 399))
|
||||
if((which_item < 0) || (which_item >= scenario.scen_items.size()))
|
||||
return true;
|
||||
if(scenario.scen_items[which_item].variety == eItemType::NO_ITEM)
|
||||
return true;
|
||||
@@ -2190,7 +2190,7 @@ void start_monster_editing(short just_redo_text) {
|
||||
reset_rb();
|
||||
right_sbar->setMaximum(255 - NRSONPAGE);
|
||||
}
|
||||
for(i = 1; i < 256; i++) {
|
||||
for(i = 1; i < scenario.scen_monsters.size(); i++) {
|
||||
set_rb(i - 1,RB_MONST, i,std::to_string(i) + " - " + scenario.scen_monsters[i].m_name);
|
||||
}
|
||||
if(draw_full)
|
||||
@@ -2216,7 +2216,7 @@ void start_item_editing(short just_redo_text) {
|
||||
reset_rb();
|
||||
right_sbar->setMaximum(400 - NRSONPAGE);
|
||||
}
|
||||
for(i = 0; i < 400; i++) {
|
||||
for(i = 0; i < scenario.scen_items.size(); i++) {
|
||||
set_rb(i,RB_ITEM, i,std::to_string(i) + " - " + scenario.scen_items[i].full_name);
|
||||
}
|
||||
if(draw_full)
|
||||
@@ -2240,7 +2240,7 @@ void start_special_item_editing() {
|
||||
right_sbar->setPosition(0);
|
||||
reset_rb();
|
||||
right_sbar->setMaximum(50 - NRSONPAGE);
|
||||
for(i = 0; i < 50; i++) {
|
||||
for(i = 0; i < scenario.special_items.size(); i++) {
|
||||
set_rb(i,RB_SPEC_ITEM, i,std::to_string(i) + " - " + scenario.special_items[i].name);
|
||||
}
|
||||
if(draw_full)
|
||||
|
@@ -755,15 +755,14 @@ static bool edit_monst_type_event_filter(cDialog& me,std::string hit,cMonster& m
|
||||
if(!save_monst_info(me,monst)) return false;
|
||||
scenario.scen_monsters[which] = monst;
|
||||
which--;
|
||||
// TODO: Use size() once scen_monsters becomes a vector
|
||||
if(which < 1) which = 255;
|
||||
if(which < 1) which = scenario.scen_monsters;
|
||||
monst = scenario.scen_monsters[which];
|
||||
put_monst_info_in_dlog(me,monst,which);
|
||||
} else if(hit == "right") {
|
||||
if(!save_monst_info(me,monst)) return false;
|
||||
scenario.scen_monsters[which] = monst;
|
||||
which++;
|
||||
if(which > 255) which = 1;
|
||||
if(which >= scenario.scen_monsters.size()) which = 1;
|
||||
monst = scenario.scen_monsters[which];
|
||||
put_monst_info_in_dlog(me,monst,which);
|
||||
} else if(hit == "picktype") {
|
||||
@@ -1560,14 +1559,14 @@ static bool edit_item_type_event_filter(cDialog& me, std::string hit, cItem& ite
|
||||
save_item_info(me, item);
|
||||
scenario.scen_items[which] = item;
|
||||
which--;
|
||||
if(which < 0) which = 399;
|
||||
if(which < 0) which = scenario.scen_items.size() - 1;
|
||||
item = scenario.scen_items[which];
|
||||
put_item_info_in_dlog(me, item, which);
|
||||
} else if(hit == "next") {
|
||||
save_item_info(me, item);
|
||||
scenario.scen_items[which] = item;
|
||||
which++;
|
||||
if(which > 399) which = 0;
|
||||
if(which >= scenario.scen_items.size()) which = 0;
|
||||
item = scenario.scen_items[which];
|
||||
put_item_info_in_dlog(me, item, which);
|
||||
} else if(hit == "choosepic") {
|
||||
@@ -1920,13 +1919,13 @@ static bool edit_spec_item_event_filter(cDialog& me, std::string hit, cSpecItem&
|
||||
} else if(hit == "left") {
|
||||
if(!save_spec_item(me, item, which)) return true;
|
||||
which--;
|
||||
if(which < 0) which = 49;
|
||||
if(which < 0) which = scenario.special_items.size() - 1;
|
||||
item = scenario.special_items[which];
|
||||
put_spec_item_in_dlog(me, item, which);
|
||||
} else if(hit == "right") {
|
||||
if(!save_spec_item(me, item, which)) return true;
|
||||
which++;
|
||||
if(which > 49) which = 0;
|
||||
if(which >= scenario.special_items.size()) which = 0;
|
||||
item = scenario.special_items[which];
|
||||
put_spec_item_in_dlog(me, item, which);
|
||||
} else if(hit == "edit-spec") {
|
||||
@@ -2536,7 +2535,7 @@ void edit_boats() {
|
||||
static bool save_add_town(cDialog& me) {
|
||||
short i;
|
||||
|
||||
for(i = 0; i < 10; i++) {
|
||||
for(i = 0; i < scenario.town_mods.size(); i++) {
|
||||
std::string id = std::to_string(i + 1);
|
||||
scenario.town_mods[i].spec = me["town" + id].getTextAsNum();
|
||||
if(cre(scenario.town_mods[i].spec,
|
||||
@@ -2554,7 +2553,7 @@ static bool save_add_town(cDialog& me) {
|
||||
static void put_add_town_in_dlog(cDialog& me) {
|
||||
short i;
|
||||
|
||||
for(i = 0; i < 10; i++) {
|
||||
for(i = 0; i < scenario.town_mods.size(); i++) {
|
||||
std::string id = std::to_string(i + 1);
|
||||
me["town" + id].setTextToNum(scenario.town_mods[i].spec);
|
||||
me["flag" + id + "-x"].setTextToNum(scenario.town_mods[i].x);
|
||||
|
@@ -170,7 +170,7 @@ static void writeScenarioToXml(ticpp::Printer&& data) {
|
||||
data.CloseElement("store-items");
|
||||
}
|
||||
}
|
||||
for(int i = 0; i < 10; i++) {
|
||||
for(int i = 0; i < scenario.town_mods.size(); i++) {
|
||||
if(is_minmax(0, scenario.towns.size(), scenario.town_mods[i].spec)) {
|
||||
data.OpenElement("town-flag");
|
||||
data.PushAttribute("town", scenario.town_mods[i].spec);
|
||||
@@ -180,7 +180,7 @@ static void writeScenarioToXml(ticpp::Printer&& data) {
|
||||
}
|
||||
}
|
||||
data.OpenElement("specials");
|
||||
for(int i = 0; i < 50; i++) {
|
||||
for(int i = 0; i < scenario.special_items.size(); i++) {
|
||||
data.OpenElement("item");
|
||||
data.PushAttribute("start-with", boolstr(scenario.special_items[i].flags / 10));
|
||||
data.PushAttribute("useable", boolstr(scenario.special_items[i].flags % 10));
|
||||
@@ -1050,13 +1050,13 @@ void start_data_dump() {
|
||||
std::ofstream fout("Scenario Data.txt");
|
||||
fout << "Scenario data for " << scen_name << ':' << endl << endl;
|
||||
fout << "Terrain types for " << scen_name << ':' << endl;
|
||||
for(i = 0; i < 256; i++)
|
||||
for(i = 0; i < scenario.ter_types.size(); i++)
|
||||
fout << " Terrain type " << i << ": " << scenario.ter_types[i].name << endl;
|
||||
fout << endl << "Monster types for " << scen_name << ':' << endl;
|
||||
for(i = 0; i < 256; i++)
|
||||
for(i = 0; i < scenario.scen_monsters.size(); i++)
|
||||
fout << " Monster type " << i << ": " << scenario.scen_monsters[i].m_name << endl;
|
||||
fout << endl << "Item types for " << scen_name << ':' << endl;
|
||||
for(i = 0; i < 400; i++)
|
||||
for(i = 0; i < scenario.scen_items.size(); i++)
|
||||
fout << " Item type " << i << ": " << scenario.scen_items[i].full_name << endl;
|
||||
fout.close();
|
||||
}
|
||||
@@ -1074,10 +1074,10 @@ void scen_text_dump(){
|
||||
for(i = 0; i < 6; i++)
|
||||
if(scenario.intro_strs[i][0] != '*')
|
||||
fout << " Intro Message " << i << ": " << scenario.intro_strs[i] << endl;
|
||||
for(i = 0; i < 50; i++)
|
||||
for(i = 0; i < scenario.journal_strs.size(); i++)
|
||||
if(scenario.journal_strs[i][0] != '*')
|
||||
fout << " Journal Entry " << i << ": " << scenario.journal_strs[i] << endl;
|
||||
for(i = 0; i < 50; i++)
|
||||
for(i = 0; i < scenario.special_items.size(); i++)
|
||||
if(scenario.special_items[i].name[0] != '*') {
|
||||
fout << " Special Item " << i << ':' << endl;
|
||||
fout << " Name: " << scenario.special_items[i].name << endl;
|
||||
@@ -1098,7 +1098,7 @@ void scen_text_dump(){
|
||||
for(i = 0; i < scenario.outdoors[out_sec.x][out_sec.y]->spec_strs.size(); i++)
|
||||
if(scenario.outdoors[out_sec.x][out_sec.y]->spec_strs[i][0] != '*')
|
||||
fout << " Message " << i << ": " << scenario.outdoors[out_sec.x][out_sec.y]->spec_strs[i] << endl;
|
||||
for(i = 0; i < 8; i++)
|
||||
for(i = 0; i < scenario.outdoors[out_sec.x][out_sec.y]->sign_locs.size(); i++)
|
||||
if(scenario.outdoors[out_sec.x][out_sec.y]->sign_locs[i].text[0] != '*')
|
||||
fout << " Sign " << i << ": " << scenario.outdoors[out_sec.x][out_sec.y]->sign_locs[i].text << endl;
|
||||
fout << endl;
|
||||
@@ -1121,7 +1121,7 @@ void scen_text_dump(){
|
||||
if(scenario.towns[i]->spec_strs[i][0] != '*')
|
||||
fout << " Message " << i << ": " << scenario.towns[i]->spec_strs[i] << endl;
|
||||
fout << " Name: " << scenario.towns[i]->town_name << endl;
|
||||
for(i = 0; i < 20; i++)
|
||||
for(i = 0; i < scenario.towns[i]->sign_locs.size(); i++)
|
||||
if(scenario.towns[i]->sign_locs[i].text[0] != '*')
|
||||
fout << " Sign " << i << ": " << scenario.towns[i]->sign_locs[i].text << endl;
|
||||
fout << endl << " Town Dialogue:" << endl;
|
||||
@@ -1132,7 +1132,7 @@ void scen_text_dump(){
|
||||
fout << " job: " << scenario.towns[i]->talking.people[i].job << endl;
|
||||
fout << " confused: " << scenario.towns[i]->talking.people[i].dunno << endl;
|
||||
}
|
||||
for(i = 0; i < 60; i++) {
|
||||
for(i = 0; i < scenario.towns[i]->talking.talk_nodes.size(); i++) {
|
||||
if(scenario.towns[i]->talking.talk_nodes[i].str1.length() > 0)
|
||||
fout << " Node " << i << "a: " << scenario.towns[i]->talking.talk_nodes[i].str1 << endl;
|
||||
if(scenario.towns[i]->talking.talk_nodes[i].str2.length() > 0)
|
||||
|
@@ -495,7 +495,7 @@ void set_up_terrain_buttons() {
|
||||
// first make terrain buttons
|
||||
switch(draw_mode){
|
||||
case DRAW_TERRAIN:
|
||||
for(i = 0; i < 256; i++) {
|
||||
for(i = 0; i < scenario.ter_types.size(); i++) {
|
||||
ter_from = ter_from_base;
|
||||
pic = scenario.ter_types[i].picture;
|
||||
if(pic >= 1000) {
|
||||
|
Reference in New Issue
Block a user