Fix preset fields (and special spots) not appearing

This commit is contained in:
2014-12-22 18:37:59 -05:00
parent 9f7846c3bb
commit 6499923ab5
4 changed files with 62 additions and 67 deletions

View File

@@ -165,72 +165,6 @@ void finish_load_party(){
in_scen_debug = false; 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() { void shift_universe_left() {
short i,j; short i,j;

View File

@@ -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; univ.town.belt_present = false;
// Set up map, using stored map // Set up map, using stored map

View File

@@ -91,6 +91,65 @@ cTown* cCurTown::operator -> (){
return record(); 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() { cSpeech& cCurTown::cur_talk() {
// Make sure we actually have a valid speech stored // Make sure we actually have a valid speech stored

View File

@@ -63,6 +63,7 @@ public:
cSpeech& cur_talk(); // Get the currently loaded speech cSpeech& cur_talk(); // Get the currently loaded speech
bool prep_talk(short which); // Prepare for loading specified speech, returning true if already loaded 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 prep_arena(); // Set up for a combat arena
void place_preset_fields();
bool is_explored(char x, char y) const; bool is_explored(char x, char y) const;
bool is_force_wall(char x, char y) const; bool is_force_wall(char x, char y) const;