diff --git a/src/peep/peep.c b/src/peep/peep.c index f2aa56cc8c..4bcbee4f57 100644 --- a/src/peep/peep.c +++ b/src/peep/peep.c @@ -900,13 +900,7 @@ static void peep_go_to_ride_entrance(rct_peep* peep, rct_ride* ride){ int y = ride->entrances[peep->current_ride_station] >> 8; int z = ride->station_heights[peep->current_ride_station]; - rct_map_element* map_element = map_get_first_element_at(x, y); - for (;; map_element++){ - if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_ENTRANCE) - continue; - if (map_element->base_height == z) - break; - } + rct_map_element* map_element = ride_get_station_exit_element(ride, x, y, z); uint8 direction = map_element->type & MAP_ELEMENT_DIRECTION_MASK; x *= 32; @@ -1150,13 +1144,7 @@ void peep_update_ride_sub_state_1(rct_peep* peep){ y = ride->entrances[peep->current_ride_station] >> 8; z = ride->station_heights[peep->current_ride_station]; - rct_map_element* map_element = map_get_first_element_at(x, y); - for (;; map_element++){ - if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_ENTRANCE) - continue; - if (map_element->base_height == z) - break; - } + rct_map_element* map_element = ride_get_station_exit_element(ride, x, y, z); uint8 direction_entrance = (map_element->type & MAP_ELEMENT_DIRECTION_MASK); @@ -1194,13 +1182,7 @@ void peep_update_ride_sub_state_1(rct_peep* peep){ x = ride->station_starts[peep->current_ride_station] & 0xFF; y = ride->station_starts[peep->current_ride_station] >> 8; - map_element = map_get_first_element_at(x, y); - for (;; map_element++){ - if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_TRACK) - continue; - if (map_element->base_height == z) - break; - } + map_element = ride_get_station_start_track_element(ride, peep->current_ride_station); uint8 direction_track = map_element->type & MAP_ELEMENT_DIRECTION_MASK; @@ -1238,26 +1220,14 @@ void peep_update_ride_sub_state_1(rct_peep* peep){ y = ride->entrances[peep->current_ride_station] >> 8; z = ride->station_heights[peep->current_ride_station]; - rct_map_element* map_element = map_get_first_element_at(x, y); - for (;; map_element++){ - if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_ENTRANCE) - continue; - if (map_element->base_height == z) - break; - } + rct_map_element* map_element = ride_get_station_exit_element(ride, x, y, z); uint8 direction_entrance = map_element->type & MAP_ELEMENT_DIRECTION_MASK; x = ride->station_starts[peep->current_ride_station] & 0xFF; y = ride->station_starts[peep->current_ride_station] >> 8; - map_element = map_get_first_element_at(x, y); - for (;; map_element++){ - if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_TRACK) - continue; - if (map_element->base_height == z) - break; - } + map_element = ride_get_station_start_track_element(ride, peep->current_ride_station); uint8 direction_track = map_element->type & MAP_ELEMENT_DIRECTION_MASK; @@ -1430,13 +1400,7 @@ static void peep_update_ride_sub_state_2_rejoin_queue(rct_peep* peep, rct_ride* y = ride->entrances[peep->current_ride_station] >> 8; z = ride->station_heights[peep->current_ride_station]; - rct_map_element* map_element = map_get_first_element_at(x, y); - for (;; map_element++){ - if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_ENTRANCE) - continue; - if (map_element->base_height == z) - break; - } + rct_map_element* map_element = ride_get_station_exit_element(ride, x, y, z); uint8 direction_entrance = map_element->type & MAP_ELEMENT_DIRECTION_MASK; @@ -1652,13 +1616,7 @@ static void peep_update_ride_sub_state_7(rct_peep* peep){ y = ride->exits[peep->current_ride_station] >> 8; z = ride->station_heights[peep->current_ride_station]; - rct_map_element* map_element = map_get_first_element_at(x, y); - for (;; map_element++){ - if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_ENTRANCE) - continue; - if (map_element->base_height == z) - break; - } + rct_map_element* map_element = ride_get_station_exit_element(ride, x, y, z); uint8 exit_direction = map_element->type & MAP_ELEMENT_DIRECTION_MASK; exit_direction ^= (1 << 1); @@ -1742,26 +1700,14 @@ static void peep_update_ride_sub_state_7(rct_peep* peep){ y = ride->exits[peep->current_ride_station] >> 8; z = ride->station_heights[peep->current_ride_station]; - rct_map_element* map_element = map_get_first_element_at(x, y); - for (;; map_element++){ - if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_ENTRANCE) - continue; - if (map_element->base_height == z) - break; - } + rct_map_element* map_element = ride_get_station_exit_element(ride, x, y, z); uint8 exit_direction = map_element->type & MAP_ELEMENT_DIRECTION_MASK; x = ride->station_starts[peep->current_ride_station] & 0xFF; y = ride->station_starts[peep->current_ride_station] >> 8; - map_element = map_get_first_element_at(x, y); - for (;; map_element++){ - if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_TRACK) - continue; - if (map_element->base_height == z) - break; - } + map_element = ride_get_station_start_track_element(ride, peep->current_ride_station); uint8 station_direction = map_element->type & MAP_ELEMENT_DIRECTION_MASK; @@ -1826,13 +1772,7 @@ static void peep_update_ride_prepare_for_state_9(rct_peep* peep){ sint16 y = ride->exits[peep->current_ride_station] >> 8; sint16 z = ride->station_heights[peep->current_ride_station]; - rct_map_element* map_element = map_get_first_element_at(x, y); - for (;; map_element++){ - if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_ENTRANCE) - continue; - if (map_element->base_height == z) - break; - } + rct_map_element* map_element = ride_get_station_exit_element(ride, x, y, z); uint8 exit_direction = map_element->type & MAP_ELEMENT_DIRECTION_MASK; @@ -2034,13 +1974,7 @@ static void peep_udpate_ride_sub_state_13(rct_peep* peep){ y = ride->exits[peep->current_ride_station] >> 8; sint16 z = ride->station_heights[peep->current_ride_station]; - rct_map_element* map_element = map_get_first_element_at(x, y); - for (;; map_element++){ - if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_ENTRANCE) - continue; - if (map_element->base_height == z) - break; - } + rct_map_element* map_element = ride_get_station_exit_element(ride, x, y, z); uint8 exit_direction = map_element->type & MAP_ELEMENT_DIRECTION_MASK; exit_direction ^= (1 << 1); @@ -2107,13 +2041,7 @@ static void peep_update_ride_sub_state_14(rct_peep* peep){ y = ride->exits[peep->current_ride_station] >> 8; sint16 z = ride->station_heights[peep->current_ride_station]; - rct_map_element* map_element = map_get_first_element_at(x, y); - for (;; map_element++){ - if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_ENTRANCE) - continue; - if (map_element->base_height == z) - break; - } + rct_map_element* map_element = ride_get_station_exit_element(ride, x, y, z); uint8 exit_direction = map_element->type & MAP_ELEMENT_DIRECTION_MASK; @@ -2275,13 +2203,7 @@ static void peep_update_ride_sub_state_16(rct_peep* peep){ y = ride->exits[peep->current_ride_station] >> 8; sint16 z = ride->station_heights[peep->current_ride_station]; - rct_map_element* map_element = map_get_first_element_at(x, y); - for (;; map_element++){ - if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_ENTRANCE) - continue; - if (map_element->base_height == z) - break; - } + rct_map_element* map_element = ride_get_station_exit_element(ride, x, y, z); uint8 exit_direction = map_element->type & MAP_ELEMENT_DIRECTION_MASK; exit_direction ^= (1 << 1); diff --git a/src/ride/ride.h b/src/ride/ride.h index 46a553af86..66513a1a22 100644 --- a/src/ride/ride.h +++ b/src/ride/ride.h @@ -743,7 +743,8 @@ int sub_6C683D(int* x, int* y, int z, int direction, int type, int esi, int edi, void ride_set_map_tooltip(rct_map_element *mapElement); int ride_music_params_update(sint16 x, sint16 y, sint16 z, uint8 rideIndex, uint16 sampleRate, uint32 position, uint8 *tuneId); void ride_music_update_final(); - +rct_map_element *ride_get_station_start_track_element(rct_ride *ride, int stationIndex); +rct_map_element *ride_get_station_exit_element(rct_ride *ride, int x, int y, int z); void ride_set_status(int rideIndex, int status); void game_command_set_ride_status(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp); void ride_set_name(int rideIndex, const char *name);