diff --git a/common/main/fireball.h b/common/main/fireball.h index bab0feb39..2a9935df0 100644 --- a/common/main/fireball.h +++ b/common/main/fireball.h @@ -101,6 +101,6 @@ void expl_wall_read_n_swap(PHYSFS_file *fp, int swap, partial_range_t THIEF_DEPTH/2)) { segnum = pick_connected_segment(&get_local_plrobj(), cur_drop_depth); - if (Segments[segnum].special == SEGMENT_IS_CONTROLCEN) + if (segnum != segment_none && vcsegptr(segnum)->special == SEGMENT_IS_CONTROLCEN) segnum = segment_none; cur_drop_depth--; } diff --git a/similar/main/fireball.cpp b/similar/main/fireball.cpp index 41d9d65fc..518e4ed5e 100644 --- a/similar/main/fireball.cpp +++ b/similar/main/fireball.cpp @@ -419,7 +419,7 @@ static int door_is_openable_by_player(const vcsegptr_t segp, int sidenum) // -------------------------------------------------------------------------------------------------------------------- // Return a segment %i segments away from initial segment. // Returns -1 if can't find a segment that distance away. -int pick_connected_segment(const vcobjptr_t objp, int max_depth) +segidx_t pick_connected_segment(const vcobjptr_t objp, int max_depth) { using std::swap; int i; @@ -497,12 +497,11 @@ int pick_connected_segment(const vcobjptr_t objp, int max_depth) if (seg_queue[tail] > Highest_segment_index) { // -- Int3(); // Something bad has happened. Queue is trashed. --MK, 12/13/94 - return -1; + return segment_none; } - cur_depth = depth[seg_queue[tail]]; } - return -1; + return segment_none; } #if defined(DXX_BUILD_DESCENT_I) @@ -586,7 +585,7 @@ static segnum_t choose_drop_segment() while (cur_drop_depth > 0 && segnum == segment_none) // before dropping in random segment, try to find ANY segment which is connected to the player responsible for the drop so object will not spawn in inaccessible areas { segnum = pick_connected_segment(vcobjptr(get_local_player().objnum), --cur_drop_depth); - if (Segments[segnum].special == SEGMENT_IS_CONTROLCEN) + if (segnum != segment_none && vcsegptr(segnum)->special == SEGMENT_IS_CONTROLCEN) segnum = segment_none; } return ((segnum == segment_none)?((d_rand() * Highest_segment_index) >> 15):segnum); // basically it should be impossible segnum == -1 now... but oh well...