diff --git a/osx/boe.fileio.cpp b/osx/boe.fileio.cpp index a0b5590f..21c3d79d 100644 --- a/osx/boe.fileio.cpp +++ b/osx/boe.fileio.cpp @@ -165,72 +165,6 @@ void finish_load_party(){ in_scen_debug = false; } -void init_town(){ // formerly part of load_town - // Initialize barriers, etc. Note non-sfx gets forgotten if this is a town recently visited. -// if(mode == 0) { - unsigned int i,j; - for(i = 0; i < 64; i++) - for(j = 0; j < 64; j++) { - univ.town.fields[i][j] = 0; - //univ.out.sfx[i][j] = 0; - } - for(i = 0; i < univ.town->preset_fields.size(); i++) { - switch(univ.town->preset_fields[i].type){ - case 1: // currently unused - univ.town.set_block(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 2: - univ.town.set_spot(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 3: - univ.town.set_web(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 4: - univ.town.set_crate(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 5: - univ.town.set_barrel(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 6: - univ.town.set_fire_barr(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 7: - univ.town.set_force_barr(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 8: - univ.town.set_quickfire(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 14: - univ.town.set_sm_blood(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 15: - univ.town.set_med_blood(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 16: - univ.town.set_lg_blood(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 17: - univ.town.set_sm_slime(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 18: - univ.town.set_lg_slime(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 19: - univ.town.set_ash(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 20: - univ.town.set_bones(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - case 21: - univ.town.set_rubble(univ.town->preset_fields[i].loc.x,univ.town->preset_fields[i].loc.y,true); - break; - } - - } -// } -} - - void shift_universe_left() { short i,j; diff --git a/osx/boe.town.cpp b/osx/boe.town.cpp index ec7479d5..034ab295 100644 --- a/osx/boe.town.cpp +++ b/osx/boe.town.cpp @@ -178,7 +178,8 @@ void start_town_mode(short which_town, short entry_dir) { // } - + // TODO: This means cleared webs reappear, for example. Is that right? + univ.town.place_preset_fields(); univ.town.belt_present = false; // Set up map, using stored map diff --git a/osx/classes/universe.cpp b/osx/classes/universe.cpp index 1a6e5719..94b59ffc 100644 --- a/osx/classes/universe.cpp +++ b/osx/classes/universe.cpp @@ -91,6 +91,65 @@ cTown* cCurTown::operator -> (){ return record(); } +void cCurTown::place_preset_fields() { + // Initialize barriers, etc. Note non-sfx gets forgotten if this is a town recently visited. + for(int i = 0; i < 64; i++) + for(int j = 0; j < 64; j++) { + fields[i][j] = 0; + } + for(size_t i = 0; i < record()->preset_fields.size(); i++) { + switch(record()->preset_fields[i].type){ + case 1: // currently unused + univ.town.set_block(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 2: + set_spot(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 3: + set_web(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 4: + set_crate(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 5: + set_barrel(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 6: + set_fire_barr(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 7: + set_force_barr(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 8: + set_quickfire(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 14: + set_sm_blood(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 15: + set_med_blood(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 16: + set_lg_blood(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 17: + set_sm_slime(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 18: + set_lg_slime(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 19: + set_ash(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 20: + set_bones(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + case 21: + set_rubble(record()->preset_fields[i].loc.x,record()->preset_fields[i].loc.y,true); + break; + } + } +} cSpeech& cCurTown::cur_talk() { // Make sure we actually have a valid speech stored diff --git a/osx/classes/universe.h b/osx/classes/universe.h index 7dd77fcd..c9484d3f 100644 --- a/osx/classes/universe.h +++ b/osx/classes/universe.h @@ -63,6 +63,7 @@ public: cSpeech& cur_talk(); // Get the currently loaded speech bool prep_talk(short which); // Prepare for loading specified speech, returning true if already loaded void prep_arena(); // Set up for a combat arena + void place_preset_fields(); bool is_explored(char x, char y) const; bool is_force_wall(char x, char y) const;