game[wandering]: rewrite create_wand_monst to be consistent with the mac legacy version...

This commit is contained in:
ALONSO Laurent
2021-12-10 08:57:50 +01:00
committed by Celtic Minstrel
parent c4bf587ccd
commit 605434bab9
2 changed files with 30 additions and 24 deletions

View File

@@ -41,40 +41,42 @@ short out_enc_lev_tot(short which) {
}
void create_wand_monst() {
short r1,r2,r3,num_tries = 0;
short num_tries = 0;
location p_loc;
r1 = get_ran(1,0,univ.out->wandering.size() - 1);
if(overall_mode == MODE_OUTDOORS) {
short r1 = get_ran(1,0,univ.out->wandering.size()- 1);
if(!univ.out->wandering[r1].isNull()) {
r2 = get_ran(1,0,univ.out->wandering_locs.size() - 1);
short r2 = get_ran(1,0,univ.out->wandering_locs.size() - 1);
while(point_onscreen(univ.out->wandering_locs[r2], global_to_local(univ.party.out_loc)) && num_tries++ < 100)
r2 = get_ran(1,0,3);
r2 = get_ran(1,0,univ.out->wandering_locs.size() - 1);
if(!is_blocked(univ.out->wandering_locs[r2]))
place_outd_wand_monst(univ.out->wandering_locs[r2], univ.out->wandering[r1],0);
}
} else if(!univ.town->wandering[r1].isNull() && univ.town.countMonsters() <= 50
} else {
short r1 = get_ran(1,0,univ.town->wandering.size()- 1);
if(!univ.town->wandering[r1].isNull() && univ.town.countMonsters() <= 50
&& !univ.town->is_cleaned_out()) {
// won't place wandering if more than 50 monsters
r2 = get_ran(1,0,univ.town->wandering.size() - 1);
while(point_onscreen(univ.town->wandering_locs[r2],univ.party.town_loc) &&
!loc_off_act_area(univ.town->wandering_locs[r2]) && num_tries++ < 100)
r2 = get_ran(1,0,3);
for(short i = 0; i < 4; i++) {
if(univ.town->wandering[r1].monst[i] != 0) { // place a monster
p_loc = univ.town->wandering_locs[r2];
p_loc.x += get_ran(1,0,4) - 2;
p_loc.y += get_ran(1,0,4) - 2;
if(!is_blocked(p_loc))
place_monster(univ.town->wandering[r1].monst[i],p_loc);
// won't place wandering if more than 50 monsters
short r2 = get_ran(1,0,univ.town->wandering_locs.size() - 1);
while(point_onscreen(univ.town->wandering_locs[r2],univ.party.town_loc) &&
!loc_off_act_area(univ.town->wandering_locs[r2]) && num_tries++ < 100)
r2 = get_ran(1,0,univ.town->wandering_locs.size() - 1);
for(size_t i=0; i<univ.town->wandering[r1].monst.size(); ++i) {
mon_num_t const &monst=univ.town->wandering[r1].monst[i];
if(monst == 0) continue;
// compute the number of monsters that we want to place
int numMonst=1;
if (r1>=2 && i==0) ++numMonst;
if (r1>=3 && i==1) ++numMonst;
for (int w=0; w<numMonst; ++w) {
p_loc = univ.town->wandering_locs[r2];
p_loc.x += get_ran(1,0,4) - 2;
p_loc.y += get_ran(1,0,4) - 2;
if(!is_blocked(p_loc))
place_monster(monst,p_loc);
}
}
p_loc = univ.town->wandering_locs[r2];
p_loc.x += get_ran(1,0,4) - 2;
p_loc.y += get_ran(1,0,4) - 2;
// TODO: This contradicts the documentation which says only 1-2 are placed of the last monster
r3 = get_ran(1,0,3);
if(r3 >= 2 && !is_blocked(p_loc)) // place extra monsters?
place_monster(univ.town->wandering[r1].monst[3],p_loc);
}
}
}

View File

@@ -180,6 +180,10 @@ void start_town_mode(short which_town, short entry_dir) {
add_string_to_buf(univ.town->is_cleaned_out() ? "Area has been cleaned out." : "Area has been abandoned.");
for(size_t i=0; i<univ.town.monst.size(); ++i) {
auto &monst=univ.town.monst[i];
if (monst.number<=0) {
monst.active=0;
continue;
}
monst.targ_loc.x = 0;
monst.targ_loc.y = 0;
if (!monsters_loaded && monst.spec_enc_code>0)