diff --git a/src/openrct2/ride/CableLift.cpp b/src/openrct2/ride/CableLift.cpp index f54c8f6b92..507a999e47 100644 --- a/src/openrct2/ride/CableLift.cpp +++ b/src/openrct2/ride/CableLift.cpp @@ -7,115 +7,117 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ +#include "CableLift.h" + #include "../core/Math.hpp" #include "../rct12/RCT12.h" #include "../util/Util.h" #include "../world/Sprite.h" -#include "CableLift.h" #include "Ride.h" -#include "Track.h" #include "RideData.h" +#include "Track.h" #include "VehicleData.h" -static void cable_lift_update_moving_to_end_of_station(rct_vehicle * vehicle); -static void cable_lift_update_waiting_to_depart(rct_vehicle * vehicle); -static void cable_lift_update_departing(rct_vehicle * vehicle); -static void cable_lift_update_travelling(rct_vehicle * vehicle); -static void cable_lift_update_arriving(rct_vehicle * vehicle); +static void cable_lift_update_moving_to_end_of_station(rct_vehicle* vehicle); +static void cable_lift_update_waiting_to_depart(rct_vehicle* vehicle); +static void cable_lift_update_departing(rct_vehicle* vehicle); +static void cable_lift_update_travelling(rct_vehicle* vehicle); +static void cable_lift_update_arriving(rct_vehicle* vehicle); -rct_vehicle * cable_lift_segment_create(int32_t rideIndex, - int32_t x, - int32_t y, - int32_t z, - int32_t direction, - uint16_t var_44, - int32_t remaining_distance, - bool head) +rct_vehicle* cable_lift_segment_create( + int32_t rideIndex, + int32_t x, + int32_t y, + int32_t z, + int32_t direction, + uint16_t var_44, + int32_t remaining_distance, + bool head) { - Ride * ride = get_ride(rideIndex); - rct_vehicle * current = &(create_sprite(1)->vehicle); + Ride* ride = get_ride(rideIndex); + rct_vehicle* current = &(create_sprite(1)->vehicle); current->sprite_identifier = SPRITE_IDENTIFIER_VEHICLE; - current->ride = rideIndex; - current->ride_subtype = RIDE_ENTRY_INDEX_NULL; + current->ride = rideIndex; + current->ride_subtype = RIDE_ENTRY_INDEX_NULL; if (head) { - move_sprite_to_list((rct_sprite *) current, SPRITE_LIST_TRAIN * 2); + move_sprite_to_list((rct_sprite*)current, SPRITE_LIST_TRAIN * 2); ride->cable_lift = current->sprite_index; } - current->is_child = head ? 0 : 1; - current->var_44 = var_44; - current->remaining_distance = remaining_distance; - current->sprite_width = 10; + current->is_child = head ? 0 : 1; + current->var_44 = var_44; + current->remaining_distance = remaining_distance; + current->sprite_width = 10; current->sprite_height_negative = 10; current->sprite_height_positive = 10; - current->mass = 100; - current->num_seats = 0; - current->speed = 20; - current->powered_acceleration = 80; - current->velocity = 0; - current->acceleration = 0; - current->swing_sprite = 0; - current->swinging_car_var_0 = 0; - current->var_4E = 0; - current->restraints_position = 0; - current->spin_sprite = 0; - current->spin_speed = 0; - current->sound2_flags = 0; - current->sound1_id = RCT12_SOUND_ID_NULL; - current->sound2_id = RCT12_SOUND_ID_NULL; - current->var_C4 = 0; - current->animation_frame = 0; - current->var_C8 = 0; - current->var_CA = 0; - current->scream_sound_id = 0xFF; - current->vehicle_sprite_type = 0; - current->bank_rotation = 0; - for (auto &peep : current->peep) + current->mass = 100; + current->num_seats = 0; + current->speed = 20; + current->powered_acceleration = 80; + current->velocity = 0; + current->acceleration = 0; + current->swing_sprite = 0; + current->swinging_car_var_0 = 0; + current->var_4E = 0; + current->restraints_position = 0; + current->spin_sprite = 0; + current->spin_speed = 0; + current->sound2_flags = 0; + current->sound1_id = RCT12_SOUND_ID_NULL; + current->sound2_id = RCT12_SOUND_ID_NULL; + current->var_C4 = 0; + current->animation_frame = 0; + current->var_C8 = 0; + current->var_CA = 0; + current->scream_sound_id = 0xFF; + current->vehicle_sprite_type = 0; + current->bank_rotation = 0; + for (auto& peep : current->peep) { peep = SPRITE_INDEX_NULL; } - current->var_CD = 0; + current->var_CD = 0; current->sprite_direction = direction << 3; - current->track_x = x; - current->track_y = y; + current->track_x = x; + current->track_y = y; z = z * 8; current->track_z = z; z += RideData5[ride->type].z_offset; - sprite_move(16, 16, z, (rct_sprite *) current); - current->track_type = (TRACK_ELEM_CABLE_LIFT_HILL << 2) | (current->sprite_direction >> 3); + sprite_move(16, 16, z, (rct_sprite*)current); + current->track_type = (TRACK_ELEM_CABLE_LIFT_HILL << 2) | (current->sprite_direction >> 3); current->track_progress = 164; - current->update_flags = VEHICLE_UPDATE_FLAG_1; - current->status = VEHICLE_STATUS_MOVING_TO_END_OF_STATION; - current->sub_state = 0; - current->num_peeps = 0; + current->update_flags = VEHICLE_UPDATE_FLAG_1; + current->status = VEHICLE_STATUS_MOVING_TO_END_OF_STATION; + current->sub_state = 0; + current->num_peeps = 0; current->next_free_seat = 0; return current; } -void cable_lift_update(rct_vehicle * vehicle) +void cable_lift_update(rct_vehicle* vehicle) { switch (vehicle->status) { - case VEHICLE_STATUS_MOVING_TO_END_OF_STATION: - cable_lift_update_moving_to_end_of_station(vehicle); - break; - case VEHICLE_STATUS_WAITING_FOR_PASSENGERS: - // Stays in this state until a train puts it into next state - break; - case VEHICLE_STATUS_WAITING_TO_DEPART: - cable_lift_update_waiting_to_depart(vehicle); - break; - case VEHICLE_STATUS_DEPARTING: - cable_lift_update_departing(vehicle); - break; - case VEHICLE_STATUS_TRAVELLING: - cable_lift_update_travelling(vehicle); - break; - case VEHICLE_STATUS_ARRIVING: - cable_lift_update_arriving(vehicle); - break; + case VEHICLE_STATUS_MOVING_TO_END_OF_STATION: + cable_lift_update_moving_to_end_of_station(vehicle); + break; + case VEHICLE_STATUS_WAITING_FOR_PASSENGERS: + // Stays in this state until a train puts it into next state + break; + case VEHICLE_STATUS_WAITING_TO_DEPART: + cable_lift_update_waiting_to_depart(vehicle); + break; + case VEHICLE_STATUS_DEPARTING: + cable_lift_update_departing(vehicle); + break; + case VEHICLE_STATUS_TRAVELLING: + cable_lift_update_travelling(vehicle); + break; + case VEHICLE_STATUS_ARRIVING: + cable_lift_update_arriving(vehicle); + break; } } @@ -123,7 +125,7 @@ void cable_lift_update(rct_vehicle * vehicle) * * rct2: 0x006DF8A4 */ -static void cable_lift_update_moving_to_end_of_station(rct_vehicle * vehicle) +static void cable_lift_update_moving_to_end_of_station(rct_vehicle* vehicle) { if (vehicle->velocity >= -439800) vehicle->acceleration = -2932; @@ -137,16 +139,16 @@ static void cable_lift_update_moving_to_end_of_station(rct_vehicle * vehicle) if (!(cable_lift_update_track_motion(vehicle) & (1 << 0))) return; - vehicle->velocity = 0; + vehicle->velocity = 0; vehicle->acceleration = 0; - vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS; + vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS; } /** * * rct2: 0x006DF8F1 */ -static void cable_lift_update_waiting_to_depart(rct_vehicle * vehicle) +static void cable_lift_update_waiting_to_depart(rct_vehicle* vehicle) { if (vehicle->velocity >= -58640) vehicle->acceleration = -14660; @@ -162,8 +164,8 @@ static void cable_lift_update_waiting_to_depart(rct_vehicle * vehicle) // Next check to see if the second part of the cable lift // is at the front of the passenger vehicle to simulate the // cable being attached underneath the train. - rct_vehicle * passengerVehicle = GET_VEHICLE(vehicle->cable_lift_target); - rct_vehicle * cableLiftSecondPart = GET_VEHICLE(vehicle->prev_vehicle_on_ride); + rct_vehicle* passengerVehicle = GET_VEHICLE(vehicle->cable_lift_target); + rct_vehicle* cableLiftSecondPart = GET_VEHICLE(vehicle->prev_vehicle_on_ride); int16_t dist_x = abs(passengerVehicle->x - cableLiftSecondPart->x); int16_t dist_y = abs(passengerVehicle->y - cableLiftSecondPart->y); @@ -171,36 +173,36 @@ static void cable_lift_update_waiting_to_depart(rct_vehicle * vehicle) if (dist_x + dist_y > 2) return; - vehicle->velocity = 0; + vehicle->velocity = 0; vehicle->acceleration = 0; - vehicle->status = VEHICLE_STATUS_DEPARTING; - vehicle->sub_state = 0; + vehicle->status = VEHICLE_STATUS_DEPARTING; + vehicle->sub_state = 0; } /** * * rct2: 0x006DF97A */ -static void cable_lift_update_departing(rct_vehicle * vehicle) +static void cable_lift_update_departing(rct_vehicle* vehicle) { vehicle->sub_state++; if (vehicle->sub_state < 16) return; - rct_vehicle * passengerVehicle = GET_VEHICLE(vehicle->cable_lift_target); - vehicle->status = VEHICLE_STATUS_TRAVELLING; - passengerVehicle->status = VEHICLE_STATUS_TRAVELLING_CABLE_LIFT; + rct_vehicle* passengerVehicle = GET_VEHICLE(vehicle->cable_lift_target); + vehicle->status = VEHICLE_STATUS_TRAVELLING; + passengerVehicle->status = VEHICLE_STATUS_TRAVELLING_CABLE_LIFT; } /** * * rct2: 0x006DF99C */ -static void cable_lift_update_travelling(rct_vehicle * vehicle) +static void cable_lift_update_travelling(rct_vehicle* vehicle) { - rct_vehicle * passengerVehicle = GET_VEHICLE(vehicle->cable_lift_target); + rct_vehicle* passengerVehicle = GET_VEHICLE(vehicle->cable_lift_target); - vehicle->velocity = std::min(passengerVehicle->velocity, 439800); + vehicle->velocity = std::min(passengerVehicle->velocity, 439800); vehicle->acceleration = 0; if (passengerVehicle->update_flags & VEHICLE_UPDATE_FLAG_BROKEN_TRAIN) return; @@ -208,82 +210,72 @@ static void cable_lift_update_travelling(rct_vehicle * vehicle) if (!(cable_lift_update_track_motion(vehicle) & (1 << 1))) return; - vehicle->velocity = 0; + vehicle->velocity = 0; vehicle->acceleration = 0; - vehicle->status = VEHICLE_STATUS_ARRIVING; - vehicle->sub_state = 0; + vehicle->status = VEHICLE_STATUS_ARRIVING; + vehicle->sub_state = 0; } /** * * rct2: 0x006DF9F0 */ -static void cable_lift_update_arriving(rct_vehicle * vehicle) +static void cable_lift_update_arriving(rct_vehicle* vehicle) { vehicle->sub_state++; if (vehicle->sub_state >= 64) vehicle->status = VEHICLE_STATUS_MOVING_TO_END_OF_STATION; } -static bool sub_6DF01A_loop(rct_vehicle * vehicle) +static bool sub_6DF01A_loop(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); for (; vehicle->remaining_distance >= 13962; _vehicleUnkF64E10++) { uint8_t trackType = vehicle->track_type >> 2; - if (trackType == TRACK_ELEM_CABLE_LIFT_HILL && - vehicle->track_progress == 160) + if (trackType == TRACK_ELEM_CABLE_LIFT_HILL && vehicle->track_progress == 160) { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_1; } uint16_t trackProgress = vehicle->track_progress + 1; - const rct_vehicle_info * moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, 0); - uint16_t trackTotalProgress = vehicle_get_move_info_size(vehicle->var_CD, vehicle->track_type); + const rct_vehicle_info* moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, 0); + uint16_t trackTotalProgress = vehicle_get_move_info_size(vehicle->var_CD, vehicle->track_type); if (trackProgress >= trackTotalProgress) { _vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_end; - _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end; - rct_tile_element * trackElement = map_get_track_element_at_of_type_seq( - vehicle->track_x, - vehicle->track_y, - vehicle->track_z / 8, - trackType, - 0 - ); + _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end; + rct_tile_element* trackElement + = map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z / 8, trackType, 0); - CoordsXYE input; - CoordsXYE output; - int32_t outputZ; - int32_t outputDirection; + CoordsXYE input; + CoordsXYE output; + int32_t outputZ; + int32_t outputDirection; - input.x = vehicle->track_x; - input.y = vehicle->track_y; + input.x = vehicle->track_x; + input.y = vehicle->track_y; input.element = trackElement; if (!track_block_get_next(&input, &output, &outputZ, &outputDirection)) return false; - if (TrackDefinitions[track_element_get_type(output.element)].vangle_start != _vehicleVAngleEndF64E36 || - TrackDefinitions[track_element_get_type(output.element)].bank_start != _vehicleBankEndF64E37) + if (TrackDefinitions[track_element_get_type(output.element)].vangle_start != _vehicleVAngleEndF64E36 + || TrackDefinitions[track_element_get_type(output.element)].bank_start != _vehicleBankEndF64E37) return false; - vehicle->track_x = output.x; - vehicle->track_y = output.y; - vehicle->track_z = outputZ; + vehicle->track_x = output.x; + vehicle->track_y = output.y; + vehicle->track_z = outputZ; vehicle->track_direction = outputDirection; - vehicle->track_type |= track_element_get_type(output.element) << 2; + vehicle->track_type |= track_element_get_type(output.element) << 2; trackProgress = 0; } vehicle->track_progress = trackProgress; moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, trackProgress); - LocationXYZ16 unk = { - moveInfo->x, - moveInfo->y, - moveInfo->z - }; + LocationXYZ16 unk = { moveInfo->x, moveInfo->y, moveInfo->z }; unk.x += vehicle->track_x; unk.y += vehicle->track_y; @@ -303,8 +295,8 @@ static bool sub_6DF01A_loop(rct_vehicle * vehicle) unk_F64E20.y = unk.y; unk_F64E20.z = unk.z; - vehicle->sprite_direction = moveInfo->direction; - vehicle->bank_rotation = moveInfo->bank_rotation; + vehicle->sprite_direction = moveInfo->direction; + vehicle->bank_rotation = moveInfo->bank_rotation; vehicle->vehicle_sprite_type = moveInfo->vehicle_sprite_type; if (vehicle->remaining_distance >= 13962) @@ -315,45 +307,40 @@ static bool sub_6DF01A_loop(rct_vehicle * vehicle) return true; } -static bool sub_6DF21B_loop(rct_vehicle * vehicle) +static bool sub_6DF21B_loop(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); for (; vehicle->remaining_distance < 0; _vehicleUnkF64E10++) { - uint16_t trackProgress = vehicle->track_progress - 1; - const rct_vehicle_info * moveInfo; + uint16_t trackProgress = vehicle->track_progress - 1; + const rct_vehicle_info* moveInfo; - if ((int16_t) trackProgress == -1) + if ((int16_t)trackProgress == -1) { uint8_t trackType = vehicle->track_type >> 2; _vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_start; - _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_start; + _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_start; - rct_tile_element * trackElement = map_get_track_element_at_of_type_seq( - vehicle->track_x, - vehicle->track_y, - vehicle->track_z / 8, - trackType, - 0 - ); + rct_tile_element* trackElement + = map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z / 8, trackType, 0); - CoordsXYE input; + CoordsXYE input; - input.x = vehicle->track_x; - input.y = vehicle->track_y; + input.x = vehicle->track_x; + input.y = vehicle->track_y; input.element = trackElement; track_begin_end output; if (!track_block_get_previous(input.x, input.y, input.element, &output)) return false; - if (TrackDefinitions[track_element_get_type(output.begin_element)].vangle_end != _vehicleVAngleEndF64E36 || - TrackDefinitions[track_element_get_type(output.begin_element)].bank_end != _vehicleBankEndF64E37) + if (TrackDefinitions[track_element_get_type(output.begin_element)].vangle_end != _vehicleVAngleEndF64E36 + || TrackDefinitions[track_element_get_type(output.begin_element)].bank_end != _vehicleBankEndF64E37) return false; - vehicle->track_x = output.begin_x; - vehicle->track_y = output.begin_y; - vehicle->track_z = output.begin_z; + vehicle->track_x = output.begin_x; + vehicle->track_y = output.begin_y; + vehicle->track_z = output.begin_z; vehicle->track_direction = output.begin_direction; vehicle->track_type |= track_element_get_type(output.begin_element) << 2; @@ -389,8 +376,8 @@ static bool sub_6DF21B_loop(rct_vehicle * vehicle) unk_F64E20.y = unk.y; unk_F64E20.z = unk.z; - vehicle->sprite_direction = moveInfo->direction; - vehicle->bank_rotation = moveInfo->bank_rotation; + vehicle->sprite_direction = moveInfo->direction; + vehicle->bank_rotation = moveInfo->bank_rotation; vehicle->vehicle_sprite_type = moveInfo->vehicle_sprite_type; if (vehicle->remaining_distance < 0) @@ -405,18 +392,18 @@ static bool sub_6DF21B_loop(rct_vehicle * vehicle) * * rct2: 0x006DEF56 */ -int32_t cable_lift_update_track_motion(rct_vehicle * cableLift) +int32_t cable_lift_update_track_motion(rct_vehicle* cableLift) { - _vehicleF64E2C = 0; - gCurrentVehicle = cableLift; + _vehicleF64E2C = 0; + gCurrentVehicle = cableLift; _vehicleMotionTrackFlags = 0; - _vehicleStationIndex = 0xFF; + _vehicleStationIndex = 0xFF; cableLift->velocity += cableLift->acceleration; _vehicleVelocityF64E08 = cableLift->velocity; _vehicleVelocityF64E0C = (cableLift->velocity / 1024) * 42; - rct_vehicle * frontVehicle = cableLift; + rct_vehicle* frontVehicle = cableLift; if (cableLift->velocity < 0) { frontVehicle = vehicle_get_tail(cableLift); @@ -424,7 +411,7 @@ int32_t cable_lift_update_track_motion(rct_vehicle * cableLift) _vehicleFrontVehicle = frontVehicle; - for (rct_vehicle * vehicle = frontVehicle;;) + for (rct_vehicle* vehicle = frontVehicle;;) { vehicle->acceleration = dword_9A2970[vehicle->vehicle_sprite_type]; _vehicleUnkF64E10 = 1; @@ -435,7 +422,7 @@ int32_t cable_lift_update_track_motion(rct_vehicle * cableLift) unk_F64E20.x = vehicle->x; unk_F64E20.y = vehicle->y; unk_F64E20.z = vehicle->z; - invalidate_sprite_2((rct_sprite *) vehicle); + invalidate_sprite_2((rct_sprite*)vehicle); while (true) { @@ -471,14 +458,9 @@ int32_t cable_lift_update_track_motion(rct_vehicle * cableLift) } } } - sprite_move( - unk_F64E20.x, - unk_F64E20.y, - unk_F64E20.z, - (rct_sprite *) vehicle - ); + sprite_move(unk_F64E20.x, unk_F64E20.y, unk_F64E20.z, (rct_sprite*)vehicle); - invalidate_sprite_2((rct_sprite *) vehicle); + invalidate_sprite_2((rct_sprite*)vehicle); } vehicle->acceleration /= _vehicleUnkF64E10; if (_vehicleVelocityF64E08 >= 0) @@ -495,17 +477,17 @@ int32_t cable_lift_update_track_motion(rct_vehicle * cableLift) } } - uint32_t vehicleCount = 0; - uint16_t massTotal = 0; + uint32_t vehicleCount = 0; + uint16_t massTotal = 0; int32_t accelerationTotal = 0; for (uint16_t spriteId = cableLift->sprite_index; spriteId != SPRITE_INDEX_NULL;) { - rct_vehicle * vehicle = GET_VEHICLE(spriteId); + rct_vehicle* vehicle = GET_VEHICLE(spriteId); vehicleCount++; - massTotal += vehicle->mass; - accelerationTotal = add_clamp_int32_t(accelerationTotal, vehicle->acceleration); + massTotal += vehicle->mass; + accelerationTotal = add_clamp_int32_t(accelerationTotal, vehicle->acceleration); spriteId = vehicle->next_vehicle_on_train; } diff --git a/src/openrct2/ride/CableLift.h b/src/openrct2/ride/CableLift.h index da860f6f9a..c8462cf301 100644 --- a/src/openrct2/ride/CableLift.h +++ b/src/openrct2/ride/CableLift.h @@ -13,8 +13,16 @@ #include "../common.h" #include "Vehicle.h" -rct_vehicle *cable_lift_segment_create(int32_t rideIndex, int32_t x, int32_t y, int32_t z, int32_t direction, uint16_t var_44, int32_t remaining_distance, bool head); -void cable_lift_update(rct_vehicle *vehicle); -int32_t cable_lift_update_track_motion(rct_vehicle *cableLift); +rct_vehicle* cable_lift_segment_create( + int32_t rideIndex, + int32_t x, + int32_t y, + int32_t z, + int32_t direction, + uint16_t var_44, + int32_t remaining_distance, + bool head); +void cable_lift_update(rct_vehicle* vehicle); +int32_t cable_lift_update_track_motion(rct_vehicle* cableLift); #endif diff --git a/src/openrct2/ride/MusicList.cpp b/src/openrct2/ride/MusicList.cpp index fe6a61baa0..5f4fb80096 100644 --- a/src/openrct2/ride/MusicList.cpp +++ b/src/openrct2/ride/MusicList.cpp @@ -7,33 +7,32 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ -#include "../audio/audio.h" -#include "../common.h" -#include "../Context.h" -#include "../core/Util.hpp" #include "MusicList.h" +#include "../Context.h" +#include "../audio/audio.h" +#include "../common.h" +#include "../core/Util.hpp" -#define MAKE_TUNEID_LIST(...) std::vector({__VA_ARGS__}) +#define MAKE_TUNEID_LIST(...) std::vector({ __VA_ARGS__ }) // 0x009AEF28 -std::vector gRideMusicStyleTuneIds[] = -{ - MAKE_TUNEID_LIST(TUNE_DODGEMS_BEAT), // MUSIC_STYLE_DODGEMS_BEAT - MAKE_TUNEID_LIST( // MUSIC_STYLE_FAIRGROUND_ORGAN - TUNE_CHILDREN_OF_THE_REGIMENT, - TUNE_SERENADE_OP_21, - TUNE_IN_CONTINENTAL_MOOD, - TUNE_WEDDING_JOURNEY, - TUNE_TALES_FROM_THE_VIENNA_WOODS, - TUNE_SLAVONIC_DANCE, - TUNE_CSS_10, - TUNE_DAS_ALPENHORN, - TUNE_BELLA_BELLA_BIMBA, - TUNE_THE_BLOND_SAILOR, - TUNE_POET_AND_PEASANT_OVERTURE, - TUNE_WALTZ_MEDLEY, - TUNE_CSS_16), +std::vector gRideMusicStyleTuneIds[] = { + MAKE_TUNEID_LIST(TUNE_DODGEMS_BEAT), // MUSIC_STYLE_DODGEMS_BEAT + MAKE_TUNEID_LIST( // MUSIC_STYLE_FAIRGROUND_ORGAN + TUNE_CHILDREN_OF_THE_REGIMENT, + TUNE_SERENADE_OP_21, + TUNE_IN_CONTINENTAL_MOOD, + TUNE_WEDDING_JOURNEY, + TUNE_TALES_FROM_THE_VIENNA_WOODS, + TUNE_SLAVONIC_DANCE, + TUNE_CSS_10, + TUNE_DAS_ALPENHORN, + TUNE_BELLA_BELLA_BIMBA, + TUNE_THE_BLOND_SAILOR, + TUNE_POET_AND_PEASANT_OVERTURE, + TUNE_WALTZ_MEDLEY, + TUNE_CSS_16), MAKE_TUNEID_LIST(TUNE_CAESARS_MARCH), // MUSIC_STYLE_ROMAN_FANFARE MAKE_TUNEID_LIST(TUNE_NINJAS_NOODLES), // MUSIC_STYLE_ORIENTAL MAKE_TUNEID_LIST(TUNE_INVADERS), // MUSIC_STYLE_MARTIAN @@ -67,54 +66,57 @@ std::vector gRideMusicStyleTuneIds[] = MAKE_TUNEID_LIST(TUNE_SWEAT_DREAMS), // MUSIC_STYLE_CANDY_STYLE }; -#define INIT_MUSIC_INFO(path_id, offset) { path_id, offset, 0 } +#define INIT_MUSIC_INFO(path_id, offset) \ + { \ + path_id, offset, 0 \ + } -//0x009AF1C8 +// 0x009AF1C8 rct_ride_music_info gRideMusicInfoList[NUM_DEFAULT_MUSIC_TRACKS] = { - INIT_MUSIC_INFO(PATH_ID_CSS4, 1378), - INIT_MUSIC_INFO(PATH_ID_CSS5, 1378), - INIT_MUSIC_INFO(PATH_ID_CSS6, 1378), - INIT_MUSIC_INFO(PATH_ID_CSS7, 1378), - INIT_MUSIC_INFO(PATH_ID_CSS8, 1378), - INIT_MUSIC_INFO(PATH_ID_CSS9, 1378), - INIT_MUSIC_INFO(0, 1378), // Referred to the nearly empty CSS10.DAT file - INIT_MUSIC_INFO(PATH_ID_CSS11, 1378), - INIT_MUSIC_INFO(PATH_ID_CSS12, 1378), - INIT_MUSIC_INFO(PATH_ID_CSS13, 1378), - INIT_MUSIC_INFO(PATH_ID_CSS14, 1378), - INIT_MUSIC_INFO(PATH_ID_CSS15, 1378), - INIT_MUSIC_INFO(0, 1378), // Referred to the nearly empty CSS16.DAT file - INIT_MUSIC_INFO(PATH_ID_CSS3, 689), - INIT_MUSIC_INFO(PATH_ID_CSS17, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS18, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS19, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS20, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS21, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS22, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS23, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS24, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS25, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS26, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS27, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS28, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS29, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS30, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS31, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS32, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS33, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS34, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS35, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS36, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS37, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS38, 2756), - INIT_MUSIC_INFO(PATH_ID_CUSTOM1, 2756), - INIT_MUSIC_INFO(PATH_ID_CUSTOM2, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS39, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS40, 1378), - INIT_MUSIC_INFO(PATH_ID_CSS41, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS42, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS43, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS44, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS45, 2756), - INIT_MUSIC_INFO(PATH_ID_CSS46, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS4, 1378), + INIT_MUSIC_INFO(PATH_ID_CSS5, 1378), + INIT_MUSIC_INFO(PATH_ID_CSS6, 1378), + INIT_MUSIC_INFO(PATH_ID_CSS7, 1378), + INIT_MUSIC_INFO(PATH_ID_CSS8, 1378), + INIT_MUSIC_INFO(PATH_ID_CSS9, 1378), + INIT_MUSIC_INFO(0, 1378), // Referred to the nearly empty CSS10.DAT file + INIT_MUSIC_INFO(PATH_ID_CSS11, 1378), + INIT_MUSIC_INFO(PATH_ID_CSS12, 1378), + INIT_MUSIC_INFO(PATH_ID_CSS13, 1378), + INIT_MUSIC_INFO(PATH_ID_CSS14, 1378), + INIT_MUSIC_INFO(PATH_ID_CSS15, 1378), + INIT_MUSIC_INFO(0, 1378), // Referred to the nearly empty CSS16.DAT file + INIT_MUSIC_INFO(PATH_ID_CSS3, 689), + INIT_MUSIC_INFO(PATH_ID_CSS17, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS18, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS19, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS20, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS21, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS22, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS23, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS24, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS25, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS26, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS27, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS28, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS29, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS30, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS31, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS32, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS33, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS34, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS35, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS36, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS37, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS38, 2756), + INIT_MUSIC_INFO(PATH_ID_CUSTOM1, 2756), + INIT_MUSIC_INFO(PATH_ID_CUSTOM2, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS39, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS40, 1378), + INIT_MUSIC_INFO(PATH_ID_CSS41, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS42, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS43, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS44, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS45, 2756), + INIT_MUSIC_INFO(PATH_ID_CSS46, 2756), }; diff --git a/src/openrct2/ride/MusicList.h b/src/openrct2/ride/MusicList.h index 3ca9d5b84d..01fd2e158e 100644 --- a/src/openrct2/ride/MusicList.h +++ b/src/openrct2/ride/MusicList.h @@ -9,58 +9,59 @@ #pragma once -#include #include "../audio/audio.h" #include "../common.h" +#include + enum { - TUNE_CHILDREN_OF_THE_REGIMENT, // 00 - TUNE_SERENADE_OP_21, // 01 - TUNE_IN_CONTINENTAL_MOOD, // 02 - TUNE_WEDDING_JOURNEY, // 03 - TUNE_TALES_FROM_THE_VIENNA_WOODS, // 04 - TUNE_SLAVONIC_DANCE, // 05 - TUNE_CSS_10, // 06, empty - TUNE_DAS_ALPENHORN, // 07 - TUNE_BELLA_BELLA_BIMBA, // 08 - TUNE_THE_BLOND_SAILOR, // 09 - TUNE_POET_AND_PEASANT_OVERTURE, // 10 - TUNE_WALTZ_MEDLEY, // 11 - TUNE_CSS_16, // 12, empty - TUNE_DODGEMS_BEAT, // 13 - TUNE_RCT2_THEME_MUSIC, // 14 - TUNE_CAESARS_MARCH, // 15 - TUNE_NINJAS_NOODLES, // 16 - TUNE_INVADERS, // 17 - TUNE_JUNGLE_JUICE, // 18 - TUNE_PHARAOHS_TOMB, // 19 - TUNE_ETERNAL_TOYBOX, // 20 - TUNE_CIRCUS_SHOW, // 21 - TUNE_VOYAGE_TO_ANDROMEDA, // 22 - TUNE_VAMPIRES_LAIR, // 23 - TUNE_BRIMBLES_BEAT, // 24 - TUNE_DRIFTING_TO_HEAVEN, // 25 - TUNE_MID_SUMMERS_HEAT, // 26 - TUNE_ATLANTIS, // 27 - TUNE_WILD_WEST_KID, // 28 - TUNE_BLOCKBUSTER, // 29 - TUNE_AIRTIME_ROCK, // 30 - TUNE_SEARCHLIGHT_RAG, // 31 - TUNE_FLIGHT_OF_FANTASY, // 32 - TUNE_BIG_ROCK, // 33 - TUNE_HYPOTHERMIA, // 34 - TUNE_LAST_SLEIGH_RIDE, // 35 - TUNE_CUSTOM_1, // 36 - TUNE_CUSTOM_2, // 37 - TUNE_PIPES_OF_GLENCAIRN, // 38 - TUNE_TRAFFIC_JAM, // 39 - TUNE_TOCCATA, // 40 - TUNE_MANIC_MECHANIC, // 41 - TUNE_TECHNO_TORTURE, // 42 - TUNE_WHAT_SHALL_WE_DO_WITH_THE_DRUNKEN_SAILOR, // 43 - TUNE_SPACE_ROCK, // 44 - TUNE_SWEAT_DREAMS, // 45, (sic) + TUNE_CHILDREN_OF_THE_REGIMENT, // 00 + TUNE_SERENADE_OP_21, // 01 + TUNE_IN_CONTINENTAL_MOOD, // 02 + TUNE_WEDDING_JOURNEY, // 03 + TUNE_TALES_FROM_THE_VIENNA_WOODS, // 04 + TUNE_SLAVONIC_DANCE, // 05 + TUNE_CSS_10, // 06, empty + TUNE_DAS_ALPENHORN, // 07 + TUNE_BELLA_BELLA_BIMBA, // 08 + TUNE_THE_BLOND_SAILOR, // 09 + TUNE_POET_AND_PEASANT_OVERTURE, // 10 + TUNE_WALTZ_MEDLEY, // 11 + TUNE_CSS_16, // 12, empty + TUNE_DODGEMS_BEAT, // 13 + TUNE_RCT2_THEME_MUSIC, // 14 + TUNE_CAESARS_MARCH, // 15 + TUNE_NINJAS_NOODLES, // 16 + TUNE_INVADERS, // 17 + TUNE_JUNGLE_JUICE, // 18 + TUNE_PHARAOHS_TOMB, // 19 + TUNE_ETERNAL_TOYBOX, // 20 + TUNE_CIRCUS_SHOW, // 21 + TUNE_VOYAGE_TO_ANDROMEDA, // 22 + TUNE_VAMPIRES_LAIR, // 23 + TUNE_BRIMBLES_BEAT, // 24 + TUNE_DRIFTING_TO_HEAVEN, // 25 + TUNE_MID_SUMMERS_HEAT, // 26 + TUNE_ATLANTIS, // 27 + TUNE_WILD_WEST_KID, // 28 + TUNE_BLOCKBUSTER, // 29 + TUNE_AIRTIME_ROCK, // 30 + TUNE_SEARCHLIGHT_RAG, // 31 + TUNE_FLIGHT_OF_FANTASY, // 32 + TUNE_BIG_ROCK, // 33 + TUNE_HYPOTHERMIA, // 34 + TUNE_LAST_SLEIGH_RIDE, // 35 + TUNE_CUSTOM_1, // 36 + TUNE_CUSTOM_2, // 37 + TUNE_PIPES_OF_GLENCAIRN, // 38 + TUNE_TRAFFIC_JAM, // 39 + TUNE_TOCCATA, // 40 + TUNE_MANIC_MECHANIC, // 41 + TUNE_TECHNO_TORTURE, // 42 + TUNE_WHAT_SHALL_WE_DO_WITH_THE_DRUNKEN_SAILOR, // 43 + TUNE_SPACE_ROCK, // 44 + TUNE_SWEAT_DREAMS, // 45, (sic) }; extern std::vector gRideMusicStyleTuneIds[]; diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index 3c553fcb81..2713b73fb7 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -7,19 +7,20 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ -#include -#include -#include +#include "Ride.h" -#include "../audio/audio.h" -#include "../audio/AudioMixer.h" #include "../Cheats.h" -#include "../common.h" -#include "../config/Config.h" #include "../Context.h" #include "../Editor.h" #include "../Game.h" #include "../Input.h" +#include "../OpenRCT2.h" +#include "../audio/AudioMixer.h" +#include "../audio/audio.h" +#include "../common.h" +#include "../config/Config.h" +#include "../core/Math.hpp" +#include "../core/Util.hpp" #include "../interface/Window.h" #include "../localisation/Date.h" #include "../localisation/Localisation.h" @@ -29,12 +30,13 @@ #include "../network/network.h" #include "../object/ObjectList.h" #include "../object/ObjectManager.h" -#include "../OpenRCT2.h" #include "../paint/VirtualFloor.h" #include "../peep/Peep.h" #include "../peep/Staff.h" #include "../rct1/RCT1.h" #include "../scenario/Scenario.h" +#include "../ui/UiContext.h" +#include "../ui/WindowManager.h" #include "../util/Util.h" #include "../windows/Intent.h" #include "../world/Banner.h" @@ -47,17 +49,16 @@ #include "../world/Sprite.h" #include "CableLift.h" #include "MusicList.h" -#include "Ride.h" #include "RideData.h" #include "RideGroupManager.h" #include "ShopItem.h" #include "Station.h" #include "Track.h" #include "TrackData.h" -#include "../core/Math.hpp" -#include "../core/Util.hpp" -#include "../ui/UiContext.h" -#include "../ui/WindowManager.h" + +#include +#include +#include using namespace OpenRCT2; @@ -137,9 +138,7 @@ uint8_t gTypeToRideEntryIndexMap[TYPE_TO_RIDE_ENTRY_SLOTS]; #pragma endregion -static constexpr const int32_t RideInspectionInterval[] = { - 10, 20, 30, 45, 60, 120, 0, 0 -}; +static constexpr const int32_t RideInspectionInterval[] = { 10, 20, 30, 45, 60, 120, 0, 0 }; Ride gRideList[MAX_RIDES]; @@ -190,7 +189,6 @@ uint8_t _currentSeatRotationAngle; LocationXYZ16 _unkF44188; - CoordsXYZD _unkF440C5; uint8_t gRideEntranceExitPlaceType; @@ -202,25 +200,25 @@ uint8_t gRideEntranceExitPlaceDirection; uint8_t gLastEntranceStyle; // Static function declarations -rct_peep *find_closest_mechanic(int32_t x, int32_t y, int32_t forInspection); +rct_peep* find_closest_mechanic(int32_t x, int32_t y, int32_t forInspection); static void ride_breakdown_status_update(int32_t rideIndex); static void ride_breakdown_update(int32_t rideIndex); static void ride_call_closest_mechanic(int32_t rideIndex); -static void ride_call_mechanic(int32_t rideIndex, rct_peep *mechanic, int32_t forInspection); -static void ride_chairlift_update(Ride *ride); +static void ride_call_mechanic(int32_t rideIndex, rct_peep* mechanic, int32_t forInspection); +static void ride_chairlift_update(Ride* ride); static void ride_entrance_exit_connected(Ride* ride, int32_t ride_idx); -static void ride_set_name_to_vehicle_default(Ride * ride, rct_ride_entry * rideEntry); -static int32_t ride_get_new_breakdown_problem(Ride *ride); -static void ride_inspection_update(Ride *ride); +static void ride_set_name_to_vehicle_default(Ride* ride, rct_ride_entry* rideEntry); +static int32_t ride_get_new_breakdown_problem(Ride* ride); +static void ride_inspection_update(Ride* ride); static void ride_mechanic_status_update(int32_t rideIndex, int32_t mechanicStatus); static void ride_music_update(int32_t rideIndex); static void ride_shop_connected(Ride* ride, int32_t ride_idx); -static void ride_spiral_slide_update(Ride *ride); +static void ride_spiral_slide_update(Ride* ride); static void ride_update(int32_t rideIndex); static void ride_update_vehicle_colours(int32_t rideIndex); -void loc_6DDF9C(Ride *ride, rct_tile_element *tileElement); +void loc_6DDF9C(Ride* ride, rct_tile_element* tileElement); -Ride *get_ride(int32_t index) +Ride* get_ride(int32_t index) { if (index < 0 || index >= MAX_RIDES) { @@ -230,22 +228,22 @@ Ride *get_ride(int32_t index) return &gRideList[index]; } -rct_ride_entry * get_ride_entry(int32_t index) +rct_ride_entry* get_ride_entry(int32_t index) { - rct_ride_entry * result = nullptr; + rct_ride_entry* result = nullptr; auto objMgr = OpenRCT2::GetContext()->GetObjectManager(); if (objMgr != nullptr) { auto obj = objMgr->GetLoadedObject(OBJECT_TYPE_RIDE, index); if (obj != nullptr) { - result = (rct_ride_entry *)obj->GetLegacyData(); + result = (rct_ride_entry*)obj->GetLegacyData(); } } return result; } -void get_ride_entry_name(char *name, int32_t index) +void get_ride_entry_name(char* name, int32_t index) { if (index < 0 || index >= object_entry_group_counts[OBJECT_TYPE_RIDE]) { @@ -258,14 +256,14 @@ void get_ride_entry_name(char *name, int32_t index) name[8] = '\0'; } -rct_ride_measurement *get_ride_measurement(int32_t index) +rct_ride_measurement* get_ride_measurement(int32_t index) { return &gRideMeasurements[index]; } -rct_ride_entry * get_ride_entry_by_ride(Ride *ride) +rct_ride_entry* get_ride_entry_by_ride(Ride* ride) { - rct_ride_entry *type = get_ride_entry(ride->subtype); + rct_ride_entry* type = get_ride_entry(ride->subtype); if (type == nullptr) { char oldname[128]; @@ -276,39 +274,41 @@ rct_ride_entry * get_ride_entry_by_ride(Ride *ride) } /** -* -* rct2: 0x006DED68 -*/ + * + * rct2: 0x006DED68 + */ void reset_type_to_ride_entry_index_map(IObjectManager& objectManager) { size_t stride = MAX_RIDE_OBJECTS + 1; - uint8_t * entryTypeTable = (uint8_t *)malloc(RIDE_TYPE_COUNT * stride); + uint8_t* entryTypeTable = (uint8_t*)malloc(RIDE_TYPE_COUNT * stride); memset(entryTypeTable, 0xFF, RIDE_TYPE_COUNT * stride); - for (uint8_t i = 0; i < MAX_RIDE_OBJECTS; i++) { - + for (uint8_t i = 0; i < MAX_RIDE_OBJECTS; i++) + { auto obj = objectManager.GetLoadedObject(OBJECT_TYPE_RIDE, i); if (obj != nullptr) { for (uint8_t j = 0; j < MAX_RIDE_TYPES_PER_RIDE_ENTRY; j++) { - auto rideEntry = (rct_ride_entry *)obj->GetLegacyData(); + auto rideEntry = (rct_ride_entry*)obj->GetLegacyData(); uint8_t rideType = rideEntry->ride_type[j]; if (rideType < RIDE_TYPE_COUNT) { - uint8_t * entryArray = &entryTypeTable[rideType * stride]; - uint8_t * nextEntry = (uint8_t *)memchr(entryArray, 0xFF, stride); + uint8_t* entryArray = &entryTypeTable[rideType * stride]; + uint8_t* nextEntry = (uint8_t*)memchr(entryArray, 0xFF, stride); *nextEntry = i; } } } } - uint8_t * dst = gTypeToRideEntryIndexMap; - for (uint8_t i = 0; i < RIDE_TYPE_COUNT; i++) { - uint8_t * entryArray = &entryTypeTable[i * stride]; - uint8_t * entry = entryArray; - while (*entry != 0xFF) { + uint8_t* dst = gTypeToRideEntryIndexMap; + for (uint8_t i = 0; i < RIDE_TYPE_COUNT; i++) + { + uint8_t* entryArray = &entryTypeTable[i * stride]; + uint8_t* entry = entryArray; + while (*entry != 0xFF) + { *dst++ = *entry++; } *dst++ = 0xFF; @@ -317,11 +317,13 @@ void reset_type_to_ride_entry_index_map(IObjectManager& objectManager) free(entryTypeTable); } -uint8_t *get_ride_entry_indices_for_ride_type(uint8_t rideType) +uint8_t* get_ride_entry_indices_for_ride_type(uint8_t rideType) { - uint8_t *entryIndexList = gTypeToRideEntryIndexMap; - while (rideType > 0) { - do { + uint8_t* entryIndexList = gTypeToRideEntryIndexMap; + while (rideType > 0) + { + do + { entryIndexList++; } while (*(entryIndexList - 1) != 255); rideType--; @@ -331,16 +333,16 @@ uint8_t *get_ride_entry_indices_for_ride_type(uint8_t rideType) int32_t ride_get_count() { - Ride *ride; + Ride* ride; int32_t i, count = 0; - FOR_ALL_RIDES(i, ride) + FOR_ALL_RIDES (i, ride) count++; return count; } -int32_t ride_get_total_queue_length(Ride *ride) +int32_t ride_get_total_queue_length(Ride* ride) { int32_t i, queueLength = 0; for (i = 0; i < MAX_STATIONS; i++) @@ -349,7 +351,7 @@ int32_t ride_get_total_queue_length(Ride *ride) return queueLength; } -int32_t ride_get_max_queue_time(Ride *ride) +int32_t ride_get_max_queue_time(Ride* ride) { uint8_t i, queueTime = 0; for (i = 0; i < MAX_STATIONS; i++) @@ -358,41 +360,46 @@ int32_t ride_get_max_queue_time(Ride *ride) return (int32_t)queueTime; } -rct_peep * ride_get_queue_head_guest(Ride * ride, int32_t stationIndex) +rct_peep* ride_get_queue_head_guest(Ride* ride, int32_t stationIndex) { - rct_peep * peep; - rct_peep * result = nullptr; + rct_peep* peep; + rct_peep* result = nullptr; uint16_t spriteIndex = ride->last_peep_in_queue[stationIndex]; - while ((peep = try_get_guest(spriteIndex)) != nullptr) { + while ((peep = try_get_guest(spriteIndex)) != nullptr) + { spriteIndex = peep->next_in_queue; result = peep; } return result; } -static void ride_update_queue_length(Ride * ride, int32_t stationIndex) +static void ride_update_queue_length(Ride* ride, int32_t stationIndex) { uint16_t count = 0; - rct_peep * peep; + rct_peep* peep; uint16_t spriteIndex = ride->last_peep_in_queue[stationIndex]; - while ((peep = try_get_guest(spriteIndex)) != nullptr) { + while ((peep = try_get_guest(spriteIndex)) != nullptr) + { spriteIndex = peep->next_in_queue; count++; } ride->queue_length[stationIndex] = count; } -void ride_queue_insert_guest_at_front(Ride * ride, int32_t stationIndex, rct_peep * peep) +void ride_queue_insert_guest_at_front(Ride* ride, int32_t stationIndex, rct_peep* peep) { assert(ride != nullptr); assert(stationIndex < MAX_STATIONS); assert(peep != nullptr); peep->next_in_queue = SPRITE_INDEX_NULL; - rct_peep * queueHeadGuest = ride_get_queue_head_guest(ride, peep->current_ride_station); - if (queueHeadGuest == nullptr) { + rct_peep* queueHeadGuest = ride_get_queue_head_guest(ride, peep->current_ride_station); + if (queueHeadGuest == nullptr) + { ride->last_peep_in_queue[peep->current_ride_station] = peep->sprite_index; - } else { + } + else + { queueHeadGuest->next_in_queue = peep->sprite_index; } ride_update_queue_length(ride, peep->current_ride_station); @@ -405,23 +412,23 @@ void ride_queue_insert_guest_at_front(Ride * ride, int32_t stationIndex, rct_pee void ride_update_favourited_stat() { int32_t i; - Ride *ride; + Ride* ride; uint16_t spriteIndex; rct_peep* peep; - FOR_ALL_RIDES(i, ride) + FOR_ALL_RIDES (i, ride) ride->guests_favourite = 0; - FOR_ALL_PEEPS(spriteIndex, peep) { + FOR_ALL_PEEPS (spriteIndex, peep) + { if (peep->linked_list_type_offset != SPRITE_LIST_PEEP * 2) return; - if (peep->favourite_ride != RIDE_ID_NULL) { + if (peep->favourite_ride != RIDE_ID_NULL) + { ride = &gRideList[peep->favourite_ride]; ride->guests_favourite++; ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_CUSTOMER; - } - } window_invalidate_by_class(WC_RIDE_LIST); @@ -431,10 +438,10 @@ void ride_update_favourited_stat() * * rct2: 0x006AC3AB */ -static money32 ride_calculate_income_per_hour(Ride *ride) +static money32 ride_calculate_income_per_hour(Ride* ride) { // Get entry by ride to provide better reporting - rct_ride_entry *entry = get_ride_entry_by_ride(ride); + rct_ride_entry* entry = get_ride_entry_by_ride(ride); if (entry == nullptr) { return 0; @@ -443,15 +450,16 @@ static money32 ride_calculate_income_per_hour(Ride *ride) money32 priceMinusCost = ride_get_price(ride); int32_t currentShopItem = entry->shop_item; - if (currentShopItem != SHOP_ITEM_NONE) { + if (currentShopItem != SHOP_ITEM_NONE) + { priceMinusCost -= get_shop_item_cost(currentShopItem); } - currentShopItem = (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? - RidePhotoItems[ride->type] : - entry->shop_item_secondary; + currentShopItem + = (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? RidePhotoItems[ride->type] : entry->shop_item_secondary; - if (currentShopItem != SHOP_ITEM_NONE) { + if (currentShopItem != SHOP_ITEM_NONE) + { priceMinusCost += ride->price_secondary; priceMinusCost -= get_shop_item_cost(currentShopItem); @@ -470,13 +478,14 @@ static money32 ride_calculate_income_per_hour(Ride *ride) * dl ride index * esi result map element */ -bool ride_try_get_origin_element(int32_t rideIndex, CoordsXYE *output) +bool ride_try_get_origin_element(int32_t rideIndex, CoordsXYE* output) { - rct_tile_element *resultTileElement = nullptr; + rct_tile_element* resultTileElement = nullptr; tile_element_iterator it; tile_element_iterator_begin(&it); - do { + do + { if (it.element->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; if (rideIndex != track_element_get_ride_index(it.element)) @@ -485,24 +494,26 @@ bool ride_try_get_origin_element(int32_t rideIndex, CoordsXYE *output) // Found a track piece for target ride // Check if it's not the station or ??? (but allow end piece of station) - bool specialTrackPiece = ( - track_element_get_type(it.element) != TRACK_ELEM_BEGIN_STATION && - track_element_get_type(it.element) != TRACK_ELEM_MIDDLE_STATION && - (TrackSequenceProperties[track_element_get_type(it.element)][0] & TRACK_SEQUENCE_FLAG_ORIGIN) - ); + bool specialTrackPiece + = (track_element_get_type(it.element) != TRACK_ELEM_BEGIN_STATION + && track_element_get_type(it.element) != TRACK_ELEM_MIDDLE_STATION + && (TrackSequenceProperties[track_element_get_type(it.element)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)); // Set result tile to this track piece if first found track or a ??? - if (resultTileElement == nullptr || specialTrackPiece) { + if (resultTileElement == nullptr || specialTrackPiece) + { resultTileElement = it.element; - if (output != nullptr) { + if (output != nullptr) + { output->element = resultTileElement; output->x = it.x * 32; output->y = it.y * 32; } } - if (specialTrackPiece) { + if (specialTrackPiece) + { return true; } } while (tile_element_iterator_next(&it)); @@ -511,30 +522,42 @@ bool ride_try_get_origin_element(int32_t rideIndex, CoordsXYE *output) } /** -* -* rct2: 0x006C6096 -* Gets the next track block coordinates from the -* coordinates of the first of element of a track block. -* Use track_block_get_next if you are unsure if you are -* on the first element of a track block -*/ -bool track_block_get_next_from_zero(int16_t x, int16_t y, int16_t z_start, uint8_t rideIndex, uint8_t direction_start, CoordsXYE *output, int32_t *z, int32_t *direction, bool isGhost) + * + * rct2: 0x006C6096 + * Gets the next track block coordinates from the + * coordinates of the first of element of a track block. + * Use track_block_get_next if you are unsure if you are + * on the first element of a track block + */ +bool track_block_get_next_from_zero( + int16_t x, + int16_t y, + int16_t z_start, + uint8_t rideIndex, + uint8_t direction_start, + CoordsXYE* output, + int32_t* z, + int32_t* direction, + bool isGhost) { Ride* ride = get_ride(rideIndex); - if (!(direction_start & (1 << 2))){ + if (!(direction_start & (1 << 2))) + { x += CoordsDirectionDelta[direction_start].x; y += CoordsDirectionDelta[direction_start].y; } rct_tile_element* tileElement = map_get_first_element_at(x / 32, y / 32); - if (tileElement == nullptr){ + if (tileElement == nullptr) + { output->element = nullptr; output->x = LOCATION_NULL; return false; } - do{ + do + { if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; @@ -550,9 +573,8 @@ bool track_block_get_next_from_zero(int16_t x, int16_t y, int16_t z_start, uint8 const rct_preview_track* nextTrackBlock = get_track_def_from_ride(ride, track_element_get_type(tileElement)); const rct_track_coordinates* nextTrackCoordinate = get_track_coord_from_ride(ride, track_element_get_type(tileElement)); - uint8_t nextRotation = - tile_element_get_direction_with_offset(tileElement, nextTrackCoordinate->rotation_begin) | - (nextTrackCoordinate->rotation_begin & (1 << 2)); + uint8_t nextRotation = tile_element_get_direction_with_offset(tileElement, nextTrackCoordinate->rotation_begin) + | (nextTrackCoordinate->rotation_begin & (1 << 2)); if (nextRotation != direction_start) continue; @@ -561,16 +583,20 @@ bool track_block_get_next_from_zero(int16_t x, int16_t y, int16_t z_start, uint8 if (nextZ != z_start) continue; - if (z != nullptr) *z = tileElement->base_height * 8; - if (direction != nullptr) *direction = nextRotation; + if (z != nullptr) + *z = tileElement->base_height * 8; + if (direction != nullptr) + *direction = nextRotation; output->x = x; output->y = y; output->element = tileElement; return true; } while (!(tileElement++)->IsLastForTile()); - if (direction != nullptr) *direction = direction_start; - if (z != nullptr) *z = z_start; + if (direction != nullptr) + *direction = direction_start; + if (z != nullptr) + *z = z_start; output->x = x; output->y = y; output->element = --tileElement; @@ -581,7 +607,7 @@ bool track_block_get_next_from_zero(int16_t x, int16_t y, int16_t z_start, uint8 * * rct2: 0x006C60C2 */ -bool track_block_get_next(CoordsXYE *input, CoordsXYE *output, int32_t *z, int32_t *direction) +bool track_block_get_next(CoordsXYE* input, CoordsXYE* output, int32_t* z, int32_t* direction) { uint8_t rideIndex = track_element_get_ride_index(input->element); Ride* ride = get_ride(rideIndex); @@ -597,38 +623,39 @@ bool track_block_get_next(CoordsXYE *input, CoordsXYE *output, int32_t *z, int32 int32_t OriginZ = input->element->base_height * 8; uint8_t rotation = tile_element_get_direction(input->element); - switch (rotation){ - case 0: - x += trackCoordinate->x; - x -= trackBlock->x; - y += trackCoordinate->y; - y -= trackBlock->y; - break; - case 1: - x += trackCoordinate->y; - x -= trackBlock->y; - y -= trackCoordinate->x; - y += trackBlock->x; - break; - case 2: - x -= trackCoordinate->x; - x += trackBlock->x; - y -= trackCoordinate->y; - y += trackBlock->y; - break; - case 3: - x -= trackCoordinate->y; - x += trackBlock->y; - y += trackCoordinate->x; - y -= trackBlock->x; - break; + switch (rotation) + { + case 0: + x += trackCoordinate->x; + x -= trackBlock->x; + y += trackCoordinate->y; + y -= trackBlock->y; + break; + case 1: + x += trackCoordinate->y; + x -= trackBlock->y; + y -= trackCoordinate->x; + y += trackBlock->x; + break; + case 2: + x -= trackCoordinate->x; + x += trackBlock->x; + y -= trackCoordinate->y; + y += trackBlock->y; + break; + case 3: + x -= trackCoordinate->y; + x += trackBlock->y; + y += trackCoordinate->x; + y -= trackBlock->x; + break; } OriginZ -= trackBlock->z; OriginZ += trackCoordinate->z_end; - uint8_t directionStart = ((trackCoordinate->rotation_end + rotation) & TILE_ELEMENT_DIRECTION_MASK) | - (trackCoordinate->rotation_end & (1 << 2)); + uint8_t directionStart = ((trackCoordinate->rotation_end + rotation) & TILE_ELEMENT_DIRECTION_MASK) + | (trackCoordinate->rotation_end & (1 << 2)); return track_block_get_next_from_zero(x, y, OriginZ, rideIndex, directionStart, output, z, direction, false); } @@ -641,19 +668,23 @@ bool track_block_get_next(CoordsXYE *input, CoordsXYE *output, int32_t *z, int32 * element of a track block * rct2: 0x006C63D6 */ -bool track_block_get_previous_from_zero(int16_t x, int16_t y, int16_t z, uint8_t rideIndex, uint8_t direction, track_begin_end *outTrackBeginEnd){ +bool track_block_get_previous_from_zero( + int16_t x, int16_t y, int16_t z, uint8_t rideIndex, uint8_t direction, track_begin_end* outTrackBeginEnd) +{ Ride* ride = get_ride(rideIndex); uint8_t directionStart = direction; direction ^= (1 << 1); - if (!(direction & (1 << 2))){ + if (!(direction & (1 << 2))) + { x += CoordsDirectionDelta[direction].x; y += CoordsDirectionDelta[direction].y; } rct_tile_element* tileElement = map_get_first_element_at(x / 32, y / 32); - if (tileElement == nullptr){ + if (tileElement == nullptr) + { outTrackBeginEnd->end_x = x; outTrackBeginEnd->end_y = y; outTrackBeginEnd->begin_element = nullptr; @@ -661,7 +692,8 @@ bool track_block_get_previous_from_zero(int16_t x, int16_t y, int16_t z, uint8_t return 0; } - do{ + do + { if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; @@ -675,9 +707,8 @@ bool track_block_get_previous_from_zero(int16_t x, int16_t y, int16_t z, uint8_t if ((nextTrackBlock + 1)->index != 255) continue; - uint8_t nextRotation = - tile_element_get_direction_with_offset(tileElement, nextTrackCoordinate->rotation_end) | - (nextTrackCoordinate->rotation_end & (1 << 2)); + uint8_t nextRotation = tile_element_get_direction_with_offset(tileElement, nextTrackCoordinate->rotation_end) + | (nextTrackCoordinate->rotation_end & (1 << 2)); if (nextRotation != directionStart) continue; @@ -686,37 +717,35 @@ bool track_block_get_previous_from_zero(int16_t x, int16_t y, int16_t z, uint8_t if (nextZ != z) continue; - nextRotation = - tile_element_get_direction_with_offset(tileElement, nextTrackCoordinate->rotation_begin) | - (nextTrackCoordinate->rotation_begin & (1 << 2)); + nextRotation = tile_element_get_direction_with_offset(tileElement, nextTrackCoordinate->rotation_begin) + | (nextTrackCoordinate->rotation_begin & (1 << 2)); outTrackBeginEnd->begin_element = tileElement; outTrackBeginEnd->begin_x = x; outTrackBeginEnd->begin_y = y; outTrackBeginEnd->end_x = x; outTrackBeginEnd->end_y = y; - switch (nextRotation & 3){ - case 0: - outTrackBeginEnd->begin_x -= nextTrackCoordinate->x; - outTrackBeginEnd->begin_y -= nextTrackCoordinate->y; - break; - case 1: - outTrackBeginEnd->begin_x -= nextTrackCoordinate->y; - outTrackBeginEnd->begin_y += nextTrackCoordinate->x; - break; - case 2: - outTrackBeginEnd->begin_x += nextTrackCoordinate->x; - outTrackBeginEnd->begin_y += nextTrackCoordinate->y; - break; - case 3: - outTrackBeginEnd->begin_x += nextTrackCoordinate->y; - outTrackBeginEnd->begin_y -= nextTrackCoordinate->x; - break; + switch (nextRotation & 3) + { + case 0: + outTrackBeginEnd->begin_x -= nextTrackCoordinate->x; + outTrackBeginEnd->begin_y -= nextTrackCoordinate->y; + break; + case 1: + outTrackBeginEnd->begin_x -= nextTrackCoordinate->y; + outTrackBeginEnd->begin_y += nextTrackCoordinate->x; + break; + case 2: + outTrackBeginEnd->begin_x += nextTrackCoordinate->x; + outTrackBeginEnd->begin_y += nextTrackCoordinate->y; + break; + case 3: + outTrackBeginEnd->begin_x += nextTrackCoordinate->y; + outTrackBeginEnd->begin_y -= nextTrackCoordinate->x; + break; } outTrackBeginEnd->begin_z = tileElement->base_height * 8; - outTrackBeginEnd->begin_z += - get_track_def_from_ride(ride, track_element_get_type(tileElement))->z - - nextTrackBlock->z; + outTrackBeginEnd->begin_z += get_track_def_from_ride(ride, track_element_get_type(tileElement))->z - nextTrackBlock->z; outTrackBeginEnd->begin_direction = nextRotation; outTrackBeginEnd->end_direction = directionStart ^ (1 << 1); @@ -739,7 +768,7 @@ bool track_block_get_previous_from_zero(int16_t x, int16_t y, int16_t z, uint8_t * higher two bytes of ecx and edx where as outTrackBeginEnd.end_x and * outTrackBeginEnd.end_y will be in the lower two bytes (cx and dx). */ -bool track_block_get_previous(int32_t x, int32_t y, rct_tile_element *tileElement, track_begin_end *outTrackBeginEnd) +bool track_block_get_previous(int32_t x, int32_t y, rct_tile_element* tileElement, track_begin_end* outTrackBeginEnd) { uint8_t rideIndex = track_element_get_ride_index(tileElement); Ride* ride = get_ride(rideIndex); @@ -753,31 +782,31 @@ bool track_block_get_previous(int32_t x, int32_t y, rct_tile_element *tileElemen int32_t z = tileElement->base_height * 8; uint8_t rotation = tile_element_get_direction(tileElement); - switch (rotation){ - case 0: - x -= trackBlock->x; - y -= trackBlock->y; - break; - case 1: - x -= trackBlock->y; - y += trackBlock->x; - break; - case 2: - x += trackBlock->x; - y += trackBlock->y; - break; - case 3: - x += trackBlock->y; - y -= trackBlock->x; - break; + switch (rotation) + { + case 0: + x -= trackBlock->x; + y -= trackBlock->y; + break; + case 1: + x -= trackBlock->y; + y += trackBlock->x; + break; + case 2: + x += trackBlock->x; + y += trackBlock->y; + break; + case 3: + x += trackBlock->y; + y -= trackBlock->x; + break; } z -= trackBlock->z; z += trackCoordinate->z_begin; - rotation = - ((trackCoordinate->rotation_begin + rotation) & TILE_ELEMENT_DIRECTION_MASK) | - (trackCoordinate->rotation_begin & (1 << 2)); + rotation = ((trackCoordinate->rotation_begin + rotation) & TILE_ELEMENT_DIRECTION_MASK) + | (trackCoordinate->rotation_begin & (1 << 2)); return track_block_get_previous_from_zero(x, y, z, rideIndex, rotation, outTrackBeginEnd); } @@ -790,7 +819,7 @@ bool track_block_get_previous(int32_t x, int32_t y, rct_tile_element *tileElemen * bx result y * esi input / output map element */ -int32_t ride_find_track_gap(CoordsXYE *input, CoordsXYE *output) +int32_t ride_find_track_gap(CoordsXYE* input, CoordsXYE* output) { assert(input->element->GetType() == TILE_ELEMENT_TYPE_TRACK); int32_t rideIndex = track_element_get_ride_index(input->element); @@ -807,8 +836,10 @@ int32_t ride_find_track_gap(CoordsXYE *input, CoordsXYE *output) track_circuit_iterator it = {}; track_circuit_iterator_begin(&it, *input); track_circuit_iterator slowIt = it; - while (track_circuit_iterator_next(&it)) { - if (!track_is_connected_by_shape(it.last.element, it.current.element)) { + while (track_circuit_iterator_next(&it)) + { + if (!track_is_connected_by_shape(it.last.element, it.current.element)) + { *output = it.current; return 1; } @@ -823,9 +854,9 @@ int32_t ride_find_track_gap(CoordsXYE *input, CoordsXYE *output) return 1; } } - } - if (!it.looped) { + if (!it.looped) + { *output = it.last; return 1; } @@ -837,60 +868,77 @@ int32_t ride_find_track_gap(CoordsXYE *input, CoordsXYE *output) * * rct2: 0x006AF561 */ -void ride_get_status(int32_t rideIndex, rct_string_id *formatSecondary, int32_t *argument) +void ride_get_status(int32_t rideIndex, rct_string_id* formatSecondary, int32_t* argument) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); - if (ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED) { + if (ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED) + { *formatSecondary = STR_CRASHED; return; } - if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) { + if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) + { *formatSecondary = STR_BROKEN_DOWN; return; } - if (ride->status == RIDE_STATUS_CLOSED) { + if (ride->status == RIDE_STATUS_CLOSED) + { *formatSecondary = STR_CLOSED; - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) { + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) + { *argument = ride->num_riders; - if (*argument == 1) { + if (*argument == 1) + { *formatSecondary = STR_CLOSED_WITH_PERSON; - } else if (*argument > 1) { + } + else if (*argument > 1) + { *formatSecondary = STR_CLOSED_WITH_PEOPLE; } } return; } - if (ride->status == RIDE_STATUS_TESTING) { + if (ride->status == RIDE_STATUS_TESTING) + { *formatSecondary = STR_TEST_RUN; return; } - if (ride->mode == RIDE_MODE_RACE && !(ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) && ride->race_winner != SPRITE_INDEX_NULL && (GET_PEEP(ride->race_winner))->sprite_identifier == SPRITE_IDENTIFIER_PEEP) { - rct_peep *peep = GET_PEEP(ride->race_winner); - if (peep->name_string_idx == STR_GUEST_X) { + if (ride->mode == RIDE_MODE_RACE && !(ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) + && ride->race_winner != SPRITE_INDEX_NULL && (GET_PEEP(ride->race_winner))->sprite_identifier == SPRITE_IDENTIFIER_PEEP) + { + rct_peep* peep = GET_PEEP(ride->race_winner); + if (peep->name_string_idx == STR_GUEST_X) + { *argument = peep->id; *formatSecondary = STR_RACE_WON_BY_GUEST; - } else { + } + else + { *argument = peep->name_string_idx; *formatSecondary = STR_RACE_WON_BY; } - } else { - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) { + } + else + { + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) + { *argument = ride->num_riders; *formatSecondary = STR_PERSON_ON_RIDE; if (*argument != 1) *formatSecondary = STR_PEOPLE_ON_RIDE; - - } else { + } + else + { *formatSecondary = STR_OPEN; } } } -int32_t ride_get_total_length(Ride *ride) +int32_t ride_get_total_length(Ride* ride) { int32_t i, totalLength = 0; for (i = 0; i < ride->num_stations; i++) @@ -898,7 +946,7 @@ int32_t ride_get_total_length(Ride *ride) return totalLength; } -int32_t ride_get_total_time(Ride *ride) +int32_t ride_get_total_time(Ride* ride) { int32_t i, totalTime = 0; for (i = 0; i < ride->num_stations; i++) @@ -906,17 +954,15 @@ int32_t ride_get_total_time(Ride *ride) return totalTime; } -int32_t ride_can_have_multiple_circuits(Ride *ride) +int32_t ride_can_have_multiple_circuits(Ride* ride) { if (!(RideData4[ride->type].flags & RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS)) return 0; // Only allow circuit or launch modes - if ( - ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT && - ride->mode != RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE && - ride->mode != RIDE_MODE_POWERED_LAUNCH_PASSTROUGH - ) { + if (ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT && ride->mode != RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE + && ride->mode != RIDE_MODE_POWERED_LAUNCH_PASSTROUGH) + { return 0; } @@ -935,27 +981,29 @@ int32_t ride_can_have_multiple_circuits(Ride *ride) */ void ride_init_all() { - for (int32_t i = 0; i < MAX_RIDES; i++) { - Ride *ride = get_ride(i); + for (int32_t i = 0; i < MAX_RIDES; i++) + { + Ride* ride = get_ride(i); ride->type = RIDE_TYPE_NULL; } - for (int32_t i = 0; i < MAX_RIDE_MEASUREMENTS; i++) { - rct_ride_measurement *ride_measurement = get_ride_measurement(i); + for (int32_t i = 0; i < MAX_RIDE_MEASUREMENTS; i++) + { + rct_ride_measurement* ride_measurement = get_ride_measurement(i); ride_measurement->ride_index = 255; } } /** -* -* rct2: 0x006B7A38 -*/ + * + * rct2: 0x006B7A38 + */ void reset_all_ride_build_dates() { int32_t i; - Ride *ride; + Ride* ride; - FOR_ALL_RIDES(i, ride) + FOR_ALL_RIDES (i, ride) ride->build_date -= gDateMonthsElapsed; } @@ -963,21 +1011,24 @@ void reset_all_ride_build_dates() #pragma region Construction -static int32_t ride_check_if_construction_allowed(Ride *ride) +static int32_t ride_check_if_construction_allowed(Ride* ride) { - rct_ride_entry * rideEntry = get_ride_entry_by_ride(ride); - if (rideEntry == nullptr) { + rct_ride_entry* rideEntry = get_ride_entry_by_ride(ride); + if (rideEntry == nullptr) + { context_show_error(STR_INVALID_RIDE_TYPE, STR_CANT_EDIT_INVALID_RIDE_TYPE); return 0; } - if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) { + if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) + { set_format_arg(6, rct_string_id, ride->name); set_format_arg(8, uint32_t, ride->name_arguments); context_show_error(STR_CANT_START_CONSTRUCTION_ON, STR_HAS_BROKEN_DOWN_AND_REQUIRES_FIXING); return 0; } - if (ride->status != RIDE_STATUS_CLOSED) { + if (ride->status != RIDE_STATUS_CLOSED) + { set_format_arg(6, rct_string_id, ride->name); set_format_arg(8, uint32_t, ride->name_arguments); context_show_error(STR_CANT_START_CONSTRUCTION_ON, STR_MUST_BE_CLOSED_FIRST); @@ -987,7 +1038,7 @@ static int32_t ride_check_if_construction_allowed(Ride *ride) return 1; } -static rct_window *ride_create_or_find_construction_window(int32_t rideIndex) +static rct_window* ride_create_or_find_construction_window(int32_t rideIndex) { auto windowManager = GetContext()->GetUiContext()->GetWindowManager(); auto intent = Intent(INTENT_ACTION_RIDE_CONSTRUCTION_FOCUS); @@ -1004,13 +1055,16 @@ void ride_construct(int32_t rideIndex) { CoordsXYE trackElement; - if (ride_try_get_origin_element(rideIndex, &trackElement)) { + if (ride_try_get_origin_element(rideIndex, &trackElement)) + { ride_find_track_gap(&trackElement, &trackElement); - rct_window *w = window_get_main(); + rct_window* w = window_get_main(); if (w != nullptr && ride_modify(&trackElement)) window_scroll_to_location(w, trackElement.x, trackElement.y, trackElement.element->base_height * 8); - } else { + } + else + { ride_initialise_construction_window(rideIndex); } } @@ -1019,13 +1073,15 @@ void ride_construct(int32_t rideIndex) * * rct2: 0x006DD4D5 */ -static void ride_remove_cable_lift(Ride *ride) +static void ride_remove_cable_lift(Ride* ride) { - if (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT) { + if (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT) + { ride->lifecycle_flags &= ~RIDE_LIFECYCLE_CABLE_LIFT; uint16_t spriteIndex = ride->cable_lift; - do { - rct_vehicle *vehicle = GET_VEHICLE(spriteIndex); + do + { + rct_vehicle* vehicle = GET_VEHICLE(spriteIndex); invalidate_sprite_2((rct_sprite*)vehicle); sprite_remove((rct_sprite*)vehicle); spriteIndex = vehicle->next_vehicle_on_train; @@ -1037,16 +1093,19 @@ static void ride_remove_cable_lift(Ride *ride) * * rct2: 0x006DD506 */ -static void ride_remove_vehicles(Ride *ride) +static void ride_remove_vehicles(Ride* ride) { - if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK) { + if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK) + { ride->lifecycle_flags &= ~RIDE_LIFECYCLE_ON_TRACK; ride->lifecycle_flags &= ~(RIDE_LIFECYCLE_TEST_IN_PROGRESS | RIDE_LIFECYCLE_HAS_STALLED_VEHICLE); - for (size_t i = 0; i < MAX_VEHICLES_PER_RIDE; i++) { + for (size_t i = 0; i < MAX_VEHICLES_PER_RIDE; i++) + { uint16_t spriteIndex = ride->vehicles[i]; - while (spriteIndex != SPRITE_INDEX_NULL) { - rct_vehicle *vehicle = GET_VEHICLE(spriteIndex); + while (spriteIndex != SPRITE_INDEX_NULL) + { + rct_vehicle* vehicle = GET_VEHICLE(spriteIndex); invalidate_sprite_2((rct_sprite*)vehicle); sprite_remove((rct_sprite*)vehicle); spriteIndex = vehicle->next_vehicle_on_train; @@ -1066,8 +1125,8 @@ static void ride_remove_vehicles(Ride *ride) */ void ride_clear_for_construction(int32_t rideIndex) { - Ride *ride; - rct_window *w; + Ride* ride; + rct_window* w; ride = get_ride(rideIndex); @@ -1079,7 +1138,8 @@ void ride_clear_for_construction(int32_t rideIndex) // Open circuit rides will go directly into building mode (creating ghosts) where it would normally clear the stats, // however this causes desyncs since it's directly run from the window and other clients would not get it. // To prevent these problems, unconditionally invalidate the test results on all clients in multiplayer games. - if (network_get_mode() != NETWORK_MODE_NONE) { + if (network_get_mode() != NETWORK_MODE_NONE) + { invalidate_test_results(rideIndex); } @@ -1098,7 +1158,7 @@ void ride_clear_for_construction(int32_t rideIndex) */ void ride_remove_peeps(int32_t rideIndex) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); // Find first station int8_t stationIndex = ride_get_first_valid_station_start(ride); @@ -1108,9 +1168,11 @@ void ride_remove_peeps(int32_t rideIndex) int32_t exitY = 0; int32_t exitZ = 0; int32_t exitDirection = 255; - if (stationIndex != -1) { + if (stationIndex != -1) + { TileCoordsXYZD location = ride_get_exit_location(ride, stationIndex); - if (!location.isNull()) { + if (!location.isNull()) + { exitX = location.x; exitY = location.y; exitZ = location.z; @@ -1129,14 +1191,12 @@ void ride_remove_peeps(int32_t rideIndex) // Place all the peeps at exit uint16_t spriteIndex; - rct_peep *peep; - FOR_ALL_PEEPS(spriteIndex, peep) { - if ( - peep->state == PEEP_STATE_QUEUING_FRONT || - peep->state == PEEP_STATE_ENTERING_RIDE || - peep->state == PEEP_STATE_LEAVING_RIDE || - peep->state == PEEP_STATE_ON_RIDE - ) { + rct_peep* peep; + FOR_ALL_PEEPS (spriteIndex, peep) + { + if (peep->state == PEEP_STATE_QUEUING_FRONT || peep->state == PEEP_STATE_ENTERING_RIDE + || peep->state == PEEP_STATE_LEAVING_RIDE || peep->state == PEEP_STATE_ON_RIDE) + { if (peep->current_ride != rideIndex) continue; @@ -1146,7 +1206,8 @@ void ride_remove_peeps(int32_t rideIndex) peep->Invalidate(); - if (exitDirection == 255) { + if (exitDirection == 255) + { int32_t x = peep->next_x + 16; int32_t y = peep->next_y + 16; int32_t z = peep->next_z * 8; @@ -1154,7 +1215,9 @@ void ride_remove_peeps(int32_t rideIndex) z += 8; z++; sprite_move(x, y, z, (rct_sprite*)peep); - } else { + } + else + { sprite_move(exitX, exitY, exitZ, (rct_sprite*)peep); peep->sprite_direction = exitDirection; } @@ -1185,8 +1248,7 @@ void ride_clear_blocked_tiles(int32_t rideIndex) { do { - if (element->GetType() == TILE_ELEMENT_TYPE_TRACK && - element->properties.track.ride_index == rideIndex) + if (element->GetType() == TILE_ELEMENT_TYPE_TRACK && element->properties.track.ride_index == rideIndex) { // Unblock footpath element that is at same position auto footpathElement = map_get_footpath_element(x, y, element->base_height); @@ -1195,8 +1257,7 @@ void ride_clear_blocked_tiles(int32_t rideIndex) footpathElement->flags &= ~TILE_ELEMENT_FLAG_BLOCKED_BY_VEHICLE; } } - } - while (!(element++)->IsLastForTile()); + } while (!(element++)->IsLastForTile()); } } } @@ -1213,12 +1274,21 @@ void ride_clear_blocked_tiles(int32_t rideIndex) * di : output_element * bp : flags */ -int32_t sub_6C683D(int32_t* x, int32_t* y, int32_t* z, int32_t direction, int32_t type, uint16_t extra_params, rct_tile_element** output_element, uint16_t flags) +int32_t sub_6C683D( + int32_t* x, + int32_t* y, + int32_t* z, + int32_t direction, + int32_t type, + uint16_t extra_params, + rct_tile_element** output_element, + uint16_t flags) { - rct_tile_element *tileElement = map_get_first_element_at(*x / 32, *y / 32); - rct_tile_element *successTileElement = nullptr; + rct_tile_element* tileElement = map_get_first_element_at(*x / 32, *y / 32); + rct_tile_element* successTileElement = nullptr; - do { + do + { if (tileElement->base_height != *z / 8) continue; @@ -1241,52 +1311,55 @@ int32_t sub_6C683D(int32_t* x, int32_t* y, int32_t* z, int32_t direction, int32_ return 1; // Possibly z should be & 0xF8 - const rct_preview_track * trackBlock = get_track_def_from_ride_index(track_element_get_ride_index(tileElement), type); + const rct_preview_track* trackBlock = get_track_def_from_ride_index(track_element_get_ride_index(tileElement), type); int32_t sequence = tile_element_get_track_sequence(tileElement); uint8_t mapDirection = tile_element_get_direction(tileElement); - switch (mapDirection){ - case TILE_ELEMENT_DIRECTION_WEST: - *x -= trackBlock[sequence].x; - *y -= trackBlock[sequence].y; - break; - case TILE_ELEMENT_DIRECTION_NORTH: - *x -= trackBlock[sequence].y; - *y += trackBlock[sequence].x; - break; - case TILE_ELEMENT_DIRECTION_EAST: - *x += trackBlock[sequence].x; - *y += trackBlock[sequence].y; - break; - case TILE_ELEMENT_DIRECTION_SOUTH: - *x += trackBlock[sequence].y; - *y -= trackBlock[sequence].x; - break; + switch (mapDirection) + { + case TILE_ELEMENT_DIRECTION_WEST: + *x -= trackBlock[sequence].x; + *y -= trackBlock[sequence].y; + break; + case TILE_ELEMENT_DIRECTION_NORTH: + *x -= trackBlock[sequence].y; + *y += trackBlock[sequence].x; + break; + case TILE_ELEMENT_DIRECTION_EAST: + *x += trackBlock[sequence].x; + *y += trackBlock[sequence].y; + break; + case TILE_ELEMENT_DIRECTION_SOUTH: + *x += trackBlock[sequence].y; + *y -= trackBlock[sequence].x; + break; } *z -= trackBlock[sequence].z; int32_t start_x = *x, start_y = *y, start_z = *z; *z += trackBlock[0].z; - for (int32_t i = 0; trackBlock[i].index != 0xFF; ++i){ + for (int32_t i = 0; trackBlock[i].index != 0xFF; ++i) + { int32_t cur_x = start_x, cur_y = start_y, cur_z = start_z; - switch (mapDirection){ - case TILE_ELEMENT_DIRECTION_WEST: - cur_x += trackBlock[i].x; - cur_y += trackBlock[i].y; - break; - case TILE_ELEMENT_DIRECTION_NORTH: - cur_x += trackBlock[i].y; - cur_y -= trackBlock[i].x; - break; - case TILE_ELEMENT_DIRECTION_EAST: - cur_x -= trackBlock[i].x; - cur_y -= trackBlock[i].y; - break; - case TILE_ELEMENT_DIRECTION_SOUTH: - cur_x -= trackBlock[i].y; - cur_y += trackBlock[i].x; - break; + switch (mapDirection) + { + case TILE_ELEMENT_DIRECTION_WEST: + cur_x += trackBlock[i].x; + cur_y += trackBlock[i].y; + break; + case TILE_ELEMENT_DIRECTION_NORTH: + cur_x += trackBlock[i].y; + cur_y -= trackBlock[i].x; + break; + case TILE_ELEMENT_DIRECTION_EAST: + cur_x -= trackBlock[i].x; + cur_y -= trackBlock[i].y; + break; + case TILE_ELEMENT_DIRECTION_SOUTH: + cur_x -= trackBlock[i].y; + cur_y += trackBlock[i].x; + break; } cur_z += trackBlock[i].z; @@ -1294,7 +1367,8 @@ int32_t sub_6C683D(int32_t* x, int32_t* y, int32_t* z, int32_t direction, int32_ tileElement = map_get_first_element_at(cur_x / 32, cur_y / 32); successTileElement = nullptr; - do { + do + { if (tileElement->base_height != cur_z / 8) continue; @@ -1307,12 +1381,12 @@ int32_t sub_6C683D(int32_t* x, int32_t* y, int32_t* z, int32_t direction, int32_ if (tile_element_get_track_sequence(tileElement) != trackBlock[i].index) continue; - if (type == track_element_get_type(tileElement)) { + if (type == track_element_get_type(tileElement)) + { successTileElement = tileElement; break; } - } - while (!(tileElement++)->IsLastForTile()); + } while (!(tileElement++)->IsLastForTile()); if (successTileElement == nullptr) { @@ -1339,7 +1413,8 @@ int32_t sub_6C683D(int32_t* x, int32_t* y, int32_t* z, int32_t direction, int32_ track_element_set_seat_rotation(tileElement, (uint8_t)(extra_params & 0xFF)); } - if (flags & (1 << 3)) { + if (flags & (1 << 3)) + { track_element_set_cable_lift(tileElement); } if (flags & (1 << 4)) @@ -1353,12 +1428,18 @@ int32_t sub_6C683D(int32_t* x, int32_t* y, int32_t* z, int32_t direction, int32_ void ride_restore_provisional_track_piece() { - if (_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_TRACK) { + if (_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_TRACK) + { int32_t x, y, z, direction, type, rideIndex, liftHillAndAlternativeState; - if (window_ride_construction_update_state(&type, &direction, &rideIndex, &liftHillAndAlternativeState, &x, &y, &z, nullptr)) { + if (window_ride_construction_update_state( + &type, &direction, &rideIndex, &liftHillAndAlternativeState, &x, &y, &z, nullptr)) + { ride_construction_remove_ghosts(); - } else { - _currentTrackPrice = place_provisional_track_piece(rideIndex, type, direction, liftHillAndAlternativeState, x, y, z); + } + else + { + _currentTrackPrice + = place_provisional_track_piece(rideIndex, type, direction, liftHillAndAlternativeState, x, y, z); window_ride_construction_update_active_elements(); } } @@ -1366,10 +1447,11 @@ void ride_restore_provisional_track_piece() void ride_remove_provisional_track_piece() { - if (!(_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_TRACK)) { + if (!(_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_TRACK)) + { return; } - Ride *ride; + Ride* ride; int32_t rideIndex, x, y, z, direction; rideIndex = _currentRideIndex; @@ -1381,7 +1463,8 @@ void ride_remove_provisional_track_piece() ride = get_ride(rideIndex); if (ride->type == RIDE_TYPE_MAZE) { - int32_t flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 | GAME_COMMAND_FLAG_GHOST; + int32_t flags + = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 | GAME_COMMAND_FLAG_GHOST; maze_set_track(x, y, z, flags, false, 0, rideIndex, GC_SET_MAZE_TRACK_FILL); maze_set_track(x, y + 16, z, flags, false, 1, rideIndex, GC_SET_MAZE_TRACK_FILL); maze_set_track(x + 16, y + 16, z, flags, false, 2, rideIndex, GC_SET_MAZE_TRACK_FILL); @@ -1390,13 +1473,16 @@ void ride_remove_provisional_track_piece() else { direction = _unkF440C5.direction; - if (!(direction & 4)) { + if (!(direction & 4)) + { x -= CoordsDirectionDelta[direction].x; y -= CoordsDirectionDelta[direction].y; } CoordsXYE next_track; - if (track_block_get_next_from_zero(x, y, z, rideIndex, direction, &next_track, &z, &direction, true)) { - int32_t flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 | GAME_COMMAND_FLAG_GHOST; + if (track_block_get_next_from_zero(x, y, z, rideIndex, direction, &next_track, &z, &direction, true)) + { + int32_t flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 + | GAME_COMMAND_FLAG_GHOST; uint8_t trackType = track_element_get_type(next_track.element); int32_t trackSequence = tile_element_get_track_sequence(next_track.element); game_do_command( @@ -1406,8 +1492,7 @@ void ride_remove_provisional_track_piece() trackType | (trackSequence << 8), GAME_COMMAND_REMOVE_TRACK, z, - 0 - ); + 0); } } } @@ -1418,58 +1503,51 @@ void ride_remove_provisional_track_piece() */ void ride_construction_remove_ghosts() { - if (_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_ENTRANCE_OR_EXIT) { + if (_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_ENTRANCE_OR_EXIT) + { ride_entrance_exit_remove_ghost(); _currentTrackSelectionFlags &= ~TRACK_SELECTION_FLAG_ENTRANCE_OR_EXIT; } - if (_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_TRACK) { + if (_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_TRACK) + { ride_remove_provisional_track_piece(); _currentTrackSelectionFlags &= ~TRACK_SELECTION_FLAG_TRACK; } } /* -* rct2: 0x006C9627 -*/ + * rct2: 0x006C9627 + */ void ride_construction_invalidate_current_track() { int32_t x, y, z; - switch (_rideConstructionState) { - case RIDE_CONSTRUCTION_STATE_SELECTED: - x = _currentTrackBeginX; - y = _currentTrackBeginY; - z = _currentTrackBeginZ; - sub_6C683D( - &x, - &y, - &z, - _currentTrackPieceDirection & 3, - _currentTrackPieceType, - 0, - nullptr, - 1 - ); - break; - case RIDE_CONSTRUCTION_STATE_MAZE_BUILD: - case RIDE_CONSTRUCTION_STATE_MAZE_MOVE: - case RIDE_CONSTRUCTION_STATE_MAZE_FILL: - if (_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_ARROW) { - map_invalidate_tile_full( - _currentTrackBeginX & 0xFFE0, - _currentTrackBeginY & 0xFFE0 - ); - gMapSelectFlags &= ~MAP_SELECT_FLAG_ENABLE_ARROW; - } - break; - default: - if (_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_ARROW) { - _currentTrackSelectionFlags &= ~TRACK_SELECTION_FLAG_ARROW; - gMapSelectFlags &= ~MAP_SELECT_FLAG_ENABLE_ARROW; - map_invalidate_tile_full(_currentTrackBeginX, _currentTrackBeginY); - } - ride_construction_remove_ghosts(); - break; + switch (_rideConstructionState) + { + case RIDE_CONSTRUCTION_STATE_SELECTED: + x = _currentTrackBeginX; + y = _currentTrackBeginY; + z = _currentTrackBeginZ; + sub_6C683D(&x, &y, &z, _currentTrackPieceDirection & 3, _currentTrackPieceType, 0, nullptr, 1); + break; + case RIDE_CONSTRUCTION_STATE_MAZE_BUILD: + case RIDE_CONSTRUCTION_STATE_MAZE_MOVE: + case RIDE_CONSTRUCTION_STATE_MAZE_FILL: + if (_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_ARROW) + { + map_invalidate_tile_full(_currentTrackBeginX & 0xFFE0, _currentTrackBeginY & 0xFFE0); + gMapSelectFlags &= ~MAP_SELECT_FLAG_ENABLE_ARROW; + } + break; + default: + if (_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_ARROW) + { + _currentTrackSelectionFlags &= ~TRACK_SELECTION_FLAG_ARROW; + gMapSelectFlags &= ~MAP_SELECT_FLAG_ENABLE_ARROW; + map_invalidate_tile_full(_currentTrackBeginX, _currentTrackBeginY); + } + ride_construction_remove_ghosts(); + break; } } @@ -1479,21 +1557,25 @@ void ride_construction_invalidate_current_track() */ static void ride_construction_reset_current_piece() { - Ride *ride; + Ride* ride; ride = get_ride(_currentRideIndex); - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK) || ride->num_stations == 0) { + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK) || ride->num_stations == 0) + { _currentTrackCurve = RideConstructionDefaultTrackType[ride->type] | 0x100; _currentTrackSlopeEnd = 0; _currentTrackBankEnd = 0; _currentTrackLiftHill = 0; _currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES; - if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_START_CONSTRUCTION_INVERTED) { + if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_START_CONSTRUCTION_INVERTED) + { _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; } _previousTrackSlopeEnd = 0; _previousTrackBankEnd = 0; - } else { + } + else + { _currentTrackCurve = 0xFFFF; _rideConstructionState = RIDE_CONSTRUCTION_STATE_0; } @@ -1506,137 +1588,156 @@ static void ride_construction_reset_current_piece() void ride_construction_set_default_next_piece() { int32_t x, y, z, direction, rideIndex, trackType, curve, bank, slope; - Ride *ride; + Ride* ride; track_begin_end trackBeginEnd; CoordsXYE xyElement; - rct_tile_element *tileElement; + rct_tile_element* tileElement; _currentTrackPrice = MONEY32_UNDEFINED; - switch (_rideConstructionState) { - case RIDE_CONSTRUCTION_STATE_FRONT: - rideIndex = _currentRideIndex; - ride = get_ride(rideIndex); + switch (_rideConstructionState) + { + case RIDE_CONSTRUCTION_STATE_FRONT: + rideIndex = _currentRideIndex; + ride = get_ride(rideIndex); - x = _currentTrackBeginX; - y = _currentTrackBeginY; - z = _currentTrackBeginZ; - direction = _currentTrackPieceDirection; - if (!track_block_get_previous_from_zero(x, y, z, rideIndex, direction, &trackBeginEnd)) { - ride_construction_reset_current_piece(); - return; - } - tileElement = trackBeginEnd.begin_element; - trackType = track_element_get_type(tileElement); - - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK)) { - ride_construction_reset_current_piece(); - return; - } - - // Set whether track is covered - _currentTrackAlternative &= ~RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; - if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) - { - if (track_element_is_inverted(tileElement)) + x = _currentTrackBeginX; + y = _currentTrackBeginY; + z = _currentTrackBeginZ; + direction = _currentTrackPieceDirection; + if (!track_block_get_previous_from_zero(x, y, z, rideIndex, direction, &trackBeginEnd)) { - _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; + ride_construction_reset_current_piece(); + return; } - } + tileElement = trackBeginEnd.begin_element; + trackType = track_element_get_type(tileElement); - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE)) { - curve = gFlatRideTrackCurveChain[trackType].next; - bank = FlatRideTrackDefinitions[trackType].bank_end; - slope = FlatRideTrackDefinitions[trackType].vangle_end; - } else { - if (track_element_is_booster(ride->type, trackType)) { - curve = 0x100 | TRACK_ELEM_BOOSTER; - } else { - curve = gTrackCurveChain[trackType].next; - } - bank = TrackDefinitions[trackType].bank_end; - slope = TrackDefinitions[trackType].vangle_end; - } - - // Set track curve - _currentTrackCurve = curve; - - // Set track banking - if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) { - if (bank == TRACK_BANK_UPSIDE_DOWN) { - bank = TRACK_BANK_NONE; - _currentTrackAlternative ^= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; - } - } - _currentTrackBankEnd = bank; - _previousTrackBankEnd = bank; - - // Set track slope and lift hill - _currentTrackSlopeEnd = slope; - _previousTrackSlopeEnd = slope; - _currentTrackLiftHill = track_element_is_lift_hill(tileElement) && slope != TRACK_SLOPE_DOWN_25 && slope != TRACK_SLOPE_DOWN_60; - break; - case RIDE_CONSTRUCTION_STATE_BACK: - rideIndex = _currentRideIndex; - ride = get_ride(rideIndex); - - x = _currentTrackBeginX; - y = _currentTrackBeginY; - z = _currentTrackBeginZ; - direction = _currentTrackPieceDirection ^ 2; - if (!track_block_get_next_from_zero(x, y, z, rideIndex, direction, &xyElement, &z, &direction, false)) { - ride_construction_reset_current_piece(); - return; - } - tileElement = xyElement.element; - trackType = track_element_get_type(tileElement); - - // Set whether track is covered - _currentTrackAlternative &= ~RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; - if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) - { - if (track_element_is_inverted(tileElement)) + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK)) { - _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; + ride_construction_reset_current_piece(); + return; } - } - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE)) - { - curve = gFlatRideTrackCurveChain[trackType].previous; - bank = FlatRideTrackDefinitions[trackType].bank_start; - slope = FlatRideTrackDefinitions[trackType].vangle_start; - } - else - { - if (track_element_is_booster(ride->type, trackType)) { - curve = 0x100 | TRACK_ELEM_BOOSTER; - } else { - curve = gTrackCurveChain[trackType].previous; + // Set whether track is covered + _currentTrackAlternative &= ~RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; + if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) + { + if (track_element_is_inverted(tileElement)) + { + _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; + } } - bank = TrackDefinitions[trackType].bank_start; - slope = TrackDefinitions[trackType].vangle_start; - } - // Set track curve - _currentTrackCurve = curve; - - // Set track banking - if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) { - if (bank == TRACK_BANK_UPSIDE_DOWN) { - bank = TRACK_BANK_NONE; - _currentTrackAlternative ^= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE)) + { + curve = gFlatRideTrackCurveChain[trackType].next; + bank = FlatRideTrackDefinitions[trackType].bank_end; + slope = FlatRideTrackDefinitions[trackType].vangle_end; + } + else + { + if (track_element_is_booster(ride->type, trackType)) + { + curve = 0x100 | TRACK_ELEM_BOOSTER; + } + else + { + curve = gTrackCurveChain[trackType].next; + } + bank = TrackDefinitions[trackType].bank_end; + slope = TrackDefinitions[trackType].vangle_end; } - } - _currentTrackBankEnd = bank; - _previousTrackBankEnd = bank; - // Set track slope and lift hill - _currentTrackSlopeEnd = slope; - _previousTrackSlopeEnd = slope; - if (!gCheatsEnableChainLiftOnAllTrack) { - _currentTrackLiftHill = track_element_is_lift_hill(tileElement); - } - break; + // Set track curve + _currentTrackCurve = curve; + + // Set track banking + if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) + { + if (bank == TRACK_BANK_UPSIDE_DOWN) + { + bank = TRACK_BANK_NONE; + _currentTrackAlternative ^= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; + } + } + _currentTrackBankEnd = bank; + _previousTrackBankEnd = bank; + + // Set track slope and lift hill + _currentTrackSlopeEnd = slope; + _previousTrackSlopeEnd = slope; + _currentTrackLiftHill + = track_element_is_lift_hill(tileElement) && slope != TRACK_SLOPE_DOWN_25 && slope != TRACK_SLOPE_DOWN_60; + break; + case RIDE_CONSTRUCTION_STATE_BACK: + rideIndex = _currentRideIndex; + ride = get_ride(rideIndex); + + x = _currentTrackBeginX; + y = _currentTrackBeginY; + z = _currentTrackBeginZ; + direction = _currentTrackPieceDirection ^ 2; + if (!track_block_get_next_from_zero(x, y, z, rideIndex, direction, &xyElement, &z, &direction, false)) + { + ride_construction_reset_current_piece(); + return; + } + tileElement = xyElement.element; + trackType = track_element_get_type(tileElement); + + // Set whether track is covered + _currentTrackAlternative &= ~RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; + if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) + { + if (track_element_is_inverted(tileElement)) + { + _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; + } + } + + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE)) + { + curve = gFlatRideTrackCurveChain[trackType].previous; + bank = FlatRideTrackDefinitions[trackType].bank_start; + slope = FlatRideTrackDefinitions[trackType].vangle_start; + } + else + { + if (track_element_is_booster(ride->type, trackType)) + { + curve = 0x100 | TRACK_ELEM_BOOSTER; + } + else + { + curve = gTrackCurveChain[trackType].previous; + } + bank = TrackDefinitions[trackType].bank_start; + slope = TrackDefinitions[trackType].vangle_start; + } + + // Set track curve + _currentTrackCurve = curve; + + // Set track banking + if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) + { + if (bank == TRACK_BANK_UPSIDE_DOWN) + { + bank = TRACK_BANK_NONE; + _currentTrackAlternative ^= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; + } + } + _currentTrackBankEnd = bank; + _previousTrackBankEnd = bank; + + // Set track slope and lift hill + _currentTrackSlopeEnd = slope; + _previousTrackSlopeEnd = slope; + if (!gCheatsEnableChainLiftOnAllTrack) + { + _currentTrackLiftHill = track_element_is_lift_hill(tileElement); + } + break; } } @@ -1646,15 +1747,17 @@ void ride_construction_set_default_next_piece() */ void ride_select_next_section() { - if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_SELECTED) { + if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_SELECTED) + { ride_construction_invalidate_current_track(); int32_t x = _currentTrackBeginX; int32_t y = _currentTrackBeginY; int32_t z = _currentTrackBeginZ; int32_t direction = _currentTrackPieceDirection; int32_t type = _currentTrackPieceType; - rct_tile_element *tileElement; - if (sub_6C683D(&x, &y, &z, direction & 3, type, 0, &tileElement, 0)) { + rct_tile_element* tileElement; + if (sub_6C683D(&x, &y, &z, direction & 3, type, 0, &tileElement, 0)) + { _rideConstructionState = RIDE_CONSTRUCTION_STATE_0; window_ride_construction_update_active_elements(); return; @@ -1667,7 +1770,8 @@ void ride_select_next_section() inputElement.x = x; inputElement.y = y; inputElement.element = tileElement; - if (track_block_get_next(&inputElement, &outputElement, &z, &direction)) { + if (track_block_get_next(&inputElement, &outputElement, &z, &direction)) + { x = outputElement.x; y = outputElement.y; tileElement = outputElement.element; @@ -1676,7 +1780,9 @@ void ride_select_next_section() // Set next element's height. virtual_floor_set_height(tileElement->base_height << 3); } - } else { + } + else + { _rideConstructionState = RIDE_CONSTRUCTION_STATE_FRONT; _currentTrackBeginX = outputElement.x; _currentTrackBeginY = outputElement.y; @@ -1698,8 +1804,11 @@ void ride_select_next_section() _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; window_ride_construction_update_active_elements(); - } else if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_BACK) { - if (ride_select_forwards_from_back()) { + } + else if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_BACK) + { + if (ride_select_forwards_from_back()) + { window_ride_construction_update_active_elements(); } } @@ -1711,15 +1820,17 @@ void ride_select_next_section() */ void ride_select_previous_section() { - if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_SELECTED) { + if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_SELECTED) + { ride_construction_invalidate_current_track(); int32_t x = _currentTrackBeginX; int32_t y = _currentTrackBeginY; int32_t z = _currentTrackBeginZ; int32_t direction = _currentTrackPieceDirection; int32_t type = _currentTrackPieceType; - rct_tile_element *tileElement; - if (sub_6C683D(&x, &y, &z, direction & 3, type, 0, &tileElement, 0)) { + rct_tile_element* tileElement; + if (sub_6C683D(&x, &y, &z, direction & 3, type, 0, &tileElement, 0)) + { _rideConstructionState = RIDE_CONSTRUCTION_STATE_0; window_ride_construction_update_active_elements(); return; @@ -1729,7 +1840,8 @@ void ride_select_previous_section() virtual_floor_invalidate(); track_begin_end trackBeginEnd; - if (track_block_get_previous(x, y, tileElement, &trackBeginEnd)) { + if (track_block_get_previous(x, y, tileElement, &trackBeginEnd)) + { _currentTrackBeginX = trackBeginEnd.begin_x; _currentTrackBeginY = trackBeginEnd.begin_y; _currentTrackBeginZ = trackBeginEnd.begin_z; @@ -1743,7 +1855,9 @@ void ride_select_previous_section() virtual_floor_set_height(trackBeginEnd.begin_element->base_height << 3); } window_ride_construction_update_active_elements(); - } else { + } + else + { _rideConstructionState = RIDE_CONSTRUCTION_STATE_BACK; _currentTrackBeginX = trackBeginEnd.end_x; _currentTrackBeginY = trackBeginEnd.end_y; @@ -1755,8 +1869,11 @@ void ride_select_previous_section() ride_construction_set_default_next_piece(); window_ride_construction_update_active_elements(); } - } else if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_FRONT) { - if (ride_select_backwards_from_front()) { + } + else if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_FRONT) + { + if (ride_select_backwards_from_front()) + { window_ride_construction_update_active_elements(); } } @@ -1766,10 +1883,10 @@ void ride_select_previous_section() * * rct2: 0x006CC2CA */ -static int32_t ride_modify_entrance_or_exit(rct_tile_element *tileElement, int32_t x, int32_t y) +static int32_t ride_modify_entrance_or_exit(rct_tile_element* tileElement, int32_t x, int32_t y) { int32_t rideIndex, entranceType; - rct_window *constructionWindow; + rct_window* constructionWindow; rideIndex = tileElement->properties.entrance.ride_index; @@ -1781,7 +1898,8 @@ static int32_t ride_modify_entrance_or_exit(rct_tile_element *tileElement, int32 // Get or create construction window for ride constructionWindow = window_find_by_class(WC_RIDE_CONSTRUCTION); - if (constructionWindow == nullptr) { + if (constructionWindow == nullptr) + { if (!ride_initialise_construction_window(rideIndex)) return 0; @@ -1791,28 +1909,40 @@ static int32_t ride_modify_entrance_or_exit(rct_tile_element *tileElement, int32 } ride_construction_invalidate_current_track(); - if ( - _rideConstructionState != RIDE_CONSTRUCTION_STATE_ENTRANCE_EXIT || - !(input_test_flag(INPUT_FLAG_TOOL_ACTIVE)) || - gCurrentToolWidget.window_classification != WC_RIDE_CONSTRUCTION - ) { + if (_rideConstructionState != RIDE_CONSTRUCTION_STATE_ENTRANCE_EXIT || !(input_test_flag(INPUT_FLAG_TOOL_ACTIVE)) + || gCurrentToolWidget.window_classification != WC_RIDE_CONSTRUCTION) + { // Replace entrance / exit - tool_set(constructionWindow, entranceType == ENTRANCE_TYPE_RIDE_ENTRANCE ? WC_RIDE_CONSTRUCTION__WIDX_ENTRANCE : WC_RIDE_CONSTRUCTION__WIDX_EXIT, TOOL_CROSSHAIR); + tool_set( + constructionWindow, + entranceType == ENTRANCE_TYPE_RIDE_ENTRANCE ? WC_RIDE_CONSTRUCTION__WIDX_ENTRANCE : WC_RIDE_CONSTRUCTION__WIDX_EXIT, + TOOL_CROSSHAIR); gRideEntranceExitPlaceType = entranceType; gRideEntranceExitPlaceRideIndex = rideIndex; gRideEntranceExitPlaceStationIndex = bl; input_set_flag(INPUT_FLAG_6, true); - if (_rideConstructionState != RIDE_CONSTRUCTION_STATE_ENTRANCE_EXIT) { + if (_rideConstructionState != RIDE_CONSTRUCTION_STATE_ENTRANCE_EXIT) + { gRideEntranceExitPlacePreviousRideConstructionState = _rideConstructionState; _rideConstructionState = RIDE_CONSTRUCTION_STATE_ENTRANCE_EXIT; } window_ride_construction_update_active_elements(); gMapSelectFlags &= ~MAP_SELECT_FLAG_ENABLE_CONSTRUCT; - } else { + } + else + { // Remove entrance / exit - game_do_command(x, (GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_APPLY), y, rideIndex, GAME_COMMAND_REMOVE_RIDE_ENTRANCE_OR_EXIT, bl, 0); - gCurrentToolWidget.widget_index = entranceType == ENTRANCE_TYPE_RIDE_ENTRANCE ? WC_RIDE_CONSTRUCTION__WIDX_ENTRANCE : WC_RIDE_CONSTRUCTION__WIDX_EXIT; + game_do_command( + x, + (GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_APPLY), + y, + rideIndex, + GAME_COMMAND_REMOVE_RIDE_ENTRANCE_OR_EXIT, + bl, + 0); + gCurrentToolWidget.widget_index = entranceType == ENTRANCE_TYPE_RIDE_ENTRANCE ? WC_RIDE_CONSTRUCTION__WIDX_ENTRANCE + : WC_RIDE_CONSTRUCTION__WIDX_EXIT; gRideEntranceExitPlaceType = entranceType; } @@ -1824,7 +1954,7 @@ static int32_t ride_modify_entrance_or_exit(rct_tile_element *tileElement, int32 * * rct2: 0x006CC287 */ -static int32_t ride_modify_maze(rct_tile_element *tileElement, int32_t x, int32_t y) +static int32_t ride_modify_maze(rct_tile_element* tileElement, int32_t x, int32_t y) { _currentRideIndex = track_element_get_ride_index(tileElement); _rideConstructionState = RIDE_CONSTRUCTION_STATE_MAZE_BUILD; @@ -1844,17 +1974,18 @@ static int32_t ride_modify_maze(rct_tile_element *tileElement, int32_t x, int32_ * * rct2: 0x006CC056 */ -int32_t ride_modify(CoordsXYE *input) +int32_t ride_modify(CoordsXYE* input) { int32_t rideIndex, x, y, z, direction, type; CoordsXYE tileElement, endOfTrackElement; - Ride *ride; - rct_ride_entry *rideEntry; + Ride* ride; + rct_ride_entry* rideEntry; tileElement = *input; rideIndex = track_element_get_ride_index(tileElement.element); ride = get_ride(rideIndex); - if (ride == nullptr) { + if (ride == nullptr) + { return 0; } rideEntry = get_ride_entry_by_ride(ride); @@ -1862,10 +1993,12 @@ int32_t ride_modify(CoordsXYE *input) if ((rideEntry == nullptr) || !ride_check_if_construction_allowed(ride)) return 0; - if (ride->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE) { + if (ride->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE) + { set_format_arg(6, rct_string_id, ride->name); set_format_arg(8, uint32_t, ride->name_arguments); - context_show_error(STR_CANT_START_CONSTRUCTION_ON, STR_LOCAL_AUTHORITY_FORBIDS_DEMOLITION_OR_MODIFICATIONS_TO_THIS_RIDE); + context_show_error( + STR_CANT_START_CONSTRUCTION_ON, STR_LOCAL_AUTHORITY_FORBIDS_DEMOLITION_OR_MODIFICATIONS_TO_THIS_RIDE); return 0; } @@ -1881,7 +2014,8 @@ int32_t ride_modify(CoordsXYE *input) if (ride->type == RIDE_TYPE_MAZE) return ride_modify_maze(tileElement.element, tileElement.x, tileElement.y); - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS)) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS)) + { if (ride_find_track_gap(&tileElement, &endOfTrackElement)) tileElement = endOfTrackElement; } @@ -1905,13 +2039,15 @@ int32_t ride_modify(CoordsXYE *input) _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK)) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK)) + { window_ride_construction_update_active_elements(); return 1; } ride_select_next_section(); - if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_FRONT) { + if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_FRONT) + { window_ride_construction_update_active_elements(); return 1; } @@ -1927,7 +2063,8 @@ int32_t ride_modify(CoordsXYE *input) ride_select_previous_section(); - if (_rideConstructionState != RIDE_CONSTRUCTION_STATE_BACK) { + if (_rideConstructionState != RIDE_CONSTRUCTION_STATE_BACK) + { _rideConstructionState = RIDE_CONSTRUCTION_STATE_SELECTED; _currentTrackBeginX = x; _currentTrackBeginY = y; @@ -1948,8 +2085,8 @@ int32_t ride_modify(CoordsXYE *input) */ int32_t ride_initialise_construction_window(int32_t rideIndex) { - Ride *ride; - rct_window *w; + Ride* ride; + rct_window* w; tool_cancel(); ride = get_ride(rideIndex); @@ -1998,13 +2135,14 @@ int32_t ride_initialise_construction_window(int32_t rideIndex) */ void ride_update_all() { - Ride *ride; + Ride* ride; int32_t i; // Remove all rides if scenario editor - if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) { + if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) + { if (gS6Info.editor_step <= EDITOR_STEP_INVENTIONS_LIST_SET_UP) - FOR_ALL_RIDES(i, ride) + FOR_ALL_RIDES (i, ride) ride->type = RIDE_TYPE_NULL; return; } @@ -2012,7 +2150,7 @@ void ride_update_all() window_update_viewport_ride_music(); // Update rides - FOR_ALL_RIDES(i, ride) + FOR_ALL_RIDES (i, ride) ride_update(i); ride_music_update_final(); @@ -2024,7 +2162,7 @@ void ride_update_all() */ static void ride_update(int32_t rideIndex) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); if (ride->vehicle_change_timeout != 0) ride->vehicle_change_timeout--; @@ -2039,7 +2177,8 @@ static void ride_update(int32_t rideIndex) // Update financial statistics ride->num_customers_timeout++; - if (ride->num_customers_timeout >= 960) { + if (ride->num_customers_timeout >= 960) + { // This is meant to update about every 30 seconds ride->num_customers_timeout = 0; @@ -2075,15 +2214,18 @@ static void ride_update(int32_t rideIndex) ride_inspection_update(ride); - if (ride->status == RIDE_STATUS_TESTING && gConfigGeneral.no_test_crashes) { - for (int32_t i = 0; i < ride->num_vehicles; i++) { + if (ride->status == RIDE_STATUS_TESTING && gConfigGeneral.no_test_crashes) + { + for (int32_t i = 0; i < ride->num_vehicles; i++) + { uint16_t spriteIndex = ride->vehicles[i]; if (spriteIndex == SPRITE_INDEX_NULL) continue; - rct_vehicle *vehicle = GET_VEHICLE(spriteIndex); + rct_vehicle* vehicle = GET_VEHICLE(spriteIndex); - if (vehicle->status == VEHICLE_STATUS_CRASHED || vehicle->status == VEHICLE_STATUS_CRASHING) { + if (vehicle->status == VEHICLE_STATUS_CRASHED || vehicle->status == VEHICLE_STATUS_CRASHING) + { ride_set_status(rideIndex, RIDE_STATUS_CLOSED); ride_set_status(rideIndex, RIDE_STATUS_CLOSED); ride_set_status(rideIndex, RIDE_STATUS_TESTING); @@ -2097,14 +2239,14 @@ static void ride_update(int32_t rideIndex) * * rct2: 0x006AC489 */ -static void ride_chairlift_update(Ride *ride) +static void ride_chairlift_update(Ride* ride) { int32_t x, y, z; if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) return; - if ((ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED)) && - ride->breakdown_reason_pending == 0) + if ((ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED)) + && ride->breakdown_reason_pending == 0) return; uint16_t old_chairlift_bullwheel_rotation = ride->chairlift_bullwheel_rotation >> 14; @@ -2129,15 +2271,16 @@ static void ride_chairlift_update(Ride *ride) * edi: ride (in code as bytes offset from start of rides list) * bl: happiness */ -void ride_update_satisfaction(Ride* ride, uint8_t happiness) { +void ride_update_satisfaction(Ride* ride, uint8_t happiness) +{ ride->satisfaction_next += happiness; ride->satisfaction_time_out++; - if (ride->satisfaction_time_out >= 20) { + if (ride->satisfaction_time_out >= 20) + { ride->satisfaction = ride->satisfaction_next >> 2; ride->satisfaction_next = 0; ride->satisfaction_time_out = 0; ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_CUSTOMER; - } } @@ -2149,10 +2292,12 @@ void ride_update_satisfaction(Ride* ride, uint8_t happiness) { * bl : pop_amount * pop_amount can be zero if peep visited but did not purchase. */ -void ride_update_popularity(Ride* ride, uint8_t pop_amount){ +void ride_update_popularity(Ride* ride, uint8_t pop_amount) +{ ride->popularity_next += pop_amount; ride->popularity_time_out++; - if (ride->popularity_time_out < 25)return; + if (ride->popularity_time_out < 25) + return; ride->popularity = ride->popularity_next; ride->popularity_next = 0; @@ -2163,25 +2308,28 @@ void ride_update_popularity(Ride* ride, uint8_t pop_amount){ /** rct2: 0x0098DDB8, 0x0098DDBA */ static constexpr const LocationXY16 ride_spiral_slide_main_tile_offset[][4] = { { - { 32, 32 }, - { 0, 32 }, - { 0, 0 }, - { 32, 0 }, - }, { - { 32, 0 }, - { 0, 0 }, - { 0, -32 }, - { 32, -32 }, - }, { - { 0, 0 }, - { -32, 0 }, + { 32, 32 }, + { 0, 32 }, + { 0, 0 }, + { 32, 0 }, + }, + { + { 32, 0 }, + { 0, 0 }, + { 0, -32 }, + { 32, -32 }, + }, + { + { 0, 0 }, + { -32, 0 }, { -32, -32 }, - { 0, -32 }, - }, { - { 0, 0 }, - { 0, 32 }, - { -32, 32 }, - { -32, 0 }, + { 0, -32 }, + }, + { + { 0, 0 }, + { 0, 32 }, + { -32, 32 }, + { -32, 0 }, }, }; @@ -2189,7 +2337,7 @@ static constexpr const LocationXY16 ride_spiral_slide_main_tile_offset[][4] = { * * rct2: 0x006AC545 */ -static void ride_spiral_slide_update(Ride *ride) +static void ride_spiral_slide_update(Ride* ride) { if (gCurrentTicks & 3) return; @@ -2197,23 +2345,25 @@ static void ride_spiral_slide_update(Ride *ride) return; ride->spiral_slide_progress++; - if (ride->spiral_slide_progress >= 48) { + if (ride->spiral_slide_progress >= 48) + { ride->slide_in_use--; - rct_peep *peep = GET_PEEP(ride->slide_peep); + rct_peep* peep = GET_PEEP(ride->slide_peep); peep->destination_x++; } const uint8_t current_rotation = get_current_rotation(); // Invalidate something related to station start - for (int32_t i = 0; i < MAX_STATIONS; i++) { + for (int32_t i = 0; i < MAX_STATIONS; i++) + { if (ride->station_starts[i].xy == RCT_XY8_UNDEFINED) continue; int32_t x = ride->station_starts[i].x; int32_t y = ride->station_starts[i].y; - rct_tile_element *tileElement = ride_get_station_start_track_element(ride, i); + rct_tile_element* tileElement = ride_get_station_start_track_element(ride, i); if (tileElement == nullptr) continue; @@ -2232,21 +2382,21 @@ static void ride_spiral_slide_update(Ride *ride) #pragma region Breakdown and inspection functions static uint8_t _breakdownProblemProbabilities[] = { - 25, // BREAKDOWN_SAFETY_CUT_OUT - 12, // BREAKDOWN_RESTRAINTS_STUCK_CLOSED - 10, // BREAKDOWN_RESTRAINTS_STUCK_OPEN - 13, // BREAKDOWN_DOORS_STUCK_CLOSED - 10, // BREAKDOWN_DOORS_STUCK_OPEN - 6, // BREAKDOWN_VEHICLE_MALFUNCTION - 0, // BREAKDOWN_BRAKES_FAILURE - 3 // BREAKDOWN_CONTROL_FAILURE + 25, // BREAKDOWN_SAFETY_CUT_OUT + 12, // BREAKDOWN_RESTRAINTS_STUCK_CLOSED + 10, // BREAKDOWN_RESTRAINTS_STUCK_OPEN + 13, // BREAKDOWN_DOORS_STUCK_CLOSED + 10, // BREAKDOWN_DOORS_STUCK_OPEN + 6, // BREAKDOWN_VEHICLE_MALFUNCTION + 0, // BREAKDOWN_BRAKES_FAILURE + 3 // BREAKDOWN_CONTROL_FAILURE }; /** * * rct2: 0x006AC7C2 */ -static void ride_inspection_update(Ride *ride) +static void ride_inspection_update(Ride* ride) { if (gCurrentTicks & 2047) return; @@ -2267,7 +2417,9 @@ static void ride_inspection_update(Ride *ride) if (inspectionIntervalMinutes > ride->last_inspection) return; - if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_DUE_INSPECTION | RIDE_LIFECYCLE_CRASHED)) + if (ride->lifecycle_flags + & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_DUE_INSPECTION + | RIDE_LIFECYCLE_CRASHED)) return; // Inspect the first station that has an exit @@ -2278,25 +2430,27 @@ static void ride_inspection_update(Ride *ride) ride->inspection_station = (stationIndex != -1) ? stationIndex : 0; } -static int32_t get_age_penalty(Ride *ride) { +static int32_t get_age_penalty(Ride* ride) +{ int32_t years; years = date_get_year(gDateMonthsElapsed - ride->build_date); - switch (years) { - case 0: - return 0; - case 1: - return ride->unreliability_factor / 8; - case 2: - return ride->unreliability_factor / 4; - case 3: - case 4: - return ride->unreliability_factor / 2; - case 5: - case 6: - case 7: - return ride->unreliability_factor; - default: - return ride->unreliability_factor * 2; + switch (years) + { + case 0: + return 0; + case 1: + return ride->unreliability_factor / 8; + case 2: + return ride->unreliability_factor / 4; + case 3: + case 4: + return ride->unreliability_factor / 2; + case 5: + case 6: + case 7: + return ride->unreliability_factor; + default: + return ride->unreliability_factor * 2; } } @@ -2311,7 +2465,7 @@ static void ride_breakdown_update(int32_t rideIndex) if (gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) return; - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED)) ride->downtime_history[0]++; @@ -2342,7 +2496,7 @@ static void ride_breakdown_update(int32_t rideIndex) // Calculate breakdown probability? int32_t unreliabilityAccumulator = ride->unreliability_factor + get_age_penalty(ride); - ride->reliability = (uint16_t) std::max(0, (ride->reliability - unreliabilityAccumulator)); + ride->reliability = (uint16_t)std::max(0, (ride->reliability - unreliabilityAccumulator)); ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAINTENANCE; // Random probability of a breakdown. Roughly this is 1 in @@ -2352,7 +2506,8 @@ static void ride_breakdown_update(int32_t rideIndex) // a 0.8% chance, less the breakdown factor which accumulates as the game // continues. if ((ride->reliability == 0 || (int32_t)(scenario_rand() & 0x2FFFFF) <= 1 + RIDE_INITIAL_RELIABILITY - ride->reliability) - && !gCheatsDisableAllBreakdowns) { + && !gCheatsDisableAllBreakdowns) + { int32_t breakdownReason = ride_get_new_breakdown_problem(ride); if (breakdownReason != -1) ride_prepare_breakdown(rideIndex, breakdownReason); @@ -2363,10 +2518,10 @@ static void ride_breakdown_update(int32_t rideIndex) * * rct2: 0x006B7294 */ -static int32_t ride_get_new_breakdown_problem(Ride *ride) +static int32_t ride_get_new_breakdown_problem(Ride* ride) { int32_t availableBreakdownProblems, monthsOld, totalProbability, randomProbability, problemBits, breakdownProblem; - rct_ride_entry *entry; + rct_ride_entry* entry; // Brake failure is more likely when it's raining _breakdownProblemProbabilities[BREAKDOWN_BRAKES_FAILURE] = climate_is_raining() ? 20 : 3; @@ -2380,7 +2535,8 @@ static int32_t ride_get_new_breakdown_problem(Ride *ride) // Calculate the total probability range for all possible breakdown problems totalProbability = 0; problemBits = availableBreakdownProblems; - while (problemBits != 0) { + while (problemBits != 0) + { breakdownProblem = bitscanforward(problemBits); problemBits &= ~(1 << breakdownProblem); totalProbability += _breakdownProblemProbabilities[breakdownProblem]; @@ -2393,7 +2549,8 @@ static int32_t ride_get_new_breakdown_problem(Ride *ride) // Find which problem range the random number lies problemBits = availableBreakdownProblems; - do { + do + { breakdownProblem = bitscanforward(problemBits); problemBits &= ~(1 << breakdownProblem); randomProbability -= _breakdownProblemProbabilities[breakdownProblem]; @@ -2420,7 +2577,7 @@ static int32_t ride_get_new_breakdown_problem(Ride *ride) return BREAKDOWN_BRAKES_FAILURE; } -static void choose_random_train_to_breakdown_safe(Ride * ride) +static void choose_random_train_to_breakdown_safe(Ride* ride) { ride->broken_vehicle = scenario_rand() % ride->num_vehicles; @@ -2439,8 +2596,8 @@ static void choose_random_train_to_breakdown_safe(Ride * ride) void ride_prepare_breakdown(int32_t rideIndex, int32_t breakdownReason) { int32_t i; - Ride *ride; - rct_vehicle *vehicle; + Ride* ride; + rct_vehicle* vehicle; ride = get_ride(rideIndex); if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED)) @@ -2452,57 +2609,61 @@ void ride_prepare_breakdown(int32_t rideIndex, int32_t breakdownReason) ride->breakdown_sound_modifier = 0; ride->not_fixed_timeout = 0; - switch (breakdownReason) { - case BREAKDOWN_SAFETY_CUT_OUT: - case BREAKDOWN_CONTROL_FAILURE: - // Inspect first station with an exit - i = ride_get_first_valid_station_exit(ride); - if (i != -1) - { - ride->inspection_station = i; - } - - break; - case BREAKDOWN_RESTRAINTS_STUCK_CLOSED: - case BREAKDOWN_RESTRAINTS_STUCK_OPEN: - case BREAKDOWN_DOORS_STUCK_CLOSED: - case BREAKDOWN_DOORS_STUCK_OPEN: - // Choose a random train and car - choose_random_train_to_breakdown_safe(ride); - ride->broken_car = scenario_rand() % ride->num_cars_per_train; - - // Set flag on broken car - vehicle = GET_VEHICLE(ride->vehicles[ride->broken_vehicle]); - for (i = ride->broken_car; i > 0; i--) { - if (vehicle->next_vehicle_on_train == SPRITE_INDEX_NULL) { - vehicle = nullptr; - break; + switch (breakdownReason) + { + case BREAKDOWN_SAFETY_CUT_OUT: + case BREAKDOWN_CONTROL_FAILURE: + // Inspect first station with an exit + i = ride_get_first_valid_station_exit(ride); + if (i != -1) + { + ride->inspection_station = i; } - else { - vehicle = GET_VEHICLE(vehicle->next_vehicle_on_train); - } - } - if (vehicle != nullptr) - vehicle->update_flags |= VEHICLE_UPDATE_FLAG_BROKEN_CAR; - break; - case BREAKDOWN_VEHICLE_MALFUNCTION: - // Choose a random train - choose_random_train_to_breakdown_safe(ride); - ride->broken_car = 0; - // Set flag on broken train, first car - vehicle = GET_VEHICLE(ride->vehicles[ride->broken_vehicle]); - vehicle->update_flags |= VEHICLE_UPDATE_FLAG_BROKEN_TRAIN; - break; - case BREAKDOWN_BRAKES_FAILURE: - // Original code generates a random number but does not use it - // Unsure if this was supposed to choose a random station (or random station with an exit) - i = ride_get_first_valid_station_exit(ride); - if (i != -1) - { - ride->inspection_station = i; - } - break; + break; + case BREAKDOWN_RESTRAINTS_STUCK_CLOSED: + case BREAKDOWN_RESTRAINTS_STUCK_OPEN: + case BREAKDOWN_DOORS_STUCK_CLOSED: + case BREAKDOWN_DOORS_STUCK_OPEN: + // Choose a random train and car + choose_random_train_to_breakdown_safe(ride); + ride->broken_car = scenario_rand() % ride->num_cars_per_train; + + // Set flag on broken car + vehicle = GET_VEHICLE(ride->vehicles[ride->broken_vehicle]); + for (i = ride->broken_car; i > 0; i--) + { + if (vehicle->next_vehicle_on_train == SPRITE_INDEX_NULL) + { + vehicle = nullptr; + break; + } + else + { + vehicle = GET_VEHICLE(vehicle->next_vehicle_on_train); + } + } + if (vehicle != nullptr) + vehicle->update_flags |= VEHICLE_UPDATE_FLAG_BROKEN_CAR; + break; + case BREAKDOWN_VEHICLE_MALFUNCTION: + // Choose a random train + choose_random_train_to_breakdown_safe(ride); + ride->broken_car = 0; + + // Set flag on broken train, first car + vehicle = GET_VEHICLE(ride->vehicles[ride->broken_vehicle]); + vehicle->update_flags |= VEHICLE_UPDATE_FLAG_BROKEN_TRAIN; + break; + case BREAKDOWN_BRAKES_FAILURE: + // Original code generates a random number but does not use it + // Unsure if this was supposed to choose a random station (or random station with an exit) + i = ride_get_first_valid_station_exit(ride); + if (i != -1) + { + ride->inspection_station = i; + } + break; } } @@ -2512,11 +2673,12 @@ void ride_prepare_breakdown(int32_t rideIndex, int32_t breakdownReason) */ void ride_breakdown_add_news_item(int32_t rideIndex) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); set_format_arg(0, rct_string_id, ride->name); set_format_arg(2, uint32_t, ride->name_arguments); - if (gConfigNotifications.ride_broken_down) { + if (gConfigNotifications.ride_broken_down) + { news_item_add_to_queue(NEWS_ITEM_RIDE, STR_RIDE_IS_BROKEN_DOWN, rideIndex); } } @@ -2527,10 +2689,11 @@ void ride_breakdown_add_news_item(int32_t rideIndex) */ static void ride_breakdown_status_update(int32_t rideIndex) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); // Warn player if ride hasn't been fixed for ages - if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) { + if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) + { ride->not_fixed_timeout++; // When there has been a full 255 timeout ticks this // will force timeout ticks to keep issuing news every @@ -2538,14 +2701,13 @@ static void ride_breakdown_status_update(int32_t rideIndex) if (ride->not_fixed_timeout == 0) ride->not_fixed_timeout -= 16; - if ( - !(ride->not_fixed_timeout & 15) && - ride->mechanic_status != RIDE_MECHANIC_STATUS_FIXING && - ride->mechanic_status != RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES - ) { + if (!(ride->not_fixed_timeout & 15) && ride->mechanic_status != RIDE_MECHANIC_STATUS_FIXING + && ride->mechanic_status != RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES) + { set_format_arg(0, rct_string_id, ride->name); set_format_arg(2, uint32_t, ride->name_arguments); - if (gConfigNotifications.ride_warnings) { + if (gConfigNotifications.ride_warnings) + { news_item_add_to_queue(NEWS_ITEM_RIDE, STR_RIDE_IS_STILL_NOT_FIXED, rideIndex); } } @@ -2561,79 +2723,75 @@ static void ride_breakdown_status_update(int32_t rideIndex) static void ride_mechanic_status_update(int32_t rideIndex, int32_t mechanicStatus) { int32_t breakdownReason; - Ride *ride; - rct_peep *mechanic; + Ride* ride; + rct_peep* mechanic; ride = get_ride(rideIndex); // Turn a pending breakdown into a breakdown. - if ((mechanicStatus == RIDE_MECHANIC_STATUS_UNDEFINED || - mechanicStatus == RIDE_MECHANIC_STATUS_CALLING || - mechanicStatus == RIDE_MECHANIC_STATUS_HEADING) && - (ride->lifecycle_flags & RIDE_LIFECYCLE_BREAKDOWN_PENDING) && - !(ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)) + if ((mechanicStatus == RIDE_MECHANIC_STATUS_UNDEFINED || mechanicStatus == RIDE_MECHANIC_STATUS_CALLING + || mechanicStatus == RIDE_MECHANIC_STATUS_HEADING) + && (ride->lifecycle_flags & RIDE_LIFECYCLE_BREAKDOWN_PENDING) && !(ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)) { breakdownReason = ride->breakdown_reason_pending; - if ( - breakdownReason == BREAKDOWN_SAFETY_CUT_OUT || - breakdownReason == BREAKDOWN_BRAKES_FAILURE || - breakdownReason == BREAKDOWN_CONTROL_FAILURE - ) { + if (breakdownReason == BREAKDOWN_SAFETY_CUT_OUT || breakdownReason == BREAKDOWN_BRAKES_FAILURE + || breakdownReason == BREAKDOWN_CONTROL_FAILURE) + { ride->lifecycle_flags |= RIDE_LIFECYCLE_BROKEN_DOWN; - ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAINTENANCE | RIDE_INVALIDATE_RIDE_LIST | RIDE_INVALIDATE_RIDE_MAIN; + ride->window_invalidate_flags + |= RIDE_INVALIDATE_RIDE_MAINTENANCE | RIDE_INVALIDATE_RIDE_LIST | RIDE_INVALIDATE_RIDE_MAIN; ride->breakdown_reason = breakdownReason; ride_breakdown_add_news_item(rideIndex); } } - switch (mechanicStatus) { - case RIDE_MECHANIC_STATUS_UNDEFINED: - if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) - { - ride->mechanic_status = RIDE_MECHANIC_STATUS_CALLING; - } - break; - case RIDE_MECHANIC_STATUS_CALLING: - if (RideAvailableBreakdowns[ride->type] == 0) { - ride->lifecycle_flags &= ~(RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_DUE_INSPECTION); + switch (mechanicStatus) + { + case RIDE_MECHANIC_STATUS_UNDEFINED: + if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) + { + ride->mechanic_status = RIDE_MECHANIC_STATUS_CALLING; + } break; - } + case RIDE_MECHANIC_STATUS_CALLING: + if (RideAvailableBreakdowns[ride->type] == 0) + { + ride->lifecycle_flags + &= ~(RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_DUE_INSPECTION); + break; + } - ride_call_closest_mechanic(rideIndex); - break; - case RIDE_MECHANIC_STATUS_HEADING: - mechanic = nullptr; - if (ride->mechanic != SPRITE_INDEX_NULL) { - mechanic = &(get_sprite(ride->mechanic)->peep); - } - if (mechanic == nullptr || - !mechanic->IsMechanic() || - (mechanic->state != PEEP_STATE_HEADING_TO_INSPECTION && mechanic->state != PEEP_STATE_ANSWERING) || - mechanic->current_ride != rideIndex - ) { - ride->mechanic_status = RIDE_MECHANIC_STATUS_CALLING; - ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAINTENANCE; - ride_mechanic_status_update(rideIndex, RIDE_MECHANIC_STATUS_CALLING); - } - break; - case RIDE_MECHANIC_STATUS_FIXING: - mechanic = nullptr; - if (ride->mechanic != SPRITE_INDEX_NULL) { - mechanic = &(get_sprite(ride->mechanic)->peep); - } - if (mechanic == nullptr || - !mechanic->IsMechanic() || - ( - mechanic->state != PEEP_STATE_HEADING_TO_INSPECTION && - mechanic->state != PEEP_STATE_FIXING && - mechanic->state != PEEP_STATE_INSPECTING && - mechanic->state != PEEP_STATE_ANSWERING - ) - ) { - ride->mechanic_status = RIDE_MECHANIC_STATUS_CALLING; - ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAINTENANCE; - ride_mechanic_status_update(rideIndex, RIDE_MECHANIC_STATUS_CALLING); - } - break; + ride_call_closest_mechanic(rideIndex); + break; + case RIDE_MECHANIC_STATUS_HEADING: + mechanic = nullptr; + if (ride->mechanic != SPRITE_INDEX_NULL) + { + mechanic = &(get_sprite(ride->mechanic)->peep); + } + if (mechanic == nullptr || !mechanic->IsMechanic() + || (mechanic->state != PEEP_STATE_HEADING_TO_INSPECTION && mechanic->state != PEEP_STATE_ANSWERING) + || mechanic->current_ride != rideIndex) + { + ride->mechanic_status = RIDE_MECHANIC_STATUS_CALLING; + ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAINTENANCE; + ride_mechanic_status_update(rideIndex, RIDE_MECHANIC_STATUS_CALLING); + } + break; + case RIDE_MECHANIC_STATUS_FIXING: + mechanic = nullptr; + if (ride->mechanic != SPRITE_INDEX_NULL) + { + mechanic = &(get_sprite(ride->mechanic)->peep); + } + if (mechanic == nullptr || !mechanic->IsMechanic() + || (mechanic->state != PEEP_STATE_HEADING_TO_INSPECTION && mechanic->state != PEEP_STATE_FIXING + && mechanic->state != PEEP_STATE_INSPECTING && mechanic->state != PEEP_STATE_ANSWERING)) + { + ride->mechanic_status = RIDE_MECHANIC_STATUS_CALLING; + ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAINTENANCE; + ride_mechanic_status_update(rideIndex, RIDE_MECHANIC_STATUS_CALLING); + } + break; } } @@ -2641,9 +2799,9 @@ static void ride_mechanic_status_update(int32_t rideIndex, int32_t mechanicStatu * * rct2: 0x006B796C */ -static void ride_call_mechanic(int32_t rideIndex, rct_peep *mechanic, int32_t forInspection) +static void ride_call_mechanic(int32_t rideIndex, rct_peep* mechanic, int32_t forInspection) { - Ride *ride; + Ride* ride; ride = get_ride(rideIndex); mechanic->SetState(forInspection ? PEEP_STATE_HEADING_TO_INSPECTION : PEEP_STATE_ANSWERING); @@ -2661,8 +2819,8 @@ static void ride_call_mechanic(int32_t rideIndex, rct_peep *mechanic, int32_t fo */ static void ride_call_closest_mechanic(int32_t rideIndex) { - Ride *ride; - rct_peep *mechanic; + Ride* ride; + rct_peep* mechanic; int32_t forInspection; ride = get_ride(rideIndex); @@ -2673,16 +2831,17 @@ static void ride_call_closest_mechanic(int32_t rideIndex) ride_call_mechanic(rideIndex, mechanic, forInspection); } -rct_peep *ride_find_closest_mechanic(Ride *ride, int32_t forInspection) +rct_peep* ride_find_closest_mechanic(Ride* ride, int32_t forInspection) { int32_t x, y, z, stationIndex; TileCoordsXYZD location; - rct_tile_element *tileElement; + rct_tile_element* tileElement; // Get either exit position or entrance position if there is no exit stationIndex = ride->inspection_station; location = ride_get_exit_location(ride, stationIndex); - if (location.isNull()) { + if (location.isNull()) + { location = ride_get_entrance_location(ride, stationIndex); if (location.isNull()) return nullptr; @@ -2711,19 +2870,22 @@ rct_peep *ride_find_closest_mechanic(Ride *ride, int32_t forInspection) * rct2: 0x006B774B (forInspection = 0) * rct2: 0x006B78C3 (forInspection = 1) */ -rct_peep *find_closest_mechanic(int32_t x, int32_t y, int32_t forInspection) +rct_peep* find_closest_mechanic(int32_t x, int32_t y, int32_t forInspection) { uint32_t closestDistance, distance; uint16_t spriteIndex; rct_peep *peep, *closestMechanic = nullptr; closestDistance = UINT_MAX; - FOR_ALL_STAFF(spriteIndex, peep) { + FOR_ALL_STAFF (spriteIndex, peep) + { if (peep->staff_type != STAFF_TYPE_MECHANIC) continue; - if (!forInspection) { - if (peep->state == PEEP_STATE_HEADING_TO_INSPECTION){ + if (!forInspection) + { + if (peep->state == PEEP_STATE_HEADING_TO_INSPECTION) + { if (peep->sub_state >= 4) continue; } @@ -2732,12 +2894,14 @@ rct_peep *find_closest_mechanic(int32_t x, int32_t y, int32_t forInspection) if (!(peep->staff_orders & STAFF_ORDERS_FIX_RIDES)) continue; - } else { + } + else + { if (peep->state != PEEP_STATE_PATROLLING || !(peep->staff_orders & STAFF_ORDERS_INSPECT_RIDES)) continue; } - if (map_is_location_in_park({x, y})) + if (map_is_location_in_park({ x, y })) if (!staff_is_location_in_patrol(peep, x & 0xFFE0, y & 0xFFE0)) continue; @@ -2746,7 +2910,8 @@ rct_peep *find_closest_mechanic(int32_t x, int32_t y, int32_t forInspection) // Manhattan distance distance = std::abs(peep->x - x) + std::abs(peep->y - y); - if (distance < closestDistance) { + if (distance < closestDistance) + { closestDistance = distance; closestMechanic = peep; } @@ -2755,15 +2920,14 @@ rct_peep *find_closest_mechanic(int32_t x, int32_t y, int32_t forInspection) return closestMechanic; } -rct_peep *ride_get_assigned_mechanic(Ride *ride) +rct_peep* ride_get_assigned_mechanic(Ride* ride) { - if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) { - if ( - ride->mechanic_status == RIDE_MECHANIC_STATUS_HEADING || - ride->mechanic_status == RIDE_MECHANIC_STATUS_FIXING || - ride->mechanic_status == RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES - ) { - rct_peep *peep = &(get_sprite(ride->mechanic)->peep); + if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) + { + if (ride->mechanic_status == RIDE_MECHANIC_STATUS_HEADING || ride->mechanic_status == RIDE_MECHANIC_STATUS_FIXING + || ride->mechanic_status == RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES) + { + rct_peep* peep = &(get_sprite(ride->mechanic)->peep); if (peep->IsMechanic()) return peep; } @@ -2782,45 +2946,51 @@ rct_peep *ride_get_assigned_mechanic(Ride *ride) */ static void ride_music_update(int32_t rideIndex) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); - if ( - !(RideData4[ride->type].flags & RIDE_TYPE_FLAG4_MUSIC_ON_DEFAULT) && - !(RideData4[ride->type].flags & RIDE_TYPE_FLAG4_ALLOW_MUSIC) - ) { + if (!(RideData4[ride->type].flags & RIDE_TYPE_FLAG4_MUSIC_ON_DEFAULT) + && !(RideData4[ride->type].flags & RIDE_TYPE_FLAG4_ALLOW_MUSIC)) + { return; } - if (ride->status != RIDE_STATUS_OPEN || !(ride->lifecycle_flags & RIDE_LIFECYCLE_MUSIC)) { + if (ride->status != RIDE_STATUS_OPEN || !(ride->lifecycle_flags & RIDE_LIFECYCLE_MUSIC)) + { ride->music_tune_id = 255; return; } - if (ride->type == RIDE_TYPE_CIRCUS) { - rct_vehicle *vehicle = GET_VEHICLE(ride->vehicles[0]); - if (vehicle->status != VEHICLE_STATUS_DOING_CIRCUS_SHOW) { + if (ride->type == RIDE_TYPE_CIRCUS) + { + rct_vehicle* vehicle = GET_VEHICLE(ride->vehicles[0]); + if (vehicle->status != VEHICLE_STATUS_DOING_CIRCUS_SHOW) + { ride->music_tune_id = 255; return; } } // Oscillate parameters for a power cut effect when breaking down - if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN)) { - if (ride->breakdown_reason_pending == BREAKDOWN_CONTROL_FAILURE) { + if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN)) + { + if (ride->breakdown_reason_pending == BREAKDOWN_CONTROL_FAILURE) + { if (!(gCurrentTicks & 7)) if (ride->breakdown_sound_modifier != 255) ride->breakdown_sound_modifier++; - } else { - if ( - (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) || - ride->breakdown_reason_pending == BREAKDOWN_BRAKES_FAILURE || - ride->breakdown_reason_pending == BREAKDOWN_CONTROL_FAILURE - ) { + } + else + { + if ((ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) + || ride->breakdown_reason_pending == BREAKDOWN_BRAKES_FAILURE + || ride->breakdown_reason_pending == BREAKDOWN_CONTROL_FAILURE) + { if (ride->breakdown_sound_modifier != 255) ride->breakdown_sound_modifier++; } - if (ride->breakdown_sound_modifier == 255) { + if (ride->breakdown_sound_modifier == 255) + { ride->music_tune_id = 255; return; } @@ -2828,8 +2998,9 @@ static void ride_music_update(int32_t rideIndex) } // Select random tune from available tunes for a music style (of course only merry-go-rounds have more than one tune) - if (ride->music_tune_id == 255) { - const auto &musicStyleTunes = gRideMusicStyleTuneIds[ride->music]; + if (ride->music_tune_id == 255) + { + const auto& musicStyleTunes = gRideMusicStyleTuneIds[ride->music]; auto numTunes = musicStyleTunes.size(); ride->music_tune_id = musicStyleTunes[util_rand() % numTunes]; ride->music_position = 0; @@ -2843,7 +3014,8 @@ static void ride_music_update(int32_t rideIndex) int32_t sampleRate = 22050; // Alter sample rate for a power cut effect - if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN)) { + if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN)) + { sampleRate = ride->breakdown_sound_modifier * 70; if (ride->breakdown_reason_pending != BREAKDOWN_CONTROL_FAILURE) sampleRate *= -1; @@ -2861,9 +3033,9 @@ static void ride_music_update(int32_t rideIndex) * * rct2: 0x006B642B */ -void ride_measurement_clear(Ride *ride) +void ride_measurement_clear(Ride* ride) { - rct_ride_measurement *measurement; + rct_ride_measurement* measurement; if (ride->measurement_index == 255) return; @@ -2877,11 +3049,11 @@ void ride_measurement_clear(Ride *ride) * * rct2: 0x006B64F2 */ -static void ride_measurement_update(rct_ride_measurement *measurement) +static void ride_measurement_update(rct_ride_measurement* measurement) { uint16_t spriteIndex; - Ride *ride; - rct_vehicle *vehicle; + Ride* ride; + rct_vehicle* vehicle; int32_t velocity, altitude, verticalG, lateralG; ride = get_ride(measurement->ride_index); @@ -2891,7 +3063,8 @@ static void ride_measurement_update(rct_ride_measurement *measurement) vehicle = GET_VEHICLE(spriteIndex); - if (measurement->flags & RIDE_MEASUREMENT_FLAG_UNLOADING) { + if (measurement->flags & RIDE_MEASUREMENT_FLAG_UNLOADING) + { if (vehicle->status != VEHICLE_STATUS_DEPARTING && vehicle->status != VEHICLE_STATUS_TRAVELLING_CABLE_LIFT) return; @@ -2900,30 +3073,30 @@ static void ride_measurement_update(rct_ride_measurement *measurement) measurement->current_item = 0; } - if (vehicle->status == VEHICLE_STATUS_UNLOADING_PASSENGERS) { + if (vehicle->status == VEHICLE_STATUS_UNLOADING_PASSENGERS) + { measurement->flags |= RIDE_MEASUREMENT_FLAG_UNLOADING; return; } uint8_t trackType = (vehicle->track_type >> 2) & 0xFF; - if (trackType == TRACK_ELEM_BLOCK_BRAKES || - trackType == TRACK_ELEM_CABLE_LIFT_HILL || - trackType == TRACK_ELEM_25_DEG_UP_TO_FLAT || - trackType == TRACK_ELEM_60_DEG_UP_TO_FLAT || - trackType == TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT || - trackType == TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT) + if (trackType == TRACK_ELEM_BLOCK_BRAKES || trackType == TRACK_ELEM_CABLE_LIFT_HILL + || trackType == TRACK_ELEM_25_DEG_UP_TO_FLAT || trackType == TRACK_ELEM_60_DEG_UP_TO_FLAT + || trackType == TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT || trackType == TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT) if (vehicle->velocity == 0) return; if (measurement->current_item >= RIDE_MEASUREMENT_MAX_ITEMS) return; - if (measurement->flags & RIDE_MEASUREMENT_FLAG_G_FORCES) { + if (measurement->flags & RIDE_MEASUREMENT_FLAG_G_FORCES) + { vehicle_get_g_forces(vehicle, &verticalG, &lateralG); verticalG = Math::Clamp(-127, verticalG / 8, 127); lateralG = Math::Clamp(-127, lateralG / 8, 127); - if (gScenarioTicks & 1) { + if (gScenarioTicks & 1) + { verticalG = (verticalG + measurement->vertical[measurement->current_item]) / 2; lateralG = (lateralG + measurement->lateral[measurement->current_item]) / 2; } @@ -2935,7 +3108,8 @@ static void ride_measurement_update(rct_ride_measurement *measurement) velocity = std::min(std::abs((vehicle->velocity * 5) >> 16), 255); altitude = std::min(vehicle->z / 8, 255); - if (gScenarioTicks & 1) { + if (gScenarioTicks & 1) + { velocity = (velocity + measurement->velocity[measurement->current_item]) / 2; altitude = (altitude + measurement->altitude[measurement->current_item]) / 2; } @@ -2943,7 +3117,8 @@ static void ride_measurement_update(rct_ride_measurement *measurement) measurement->velocity[measurement->current_item] = velocity & 0xFF; measurement->altitude[measurement->current_item] = altitude & 0xFF; - if (gScenarioTicks & 1) { + if (gScenarioTicks & 1) + { measurement->current_item++; measurement->num_items = std::max(measurement->num_items, measurement->current_item); } @@ -2959,26 +3134,32 @@ void ride_measurements_update() return; // For each ride measurement - for (int32_t i = 0; i < MAX_RIDE_MEASUREMENTS; i++) { - rct_ride_measurement *measurement = get_ride_measurement(i); + for (int32_t i = 0; i < MAX_RIDE_MEASUREMENTS; i++) + { + rct_ride_measurement* measurement = get_ride_measurement(i); if (measurement->ride_index == 255) continue; - Ride *ride = get_ride(measurement->ride_index); + Ride* ride = get_ride(measurement->ride_index); if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) continue; - if (measurement->flags & RIDE_MEASUREMENT_FLAG_RUNNING) { + if (measurement->flags & RIDE_MEASUREMENT_FLAG_RUNNING) + { ride_measurement_update(measurement); - } else { + } + else + { // For each vehicle - for (int32_t j = 0; j < ride->num_vehicles; j++) { + for (int32_t j = 0; j < ride->num_vehicles; j++) + { uint16_t spriteIndex = ride->vehicles[j]; if (spriteIndex == SPRITE_INDEX_NULL) continue; - rct_vehicle *vehicle = GET_VEHICLE(spriteIndex); - if (vehicle->status == VEHICLE_STATUS_DEPARTING || vehicle->status == VEHICLE_STATUS_TRAVELLING_CABLE_LIFT) { + rct_vehicle* vehicle = GET_VEHICLE(spriteIndex); + if (vehicle->status == VEHICLE_STATUS_DEPARTING || vehicle->status == VEHICLE_STATUS_TRAVELLING_CABLE_LIFT) + { measurement->vehicle_index = j; measurement->current_station = vehicle->current_station; measurement->flags |= RIDE_MEASUREMENT_FLAG_RUNNING; @@ -2987,15 +3168,15 @@ void ride_measurements_update() break; } } - } } } -static rct_ride_measurement *ride_get_existing_measurement(int32_t rideIndex) +static rct_ride_measurement* ride_get_existing_measurement(int32_t rideIndex) { - for (int32_t i = 0; i < MAX_RIDE_MEASUREMENTS; i++) { - rct_ride_measurement *measurement = get_ride_measurement(i); + for (int32_t i = 0; i < MAX_RIDE_MEASUREMENTS; i++) + { + rct_ride_measurement* measurement = get_ride_measurement(i); if (measurement->ride_index == rideIndex) return measurement; } @@ -3005,8 +3186,9 @@ static rct_ride_measurement *ride_get_existing_measurement(int32_t rideIndex) static int32_t ride_get_free_measurement() { - for (int32_t i = 0; i < MAX_RIDE_MEASUREMENTS; i++) { - rct_ride_measurement *measurement = get_ride_measurement(i); + for (int32_t i = 0; i < MAX_RIDE_MEASUREMENTS; i++) + { + rct_ride_measurement* measurement = get_ride_measurement(i); if (measurement->ride_index == 255) return i; } @@ -3018,29 +3200,35 @@ static int32_t ride_get_free_measurement() * * rct2: 0x006B66D9 */ -rct_ride_measurement *ride_get_measurement(int32_t rideIndex, rct_string_id *message) +rct_ride_measurement* ride_get_measurement(int32_t rideIndex, rct_string_id* message) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); // Check if ride type supports data logging - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_DATA_LOGGING)) { - if (message != nullptr) *message = STR_DATA_LOGGING_NOT_AVAILABLE_FOR_THIS_TYPE_OF_RIDE; + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_DATA_LOGGING)) + { + if (message != nullptr) + *message = STR_DATA_LOGGING_NOT_AVAILABLE_FOR_THIS_TYPE_OF_RIDE; return nullptr; } // Check if a measurement already exists for this ride - rct_ride_measurement *measurement = ride_get_existing_measurement(rideIndex); - if (measurement == nullptr) { + rct_ride_measurement* measurement = ride_get_existing_measurement(rideIndex); + if (measurement == nullptr) + { // Find a free measurement int32_t i = ride_get_free_measurement(); - if (i == -1) { + if (i == -1) + { // Use last recently used measurement for some other ride int32_t lruIndex = 0; uint32_t lruTicks = 0xFFFFFFFF; - for (i = 0; i < MAX_RIDE_MEASUREMENTS; i++) { + for (i = 0; i < MAX_RIDE_MEASUREMENTS; i++) + { measurement = get_ride_measurement(i); - if (measurement->last_use_tick <= lruTicks) { + if (measurement->last_use_tick <= lruTicks) + { lruTicks = measurement->last_use_tick; lruIndex = i; } @@ -3049,7 +3237,9 @@ rct_ride_measurement *ride_get_measurement(int32_t rideIndex, rct_string_id *mes i = lruIndex; measurement = get_ride_measurement(i); get_ride(measurement->ride_index)->measurement_index = 255; - } else { + } + else + { measurement = get_ride_measurement(i); } @@ -3063,13 +3253,18 @@ rct_ride_measurement *ride_get_measurement(int32_t rideIndex, rct_string_id *mes } measurement->last_use_tick = gScenarioTicks; - if (measurement->flags & 1) { - if (message != nullptr) *message = 0; + if (measurement->flags & 1) + { + if (message != nullptr) + *message = 0; return measurement; - } else { + } + else + { set_format_arg(0, rct_string_id, RideComponentNames[RideNameConvention[ride->type].vehicle].singular); set_format_arg(2, rct_string_id, RideComponentNames[RideNameConvention[ride->type].station].singular); - if (message != nullptr) *message = STR_DATA_LOGGING_WILL_START_WHEN_NEXT_LEAVES; + if (message != nullptr) + *message = STR_DATA_LOGGING_WILL_START_WHEN_NEXT_LEAVES; return nullptr; } } @@ -3078,7 +3273,7 @@ rct_ride_measurement *ride_get_measurement(int32_t rideIndex, rct_string_id *mes #pragma region Colour functions -track_colour ride_get_track_colour(Ride *ride, int32_t colourScheme) +track_colour ride_get_track_colour(Ride* ride, int32_t colourScheme) { track_colour result; result.main = ride->track_colour_main[colourScheme]; @@ -3087,12 +3282,13 @@ track_colour ride_get_track_colour(Ride *ride, int32_t colourScheme) return result; } -vehicle_colour ride_get_vehicle_colour(Ride *ride, int32_t vehicleIndex) +vehicle_colour ride_get_vehicle_colour(Ride* ride, int32_t vehicleIndex) { vehicle_colour result; - //Prevent indexing array out of bounds - if (vehicleIndex > 31) { + // Prevent indexing array out of bounds + if (vehicleIndex > 31) + { vehicleIndex = 31; } @@ -3102,13 +3298,16 @@ vehicle_colour ride_get_vehicle_colour(Ride *ride, int32_t vehicleIndex) return result; } -static bool ride_does_vehicle_colour_exist(uint8_t ride_sub_type, vehicle_colour *vehicleColour) +static bool ride_does_vehicle_colour_exist(uint8_t ride_sub_type, vehicle_colour* vehicleColour) { int32_t i; - Ride *ride2; - FOR_ALL_RIDES(i, ride2) { - if (ride2->subtype != ride_sub_type) continue; - if (ride2->vehicle_colours[0].body_colour != vehicleColour->main) continue; + Ride* ride2; + FOR_ALL_RIDES (i, ride2) + { + if (ride2->subtype != ride_sub_type) + continue; + if (ride2->vehicle_colours[0].body_colour != vehicleColour->main) + continue; return false; } return true; @@ -3120,23 +3319,25 @@ int32_t ride_get_unused_preset_vehicle_colour(uint8_t ride_sub_type) { return 0; } - rct_ride_entry *rideEntry = get_ride_entry(ride_sub_type); + rct_ride_entry* rideEntry = get_ride_entry(ride_sub_type); if (rideEntry == nullptr) { return 0; } - vehicle_colour_preset_list *presetList = rideEntry->vehicle_preset_list; + vehicle_colour_preset_list* presetList = rideEntry->vehicle_preset_list; if (presetList->count == 0) return 0; if (presetList->count == 255) return 255; - for (int32_t attempt = 0; attempt < 200; attempt++) { + for (int32_t attempt = 0; attempt < 200; attempt++) + { uint8_t numColourConfigurations = presetList->count; int32_t randomConfigIndex = util_rand() % numColourConfigurations; - vehicle_colour *preset = &presetList->list[randomConfigIndex]; + vehicle_colour* preset = &presetList->list[randomConfigIndex]; - if (ride_does_vehicle_colour_exist(ride_sub_type, preset)) { + if (ride_does_vehicle_colour_exist(ride_sub_type, preset)) + { return randomConfigIndex; } } @@ -3147,24 +3348,28 @@ int32_t ride_get_unused_preset_vehicle_colour(uint8_t ride_sub_type) * * rct2: 0x006DE52C */ -void ride_set_vehicle_colours_to_random_preset(Ride *ride, uint8_t preset_index) +void ride_set_vehicle_colours_to_random_preset(Ride* ride, uint8_t preset_index) { - rct_ride_entry *rideEntry = get_ride_entry(ride->subtype); - vehicle_colour_preset_list *presetList = rideEntry->vehicle_preset_list; + rct_ride_entry* rideEntry = get_ride_entry(ride->subtype); + vehicle_colour_preset_list* presetList = rideEntry->vehicle_preset_list; - if (presetList->count != 0 && presetList->count != 255) { + if (presetList->count != 0 && presetList->count != 255) + { assert(preset_index < presetList->count); ride->colour_scheme_type = RIDE_COLOUR_SCHEME_ALL_SAME; - vehicle_colour *preset = &presetList->list[preset_index]; + vehicle_colour* preset = &presetList->list[preset_index]; ride->vehicle_colours[0].body_colour = preset->main; ride->vehicle_colours[0].trim_colour = preset->additional_1; ride->vehicle_colours_extended[0] = preset->additional_2; - } else { + } + else + { ride->colour_scheme_type = RIDE_COLOUR_SCHEME_DIFFERENT_PER_TRAIN; uint32_t count = std::min(presetList->count, (uint8_t)32); - for (uint32_t i = 0; i < count; i++) { - vehicle_colour *preset = &presetList->list[i]; + for (uint32_t i = 0; i < count; i++) + { + vehicle_colour* preset = &presetList->list[i]; ride->vehicle_colours[i].body_colour = preset->main; ride->vehicle_colours[i].trim_colour = preset->additional_1; ride->vehicle_colours_extended[i] = preset->additional_2; @@ -3182,10 +3387,11 @@ void ride_set_vehicle_colours_to_random_preset(Ride *ride, uint8_t preset_index) */ void ride_check_all_reachable() { - Ride *ride; + Ride* ride; int32_t i; - FOR_ALL_RIDES(i, ride) { + FOR_ALL_RIDES (i, ride) + { if (ride->connected_message_throttle != 0) ride->connected_message_throttle--; if (ride->status != RIDE_STATUS_OPEN || ride->connected_message_throttle != 0) @@ -3233,15 +3439,16 @@ static void ride_entrance_exit_connected(Ride* ride, int32_t ride_idx) TileCoordsXYZD entrance = ride_get_entrance_location(ride_idx, i); TileCoordsXYZD exit = ride_get_exit_location(ride_idx, i); - if (station_start.xy == RCT_XY8_UNDEFINED ) + if (station_start.xy == RCT_XY8_UNDEFINED) continue; if (!entrance.isNull() && !ride_entrance_exit_is_reachable(entrance)) { // name of ride is parameter of the format string set_format_arg(0, rct_string_id, ride->name); set_format_arg(2, uint32_t, ride->name_arguments); - if (gConfigNotifications.ride_warnings) { - news_item_add_to_queue(1, STR_ENTRANCE_NOT_CONNECTED, ride_idx); + if (gConfigNotifications.ride_warnings) + { + news_item_add_to_queue(1, STR_ENTRANCE_NOT_CONNECTED, ride_idx); } ride->connected_message_throttle = 3; } @@ -3251,19 +3458,19 @@ static void ride_entrance_exit_connected(Ride* ride, int32_t ride_idx) // name of ride is parameter of the format string set_format_arg(0, rct_string_id, ride->name); set_format_arg(2, uint32_t, ride->name_arguments); - if (gConfigNotifications.ride_warnings) { - news_item_add_to_queue(1, STR_EXIT_NOT_CONNECTED, ride_idx); + if (gConfigNotifications.ride_warnings) + { + news_item_add_to_queue(1, STR_EXIT_NOT_CONNECTED, ride_idx); } ride->connected_message_throttle = 3; } - } } static void ride_shop_connected(Ride* ride, int32_t ride_idx) { int32_t x, y, count; - rct_tile_element *tileElement; + rct_tile_element* tileElement; LocationXY8 coordinates = ride->station_starts[0]; if (coordinates.xy == RCT_XY8_UNDEFINED) @@ -3273,7 +3480,8 @@ static void ride_shop_connected(Ride* ride, int32_t ride_idx) y = coordinates.y; tileElement = map_get_first_element_at(x, y); - do { + do + { if (tileElement->GetType() == TILE_ELEMENT_TYPE_TRACK && track_element_get_ride_index(tileElement) == ride_idx) break; } while (!(tileElement++)->IsLastForTile()); @@ -3285,9 +3493,12 @@ static void ride_shop_connected(Ride* ride, int32_t ride_idx) { return; } - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE)) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE)) + { entrance_directions = FlatRideTrackSequenceProperties[track_type][0]; - } else { + } + else + { entrance_directions = TrackSequenceProperties[track_type][0]; } @@ -3303,8 +3514,10 @@ static void ride_shop_connected(Ride* ride, int32_t ride_idx) x *= 32; y *= 32; - for (count = 0; entrance_directions != 0; count++) { - if (!(entrance_directions & 1)) { + for (count = 0; entrance_directions != 0; count++) + { + if (!(entrance_directions & 1)) + { entrance_directions >>= 1; continue; } @@ -3323,8 +3536,9 @@ static void ride_shop_connected(Ride* ride, int32_t ride_idx) // Name of ride is parameter of the format string set_format_arg(0, rct_string_id, ride->name); set_format_arg(2, uint32_t, ride->name_arguments); - if (gConfigNotifications.ride_warnings) { - news_item_add_to_queue(1, STR_ENTRANCE_NOT_CONNECTED, ride_idx); + if (gConfigNotifications.ride_warnings) + { + news_item_add_to_queue(1, STR_ENTRANCE_NOT_CONNECTED, ride_idx); } ride->connected_message_throttle = 3; @@ -3334,10 +3548,10 @@ static void ride_shop_connected(Ride* ride, int32_t ride_idx) #pragma region Interface -static void ride_track_set_map_tooltip(rct_tile_element *tileElement) +static void ride_track_set_map_tooltip(rct_tile_element* tileElement) { int32_t rideIndex; - Ride *ride; + Ride* ride; rideIndex = track_element_get_ride_index(tileElement); ride = get_ride(rideIndex); @@ -3353,10 +3567,10 @@ static void ride_track_set_map_tooltip(rct_tile_element *tileElement) set_map_tooltip_format_arg(10, uint32_t, arg1); } -static void ride_station_set_map_tooltip(rct_tile_element *tileElement) +static void ride_station_set_map_tooltip(rct_tile_element* tileElement) { int32_t i, rideIndex, stationIndex; - Ride *ride; + Ride* ride; rideIndex = track_element_get_ride_index(tileElement); ride = get_ride(rideIndex); @@ -3380,10 +3594,10 @@ static void ride_station_set_map_tooltip(rct_tile_element *tileElement) set_map_tooltip_format_arg(16, uint32_t, arg1); } -static void ride_entrance_set_map_tooltip(rct_tile_element *tileElement) +static void ride_entrance_set_map_tooltip(rct_tile_element* tileElement) { int32_t i, rideIndex, stationIndex; - Ride *ride; + Ride* ride; rideIndex = track_element_get_ride_index(tileElement); ride = get_ride(rideIndex); @@ -3394,7 +3608,8 @@ static void ride_entrance_set_map_tooltip(rct_tile_element *tileElement) if (ride->station_starts[i].xy == RCT_XY8_UNDEFINED) stationIndex--; - if (tileElement->properties.entrance.type == ENTRANCE_TYPE_RIDE_ENTRANCE) { + if (tileElement->properties.entrance.type == ENTRANCE_TYPE_RIDE_ENTRANCE) + { // Get the queue length int32_t queueLength = 0; if (!ride_get_entrance_location(ride, stationIndex).isNull()) @@ -3405,15 +3620,22 @@ static void ride_entrance_set_map_tooltip(rct_tile_element *tileElement) set_map_tooltip_format_arg(4, rct_string_id, ride->name); set_map_tooltip_format_arg(6, uint32_t, ride->name_arguments); set_map_tooltip_format_arg(12, uint16_t, stationIndex + 1); - if (queueLength == 0) { + if (queueLength == 0) + { set_map_tooltip_format_arg(14, rct_string_id, STR_QUEUE_EMPTY); - } else if (queueLength == 1) { + } + else if (queueLength == 1) + { set_map_tooltip_format_arg(14, rct_string_id, STR_QUEUE_ONE_PERSON); - } else { + } + else + { set_map_tooltip_format_arg(14, rct_string_id, STR_QUEUE_PEOPLE); } set_map_tooltip_format_arg(16, uint16_t, queueLength); - } else { + } + else + { // Get the station stationIndex = tile_element_get_station(tileElement); for (i = stationIndex; i >= 0; i--) @@ -3427,7 +3649,7 @@ static void ride_entrance_set_map_tooltip(rct_tile_element *tileElement) } } -void ride_set_map_tooltip(rct_tile_element *tileElement) +void ride_set_map_tooltip(rct_tile_element* tileElement) { if (tileElement->GetType() == TILE_ELEMENT_TYPE_ENTRANCE) { @@ -3446,18 +3668,19 @@ void ride_set_map_tooltip(rct_tile_element *tileElement) } } -static int32_t ride_music_params_update_label_51(uint32_t a1, uint8_t * tuneId, uint8_t rideIndex, int32_t v32, int32_t pan_x, uint16_t sampleRate) +static int32_t ride_music_params_update_label_51( + uint32_t a1, uint8_t* tuneId, uint8_t rideIndex, int32_t v32, int32_t pan_x, uint16_t sampleRate) { if (a1 < gRideMusicInfoList[*tuneId].length) { - rct_ride_music_params * ride_music_params = gRideMusicParamsListEnd; + rct_ride_music_params* ride_music_params = gRideMusicParamsListEnd; if (ride_music_params < &gRideMusicParamsList[Util::CountOf(gRideMusicParamsList)]) { - ride_music_params->ride_id = rideIndex; - ride_music_params->tune_id = *tuneId; - ride_music_params->offset = a1; - ride_music_params->volume = v32; - ride_music_params->pan = pan_x; + ride_music_params->ride_id = rideIndex; + ride_music_params->tune_id = *tuneId; + ride_music_params->offset = a1; + ride_music_params->volume = v32; + ride_music_params->pan = pan_x; ride_music_params->frequency = sampleRate; gRideMusicParamsListEnd++; } @@ -3471,9 +3694,9 @@ static int32_t ride_music_params_update_label_51(uint32_t a1, uint8_t * tuneId, } } -static int32_t ride_music_params_update_label_58(uint32_t position, uint8_t * tuneId) +static int32_t ride_music_params_update_label_58(uint32_t position, uint8_t* tuneId) { - rct_ride_music_info * ride_music_info = &gRideMusicInfoList[*tuneId]; + rct_ride_music_info* ride_music_info = &gRideMusicInfoList[*tuneId]; position += ride_music_info->offset; if (position < ride_music_info->length) { @@ -3499,23 +3722,21 @@ static int32_t ride_music_params_update_label_58(uint32_t position, uint8_t * tu * @param tuneId (bh) * @returns new position (ebp) */ -int32_t ride_music_params_update(int16_t x, int16_t y, int16_t z, uint8_t rideIndex, uint16_t sampleRate, uint32_t position, uint8_t * tuneId) +int32_t ride_music_params_update( + int16_t x, int16_t y, int16_t z, uint8_t rideIndex, uint16_t sampleRate, uint32_t position, uint8_t* tuneId) { if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && !gGameSoundsOff && g_music_tracking_viewport != nullptr) { const LocationXY16 rotatedCoords = ride_get_rotated_coords(x, y, z); - rct_viewport * viewport = g_music_tracking_viewport; - int16_t view_width = viewport->view_width; + rct_viewport* viewport = g_music_tracking_viewport; + int16_t view_width = viewport->view_width; int16_t view_width2 = view_width * 2; - int16_t view_x = viewport->view_x - view_width2; - int16_t view_y = viewport->view_y - view_width; - int16_t view_x2 = view_width2 + view_width2 + viewport->view_width + view_x; - int16_t view_y2 = view_width + view_width + viewport->view_height + view_y; + int16_t view_x = viewport->view_x - view_width2; + int16_t view_y = viewport->view_y - view_width; + int16_t view_x2 = view_width2 + view_width2 + viewport->view_width + view_x; + int16_t view_y2 = view_width + view_width + viewport->view_height + view_y; - if (view_x >= rotatedCoords.x || - view_y >= rotatedCoords.y || - view_x2 < rotatedCoords.x || - view_y2 < rotatedCoords.y) + if (view_x >= rotatedCoords.x || view_y >= rotatedCoords.y || view_x2 < rotatedCoords.x || view_y2 < rotatedCoords.y) { return ride_music_params_update_label_58(position, tuneId); } @@ -3538,8 +3759,8 @@ int32_t ride_music_params_update(int16_t x, int16_t y, int16_t z, uint8_t rideIn } int32_t pan_y = ((y2 / screenheight) - 0x8000) >> 4; - uint8_t vol1 = 255; - uint8_t vol2 = 255; + uint8_t vol1 = 255; + uint8_t vol2 = 255; int32_t panx2 = pan_x; int32_t pany2 = pan_y; if (pany2 < 0) @@ -3554,7 +3775,7 @@ int32_t ride_music_params_update(int16_t x, int16_t y, int16_t z, uint8_t rideIn if (pany2 > 0) { pany2 = -((pany2 / 4) - 1024) / 4; - vol1 = (uint8_t) pany2; + vol1 = (uint8_t)pany2; if (pany2 >= 256) { vol1 = 255; @@ -3573,7 +3794,7 @@ int32_t ride_music_params_update(int16_t x, int16_t y, int16_t z, uint8_t rideIn if (panx2 > 0) { panx2 = -((panx2 / 4) - 1024) / 4; - vol2 = (uint8_t) panx2; + vol2 = (uint8_t)panx2; if (panx2 >= 256) { vol2 = 255; @@ -3591,7 +3812,7 @@ int32_t ride_music_params_update(int16_t x, int16_t y, int16_t z, uint8_t rideIn { vol1 = vol1 - (gVolumeAdjustZoom * 3); } - int32_t v32 = -(((uint8_t) (-vol1 - 1) * (uint8_t) (-vol1 - 1)) / 16) - 700; + int32_t v32 = -(((uint8_t)(-vol1 - 1) * (uint8_t)(-vol1 - 1)) / 16) - 700; if (vol1 && v32 >= -4000) { if (pan_x > 10000) @@ -3602,7 +3823,7 @@ int32_t ride_music_params_update(int16_t x, int16_t y, int16_t z, uint8_t rideIn { pan_x = -10000; } - rct_ride_music * ride_music = &gRideMusicList[0]; + rct_ride_music* ride_music = &gRideMusicList[0]; int32_t channel = 0; uint32_t a1; while (ride_music->ride_id != rideIndex || ride_music->tune_id != *tuneId) @@ -3611,7 +3832,7 @@ int32_t ride_music_params_update(int16_t x, int16_t y, int16_t z, uint8_t rideIn channel++; if (channel >= AUDIO_MAX_RIDE_MUSIC) { - rct_ride_music_info * ride_music_info = &gRideMusicInfoList[*tuneId]; + rct_ride_music_info* ride_music_info = &gRideMusicInfoList[*tuneId]; a1 = position + ride_music_info->offset; return ride_music_params_update_label_51(a1, tuneId, rideIndex, v32, pan_x, sampleRate); @@ -3623,7 +3844,7 @@ int32_t ride_music_params_update(int16_t x, int16_t y, int16_t z, uint8_t rideIn *tuneId = 0xFF; return 0; } - a1 = (uint32_t) Mixer_Channel_GetOffset(gRideMusicList[channel].sound_channel); + a1 = (uint32_t)Mixer_Channel_GetOffset(gRideMusicList[channel].sound_channel); return ride_music_params_update_label_51(a1, tuneId, rideIndex, v32, pan_x, sampleRate); } @@ -3636,12 +3857,12 @@ int32_t ride_music_params_update(int16_t x, int16_t y, int16_t z, uint8_t rideIn } /** -* Play/update ride music based on structs updated in 0x006BC3AC -* rct2: 0x006BC6D8 -*/ + * Play/update ride music based on structs updated in 0x006BC3AC + * rct2: 0x006BC6D8 + */ void ride_music_update_final() { - rct_ride_music_params * edi = nullptr; + rct_ride_music_params* edi = nullptr; int32_t ebx = 0; if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR)) { @@ -3652,15 +3873,15 @@ void ride_music_update_final() { int32_t v8 = 0; int32_t v9 = 1; - rct_ride_music_params * ride_music_params = &gRideMusicParamsList[0]; + rct_ride_music_params* ride_music_params = &gRideMusicParamsList[0]; while (ride_music_params < gRideMusicParamsListEnd) { - if (ride_music_params->ride_id != (uint8_t) -1) + if (ride_music_params->ride_id != (uint8_t)-1) { v8++; if (v9 >= ride_music_params->volume) { - v9 = ride_music_params->volume; + v9 = ride_music_params->volume; edi = ride_music_params; } } @@ -3674,17 +3895,18 @@ void ride_music_update_final() } // stop currently playing music that is not in music params list or not playing? - rct_ride_music * ride_music = &gRideMusicList[0]; + rct_ride_music* ride_music = &gRideMusicList[0]; int32_t channel = 0; do { if (ride_music->ride_id != RIDE_ID_NULL) { - rct_ride_music_params * ride_music_params = &gRideMusicParamsList[0]; + rct_ride_music_params* ride_music_params = &gRideMusicParamsList[0]; int32_t isplaying = 0; while (ride_music_params < gRideMusicParamsListEnd && !isplaying) { - if (ride_music_params->ride_id == ride_music->ride_id && ride_music_params->tune_id == ride_music->tune_id) + if (ride_music_params->ride_id == ride_music->ride_id + && ride_music_params->tune_id == ride_music->tune_id) { isplaying = Mixer_Channel_IsPlaying(gRideMusicList[channel].sound_channel); break; @@ -3696,20 +3918,21 @@ void ride_music_update_final() Mixer_Stop_Channel(gRideMusicList[channel].sound_channel); ride_music->ride_id = RIDE_ID_NULL; } - } ride_music++; channel++; - } - while (channel < AUDIO_MAX_RIDE_MUSIC); + } while (channel < AUDIO_MAX_RIDE_MUSIC); - for (rct_ride_music_params * ride_music_params = &gRideMusicParamsList[0]; ride_music_params < gRideMusicParamsListEnd; ride_music_params++) + for (rct_ride_music_params* ride_music_params = &gRideMusicParamsList[0]; + ride_music_params < gRideMusicParamsListEnd; + ride_music_params++) { if (ride_music_params->ride_id != RIDE_ID_NULL) { - rct_ride_music * ride_music_2 = &gRideMusicList[0]; + rct_ride_music* ride_music_2 = &gRideMusicList[0]; int32_t channel2 = 0; - while (ride_music_params->ride_id != ride_music_2->ride_id || ride_music_params->tune_id != ride_music_2->tune_id) + while (ride_music_params->ride_id != ride_music_2->ride_id + || ride_music_params->tune_id != ride_music_2->tune_id) { if (ride_music_2->ride_id == RIDE_ID_NULL) { @@ -3719,16 +3942,16 @@ void ride_music_update_final() channel2++; if (channel2 >= AUDIO_MAX_RIDE_MUSIC) { - rct_ride_music_info * ride_music_info = &gRideMusicInfoList[ride_music_params->tune_id]; - rct_ride_music * ride_music_3 = &gRideMusicList[ebx]; + rct_ride_music_info* ride_music_info = &gRideMusicInfoList[ride_music_params->tune_id]; + rct_ride_music* ride_music_3 = &gRideMusicList[ebx]; ride_music_3->sound_channel = Mixer_Play_Music(ride_music_info->path_id, MIXER_LOOP_NONE, true); if (ride_music_3->sound_channel) { - ride_music_3->volume = ride_music_params->volume; - ride_music_3->pan = ride_music_params->pan; + ride_music_3->volume = ride_music_params->volume; + ride_music_3->pan = ride_music_params->pan; ride_music_3->frequency = ride_music_params->frequency; - ride_music_3->ride_id = ride_music_params->ride_id; - ride_music_3->tune_id = ride_music_params->tune_id; + ride_music_3->ride_id = ride_music_params->ride_id; + ride_music_3->tune_id = ride_music_params->tune_id; Mixer_Channel_Volume(ride_music_3->sound_channel, DStoMixerVolume(ride_music_3->volume)); Mixer_Channel_Pan(ride_music_3->sound_channel, DStoMixerPan(ride_music_3->pan)); Mixer_Channel_Rate(ride_music_3->sound_channel, DStoMixerRate(ride_music_3->frequency)); @@ -3764,7 +3987,6 @@ void ride_music_update_final() ride_music_2->frequency = ride_music_params->frequency; Mixer_Channel_Rate(ride_music_2->sound_channel, DStoMixerRate(ride_music_2->frequency)); } - } } } @@ -3773,9 +3995,9 @@ void ride_music_update_final() #pragma endregion -static bool ride_is_mode_valid(Ride *ride, uint8_t mode) +static bool ride_is_mode_valid(Ride* ride, uint8_t mode) { - const uint8_t * availableModes = ride_seek_available_modes(ride); + const uint8_t* availableModes = ride_seek_available_modes(ride); for (; *availableModes != 0xFF; availableModes++) { @@ -3788,9 +4010,9 @@ static bool ride_is_mode_valid(Ride *ride, uint8_t mode) return false; } -static bool ride_is_valid_lift_hill_speed(Ride *ride, int32_t speed) +static bool ride_is_valid_lift_hill_speed(Ride* ride, int32_t speed) { - int32_t minSpeed = gCheatsFastLiftHill ? 0 : RideLiftData[ride->type].minimum_speed; + int32_t minSpeed = gCheatsFastLiftHill ? 0 : RideLiftData[ride->type].minimum_speed; int32_t maxSpeed = gCheatsFastLiftHill ? 255 : RideLiftData[ride->type].maximum_speed; return speed >= minSpeed && speed <= maxSpeed; } @@ -3802,11 +4024,12 @@ static bool ride_is_valid_num_circuits(int32_t numCircuits) return numCircuits >= minNumCircuits && numCircuits <= maxNumCircuits; } -static bool ride_is_valid_operation_option(Ride *ride, uint8_t value) +static bool ride_is_valid_operation_option(Ride* ride, uint8_t value) { uint8_t minValue = RideProperties[ride->type].min_value; uint8_t maxValue = RideProperties[ride->type].max_value; - if (gCheatsFastLiftHill) { + if (gCheatsFastLiftHill) + { minValue = 0; maxValue = 255; } @@ -3818,150 +4041,181 @@ static money32 ride_set_setting(uint8_t rideIndex, uint8_t setting, uint8_t valu { gCommandExpenditureType = RCT_EXPENDITURE_TYPE_RIDE_RUNNING_COSTS; - Ride *ride = get_ride(rideIndex); - if (ride == nullptr || ride->type == RIDE_TYPE_NULL) { + Ride* ride = get_ride(rideIndex); + if (ride == nullptr || ride->type == RIDE_TYPE_NULL) + { log_warning("Invalid ride: #%u.", rideIndex); return MONEY32_UNDEFINED; } - switch (setting) { - case RIDE_SETTING_MODE: - if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) { - gGameCommandErrorText = STR_HAS_BROKEN_DOWN_AND_REQUIRES_FIXING; - return MONEY32_UNDEFINED; - } - - if (ride->status != RIDE_STATUS_CLOSED) { - gGameCommandErrorText = STR_MUST_BE_CLOSED_FIRST; - return MONEY32_UNDEFINED; - } - - if (!ride_is_mode_valid(ride, value)) { - log_warning("Invalid ride mode."); - return MONEY32_UNDEFINED; - } - - if (flags & GAME_COMMAND_FLAG_APPLY) { - invalidate_test_results(rideIndex); - ride_clear_for_construction(rideIndex); - ride_remove_peeps(rideIndex); - - ride->mode = value; - ride_update_max_vehicles(rideIndex); - } - break; - case RIDE_SETTING_DEPARTURE: - if (flags & GAME_COMMAND_FLAG_APPLY) { - ride->depart_flags = value; - } - break; - case RIDE_SETTING_MIN_WAITING_TIME: - if (value > 250) { - log_warning("Invalid minimum waiting time."); - return MONEY32_UNDEFINED; - } - - if (flags & GAME_COMMAND_FLAG_APPLY) { - ride->min_waiting_time = value; - ride->max_waiting_time = std::max(value, ride->max_waiting_time); - } - break; - case RIDE_SETTING_MAX_WAITING_TIME: - if (value > 250) { - log_warning("Invalid maximum waiting time."); - return MONEY32_UNDEFINED; - } - - if (flags & GAME_COMMAND_FLAG_APPLY) { - ride->max_waiting_time = value; - ride->min_waiting_time = std::min(value, ride->min_waiting_time); - } - break; - case RIDE_SETTING_OPERATION_OPTION: - if (!ride_is_valid_operation_option(ride, value)) { - log_warning("Invalid operation option value."); - return MONEY32_UNDEFINED; - } - - if (flags & GAME_COMMAND_FLAG_APPLY) { - invalidate_test_results(rideIndex); - ride->operation_option = value; - } - break; - case RIDE_SETTING_INSPECTION_INTERVAL: - if (value > RIDE_INSPECTION_NEVER) { - log_warning("Invalid inspection interval."); - return MONEY32_UNDEFINED; - } - - if (flags & GAME_COMMAND_FLAG_APPLY) { - ride->inspection_interval = value; - } - break; - case RIDE_SETTING_MUSIC: - if (flags & GAME_COMMAND_FLAG_APPLY) { - ride->lifecycle_flags &= ~RIDE_LIFECYCLE_MUSIC; - if (value) { - ride->lifecycle_flags |= RIDE_LIFECYCLE_MUSIC; + switch (setting) + { + case RIDE_SETTING_MODE: + if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) + { + gGameCommandErrorText = STR_HAS_BROKEN_DOWN_AND_REQUIRES_FIXING; + return MONEY32_UNDEFINED; } - } - break; - case RIDE_SETTING_MUSIC_TYPE: - if (value >= MUSIC_STYLE_COUNT) { - log_warning("Invalid music style."); - return MONEY32_UNDEFINED; - } - if (flags & GAME_COMMAND_FLAG_APPLY) { - if (value != ride->music) { - ride->music = value; - ride->music_tune_id = 0xFF; + if (ride->status != RIDE_STATUS_CLOSED) + { + gGameCommandErrorText = STR_MUST_BE_CLOSED_FIRST; + return MONEY32_UNDEFINED; } - } - break; - case RIDE_SETTING_LIFT_HILL_SPEED: - if (!ride_is_valid_lift_hill_speed(ride, value)) { - log_warning("Invalid lift hill speed."); - return MONEY32_UNDEFINED; - } - if (flags & GAME_COMMAND_FLAG_APPLY) { - if (value != ride->lift_hill_speed) { - ride->lift_hill_speed = value; + if (!ride_is_mode_valid(ride, value)) + { + log_warning("Invalid ride mode."); + return MONEY32_UNDEFINED; + } + + if (flags & GAME_COMMAND_FLAG_APPLY) + { invalidate_test_results(rideIndex); + ride_clear_for_construction(rideIndex); + ride_remove_peeps(rideIndex); + + ride->mode = value; + ride_update_max_vehicles(rideIndex); + } + break; + case RIDE_SETTING_DEPARTURE: + if (flags & GAME_COMMAND_FLAG_APPLY) + { + ride->depart_flags = value; + } + break; + case RIDE_SETTING_MIN_WAITING_TIME: + if (value > 250) + { + log_warning("Invalid minimum waiting time."); + return MONEY32_UNDEFINED; } - } - break; - case RIDE_SETTING_NUM_CIRCUITS: - if (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT && value > 1) { - gGameCommandErrorText = STR_MULTICIRCUIT_NOT_POSSIBLE_WITH_CABLE_LIFT_HILL; - return MONEY32_UNDEFINED; - } - if (!ride_is_valid_num_circuits(value)) { - log_warning("Invalid number of circuits."); - return MONEY32_UNDEFINED; - } + if (flags & GAME_COMMAND_FLAG_APPLY) + { + ride->min_waiting_time = value; + ride->max_waiting_time = std::max(value, ride->max_waiting_time); + } + break; + case RIDE_SETTING_MAX_WAITING_TIME: + if (value > 250) + { + log_warning("Invalid maximum waiting time."); + return MONEY32_UNDEFINED; + } - if (flags & GAME_COMMAND_FLAG_APPLY) { - if (value != ride->num_circuits) { - ride->num_circuits = value; + if (flags & GAME_COMMAND_FLAG_APPLY) + { + ride->max_waiting_time = value; + ride->min_waiting_time = std::min(value, ride->min_waiting_time); + } + break; + case RIDE_SETTING_OPERATION_OPTION: + if (!ride_is_valid_operation_option(ride, value)) + { + log_warning("Invalid operation option value."); + return MONEY32_UNDEFINED; + } + + if (flags & GAME_COMMAND_FLAG_APPLY) + { invalidate_test_results(rideIndex); + ride->operation_option = value; } - } - break; - case RIDE_SETTING_RIDE_TYPE: - if (!gCheatsAllowArbitraryRideTypeChanges) { - return MONEY32_UNDEFINED; - } - if (flags & GAME_COMMAND_FLAG_APPLY) { - ride->type = value; - } - break; + break; + case RIDE_SETTING_INSPECTION_INTERVAL: + if (value > RIDE_INSPECTION_NEVER) + { + log_warning("Invalid inspection interval."); + return MONEY32_UNDEFINED; + } + + if (flags & GAME_COMMAND_FLAG_APPLY) + { + ride->inspection_interval = value; + } + break; + case RIDE_SETTING_MUSIC: + if (flags & GAME_COMMAND_FLAG_APPLY) + { + ride->lifecycle_flags &= ~RIDE_LIFECYCLE_MUSIC; + if (value) + { + ride->lifecycle_flags |= RIDE_LIFECYCLE_MUSIC; + } + } + break; + case RIDE_SETTING_MUSIC_TYPE: + if (value >= MUSIC_STYLE_COUNT) + { + log_warning("Invalid music style."); + return MONEY32_UNDEFINED; + } + + if (flags & GAME_COMMAND_FLAG_APPLY) + { + if (value != ride->music) + { + ride->music = value; + ride->music_tune_id = 0xFF; + } + } + break; + case RIDE_SETTING_LIFT_HILL_SPEED: + if (!ride_is_valid_lift_hill_speed(ride, value)) + { + log_warning("Invalid lift hill speed."); + return MONEY32_UNDEFINED; + } + + if (flags & GAME_COMMAND_FLAG_APPLY) + { + if (value != ride->lift_hill_speed) + { + ride->lift_hill_speed = value; + invalidate_test_results(rideIndex); + } + } + break; + case RIDE_SETTING_NUM_CIRCUITS: + if (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT && value > 1) + { + gGameCommandErrorText = STR_MULTICIRCUIT_NOT_POSSIBLE_WITH_CABLE_LIFT_HILL; + return MONEY32_UNDEFINED; + } + + if (!ride_is_valid_num_circuits(value)) + { + log_warning("Invalid number of circuits."); + return MONEY32_UNDEFINED; + } + + if (flags & GAME_COMMAND_FLAG_APPLY) + { + if (value != ride->num_circuits) + { + ride->num_circuits = value; + invalidate_test_results(rideIndex); + } + } + break; + case RIDE_SETTING_RIDE_TYPE: + if (!gCheatsAllowArbitraryRideTypeChanges) + { + return MONEY32_UNDEFINED; + } + if (flags & GAME_COMMAND_FLAG_APPLY) + { + ride->type = value; + } + break; } - if (flags & GAME_COMMAND_FLAG_APPLY) { - if (ride->overall_view.xy != RCT_XY8_UNDEFINED) { + if (flags & GAME_COMMAND_FLAG_APPLY) + { + if (ride->overall_view.xy != RCT_XY8_UNDEFINED) + { LocationXYZ16 coord; coord.x = ride->overall_view.x * 32 + 16; coord.y = ride->overall_view.y * 32 + 16; @@ -3980,13 +4234,13 @@ static money32 ride_set_setting(uint8_t rideIndex, uint8_t setting, uint8_t valu * rct2: 0x006B5559 */ void game_command_set_ride_setting( - [[maybe_unused]] int32_t * eax, - int32_t * ebx, - [[maybe_unused]] int32_t * ecx, - int32_t * edx, - [[maybe_unused]] int32_t * esi, - [[maybe_unused]] int32_t * edi, - [[maybe_unused]] int32_t * ebp) + [[maybe_unused]] int32_t* eax, + int32_t* ebx, + [[maybe_unused]] int32_t* ecx, + int32_t* edx, + [[maybe_unused]] int32_t* esi, + [[maybe_unused]] int32_t* edi, + [[maybe_unused]] int32_t* ebp) { uint8_t rideIndex = *edx & 0xFF; uint8_t setting = (*edx >> 8) & 0xFF; @@ -3999,32 +4253,38 @@ void game_command_set_ride_setting( * * rct2: 0x006B4CC1 */ -static int32_t ride_mode_check_valid_station_numbers(Ride *ride) +static int32_t ride_mode_check_valid_station_numbers(Ride* ride) { uint8_t no_stations = 0; - for (uint8_t station_index = 0; station_index < MAX_STATIONS; ++station_index){ + for (uint8_t station_index = 0; station_index < MAX_STATIONS; ++station_index) + { if (ride->station_starts[station_index].xy != RCT_XY8_UNDEFINED) { no_stations++; } } - switch (ride->mode){ - case RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE: - case RIDE_MODE_POWERED_LAUNCH_PASSTROUGH: - case RIDE_MODE_POWERED_LAUNCH: - case RIDE_MODE_LIM_POWERED_LAUNCH: - if (no_stations <= 1) return 1; - gGameCommandErrorText = STR_UNABLE_TO_OPERATE_WITH_MORE_THAN_ONE_STATION_IN_THIS_MODE; - return 0; - case RIDE_MODE_SHUTTLE: - if (no_stations >= 2) return 1; - gGameCommandErrorText = STR_UNABLE_TO_OPERATE_WITH_LESS_THAN_TWO_STATIONS_IN_THIS_MODE; - return 0; + switch (ride->mode) + { + case RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE: + case RIDE_MODE_POWERED_LAUNCH_PASSTROUGH: + case RIDE_MODE_POWERED_LAUNCH: + case RIDE_MODE_LIM_POWERED_LAUNCH: + if (no_stations <= 1) + return 1; + gGameCommandErrorText = STR_UNABLE_TO_OPERATE_WITH_MORE_THAN_ONE_STATION_IN_THIS_MODE; + return 0; + case RIDE_MODE_SHUTTLE: + if (no_stations >= 2) + return 1; + gGameCommandErrorText = STR_UNABLE_TO_OPERATE_WITH_LESS_THAN_TWO_STATIONS_IN_THIS_MODE; + return 0; } - if (ride->type == RIDE_TYPE_GO_KARTS || ride->type == RIDE_TYPE_MINI_GOLF){ - if (no_stations <= 1) return 1; + if (ride->type == RIDE_TYPE_GO_KARTS || ride->type == RIDE_TYPE_MINI_GOLF) + { + if (no_stations <= 1) + return 1; gGameCommandErrorText = STR_UNABLE_TO_OPERATE_WITH_MORE_THAN_ONE_STATION_IN_THIS_MODE; return 0; } @@ -4036,10 +4296,12 @@ static int32_t ride_mode_check_valid_station_numbers(Ride *ride) * returns stationIndex of first station on success * -1 on failure. */ -static int32_t ride_mode_check_station_present(Ride* ride){ +static int32_t ride_mode_check_station_present(Ride* ride) +{ int32_t stationIndex = ride_get_first_valid_station_start(ride); - if (stationIndex == -1) { + if (stationIndex == -1) + { gGameCommandErrorText = STR_NOT_YET_CONSTRUCTED; if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK)) return -1; @@ -4068,34 +4330,38 @@ static int32_t ride_check_for_entrance_exit(int32_t rideIndex) int32_t i; uint8_t entrance = 0; uint8_t exit = 0; - for (i = 0; i < MAX_STATIONS; i++) { + for (i = 0; i < MAX_STATIONS; i++) + { if (ride->station_starts[i].xy == RCT_XY8_UNDEFINED) continue; - if (!ride_get_entrance_location(ride, i).isNull()) { + if (!ride_get_entrance_location(ride, i).isNull()) + { entrance = 1; } - if (!ride_get_exit_location(ride, i).isNull()) { + if (!ride_get_exit_location(ride, i).isNull()) + { exit = 1; } // If station start and no entrance/exit // Sets same error message as no entrance - if (ride_get_exit_location(ride, i).isNull() && - ride_get_entrance_location(ride, i).isNull()) + if (ride_get_exit_location(ride, i).isNull() && ride_get_entrance_location(ride, i).isNull()) { entrance = 0; break; } } - if (entrance == 0){ + if (entrance == 0) + { gGameCommandErrorText = STR_ENTRANCE_NOT_YET_BUILT; return 0; } - if (exit == 0){ + if (exit == 0) + { gGameCommandErrorText = STR_EXIT_NOT_YET_BUILT; return 0; } @@ -4121,8 +4387,9 @@ static void sub_6B5952(int32_t rideIndex) // This will fire for every entrance on this x, y and z, regardless whether that actually belongs to // the ride or not. - rct_tile_element * tileElement = map_get_first_element_at(location.x, location.y); - do { + rct_tile_element* tileElement = map_get_first_element_at(location.x, location.y); + do + { if (tileElement->GetType() != TILE_ELEMENT_TYPE_ENTRANCE) continue; if (tileElement->base_height != z) @@ -4138,9 +4405,9 @@ static void sub_6B5952(int32_t rideIndex) * * rct2: 0x006D3319 */ -static int32_t ride_check_block_brakes(CoordsXYE *input, CoordsXYE *output) +static int32_t ride_check_block_brakes(CoordsXYE* input, CoordsXYE* output) { - rct_window *w; + rct_window* w; track_circuit_iterator it; int32_t rideIndex, type; @@ -4150,27 +4417,34 @@ static int32_t ride_check_block_brakes(CoordsXYE *input, CoordsXYE *output) ride_construction_invalidate_current_track(); track_circuit_iterator_begin(&it, *input); - while (track_circuit_iterator_next(&it)) { - if (track_element_get_type(it.current.element) == TRACK_ELEM_BLOCK_BRAKES) { + while (track_circuit_iterator_next(&it)) + { + if (track_element_get_type(it.current.element) == TRACK_ELEM_BLOCK_BRAKES) + { type = track_element_get_type(it.last.element); - if (type == TRACK_ELEM_END_STATION) { + if (type == TRACK_ELEM_END_STATION) + { gGameCommandErrorText = STR_BLOCK_BRAKES_CANNOT_BE_USED_DIRECTLY_AFTER_STATION; *output = it.current; return 0; } - if (type == TRACK_ELEM_BLOCK_BRAKES) { + if (type == TRACK_ELEM_BLOCK_BRAKES) + { gGameCommandErrorText = STR_BLOCK_BRAKES_CANNOT_BE_USED_DIRECTLY_AFTER_EACH_OTHER; *output = it.current; return 0; } - if (track_element_is_lift_hill(it.last.element) && type != TRACK_ELEM_LEFT_CURVED_LIFT_HILL && type != TRACK_ELEM_RIGHT_CURVED_LIFT_HILL) { + if (track_element_is_lift_hill(it.last.element) && type != TRACK_ELEM_LEFT_CURVED_LIFT_HILL + && type != TRACK_ELEM_RIGHT_CURVED_LIFT_HILL) + { gGameCommandErrorText = STR_BLOCK_BRAKES_CANNOT_BE_USED_DIRECTLY_AFTER_THE_TOP_OF_THIS_LIFT_HILL; *output = it.current; return 0; } } } - if (!it.looped) { + if (!it.looped) + { // Not sure why this is the case... gGameCommandErrorText = STR_BLOCK_BRAKES_CANNOT_BE_USED_DIRECTLY_AFTER_STATION; *output = it.last; @@ -4187,15 +4461,16 @@ static int32_t ride_check_block_brakes(CoordsXYE *input, CoordsXYE *output) * @returns true if an inversion track piece is found, otherwise false. * rct2: 0x006CB149 */ -static bool ride_check_track_contains_inversions(CoordsXYE *input, CoordsXYE *output) +static bool ride_check_track_contains_inversions(CoordsXYE* input, CoordsXYE* output) { int32_t rideIndex = track_element_get_ride_index(input->element); - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); if (ride->type == RIDE_TYPE_MAZE) return true; - rct_window *w = window_find_by_class(WC_RIDE_CONSTRUCTION); - if (w != nullptr && _rideConstructionState != RIDE_CONSTRUCTION_STATE_0 && rideIndex == _currentRideIndex) { + rct_window* w = window_find_by_class(WC_RIDE_CONSTRUCTION); + if (w != nullptr && _rideConstructionState != RIDE_CONSTRUCTION_STATE_0 && rideIndex == _currentRideIndex) + { ride_construction_invalidate_current_track(); } @@ -4204,9 +4479,11 @@ static bool ride_check_track_contains_inversions(CoordsXYE *input, CoordsXYE *ou track_circuit_iterator_begin(&it, *input); slowIt = it; - while (track_circuit_iterator_next(&it)) { + while (track_circuit_iterator_next(&it)) + { int32_t trackType = track_element_get_type(it.current.element); - if (TrackFlags[trackType] & TRACK_ELEM_FLAG_INVERSION_TO_NORMAL) { + if (TrackFlags[trackType] & TRACK_ELEM_FLAG_INVERSION_TO_NORMAL) + { *output = it.current; return true; } @@ -4232,15 +4509,16 @@ static bool ride_check_track_contains_inversions(CoordsXYE *input, CoordsXYE *ou * @returns true if a banked track piece is found, otherwise false. * rct2: 0x006CB1D3 */ -static bool ride_check_track_contains_banked(CoordsXYE *input, CoordsXYE *output) +static bool ride_check_track_contains_banked(CoordsXYE* input, CoordsXYE* output) { int32_t rideIndex = track_element_get_ride_index(input->element); - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); if (ride->type == RIDE_TYPE_MAZE) return true; - rct_window *w = window_find_by_class(WC_RIDE_CONSTRUCTION); - if (w != nullptr && _rideConstructionState != RIDE_CONSTRUCTION_STATE_0 && rideIndex == _currentRideIndex) { + rct_window* w = window_find_by_class(WC_RIDE_CONSTRUCTION); + if (w != nullptr && _rideConstructionState != RIDE_CONSTRUCTION_STATE_0 && rideIndex == _currentRideIndex) + { ride_construction_invalidate_current_track(); } @@ -4249,9 +4527,11 @@ static bool ride_check_track_contains_banked(CoordsXYE *input, CoordsXYE *output track_circuit_iterator_begin(&it, *input); slowIt = it; - while (track_circuit_iterator_next(&it)) { + while (track_circuit_iterator_next(&it)) + { int32_t trackType = track_element_get_type(output->element); - if (TrackFlags[trackType] & TRACK_ELEM_FLAG_BANKED) { + if (TrackFlags[trackType] & TRACK_ELEM_FLAG_BANKED) + { *output = it.current; return true; } @@ -4274,12 +4554,11 @@ static bool ride_check_track_contains_banked(CoordsXYE *input, CoordsXYE *output * * rct2: 0x006CB25D */ -static int32_t ride_check_station_length(CoordsXYE *input, CoordsXYE *output) +static int32_t ride_check_station_length(CoordsXYE* input, CoordsXYE* output) { rct_window* w = window_find_by_class(WC_RIDE_CONSTRUCTION); - if (w != nullptr && - _rideConstructionState != RIDE_CONSTRUCTION_STATE_0 && - _currentRideIndex == track_element_get_ride_index(input->element)) + if (w != nullptr && _rideConstructionState != RIDE_CONSTRUCTION_STATE_0 + && _currentRideIndex == track_element_get_ride_index(input->element)) { ride_construction_invalidate_current_track(); } @@ -4288,7 +4567,8 @@ static int32_t ride_check_station_length(CoordsXYE *input, CoordsXYE *output) output->y = input->y; output->element = input->element; track_begin_end trackBeginEnd; - while (track_block_get_previous(output->x, output->y, output->element, &trackBeginEnd)){ + while (track_block_get_previous(output->x, output->y, output->element, &trackBeginEnd)) + { output->x = trackBeginEnd.begin_x; output->y = trackBeginEnd.begin_y; output->element = trackBeginEnd.begin_element; @@ -4297,15 +4577,19 @@ static int32_t ride_check_station_length(CoordsXYE *input, CoordsXYE *output) int32_t num_station_elements = 0; CoordsXYE last_good_station = *output; - do{ - if (TrackSequenceProperties[track_element_get_type(output->element)][0] & TRACK_SEQUENCE_FLAG_ORIGIN){ + do + { + if (TrackSequenceProperties[track_element_get_type(output->element)][0] & TRACK_SEQUENCE_FLAG_ORIGIN) + { num_station_elements++; last_good_station = *output; } - else{ + else + { if (num_station_elements == 0) continue; - if (num_station_elements == 1){ + if (num_station_elements == 1) + { return 0; } num_station_elements = 0; @@ -4324,10 +4608,10 @@ static int32_t ride_check_station_length(CoordsXYE *input, CoordsXYE *output) * * rct2: 0x006CB2DA */ -static bool ride_check_start_and_end_is_station(CoordsXYE * input) +static bool ride_check_start_and_end_is_station(CoordsXYE* input) { - rct_window *w; - Ride *ride; + rct_window* w; + Ride* ride; int32_t rideIndex, trackType; CoordsXYE trackBack, trackFront; @@ -4335,14 +4619,16 @@ static bool ride_check_start_and_end_is_station(CoordsXYE * input) ride = get_ride(rideIndex); w = window_find_by_class(WC_RIDE_CONSTRUCTION); - if (w != nullptr && _rideConstructionState != RIDE_CONSTRUCTION_STATE_0 && rideIndex == _currentRideIndex) { + if (w != nullptr && _rideConstructionState != RIDE_CONSTRUCTION_STATE_0 && rideIndex == _currentRideIndex) + { ride_construction_invalidate_current_track(); } // Check back of the track track_get_back(input, &trackBack); trackType = track_element_get_type(trackBack.element); - if (!(TrackSequenceProperties[trackType][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) { + if (!(TrackSequenceProperties[trackType][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) + { return false; } ride->chairlift_bullwheel_location[0].x = trackBack.x >> 5; @@ -4352,7 +4638,8 @@ static bool ride_check_start_and_end_is_station(CoordsXYE * input) // Check front of the track track_get_front(input, &trackFront); trackType = track_element_get_type(trackFront.element); - if (!(TrackSequenceProperties[trackType][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) { + if (!(TrackSequenceProperties[trackType][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) + { return false; } ride->chairlift_bullwheel_location[1].x = trackFront.x >> 5; @@ -4366,18 +4653,20 @@ static bool ride_check_start_and_end_is_station(CoordsXYE * input) * station or the last track piece from the end of the direction. * rct2: 0x006B4D39 */ -static void ride_set_boat_hire_return_point(Ride * ride, CoordsXYE * startElement) +static void ride_set_boat_hire_return_point(Ride* ride, CoordsXYE* startElement) { int32_t trackType = -1; int32_t returnX = startElement->x; int32_t returnY = startElement->y; int32_t startX = returnX; int32_t startY = returnY; - rct_tile_element *returnTrackElement = startElement->element; + rct_tile_element* returnTrackElement = startElement->element; track_begin_end trackBeginEnd; - while (track_block_get_previous(returnX, returnY, returnTrackElement, &trackBeginEnd)) { + while (track_block_get_previous(returnX, returnY, returnTrackElement, &trackBeginEnd)) + { // If previous track is back to the starting x, y, then break loop (otherwise possible infinite loop) - if (trackType != -1 && startX == trackBeginEnd.begin_x && startY == trackBeginEnd.begin_y) break; + if (trackType != -1 && startX == trackBeginEnd.begin_x && startY == trackBeginEnd.begin_y) + break; int32_t x = trackBeginEnd.begin_x; int32_t y = trackBeginEnd.begin_y; @@ -4400,22 +4689,24 @@ static void ride_set_boat_hire_return_point(Ride * ride, CoordsXYE * startElemen * * rct2: 0x006B4D39 */ -static void ride_set_maze_entrance_exit_points(Ride *ride) +static void ride_set_maze_entrance_exit_points(Ride* ride) { // Needs room for an entrance and an exit per station, plus one position for the list terminator. TileCoordsXYZD positions[(MAX_STATIONS * 2) + 1]; // Create a list of all the entrance and exit positions - TileCoordsXYZD * position = positions; + TileCoordsXYZD* position = positions; for (int32_t i = 0; i < MAX_STATIONS; i++) { const auto entrance = ride_get_entrance_location(ride, i); const auto exit = ride_get_exit_location(ride, i); - if (!entrance.isNull()) { + if (!entrance.isNull()) + { *position++ = entrance; } - if (!exit.isNull()) { + if (!exit.isNull()) + { *position++ = exit; } } @@ -4428,16 +4719,18 @@ static void ride_set_maze_entrance_exit_points(Ride *ride) int32_t y = (*position).y << 5; int32_t z = (*position).z; - rct_tile_element *tileElement = map_get_first_element_at((*position).x, (*position).y); - do { - if (tileElement->GetType() != TILE_ELEMENT_TYPE_ENTRANCE) continue; - if ( - tileElement->properties.entrance.type != ENTRANCE_TYPE_RIDE_ENTRANCE && - tileElement->properties.entrance.type != ENTRANCE_TYPE_RIDE_EXIT - ) { + rct_tile_element* tileElement = map_get_first_element_at((*position).x, (*position).y); + do + { + if (tileElement->GetType() != TILE_ELEMENT_TYPE_ENTRANCE) + continue; + if (tileElement->properties.entrance.type != ENTRANCE_TYPE_RIDE_ENTRANCE + && tileElement->properties.entrance.type != ENTRANCE_TYPE_RIDE_EXIT) + { continue; } - if (tileElement->base_height != z) continue; + if (tileElement->base_height != z) + continue; maze_entrance_hedge_removal(x, y, tileElement); } while (!(tileElement++)->IsLastForTile()); @@ -4448,43 +4741,48 @@ static void ride_set_maze_entrance_exit_points(Ride *ride) * Sets a flag on all the track elements that can be the start of a circuit block. i.e. where a train can start. * rct2: 0x006B4E6B */ -static void ride_set_block_points(CoordsXYE *startElement) +static void ride_set_block_points(CoordsXYE* startElement) { CoordsXYE currentElement = *startElement; - do { + do + { int32_t trackType = track_element_get_type(currentElement.element); - switch (trackType) { - case TRACK_ELEM_END_STATION: - case TRACK_ELEM_CABLE_LIFT_HILL: - case TRACK_ELEM_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_60_DEG_UP_TO_FLAT: - case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: - case TRACK_ELEM_BLOCK_BRAKES: - currentElement.element->flags &= ~(1 << 5); - break; + switch (trackType) + { + case TRACK_ELEM_END_STATION: + case TRACK_ELEM_CABLE_LIFT_HILL: + case TRACK_ELEM_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_60_DEG_UP_TO_FLAT: + case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: + case TRACK_ELEM_BLOCK_BRAKES: + currentElement.element->flags &= ~(1 << 5); + break; } - } while (track_block_get_next(¤tElement, ¤tElement, nullptr, nullptr) && currentElement.element != startElement->element); + } while (track_block_get_next(¤tElement, ¤tElement, nullptr, nullptr) + && currentElement.element != startElement->element); } /** * * rct2: 0x006B4D26 */ -static void ride_set_start_finish_points(int32_t rideIndex, CoordsXYE *startElement) +static void ride_set_start_finish_points(int32_t rideIndex, CoordsXYE* startElement) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); - switch (ride->type) { - case RIDE_TYPE_BOAT_HIRE: - ride_set_boat_hire_return_point(ride, startElement); - break; - case RIDE_TYPE_MAZE: - ride_set_maze_entrance_exit_points(ride); - break; + switch (ride->type) + { + case RIDE_TYPE_BOAT_HIRE: + ride_set_boat_hire_return_point(ride, startElement); + break; + case RIDE_TYPE_MAZE: + ride_set_maze_entrance_exit_points(ride); + break; } - if (ride_is_block_sectioned(ride) && !(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) { + if (ride_is_block_sectioned(ride) && !(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) + { ride_set_block_points(startElement); } } @@ -4501,29 +4799,21 @@ static int32_t count_free_misc_sprite_slots() } static constexpr const LocationXY16 word_9A3AB4[4] = { - { 0, 0 }, - { 0, -96 }, + { 0, 0 }, + { 0, -96 }, { -96, -96 }, - { -96, 0 }, + { -96, 0 }, }; static constexpr const LocationXY16 word_9A2A60[] = { - { 0, 16 }, - { 16, 31 }, - { 31, 16 }, - { 16, 0 }, - { 16, 16 }, - { 64, 64 }, - { 64, -32 }, - { -32, -32 }, - { -32, 64 }, + { 0, 16 }, { 16, 31 }, { 31, 16 }, { 16, 0 }, { 16, 16 }, { 64, 64 }, { 64, -32 }, { -32, -32 }, { -32, 64 }, }; /** * * rct2: 0x006DD90D */ -static rct_vehicle *vehicle_create_car( +static rct_vehicle* vehicle_create_car( int32_t rideIndex, int32_t vehicleEntryIndex, int32_t carIndex, @@ -4531,15 +4821,15 @@ static rct_vehicle *vehicle_create_car( int32_t x, int32_t y, int32_t z, - int32_t *remainingDistance, - rct_tile_element *tileElement -) { - Ride *ride = get_ride(rideIndex); - rct_ride_entry *rideEntry = get_ride_entry(ride->subtype); - rct_ride_entry_vehicle *vehicleEntry = &rideEntry->vehicles[vehicleEntryIndex]; + int32_t* remainingDistance, + rct_tile_element* tileElement) +{ + Ride* ride = get_ride(rideIndex); + rct_ride_entry* rideEntry = get_ride_entry(ride->subtype); + rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicleEntryIndex]; int32_t edx; - rct_vehicle *vehicle = (rct_vehicle*)create_sprite(1); + rct_vehicle* vehicle = (rct_vehicle*)create_sprite(1); vehicle->sprite_identifier = SPRITE_IDENTIFIER_VEHICLE; vehicle->ride = rideIndex; vehicle->ride_subtype = ride->subtype; @@ -4550,7 +4840,8 @@ static rct_vehicle *vehicle_create_car( edx = vehicleEntry->spacing >> 1; *remainingDistance -= edx; vehicle->remaining_distance = *remainingDistance; - if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_GO_KART)) { + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_GO_KART)) + { *remainingDistance -= edx; } @@ -4582,11 +4873,13 @@ static rct_vehicle *vehicle_create_car( vehicle->bank_rotation = 0; vehicle->target_seat_rotation = 4; vehicle->seat_rotation = 4; - for (int32_t i = 0; i < 32; i++) { + for (int32_t i = 0; i < 32; i++) + { vehicle->peep[i] = SPRITE_INDEX_NULL; } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_DODGEM_CAR_PLACEMENT) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_DODGEM_CAR_PLACEMENT) + { // loc_6DDCA4: vehicle->var_CD = 0; int32_t direction = tile_element_get_direction(tileElement); @@ -4608,38 +4901,48 @@ static rct_vehicle *vehicle_create_car( LocationXY16 chosenLoc; // loc_6DDD26: - do { + do + { vehicle->sprite_direction = scenario_rand() & 0x1E; chosenLoc.y = y + (scenario_rand() & 0xFF); chosenLoc.x = x + (scenario_rand() & 0xFF); } while (vehicle_update_dodgems_collision(vehicle, chosenLoc.x, chosenLoc.y, nullptr)); sprite_move(chosenLoc.x, chosenLoc.y, z, (rct_sprite*)vehicle); - } else { + } + else + { int16_t dl = 0; - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_CHAIRLIFT) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_CHAIRLIFT) + { dl = 1; } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_GO_KART) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_GO_KART) + { // Choose which lane Go Kart should start in dl = 5; - if (vehicleIndex & 1) { + if (vehicleIndex & 1) + { dl = 6; } } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_MINI_GOLF) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_MINI_GOLF) + { dl = 9; vehicle->var_D3 = 0; vehicle->mini_golf_current_animation = 0; vehicle->mini_golf_flags = 0; } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_4) { - if (!vehicle->is_child) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_4) + { + if (!vehicle->is_child) + { dl = 15; } } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_5) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_5) + { dl = 16; } vehicle->var_CD = dl; @@ -4650,15 +4953,24 @@ static rct_vehicle *vehicle_create_car( int32_t direction = tile_element_get_direction(tileElement); vehicle->sprite_direction = direction << 3; - if (ride->type == RIDE_TYPE_SPACE_RINGS) { + if (ride->type == RIDE_TYPE_SPACE_RINGS) + { direction = 4; - } else { - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_16)) { - if (RideConstructionDefaultTrackType[ride->type] != FLAT_TRACK_ELEM_1_X_4_B) { - if (RideConstructionDefaultTrackType[ride->type] != FLAT_TRACK_ELEM_1_X_4_A) { - if (ride->type == RIDE_TYPE_ENTERPRISE) { + } + else + { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_16)) + { + if (RideConstructionDefaultTrackType[ride->type] != FLAT_TRACK_ELEM_1_X_4_B) + { + if (RideConstructionDefaultTrackType[ride->type] != FLAT_TRACK_ELEM_1_X_4_A) + { + if (ride->type == RIDE_TYPE_ENTERPRISE) + { direction += 5; - } else { + } + else + { direction = 4; } } @@ -4677,7 +4989,8 @@ static rct_vehicle *vehicle_create_car( sprite_move(x, y, z, (rct_sprite*)vehicle); vehicle->track_type = (track_element_get_type(tileElement) << 2) | (vehicle->sprite_direction >> 3); vehicle->track_progress = 31; - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_MINI_GOLF) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_MINI_GOLF) + { vehicle->track_progress = 15; } vehicle->update_flags = VEHICLE_UPDATE_FLAG_1; @@ -4702,17 +5015,29 @@ static rct_vehicle *vehicle_create_car( * * rct2: 0x006DD84C */ -static train_ref vehicle_create_train(int32_t rideIndex, int32_t x, int32_t y, int32_t z, int32_t vehicleIndex, int32_t *remainingDistance, rct_tile_element *tileElement) +static train_ref vehicle_create_train( + int32_t rideIndex, + int32_t x, + int32_t y, + int32_t z, + int32_t vehicleIndex, + int32_t* remainingDistance, + rct_tile_element* tileElement) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); train_ref train = { nullptr, nullptr }; - for (int32_t carIndex = 0; carIndex < ride->num_cars_per_train; carIndex++) { + for (int32_t carIndex = 0; carIndex < ride->num_cars_per_train; carIndex++) + { const uint8_t vehicle = ride_entry_get_vehicle_at_position(ride->subtype, ride->num_cars_per_train, carIndex); - rct_vehicle *car = vehicle_create_car(rideIndex, vehicle, carIndex, vehicleIndex, x, y, z, remainingDistance, tileElement); - if (carIndex == 0) { + rct_vehicle* car + = vehicle_create_car(rideIndex, vehicle, carIndex, vehicleIndex, x, y, z, remainingDistance, tileElement); + if (carIndex == 0) + { train.head = car; - } else { + } + else + { // Link the previous car with this car train.tail->next_vehicle_on_train = car->sprite_index; train.tail->next_vehicle_on_ride = car->sprite_index; @@ -4723,21 +5048,26 @@ static train_ref vehicle_create_train(int32_t rideIndex, int32_t x, int32_t y, i return train; } -static void vehicle_create_trains(int32_t rideIndex, int32_t x, int32_t y, int32_t z, rct_tile_element *tileElement) +static void vehicle_create_trains(int32_t rideIndex, int32_t x, int32_t y, int32_t z, rct_tile_element* tileElement) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); train_ref firstTrain = {}; train_ref lastTrain = {}; int32_t remainingDistance = 0; - for (int32_t vehicleIndex = 0; vehicleIndex < ride->num_vehicles; vehicleIndex++) { - if (ride_is_block_sectioned(ride)) { + for (int32_t vehicleIndex = 0; vehicleIndex < ride->num_vehicles; vehicleIndex++) + { + if (ride_is_block_sectioned(ride)) + { remainingDistance = 0; } train_ref train = vehicle_create_train(rideIndex, x, y, z, vehicleIndex, &remainingDistance, tileElement); - if (vehicleIndex == 0) { + if (vehicleIndex == 0) + { firstTrain = train; - } else { + } + else + { // Link the end of the previous train with the front of this train lastTrain.tail->next_vehicle_on_ride = train.head->sprite_index; train.head->prev_vehicle_on_ride = lastTrain.tail->sprite_index; @@ -4746,8 +5076,10 @@ static void vehicle_create_trains(int32_t rideIndex, int32_t x, int32_t y, int32 // Add train to ride vehicle list move_sprite_to_list((rct_sprite*)train.head, SPRITE_LIST_TRAIN * 2); - for (int32_t i = 0; i < MAX_VEHICLES_PER_RIDE; i++) { - if (ride->vehicles[i] == SPRITE_INDEX_NULL) { + for (int32_t i = 0; i < MAX_VEHICLES_PER_RIDE; i++) + { + if (ride->vehicles[i] == SPRITE_INDEX_NULL) + { ride->vehicles[i] = train.head->sprite_index; break; } @@ -4761,13 +5093,15 @@ static void vehicle_create_trains(int32_t rideIndex, int32_t x, int32_t y, int32 lastTrain.tail->next_vehicle_on_ride = firstTrain.head->sprite_index; } -static void vehicle_unset_update_flag_b1(rct_vehicle *head) +static void vehicle_unset_update_flag_b1(rct_vehicle* head) { - rct_vehicle *vehicle = head; - while (true) { + rct_vehicle* vehicle = head; + while (true) + { vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_1; uint16_t spriteIndex = vehicle->next_vehicle_on_train; - if (spriteIndex == SPRITE_INDEX_NULL) { + if (spriteIndex == SPRITE_INDEX_NULL) + { break; } vehicle = GET_VEHICLE(spriteIndex); @@ -4778,62 +5112,73 @@ static void vehicle_unset_update_flag_b1(rct_vehicle *head) * * rct2: 0x006DDE9E */ -static void ride_create_vehicles_find_first_block(Ride *ride, CoordsXYE *outXYElement) +static void ride_create_vehicles_find_first_block(Ride* ride, CoordsXYE* outXYElement) { - rct_vehicle *vehicle = GET_VEHICLE(ride->vehicles[0]); + rct_vehicle* vehicle = GET_VEHICLE(ride->vehicles[0]); int32_t firstX = vehicle->track_x; int32_t firstY = vehicle->track_y; int32_t firstZ = vehicle->track_z; - rct_tile_element *firstElement = map_get_track_element_at(firstX, firstY, firstZ / 8); + rct_tile_element* firstElement = map_get_track_element_at(firstX, firstY, firstZ / 8); assert(firstElement != nullptr); int32_t x = firstX; int32_t y = firstY; - rct_tile_element *trackElement = firstElement; + rct_tile_element* trackElement = firstElement; track_begin_end trackBeginEnd; - while (track_block_get_previous(x, y, trackElement, &trackBeginEnd)) { + while (track_block_get_previous(x, y, trackElement, &trackBeginEnd)) + { x = trackBeginEnd.end_x; y = trackBeginEnd.end_y; trackElement = trackBeginEnd.begin_element; - if (x == firstX && y == firstY && trackElement == firstElement) { + if (x == firstX && y == firstY && trackElement == firstElement) + { break; } int32_t trackType = track_element_get_type(trackElement); - switch (trackType) { - case TRACK_ELEM_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_60_DEG_UP_TO_FLAT: - if (track_element_is_lift_hill(trackElement)) { + switch (trackType) + { + case TRACK_ELEM_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_60_DEG_UP_TO_FLAT: + if (track_element_is_lift_hill(trackElement)) + { + outXYElement->x = x; + outXYElement->y = y; + outXYElement->element = trackElement; + return; + } + break; + case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: + if (track_element_is_lift_hill(trackElement)) + { + rct_tile_element* tileElement + = map_get_first_element_at(trackBeginEnd.begin_x >> 5, trackBeginEnd.begin_y >> 5); + do + { + if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) + continue; + if (track_element_get_type(tileElement) != trackType) + continue; + if (tile_element_get_track_sequence(tileElement) != 0) + continue; + if (tileElement->base_height != trackBeginEnd.begin_z / 8) + continue; + outXYElement->x = trackBeginEnd.begin_x; + outXYElement->y = trackBeginEnd.begin_y; + outXYElement->element = tileElement; + return; + } while (!(tileElement++)->IsLastForTile()); + } + break; + case TRACK_ELEM_END_STATION: + case TRACK_ELEM_CABLE_LIFT_HILL: + case TRACK_ELEM_BLOCK_BRAKES: outXYElement->x = x; outXYElement->y = y; outXYElement->element = trackElement; return; - } - break; - case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: - if (track_element_is_lift_hill(trackElement)) { - rct_tile_element *tileElement = map_get_first_element_at(trackBeginEnd.begin_x >> 5, trackBeginEnd.begin_y >> 5); - do { - if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; - if (track_element_get_type(tileElement) != trackType) continue; - if (tile_element_get_track_sequence(tileElement) != 0) continue; - if (tileElement->base_height != trackBeginEnd.begin_z / 8) continue; - outXYElement->x = trackBeginEnd.begin_x; - outXYElement->y = trackBeginEnd.begin_y; - outXYElement->element = tileElement; - return; - } while (!(tileElement++)->IsLastForTile()); - } - break; - case TRACK_ELEM_END_STATION: - case TRACK_ELEM_CABLE_LIFT_HILL: - case TRACK_ELEM_BLOCK_BRAKES: - outXYElement->x = x; - outXYElement->y = y; - outXYElement->element = trackElement; - return; } } @@ -4846,39 +5191,46 @@ static void ride_create_vehicles_find_first_block(Ride *ride, CoordsXYE *outXYEl * * rct2: 0x006DD84C */ -static bool ride_create_vehicles(Ride *ride, int32_t rideIndex, CoordsXYE *element, int32_t isApplying) +static bool ride_create_vehicles(Ride* ride, int32_t rideIndex, CoordsXYE* element, int32_t isApplying) { ride_update_max_vehicles(rideIndex); - if (ride->subtype == RIDE_ENTRY_INDEX_NULL) { + if (ride->subtype == RIDE_ENTRY_INDEX_NULL) + { return true; } // Check if there are enough free sprite slots for all the vehicles int32_t totalCars = ride->num_vehicles * ride->num_cars_per_train; - if (totalCars > count_free_misc_sprite_slots()) { + if (totalCars > count_free_misc_sprite_slots()) + { gGameCommandErrorText = STR_UNABLE_TO_CREATE_ENOUGH_VEHICLES; return false; } - if (!isApplying) { + if (!isApplying) + { return true; } - rct_tile_element *tileElement = element->element; + rct_tile_element* tileElement = element->element; int32_t x = element->x; int32_t y = element->y; int32_t z = element->element->base_height; int32_t direction = tile_element_get_direction(tileElement); // - if (ride->mode == RIDE_MODE_STATION_TO_STATION) { + if (ride->mode == RIDE_MODE_STATION_TO_STATION) + { x = element->x - CoordsDirectionDelta[direction].x; y = element->y - CoordsDirectionDelta[direction].y; tileElement = map_get_first_element_at(x >> 5, y >> 5); - do { - if (tileElement->base_height != z) continue; - if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; + do + { + if (tileElement->base_height != z) + continue; + if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) + continue; break; } while (!(tileElement++)->IsLastForTile()); @@ -4890,25 +5242,32 @@ static bool ride_create_vehicles(Ride *ride, int32_t rideIndex, CoordsXYE *eleme // return true; // Initialise station departs -// 006DDDD0: + // 006DDDD0: ride->lifecycle_flags |= RIDE_LIFECYCLE_ON_TRACK; - for (int32_t i = 0; i < MAX_STATIONS; i++) { + for (int32_t i = 0; i < MAX_STATIONS; i++) + { ride->station_depart[i] = (ride->station_depart[i] & 0x80) | 1; } // - if (ride->type != RIDE_TYPE_SPACE_RINGS && !ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_16)) { - if (ride_is_block_sectioned(ride)) { + if (ride->type != RIDE_TYPE_SPACE_RINGS && !ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_16)) + { + if (ride_is_block_sectioned(ride)) + { CoordsXYE firstBlock; ride_create_vehicles_find_first_block(ride, &firstBlock); loc_6DDF9C(ride, firstBlock.element); - } else { - for (int32_t i = 0; i < ride->num_vehicles; i++) { - rct_vehicle *vehicle = GET_VEHICLE(ride->vehicles[i]); + } + else + { + for (int32_t i = 0; i < ride->num_vehicles; i++) + { + rct_vehicle* vehicle = GET_VEHICLE(ride->vehicles[i]); - rct_ride_entry_vehicle *vehicleEntry = vehicle_get_vehicle_entry(vehicle); + rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); - if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_DODGEM_CAR_PLACEMENT)) { + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_DODGEM_CAR_PLACEMENT)) + { vehicle_update_track_motion(vehicle, nullptr); } @@ -4924,13 +5283,15 @@ static bool ride_create_vehicles(Ride *ride, int32_t rideIndex, CoordsXYE *eleme * * rct2: 0x006DDF9C */ -void loc_6DDF9C(Ride *ride, rct_tile_element *tileElement) +void loc_6DDF9C(Ride* ride, rct_tile_element* tileElement) { rct_vehicle *train, *car; - for (int32_t i = 0; i < ride->num_vehicles; i++) { + for (int32_t i = 0; i < ride->num_vehicles; i++) + { train = GET_VEHICLE(ride->vehicles[i]); - if (i == 0) { + if (i == 0) + { vehicle_update_track_motion(train, nullptr); vehicle_unset_update_flag_b1(train); continue; @@ -4938,17 +5299,20 @@ void loc_6DDF9C(Ride *ride, rct_tile_element *tileElement) vehicle_update_track_motion(train, nullptr); - do { + do + { tileElement->flags |= TILE_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED; car = train; - while (true) { + while (true) + { car->velocity = 0; car->acceleration = 0; car->swing_sprite = 0; car->remaining_distance += 13962; uint16_t spriteIndex = car->next_vehicle_on_train; - if (spriteIndex == SPRITE_INDEX_NULL) { + if (spriteIndex == SPRITE_INDEX_NULL) + { break; } car = GET_VEHICLE(spriteIndex); @@ -4957,15 +5321,18 @@ void loc_6DDF9C(Ride *ride, rct_tile_element *tileElement) tileElement->flags |= TILE_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED; car = train; - while (true) { + while (true) + { car->update_flags &= ~VEHICLE_UPDATE_FLAG_1; car->status = VEHICLE_STATUS_TRAVELLING; - if ((car->track_type >> 2) == TRACK_ELEM_END_STATION) { + if ((car->track_type >> 2) == TRACK_ELEM_END_STATION) + { car->status = VEHICLE_STATUS_MOVING_TO_END_OF_STATION; } uint16_t spriteIndex = car->next_vehicle_on_train; - if (spriteIndex == SPRITE_INDEX_NULL) { + if (spriteIndex == SPRITE_INDEX_NULL) + { break; } car = GET_VEHICLE(spriteIndex); @@ -4978,14 +5345,17 @@ void loc_6DDF9C(Ride *ride, rct_tile_element *tileElement) * appropriate track. * rct2: 0x006D31A6 */ -static bool ride_initialise_cable_lift_track(Ride *ride, bool isApplying) +static bool ride_initialise_cable_lift_track(Ride* ride, bool isApplying) { LocationXY8 location; int32_t stationIndex; - for (stationIndex = 0; stationIndex < MAX_STATIONS; stationIndex++) { + for (stationIndex = 0; stationIndex < MAX_STATIONS; stationIndex++) + { location = ride->station_starts[stationIndex]; - if (location.xy != RCT_XY8_UNDEFINED) break; - if (stationIndex == 3) { + if (location.xy != RCT_XY8_UNDEFINED) + break; + if (stationIndex == 3) + { gGameCommandErrorText = STR_CABLE_LIFT_HILL_MUST_START_IMMEDIATELY_AFTER_STATION; return false; } @@ -4996,12 +5366,16 @@ static bool ride_initialise_cable_lift_track(Ride *ride, bool isApplying) int32_t z = ride->station_heights[stationIndex]; bool success = false; - rct_tile_element *tileElement = map_get_first_element_at(location.x, location.y); - do { - if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; - if (tileElement->base_height != z) continue; + rct_tile_element* tileElement = map_get_first_element_at(location.x, location.y); + do + { + if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) + continue; + if (tileElement->base_height != z) + continue; - if (!(TrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) { + if (!(TrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) + { continue; } success = true; @@ -5011,7 +5385,8 @@ static bool ride_initialise_cable_lift_track(Ride *ride, bool isApplying) if (!success) return false; - enum { + enum + { STATE_FIND_CABLE_LIFT, STATE_FIND_STATION, STATE_REST_OF_TRACK @@ -5020,42 +5395,47 @@ static bool ride_initialise_cable_lift_track(Ride *ride, bool isApplying) track_circuit_iterator it; track_circuit_iterator_begin(&it, { x, y, tileElement }); - while (track_circuit_iterator_previous(&it)) { + while (track_circuit_iterator_previous(&it)) + { tileElement = it.current.element; int32_t trackType = track_element_get_type(tileElement); uint16_t flags = 16; - switch (state) { - case STATE_FIND_CABLE_LIFT: - // Search for a cable lift hill track element - if (trackType == TRACK_ELEM_CABLE_LIFT_HILL) { - flags = 8; - state = STATE_FIND_STATION; - } - break; - case STATE_FIND_STATION: - // Search for the start of the hill - switch (trackType) { - case TRACK_ELEM_FLAT: - case TRACK_ELEM_25_DEG_UP: - case TRACK_ELEM_60_DEG_UP: - case TRACK_ELEM_FLAT_TO_25_DEG_UP: - case TRACK_ELEM_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP: - case TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP: - case TRACK_ELEM_FLAT_TO_60_DEG_UP_LONG_BASE: - flags = 8; + switch (state) + { + case STATE_FIND_CABLE_LIFT: + // Search for a cable lift hill track element + if (trackType == TRACK_ELEM_CABLE_LIFT_HILL) + { + flags = 8; + state = STATE_FIND_STATION; + } break; - case TRACK_ELEM_END_STATION: - state = STATE_REST_OF_TRACK; + case STATE_FIND_STATION: + // Search for the start of the hill + switch (trackType) + { + case TRACK_ELEM_FLAT: + case TRACK_ELEM_25_DEG_UP: + case TRACK_ELEM_60_DEG_UP: + case TRACK_ELEM_FLAT_TO_25_DEG_UP: + case TRACK_ELEM_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP: + case TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP: + case TRACK_ELEM_FLAT_TO_60_DEG_UP_LONG_BASE: + flags = 8; + break; + case TRACK_ELEM_END_STATION: + state = STATE_REST_OF_TRACK; + break; + default: + gGameCommandErrorText = STR_CABLE_LIFT_HILL_MUST_START_IMMEDIATELY_AFTER_STATION; + return false; + } break; - default: - gGameCommandErrorText = STR_CABLE_LIFT_HILL_MUST_START_IMMEDIATELY_AFTER_STATION; - return false; - } - break; } - if (isApplying) { + if (isApplying) + { z = tileElement->base_height * 8; int32_t direction = tile_element_get_direction(tileElement); trackType = track_element_get_type(tileElement); @@ -5073,48 +5453,55 @@ static bool ride_initialise_cable_lift_track(Ride *ride, bool isApplying) */ static bool ride_create_cable_lift(int32_t rideIndex, bool isApplying) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); - if (ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED && - ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT - ) { + if (ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED && ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT) + { gGameCommandErrorText = STR_CABLE_LIFT_UNABLE_TO_WORK_IN_THIS_OPERATING_MODE; return false; } - if (ride->num_circuits > 1) { + if (ride->num_circuits > 1) + { gGameCommandErrorText = STR_MULTICIRCUIT_NOT_POSSIBLE_WITH_CABLE_LIFT_HILL; return false; } - if (count_free_misc_sprite_slots() <= 5) { + if (count_free_misc_sprite_slots() <= 5) + { gGameCommandErrorText = STR_UNABLE_TO_CREATE_ENOUGH_VEHICLES; return false; } - if (!ride_initialise_cable_lift_track(ride, isApplying)) { + if (!ride_initialise_cable_lift_track(ride, isApplying)) + { return false; } - if (!isApplying) { + if (!isApplying) + { return true; } int32_t x = ride->cable_lift_x; int32_t y = ride->cable_lift_y; int32_t z = ride->cable_lift_z; - rct_tile_element *tileElement = map_get_first_element_at(x >> 5, y >> 5); - do { - if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; - if (tileElement->base_height != z) continue; + rct_tile_element* tileElement = map_get_first_element_at(x >> 5, y >> 5); + do + { + if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) + continue; + if (tileElement->base_height != z) + continue; break; } while (!(tileElement++)->IsLastForTile()); int32_t direction = tile_element_get_direction(tileElement); - rct_vehicle *head = nullptr; - rct_vehicle *tail = nullptr; + rct_vehicle* head = nullptr; + rct_vehicle* tail = nullptr; uint32_t ebx = 0; - for (int32_t i = 0; i < 5; i++) { + for (int32_t i = 0; i < 5; i++) + { uint32_t edx = ror32(0x15478, 10); uint16_t var_44 = edx & 0xFFFF; edx = rol32(edx, 10) >> 1; @@ -5122,11 +5509,14 @@ static bool ride_create_cable_lift(int32_t rideIndex, bool isApplying) int32_t remaining_distance = ebx; ebx -= edx; - rct_vehicle *current = cable_lift_segment_create(rideIndex, x, y, z, direction, var_44, remaining_distance, i == 0); + rct_vehicle* current = cable_lift_segment_create(rideIndex, x, y, z, direction, var_44, remaining_distance, i == 0); current->next_vehicle_on_train = SPRITE_INDEX_NULL; - if (i == 0) { + if (i == 0) + { head = current; - } else { + } + else + { tail->next_vehicle_on_train = current->sprite_index; tail->next_vehicle_on_ride = current->sprite_index; current->prev_vehicle_on_ride = tail->sprite_index; @@ -5147,27 +5537,30 @@ static bool ride_create_cable_lift(int32_t rideIndex, bool isApplying) */ static void loc_6B51C0(int32_t rideIndex) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); if (gUnk141F568 != gUnk13CA740) return; - rct_window *w = window_get_main(); + rct_window* w = window_get_main(); if (w == nullptr) return; int8_t entranceOrExit = -1; int32_t i; - for (i = 0; i < MAX_STATIONS; i++) { + for (i = 0; i < MAX_STATIONS; i++) + { if (ride->station_starts[i].xy == RCT_XY8_UNDEFINED) continue; - if (ride_get_entrance_location(rideIndex, i).isNull()) { + if (ride_get_entrance_location(rideIndex, i).isNull()) + { entranceOrExit = 0; break; } - if (ride_get_exit_location(rideIndex, i).isNull()) { + if (ride_get_exit_location(rideIndex, i).isNull()) + { entranceOrExit = 1; break; } @@ -5176,7 +5569,8 @@ static void loc_6B51C0(int32_t rideIndex) if (entranceOrExit == -1) return; - if (ride->type != RIDE_TYPE_MAZE) { + if (ride->type != RIDE_TYPE_MAZE) + { int32_t x = ride->station_starts[i].x * 32; int32_t y = ride->station_starts[i].y * 32; int32_t z = ride->station_heights[i] * 8; @@ -5186,7 +5580,8 @@ static void loc_6B51C0(int32_t rideIndex) ride_try_get_origin_element(rideIndex, &trackElement); ride_find_track_gap(&trackElement, &trackElement); int32_t ok = ride_modify(&trackElement); - if (ok == 0) { + if (ok == 0) + { return; } @@ -5200,11 +5595,13 @@ static void loc_6B51C0(int32_t rideIndex) * * rct2: 0x006B528A */ -static void ride_scroll_to_track_error(CoordsXYE *trackElement) +static void ride_scroll_to_track_error(CoordsXYE* trackElement) { - if (!gGameCommandIsNetworked && gUnk141F568 == gUnk13CA740) { - rct_window *w = window_get_main(); - if (w != nullptr) { + if (!gGameCommandIsNetworked && gUnk141F568 == gUnk13CA740) + { + rct_window* w = window_get_main(); + if (w != nullptr) + { window_scroll_to_location(w, trackElement->x, trackElement->y, trackElement->element->base_height * 8); ride_modify(trackElement); } @@ -5215,18 +5612,22 @@ static void ride_scroll_to_track_error(CoordsXYE *trackElement) * * rct2: 0x006B4F6B */ -static rct_tile_element *loc_6B4F6B(int32_t rideIndex, int32_t x, int32_t y) +static rct_tile_element* loc_6B4F6B(int32_t rideIndex, int32_t x, int32_t y) { - Ride * ride = get_ride(rideIndex); - rct_tile_element *tileElement = map_get_first_element_at(x / 32, y / 32); - do { + Ride* ride = get_ride(rideIndex); + rct_tile_element* tileElement = map_get_first_element_at(x / 32, y / 32); + do + { if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; - if (RideProperties[ride->type].flags & RIDE_TYPE_FLAG_FLAT_RIDE) { + if (RideProperties[ride->type].flags & RIDE_TYPE_FLAG_FLAT_RIDE) + { if (!(FlatRideTrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) continue; - } else { + } + else + { if (!(TrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) continue; } @@ -5241,7 +5642,7 @@ static rct_tile_element *loc_6B4F6B(int32_t rideIndex, int32_t x, int32_t y) int32_t ride_is_valid_for_test(int32_t rideIndex, int32_t goingToBeOpen, int32_t isApplying) { int32_t stationIndex; - Ride *ride; + Ride* ride; CoordsXYE trackElement, problematicTrackElement = {}; ride = get_ride(rideIndex); @@ -5254,17 +5655,20 @@ int32_t ride_is_valid_for_test(int32_t rideIndex, int32_t goingToBeOpen, int32_t window_close_by_number(WC_RIDE_CONSTRUCTION, rideIndex); stationIndex = ride_mode_check_station_present(ride); - if (stationIndex == -1)return 0; + if (stationIndex == -1) + return 0; if (!ride_mode_check_valid_station_numbers(ride)) return 0; - if (!ride_check_for_entrance_exit(rideIndex)) { + if (!ride_check_for_entrance_exit(rideIndex)) + { loc_6B51C0(rideIndex); return 0; } - if (goingToBeOpen && isApplying) { + if (goingToBeOpen && isApplying) + { sub_6B5952(rideIndex); ride->lifecycle_flags |= RIDE_LIFECYCLE_EVER_BEEN_OPENED; } @@ -5273,68 +5677,76 @@ int32_t ride_is_valid_for_test(int32_t rideIndex, int32_t goingToBeOpen, int32_t trackElement.x = ride->station_starts[stationIndex].x * 32; trackElement.y = ride->station_starts[stationIndex].y * 32; trackElement.element = loc_6B4F6B(rideIndex, trackElement.x, trackElement.y); - if (trackElement.element == nullptr) { + if (trackElement.element == nullptr) + { // Maze is strange, station start is 0... investigation required if (ride->type != RIDE_TYPE_MAZE) return 0; } - if ( - ride->type == RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER || - ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT || - ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || - ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED - ) { - if (ride_find_track_gap(&trackElement, &problematicTrackElement) && (!gConfigGeneral.test_unfinished_tracks || - ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED)) { + if (ride->type == RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER || ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT + || ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) + { + if (ride_find_track_gap(&trackElement, &problematicTrackElement) + && (!gConfigGeneral.test_unfinished_tracks || ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED + || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED)) + { gGameCommandErrorText = STR_TRACK_IS_NOT_A_COMPLETE_CIRCUIT; ride_scroll_to_track_error(&problematicTrackElement); return 0; } } - if ( - ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || - ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED - ) { - if (!ride_check_block_brakes(&trackElement, &problematicTrackElement)) { + if (ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) + { + if (!ride_check_block_brakes(&trackElement, &problematicTrackElement)) + { ride_scroll_to_track_error(&problematicTrackElement); return 0; } } - if (ride->subtype != 255) { - rct_ride_entry *rideType = get_ride_entry(ride->subtype); - if (rideType->flags & RIDE_ENTRY_FLAG_NO_INVERSIONS) { + if (ride->subtype != 255) + { + rct_ride_entry* rideType = get_ride_entry(ride->subtype); + if (rideType->flags & RIDE_ENTRY_FLAG_NO_INVERSIONS) + { gGameCommandErrorText = STR_TRACK_UNSUITABLE_FOR_TYPE_OF_TRAIN; - if (ride_check_track_contains_inversions(&trackElement, &problematicTrackElement)) { + if (ride_check_track_contains_inversions(&trackElement, &problematicTrackElement)) + { ride_scroll_to_track_error(&problematicTrackElement); return 0; } } - if (rideType->flags & RIDE_ENTRY_FLAG_NO_BANKED_TRACK) { + if (rideType->flags & RIDE_ENTRY_FLAG_NO_BANKED_TRACK) + { gGameCommandErrorText = STR_TRACK_UNSUITABLE_FOR_TYPE_OF_TRAIN; - if (ride_check_track_contains_banked(&trackElement, &problematicTrackElement)) { + if (ride_check_track_contains_banked(&trackElement, &problematicTrackElement)) + { ride_scroll_to_track_error(&problematicTrackElement); return 0; } } } - if (ride->mode == RIDE_MODE_STATION_TO_STATION) { - if (!ride_find_track_gap(&trackElement, &problematicTrackElement)) { + if (ride->mode == RIDE_MODE_STATION_TO_STATION) + { + if (!ride_find_track_gap(&trackElement, &problematicTrackElement)) + { gGameCommandErrorText = STR_RIDE_MUST_START_AND_END_WITH_STATIONS; return 0; } gGameCommandErrorText = STR_STATION_NOT_LONG_ENOUGH; - if (!ride_check_station_length(&trackElement, &problematicTrackElement)) { + if (!ride_check_station_length(&trackElement, &problematicTrackElement)) + { ride_scroll_to_track_error(&problematicTrackElement); return 0; } gGameCommandErrorText = STR_RIDE_MUST_START_AND_END_WITH_STATIONS; - if (!ride_check_start_and_end_is_station(&trackElement)) { + if (!ride_check_start_and_end_is_station(&trackElement)) + { ride_scroll_to_track_error(&problematicTrackElement); return 0; } @@ -5343,20 +5755,18 @@ int32_t ride_is_valid_for_test(int32_t rideIndex, int32_t goingToBeOpen, int32_t if (isApplying) ride_set_start_finish_points(rideIndex, &trackElement); - if ( - !ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES) && - !(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK) - ) { - if (!ride_create_vehicles(ride, rideIndex, &trackElement, isApplying)) { + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES) && !(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) + { + if (!ride_create_vehicles(ride, rideIndex, &trackElement, isApplying)) + { return 0; } } - if ( - (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_ALLOW_CABLE_LIFT_HILL) && - (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED) && - !(ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT) - ) { + if ((RideData4[ride->type].flags & RIDE_TYPE_FLAG4_ALLOW_CABLE_LIFT_HILL) + && (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED) + && !(ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT)) + { if (!ride_create_cable_lift(rideIndex, isApplying)) return 0; } @@ -5370,7 +5780,7 @@ int32_t ride_is_valid_for_test(int32_t rideIndex, int32_t goingToBeOpen, int32_t int32_t ride_is_valid_for_open(int32_t rideIndex, int32_t goingToBeOpen, int32_t isApplying) { int32_t stationIndex; - Ride *ride; + Ride* ride; CoordsXYE trackElement, problematicTrackElement = {}; ride = get_ride(rideIndex); @@ -5379,23 +5789,25 @@ int32_t ride_is_valid_for_open(int32_t rideIndex, int32_t goingToBeOpen, int32_t // to set the track to its final state and clean up ghosts. // We can't just call close as it would cause a stack overflow during shop creation // with auto open on. - if (WC_RIDE_CONSTRUCTION == gCurrentToolWidget.window_classification && - rideIndex == gCurrentToolWidget.window_number && - (input_test_flag(INPUT_FLAG_TOOL_ACTIVE))) + if (WC_RIDE_CONSTRUCTION == gCurrentToolWidget.window_classification && rideIndex == gCurrentToolWidget.window_number + && (input_test_flag(INPUT_FLAG_TOOL_ACTIVE))) window_close_by_number(WC_RIDE_CONSTRUCTION, rideIndex); stationIndex = ride_mode_check_station_present(ride); - if (stationIndex == -1)return 0; + if (stationIndex == -1) + return 0; if (!ride_mode_check_valid_station_numbers(ride)) return 0; - if (!ride_check_for_entrance_exit(rideIndex)) { + if (!ride_check_for_entrance_exit(rideIndex)) + { loc_6B51C0(rideIndex); return 0; } - if (goingToBeOpen && isApplying) { + if (goingToBeOpen && isApplying) + { sub_6B5952(rideIndex); ride->lifecycle_flags |= RIDE_LIFECYCLE_EVER_BEEN_OPENED; } @@ -5404,68 +5816,75 @@ int32_t ride_is_valid_for_open(int32_t rideIndex, int32_t goingToBeOpen, int32_t trackElement.x = ride->station_starts[stationIndex].x * 32; trackElement.y = ride->station_starts[stationIndex].y * 32; trackElement.element = loc_6B4F6B(rideIndex, trackElement.x, trackElement.y); - if (trackElement.element == nullptr) { + if (trackElement.element == nullptr) + { // Maze is strange, station start is 0... investigation required if (ride->type != RIDE_TYPE_MAZE) return 0; } - if ( - ride->type == RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER || - ride->mode == RIDE_MODE_RACE || - ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT || - ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || - ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED - ) { - if (ride_find_track_gap(&trackElement, &problematicTrackElement)) { + if (ride->type == RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER || ride->mode == RIDE_MODE_RACE + || ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT || ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED + || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) + { + if (ride_find_track_gap(&trackElement, &problematicTrackElement)) + { gGameCommandErrorText = STR_TRACK_IS_NOT_A_COMPLETE_CIRCUIT; ride_scroll_to_track_error(&problematicTrackElement); return 0; } } - if ( - ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || - ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED - ) { - if (!ride_check_block_brakes(&trackElement, &problematicTrackElement)) { + if (ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) + { + if (!ride_check_block_brakes(&trackElement, &problematicTrackElement)) + { ride_scroll_to_track_error(&problematicTrackElement); return 0; } } - if (ride->subtype != 255) { - rct_ride_entry *rideType = get_ride_entry(ride->subtype); - if (rideType->flags & RIDE_ENTRY_FLAG_NO_INVERSIONS) { + if (ride->subtype != 255) + { + rct_ride_entry* rideType = get_ride_entry(ride->subtype); + if (rideType->flags & RIDE_ENTRY_FLAG_NO_INVERSIONS) + { gGameCommandErrorText = STR_TRACK_UNSUITABLE_FOR_TYPE_OF_TRAIN; - if (ride_check_track_contains_inversions(&trackElement, &problematicTrackElement)) { + if (ride_check_track_contains_inversions(&trackElement, &problematicTrackElement)) + { ride_scroll_to_track_error(&problematicTrackElement); return 0; } } - if (rideType->flags & RIDE_ENTRY_FLAG_NO_BANKED_TRACK) { + if (rideType->flags & RIDE_ENTRY_FLAG_NO_BANKED_TRACK) + { gGameCommandErrorText = STR_TRACK_UNSUITABLE_FOR_TYPE_OF_TRAIN; - if (ride_check_track_contains_banked(&trackElement, &problematicTrackElement)) { + if (ride_check_track_contains_banked(&trackElement, &problematicTrackElement)) + { ride_scroll_to_track_error(&problematicTrackElement); return 0; } } } - if (ride->mode == RIDE_MODE_STATION_TO_STATION) { - if (!ride_find_track_gap(&trackElement, &problematicTrackElement)) { + if (ride->mode == RIDE_MODE_STATION_TO_STATION) + { + if (!ride_find_track_gap(&trackElement, &problematicTrackElement)) + { gGameCommandErrorText = STR_RIDE_MUST_START_AND_END_WITH_STATIONS; return 0; } gGameCommandErrorText = STR_STATION_NOT_LONG_ENOUGH; - if (!ride_check_station_length(&trackElement, &problematicTrackElement)) { + if (!ride_check_station_length(&trackElement, &problematicTrackElement)) + { ride_scroll_to_track_error(&problematicTrackElement); return 0; } gGameCommandErrorText = STR_RIDE_MUST_START_AND_END_WITH_STATIONS; - if (!ride_check_start_and_end_is_station(&trackElement)) { + if (!ride_check_start_and_end_is_station(&trackElement)) + { ride_scroll_to_track_error(&problematicTrackElement); return 0; } @@ -5474,20 +5893,18 @@ int32_t ride_is_valid_for_open(int32_t rideIndex, int32_t goingToBeOpen, int32_t if (isApplying) ride_set_start_finish_points(rideIndex, &trackElement); - if ( - !ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES) && - !(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK) - ) { - if (!ride_create_vehicles(ride, rideIndex, &trackElement, isApplying)) { + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES) && !(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) + { + if (!ride_create_vehicles(ride, rideIndex, &trackElement, isApplying)) + { return 0; } } - if ( - (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_ALLOW_CABLE_LIFT_HILL) && - (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED) && - !(ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT) - ) { + if ((RideData4[ride->type].flags & RIDE_TYPE_FLAG4_ALLOW_CABLE_LIFT_HILL) + && (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED) + && !(ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT)) + { if (!ride_create_cable_lift(rideIndex, isApplying)) return 0; } @@ -5499,7 +5916,7 @@ int32_t ride_is_valid_for_open(int32_t rideIndex, int32_t goingToBeOpen, int32_t * Given a track element of the ride, find the start of the track. * It has to do this as a backwards loop in case this is an incomplete track. */ -void ride_get_start_of_track(CoordsXYE * output) +void ride_get_start_of_track(CoordsXYE* output) { track_begin_end trackBeginEnd; CoordsXYE trackElement = *output; @@ -5508,14 +5925,14 @@ void ride_get_start_of_track(CoordsXYE * output) rct_tile_element* initial_map = trackElement.element; track_begin_end slowIt = trackBeginEnd; bool moveSlowIt = true; - do { - CoordsXYE lastGood = { - /* .x = */ trackBeginEnd.begin_x, - /* .y = */ trackBeginEnd.begin_y, - /* .element = */ trackBeginEnd.begin_element - }; + do + { + CoordsXYE lastGood = { /* .x = */ trackBeginEnd.begin_x, + /* .y = */ trackBeginEnd.begin_y, + /* .element = */ trackBeginEnd.begin_element }; - if (!track_block_get_previous(trackBeginEnd.end_x, trackBeginEnd.end_y, trackBeginEnd.begin_element, &trackBeginEnd)) + if (!track_block_get_previous( + trackBeginEnd.end_x, trackBeginEnd.end_y, trackBeginEnd.begin_element, &trackBeginEnd)) { trackElement = lastGood; break; @@ -5524,8 +5941,8 @@ void ride_get_start_of_track(CoordsXYE * output) moveSlowIt = !moveSlowIt; if (moveSlowIt) { - if (!track_block_get_previous(slowIt.end_x, slowIt.end_y, slowIt.begin_element, &slowIt) || - slowIt.begin_element == trackBeginEnd.begin_element) + if (!track_block_get_previous(slowIt.end_x, slowIt.end_y, slowIt.begin_element, &slowIt) + || slowIt.begin_element == trackBeginEnd.begin_element) { break; } @@ -5558,11 +5975,12 @@ int32_t ride_get_refund_price(int32_t ride_id) // Used in the following loop to know when we have // completed all of the elements and are back at the // start. - rct_tile_element *initial_map = trackElement.element; + rct_tile_element* initial_map = trackElement.element; CoordsXYE slowIt = trackElement; bool moveSlowIt = true; - do { + do + { addedcost = game_do_command( trackElement.x, GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | (direction << 8), @@ -5570,8 +5988,7 @@ int32_t ride_get_refund_price(int32_t ride_id) trackElement.element->properties.track.type | ((trackElement.element->properties.track.sequence & 0xF) << 8), GAME_COMMAND_REMOVE_TRACK, trackElement.element->base_height * 8, - 0 - ); + 0); cost += (addedcost == MONEY32_UNDEFINED) ? 0 : addedcost; @@ -5603,9 +6020,10 @@ int32_t ride_get_refund_price(int32_t ride_id) void ride_stop_peeps_queuing(int32_t rideIndex) { uint16_t spriteIndex; - rct_peep *peep; + rct_peep* peep; - FOR_ALL_PEEPS(spriteIndex, peep) { + FOR_ALL_PEEPS (spriteIndex, peep) + { if (peep->state != PEEP_STATE_QUEUING) continue; if (peep->current_ride != rideIndex) @@ -5618,22 +6036,27 @@ void ride_stop_peeps_queuing(int32_t rideIndex) int32_t ride_get_empty_slot() { - for (int32_t i = 0; i < MAX_RIDES; i++) { - Ride *ride = get_ride(i); - if (ride->type == RIDE_TYPE_NULL) { + for (int32_t i = 0; i < MAX_RIDES; i++) + { + Ride* ride = get_ride(i); + if (ride->type == RIDE_TYPE_NULL) + { return i; } } return -1; } -int32_t ride_get_default_mode(Ride *ride) +int32_t ride_get_default_mode(Ride* ride) { - const rct_ride_entry *rideEntry = get_ride_entry(ride->subtype); - const uint8_t *availableModes = RideAvailableModes; + const rct_ride_entry* rideEntry = get_ride_entry(ride->subtype); + const uint8_t* availableModes = RideAvailableModes; - for (int32_t i = 0; i < ride->type; i++) { - while (*(availableModes++) != 255) {} + for (int32_t i = 0; i < ride->type; i++) + { + while (*(availableModes++) != 255) + { + } } // Since this only selects a default mode and does not prevent other modes from being used, there is no need // to check if select-by-track-type or the all-ride-modes cheat have been enabled. @@ -5644,30 +6067,37 @@ int32_t ride_get_default_mode(Ride *ride) return availableModes[0]; } -static bool ride_with_colour_config_exists(uint8_t ride_type, const track_colour *colours) +static bool ride_with_colour_config_exists(uint8_t ride_type, const track_colour* colours) { - Ride *ride; + Ride* ride; int32_t i; - FOR_ALL_RIDES(i, ride) { - if (ride->type != ride_type) continue; - if (ride->track_colour_main[0] != colours->main) continue; - if (ride->track_colour_additional[0] != colours->additional) continue; - if (ride->track_colour_supports[0] != colours->supports) continue; + FOR_ALL_RIDES (i, ride) + { + if (ride->type != ride_type) + continue; + if (ride->track_colour_main[0] != colours->main) + continue; + if (ride->track_colour_additional[0] != colours->additional) + continue; + if (ride->track_colour_supports[0] != colours->supports) + continue; return true; } return false; } -static bool ride_name_exists(char *name) +static bool ride_name_exists(char* name) { char buffer[256]; - Ride *ride; + Ride* ride; int32_t i; - FOR_ALL_RIDES(i, ride) { + FOR_ALL_RIDES (i, ride) + { format_string(buffer, 256, ride->name, &ride->name_arguments); - if ((strcmp(buffer, name) == 0) && ride_has_any_track_elements(i)) { + if ((strcmp(buffer, name) == 0) && ride_has_any_track_elements(i)) + { return true; } } @@ -5685,14 +6115,16 @@ int32_t ride_get_random_colour_preset_index(uint8_t ride_type) return 0; } - const track_colour_preset_list *colourPresets = &RideColourPresets[ride_type]; + const track_colour_preset_list* colourPresets = &RideColourPresets[ride_type]; // 200 attempts to find a colour preset that hasn't already been used in the park for this ride type - for (int32_t i = 0; i < 200; i++) { + for (int32_t i = 0; i < 200; i++) + { int32_t listIndex = util_rand() % colourPresets->count; - const track_colour *colours = &colourPresets->list[listIndex]; + const track_colour* colours = &colourPresets->list[listIndex]; - if (!ride_with_colour_config_exists(ride_type, colours)) { + if (!ride_with_colour_config_exists(ride_type, colours)) + { return listIndex; } } @@ -5703,14 +6135,16 @@ int32_t ride_get_random_colour_preset_index(uint8_t ride_type) * * Based on rct2: 0x006B4776 */ -void ride_set_colour_preset(Ride *ride, uint8_t index) +void ride_set_colour_preset(Ride* ride, uint8_t index) { - const track_colour_preset_list * colourPresets = &RideColourPresets[ride->type]; + const track_colour_preset_list* colourPresets = &RideColourPresets[ride->type]; track_colour colours = { COLOUR_BLACK, COLOUR_BLACK, COLOUR_BLACK }; - if (index < colourPresets->count) { + if (index < colourPresets->count) + { colours = colourPresets->list[index]; } - for (int32_t i = 0; i < NUM_COLOUR_SCHEMES; i++) { + for (int32_t i = 0; i < NUM_COLOUR_SCHEMES; i++) + { ride->track_colour_main[i] = colours.main; ride->track_colour_additional[i] = colours.additional; ride->track_colour_supports[i] = colours.supports; @@ -5718,13 +6152,15 @@ void ride_set_colour_preset(Ride *ride, uint8_t index) ride->colour_scheme_type = 0; } -money32 ride_get_common_price(Ride *forRide) +money32 ride_get_common_price(Ride* forRide) { - Ride *ride; + Ride* ride; int32_t i; - FOR_ALL_RIDES(i, ride) { - if (ride->type == forRide->type && ride != forRide) { + FOR_ALL_RIDES (i, ride) + { + if (ride->type == forRide->type && ride != forRide) + { return ride->price; } } @@ -5732,7 +6168,7 @@ money32 ride_get_common_price(Ride *forRide) return MONEY32_UNDEFINED; } -void ride_set_name_to_default(Ride * ride, rct_ride_entry * rideEntry) +void ride_set_name_to_default(Ride* ride, rct_ride_entry* rideEntry) { if (RideGroupManager::RideTypeIsIndependent(ride->type)) { @@ -5744,7 +6180,7 @@ void ride_set_name_to_default(Ride * ride, rct_ride_entry * rideEntry) } } -void ride_set_name_to_track_default(Ride *ride, rct_ride_entry * rideEntry) +void ride_set_name_to_track_default(Ride* ride, rct_ride_entry* rideEntry) { char rideNameBuffer[256]; ride_name_args name_args; @@ -5753,7 +6189,7 @@ void ride_set_name_to_track_default(Ride *ride, rct_ride_entry * rideEntry) if (RideGroupManager::RideTypeHasRideGroups(ride->type)) { - const RideGroup * rideGroup = RideGroupManager::GetRideGroup(ride->type, rideEntry); + const RideGroup* rideGroup = RideGroupManager::GetRideGroup(ride->type, rideEntry); name_args.type_name = rideGroup->Naming.name; } else @@ -5766,15 +6202,14 @@ void ride_set_name_to_track_default(Ride *ride, rct_ride_entry * rideEntry) { name_args.number++; format_string(rideNameBuffer, 256, 1, &name_args); - } - while (ride_name_exists(rideNameBuffer)); + } while (ride_name_exists(rideNameBuffer)); ride->name = 1; ride->name_arguments_type_name = name_args.type_name; ride->name_arguments_number = name_args.number; } -static void ride_set_name_to_vehicle_default(Ride * ride, rct_ride_entry * rideEntry) +static void ride_set_name_to_vehicle_default(Ride* ride, rct_ride_entry* rideEntry) { char rideNameBuffer[256]; ride_name_args name_args; @@ -5785,7 +6220,8 @@ static void ride_set_name_to_vehicle_default(Ride * ride, rct_ride_entry * rideE name_args.type_name = rideEntry->naming.name; name_args.number = 0; - do { + do + { name_args.number++; format_string(rideNameBuffer, 256, ride->name, &name_args); } while (ride_name_exists(rideNameBuffer)); @@ -5794,9 +6230,12 @@ static void ride_set_name_to_vehicle_default(Ride * ride, rct_ride_entry * rideE ride->name_arguments_number = name_args.number; rideNameStringId = user_string_allocate(USER_STRING_HIGH_ID_NUMBER | USER_STRING_DUPLICATION_PERMITTED, rideNameBuffer); - if (rideNameStringId != 0) { + if (rideNameStringId != 0) + { ride->name = rideNameStringId; - } else { + } + else + { ride_set_name_to_track_default(ride, rideEntry); } } @@ -5804,11 +6243,11 @@ static void ride_set_name_to_vehicle_default(Ride * ride, rct_ride_entry * rideE /** * This will return the name of the ride, as seen in the New Ride window. */ -rct_ride_name get_ride_naming(const uint8_t rideType, rct_ride_entry * rideEntry) +rct_ride_name get_ride_naming(const uint8_t rideType, rct_ride_entry* rideEntry) { if (RideGroupManager::RideTypeHasRideGroups(rideType)) { - const RideGroup * rideGroup = RideGroupManager::GetRideGroup(rideType, rideEntry); + const RideGroup* rideGroup = RideGroupManager::GetRideGroup(rideType, rideEntry); return rideGroup->Naming; } else if (!RideGroupManager::RideTypeIsIndependent(rideType)) @@ -5845,12 +6284,14 @@ void game_command_callback_ride_construct_placed_back( x = _currentTrackBeginX; y = _currentTrackBeginY; z = _currentTrackBeginZ; - if (!(trackDirection & 4)) { + if (!(trackDirection & 4)) + { x += CoordsDirectionDelta[trackDirection].x; y += CoordsDirectionDelta[trackDirection].y; } - if (track_block_get_previous_from_zero(x, y, z, _currentRideIndex, trackDirection, &trackBeginEnd)) { + if (track_block_get_previous_from_zero(x, y, z, _currentRideIndex, trackDirection, &trackBeginEnd)) + { _currentTrackBeginX = trackBeginEnd.begin_x; _currentTrackBeginY = trackBeginEnd.begin_y; _currentTrackBeginZ = trackBeginEnd.begin_z; @@ -5861,7 +6302,8 @@ void game_command_callback_ride_construct_placed_back( _rideConstructionState = RIDE_CONSTRUCTION_STATE_SELECTED; ride_select_previous_section(); } - else { + else + { _rideConstructionState = RIDE_CONSTRUCTION_STATE_0; } @@ -5884,13 +6326,15 @@ void game_command_callback_ride_construct_placed_front( x = _currentTrackBeginX; y = _currentTrackBeginY; z = _currentTrackBeginZ; - if (!(trackDirection & 4)) { + if (!(trackDirection & 4)) + { x -= CoordsDirectionDelta[trackDirection].x; y -= CoordsDirectionDelta[trackDirection].y; } CoordsXYE next_track; - if (track_block_get_next_from_zero(x, y, z, _currentRideIndex, trackDirection, &next_track, &z, &trackDirection, false)) { + if (track_block_get_next_from_zero(x, y, z, _currentRideIndex, trackDirection, &next_track, &z, &trackDirection, false)) + { _currentTrackBeginX = next_track.x; _currentTrackBeginY = next_track.y; _currentTrackBeginZ = z; @@ -5901,7 +6345,8 @@ void game_command_callback_ride_construct_placed_front( _rideConstructionState = RIDE_CONSTRUCTION_STATE_SELECTED; ride_select_next_section(); } - else { + else + { _rideConstructionState = RIDE_CONSTRUCTION_STATE_0; } @@ -5911,12 +6356,12 @@ void game_command_callback_ride_construct_placed_front( } /** -* -* Network client callback when removing ride pieces -* Client does execute placing the piece on the same tick as mouse_up - waits for server command -* Re-executes function from ride_construction - window_ride_construction_mouseup_demolish() -* Only uses part that deals with construction state -*/ + * + * Network client callback when removing ride pieces + * Client does execute placing the piece on the same tick as mouse_up - waits for server command + * Re-executes function from ride_construction - window_ride_construction_mouseup_demolish() + * Only uses part that deals with construction state + */ void game_command_callback_ride_remove_track_piece( [[maybe_unused]] int32_t eax, @@ -5943,13 +6388,13 @@ void game_command_callback_ride_remove_track_piece( * rct2: 0x006B2FC5 */ void game_command_set_ride_appearance( - [[maybe_unused]] int32_t * eax, - int32_t * ebx, - [[maybe_unused]] int32_t * ecx, - int32_t * edx, - [[maybe_unused]] int32_t * esi, - int32_t * edi, - [[maybe_unused]] int32_t * ebp) + [[maybe_unused]] int32_t* eax, + int32_t* ebx, + [[maybe_unused]] int32_t* ecx, + int32_t* edx, + [[maybe_unused]] int32_t* esi, + int32_t* edi, + [[maybe_unused]] int32_t* ebp) { bool apply = (*ebx & GAME_COMMAND_FLAG_APPLY); @@ -5964,21 +6409,25 @@ void game_command_set_ride_appearance( uint8_t value = *edx >> 8; uint32_t index = (uint32_t)*edi; - if (*edi < 0) { + if (*edi < 0) + { log_warning("Invalid game command, index %d out of bounds", index); *ebx = MONEY32_UNDEFINED; return; } - Ride *ride = get_ride(ride_id); - if (ride->type == RIDE_TYPE_NULL) { + Ride* ride = get_ride(ride_id); + if (ride->type == RIDE_TYPE_NULL) + { log_warning("Invalid game command, ride_id = %u", ride_id); *ebx = MONEY32_UNDEFINED; return; } - if (apply && gGameCommandNestLevel == 1) { - if (ride->overall_view.xy != RCT_XY8_UNDEFINED) { + if (apply && gGameCommandNestLevel == 1) + { + if (ride->overall_view.xy != RCT_XY8_UNDEFINED) + { LocationXYZ16 coord; coord.x = ride->overall_view.x * 32 + 16; coord.y = ride->overall_view.y * 32 + 16; @@ -5988,92 +6437,110 @@ void game_command_set_ride_appearance( } *ebx = 0; - switch(type) { - case 0: - if (index >= Util::CountOf(ride->track_colour_main)) { - log_warning("Invalid game command, index %d out of bounds", index); - *ebx = MONEY32_UNDEFINED; - return; - } - if (apply) { - ride->track_colour_main[index] = value; - gfx_invalidate_screen(); - } - break; - case 1: - if (index >= Util::CountOf(ride->track_colour_additional)) { - log_warning("Invalid game command, index %d out of bounds", index); - *ebx = MONEY32_UNDEFINED; - return; - } - if (apply) { - ride->track_colour_additional[index] = value; - gfx_invalidate_screen(); - } - break; - case 2: - if (index >= Util::CountOf(ride->vehicle_colours)) { - log_warning("Invalid game command, index %d out of bounds", index); - *ebx = MONEY32_UNDEFINED; - return; - } - if (apply) { - *((uint8_t*)(&ride->vehicle_colours[index])) = value; - ride_update_vehicle_colours(ride_id); - } - break; - case 3: - if (index >= Util::CountOf(ride->vehicle_colours)) { - log_warning("Invalid game command, index %d out of bounds", index); - *ebx = MONEY32_UNDEFINED; - return; - } - if (apply) { - *((uint8_t*)(&ride->vehicle_colours[index]) + 1) = value; - ride_update_vehicle_colours(ride_id); - } - break; - case 4: - if (index >= Util::CountOf(ride->track_colour_supports)) { - log_warning("Invalid game command, index %d out of bounds", index); - *ebx = MONEY32_UNDEFINED; - return; - } - if (apply) { - ride->track_colour_supports[index] = value; - gfx_invalidate_screen(); - } - break; - case 5: - if (apply) { - ride->colour_scheme_type &= ~(RIDE_COLOUR_SCHEME_DIFFERENT_PER_TRAIN | RIDE_COLOUR_SCHEME_DIFFERENT_PER_CAR); - ride->colour_scheme_type |= value; - for (uint32_t i = 1; i < Util::CountOf(ride->vehicle_colours); i++) { - ride->vehicle_colours[i] = ride->vehicle_colours[0]; - ride->vehicle_colours_extended[i] = ride->vehicle_colours_extended[0]; + switch (type) + { + case 0: + if (index >= Util::CountOf(ride->track_colour_main)) + { + log_warning("Invalid game command, index %d out of bounds", index); + *ebx = MONEY32_UNDEFINED; + return; } - ride_update_vehicle_colours(ride_id); - } - break; - case 6: - if (apply) { - ride->entrance_style = value; - gLastEntranceStyle = value; - gfx_invalidate_screen(); - } - break; - case 7: - if (index >= Util::CountOf(ride->vehicle_colours_extended)) { - log_warning("Invalid game command, index %d out of bounds", index); - *ebx = MONEY32_UNDEFINED; - return; - } else { - if (apply) { - ride->vehicle_colours_extended[index] = value; + if (apply) + { + ride->track_colour_main[index] = value; + gfx_invalidate_screen(); + } + break; + case 1: + if (index >= Util::CountOf(ride->track_colour_additional)) + { + log_warning("Invalid game command, index %d out of bounds", index); + *ebx = MONEY32_UNDEFINED; + return; + } + if (apply) + { + ride->track_colour_additional[index] = value; + gfx_invalidate_screen(); + } + break; + case 2: + if (index >= Util::CountOf(ride->vehicle_colours)) + { + log_warning("Invalid game command, index %d out of bounds", index); + *ebx = MONEY32_UNDEFINED; + return; + } + if (apply) + { + *((uint8_t*)(&ride->vehicle_colours[index])) = value; ride_update_vehicle_colours(ride_id); } - } - break; + break; + case 3: + if (index >= Util::CountOf(ride->vehicle_colours)) + { + log_warning("Invalid game command, index %d out of bounds", index); + *ebx = MONEY32_UNDEFINED; + return; + } + if (apply) + { + *((uint8_t*)(&ride->vehicle_colours[index]) + 1) = value; + ride_update_vehicle_colours(ride_id); + } + break; + case 4: + if (index >= Util::CountOf(ride->track_colour_supports)) + { + log_warning("Invalid game command, index %d out of bounds", index); + *ebx = MONEY32_UNDEFINED; + return; + } + if (apply) + { + ride->track_colour_supports[index] = value; + gfx_invalidate_screen(); + } + break; + case 5: + if (apply) + { + ride->colour_scheme_type &= ~(RIDE_COLOUR_SCHEME_DIFFERENT_PER_TRAIN | RIDE_COLOUR_SCHEME_DIFFERENT_PER_CAR); + ride->colour_scheme_type |= value; + for (uint32_t i = 1; i < Util::CountOf(ride->vehicle_colours); i++) + { + ride->vehicle_colours[i] = ride->vehicle_colours[0]; + ride->vehicle_colours_extended[i] = ride->vehicle_colours_extended[0]; + } + ride_update_vehicle_colours(ride_id); + } + break; + case 6: + if (apply) + { + ride->entrance_style = value; + gLastEntranceStyle = value; + gfx_invalidate_screen(); + } + break; + case 7: + if (index >= Util::CountOf(ride->vehicle_colours_extended)) + { + log_warning("Invalid game command, index %d out of bounds", index); + *ebx = MONEY32_UNDEFINED; + return; + } + else + { + if (apply) + { + ride->vehicle_colours_extended[index] = value; + ride_update_vehicle_colours(ride_id); + } + } + break; } window_invalidate_by_number(WC_RIDE, ride_id); } @@ -6083,13 +6550,13 @@ void game_command_set_ride_appearance( * rct2: 0x006B53E9 */ void game_command_set_ride_price( - [[maybe_unused]] int32_t * eax, - int32_t * ebx, - [[maybe_unused]] int32_t * ecx, - int32_t * edx, - [[maybe_unused]] int32_t * esi, - int32_t * edi, - [[maybe_unused]] int32_t * ebp) + [[maybe_unused]] int32_t* eax, + int32_t* ebx, + [[maybe_unused]] int32_t* ecx, + int32_t* edx, + [[maybe_unused]] int32_t* esi, + int32_t* edi, + [[maybe_unused]] int32_t* ebp) { uint32_t flags = *ebx; uint8_t ride_number = (*edx & 0xFF); @@ -6099,14 +6566,14 @@ void game_command_set_ride_price( *ebx = MONEY32_UNDEFINED; return; } - Ride *ride = get_ride(ride_number); + Ride* ride = get_ride(ride_number); if (ride->type == RIDE_TYPE_NULL) { log_warning("Invalid game command for ride %u", ride_number); *ebx = MONEY32_UNDEFINED; return; } - rct_ride_entry * rideEntry = get_ride_entry(ride->subtype); + rct_ride_entry* rideEntry = get_ride_entry(ride->subtype); money16 price = *edi; bool secondary_price = (*edx >> 8); @@ -6117,19 +6584,21 @@ void game_command_set_ride_price( return; } - //eax - //ebx flags - //ecx ecx - //edx ride_number - //ebp rideEntry + // eax + // ebx flags + // ecx ecx + // edx ride_number + // ebp rideEntry *ebx = 0; // for cost check - changing ride price does not cost anything gCommandExpenditureType = RCT_EXPENDITURE_TYPE_PARK_RIDE_TICKETS; - if (flags & GAME_COMMAND_FLAG_APPLY) { + if (flags & GAME_COMMAND_FLAG_APPLY) + { uint32_t shop_item; - if (ride->overall_view.xy != RCT_XY8_UNDEFINED) { + if (ride->overall_view.xy != RCT_XY8_UNDEFINED) + { LocationXYZ16 coord; coord.x = ride->overall_view.x * 32 + 16; coord.y = ride->overall_view.y * 32 + 16; @@ -6137,35 +6606,43 @@ void game_command_set_ride_price( network_set_player_last_action_coord(network_get_player_index(game_command_playerid), coord); } - if (!secondary_price) { + if (!secondary_price) + { shop_item = SHOP_ITEM_ADMISSION; - if (ride->type != RIDE_TYPE_TOILETS) { + if (ride->type != RIDE_TYPE_TOILETS) + { shop_item = rideEntry->shop_item; - if (shop_item == SHOP_ITEM_NONE) { + if (shop_item == SHOP_ITEM_NONE) + { ride->price = price; window_invalidate_by_class(WC_RIDE); return; } } // Check same price in park flags - if (!shop_item_has_common_price(shop_item)) { + if (!shop_item_has_common_price(shop_item)) + { ride->price = price; window_invalidate_by_class(WC_RIDE); return; } } - else { + else + { shop_item = rideEntry->shop_item_secondary; - if (shop_item == SHOP_ITEM_NONE) { + if (shop_item == SHOP_ITEM_NONE) + { shop_item = RidePhotoItems[ride->type]; - if ((ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) == 0) { + if ((ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) == 0) + { ride->price_secondary = price; window_invalidate_by_class(WC_RIDE); return; } } // Check same price in park flags - if (!shop_item_has_common_price(shop_item)) { + if (!shop_item_has_common_price(shop_item)) + { ride->price_secondary = price; window_invalidate_by_class(WC_RIDE); return; @@ -6173,27 +6650,31 @@ void game_command_set_ride_price( } ride = get_ride(0); - for (uint8_t rideId = 0; rideId < MAX_RIDES; rideId++, ride++) { + for (uint8_t rideId = 0; rideId < MAX_RIDES; rideId++, ride++) + { // Unplaced rides have a type of NULL if (ride->type == RIDE_TYPE_NULL) continue; rideEntry = get_ride_entry(ride->subtype); - if (ride->type != RIDE_TYPE_TOILETS || shop_item != SHOP_ITEM_ADMISSION) { - if (rideEntry->shop_item == shop_item) { + if (ride->type != RIDE_TYPE_TOILETS || shop_item != SHOP_ITEM_ADMISSION) + { + if (rideEntry->shop_item == shop_item) + { ride->price = price; window_invalidate_by_number(WC_RIDE, rideId); } } - else { + else + { ride->price = price; window_invalidate_by_number(WC_RIDE, rideId); } // If the shop item is the same or an on-ride photo - if (rideEntry->shop_item_secondary == shop_item || - (rideEntry->shop_item_secondary == SHOP_ITEM_NONE && shop_item_is_photo(shop_item))) { - + if (rideEntry->shop_item_secondary == shop_item + || (rideEntry->shop_item_secondary == SHOP_ITEM_NONE && shop_item_is_photo(shop_item))) + { ride->price_secondary = price; window_invalidate_by_number(WC_RIDE, rideId); } @@ -6220,20 +6701,22 @@ bool ride_type_has_flag(int32_t rideType, int32_t flag) * if by some miracle you manage 4 element none sloped. */ -void increment_turn_count_1_element(Ride* ride, uint8_t type){ +void increment_turn_count_1_element(Ride* ride, uint8_t type) +{ uint16_t* turn_count; - switch (type){ - case 0: - turn_count = &ride->turn_count_default; - break; - case 1: - turn_count = &ride->turn_count_banked; - break; - case 2: - turn_count = &ride->turn_count_sloped; - break; - default: - return; + switch (type) + { + case 0: + turn_count = &ride->turn_count_default; + break; + case 1: + turn_count = &ride->turn_count_banked; + break; + case 2: + turn_count = &ride->turn_count_sloped; + break; + default: + return; } uint16_t value = (*turn_count & TURN_MASK_1_ELEMENT) + 1; *turn_count &= ~TURN_MASK_1_ELEMENT; @@ -6243,20 +6726,22 @@ void increment_turn_count_1_element(Ride* ride, uint8_t type){ *turn_count |= value; } -void increment_turn_count_2_elements(Ride* ride, uint8_t type){ +void increment_turn_count_2_elements(Ride* ride, uint8_t type) +{ uint16_t* turn_count; - switch (type){ - case 0: - turn_count = &ride->turn_count_default; - break; - case 1: - turn_count = &ride->turn_count_banked; - break; - case 2: - turn_count = &ride->turn_count_sloped; - break; - default: - return; + switch (type) + { + case 0: + turn_count = &ride->turn_count_default; + break; + case 1: + turn_count = &ride->turn_count_banked; + break; + case 2: + turn_count = &ride->turn_count_sloped; + break; + default: + return; } uint16_t value = (*turn_count & TURN_MASK_2_ELEMENTS) + 0x20; *turn_count &= ~TURN_MASK_2_ELEMENTS; @@ -6266,20 +6751,22 @@ void increment_turn_count_2_elements(Ride* ride, uint8_t type){ *turn_count |= value; } -void increment_turn_count_3_elements(Ride* ride, uint8_t type){ +void increment_turn_count_3_elements(Ride* ride, uint8_t type) +{ uint16_t* turn_count; - switch (type){ - case 0: - turn_count = &ride->turn_count_default; - break; - case 1: - turn_count = &ride->turn_count_banked; - break; - case 2: - turn_count = &ride->turn_count_sloped; - break; - default: - return; + switch (type) + { + case 0: + turn_count = &ride->turn_count_default; + break; + case 1: + turn_count = &ride->turn_count_banked; + break; + case 2: + turn_count = &ride->turn_count_sloped; + break; + default: + return; } uint16_t value = (*turn_count & TURN_MASK_3_ELEMENTS) + 0x100; *turn_count &= ~TURN_MASK_3_ELEMENTS; @@ -6289,19 +6776,21 @@ void increment_turn_count_3_elements(Ride* ride, uint8_t type){ *turn_count |= value; } -void increment_turn_count_4_plus_elements(Ride* ride, uint8_t type){ +void increment_turn_count_4_plus_elements(Ride* ride, uint8_t type) +{ uint16_t* turn_count; - switch (type){ - case 0: - case 1: - // Just in case fallback to 3 element turn - increment_turn_count_3_elements(ride, type); - return; - case 2: - turn_count = &ride->turn_count_sloped; - break; - default: - return; + switch (type) + { + case 0: + case 1: + // Just in case fallback to 3 element turn + increment_turn_count_3_elements(ride, type); + return; + case 2: + turn_count = &ride->turn_count_sloped; + break; + default: + return; } uint16_t value = (*turn_count & TURN_MASK_4_PLUS_ELEMENTS) + 0x800; *turn_count &= ~TURN_MASK_4_PLUS_ELEMENTS; @@ -6311,121 +6800,132 @@ void increment_turn_count_4_plus_elements(Ride* ride, uint8_t type){ *turn_count |= value; } -int32_t get_turn_count_1_element(Ride* ride, uint8_t type) { +int32_t get_turn_count_1_element(Ride* ride, uint8_t type) +{ uint16_t* turn_count; - switch (type){ - case 0: - turn_count = &ride->turn_count_default; - break; - case 1: - turn_count = &ride->turn_count_banked; - break; - case 2: - turn_count = &ride->turn_count_sloped; - break; - default: - return 0; + switch (type) + { + case 0: + turn_count = &ride->turn_count_default; + break; + case 1: + turn_count = &ride->turn_count_banked; + break; + case 2: + turn_count = &ride->turn_count_sloped; + break; + default: + return 0; } return (*turn_count) & TURN_MASK_1_ELEMENT; } -int32_t get_turn_count_2_elements(Ride* ride, uint8_t type) { +int32_t get_turn_count_2_elements(Ride* ride, uint8_t type) +{ uint16_t* turn_count; - switch (type){ - case 0: - turn_count = &ride->turn_count_default; - break; - case 1: - turn_count = &ride->turn_count_banked; - break; - case 2: - turn_count = &ride->turn_count_sloped; - break; - default: - return 0; + switch (type) + { + case 0: + turn_count = &ride->turn_count_default; + break; + case 1: + turn_count = &ride->turn_count_banked; + break; + case 2: + turn_count = &ride->turn_count_sloped; + break; + default: + return 0; } return ((*turn_count) & TURN_MASK_2_ELEMENTS) >> 5; } -int32_t get_turn_count_3_elements(Ride* ride, uint8_t type) { +int32_t get_turn_count_3_elements(Ride* ride, uint8_t type) +{ uint16_t* turn_count; - switch (type){ - case 0: - turn_count = &ride->turn_count_default; - break; - case 1: - turn_count = &ride->turn_count_banked; - break; - case 2: - turn_count = &ride->turn_count_sloped; - break; - default: - return 0; + switch (type) + { + case 0: + turn_count = &ride->turn_count_default; + break; + case 1: + turn_count = &ride->turn_count_banked; + break; + case 2: + turn_count = &ride->turn_count_sloped; + break; + default: + return 0; } return ((*turn_count) & TURN_MASK_3_ELEMENTS) >> 8; } -int32_t get_turn_count_4_plus_elements(Ride* ride, uint8_t type) { +int32_t get_turn_count_4_plus_elements(Ride* ride, uint8_t type) +{ uint16_t* turn_count; - switch (type){ - case 0: - case 1: - return 0; - case 2: - turn_count = &ride->turn_count_sloped; - break; - default: - return 0; + switch (type) + { + case 0: + case 1: + return 0; + case 2: + turn_count = &ride->turn_count_sloped; + break; + default: + return 0; } return ((*turn_count) & TURN_MASK_4_PLUS_ELEMENTS) >> 11; } -bool ride_has_spinning_tunnel(Ride *ride) { +bool ride_has_spinning_tunnel(Ride* ride) +{ return ride->special_track_elements & RIDE_ELEMENT_TUNNEL_SPLASH_OR_RAPIDS; } -bool ride_has_water_splash(Ride *ride) { +bool ride_has_water_splash(Ride* ride) +{ return ride->special_track_elements & RIDE_ELEMENT_TUNNEL_SPLASH_OR_RAPIDS; } -bool ride_has_rapids(Ride *ride) { +bool ride_has_rapids(Ride* ride) +{ return ride->special_track_elements & RIDE_ELEMENT_TUNNEL_SPLASH_OR_RAPIDS; } -bool ride_has_log_reverser(Ride *ride) { +bool ride_has_log_reverser(Ride* ride) +{ return ride->special_track_elements & RIDE_ELEMENT_REVERSER_OR_WATERFALL; } -bool ride_has_waterfall(Ride *ride) { +bool ride_has_waterfall(Ride* ride) +{ return ride->special_track_elements & RIDE_ELEMENT_REVERSER_OR_WATERFALL; } -bool ride_has_whirlpool(Ride *ride) { +bool ride_has_whirlpool(Ride* ride) +{ return ride->special_track_elements & RIDE_ELEMENT_WHIRLPOOL; } -uint8_t ride_get_helix_sections(Ride *ride) { +uint8_t ride_get_helix_sections(Ride* ride) +{ // Helix sections stored in the low 5 bits. return ride->special_track_elements & 0x1F; } -bool ride_is_powered_launched(Ride *ride) +bool ride_is_powered_launched(Ride* ride) { - return - ride->mode == RIDE_MODE_POWERED_LAUNCH_PASSTROUGH || - ride->mode == RIDE_MODE_POWERED_LAUNCH || - ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED; + return ride->mode == RIDE_MODE_POWERED_LAUNCH_PASSTROUGH || ride->mode == RIDE_MODE_POWERED_LAUNCH + || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED; } -bool ride_is_block_sectioned(Ride *ride) +bool ride_is_block_sectioned(Ride* ride) { - return - ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || - ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED; + return ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED; } bool ride_has_any_track_elements(int32_t rideIndex) @@ -6433,7 +6933,8 @@ bool ride_has_any_track_elements(int32_t rideIndex) tile_element_iterator it; tile_element_iterator_begin(&it); - while (tile_element_iterator_next(&it)) { + while (tile_element_iterator_next(&it)) + { if (it.element->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; if (track_element_get_ride_index(it.element) != rideIndex) @@ -6447,14 +6948,15 @@ bool ride_has_any_track_elements(int32_t rideIndex) return false; } -void ride_all_has_any_track_elements(bool *rideIndexArray) +void ride_all_has_any_track_elements(bool* rideIndexArray) { tile_element_iterator it; memset(rideIndexArray, 0, MAX_RIDES * sizeof(bool)); tile_element_iterator_begin(&it); - while (tile_element_iterator_next(&it)) { + while (tile_element_iterator_next(&it)) + { if (it.element->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; if (it.element->flags & TILE_ELEMENT_FLAG_GHOST) @@ -6468,26 +6970,29 @@ void ride_all_has_any_track_elements(bool *rideIndexArray) * * rct2: 0x006847BA */ -void set_vehicle_type_image_max_sizes(rct_ride_entry_vehicle* vehicle_type, int32_t num_images){ +void set_vehicle_type_image_max_sizes(rct_ride_entry_vehicle* vehicle_type, int32_t num_images) +{ uint8_t bitmap[200][200] = { 0 }; - rct_drawpixelinfo dpi = { - /*.bits = */(uint8_t*)bitmap, - /*.x = */-100, - /*.y = */-100, - /*.width = */200, - /*.height = */200, - /*.pitch = */0, - /*.zoom_level = */0 - }; + rct_drawpixelinfo dpi = { /*.bits = */ (uint8_t*)bitmap, + /*.x = */ -100, + /*.y = */ -100, + /*.width = */ 200, + /*.height = */ 200, + /*.pitch = */ 0, + /*.zoom_level = */ 0 }; - for (int32_t i = 0; i < num_images; ++i){ + for (int32_t i = 0; i < num_images; ++i) + { gfx_draw_sprite_software(&dpi, vehicle_type->base_image_id + i, 0, 0, 0); } int32_t al = -1; - for (int32_t i = 99; i != 0; --i){ - for (int32_t j = 0; j < 200; j++){ - if (bitmap[j][100 - i] != 0){ + for (int32_t i = 99; i != 0; --i) + { + for (int32_t j = 0; j < 200; j++) + { + if (bitmap[j][100 - i] != 0) + { al = i; break; } @@ -6496,8 +7001,10 @@ void set_vehicle_type_image_max_sizes(rct_ride_entry_vehicle* vehicle_type, int3 if (al != -1) break; - for (int32_t j = 0; j < 200; j++){ - if (bitmap[j][100 + i] != 0){ + for (int32_t j = 0; j < 200; j++) + { + if (bitmap[j][100 + i] != 0) + { al = i; break; } @@ -6510,9 +7017,12 @@ void set_vehicle_type_image_max_sizes(rct_ride_entry_vehicle* vehicle_type, int3 al++; int32_t bl = -1; - for (int32_t i = 99; i != 0; --i){ - for (int32_t j = 0; j < 200; j++){ - if (bitmap[100 - i][j] != 0){ + for (int32_t i = 99; i != 0; --i) + { + for (int32_t j = 0; j < 200; j++) + { + if (bitmap[100 - i][j] != 0) + { bl = i; break; } @@ -6525,9 +7035,12 @@ void set_vehicle_type_image_max_sizes(rct_ride_entry_vehicle* vehicle_type, int3 int32_t bh = -1; - for (int32_t i = 99; i != 0; --i){ - for (int32_t j = 0; j < 200; j++){ - if (bitmap[100 + i][j] != 0){ + for (int32_t i = 99; i != 0; --i) + { + for (int32_t j = 0; j < 200; j++) + { + if (bitmap[100 + i][j] != 0) + { bh = i; break; } @@ -6540,7 +7053,8 @@ void set_vehicle_type_image_max_sizes(rct_ride_entry_vehicle* vehicle_type, int3 // Moved from object paint - if (vehicle_type->flags & VEHICLE_ENTRY_FLAG_13){ + if (vehicle_type->flags & VEHICLE_ENTRY_FLAG_13) + { bl += 16; } @@ -6549,48 +7063,57 @@ void set_vehicle_type_image_max_sizes(rct_ride_entry_vehicle* vehicle_type, int3 vehicle_type->sprite_height_positive = bh; } -static int32_t loc_6CD18E(int16_t mapX, int16_t mapY, int16_t entranceMinX, int16_t entranceMinY, int16_t entranceMaxX, int16_t entranceMaxY) +static int32_t loc_6CD18E( + int16_t mapX, int16_t mapY, int16_t entranceMinX, int16_t entranceMinY, int16_t entranceMaxX, int16_t entranceMaxY) { int32_t direction = 0; - if (mapX == entranceMinX) { - if (mapY > entranceMinY && mapY < entranceMaxY) { + if (mapX == entranceMinX) + { + if (mapY > entranceMinY && mapY < entranceMaxY) + { return direction; } } direction = 1; - if (mapY == entranceMaxY) { - if (mapX > entranceMinX && mapX < entranceMaxX) { + if (mapY == entranceMaxY) + { + if (mapX > entranceMinX && mapX < entranceMaxX) + { return direction; } } direction = 2; - if (mapX == entranceMaxX) { - if (mapY > entranceMinY && mapY < entranceMaxY) { + if (mapX == entranceMaxX) + { + if (mapY > entranceMinY && mapY < entranceMaxY) + { return direction; } } direction = 3; - if (mapY == entranceMinY) { - if (mapX > entranceMinX && mapX < entranceMaxX) { + if (mapY == entranceMinY) + { + if (mapX > entranceMinX && mapX < entranceMaxX) + { return direction; } } return -1; } - /** * * rct2: 0x006CCF70 */ -void ride_get_entrance_or_exit_position_from_screen_position(int32_t screenX, int32_t screenY, int32_t * outX, int32_t * outY, int32_t * outDirection) +void ride_get_entrance_or_exit_position_from_screen_position( + int32_t screenX, int32_t screenY, int32_t* outX, int32_t* outY, int32_t* outDirection) { - int16_t mapX, mapY; - int16_t entranceMinX, entranceMinY, entranceMaxX, entranceMaxY, word_F4418C, word_F4418E; - int32_t interactionType, direction, stationHeight, stationDirection; - rct_tile_element * tileElement; - rct_viewport * viewport; - Ride * ride; + int16_t mapX, mapY; + int16_t entranceMinX, entranceMinY, entranceMaxX, entranceMaxY, word_F4418C, word_F4418E; + int32_t interactionType, direction, stationHeight, stationDirection; + rct_tile_element* tileElement; + rct_viewport* viewport; + Ride* ride; gRideEntranceExitPlaceDirection = 255; get_map_coordinates_from_pos(screenX, screenY, 0xFFFB, &mapX, &mapY, &interactionType, &tileElement, &viewport); @@ -6615,7 +7138,7 @@ void ride_get_entrance_or_exit_position_from_screen_position(int32_t screenX, in } } - ride = get_ride(gRideEntranceExitPlaceRideIndex); + ride = get_ride(gRideEntranceExitPlaceRideIndex); stationHeight = ride->station_heights[gRideEntranceExitPlaceStationIndex]; screen_get_map_xy_with_z(screenX, screenY, stationHeight * 8, &mapX, &mapY); @@ -6679,14 +7202,15 @@ void ride_get_entrance_or_exit_position_from_screen_position(int32_t screenX, in continue; int32_t eax = (direction + 2 - tile_element_get_direction(tileElement)) & TILE_ELEMENT_DIRECTION_MASK; - if (FlatRideTrackSequenceProperties[track_element_get_type(tileElement)][tile_element_get_track_sequence(tileElement)] & (1 << eax)) + if (FlatRideTrackSequenceProperties[track_element_get_type(tileElement)] + [tile_element_get_track_sequence(tileElement)] + & (1 << eax)) { gRideEntranceExitPlaceDirection = direction ^ 2; *outDirection = direction ^ 2; return; } - } - while (!(tileElement++)->IsLastForTile()); + } while (!(tileElement++)->IsLastForTile()); } direction = (direction + 1) & 3; } @@ -6694,8 +7218,8 @@ void ride_get_entrance_or_exit_position_from_screen_position(int32_t screenX, in } else { - mapX = stationStart.x * 32; - mapY = stationStart.y * 32; + mapX = stationStart.x * 32; + mapY = stationStart.y * 32; entranceMinX = mapX; entranceMinY = mapY; @@ -6705,7 +7229,7 @@ void ride_get_entrance_or_exit_position_from_screen_position(int32_t screenX, in *outX = 0x8000; return; } - direction = tile_element_get_direction(tileElement); + direction = tile_element_get_direction(tileElement); stationDirection = direction; while (true) @@ -6728,13 +7252,12 @@ void ride_get_entrance_or_exit_position_from_screen_position(int32_t screenX, in switch (track_element_get_type(tileElement)) { - case TRACK_ELEM_END_STATION: - case TRACK_ELEM_BEGIN_STATION: - case TRACK_ELEM_MIDDLE_STATION: - goToNextTile = true; + case TRACK_ELEM_END_STATION: + case TRACK_ELEM_BEGIN_STATION: + case TRACK_ELEM_MIDDLE_STATION: + goToNextTile = true; } - } - while (!goToNextTile && !(tileElement++)->IsLastForTile()); + } while (!goToNextTile && !(tileElement++)->IsLastForTile()); if (!goToNextTile) break; @@ -6769,7 +7292,14 @@ bool ride_select_backwards_from_front() track_begin_end trackBeginEnd; ride_construction_invalidate_current_track(); - if (track_block_get_previous_from_zero(_currentTrackBeginX, _currentTrackBeginY, _currentTrackBeginZ, _currentRideIndex, _currentTrackPieceDirection, &trackBeginEnd)) { + if (track_block_get_previous_from_zero( + _currentTrackBeginX, + _currentTrackBeginY, + _currentTrackBeginZ, + _currentRideIndex, + _currentTrackPieceDirection, + &trackBeginEnd)) + { _rideConstructionState = RIDE_CONSTRUCTION_STATE_SELECTED; _currentTrackBeginX = trackBeginEnd.begin_x; _currentTrackBeginY = trackBeginEnd.begin_y; @@ -6779,7 +7309,9 @@ bool ride_select_backwards_from_front() _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; return true; - } else { + } + else + { return false; } } @@ -6796,7 +7328,8 @@ bool ride_select_forwards_from_back() direction = _currentTrackPieceDirection ^ 2; CoordsXYE next_track; - if (track_block_get_next_from_zero(x, y, z, _currentRideIndex, direction, &next_track, &z, &direction, false)) { + if (track_block_get_next_from_zero(x, y, z, _currentRideIndex, direction, &next_track, &z, &direction, false)) + { _rideConstructionState = RIDE_CONSTRUCTION_STATE_SELECTED; _currentTrackBeginX = next_track.x; _currentTrackBeginY = next_track.y; @@ -6806,7 +7339,9 @@ bool ride_select_forwards_from_back() _currentTrackSelectionFlags = 0; _rideConstructionArrowPulseTime = 0; return true; - } else { + } + else + { return false; } } @@ -6825,12 +7360,13 @@ money32 ride_remove_track_piece(int32_t x, int32_t y, int32_t z, int32_t directi * * rct2: 0x006B58EF */ -bool ride_are_all_possible_entrances_and_exits_built(Ride *ride) +bool ride_are_all_possible_entrances_and_exits_built(Ride* ride) { if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) return true; - for (int32_t i = 0; i < MAX_STATIONS; i++) { + for (int32_t i = 0; i < MAX_STATIONS; i++) + { if (ride->station_starts[i].xy == RCT_XY8_UNDEFINED) { continue; @@ -6840,7 +7376,8 @@ bool ride_are_all_possible_entrances_and_exits_built(Ride *ride) gGameCommandErrorText = STR_ENTRANCE_NOT_YET_BUILT; return false; } - if (ride_get_exit_location(ride, i).isNull()) { + if (ride_get_exit_location(ride, i).isNull()) + { gGameCommandErrorText = STR_EXIT_NOT_YET_BUILT; return false; } @@ -6854,17 +7391,20 @@ bool ride_are_all_possible_entrances_and_exits_built(Ride *ride) */ void invalidate_test_results(int32_t rideIndex) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); ride_measurement_clear(ride); ride->excitement = RIDE_RATING_UNDEFINED; ride->lifecycle_flags &= ~RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags &= ~RIDE_LIFECYCLE_TEST_IN_PROGRESS; - if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK) { - for (int32_t i = 0; i < ride->num_vehicles; i++) { + if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK) + { + for (int32_t i = 0; i < ride->num_vehicles; i++) + { uint16_t spriteIndex = ride->vehicles[i]; - if (spriteIndex != SPRITE_INDEX_NULL) { - rct_vehicle *vehicle = GET_VEHICLE(spriteIndex); + if (spriteIndex != SPRITE_INDEX_NULL) + { + rct_vehicle* vehicle = GET_VEHICLE(spriteIndex); vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_TESTING; } } @@ -6881,18 +7421,21 @@ void invalidate_test_results(int32_t rideIndex) */ void ride_fix_breakdown(int32_t rideIndex, int32_t reliabilityIncreaseFactor) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); ride->lifecycle_flags &= ~RIDE_LIFECYCLE_BREAKDOWN_PENDING; ride->lifecycle_flags &= ~RIDE_LIFECYCLE_BROKEN_DOWN; ride->lifecycle_flags &= ~RIDE_LIFECYCLE_DUE_INSPECTION; ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST | RIDE_INVALIDATE_RIDE_MAINTENANCE; - if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK) { - for (int32_t i = 0; i < ride->num_vehicles; i++) { + if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK) + { + for (int32_t i = 0; i < ride->num_vehicles; i++) + { uint16_t spriteIndex = ride->vehicles[i]; - while (spriteIndex != SPRITE_INDEX_NULL) { - rct_vehicle *vehicle = GET_VEHICLE(spriteIndex); + while (spriteIndex != SPRITE_INDEX_NULL) + { + rct_vehicle* vehicle = GET_VEHICLE(spriteIndex); vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_ZERO_VELOCITY; vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_BROKEN_CAR; vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_BROKEN_TRAIN; @@ -6911,32 +7454,36 @@ void ride_fix_breakdown(int32_t rideIndex, int32_t reliabilityIncreaseFactor) */ static void ride_update_vehicle_colours(int32_t rideIndex) { - Ride *ride = get_ride(rideIndex); - if (ride->type == RIDE_TYPE_SPACE_RINGS || ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_16)) { + Ride* ride = get_ride(rideIndex); + if (ride->type == RIDE_TYPE_SPACE_RINGS || ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_16)) + { gfx_invalidate_screen(); } - for (int32_t i = 0; i < MAX_VEHICLES_PER_RIDE; i++) { + for (int32_t i = 0; i < MAX_VEHICLES_PER_RIDE; i++) + { int32_t carIndex = 0; uint16_t spriteIndex = ride->vehicles[i]; rct_vehicle_colour colours = {}; uint8_t coloursExtended = 0; - while (spriteIndex != SPRITE_INDEX_NULL) { - rct_vehicle *vehicle = GET_VEHICLE(spriteIndex); - switch (ride->colour_scheme_type & 3) { - case RIDE_COLOUR_SCHEME_ALL_SAME: - colours = ride->vehicle_colours[0]; - coloursExtended = ride->vehicle_colours_extended[0]; - break; - case RIDE_COLOUR_SCHEME_DIFFERENT_PER_TRAIN: - colours = ride->vehicle_colours[i]; - coloursExtended = ride->vehicle_colours_extended[i]; - break; - case RIDE_COLOUR_SCHEME_DIFFERENT_PER_CAR: - colours = ride->vehicle_colours[std::min(carIndex, MAX_CARS_PER_TRAIN - 1)]; - coloursExtended = ride->vehicle_colours_extended[std::min(carIndex, MAX_CARS_PER_TRAIN - 1)]; - break; + while (spriteIndex != SPRITE_INDEX_NULL) + { + rct_vehicle* vehicle = GET_VEHICLE(spriteIndex); + switch (ride->colour_scheme_type & 3) + { + case RIDE_COLOUR_SCHEME_ALL_SAME: + colours = ride->vehicle_colours[0]; + coloursExtended = ride->vehicle_colours_extended[0]; + break; + case RIDE_COLOUR_SCHEME_DIFFERENT_PER_TRAIN: + colours = ride->vehicle_colours[i]; + coloursExtended = ride->vehicle_colours_extended[i]; + break; + case RIDE_COLOUR_SCHEME_DIFFERENT_PER_CAR: + colours = ride->vehicle_colours[std::min(carIndex, MAX_CARS_PER_TRAIN - 1)]; + coloursExtended = ride->vehicle_colours_extended[std::min(carIndex, MAX_CARS_PER_TRAIN - 1)]; + break; } vehicle->colours = colours; @@ -6953,7 +7500,7 @@ static void ride_update_vehicle_colours(int32_t rideIndex) * rct2: 0x006DE4CD * trainLayout: Originally fixed to 0x00F64E38. This no longer postfixes with 255. */ -void ride_entry_get_train_layout(int32_t rideEntryIndex, int32_t numCarsPerTrain, uint8_t *trainLayout) +void ride_entry_get_train_layout(int32_t rideEntryIndex, int32_t numCarsPerTrain, uint8_t* trainLayout) { for (int32_t i = 0; i < numCarsPerTrain; i++) { @@ -6961,46 +7508,55 @@ void ride_entry_get_train_layout(int32_t rideEntryIndex, int32_t numCarsPerTrain } } -uint8_t ride_entry_get_vehicle_at_position(int32_t rideEntryIndex,int32_t numCarsPerTrain,int32_t position) +uint8_t ride_entry_get_vehicle_at_position(int32_t rideEntryIndex, int32_t numCarsPerTrain, int32_t position) { - rct_ride_entry *rideEntry = get_ride_entry(rideEntryIndex); - if (position == 0 && rideEntry->front_vehicle != 255) { + rct_ride_entry* rideEntry = get_ride_entry(rideEntryIndex); + if (position == 0 && rideEntry->front_vehicle != 255) + { return rideEntry->front_vehicle; - } else if (position == 1 && rideEntry->second_vehicle != 255) { + } + else if (position == 1 && rideEntry->second_vehicle != 255) + { return rideEntry->second_vehicle; - } else if (position == 2 && rideEntry->third_vehicle != 255) { + } + else if (position == 2 && rideEntry->third_vehicle != 255) + { return rideEntry->third_vehicle; - } else if (position == numCarsPerTrain - 1 && rideEntry->rear_vehicle != 255) { + } + else if (position == numCarsPerTrain - 1 && rideEntry->rear_vehicle != 255) + { return rideEntry->rear_vehicle; - } else { + } + else + { return rideEntry->default_vehicle; } } // Finds track pieces that a given ride entry has sprites for -uint64_t ride_entry_get_supported_track_pieces(const rct_ride_entry * rideEntry) +uint64_t ride_entry_get_supported_track_pieces(const rct_ride_entry* rideEntry) { uint64_t supportedPieces = 0xFFFFFFFFFFFFFFFFULL; - uint16_t trackPieceRequiredSprites[55] = { - 0x0001u, 0x0001u, 0x0001u, 0x0000u, 0x0006u, 0x0002u, 0x0020u, 0x000E, - 0x0003u, 0x0006u, 0x0007u, 0x0002u, 0x0004u, 0x0001u, 0x0001u, 0x0001u, - 0x0001u, 0x0061u, 0x000E, 0x1081u, 0x0001u, 0x0020u, 0x0020u, 0x0001u, - 0x0001u, 0x0000u, 0x0001u, 0x0001u, 0x000C, 0x0061u, 0x0002u, 0x000E, - 0x0480u, 0x0001u, 0x0061u, 0x0001u, 0x0001u, 0x000Fu, 0x0001u, 0x0200u, - 0x0007u, 0x0008u, 0x0000u, 0x0000u, 0x4000u, 0x0008u, 0x0001u, 0x0001u, - 0x0061u, 0x0061u, 0x0008u, 0x0008u, 0x0001u, 0x000Eu, 0x000Eu - }; + uint16_t trackPieceRequiredSprites[55] + = { 0x0001u, 0x0001u, 0x0001u, 0x0000u, 0x0006u, 0x0002u, 0x0020u, 0x000E, 0x0003u, 0x0006u, 0x0007u, + 0x0002u, 0x0004u, 0x0001u, 0x0001u, 0x0001u, 0x0001u, 0x0061u, 0x000E, 0x1081u, 0x0001u, 0x0020u, + 0x0020u, 0x0001u, 0x0001u, 0x0000u, 0x0001u, 0x0001u, 0x000C, 0x0061u, 0x0002u, 0x000E, 0x0480u, + 0x0001u, 0x0061u, 0x0001u, 0x0001u, 0x000Fu, 0x0001u, 0x0200u, 0x0007u, 0x0008u, 0x0000u, 0x0000u, + 0x4000u, 0x0008u, 0x0001u, 0x0001u, 0x0061u, 0x0061u, 0x0008u, 0x0008u, 0x0001u, 0x000Eu, 0x000Eu }; - //Only check default vehicle; it's assumed the others will have correct sprites if this one does (I've yet to find an exception, at least) - for (int32_t j = 0; j < 55; j++) { - if ((rideEntry->vehicles[rideEntry->default_vehicle].sprite_flags & trackPieceRequiredSprites[j]) != trackPieceRequiredSprites[j]) + // Only check default vehicle; it's assumed the others will have correct sprites if this one does (I've yet to find an + // exception, at least) + for (int32_t j = 0; j < 55; j++) + { + if ((rideEntry->vehicles[rideEntry->default_vehicle].sprite_flags & trackPieceRequiredSprites[j]) + != trackPieceRequiredSprites[j]) supportedPieces &= ~(1ULL << j); } return supportedPieces; } -static int32_t ride_get_smallest_station_length(Ride *ride) +static int32_t ride_get_smallest_station_length(Ride* ride) { auto result = std::numeric_limits::max(); for (int32_t i = 0; i < MAX_STATIONS; i++) @@ -7017,13 +7573,13 @@ static int32_t ride_get_smallest_station_length(Ride *ride) * * rct2: 0x006CB3AA */ -static int32_t ride_get_track_length(Ride * ride) +static int32_t ride_get_track_length(Ride* ride) { - rct_window * w; - rct_tile_element * tileElement = nullptr; - track_circuit_iterator it, slowIt; - int32_t x = 0, y = 0, z, trackType, rideIndex, result; - bool foundTrack = false; + rct_window* w; + rct_tile_element* tileElement = nullptr; + track_circuit_iterator it, slowIt; + int32_t x = 0, y = 0, z, trackType, rideIndex, result; + bool foundTrack = false; for (int32_t i = 0; i < MAX_STATIONS && !foundTrack; i++) { @@ -7049,8 +7605,7 @@ static int32_t ride_get_track_length(Ride * ride) continue; foundTrack = true; - } - while (!foundTrack && !(tileElement++)->IsLastForTile()); + } while (!foundTrack && !(tileElement++)->IsLastForTile()); } if (foundTrack) @@ -7065,7 +7620,7 @@ static int32_t ride_get_track_length(Ride * ride) bool moveSlowIt = true; result = 0; - track_circuit_iterator_begin(&it, {x, y, tileElement}); + track_circuit_iterator_begin(&it, { x, y, tileElement }); slowIt = it; while (track_circuit_iterator_next(&it)) { @@ -7096,20 +7651,21 @@ static int32_t ride_get_track_length(Ride * ride) */ void ride_update_max_vehicles(int32_t rideIndex) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); if (ride->subtype == RIDE_ENTRY_INDEX_NULL) return; - rct_ride_entry *rideEntry = get_ride_entry(ride->subtype); + rct_ride_entry* rideEntry = get_ride_entry(ride->subtype); if (rideEntry == nullptr) { return; } - rct_ride_entry_vehicle *vehicleEntry; + rct_ride_entry_vehicle* vehicleEntry; uint8_t numCarsPerTrain, numVehicles; int32_t maxNumTrains; - if (rideEntry->cars_per_flat_ride == 0xFF) { + if (rideEntry->cars_per_flat_ride == 0xFF) + { int32_t trainLength; ride->num_cars_per_train = std::max(rideEntry->min_cars_in_train, ride->num_cars_per_train); ride->min_max_cars_per_train = rideEntry->max_cars_in_train | (rideEntry->min_cars_in_train << 4); @@ -7122,104 +7678,122 @@ void ride_update_max_vehicles(int32_t rideIndex) stationLength = (stationLength * 0x44180) - 0x16B2A; int32_t maxMass = RideData5[ride->type].max_mass << 8; int32_t maxCarsPerTrain = 1; - for (int32_t numCars = rideEntry->max_cars_in_train; numCars > 0; numCars--) { + for (int32_t numCars = rideEntry->max_cars_in_train; numCars > 0; numCars--) + { trainLength = 0; int32_t totalMass = 0; - for (int32_t i = 0; i < numCars; i++) { + for (int32_t i = 0; i < numCars; i++) + { vehicleEntry = &rideEntry->vehicles[ride_entry_get_vehicle_at_position(ride->subtype, numCars, i)]; trainLength += vehicleEntry->spacing; totalMass += vehicleEntry->car_mass; } - if (trainLength <= stationLength && totalMass <= maxMass) { + if (trainLength <= stationLength && totalMass <= maxMass) + { maxCarsPerTrain = numCars; break; } } int32_t newCarsPerTrain = std::max(ride->proposed_num_cars_per_train, rideEntry->min_cars_in_train); maxCarsPerTrain = std::max(maxCarsPerTrain, (int32_t)rideEntry->min_cars_in_train); - if (!gCheatsDisableTrainLengthLimit) { + if (!gCheatsDisableTrainLengthLimit) + { newCarsPerTrain = std::min(maxCarsPerTrain, newCarsPerTrain); } ride->min_max_cars_per_train = maxCarsPerTrain | (rideEntry->min_cars_in_train << 4); - switch (ride->mode) { - case RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED: - case RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED: - maxNumTrains = Math::Clamp(1, ride->num_stations + ride->num_block_brakes - 1, 31); - break; - case RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE: - case RIDE_MODE_POWERED_LAUNCH_PASSTROUGH: - case RIDE_MODE_SHUTTLE: - case RIDE_MODE_LIM_POWERED_LAUNCH: - case RIDE_MODE_POWERED_LAUNCH: - maxNumTrains = 1; - break; - default: - // Calculate maximum number of trains - trainLength = 0; - for (int32_t i = 0; i < newCarsPerTrain; i++) { - vehicleEntry = &rideEntry->vehicles[ride_entry_get_vehicle_at_position(ride->subtype, newCarsPerTrain, i)]; - trainLength += vehicleEntry->spacing; - } - - int32_t totalLength = trainLength / 2; - if (newCarsPerTrain != 1) - totalLength /= 2; - - maxNumTrains = 0; - do { - maxNumTrains++; - totalLength += trainLength; - } while (totalLength <= stationLength); - - if ( - (ride->mode != RIDE_MODE_STATION_TO_STATION && ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT) || - !(RideData4[ride->type].flags & RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS) - ) { - maxNumTrains = std::min(maxNumTrains, 31); - } else { - vehicleEntry = &rideEntry->vehicles[ride_entry_get_vehicle_at_position(ride->subtype, newCarsPerTrain, 0)]; - int32_t speed = vehicleEntry->powered_max_speed; - - int32_t totalSpacing = 0; - for (int32_t i = 0; i < newCarsPerTrain; i++) { + switch (ride->mode) + { + case RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED: + case RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED: + maxNumTrains = Math::Clamp(1, ride->num_stations + ride->num_block_brakes - 1, 31); + break; + case RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE: + case RIDE_MODE_POWERED_LAUNCH_PASSTROUGH: + case RIDE_MODE_SHUTTLE: + case RIDE_MODE_LIM_POWERED_LAUNCH: + case RIDE_MODE_POWERED_LAUNCH: + maxNumTrains = 1; + break; + default: + // Calculate maximum number of trains + trainLength = 0; + for (int32_t i = 0; i < newCarsPerTrain; i++) + { vehicleEntry = &rideEntry->vehicles[ride_entry_get_vehicle_at_position(ride->subtype, newCarsPerTrain, i)]; - totalSpacing += vehicleEntry->spacing; + trainLength += vehicleEntry->spacing; } - totalSpacing >>= 13; - int32_t trackLength = ride_get_track_length(ride) / 4; - if (speed > 10) trackLength = (trackLength * 3) / 4; - if (speed > 25) trackLength = (trackLength * 3) / 4; - if (speed > 40) trackLength = (trackLength * 3) / 4; + int32_t totalLength = trainLength / 2; + if (newCarsPerTrain != 1) + totalLength /= 2; maxNumTrains = 0; - int32_t length = 0; - do { + do + { maxNumTrains++; - length += totalSpacing; - } while (maxNumTrains < 31 && length < trackLength); - } - break; + totalLength += trainLength; + } while (totalLength <= stationLength); + + if ((ride->mode != RIDE_MODE_STATION_TO_STATION && ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT) + || !(RideData4[ride->type].flags & RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS)) + { + maxNumTrains = std::min(maxNumTrains, 31); + } + else + { + vehicleEntry = &rideEntry->vehicles[ride_entry_get_vehicle_at_position(ride->subtype, newCarsPerTrain, 0)]; + int32_t speed = vehicleEntry->powered_max_speed; + + int32_t totalSpacing = 0; + for (int32_t i = 0; i < newCarsPerTrain; i++) + { + vehicleEntry + = &rideEntry->vehicles[ride_entry_get_vehicle_at_position(ride->subtype, newCarsPerTrain, i)]; + totalSpacing += vehicleEntry->spacing; + } + + totalSpacing >>= 13; + int32_t trackLength = ride_get_track_length(ride) / 4; + if (speed > 10) + trackLength = (trackLength * 3) / 4; + if (speed > 25) + trackLength = (trackLength * 3) / 4; + if (speed > 40) + trackLength = (trackLength * 3) / 4; + + maxNumTrains = 0; + int32_t length = 0; + do + { + maxNumTrains++; + length += totalSpacing; + } while (maxNumTrains < 31 && length < trackLength); + } + break; } ride->max_trains = maxNumTrains; numCarsPerTrain = std::min(ride->proposed_num_cars_per_train, (uint8_t)newCarsPerTrain); - } else { + } + else + { ride->max_trains = rideEntry->cars_per_flat_ride; ride->min_max_cars_per_train = rideEntry->max_cars_in_train | (rideEntry->min_cars_in_train << 4); numCarsPerTrain = rideEntry->max_cars_in_train; maxNumTrains = rideEntry->cars_per_flat_ride; } - if (gCheatsDisableTrainLengthLimit) { + if (gCheatsDisableTrainLengthLimit) + { maxNumTrains = 31; } numVehicles = std::min(ride->proposed_num_vehicles, (uint8_t)maxNumTrains); // Refresh new current num vehicles / num cars per vehicle - if (numVehicles != ride->num_vehicles || numCarsPerTrain != ride->num_cars_per_train) { + if (numVehicles != ride->num_vehicles || numCarsPerTrain != ride->num_cars_per_train) + { ride->num_cars_per_train = numCarsPerTrain; ride->num_vehicles = numVehicles; window_invalidate_by_number(WC_RIDE, rideIndex); @@ -7236,8 +7810,7 @@ void ride_set_ride_entry(int32_t rideIndex, int32_t rideEntry) (rideEntry << 8) | rideIndex, GAME_COMMAND_SET_RIDE_VEHICLES, 0, - 0 - ); + 0); } void ride_set_num_vehicles(int32_t rideIndex, int32_t numVehicles) @@ -7250,8 +7823,7 @@ void ride_set_num_vehicles(int32_t rideIndex, int32_t numVehicles) (numVehicles << 8) | rideIndex, GAME_COMMAND_SET_RIDE_VEHICLES, 0, - 0 - ); + 0); } void ride_set_num_cars_per_vehicle(int32_t rideIndex, int32_t numCarsPerVehicle) @@ -7264,38 +7836,48 @@ void ride_set_num_cars_per_vehicle(int32_t rideIndex, int32_t numCarsPerVehicle) (numCarsPerVehicle << 8) | rideIndex, GAME_COMMAND_SET_RIDE_VEHICLES, 0, - 0 - ); + 0); } -static bool ride_is_vehicle_type_valid(Ride *ride, uint8_t inputRideEntryIndex) +static bool ride_is_vehicle_type_valid(Ride* ride, uint8_t inputRideEntryIndex) { bool selectionShouldBeExpanded; int32_t rideTypeIterator, rideTypeIteratorMax; - if (gCheatsShowVehiclesFromOtherTrackTypes && - !(ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE) || ride->type == RIDE_TYPE_MAZE || ride->type == RIDE_TYPE_MINI_GOLF) - ) { + if (gCheatsShowVehiclesFromOtherTrackTypes + && !(ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE) || ride->type == RIDE_TYPE_MAZE + || ride->type == RIDE_TYPE_MINI_GOLF)) + { selectionShouldBeExpanded = true; rideTypeIterator = 0; rideTypeIteratorMax = RIDE_TYPE_COUNT - 1; - } else { + } + else + { selectionShouldBeExpanded = false; rideTypeIterator = ride->type; rideTypeIteratorMax = ride->type; } - for (; rideTypeIterator <= rideTypeIteratorMax; rideTypeIterator++) { - if (selectionShouldBeExpanded) { - if (ride_type_has_flag(rideTypeIterator, RIDE_TYPE_FLAG_FLAT_RIDE)) continue; - if (rideTypeIterator == RIDE_TYPE_MAZE || rideTypeIterator == RIDE_TYPE_MINI_GOLF) continue; + for (; rideTypeIterator <= rideTypeIteratorMax; rideTypeIterator++) + { + if (selectionShouldBeExpanded) + { + if (ride_type_has_flag(rideTypeIterator, RIDE_TYPE_FLAG_FLAT_RIDE)) + continue; + if (rideTypeIterator == RIDE_TYPE_MAZE || rideTypeIterator == RIDE_TYPE_MINI_GOLF) + continue; } - uint8_t *rideEntryIndexPtr = get_ride_entry_indices_for_ride_type(rideTypeIterator); - for (uint8_t *currentRideEntryIndex = rideEntryIndexPtr; *currentRideEntryIndex != RIDE_ENTRY_INDEX_NULL; currentRideEntryIndex++) { + uint8_t* rideEntryIndexPtr = get_ride_entry_indices_for_ride_type(rideTypeIterator); + for (uint8_t* currentRideEntryIndex = rideEntryIndexPtr; *currentRideEntryIndex != RIDE_ENTRY_INDEX_NULL; + currentRideEntryIndex++) + { uint8_t rideEntryIndex = *currentRideEntryIndex; - if (rideEntryIndex == inputRideEntryIndex) { - if (!ride_entry_is_invented(rideEntryIndex) && !gCheatsIgnoreResearchStatus) { + if (rideEntryIndex == inputRideEntryIndex) + { + if (!ride_entry_is_invented(rideEntryIndex) && !gCheatsIgnoreResearchStatus) + { return false; } @@ -7309,62 +7891,71 @@ static bool ride_is_vehicle_type_valid(Ride *ride, uint8_t inputRideEntryIndex) static money32 ride_set_vehicles(uint8_t rideIndex, uint8_t setting, uint8_t value, uint32_t flags, uint8_t ex) { - rct_ride_entry *rideEntry; + rct_ride_entry* rideEntry; - Ride *ride = get_ride(rideIndex); - if (ride == nullptr || ride->type == RIDE_TYPE_NULL) { + Ride* ride = get_ride(rideIndex); + if (ride == nullptr || ride->type == RIDE_TYPE_NULL) + { log_warning("Invalid game command for ride #%u", rideIndex); return MONEY32_UNDEFINED; } gCommandExpenditureType = RCT_EXPENDITURE_TYPE_RIDE_RUNNING_COSTS; - if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) { + if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) + { gGameCommandErrorText = STR_HAS_BROKEN_DOWN_AND_REQUIRES_FIXING; return MONEY32_UNDEFINED; } - if (ride->status != RIDE_STATUS_CLOSED) { + if (ride->status != RIDE_STATUS_CLOSED) + { gGameCommandErrorText = STR_MUST_BE_CLOSED_FIRST; return MONEY32_UNDEFINED; } - switch (setting) { - case RIDE_SET_VEHICLES_COMMAND_TYPE_NUM_TRAINS: - if (!(flags & GAME_COMMAND_FLAG_APPLY)) { - return 0; - } + switch (setting) + { + case RIDE_SET_VEHICLES_COMMAND_TYPE_NUM_TRAINS: + if (!(flags & GAME_COMMAND_FLAG_APPLY)) + { + return 0; + } - ride_clear_for_construction(rideIndex); - ride_remove_peeps(rideIndex); - ride->vehicle_change_timeout = 100; + ride_clear_for_construction(rideIndex); + ride_remove_peeps(rideIndex); + ride->vehicle_change_timeout = 100; - ride->proposed_num_vehicles = value; - break; - case RIDE_SET_VEHICLES_COMMAND_TYPE_NUM_CARS_PER_TRAIN: - if (!(flags & GAME_COMMAND_FLAG_APPLY)) { - return 0; - } + ride->proposed_num_vehicles = value; + break; + case RIDE_SET_VEHICLES_COMMAND_TYPE_NUM_CARS_PER_TRAIN: + if (!(flags & GAME_COMMAND_FLAG_APPLY)) + { + return 0; + } - ride_clear_for_construction(rideIndex); - ride_remove_peeps(rideIndex); - ride->vehicle_change_timeout = 100; + ride_clear_for_construction(rideIndex); + ride_remove_peeps(rideIndex); + ride->vehicle_change_timeout = 100; - invalidate_test_results(rideIndex); - rideEntry = get_ride_entry(ride->subtype); - if (!gCheatsDisableTrainLengthLimit) { - value = Math::Clamp(rideEntry->min_cars_in_train, value, rideEntry->max_cars_in_train); - } - ride->proposed_num_cars_per_train = value; - break; - case RIDE_SET_VEHICLES_COMMAND_TYPE_RIDE_ENTRY: + invalidate_test_results(rideIndex); + rideEntry = get_ride_entry(ride->subtype); + if (!gCheatsDisableTrainLengthLimit) + { + value = Math::Clamp(rideEntry->min_cars_in_train, value, rideEntry->max_cars_in_train); + } + ride->proposed_num_cars_per_train = value; + break; + case RIDE_SET_VEHICLES_COMMAND_TYPE_RIDE_ENTRY: { - if (!ride_is_vehicle_type_valid(ride, value)) { + if (!ride_is_vehicle_type_valid(ride, value)) + { log_error("Invalid vehicle type."); return MONEY32_UNDEFINED; } - if (!(flags & GAME_COMMAND_FLAG_APPLY)) { + if (!(flags & GAME_COMMAND_FLAG_APPLY)) + { return 0; } @@ -7377,33 +7968,38 @@ static money32 ride_set_vehicles(uint8_t rideIndex, uint8_t setting, uint8_t val rideEntry = get_ride_entry(ride->subtype); uint8_t preset = ex; - if (!(flags & GAME_COMMAND_FLAG_NETWORKED)) { + if (!(flags & GAME_COMMAND_FLAG_NETWORKED)) + { preset = ride_get_unused_preset_vehicle_colour(ride->subtype); } // Validate preset - vehicle_colour_preset_list *presetList = rideEntry->vehicle_preset_list; - if (preset >= presetList->count) { + vehicle_colour_preset_list* presetList = rideEntry->vehicle_preset_list; + if (preset >= presetList->count) + { log_error("Unknown vehicle colour preset."); return MONEY32_UNDEFINED; } ride_set_vehicle_colours_to_random_preset(ride, preset); - if (!gCheatsDisableTrainLengthLimit) { - ride->proposed_num_cars_per_train = Math::Clamp(rideEntry->min_cars_in_train, ride->proposed_num_cars_per_train, rideEntry->max_cars_in_train); + if (!gCheatsDisableTrainLengthLimit) + { + ride->proposed_num_cars_per_train = Math::Clamp( + rideEntry->min_cars_in_train, ride->proposed_num_cars_per_train, rideEntry->max_cars_in_train); } break; } - default: - log_error("Unknown vehicle command."); - return MONEY32_UNDEFINED; + default: + log_error("Unknown vehicle command."); + return MONEY32_UNDEFINED; } ride->num_circuits = 1; ride_update_max_vehicles(rideIndex); - if (ride->overall_view.xy != RCT_XY8_UNDEFINED) { + if (ride->overall_view.xy != RCT_XY8_UNDEFINED) + { LocationXYZ16 coord; coord.x = ride->overall_view.x * 32 + 16; coord.y = ride->overall_view.y * 32 + 16; @@ -7425,13 +8021,13 @@ static money32 ride_set_vehicles(uint8_t rideIndex, uint8_t setting, uint8_t val * rct2: 0x006B52D4 */ void game_command_set_ride_vehicles( - int32_t * eax, - int32_t * ebx, - [[maybe_unused]] int32_t * ecx, - int32_t * edx, - [[maybe_unused]] int32_t * esi, - [[maybe_unused]] int32_t * edi, - [[maybe_unused]] int32_t * ebp) + int32_t* eax, + int32_t* ebx, + [[maybe_unused]] int32_t* ecx, + int32_t* edx, + [[maybe_unused]] int32_t* esi, + [[maybe_unused]] int32_t* edi, + [[maybe_unused]] int32_t* ebp) { uint8_t rideIndex = *edx & 0xFF; uint8_t setting = (*ebx >> 8) & 0xFF; @@ -7448,74 +8044,91 @@ void game_command_set_ride_vehicles( void sub_6CB945(int32_t rideIndex) { Ride* ride = get_ride(rideIndex); - if (ride->type != RIDE_TYPE_MAZE) { - for (uint8_t stationId = 0; stationId < MAX_STATIONS; ++stationId) { + if (ride->type != RIDE_TYPE_MAZE) + { + for (uint8_t stationId = 0; stationId < MAX_STATIONS; ++stationId) + { if (ride->station_starts[stationId].xy == RCT_XY8_UNDEFINED) continue; - LocationXYZ16 location = { - (int16_t)(ride->station_starts[stationId].x * 32), - (int16_t)(ride->station_starts[stationId].y * 32), - (ride->station_heights[stationId]) - }; + LocationXYZ16 location = { (int16_t)(ride->station_starts[stationId].x * 32), + (int16_t)(ride->station_starts[stationId].y * 32), + (ride->station_heights[stationId]) }; uint8_t direction = 0xFF; bool specialTrack = false; rct_tile_element* tileElement = nullptr; - while (true) { - if (direction != 0xFF) { + while (true) + { + if (direction != 0xFF) + { location.x -= CoordsDirectionDelta[direction].x; location.y -= CoordsDirectionDelta[direction].y; } tileElement = map_get_first_element_at(location.x >> 5, location.y >> 5); bool trackFound = false; - do { - if (tileElement->base_height != location.z) continue; - if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; - if (track_element_get_ride_index(tileElement) != rideIndex) continue; - if (tile_element_get_track_sequence(tileElement) != 0) continue; - if (!(TrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) continue; + do + { + if (tileElement->base_height != location.z) + continue; + if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) + continue; + if (track_element_get_ride_index(tileElement) != rideIndex) + continue; + if (tile_element_get_track_sequence(tileElement) != 0) + continue; + if (!(TrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) + continue; trackFound = true; break; } while (!(tileElement++)->IsLastForTile()); - if (trackFound == false) { + if (trackFound == false) + { break; } tile_element_set_station(tileElement, stationId); direction = tile_element_get_direction(tileElement); - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_3)) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_3)) + { specialTrack = true; break; } } - if (specialTrack == false) { + if (specialTrack == false) + { continue; } - const rct_preview_track *trackBlock = get_track_def_from_ride(ride, track_element_get_type(tileElement)); - while ((++trackBlock)->index != 0xFF) { + const rct_preview_track* trackBlock = get_track_def_from_ride(ride, track_element_get_type(tileElement)); + while ((++trackBlock)->index != 0xFF) + { LocationXYZ16 blockLocation = location; map_offset_with_rotation(&blockLocation.x, &blockLocation.y, trackBlock->x, trackBlock->y, direction); bool trackFound = false; tileElement = map_get_first_element_at(blockLocation.x >> 5, blockLocation.y >> 5); - do { - if (blockLocation.z != tileElement->base_height) continue; - if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; - if (!(TrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) continue; + do + { + if (blockLocation.z != tileElement->base_height) + continue; + if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) + continue; + if (!(TrackSequenceProperties[track_element_get_type(tileElement)][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) + continue; trackFound = true; break; } while (!(tileElement++)->IsLastForTile()); - if (!trackFound) { + if (!trackFound) + { break; } @@ -7526,7 +8139,7 @@ void sub_6CB945(int32_t rideIndex) // Needs room for an entrance and an exit per station, plus one position for the list terminator. TileCoordsXYZD locations[(MAX_STATIONS * 2) + 1]; - TileCoordsXYZD *locationList = locations; + TileCoordsXYZD* locationList = locations; for (uint8_t stationId = 0; stationId < MAX_STATIONS; ++stationId) { TileCoordsXYZD entrance = ride_get_entrance_location(rideIndex, stationId); @@ -7546,14 +8159,15 @@ void sub_6CB945(int32_t rideIndex) (*locationList++).x = COORDS_NULL; locationList = locations; - for (; !(*locationList).isNull(); locationList++) { - TileCoordsXYZD * locationList2 = locationList; + for (; !(*locationList).isNull(); locationList++) + { + TileCoordsXYZD* locationList2 = locationList; locationList2++; bool duplicateLocation = false; - do { - if ((*locationList).x == (*locationList2).x && - (*locationList).y == (*locationList2).y) + do + { + if ((*locationList).x == (*locationList2).x && (*locationList).y == (*locationList2).y) { duplicateLocation = true; break; @@ -7567,34 +8181,45 @@ void sub_6CB945(int32_t rideIndex) CoordsXY location = { (*locationList).x * 32, (*locationList).y * 32 }; - rct_tile_element *tileElement = map_get_first_element_at(location.x >> 5, location.y >> 5); - do { - if (tileElement->GetType() != TILE_ELEMENT_TYPE_ENTRANCE) continue; - if (tileElement->properties.entrance.ride_index != rideIndex) continue; - if (tileElement->properties.entrance.type > ENTRANCE_TYPE_RIDE_EXIT) continue; + rct_tile_element* tileElement = map_get_first_element_at(location.x >> 5, location.y >> 5); + do + { + if (tileElement->GetType() != TILE_ELEMENT_TYPE_ENTRANCE) + continue; + if (tileElement->properties.entrance.ride_index != rideIndex) + continue; + if (tileElement->properties.entrance.type > ENTRANCE_TYPE_RIDE_EXIT) + continue; CoordsXY nextLocation = location; nextLocation.x += CoordsDirectionDelta[tile_element_get_direction(tileElement)].x; nextLocation.y += CoordsDirectionDelta[tile_element_get_direction(tileElement)].y; bool shouldRemove = true; - rct_tile_element *trackElement = map_get_first_element_at(nextLocation.x >> 5, nextLocation.y >> 5); - do { - if (trackElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; - if (track_element_get_ride_index(trackElement) != rideIndex) continue; - if (trackElement->base_height != tileElement->base_height) continue; + rct_tile_element* trackElement = map_get_first_element_at(nextLocation.x >> 5, nextLocation.y >> 5); + do + { + if (trackElement->GetType() != TILE_ELEMENT_TYPE_TRACK) + continue; + if (track_element_get_ride_index(trackElement) != rideIndex) + continue; + if (trackElement->base_height != tileElement->base_height) + continue; uint8_t trackType = track_element_get_type(trackElement); uint8_t trackSequence = tile_element_get_track_sequence(trackElement); - uint8_t direction = (tile_element_get_direction(tileElement) - tile_element_get_direction(trackElement) + 2) & 3; + uint8_t direction + = (tile_element_get_direction(tileElement) - tile_element_get_direction(trackElement) + 2) & 3; - if (!(TrackSequenceProperties[trackType][trackSequence] & (1 << direction))) { + if (!(TrackSequenceProperties[trackType][trackSequence] & (1 << direction))) + { continue; } uint8_t stationId = 0; - if (trackType != TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP) { + if (trackType != TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP) + { stationId = tile_element_get_station(trackElement); } @@ -7603,16 +8228,26 @@ void sub_6CB945(int32_t rideIndex) if (!ride_get_exit_location(ride, stationId).isNull()) break; - ride_set_exit_location(ride, stationId, - { location.x / 32, location.y / 32, ride->station_heights[stationId], (uint8_t)tile_element_get_direction(tileElement) }); + ride_set_exit_location( + ride, + stationId, + { location.x / 32, + location.y / 32, + ride->station_heights[stationId], + (uint8_t)tile_element_get_direction(tileElement) }); } else { if (!ride_get_entrance_location(ride, stationId).isNull()) break; - ride_set_entrance_location(ride, stationId, - { location.x / 32, location.y / 32, ride->station_heights[stationId], (uint8_t)tile_element_get_direction(tileElement) }); + ride_set_entrance_location( + ride, + stationId, + { location.x / 32, + location.y / 32, + ride->station_heights[stationId], + (uint8_t)tile_element_get_direction(tileElement) }); } tileElement->properties.entrance.index &= 0x8F; @@ -7620,7 +8255,8 @@ void sub_6CB945(int32_t rideIndex) shouldRemove = false; } while (!(trackElement++)->IsLastForTile()); - if (shouldRemove == true) { + if (shouldRemove == true) + { footpath_queue_chain_reset(); maze_entrance_hedge_replacement(location.x, location.y, tileElement); footpath_remove_edges_at(location.x, location.y, tileElement); @@ -7633,15 +8269,17 @@ void sub_6CB945(int32_t rideIndex) } } - void ride_set_to_default_inspection_interval(int32_t rideIndex) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); uint8_t defaultInspectionInterval = gConfigGeneral.default_inspection_interval; - if (ride->inspection_interval != defaultInspectionInterval) { - if (defaultInspectionInterval <= RIDE_INSPECTION_NEVER) { + if (ride->inspection_interval != defaultInspectionInterval) + { + if (defaultInspectionInterval <= RIDE_INSPECTION_NEVER) + { gGameCommandErrorTitle = STR_CANT_CHANGE_OPERATING_MODE; - game_do_command(0, (defaultInspectionInterval << 8) | 1, 0, (5 << 8) | rideIndex, GAME_COMMAND_SET_RIDE_SETTING, 0, 0); + game_do_command( + 0, (defaultInspectionInterval << 8) | 1, 0, (5 << 8) | rideIndex, GAME_COMMAND_SET_RIDE_SETTING, 0, 0); } } } @@ -7652,24 +8290,27 @@ void ride_set_to_default_inspection_interval(int32_t rideIndex) */ void ride_crash(uint8_t rideIndex, uint8_t vehicleIndex) { - Ride *ride = get_ride(rideIndex); - rct_vehicle *vehicle = GET_VEHICLE(ride->vehicles[vehicleIndex]); + Ride* ride = get_ride(rideIndex); + rct_vehicle* vehicle = GET_VEHICLE(ride->vehicles[vehicleIndex]); - if (!(gScreenFlags & SCREEN_FLAGS_TITLE_DEMO)) { + if (!(gScreenFlags & SCREEN_FLAGS_TITLE_DEMO)) + { // Open ride window for crashed vehicle auto intent = Intent(WD_VEHICLE); intent.putExtra(INTENT_EXTRA_VEHICLE, vehicle); - rct_window * w = context_open_intent(&intent); + rct_window* w = context_open_intent(&intent); - rct_viewport * viewport = window_get_viewport(w); - if (w != nullptr && viewport != nullptr) { + rct_viewport* viewport = window_get_viewport(w); + if (w != nullptr && viewport != nullptr) + { viewport->flags |= VIEWPORT_FLAG_SOUND_ON; } } set_format_arg(0, rct_string_id, ride->name); set_format_arg(2, uint32_t, ride->name_arguments); - if (gConfigNotifications.ride_crashed) { + if (gConfigNotifications.ride_crashed) + { news_item_add_to_queue(NEWS_ITEM_RIDE, STR_RIDE_HAS_CRASHED, rideIndex); } } @@ -7677,17 +8318,18 @@ void ride_crash(uint8_t rideIndex, uint8_t vehicleIndex) void ride_reset_all_names() { int32_t i; - Ride *ride; + Ride* ride; char rideNameBuffer[256]; ride_name_args name_args; - FOR_ALL_RIDES(i, ride) + FOR_ALL_RIDES (i, ride) { ride->name = STR_NONE; name_args.type_name = RideNaming[ride->type].name; name_args.number = 0; - do { + do + { name_args.number++; format_string(rideNameBuffer, 256, 1, &name_args); } while (ride_name_exists(rideNameBuffer)); @@ -7698,15 +8340,19 @@ void ride_reset_all_names() } } -const uint8_t* ride_seek_available_modes(Ride *ride) +const uint8_t* ride_seek_available_modes(Ride* ride) { const uint8_t* availableModes; - if (!gCheatsShowAllOperatingModes) { + if (!gCheatsShowAllOperatingModes) + { availableModes = RideAvailableModes; - for (int32_t i = 0; i < ride->type; i++) { - while (*(availableModes++) != 255) { } + for (int32_t i = 0; i < ride->type; i++) + { + while (*(availableModes++) != 255) + { + } } } else @@ -7718,12 +8364,13 @@ const uint8_t* ride_seek_available_modes(Ride *ride) } // Gets the approximate value of customers per hour for this ride. Multiplies ride_customers_in_last_5_minutes() by 12. -uint32_t ride_customers_per_hour(const Ride *ride) { +uint32_t ride_customers_per_hour(const Ride* ride) +{ return ride_customers_in_last_5_minutes(ride) * 12; } // Calculates the number of customers for this ride in the last 5 minutes (or more correctly 9600 game ticks) -uint32_t ride_customers_in_last_5_minutes(const Ride *ride) +uint32_t ride_customers_in_last_5_minutes(const Ride* ride) { uint32_t sum = 0; @@ -7735,15 +8382,18 @@ uint32_t ride_customers_in_last_5_minutes(const Ride *ride) return sum; } -rct_vehicle *ride_get_broken_vehicle(Ride *ride) { +rct_vehicle* ride_get_broken_vehicle(Ride* ride) +{ uint16_t vehicleIndex = ride->vehicles[ride->broken_vehicle]; - if (vehicleIndex == SPRITE_INDEX_NULL) { + if (vehicleIndex == SPRITE_INDEX_NULL) + { return nullptr; } - rct_vehicle *vehicle = GET_VEHICLE(vehicleIndex); - for (uint8_t i = 0; i < ride->broken_car; i++) { + rct_vehicle* vehicle = GET_VEHICLE(vehicleIndex); + for (uint8_t i = 0; i < ride->broken_car; i++) + { vehicle = GET_VEHICLE(vehicle->next_vehicle_on_train); } @@ -7756,42 +8406,46 @@ rct_vehicle *ride_get_broken_vehicle(Ride *ride) { */ void ride_delete(uint8_t rideIndex) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); user_string_free(ride->name); ride->type = RIDE_TYPE_NULL; } -void ride_renew(Ride * ride) +void ride_renew(Ride* ride) { // Set build date to current date (so the ride is brand new) ride->build_date = gDateMonthsElapsed; ride->reliability = RIDE_INITIAL_RELIABILITY; } -static bool ride_is_ride(Ride * ride) +static bool ride_is_ride(Ride* ride) { - switch (ride->type) { - case RIDE_TYPE_FOOD_STALL: - case RIDE_TYPE_1D: - case RIDE_TYPE_DRINK_STALL: - case RIDE_TYPE_1F: - case RIDE_TYPE_SHOP: - case RIDE_TYPE_22: - case RIDE_TYPE_INFORMATION_KIOSK: - case RIDE_TYPE_TOILETS: - case RIDE_TYPE_CASH_MACHINE: - case RIDE_TYPE_FIRST_AID: - return false; - default: - return true; + switch (ride->type) + { + case RIDE_TYPE_FOOD_STALL: + case RIDE_TYPE_1D: + case RIDE_TYPE_DRINK_STALL: + case RIDE_TYPE_1F: + case RIDE_TYPE_SHOP: + case RIDE_TYPE_22: + case RIDE_TYPE_INFORMATION_KIOSK: + case RIDE_TYPE_TOILETS: + case RIDE_TYPE_CASH_MACHINE: + case RIDE_TYPE_FIRST_AID: + return false; + default: + return true; } } -money16 ride_get_price(Ride * ride) +money16 ride_get_price(Ride* ride) { - if (gParkFlags & PARK_FLAGS_NO_MONEY) return 0; - if (ride_is_ride(ride)) { - if (!park_ride_prices_unlocked()) { + if (gParkFlags & PARK_FLAGS_NO_MONEY) + return 0; + if (ride_is_ride(ride)) + { + if (!park_ride_prices_unlocked()) + { return 0; } } @@ -7802,18 +8456,22 @@ money16 ride_get_price(Ride * ride) * Return the tile_element of an adjacent station at x,y,z(+-2). * Returns nullptr if no suitable tile_element is found. */ -rct_tile_element *get_station_platform(int32_t x, int32_t y, int32_t z, int32_t z_tolerance) { +rct_tile_element* get_station_platform(int32_t x, int32_t y, int32_t z, int32_t z_tolerance) +{ bool foundTileElement = false; - rct_tile_element *tileElement = map_get_first_element_at(x >> 5, y >> 5); - if (tileElement != nullptr) { - do { - if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; + rct_tile_element* tileElement = map_get_first_element_at(x >> 5, y >> 5); + if (tileElement != nullptr) + { + do + { + if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) + continue; /* Check if tileElement is a station platform. */ - if (!track_element_is_station(tileElement)) continue; + if (!track_element_is_station(tileElement)) + continue; - if (z - z_tolerance > tileElement->base_height || - z + z_tolerance < tileElement->base_height - ) { + if (z - z_tolerance > tileElement->base_height || z + z_tolerance < tileElement->base_height) + { /* The base height if tileElement is not within * the z tolerance. */ continue; @@ -7823,7 +8481,8 @@ rct_tile_element *get_station_platform(int32_t x, int32_t y, int32_t z, int32_t break; } while (!(tileElement++)->IsLastForTile()); } - if (!foundTileElement) { + if (!foundTileElement) + { return nullptr; } @@ -7842,11 +8501,11 @@ static bool check_for_adjacent_station(int32_t x, int32_t y, int32_t z, uint8_t { adjX += CoordsDirectionDelta[direction].x; adjY += CoordsDirectionDelta[direction].y; - rct_tile_element * stationElement = get_station_platform(adjX, adjY, z, 2); + rct_tile_element* stationElement = get_station_platform(adjX, adjY, z, 2); if (stationElement != nullptr) { int32_t rideIndex = track_element_get_ride_index(stationElement); - Ride * ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); if (ride->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS) { found = true; @@ -7859,45 +8518,49 @@ static bool check_for_adjacent_station(int32_t x, int32_t y, int32_t z, uint8_t /** * Return whether ride has at least one adjacent station to it. */ -bool ride_has_adjacent_station(Ride *ride) +bool ride_has_adjacent_station(Ride* ride) { bool found = false; /* Loop through all of the ride stations, checking for an * adjacent station on either side. */ - for (int32_t stationNum = 0; stationNum < MAX_STATIONS; stationNum++) { - if (ride->station_starts[stationNum].xy != RCT_XY8_UNDEFINED) { + for (int32_t stationNum = 0; stationNum < MAX_STATIONS; stationNum++) + { + if (ride->station_starts[stationNum].xy != RCT_XY8_UNDEFINED) + { /* Get the map element for the station start. */ uint16_t stationX = ride->station_starts[stationNum].x * 32; uint16_t stationY = ride->station_starts[stationNum].y * 32; uint8_t stationZ = ride->station_heights[stationNum]; - rct_tile_element *stationElement = get_station_platform(stationX, stationY, stationZ, 0); - if (stationElement == nullptr) { + rct_tile_element* stationElement = get_station_platform(stationX, stationY, stationZ, 0); + if (stationElement == nullptr) + { continue; } /* Check the first side of the station */ int32_t direction = tile_element_get_direction_with_offset(stationElement, 1); found = check_for_adjacent_station(stationX, stationY, stationZ, direction); - if (found) break; + if (found) + break; /* Check the other side of the station */ direction ^= 2; found = check_for_adjacent_station(stationX, stationY, stationZ, direction); - if (found) break; + if (found) + break; } } return found; } -bool ride_has_ratings(const Ride * ride) +bool ride_has_ratings(const Ride* ride) { return ride->excitement != RIDE_RATING_UNDEFINED; } -const char * ride_type_get_enum_name(int32_t rideType) +const char* ride_type_get_enum_name(int32_t rideType) { - static constexpr const char * RideTypeEnumNames[RIDE_TYPE_COUNT] = - { + static constexpr const char* RideTypeEnumNames[RIDE_TYPE_COUNT] = { nameof(RIDE_TYPE_SPIRAL_ROLLER_COASTER), nameof(RIDE_TYPE_STAND_UP_ROLLER_COASTER), nameof(RIDE_TYPE_SUSPENDED_SWINGING_COASTER), @@ -7998,7 +8661,7 @@ const char * ride_type_get_enum_name(int32_t rideType) * Searches for a non-null ride type in a ride entry. * If none is found, it will still return RIDE_TYPE_NULL. */ -uint8_t ride_entry_get_first_non_null_ride_type(const rct_ride_entry * rideEntry) +uint8_t ride_entry_get_first_non_null_ride_type(const rct_ride_entry* rideEntry) { for (uint8_t i = 0; i < MAX_RIDE_TYPES_PER_RIDE_ENTRY; i++) { @@ -8007,17 +8670,14 @@ uint8_t ride_entry_get_first_non_null_ride_type(const rct_ride_entry * rideEntry return rideEntry->ride_type[i]; } } - return RIDE_TYPE_NULL; + return RIDE_TYPE_NULL; } bool ride_type_supports_boosters(uint8_t rideType) { - if (rideType == RIDE_TYPE_LOOPING_ROLLER_COASTER || - rideType == RIDE_TYPE_CORKSCREW_ROLLER_COASTER || - rideType == RIDE_TYPE_TWISTER_ROLLER_COASTER || - rideType == RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER || - rideType == RIDE_TYPE_GIGA_COASTER || - rideType == RIDE_TYPE_JUNIOR_ROLLER_COASTER) + if (rideType == RIDE_TYPE_LOOPING_ROLLER_COASTER || rideType == RIDE_TYPE_CORKSCREW_ROLLER_COASTER + || rideType == RIDE_TYPE_TWISTER_ROLLER_COASTER || rideType == RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER + || rideType == RIDE_TYPE_GIGA_COASTER || rideType == RIDE_TYPE_JUNIOR_ROLLER_COASTER) { return true; } @@ -8045,20 +8705,24 @@ int32_t get_booster_speed(uint8_t rideType, int32_t rawSpeed) void fix_invalid_vehicle_sprite_sizes() { - Ride *ride; + Ride* ride; uint16_t i; - FOR_ALL_RIDES(i, ride) + FOR_ALL_RIDES (i, ride) { - for (uint16_t j = 0; j < MAX_VEHICLES_PER_RIDE; j++) { + for (uint16_t j = 0; j < MAX_VEHICLES_PER_RIDE; j++) + { uint16_t rideSpriteIndex = ride->vehicles[j]; - while (rideSpriteIndex != SPRITE_INDEX_NULL) { - rct_vehicle * vehicle = try_get_vehicle(rideSpriteIndex); - if (vehicle == nullptr) { + while (rideSpriteIndex != SPRITE_INDEX_NULL) + { + rct_vehicle* vehicle = try_get_vehicle(rideSpriteIndex); + if (vehicle == nullptr) + { break; } - rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); - if (vehicleEntry == nullptr) { + rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); + if (vehicleEntry == nullptr) + { break; } @@ -8080,7 +8744,7 @@ void fix_invalid_vehicle_sprite_sizes() } } -bool ride_entry_has_category(const rct_ride_entry * rideEntry, uint8_t category) +bool ride_entry_has_category(const rct_ride_entry* rideEntry, uint8_t category) { for (int32_t i = 0; i < MAX_CATEGORIES_PER_RIDE; i++) { @@ -8099,10 +8763,10 @@ int32_t ride_get_entry_index(int32_t rideType, int32_t rideSubType) if (subType == RIDE_ENTRY_INDEX_NULL) { - uint8_t *availableRideEntries = get_ride_entry_indices_for_ride_type(rideType); - for (uint8_t *rideEntryIndex = availableRideEntries; *rideEntryIndex != RIDE_ENTRY_INDEX_NULL; rideEntryIndex++) + uint8_t* availableRideEntries = get_ride_entry_indices_for_ride_type(rideType); + for (uint8_t* rideEntryIndex = availableRideEntries; *rideEntryIndex != RIDE_ENTRY_INDEX_NULL; rideEntryIndex++) { - rct_ride_entry *rideEntry = get_ride_entry(*rideEntryIndex); + rct_ride_entry* rideEntry = get_ride_entry(*rideEntryIndex); if (rideEntry == nullptr) { return RIDE_ENTRY_INDEX_NULL; @@ -8135,22 +8799,22 @@ LocationXY16 ride_get_rotated_coords(int16_t x, int16_t y, int16_t z) switch (get_current_rotation()) { - case 0: - rotatedCoords.x = y - x; - rotatedCoords.y = ((y + x) / 2) - z; - break; - case 1: - rotatedCoords.x = -x - y; - rotatedCoords.y = ((y - x) / 2) - z; - break; - case 2: - rotatedCoords.x = x - y; - rotatedCoords.y = ((-y - x) / 2) - z; - break; - case 3: - rotatedCoords.x = y + x; - rotatedCoords.y = ((x - y) / 2) - z; - break; + case 0: + rotatedCoords.x = y - x; + rotatedCoords.y = ((y + x) / 2) - z; + break; + case 1: + rotatedCoords.x = -x - y; + rotatedCoords.y = ((y - x) / 2) - z; + break; + case 2: + rotatedCoords.x = x - y; + rotatedCoords.y = ((-y - x) / 2) - z; + break; + case 3: + rotatedCoords.x = y + x; + rotatedCoords.y = ((x - y) / 2) - z; + break; } return rotatedCoords; @@ -8167,23 +8831,24 @@ void determine_ride_entrance_and_exit_locations() log_verbose("Inspecting ride entrance / exit locations"); int32_t rideIndex; - Ride * ride; - FOR_ALL_RIDES(rideIndex, ride) + Ride* ride; + FOR_ALL_RIDES (rideIndex, ride) { for (int32_t stationIndex = 0; stationIndex < MAX_STATIONS; stationIndex++) { - TileCoordsXYZD entranceLoc = ride->entrances[stationIndex]; - TileCoordsXYZD exitLoc = ride->exits[stationIndex]; - bool fixEntrance = false; - bool fixExit = false; - const rct_tile_element * tileElement; + TileCoordsXYZD entranceLoc = ride->entrances[stationIndex]; + TileCoordsXYZD exitLoc = ride->exits[stationIndex]; + bool fixEntrance = false; + bool fixExit = false; + const rct_tile_element* tileElement; // Skip if the station has no entrance if (!entranceLoc.isNull()) { tileElement = map_get_ride_entrance_element_at(entranceLoc.x * 32, entranceLoc.y * 32, entranceLoc.z, false); - if (tileElement == nullptr || tileElement->properties.entrance.ride_index != rideIndex || tile_element_get_station(tileElement) != stationIndex) + if (tileElement == nullptr || tileElement->properties.entrance.ride_index != rideIndex + || tile_element_get_station(tileElement) != stationIndex) { fixEntrance = true; } @@ -8197,7 +8862,8 @@ void determine_ride_entrance_and_exit_locations() { tileElement = map_get_ride_exit_element_at(exitLoc.x * 32, exitLoc.y * 32, entranceLoc.z, false); - if (tileElement == nullptr || tileElement->properties.entrance.ride_index != rideIndex || tile_element_get_station(tileElement) != stationIndex) + if (tileElement == nullptr || tileElement->properties.entrance.ride_index != rideIndex + || tile_element_get_station(tileElement) != stationIndex) { fixExit = true; } @@ -8215,7 +8881,7 @@ void determine_ride_entrance_and_exit_locations() // At this point, we know we have a disconnected entrance or exit. // Search the map to find it. Skip the outer ring of invisible tiles. bool alreadyFoundEntrance = false; - bool alreadyFoundExit = false; + bool alreadyFoundExit = false; for (uint8_t x = 1; x < MAXIMUM_MAP_SIZE_TECHNICAL - 1; x++) { for (uint8_t y = 1; y < MAXIMUM_MAP_SIZE_TECHNICAL - 1; y++) @@ -8253,10 +8919,19 @@ void determine_ride_entrance_and_exit_locations() } // Found our entrance - ride_set_entrance_location(ride, stationIndex, { x, y, tileElement->base_height, (uint8_t)tile_element_get_direction(tileElement) }); + ride_set_entrance_location( + ride, + stationIndex, + { x, y, tileElement->base_height, (uint8_t)tile_element_get_direction(tileElement) }); alreadyFoundEntrance = true; - log_verbose("Fixed disconnected entrance of ride %d, station %d to x = %d, y = %d and z = %d.", rideIndex, stationIndex, x, y, tileElement->base_height); + log_verbose( + "Fixed disconnected entrance of ride %d, station %d to x = %d, y = %d and z = %d.", + rideIndex, + stationIndex, + x, + y, + tileElement->base_height); } else if (fixExit && tileElement->properties.entrance.type == ENTRANCE_TYPE_RIDE_EXIT) { @@ -8269,13 +8944,21 @@ void determine_ride_entrance_and_exit_locations() } // Found our exit - ride_set_exit_location(ride, stationIndex, { x, y, tileElement->base_height, (uint8_t)tile_element_get_direction(tileElement) }); + ride_set_exit_location( + ride, + stationIndex, + { x, y, tileElement->base_height, (uint8_t)tile_element_get_direction(tileElement) }); alreadyFoundExit = true; - log_verbose("Fixed disconnected exit of ride %d, station %d to x = %d, y = %d and z = %d.", rideIndex, stationIndex, x, y, tileElement->base_height); + log_verbose( + "Fixed disconnected exit of ride %d, station %d to x = %d, y = %d and z = %d.", + rideIndex, + stationIndex, + x, + y, + tileElement->base_height); } - } - while (!(tileElement++)->IsLastForTile()); + } while (!(tileElement++)->IsLastForTile()); } } } diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index 00a19d53ce..6971affff3 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -20,31 +20,34 @@ interface IObjectManager; -#define MAX_RIDE_TYPES_PER_RIDE_ENTRY 3 +#define MAX_RIDE_TYPES_PER_RIDE_ENTRY 3 // The max number of different types of vehicle. // Examples of vehicles here are the locomotive, tender and carriage of the Miniature Railway. -#define MAX_VEHICLES_PER_RIDE_ENTRY 4 -#define MAX_VEHICLES_PER_RIDE 32 -#define RIDE_ENTRY_INDEX_NULL 255 -#define NUM_COLOUR_SCHEMES 4 -#define MAX_CATEGORIES_PER_RIDE 2 -#define DOWNTIME_HISTORY_SIZE 8 -#define CUSTOMER_HISTORY_SIZE 10 -#define MAX_CARS_PER_TRAIN 255 -#define MAX_STATIONS 4 -#define RIDE_MEASUREMENT_MAX_ITEMS 4800 -#define MAX_RIDES 255 -#define RIDE_ID_NULL 255 -#define RIDE_ADJACENCY_CHECK_DISTANCE 5 +#define MAX_VEHICLES_PER_RIDE_ENTRY 4 +#define MAX_VEHICLES_PER_RIDE 32 +#define RIDE_ENTRY_INDEX_NULL 255 +#define NUM_COLOUR_SCHEMES 4 +#define MAX_CATEGORIES_PER_RIDE 2 +#define DOWNTIME_HISTORY_SIZE 8 +#define CUSTOMER_HISTORY_SIZE 10 +#define MAX_CARS_PER_TRAIN 255 +#define MAX_STATIONS 4 +#define RIDE_MEASUREMENT_MAX_ITEMS 4800 +#define MAX_RIDES 255 +#define RIDE_ID_NULL 255 +#define RIDE_ADJACENCY_CHECK_DISTANCE 5 #pragma pack(push, 1) /** * Couples a ride type and subtype together. */ -struct ride_list_item { - union { - struct { +struct ride_list_item +{ + union + { + struct + { uint8_t type; uint8_t entry_index; }; @@ -53,33 +56,38 @@ struct ride_list_item { }; assert_struct_size(ride_list_item, 2); -struct track_colour { +struct track_colour +{ uint8_t main; uint8_t additional; uint8_t supports; }; assert_struct_size(track_colour, 3); -struct vehicle_colour { +struct vehicle_colour +{ uint8_t main; uint8_t additional_1; uint8_t additional_2; }; assert_struct_size(vehicle_colour, 3); -struct track_colour_preset_list { +struct track_colour_preset_list +{ uint8_t count; track_colour list[256]; }; assert_struct_size(track_colour_preset_list, (1 + 256 * 3)); -struct vehicle_colour_preset_list { +struct vehicle_colour_preset_list +{ uint8_t count; vehicle_colour list[256]; }; assert_struct_size(vehicle_colour_preset_list, (1 + 256 * 3)); -struct rct_ride_name { +struct rct_ride_name +{ rct_string_id name; rct_string_id description; }; @@ -89,39 +97,40 @@ assert_struct_size(rct_ride_name, 4); * Ride type structure. * size: unknown */ -struct rct_ride_entry { +struct rct_ride_entry +{ rct_ride_name naming; - uint32_t images_offset; // 0x004. The first three images are previews. They correspond to the ride_type[] array. - uint32_t flags; // 0x008 - uint8_t ride_type[RCT2_MAX_RIDE_TYPES_PER_RIDE_ENTRY];// 0x00C - uint8_t min_cars_in_train; // 0x00F - uint8_t max_cars_in_train; // 0x010 - uint8_t cars_per_flat_ride; // 0x011 + uint32_t images_offset; // 0x004. The first three images are previews. They correspond to the ride_type[] array. + uint32_t flags; // 0x008 + uint8_t ride_type[RCT2_MAX_RIDE_TYPES_PER_RIDE_ENTRY]; // 0x00C + uint8_t min_cars_in_train; // 0x00F + uint8_t max_cars_in_train; // 0x010 + uint8_t cars_per_flat_ride; // 0x011 // Number of cars that can't hold passengers - uint8_t zero_cars; // 0x012 + uint8_t zero_cars; // 0x012 // The index to the vehicle type displayed in // the vehicle tab. - uint8_t tab_vehicle; // 0x013 - uint8_t default_vehicle; // 0x014 + uint8_t tab_vehicle; // 0x013 + uint8_t default_vehicle; // 0x014 // Convert from first - fourth vehicle to // vehicle structure - uint8_t front_vehicle; // 0x015 - uint8_t second_vehicle; // 0x016 - uint8_t rear_vehicle; // 0x017 - uint8_t third_vehicle; // 0x018 - uint8_t pad_019; // 0x019 + uint8_t front_vehicle; // 0x015 + uint8_t second_vehicle; // 0x016 + uint8_t rear_vehicle; // 0x017 + uint8_t third_vehicle; // 0x018 + uint8_t pad_019; // 0x019 rct_ride_entry_vehicle vehicles[RCT2_MAX_VEHICLES_PER_RIDE_ENTRY]; // 0x01A - vehicle_colour_preset_list *vehicle_preset_list; // 0x1AE - int8_t excitement_multiplier; // 0x1B2 - int8_t intensity_multiplier; // 0x1B3 - int8_t nausea_multiplier; // 0x1B4 - uint8_t max_height; // 0x1B5 - uint64_t enabledTrackPieces; // 0x1B6 - uint8_t category[RCT2_MAX_CATEGORIES_PER_RIDE]; // 0x1BE - uint8_t shop_item; // 0x1C0 - uint8_t shop_item_secondary; // 0x1C1 + vehicle_colour_preset_list* vehicle_preset_list; // 0x1AE + int8_t excitement_multiplier; // 0x1B2 + int8_t intensity_multiplier; // 0x1B3 + int8_t nausea_multiplier; // 0x1B4 + uint8_t max_height; // 0x1B5 + uint64_t enabledTrackPieces; // 0x1B6 + uint8_t category[RCT2_MAX_CATEGORIES_PER_RIDE]; // 0x1BE + uint8_t shop_item; // 0x1C0 + uint8_t shop_item_secondary; // 0x1C1 rct_string_id capacity; - void * obj; + void* obj; }; #pragma pack(pop) @@ -132,7 +141,7 @@ struct rct_ride_entry { * This is based on RCT2's ride structure. * Padding and no longer used fields have been removed. */ -struct Ride +struct Ride { uint8_t type; // pointer to static info. for example, wild mouse type is 0x36, subtype is @@ -144,9 +153,11 @@ struct Ride // 0 = closed, 1 = open, 2 = test uint8_t status; rct_string_id name; - union { + union + { uint32_t name_arguments; - struct { + struct + { rct_string_id name_arguments_type_name; uint16_t name_arguments_number; }; @@ -162,7 +173,7 @@ struct Ride TileCoordsXYZD entrances[MAX_STATIONS]; TileCoordsXYZD exits[MAX_STATIONS]; uint16_t last_peep_in_queue[MAX_STATIONS]; - uint16_t vehicles[MAX_VEHICLES_PER_RIDE]; // Points to the first car in the train + uint16_t vehicles[MAX_VEHICLES_PER_RIDE]; // Points to the first car in the train uint8_t depart_flags; uint8_t num_stations; uint8_t num_vehicles; @@ -173,7 +184,8 @@ struct Ride uint8_t min_max_cars_per_train; uint8_t min_waiting_time; uint8_t max_waiting_time; - union { + union + { uint8_t operation_option; uint8_t time_limit; uint8_t num_laps; @@ -208,24 +220,25 @@ struct Ride // this is to prevent counting special tracks multiple times LocationXY8 cur_test_track_location; // Next 3 variables are related (XXXX XYYY ZZZa aaaa) - uint16_t turn_count_default; // X = current turn count + uint16_t turn_count_default; // X = current turn count uint16_t turn_count_banked; - uint16_t turn_count_sloped; // X = number turns > 3 elements - union { - uint8_t inversions; // (???X XXXX) - uint8_t holes; // (???X XXXX) + uint16_t turn_count_sloped; // X = number turns > 3 elements + union + { + uint8_t inversions; // (???X XXXX) + uint8_t holes; // (???X XXXX) // This is a very rough approximation of how much of the ride is undercover. // It reaches the maximum value of 7 at about 50% undercover and doesn't increase beyond that. - uint8_t sheltered_eighths; // (XXX?-????) + uint8_t sheltered_eighths; // (XXX?-????) }; // Y is number of powered lifts, X is drops - uint8_t drops; // (YYXX XXXX) + uint8_t drops; // (YYXX XXXX) uint8_t start_drop_height; uint8_t highest_drop_height; int32_t sheltered_length; // Unused always 0? Should affect nausea uint16_t var_11C; - uint8_t num_sheltered_sections; // (?abY YYYY) + uint8_t num_sheltered_sections; // (?abY YYYY) // see cur_test_track_location uint8_t cur_test_track_z; // Customer counter in the current 960 game tick (about 30 seconds) interval @@ -237,9 +250,11 @@ struct Ride money16 price; LocationXY8 chairlift_bullwheel_location[2]; uint8_t chairlift_bullwheel_z[2]; - union { + union + { rating_tuple ratings; - struct { + struct + { ride_rating excitement; ride_rating intensity; ride_rating nausea; @@ -255,12 +270,13 @@ struct Ride uint32_t total_customers; money32 total_profit; uint8_t popularity; - uint8_t popularity_time_out; // Updated every purchase and ?possibly by time? - uint8_t popularity_next; // When timeout reached this will be the next popularity + uint8_t popularity_time_out; // Updated every purchase and ?possibly by time? + uint8_t popularity_next; // When timeout reached this will be the next popularity uint16_t num_riders; uint8_t music_tune_id; uint8_t slide_in_use; - union { + union + { uint16_t slide_peep; uint16_t maze_tiles; }; @@ -282,8 +298,8 @@ struct Ride { struct { - uint8_t reliability_subvalue; // 0 - 255, acts like the decimals for reliability_percentage - uint8_t reliability_percentage; // Starts at 100 and decreases from there. + uint8_t reliability_subvalue; // 0 - 255, acts like the decimals for reliability_percentage + uint8_t reliability_percentage; // Starts at 100 and decreases from there. }; uint16_t reliability; }; @@ -333,7 +349,8 @@ struct Ride * Ride measurement structure. * size: 0x04B0C */ -struct rct_ride_measurement { +struct rct_ride_measurement +{ uint8_t ride_index; // 0x0000 uint8_t flags; // 0x0001 uint32_t last_use_tick; // 0x0002 @@ -341,29 +358,31 @@ struct rct_ride_measurement { uint16_t current_item; // 0x0008 uint8_t vehicle_index; // 0x000A uint8_t current_station; // 0x000B - int8_t vertical[RIDE_MEASUREMENT_MAX_ITEMS]; // 0x000C - int8_t lateral[RIDE_MEASUREMENT_MAX_ITEMS]; // 0x12CC + int8_t vertical[RIDE_MEASUREMENT_MAX_ITEMS]; // 0x000C + int8_t lateral[RIDE_MEASUREMENT_MAX_ITEMS]; // 0x12CC uint8_t velocity[RIDE_MEASUREMENT_MAX_ITEMS]; // 0x258C uint8_t altitude[RIDE_MEASUREMENT_MAX_ITEMS]; // 0x384C }; assert_struct_size(rct_ride_measurement, 0x4b0c); -struct track_begin_end { +struct track_begin_end +{ int32_t begin_x; int32_t begin_y; int32_t begin_z; int32_t begin_direction; - rct_tile_element *begin_element; + rct_tile_element* begin_element; int32_t end_x; int32_t end_y; int32_t end_direction; - rct_tile_element *end_element; + rct_tile_element* end_element; }; #ifdef PLATFORM_32BIT assert_struct_size(track_begin_end, 36); #endif -struct ride_name_args { +struct ride_name_args +{ uint16_t type_name; uint16_t number; }; @@ -380,14 +399,16 @@ assert_struct_size(ride_name_args, 4); #define TYPE_TO_RIDE_ENTRY_SLOTS 492 extern uint8_t gTypeToRideEntryIndexMap[TYPE_TO_RIDE_ENTRY_SLOTS]; -enum { +enum +{ RIDE_CLASS_RIDE, RIDE_CLASS_SHOP_OR_STALL, RIDE_CLASS_KIOSK_OR_FACILITY }; // Constants used by the lifecycle_flags property at 0x1D0 -enum { +enum +{ RIDE_LIFECYCLE_ON_TRACK = 1 << 0, RIDE_LIFECYCLE_TESTED = 1 << 1, RIDE_LIFECYCLE_TEST_IN_PROGRESS = 1 << 2, @@ -406,39 +427,41 @@ enum { RIDE_LIFECYCLE_INDESTRUCTIBLE_TRACK = 1 << 15, RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED = 1 << 16, RIDE_LIFECYCLE_CABLE_LIFT = 1 << 17, - RIDE_LIFECYCLE_NOT_CUSTOM_DESIGN = 1 << 18, // Used for the Award for Best Custom-designed Rides + RIDE_LIFECYCLE_NOT_CUSTOM_DESIGN = 1 << 18, // Used for the Award for Best Custom-designed Rides RIDE_LIFECYCLE_SIX_FLAGS_DEPRECATED = 1 << 19 // Not used anymore }; // Constants used by the ride_type->flags property at 0x008 -enum { - RIDE_ENTRY_FLAG_VEHICLE_TAB_SCALE_HALF = 1 << 0, - RIDE_ENTRY_FLAG_NO_INVERSIONS = 1 << 1, - RIDE_ENTRY_FLAG_NO_BANKED_TRACK = 1 << 2, - RIDE_ENTRY_FLAG_PLAY_DEPART_SOUND = 1 << 3, - RIDE_ENTRY_FLAG_ALTERNATIVE_SWING_MODE_1 = 1 << 4, +enum +{ + RIDE_ENTRY_FLAG_VEHICLE_TAB_SCALE_HALF = 1 << 0, + RIDE_ENTRY_FLAG_NO_INVERSIONS = 1 << 1, + RIDE_ENTRY_FLAG_NO_BANKED_TRACK = 1 << 2, + RIDE_ENTRY_FLAG_PLAY_DEPART_SOUND = 1 << 3, + RIDE_ENTRY_FLAG_ALTERNATIVE_SWING_MODE_1 = 1 << 4, // Twist type rotation ride - RIDE_ENTRY_FLAG_ALTERNATIVE_ROTATION_MODE_1 = 1 << 5, + RIDE_ENTRY_FLAG_ALTERNATIVE_ROTATION_MODE_1 = 1 << 5, // Lifting arm rotation ride (enterprise) - RIDE_ENTRY_FLAG_ALTERNATIVE_ROTATION_MODE_2 = 1 << 6, - RIDE_ENTRY_FLAG_DISABLE_WANDERING_DEPRECATED = 1 << 7, - RIDE_ENTRY_FLAG_PLAY_SPLASH_SOUND = 1 << 8, - RIDE_ENTRY_FLAG_PLAY_SPLASH_SOUND_SLIDE = 1 << 9, - RIDE_ENTRY_FLAG_COVERED_RIDE = 1 << 10, - RIDE_ENTRY_FLAG_LIMIT_AIRTIME_BONUS = 1 << 11, - RIDE_ENTRY_FLAG_SEPARATE_RIDE_NAME_DEPRECATED = 1 << 12, // Always set with SEPARATE_RIDE, and deprecated in favour of it. - RIDE_ENTRY_FLAG_SEPARATE_RIDE_DEPRECATED = 1 << 13, // Made redundant by ride groups - RIDE_ENTRY_FLAG_CANNOT_BREAK_DOWN = 1 << 14, - RIDE_ENTRY_DISABLE_LAST_OPERATING_MODE = 1 << 15, + RIDE_ENTRY_FLAG_ALTERNATIVE_ROTATION_MODE_2 = 1 << 6, + RIDE_ENTRY_FLAG_DISABLE_WANDERING_DEPRECATED = 1 << 7, + RIDE_ENTRY_FLAG_PLAY_SPLASH_SOUND = 1 << 8, + RIDE_ENTRY_FLAG_PLAY_SPLASH_SOUND_SLIDE = 1 << 9, + RIDE_ENTRY_FLAG_COVERED_RIDE = 1 << 10, + RIDE_ENTRY_FLAG_LIMIT_AIRTIME_BONUS = 1 << 11, + RIDE_ENTRY_FLAG_SEPARATE_RIDE_NAME_DEPRECATED = 1 << 12, // Always set with SEPARATE_RIDE, and deprecated in favour of it. + RIDE_ENTRY_FLAG_SEPARATE_RIDE_DEPRECATED = 1 << 13, // Made redundant by ride groups + RIDE_ENTRY_FLAG_CANNOT_BREAK_DOWN = 1 << 14, + RIDE_ENTRY_DISABLE_LAST_OPERATING_MODE = 1 << 15, RIDE_ENTRY_FLAG_DISABLE_DOOR_CONSTRUCTION_DEPRECATED = 1 << 16, - RIDE_ENTRY_DISABLE_FIRST_TWO_OPERATING_MODES = 1 << 17, - RIDE_ENTRY_FLAG_DISABLE_COLLISION_CRASHES = 1 << 18, - RIDE_ENTRY_FLAG_DISABLE_COLOUR_TAB = 1 << 19, + RIDE_ENTRY_DISABLE_FIRST_TWO_OPERATING_MODES = 1 << 17, + RIDE_ENTRY_FLAG_DISABLE_COLLISION_CRASHES = 1 << 18, + RIDE_ENTRY_FLAG_DISABLE_COLOUR_TAB = 1 << 19, // Must be set with swing mode 1 as well. - RIDE_ENTRY_FLAG_ALTERNATIVE_SWING_MODE_2 = 1 << 20, + RIDE_ENTRY_FLAG_ALTERNATIVE_SWING_MODE_2 = 1 << 20, }; -enum { +enum +{ RIDE_TESTING_SHELTERED = (1 << 0), RIDE_TESTING_TURN_LEFT = (1 << 1), RIDE_TESTING_TURN_RIGHT = (1 << 2), @@ -449,7 +472,8 @@ enum { RIDE_TESTING_DROP_UP = (1 << 7), }; -enum { +enum +{ RIDE_TYPE_NULL = 255, RIDE_TYPE_SPIRAL_ROLLER_COASTER = 0, RIDE_TYPE_STAND_UP_ROLLER_COASTER, @@ -546,17 +570,19 @@ enum { RIDE_TYPE_COUNT }; -enum { +enum +{ RIDE_STATUS_CLOSED, RIDE_STATUS_OPEN, RIDE_STATUS_TESTING }; -enum { +enum +{ RIDE_MODE_NORMAL, RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, - RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, // RCT2 style, pass through station + RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, // RCT2 style, pass through station RIDE_MODE_SHUTTLE, RIDE_MODE_BOAT_HIRE, RIDE_MODE_UPWARD_LAUNCH, @@ -588,17 +614,19 @@ enum { RIDE_MODE_CROOKED_HOUSE, RIDE_MODE_FREEFALL_DROP, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, - RIDE_MODE_POWERED_LAUNCH, // RCT1 style, don't pass through station + RIDE_MODE_POWERED_LAUNCH, // RCT1 style, don't pass through station RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED }; -enum { +enum +{ RIDE_COLOUR_SCHEME_ALL_SAME, RIDE_COLOUR_SCHEME_DIFFERENT_PER_TRAIN, RIDE_COLOUR_SCHEME_DIFFERENT_PER_CAR }; -enum { +enum +{ RIDE_CATEGORY_TRANSPORT, RIDE_CATEGORY_GENTLE, RIDE_CATEGORY_ROLLERCOASTER, @@ -607,7 +635,8 @@ enum { RIDE_CATEGORY_SHOP }; -enum { +enum +{ MUSIC_STYLE_DODGEMS_BEAT, MUSIC_STYLE_FAIRGROUND_ORGAN, MUSIC_STYLE_ROMAN_FANFARE, @@ -644,7 +673,8 @@ enum { MUSIC_STYLE_COUNT }; -enum { +enum +{ BREAKDOWN_NONE = 255, BREAKDOWN_SAFETY_CUT_OUT = 0, BREAKDOWN_RESTRAINTS_STUCK_CLOSED, @@ -658,7 +688,8 @@ enum { BREAKDOWN_COUNT }; -enum { +enum +{ RIDE_MECHANIC_STATUS_UNDEFINED, RIDE_MECHANIC_STATUS_CALLING, RIDE_MECHANIC_STATUS_HEADING, @@ -666,7 +697,8 @@ enum { RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES }; -enum { +enum +{ RIDE_DEPART_WAIT_FOR_LOAD_MASK = 7, RIDE_DEPART_WAIT_FOR_LOAD = 1 << 3, RIDE_DEPART_LEAVE_WHEN_ANOTHER_ARRIVES = 1 << 4, @@ -675,7 +707,8 @@ enum { RIDE_DEPART_WAIT_FOR_MAXIMUM_LENGTH = 1 << 7 }; -enum { +enum +{ WAIT_FOR_LOAD_QUARTER, WAIT_FOR_LOAD_HALF, WAIT_FOR_LOAD_THREE_QUARTER, @@ -683,20 +716,23 @@ enum { WAIT_FOR_LOAD_ANY, }; -enum { +enum +{ RIDE_COLOUR_SCHEME_MAIN, RIDE_COLOUR_SCHEME_ADDITIONAL_1, RIDE_COLOUR_SCHEME_ADDITIONAL_2, RIDE_COLOUR_SCHEME_ADDITIONAL_3 }; -enum { +enum +{ VEHICLE_COLOUR_SCHEME_SAME, VEHICLE_COLOUR_SCHEME_PER_TRAIN, VEHICLE_COLOUR_SCHEME_PER_VEHICLE }; -enum { +enum +{ RIDE_ENTRANCE_STYLE_PLAIN, RIDE_ENTRANCE_STYLE_WOODEN, RIDE_ENTRANCE_STYLE_CANVAS_TENT, @@ -714,7 +750,8 @@ enum { RIDE_ENTRANCE_STYLE_COUNT }; -enum { +enum +{ RIDE_INSPECTION_EVERY_10_MINUTES, RIDE_INSPECTION_EVERY_20_MINUTES, RIDE_INSPECTION_EVERY_30_MINUTES, @@ -725,26 +762,29 @@ enum { }; // Flags used by ride->window_invalidate_flags -enum { - RIDE_INVALIDATE_RIDE_CUSTOMER = 1, - RIDE_INVALIDATE_RIDE_INCOME = 1 << 1, - RIDE_INVALIDATE_RIDE_MAIN = 1 << 2, - RIDE_INVALIDATE_RIDE_LIST = 1 << 3, - RIDE_INVALIDATE_RIDE_OPERATING = 1 << 4, +enum +{ + RIDE_INVALIDATE_RIDE_CUSTOMER = 1, + RIDE_INVALIDATE_RIDE_INCOME = 1 << 1, + RIDE_INVALIDATE_RIDE_MAIN = 1 << 2, + RIDE_INVALIDATE_RIDE_LIST = 1 << 3, + RIDE_INVALIDATE_RIDE_OPERATING = 1 << 4, RIDE_INVALIDATE_RIDE_MAINTENANCE = 1 << 5, }; -enum { +enum +{ RIDE_MEASUREMENT_FLAG_RUNNING = 1 << 0, RIDE_MEASUREMENT_FLAG_UNLOADING = 1 << 1, RIDE_MEASUREMENT_FLAG_G_FORCES = 1 << 2 }; // Constants for ride->special_track_elements -enum { +enum +{ RIDE_ELEMENT_TUNNEL_SPLASH_OR_RAPIDS = 1 << 5, - RIDE_ELEMENT_REVERSER_OR_WATERFALL = 1 << 6, - RIDE_ELEMENT_WHIRLPOOL = 1 << 7 + RIDE_ELEMENT_REVERSER_OR_WATERFALL = 1 << 6, + RIDE_ELEMENT_WHIRLPOOL = 1 << 7 }; enum ride_type_flags : uint32_t @@ -755,43 +795,54 @@ enum ride_type_flags : uint32_t RIDE_TYPE_FLAG_3 = 1 << 3, RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION = 1 << 4, RIDE_TYPE_FLAG_CAN_SYNCHRONISE_ADJACENT_STATIONS = 1 << 5, - RIDE_TYPE_FLAG_TRACK_MUST_BE_ON_WATER = 1 << 6, // used only by boat Hire and submarine ride + RIDE_TYPE_FLAG_TRACK_MUST_BE_ON_WATER = 1 << 6, // used only by boat Hire and submarine ride RIDE_TYPE_FLAG_HAS_G_FORCES = 1 << 7, - RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS = 1 << 8, // used by rides that can't have gaps, like those with a vertical tower, such as the observation tower + RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS + = 1 << 8, // used by rides that can't have gaps, like those with a vertical tower, such as the observation tower RIDE_TYPE_FLAG_HAS_DATA_LOGGING = 1 << 9, RIDE_TYPE_FLAG_HAS_DROPS = 1 << 10, RIDE_TYPE_FLAG_NO_TEST_MODE = 1 << 11, - RIDE_TYPE_FLAG_TRACK_ELEMENTS_HAVE_TWO_VARIETIES = 1 << 12, // used by rides with two varieties, like the u and o shapes of the dinghy slide and the dry and submerged track of the water coaster - RIDE_TYPE_FLAG_NO_VEHICLES = 1 << 13, // used only by maze, spiral slide and shops + RIDE_TYPE_FLAG_TRACK_ELEMENTS_HAVE_TWO_VARIETIES = 1 + << 12, // used by rides with two varieties, like the u and o shapes of the dinghy slide and the dry and submerged track + // of the water coaster + RIDE_TYPE_FLAG_NO_VEHICLES = 1 << 13, // used only by maze, spiral slide and shops RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS = 1 << 14, RIDE_TYPE_FLAG_HAS_NO_TRACK = 1 << 15, - RIDE_TYPE_FLAG_16 = 1 << 16, // something to do with vehicle colour scheme + RIDE_TYPE_FLAG_16 = 1 << 16, // something to do with vehicle colour scheme RIDE_TYPE_FLAG_IS_SHOP = 1 << 17, - RIDE_TYPE_FLAG_TRACK_NO_WALLS = 1 << 18, // if set, wall scenery can not share a tile with the ride's track + RIDE_TYPE_FLAG_TRACK_NO_WALLS = 1 << 18, // if set, wall scenery can not share a tile with the ride's track RIDE_TYPE_FLAG_FLAT_RIDE = 1 << 19, - RIDE_TYPE_FLAG_PEEP_WILL_RIDE_AGAIN = 1 << 20, // whether or not guests will go on the ride again if they liked it (this is usually applied to everything apart from transport rides) - RIDE_TYPE_FLAG_PEEP_SHOULD_GO_INSIDE_FACILITY = 1 << 21, // used by toilets and first aid to mark that peep should go inside the building (rather than 'buying' at the counter) - RIDE_TYPE_FLAG_IN_RIDE = 1 << 22, // peeps are "IN" (ride) rather than "ON" (ride) + RIDE_TYPE_FLAG_PEEP_WILL_RIDE_AGAIN = 1 << 20, // whether or not guests will go on the ride again if they liked it (this is + // usually applied to everything apart from transport rides) + RIDE_TYPE_FLAG_PEEP_SHOULD_GO_INSIDE_FACILITY = 1 << 21, // used by toilets and first aid to mark that peep should go inside + // the building (rather than 'buying' at the counter) + RIDE_TYPE_FLAG_IN_RIDE = 1 << 22, // peeps are "IN" (ride) rather than "ON" (ride) RIDE_TYPE_FLAG_SELLS_FOOD = 1 << 23, RIDE_TYPE_FLAG_SELLS_DRINKS = 1 << 24, RIDE_TYPE_FLAG_IS_BATHROOM = 1 << 25, - RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS = 1 << 26, // whether or not vehicle colours can be set + RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS = 1 << 26, // whether or not vehicle colours can be set RIDE_TYPE_FLAG_CHECK_FOR_STALLING = 1 << 27, RIDE_TYPE_FLAG_HAS_TRACK = 1 << 28, - RIDE_TYPE_FLAG_29 = 1 << 29, // used only by lift - RIDE_TYPE_FLAG_HAS_LARGE_CURVES = 1 << 30, // whether the ride supports large (45 degree turn) curves + RIDE_TYPE_FLAG_29 = 1 << 29, // used only by lift + RIDE_TYPE_FLAG_HAS_LARGE_CURVES = 1 << 30, // whether the ride supports large (45 degree turn) curves RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR = 1u << 31, }; -// Hack for MSVC which thinks RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR = 1u << 31 is signed and generates narrowing conversion warnings -constexpr inline uint32_t operator | (ride_type_flags a, ride_type_flags b) { return static_cast(static_cast(a) | static_cast(b)); } +// Hack for MSVC which thinks RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR = 1u << 31 is signed and generates narrowing +// conversion warnings +constexpr inline uint32_t operator|(ride_type_flags a, ride_type_flags b) +{ + return static_cast(static_cast(a) | static_cast(b)); +} -enum { +enum +{ RIDE_CRASH_TYPE_NONE = 0, RIDE_CRASH_TYPE_NO_FATALITIES = 2, RIDE_CRASH_TYPE_FATALITIES = 8 }; -enum { +enum +{ RIDE_CONSTRUCTION_STATE_0, RIDE_CONSTRUCTION_STATE_FRONT, RIDE_CONSTRUCTION_STATE_BACK, @@ -803,13 +854,15 @@ enum { RIDE_CONSTRUCTION_STATE_MAZE_FILL }; -enum { +enum +{ RIDE_SET_VEHICLES_COMMAND_TYPE_NUM_TRAINS, RIDE_SET_VEHICLES_COMMAND_TYPE_NUM_CARS_PER_TRAIN, RIDE_SET_VEHICLES_COMMAND_TYPE_RIDE_ENTRY }; -enum { +enum +{ RIDE_SETTING_MODE, RIDE_SETTING_DEPARTURE, RIDE_SETTING_MIN_WAITING_TIME, @@ -823,26 +876,30 @@ enum { RIDE_SETTING_RIDE_TYPE, }; -enum { +enum +{ MAZE_WALL_TYPE_BRICK, MAZE_WALL_TYPE_HEDGE, MAZE_WALL_TYPE_ICE, MAZE_WALL_TYPE_WOOD, }; -enum { - TRACK_SELECTION_FLAG_ARROW = 1 << 0, - TRACK_SELECTION_FLAG_TRACK = 1 << 1, +enum +{ + TRACK_SELECTION_FLAG_ARROW = 1 << 0, + TRACK_SELECTION_FLAG_TRACK = 1 << 1, TRACK_SELECTION_FLAG_ENTRANCE_OR_EXIT = 1 << 2, - TRACK_SELECTION_FLAG_RECHECK = 1 << 3, + TRACK_SELECTION_FLAG_RECHECK = 1 << 3, }; -enum { +enum +{ RIDE_MODIFY_DEMOLISH, RIDE_MODIFY_RENEW }; -struct rct_ride_properties { +struct rct_ride_properties +{ uint32_t flags; uint8_t min_value; uint8_t max_value; @@ -862,9 +919,9 @@ struct rct_ride_properties { #define STATION_DEPART_MASK (~STATION_DEPART_FLAG) #define CURRENT_TURN_COUNT_MASK 0xF800 -#define TURN_MASK_1_ELEMENT 0x001F -#define TURN_MASK_2_ELEMENTS 0x00E0 -#define TURN_MASK_3_ELEMENTS 0x0700 +#define TURN_MASK_1_ELEMENT 0x001F +#define TURN_MASK_2_ELEMENTS 0x00E0 +#define TURN_MASK_3_ELEMENTS 0x0700 #define TURN_MASK_4_PLUS_ELEMENTS 0xF800 #define CONSTRUCTION_LIFT_HILL_SELECTED 1 @@ -872,16 +929,16 @@ struct rct_ride_properties { extern const rct_ride_properties RideProperties[RIDE_TYPE_COUNT]; /** Helper macros until rides are stored in this module. */ -Ride * get_ride(int32_t index); -rct_ride_entry * get_ride_entry(int32_t index); -void get_ride_entry_name(char * name, int32_t index); -rct_ride_measurement * get_ride_measurement(int32_t index); +Ride* get_ride(int32_t index); +rct_ride_entry* get_ride_entry(int32_t index); +void get_ride_entry_name(char* name, int32_t index); +rct_ride_measurement* get_ride_measurement(int32_t index); /** * Helper macro loop for enumerating through all the non null rides. */ -#define FOR_ALL_RIDES(i, ride) \ - for (i = 0; i < MAX_RIDES; i++) \ +#define FOR_ALL_RIDES(i, ride) \ + for (i = 0; i < MAX_RIDES; i++) \ if ((ride = get_ride(i))->type != RIDE_TYPE_NULL) extern money16 gTotalRideValueForMoney; @@ -946,12 +1003,12 @@ extern int32_t gRideRemoveTrackPieceCallbackType; extern uint8_t gLastEntranceStyle; int32_t ride_get_empty_slot(); -int32_t ride_get_default_mode(Ride *ride); +int32_t ride_get_default_mode(Ride* ride); int32_t ride_get_count(); -int32_t ride_get_total_queue_length(Ride *ride); -int32_t ride_get_max_queue_time(Ride *ride); -rct_peep * ride_get_queue_head_guest(Ride * ride, int32_t stationIndex); -void ride_queue_insert_guest_at_front(Ride * ride, int32_t stationIndex, rct_peep * peep); +int32_t ride_get_total_queue_length(Ride* ride); +int32_t ride_get_max_queue_time(Ride* ride); +rct_peep* ride_get_queue_head_guest(Ride* ride, int32_t stationIndex); +void ride_queue_insert_guest_at_front(Ride* ride, int32_t stationIndex, rct_peep* peep); void ride_init_all(); void reset_all_ride_build_dates(); void ride_update_favourited_stat(); @@ -959,63 +1016,82 @@ void ride_update_all(); void ride_check_all_reachable(); void ride_update_satisfaction(Ride* ride, uint8_t happiness); void ride_update_popularity(Ride* ride, uint8_t pop_amount); -bool ride_try_get_origin_element(int32_t rideIndex, CoordsXYE *output); -int32_t ride_find_track_gap(CoordsXYE *input, CoordsXYE *output); +bool ride_try_get_origin_element(int32_t rideIndex, CoordsXYE* output); +int32_t ride_find_track_gap(CoordsXYE* input, CoordsXYE* output); void ride_construct_new(ride_list_item listItem); void ride_construct(int32_t rideIndex); -int32_t ride_modify(CoordsXYE *input); +int32_t ride_modify(CoordsXYE* input); void ride_remove_peeps(int32_t rideIndex); void ride_clear_blocked_tiles(int32_t rideIndex); -void ride_get_status(int32_t rideIndex, rct_string_id *formatSecondary, int32_t *argument); -rct_peep *ride_get_assigned_mechanic(Ride *ride); -int32_t ride_get_total_length(Ride *ride); -int32_t ride_get_total_time(Ride *ride); -int32_t ride_can_have_multiple_circuits(Ride *ride); -track_colour ride_get_track_colour(Ride *ride, int32_t colourScheme); -vehicle_colour ride_get_vehicle_colour(Ride *ride, int32_t vehicleIndex); +void ride_get_status(int32_t rideIndex, rct_string_id* formatSecondary, int32_t* argument); +rct_peep* ride_get_assigned_mechanic(Ride* ride); +int32_t ride_get_total_length(Ride* ride); +int32_t ride_get_total_time(Ride* ride); +int32_t ride_can_have_multiple_circuits(Ride* ride); +track_colour ride_get_track_colour(Ride* ride, int32_t colourScheme); +vehicle_colour ride_get_vehicle_colour(Ride* ride, int32_t vehicleIndex); int32_t ride_get_unused_preset_vehicle_colour(uint8_t ride_sub_type); -void ride_set_vehicle_colours_to_random_preset(Ride *ride, uint8_t preset_index); -rct_ride_entry *get_ride_entry_by_ride(Ride *ride); -uint8_t *get_ride_entry_indices_for_ride_type(uint8_t rideType); +void ride_set_vehicle_colours_to_random_preset(Ride* ride, uint8_t preset_index); +rct_ride_entry* get_ride_entry_by_ride(Ride* ride); +uint8_t* get_ride_entry_indices_for_ride_type(uint8_t rideType); void reset_type_to_ride_entry_index_map(IObjectManager& objectManager); -void ride_measurement_clear(Ride *ride); +void ride_measurement_clear(Ride* ride); void ride_measurements_update(); -rct_ride_measurement *ride_get_measurement(int32_t rideIndex, rct_string_id *message); +rct_ride_measurement* ride_get_measurement(int32_t rideIndex, rct_string_id* message); void ride_breakdown_add_news_item(int32_t rideIndex); -rct_peep *ride_find_closest_mechanic(Ride *ride, int32_t forInspection); +rct_peep* ride_find_closest_mechanic(Ride* ride, int32_t forInspection); int32_t ride_is_valid_for_open(int32_t rideIndex, int32_t goingToBeOpen, int32_t isApplying); int32_t ride_is_valid_for_test(int32_t rideIndex, int32_t goingToBeOpen, int32_t isApplying); int32_t ride_initialise_construction_window(int32_t rideIndex); void ride_construction_invalidate_current_track(); -int32_t sub_6C683D(int32_t* x, int32_t* y, int32_t* z, int32_t direction, int32_t type, uint16_t extra_params, rct_tile_element** output_element, uint16_t flags); -void ride_set_map_tooltip(rct_tile_element *tileElement); -int32_t ride_music_params_update(int16_t x, int16_t y, int16_t z, uint8_t rideIndex, uint16_t sampleRate, uint32_t position, uint8_t *tuneId); +int32_t sub_6C683D( + int32_t* x, + int32_t* y, + int32_t* z, + int32_t direction, + int32_t type, + uint16_t extra_params, + rct_tile_element** output_element, + uint16_t flags); +void ride_set_map_tooltip(rct_tile_element* tileElement); +int32_t ride_music_params_update( + int16_t x, int16_t y, int16_t z, uint8_t rideIndex, uint16_t sampleRate, uint32_t position, uint8_t* tuneId); void ride_music_update_final(); void ride_prepare_breakdown(int32_t rideIndex, int32_t breakdownReason); -rct_tile_element *ride_get_station_start_track_element(Ride *ride, int32_t stationIndex); -rct_tile_element *ride_get_station_exit_element(int32_t x, int32_t y, int32_t z); +rct_tile_element* ride_get_station_start_track_element(Ride* ride, int32_t stationIndex); +rct_tile_element* ride_get_station_exit_element(int32_t x, int32_t y, int32_t z); void ride_set_status(int32_t rideIndex, int32_t status); -void game_command_set_ride_status(int32_t *eax, int32_t *ebx, int32_t *ecx, int32_t *edx, int32_t *esi, int32_t *edi, int32_t *ebp); -void ride_set_name(int32_t rideIndex, const char *name); -void game_command_set_ride_name(int32_t *eax, int32_t *ebx, int32_t *ecx, int32_t *edx, int32_t *esi, int32_t *edi, int32_t *ebp); -void game_command_set_ride_setting(int32_t *eax, int32_t *ebx, int32_t *ecx, int32_t *edx, int32_t *esi, int32_t *edi, int32_t *ebp); +void game_command_set_ride_status( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); +void ride_set_name(int32_t rideIndex, const char* name); +void game_command_set_ride_name( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); +void game_command_set_ride_setting( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); int32_t ride_get_refund_price(int32_t ride_id); int32_t ride_get_random_colour_preset_index(uint8_t ride_type); -void ride_set_colour_preset(Ride *ride, uint8_t index); -money32 ride_get_common_price(Ride *forRide); -rct_ride_name get_ride_naming(const uint8_t rideType, rct_ride_entry * rideEntry); -void game_command_create_ride(int32_t *eax, int32_t *ebx, int32_t *ecx, int32_t *edx, int32_t *esi, int32_t *edi, int32_t *ebp); -void game_command_callback_ride_construct_new(int32_t eax, int32_t ebx, int32_t ecx, int32_t edx, int32_t esi, int32_t edi, int32_t ebp); -void game_command_callback_ride_construct_placed_front(int32_t eax, int32_t ebx, int32_t ecx, int32_t edx, int32_t esi, int32_t edi, int32_t ebp); -void game_command_callback_ride_construct_placed_back(int32_t eax, int32_t ebx, int32_t ecx, int32_t edx, int32_t esi, int32_t edi, int32_t ebp); -void game_command_callback_ride_remove_track_piece(int32_t eax, int32_t ebx, int32_t ecx, int32_t edx, int32_t esi, int32_t edi, int32_t ebp); -void game_command_demolish_ride(int32_t *eax, int32_t *ebx, int32_t *ecx, int32_t *edx, int32_t *esi, int32_t *edi, int32_t *ebp); -void game_command_set_ride_appearance(int32_t *eax, int32_t *ebx, int32_t *ecx, int32_t *edx, int32_t *esi, int32_t *edi, int32_t *ebp); -void game_command_set_ride_price(int32_t *eax, int32_t *ebx, int32_t *ecx, int32_t *edx, int32_t *esi, int32_t *edi, int32_t *ebp); -money32 ride_create_command(int32_t type, int32_t subType, int32_t flags, uint8_t *outRideIndex, uint8_t *outRideColour); -void ride_set_name_to_default(Ride * ride, rct_ride_entry * rideEntry); +void ride_set_colour_preset(Ride* ride, uint8_t index); +money32 ride_get_common_price(Ride* forRide); +rct_ride_name get_ride_naming(const uint8_t rideType, rct_ride_entry* rideEntry); +void game_command_create_ride(int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); +void game_command_callback_ride_construct_new( + int32_t eax, int32_t ebx, int32_t ecx, int32_t edx, int32_t esi, int32_t edi, int32_t ebp); +void game_command_callback_ride_construct_placed_front( + int32_t eax, int32_t ebx, int32_t ecx, int32_t edx, int32_t esi, int32_t edi, int32_t ebp); +void game_command_callback_ride_construct_placed_back( + int32_t eax, int32_t ebx, int32_t ecx, int32_t edx, int32_t esi, int32_t edi, int32_t ebp); +void game_command_callback_ride_remove_track_piece( + int32_t eax, int32_t ebx, int32_t ecx, int32_t edx, int32_t esi, int32_t edi, int32_t ebp); +void game_command_demolish_ride( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); +void game_command_set_ride_appearance( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); +void game_command_set_ride_price( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); +money32 ride_create_command(int32_t type, int32_t subType, int32_t flags, uint8_t* outRideIndex, uint8_t* outRideColour); +void ride_set_name_to_default(Ride* ride, rct_ride_entry* rideEntry); -void ride_set_name_to_track_default(Ride *ride, rct_ride_entry * rideEntry); +void ride_set_name_to_track_default(Ride* ride, rct_ride_entry* rideEntry); void ride_clear_for_construction(int32_t rideIndex); void ride_entrance_exit_place_provisional_ghost(); void ride_entrance_exit_remove_ghost(); @@ -1036,55 +1112,70 @@ int32_t get_turn_count_2_elements(Ride* ride, uint8_t type); int32_t get_turn_count_3_elements(Ride* ride, uint8_t type); int32_t get_turn_count_4_plus_elements(Ride* ride, uint8_t type); -uint8_t ride_get_helix_sections(Ride *ride); -bool ride_has_spinning_tunnel(Ride *ride); -bool ride_has_water_splash(Ride *ride); -bool ride_has_rapids(Ride *ride); -bool ride_has_log_reverser(Ride *ride); -bool ride_has_waterfall(Ride *ride); -bool ride_has_whirlpool(Ride *ride); +uint8_t ride_get_helix_sections(Ride* ride); +bool ride_has_spinning_tunnel(Ride* ride); +bool ride_has_water_splash(Ride* ride); +bool ride_has_rapids(Ride* ride); +bool ride_has_log_reverser(Ride* ride); +bool ride_has_waterfall(Ride* ride); +bool ride_has_whirlpool(Ride* ride); bool ride_type_has_flag(int32_t rideType, int32_t flag); -bool ride_is_powered_launched(Ride *ride); -bool ride_is_block_sectioned(Ride *ride); +bool ride_is_powered_launched(Ride* ride); +bool ride_is_block_sectioned(Ride* ride); bool ride_has_any_track_elements(int32_t rideIndex); -void ride_all_has_any_track_elements(bool *rideIndexArray); +void ride_all_has_any_track_elements(bool* rideIndexArray); void ride_construction_set_default_next_piece(); -bool track_block_get_next(CoordsXYE *input, CoordsXYE *output, int32_t *z, int32_t *direction); -bool track_block_get_next_from_zero(int16_t x, int16_t y, int16_t z_start, uint8_t rideIndex, uint8_t direction_start, CoordsXYE *output, int32_t *z, int32_t *direction, bool isGhost); +bool track_block_get_next(CoordsXYE* input, CoordsXYE* output, int32_t* z, int32_t* direction); +bool track_block_get_next_from_zero( + int16_t x, + int16_t y, + int16_t z_start, + uint8_t rideIndex, + uint8_t direction_start, + CoordsXYE* output, + int32_t* z, + int32_t* direction, + bool isGhost); -bool track_block_get_previous(int32_t x, int32_t y, rct_tile_element *tileElement, track_begin_end *outTrackBeginEnd); -bool track_block_get_previous_from_zero(int16_t x, int16_t y, int16_t z, uint8_t rideIndex, uint8_t direction, track_begin_end *outTrackBeginEnd); +bool track_block_get_previous(int32_t x, int32_t y, rct_tile_element* tileElement, track_begin_end* outTrackBeginEnd); +bool track_block_get_previous_from_zero( + int16_t x, int16_t y, int16_t z, uint8_t rideIndex, uint8_t direction, track_begin_end* outTrackBeginEnd); -void ride_get_start_of_track(CoordsXYE * output); +void ride_get_start_of_track(CoordsXYE* output); void window_ride_construction_update_active_elements(); void ride_construction_remove_ghosts(); -money32 ride_entrance_exit_place_ghost(int32_t rideIndex, int32_t x, int32_t y, int32_t direction, int32_t placeType, int32_t stationNum); -void ride_get_entrance_or_exit_position_from_screen_position(int32_t x, int32_t y, int32_t *outX, int32_t *outY, int32_t *outDirection); +money32 ride_entrance_exit_place_ghost( + int32_t rideIndex, int32_t x, int32_t y, int32_t direction, int32_t placeType, int32_t stationNum); +void ride_get_entrance_or_exit_position_from_screen_position( + int32_t x, int32_t y, int32_t* outX, int32_t* outY, int32_t* outDirection); bool ride_select_backwards_from_front(); bool ride_select_forwards_from_back(); money32 ride_remove_track_piece(int32_t x, int32_t y, int32_t z, int32_t direction, int32_t type, uint8_t flags); -bool ride_are_all_possible_entrances_and_exits_built(Ride *ride); +bool ride_are_all_possible_entrances_and_exits_built(Ride* ride); void ride_fix_breakdown(int32_t rideIndex, int32_t reliabilityIncreaseFactor); -void ride_entry_get_train_layout(int32_t rideEntryIndex, int32_t numCarsPerTrain, uint8_t *trainLayout); +void ride_entry_get_train_layout(int32_t rideEntryIndex, int32_t numCarsPerTrain, uint8_t* trainLayout); uint8_t ride_entry_get_vehicle_at_position(int32_t rideEntryIndex, int32_t numCarsPerTrain, int32_t position); void ride_update_max_vehicles(int32_t rideIndex); -uint64_t ride_entry_get_supported_track_pieces(const rct_ride_entry * rideEntry); +uint64_t ride_entry_get_supported_track_pieces(const rct_ride_entry* rideEntry); void ride_set_ride_entry(int32_t rideIndex, int32_t rideEntry); void ride_set_num_vehicles(int32_t rideIndex, int32_t numVehicles); void ride_set_num_cars_per_vehicle(int32_t rideIndex, int32_t numCarsPerVehicle); -void game_command_set_ride_vehicles(int32_t *eax, int32_t *ebx, int32_t *ecx, int32_t *edx, int32_t *esi, int32_t *edi, int32_t *ebp); +void game_command_set_ride_vehicles( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); -void game_command_place_ride_entrance_or_exit(int32_t *eax, int32_t *ebx, int32_t *ecx, int32_t *edx, int32_t *esi, int32_t *edi, int32_t *ebp); -void game_command_remove_ride_entrance_or_exit(int32_t *eax, int32_t *ebx, int32_t *ecx, int32_t *edx, int32_t *esi, int32_t *edi, int32_t *ebp); +void game_command_place_ride_entrance_or_exit( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); +void game_command_remove_ride_entrance_or_exit( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); void ride_set_to_default_inspection_interval(int32_t rideIndex); @@ -1094,34 +1185,35 @@ void ride_crash(uint8_t rideIndex, uint8_t vehicleIndex); void sub_6C94D8(); void ride_reset_all_names(); -const uint8_t* ride_seek_available_modes(Ride *ride); +const uint8_t* ride_seek_available_modes(Ride* ride); void window_ride_construction_mouseup_demolish_next_piece(int32_t x, int32_t y, int32_t z, int32_t direction, int32_t type); -uint32_t ride_customers_per_hour(const Ride *ride); -uint32_t ride_customers_in_last_5_minutes(const Ride *ride); +uint32_t ride_customers_per_hour(const Ride* ride); +uint32_t ride_customers_in_last_5_minutes(const Ride* ride); -rct_vehicle * ride_get_broken_vehicle(Ride *ride); +rct_vehicle* ride_get_broken_vehicle(Ride* ride); void window_ride_construction_do_station_check(); void window_ride_construction_do_entrance_exit_check(); -void game_command_callback_place_ride_entrance_or_exit(int32_t eax, int32_t ebx, int32_t ecx, int32_t edx, int32_t esi, int32_t edi, int32_t ebp); +void game_command_callback_place_ride_entrance_or_exit( + int32_t eax, int32_t ebx, int32_t ecx, int32_t edx, int32_t esi, int32_t edi, int32_t ebp); void ride_delete(uint8_t rideIndex); -void ride_renew(Ride * ride); -money16 ride_get_price(Ride * ride); +void ride_renew(Ride* ride); +money16 ride_get_price(Ride* ride); -rct_tile_element *get_station_platform(int32_t x, int32_t y, int32_t z, int32_t z_tolerance); -bool ride_has_adjacent_station(Ride *ride); -bool ride_has_ratings(const Ride * ride); +rct_tile_element* get_station_platform(int32_t x, int32_t y, int32_t z, int32_t z_tolerance); +bool ride_has_adjacent_station(Ride* ride); +bool ride_has_ratings(const Ride* ride); -const char * ride_type_get_enum_name(int32_t rideType); +const char* ride_type_get_enum_name(int32_t rideType); -uint8_t ride_entry_get_first_non_null_ride_type(const rct_ride_entry * rideEntry); +uint8_t ride_entry_get_first_non_null_ride_type(const rct_ride_entry* rideEntry); bool ride_type_supports_boosters(uint8_t rideType); int32_t get_booster_speed(uint8_t rideType, int32_t rawSpeed); void fix_invalid_vehicle_sprite_sizes(); -bool ride_entry_has_category(const rct_ride_entry * rideEntry, uint8_t category); +bool ride_entry_has_category(const rct_ride_entry* rideEntry, uint8_t category); int32_t ride_get_entry_index(int32_t rideType, int32_t rideSubType); diff --git a/src/openrct2/ride/RideData.cpp b/src/openrct2/ride/RideData.cpp index cd0eb8e6c3..bf930df2c8 100644 --- a/src/openrct2/ride/RideData.cpp +++ b/src/openrct2/ride/RideData.cpp @@ -17,15 +17,16 @@ * https://gist.github.com/kevinburke/eaeb1d8149a6eef0dcc1 */ +#include "RideData.h" + #include "../audio/audio.h" #include "../core/Util.hpp" #include "../interface/Colour.h" #include "../localisation/Localisation.h" #include "../sprites.h" #include "Ride.h" -#include "Track.h" -#include "RideData.h" #include "ShopItem.h" +#include "Track.h" // clang-format off const bool hasRunningTrack[RIDE_TYPE_COUNT] = { diff --git a/src/openrct2/ride/RideData.h b/src/openrct2/ride/RideData.h index 5fbcd1a2db..0ca3715ea7 100644 --- a/src/openrct2/ride/RideData.h +++ b/src/openrct2/ride/RideData.h @@ -13,7 +13,8 @@ #include "../common.h" #include "Ride.h" -struct ride_component_name { +struct ride_component_name +{ rct_string_id singular; rct_string_id plural; rct_string_id capitalised; @@ -23,7 +24,8 @@ struct ride_component_name { rct_string_id number; }; -enum RIDE_COMPONENT_TYPE { +enum RIDE_COMPONENT_TYPE +{ RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_BOAT, RIDE_COMPONENT_TYPE_TRACK, @@ -41,13 +43,15 @@ enum RIDE_COMPONENT_TYPE { RIDE_COMPONENT_TYPE_COUNT }; -struct rct_ride_name_convention { +struct rct_ride_name_convention +{ RIDE_COMPONENT_TYPE vehicle; RIDE_COMPONENT_TYPE structure; RIDE_COMPONENT_TYPE station; }; -struct rct_ride_entrance_definition { +struct rct_ride_entrance_definition +{ uint32_t sprite_index; uint16_t height; uint16_t scrolling_mode; @@ -56,7 +60,8 @@ struct rct_ride_entrance_definition { uint16_t colour_use_flags; }; -struct rct_ride_data_4 { +struct rct_ride_data_4 +{ uint8_t price; uint8_t price_secondary; uint16_t flags; @@ -65,33 +70,37 @@ struct rct_ride_data_4 { uint8_t pad[2] = {}; }; -struct ride_cost { +struct ride_cost +{ uint16_t track_price; uint16_t support_price; }; -struct rct_ride_data_5 { +struct rct_ride_data_5 +{ uint8_t max_height; uint8_t clearance_height; int8_t z_offset; uint8_t max_mass; uint8_t z; uint8_t price; - uint8_t bonus_value; // Deprecated. Use rideBonusValue instead + uint8_t bonus_value; // Deprecated. Use rideBonusValue instead uint8_t pad = 0; }; -struct rct_ride_lift_data { +struct rct_ride_lift_data +{ uint8_t sound_id; uint8_t minimum_speed; uint8_t maximum_speed; }; -enum { +enum +{ RIDE_TYPE_FLAG4_ALLOW_DOORS_ON_TRACK = (1 << 0), RIDE_TYPE_FLAG4_MUSIC_ON_DEFAULT = (1 << 1), RIDE_TYPE_FLAG4_ALLOW_MUSIC = (1 << 2), - RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE = (1 << 3), // Used by the Flying RC, Lay-down RC, Multi-dimension RC + RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE = (1 << 3), // Used by the Flying RC, Lay-down RC, Multi-dimension RC RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES = (1 << 4), RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT = (1 << 5), RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS = (1 << 6), @@ -106,7 +115,8 @@ enum { RIDE_TYPE_FLAG4_START_CONSTRUCTION_INVERTED = (1 << 15), // This is only set on the Flying RC and its alternative type. }; -enum { +enum +{ RIDE_TYPE_NO_ALTERNATIVES = 0, RIDE_TYPE_ALTERNATIVE_TRACK_PIECES = 1, // Dinghy slide and Water Coaster RIDE_TYPE_ALTERNATIVE_TRACK_TYPE = 2, // Flying RC, Lay-down RC, Multi-dimension RC diff --git a/src/openrct2/ride/RideGroupManager.cpp b/src/openrct2/ride/RideGroupManager.cpp index 01bcd005bf..eeb470873d 100644 --- a/src/openrct2/ride/RideGroupManager.cpp +++ b/src/openrct2/ride/RideGroupManager.cpp @@ -7,12 +7,10 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ -#include -#include #include "RideGroupManager.h" + #include "../config/Config.h" #include "../core/String.hpp" - #include "../localisation/StringIds.h" #include "../management/Research.h" #include "Ride.h" @@ -20,97 +18,141 @@ #include "Track.h" #include "TrackData.h" +#include +#include + static constexpr const RideGroup ride_group_corkscrew_rc = { - /*.RideType =*/ RIDE_TYPE_CORKSCREW_ROLLER_COASTER, - /*.MaximumHeight =*/ 28, - /*.AvailableTrackPieces =*/ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_VERTICAL_LOOP) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_SLOPE_CURVE_STEEP) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HALF_LOOP) | (1ULL << TRACK_CORKSCREW) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_BOOSTER), - /*.Naming =*/ { STR_CORKSCREW_RC_GROUP, STR_CORKSCREW_RC_GROUP_DESC }, - /*.Flags =*/ 0, + /*.RideType =*/RIDE_TYPE_CORKSCREW_ROLLER_COASTER, + /*.MaximumHeight =*/28, + /*.AvailableTrackPieces =*/(1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) + | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_VERTICAL_LOOP) | (1ULL << TRACK_SLOPE) + | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_SLOPE_CURVE_STEEP) | (1ULL << TRACK_S_BEND) + | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HALF_LOOP) | (1ULL << TRACK_CORKSCREW) + | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_BLOCK_BRAKES) + | (1ULL << TRACK_BOOSTER), + /*.Naming =*/{ STR_CORKSCREW_RC_GROUP, STR_CORKSCREW_RC_GROUP_DESC }, + /*.Flags =*/0, }; static constexpr const RideGroup ride_group_hypercoaster = { - /*.RideType =*/ RIDE_TYPE_CORKSCREW_ROLLER_COASTER, - /*.MaximumHeight =*/ 45, - /*.AvailableTrackPieces =*/ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_SLOPE_CURVE_STEEP) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_SLOPE_STEEP_LONG), - /*.Naming =*/ { STR_HYPERCOASTER_GROUP, STR_HYPERCOASTER_GROUP_DESC }, - /*.Flags =*/ 0, + /*.RideType =*/RIDE_TYPE_CORKSCREW_ROLLER_COASTER, + /*.MaximumHeight =*/45, + /*.AvailableTrackPieces =*/(1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) + | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_CURVE) + | (1ULL << TRACK_SLOPE_CURVE_STEEP) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) + | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_BLOCK_BRAKES) + | (1ULL << TRACK_SLOPE_STEEP_LONG), + /*.Naming =*/{ STR_HYPERCOASTER_GROUP, STR_HYPERCOASTER_GROUP_DESC }, + /*.Flags =*/0, }; static constexpr const RideGroup ride_group_car_ride = { - /*.RideType =*/ RIDE_TYPE_CAR_RIDE, - /*.MaximumHeight =*/ 6, - /*.AvailableTrackPieces =*/ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_CURVE_VERY_SMALL) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_SPINNING_TUNNEL), - /*.Naming =*/ { STR_CAR_RIDE_GROUP, STR_CAR_RIDE_GROUP_DESC }, - /*.Flags =*/ RIDE_GROUP_FLAG_ALLOW_DOORS_ON_TRACK, + /*.RideType =*/RIDE_TYPE_CAR_RIDE, + /*.MaximumHeight =*/6, + /*.AvailableTrackPieces =*/(1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_SLOPE) + | (1ULL << TRACK_CURVE_VERY_SMALL) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_SPINNING_TUNNEL), + /*.Naming =*/{ STR_CAR_RIDE_GROUP, STR_CAR_RIDE_GROUP_DESC }, + /*.Flags =*/RIDE_GROUP_FLAG_ALLOW_DOORS_ON_TRACK, }; static constexpr const RideGroup ride_group_monster_trucks = { - /*.RideType =*/ RIDE_TYPE_CAR_RIDE, - /*.MaximumHeight =*/ 18, - /*.AvailableTrackPieces =*/ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_CURVE_VERY_SMALL) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_RAPIDS), - /*.Naming =*/ { STR_MONSTER_TRUCKS_GROUP, STR_MONSTER_TRUCKS_GROUP_DESC }, - /*.Flags =*/ RIDE_GROUP_FLAG_ALLOW_DOORS_ON_TRACK, + /*.RideType =*/RIDE_TYPE_CAR_RIDE, + /*.MaximumHeight =*/18, + /*.AvailableTrackPieces =*/(1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_SLOPE) + | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_CURVE_VERY_SMALL) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_RAPIDS), + /*.Naming =*/{ STR_MONSTER_TRUCKS_GROUP, STR_MONSTER_TRUCKS_GROUP_DESC }, + /*.Flags =*/RIDE_GROUP_FLAG_ALLOW_DOORS_ON_TRACK, }; static constexpr const RideGroup ride_group_steel_twister_rc = { - /*.RideType =*/ RIDE_TYPE_TWISTER_ROLLER_COASTER, - /*.MaximumHeight =*/ 40, - /*.AvailableTrackPieces =*/ (1ULL << TRACK_FLAT) | (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_VERTICAL_LOOP) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_SLOPE_CURVE_STEEP) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HALF_LOOP) | (1ULL << TRACK_CORKSCREW) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_SLOPE_VERTICAL) | (1ULL << TRACK_BARREL_ROLL) | (1ULL << TRACK_POWERED_LIFT) | (1ULL << TRACK_HALF_LOOP_LARGE) | (1ULL << TRACK_SLOPE_CURVE_BANKED) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_SLOPE_ROLL_BANKING) | (1ULL << TRACK_SLOPE_STEEP_LONG) | (1ULL << TRACK_CURVE_VERTICAL) | (1ULL << TRACK_QUARTER_LOOP) | (1ULL << TRACK_BOOSTER), - /*.Naming =*/ { STR_STEEL_TWISTER_GROUP, STR_STEEL_TWISTER_GROUP_DESC }, - /*.Flags =*/ 0, + /*.RideType =*/RIDE_TYPE_TWISTER_ROLLER_COASTER, + /*.MaximumHeight =*/40, + /*.AvailableTrackPieces =*/(1ULL << TRACK_FLAT) | (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) + | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_VERTICAL_LOOP) | (1ULL << TRACK_SLOPE) + | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_SLOPE_CURVE_STEEP) | (1ULL << TRACK_S_BEND) + | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HALF_LOOP) | (1ULL << TRACK_CORKSCREW) + | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_SLOPE_VERTICAL) + | (1ULL << TRACK_BARREL_ROLL) | (1ULL << TRACK_POWERED_LIFT) | (1ULL << TRACK_HALF_LOOP_LARGE) + | (1ULL << TRACK_SLOPE_CURVE_BANKED) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_SLOPE_ROLL_BANKING) + | (1ULL << TRACK_SLOPE_STEEP_LONG) | (1ULL << TRACK_CURVE_VERTICAL) | (1ULL << TRACK_QUARTER_LOOP) + | (1ULL << TRACK_BOOSTER), + /*.Naming =*/{ STR_STEEL_TWISTER_GROUP, STR_STEEL_TWISTER_GROUP_DESC }, + /*.Flags =*/0, }; static constexpr const RideGroup ride_group_hyper_twister = { - /*.RideType =*/ RIDE_TYPE_TWISTER_ROLLER_COASTER, - /*.MaximumHeight =*/ 54, - /*.AvailableTrackPieces =*/ (1ULL << TRACK_FLAT) | (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_SLOPE_CURVE_STEEP) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_SLOPE_CURVE_BANKED) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_SLOPE_ROLL_BANKING) | (1ULL << TRACK_SLOPE_STEEP_LONG) | (1ULL << TRACK_SLOPE_VERTICAL) | (1ULL << TRACK_CURVE_VERTICAL), - /*.Naming =*/ { STR_HYPER_TWISTER_GROUP, STR_HYPER_TWISTER_GROUP_DESC }, - /*.Flags =*/ 0, + /*.RideType =*/RIDE_TYPE_TWISTER_ROLLER_COASTER, + /*.MaximumHeight =*/54, + /*.AvailableTrackPieces =*/(1ULL << TRACK_FLAT) | (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) + | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) + | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_SLOPE_CURVE_STEEP) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) + | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) + | (1ULL << TRACK_SLOPE_CURVE_BANKED) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_SLOPE_ROLL_BANKING) + | (1ULL << TRACK_SLOPE_STEEP_LONG) | (1ULL << TRACK_SLOPE_VERTICAL) | (1ULL << TRACK_CURVE_VERTICAL), + /*.Naming =*/{ STR_HYPER_TWISTER_GROUP, STR_HYPER_TWISTER_GROUP_DESC }, + /*.Flags =*/0, }; static constexpr const RideGroup ride_group_junior_rc = { - /*.RideType =*/ RIDE_TYPE_JUNIOR_ROLLER_COASTER, - /*.MaximumHeight =*/ 12, - /*.AvailableTrackPieces =*/ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_LIFT_HILL_CURVE) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_LONG) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_BOOSTER), - /*.Naming =*/ { STR_JUNIOR_RC_GROUP, STR_JUNIOR_RC_GROUP_DESC }, - /*.Flags =*/ RIDE_GROUP_FLAG_ALLOW_DOORS_ON_TRACK, + /*.RideType =*/RIDE_TYPE_JUNIOR_ROLLER_COASTER, + /*.MaximumHeight =*/12, + /*.AvailableTrackPieces =*/(1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) + | (1ULL << TRACK_LIFT_HILL_CURVE) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_SLOPE) + | (1ULL << TRACK_SLOPE_LONG) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) + | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_BLOCK_BRAKES) + | (1ULL << TRACK_BOOSTER), + /*.Naming =*/{ STR_JUNIOR_RC_GROUP, STR_JUNIOR_RC_GROUP_DESC }, + /*.Flags =*/RIDE_GROUP_FLAG_ALLOW_DOORS_ON_TRACK, }; static constexpr const RideGroup ride_group_classic_mini_coaster = { - /*.RideType =*/ RIDE_TYPE_JUNIOR_ROLLER_COASTER, - /*.MaximumHeight =*/ 15, - /*.AvailableTrackPieces =*/ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_LIFT_HILL_CURVE) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_LONG) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_BOOSTER), - /*.Naming =*/ { STR_CLASSIC_MINI_COASTER_GROUP, STR_CLASSIC_MINI_COASTER_GROUP_DESC }, - /*.Flags =*/ RIDE_GROUP_FLAG_ALLOW_DOORS_ON_TRACK, + /*.RideType =*/RIDE_TYPE_JUNIOR_ROLLER_COASTER, + /*.MaximumHeight =*/15, + /*.AvailableTrackPieces =*/(1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) + | (1ULL << TRACK_LIFT_HILL_CURVE) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_SLOPE) + | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_LONG) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_S_BEND) + | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) + | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_BOOSTER), + /*.Naming =*/{ STR_CLASSIC_MINI_COASTER_GROUP, STR_CLASSIC_MINI_COASTER_GROUP_DESC }, + /*.Flags =*/RIDE_GROUP_FLAG_ALLOW_DOORS_ON_TRACK, }; static constexpr const RideGroup ride_group_steel_wild_mouse = { - /*.RideType =*/ RIDE_TYPE_STEEL_WILD_MOUSE, - /*.MaximumHeight =*/ 16, - /*.AvailableTrackPieces =*/ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_LIFT_HILL_STEEP) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_LONG) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_CURVE_VERY_SMALL) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_BLOCK_BRAKES), - /*.Naming =*/ { STR_RIDE_NAME_WILD_MOUSE, STR_RIDE_DESCRIPTION_WILD_MOUSE }, - /*.Flags =*/ RIDE_GROUP_FLAG_ALLOW_DOORS_ON_TRACK, + /*.RideType =*/RIDE_TYPE_STEEL_WILD_MOUSE, + /*.MaximumHeight =*/16, + /*.AvailableTrackPieces =*/(1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) + | (1ULL << TRACK_LIFT_HILL_STEEP) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_LONG) + | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_CURVE_VERY_SMALL) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_BRAKES) + | (1ULL << TRACK_BLOCK_BRAKES), + /*.Naming =*/{ STR_RIDE_NAME_WILD_MOUSE, STR_RIDE_DESCRIPTION_WILD_MOUSE }, + /*.Flags =*/RIDE_GROUP_FLAG_ALLOW_DOORS_ON_TRACK, }; static constexpr const RideGroup ride_group_spinning_wild_mouse = { - /*.RideType =*/ RIDE_TYPE_STEEL_WILD_MOUSE, - /*.MaximumHeight =*/ 16, - /*.AvailableTrackPieces =*/ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_LONG) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_CURVE_VERY_SMALL) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_ROTATION_CONTROL_TOGGLE), - /*.Naming =*/ { STR_SPINNING_WILD_MOUSE_GROUP, STR_SPINNING_WILD_MOUSE_GROUP_DESC }, - /*.Flags =*/ 0, + /*.RideType =*/RIDE_TYPE_STEEL_WILD_MOUSE, + /*.MaximumHeight =*/16, + /*.AvailableTrackPieces =*/(1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) + | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_LONG) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_CURVE_VERY_SMALL) + | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_BLOCK_BRAKES) + | (1ULL << TRACK_ROTATION_CONTROL_TOGGLE), + /*.Naming =*/{ STR_SPINNING_WILD_MOUSE_GROUP, STR_SPINNING_WILD_MOUSE_GROUP_DESC }, + /*.Flags =*/0, }; -static constexpr const RideGroup corkscrew_rc_groups[MAX_RIDE_GROUPS_PER_RIDE_TYPE] = { ride_group_corkscrew_rc, ride_group_hypercoaster }; -static constexpr const RideGroup junior_rc_groups[MAX_RIDE_GROUPS_PER_RIDE_TYPE] = { ride_group_junior_rc, ride_group_classic_mini_coaster }; -static constexpr const RideGroup car_ride_groups[MAX_RIDE_GROUPS_PER_RIDE_TYPE] = { ride_group_car_ride, ride_group_monster_trucks }; -static constexpr const RideGroup twister_rc_groups[MAX_RIDE_GROUPS_PER_RIDE_TYPE] = { ride_group_steel_twister_rc, ride_group_hyper_twister }; -static constexpr const RideGroup steel_wild_mouse_groups[MAX_RIDE_GROUPS_PER_RIDE_TYPE] = { ride_group_steel_wild_mouse, ride_group_spinning_wild_mouse }; +static constexpr const RideGroup corkscrew_rc_groups[MAX_RIDE_GROUPS_PER_RIDE_TYPE] + = { ride_group_corkscrew_rc, ride_group_hypercoaster }; +static constexpr const RideGroup junior_rc_groups[MAX_RIDE_GROUPS_PER_RIDE_TYPE] + = { ride_group_junior_rc, ride_group_classic_mini_coaster }; +static constexpr const RideGroup car_ride_groups[MAX_RIDE_GROUPS_PER_RIDE_TYPE] + = { ride_group_car_ride, ride_group_monster_trucks }; +static constexpr const RideGroup twister_rc_groups[MAX_RIDE_GROUPS_PER_RIDE_TYPE] + = { ride_group_steel_twister_rc, ride_group_hyper_twister }; +static constexpr const RideGroup steel_wild_mouse_groups[MAX_RIDE_GROUPS_PER_RIDE_TYPE] + = { ride_group_steel_wild_mouse, ride_group_spinning_wild_mouse }; bool RideGroup::Equals(const RideGroup* otherRideGroup) const { - return - this->Naming.name == otherRideGroup->Naming.name && - this->Naming.description == otherRideGroup->Naming.description; + return this->Naming.name == otherRideGroup->Naming.name && this->Naming.description == otherRideGroup->Naming.description; } bool RideGroup::IsInvented() const @@ -118,7 +160,7 @@ bool RideGroup::IsInvented() const if (!ride_type_is_invented(this->RideType)) return false; - uint8_t *rideEntryIndexPtr = get_ride_entry_indices_for_ride_type(this->RideType); + uint8_t* rideEntryIndexPtr = get_ride_entry_indices_for_ride_type(this->RideType); while (*rideEntryIndexPtr != RIDE_ENTRY_INDEX_NULL) { @@ -127,8 +169,8 @@ bool RideGroup::IsInvented() const if (!ride_entry_is_invented(rideEntryIndex)) continue; - rct_ride_entry *rideEntry = get_ride_entry(rideEntryIndex); - const RideGroup * rideEntryRideGroup = RideGroupManager::GetRideGroup(this->RideType, rideEntry); + rct_ride_entry* rideEntry = get_ride_entry(rideEntryIndex); + const RideGroup* rideEntryRideGroup = RideGroupManager::GetRideGroup(this->RideType, rideEntry); if (!this->Equals(rideEntryRideGroup)) continue; @@ -140,37 +182,37 @@ bool RideGroup::IsInvented() const return false; } -const RideGroup * RideGroupManager::GetRideGroup(const uint8_t rideType, const rct_ride_entry * rideEntry) +const RideGroup* RideGroupManager::GetRideGroup(const uint8_t rideType, const rct_ride_entry* rideEntry) { switch (rideType) { - case RIDE_TYPE_CORKSCREW_ROLLER_COASTER: - if (ride_entry_get_supported_track_pieces(rideEntry) & (1ULL << TRACK_VERTICAL_LOOP)) - return &ride_group_corkscrew_rc; - else - return &ride_group_hypercoaster; - case RIDE_TYPE_JUNIOR_ROLLER_COASTER: - if (ride_entry_get_supported_track_pieces(rideEntry) & (1ULL << TRACK_SLOPE_STEEP)) - return &ride_group_classic_mini_coaster; - else - return &ride_group_junior_rc; - case RIDE_TYPE_CAR_RIDE: - if (ride_entry_get_supported_track_pieces(rideEntry) & (1ULL << TRACK_SLOPE_STEEP)) - return &ride_group_monster_trucks; - else - return &ride_group_car_ride; - case RIDE_TYPE_TWISTER_ROLLER_COASTER: - if (!(rideEntry->flags & RIDE_ENTRY_FLAG_NO_INVERSIONS)) - return &ride_group_steel_twister_rc; - else - return &ride_group_hyper_twister; - case RIDE_TYPE_STEEL_WILD_MOUSE: - if (ride_entry_get_supported_track_pieces(rideEntry) & (1ULL << TRACK_SLOPE_STEEP)) - return &ride_group_steel_wild_mouse; - else - return &ride_group_spinning_wild_mouse; - default: - return nullptr; + case RIDE_TYPE_CORKSCREW_ROLLER_COASTER: + if (ride_entry_get_supported_track_pieces(rideEntry) & (1ULL << TRACK_VERTICAL_LOOP)) + return &ride_group_corkscrew_rc; + else + return &ride_group_hypercoaster; + case RIDE_TYPE_JUNIOR_ROLLER_COASTER: + if (ride_entry_get_supported_track_pieces(rideEntry) & (1ULL << TRACK_SLOPE_STEEP)) + return &ride_group_classic_mini_coaster; + else + return &ride_group_junior_rc; + case RIDE_TYPE_CAR_RIDE: + if (ride_entry_get_supported_track_pieces(rideEntry) & (1ULL << TRACK_SLOPE_STEEP)) + return &ride_group_monster_trucks; + else + return &ride_group_car_ride; + case RIDE_TYPE_TWISTER_ROLLER_COASTER: + if (!(rideEntry->flags & RIDE_ENTRY_FLAG_NO_INVERSIONS)) + return &ride_group_steel_twister_rc; + else + return &ride_group_hyper_twister; + case RIDE_TYPE_STEEL_WILD_MOUSE: + if (ride_entry_get_supported_track_pieces(rideEntry) & (1ULL << TRACK_SLOPE_STEEP)) + return &ride_group_steel_wild_mouse; + else + return &ride_group_spinning_wild_mouse; + default: + return nullptr; } } @@ -189,29 +231,29 @@ bool RideGroupManager::RideTypeHasRideGroups(const uint8_t rideType) } } -const RideGroup * RideGroupManager::RideGroupFind(const uint8_t rideType, const uint8_t index) +const RideGroup* RideGroupManager::RideGroupFind(const uint8_t rideType, const uint8_t index) { if (index >= MAX_RIDE_GROUPS_PER_RIDE_TYPE) return nullptr; - switch(rideType) + switch (rideType) { - case RIDE_TYPE_CORKSCREW_ROLLER_COASTER: - return &corkscrew_rc_groups[index]; - case RIDE_TYPE_JUNIOR_ROLLER_COASTER: - return &junior_rc_groups[index]; - case RIDE_TYPE_CAR_RIDE: - return &car_ride_groups[index]; - case RIDE_TYPE_TWISTER_ROLLER_COASTER: - return &twister_rc_groups[index]; - case RIDE_TYPE_STEEL_WILD_MOUSE: - return &steel_wild_mouse_groups[index]; - default: - return nullptr; + case RIDE_TYPE_CORKSCREW_ROLLER_COASTER: + return &corkscrew_rc_groups[index]; + case RIDE_TYPE_JUNIOR_ROLLER_COASTER: + return &junior_rc_groups[index]; + case RIDE_TYPE_CAR_RIDE: + return &car_ride_groups[index]; + case RIDE_TYPE_TWISTER_ROLLER_COASTER: + return &twister_rc_groups[index]; + case RIDE_TYPE_STEEL_WILD_MOUSE: + return &steel_wild_mouse_groups[index]; + default: + return nullptr; } } -const std::vector RideGroupManager::GetPreferredRideEntryOrder(const uint8_t rideType) +const std::vector RideGroupManager::GetPreferredRideEntryOrder(const uint8_t rideType) { // clang-format off static const std::vector preferredRideEntryOrder[] = @@ -318,10 +360,10 @@ const std::vector RideGroupManager::GetPreferredRideEntryOrder(con * which picture is shown on the new ride tab and which train type is selected * by default. */ -int32_t RideGroupManager::VehiclePreferenceCompare(const uint8_t rideType, const char * a, const char * b) +int32_t RideGroupManager::VehiclePreferenceCompare(const uint8_t rideType, const char* a, const char* b) { - std::vector rideEntryOrder = RideGroupManager::GetPreferredRideEntryOrder(rideType); - for (const char * object : rideEntryOrder) + std::vector rideEntryOrder = RideGroupManager::GetPreferredRideEntryOrder(rideType); + for (const char* object : rideEntryOrder) { if (String::Equals(object, a, true)) { @@ -329,7 +371,7 @@ int32_t RideGroupManager::VehiclePreferenceCompare(const uint8_t rideType, const } if (String::Equals(object, b, true)) { - return 1; + return 1; } } return 0; @@ -339,99 +381,99 @@ bool RideGroupManager::RideTypeIsIndependent(const uint8_t rideType) { switch (rideType) { - case RIDE_TYPE_SPIRAL_ROLLER_COASTER: - case RIDE_TYPE_STAND_UP_ROLLER_COASTER: - case RIDE_TYPE_SUSPENDED_SWINGING_COASTER: - case RIDE_TYPE_INVERTED_ROLLER_COASTER: - case RIDE_TYPE_JUNIOR_ROLLER_COASTER: - case RIDE_TYPE_MINIATURE_RAILWAY: - case RIDE_TYPE_MONORAIL: - case RIDE_TYPE_MINI_SUSPENDED_COASTER: - case RIDE_TYPE_BOAT_HIRE: - case RIDE_TYPE_WOODEN_WILD_MOUSE: - case RIDE_TYPE_STEEPLECHASE: - case RIDE_TYPE_CAR_RIDE: - case RIDE_TYPE_LAUNCHED_FREEFALL: - case RIDE_TYPE_BOBSLEIGH_COASTER: - case RIDE_TYPE_OBSERVATION_TOWER: - case RIDE_TYPE_LOOPING_ROLLER_COASTER: - case RIDE_TYPE_DINGHY_SLIDE: - case RIDE_TYPE_MINE_TRAIN_COASTER: - case RIDE_TYPE_CHAIRLIFT: - case RIDE_TYPE_CORKSCREW_ROLLER_COASTER: - case RIDE_TYPE_GO_KARTS: - case RIDE_TYPE_LOG_FLUME: - case RIDE_TYPE_RIVER_RAPIDS: - case RIDE_TYPE_REVERSE_FREEFALL_COASTER: - case RIDE_TYPE_LIFT: - case RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER: - case RIDE_TYPE_GHOST_TRAIN: - case RIDE_TYPE_TWISTER_ROLLER_COASTER: - case RIDE_TYPE_WOODEN_ROLLER_COASTER: - case RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER: - case RIDE_TYPE_STEEL_WILD_MOUSE: - case RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER: - case RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT: - case RIDE_TYPE_FLYING_ROLLER_COASTER: - case RIDE_TYPE_FLYING_ROLLER_COASTER_ALT: - case RIDE_TYPE_VIRGINIA_REEL: - case RIDE_TYPE_SPLASH_BOATS: - case RIDE_TYPE_MINI_HELICOPTERS: - case RIDE_TYPE_LAY_DOWN_ROLLER_COASTER: - case RIDE_TYPE_SUSPENDED_MONORAIL: - case RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT: - case RIDE_TYPE_REVERSER_ROLLER_COASTER: - case RIDE_TYPE_HEARTLINE_TWISTER_COASTER: - case RIDE_TYPE_GIGA_COASTER: - case RIDE_TYPE_ROTO_DROP: - case RIDE_TYPE_MONORAIL_CYCLES: - case RIDE_TYPE_COMPACT_INVERTED_COASTER: - case RIDE_TYPE_WATER_COASTER: - case RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER: - case RIDE_TYPE_INVERTED_HAIRPIN_COASTER: - case RIDE_TYPE_SUBMARINE_RIDE: - case RIDE_TYPE_RIVER_RAFTS: - case RIDE_TYPE_INVERTED_IMPULSE_COASTER: - case RIDE_TYPE_MINI_ROLLER_COASTER: - case RIDE_TYPE_MINE_RIDE: - case RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER: - return false; - case RIDE_TYPE_MAZE: - case RIDE_TYPE_SPIRAL_SLIDE: - case RIDE_TYPE_DODGEMS: - case RIDE_TYPE_SWINGING_SHIP: - case RIDE_TYPE_SWINGING_INVERTER_SHIP: - case RIDE_TYPE_FOOD_STALL: - case RIDE_TYPE_1D: - case RIDE_TYPE_DRINK_STALL: - case RIDE_TYPE_1F: - case RIDE_TYPE_SHOP: - case RIDE_TYPE_MERRY_GO_ROUND: - case RIDE_TYPE_22: - case RIDE_TYPE_INFORMATION_KIOSK: - case RIDE_TYPE_TOILETS: - case RIDE_TYPE_FERRIS_WHEEL: - case RIDE_TYPE_MOTION_SIMULATOR: - case RIDE_TYPE_3D_CINEMA: - case RIDE_TYPE_TOP_SPIN: - case RIDE_TYPE_SPACE_RINGS: - case RIDE_TYPE_CASH_MACHINE: - case RIDE_TYPE_TWIST: - case RIDE_TYPE_HAUNTED_HOUSE: - case RIDE_TYPE_FIRST_AID: - case RIDE_TYPE_CIRCUS: - case RIDE_TYPE_MINI_GOLF: - case RIDE_TYPE_FLYING_SAUCERS: - case RIDE_TYPE_CROOKED_HOUSE: - case RIDE_TYPE_MAGIC_CARPET: - case RIDE_TYPE_50: - case RIDE_TYPE_ENTERPRISE: - case RIDE_TYPE_52: - case RIDE_TYPE_53: - case RIDE_TYPE_54: - case RIDE_TYPE_55: - case RIDE_TYPE_59: - return true; + case RIDE_TYPE_SPIRAL_ROLLER_COASTER: + case RIDE_TYPE_STAND_UP_ROLLER_COASTER: + case RIDE_TYPE_SUSPENDED_SWINGING_COASTER: + case RIDE_TYPE_INVERTED_ROLLER_COASTER: + case RIDE_TYPE_JUNIOR_ROLLER_COASTER: + case RIDE_TYPE_MINIATURE_RAILWAY: + case RIDE_TYPE_MONORAIL: + case RIDE_TYPE_MINI_SUSPENDED_COASTER: + case RIDE_TYPE_BOAT_HIRE: + case RIDE_TYPE_WOODEN_WILD_MOUSE: + case RIDE_TYPE_STEEPLECHASE: + case RIDE_TYPE_CAR_RIDE: + case RIDE_TYPE_LAUNCHED_FREEFALL: + case RIDE_TYPE_BOBSLEIGH_COASTER: + case RIDE_TYPE_OBSERVATION_TOWER: + case RIDE_TYPE_LOOPING_ROLLER_COASTER: + case RIDE_TYPE_DINGHY_SLIDE: + case RIDE_TYPE_MINE_TRAIN_COASTER: + case RIDE_TYPE_CHAIRLIFT: + case RIDE_TYPE_CORKSCREW_ROLLER_COASTER: + case RIDE_TYPE_GO_KARTS: + case RIDE_TYPE_LOG_FLUME: + case RIDE_TYPE_RIVER_RAPIDS: + case RIDE_TYPE_REVERSE_FREEFALL_COASTER: + case RIDE_TYPE_LIFT: + case RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER: + case RIDE_TYPE_GHOST_TRAIN: + case RIDE_TYPE_TWISTER_ROLLER_COASTER: + case RIDE_TYPE_WOODEN_ROLLER_COASTER: + case RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER: + case RIDE_TYPE_STEEL_WILD_MOUSE: + case RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER: + case RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT: + case RIDE_TYPE_FLYING_ROLLER_COASTER: + case RIDE_TYPE_FLYING_ROLLER_COASTER_ALT: + case RIDE_TYPE_VIRGINIA_REEL: + case RIDE_TYPE_SPLASH_BOATS: + case RIDE_TYPE_MINI_HELICOPTERS: + case RIDE_TYPE_LAY_DOWN_ROLLER_COASTER: + case RIDE_TYPE_SUSPENDED_MONORAIL: + case RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT: + case RIDE_TYPE_REVERSER_ROLLER_COASTER: + case RIDE_TYPE_HEARTLINE_TWISTER_COASTER: + case RIDE_TYPE_GIGA_COASTER: + case RIDE_TYPE_ROTO_DROP: + case RIDE_TYPE_MONORAIL_CYCLES: + case RIDE_TYPE_COMPACT_INVERTED_COASTER: + case RIDE_TYPE_WATER_COASTER: + case RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER: + case RIDE_TYPE_INVERTED_HAIRPIN_COASTER: + case RIDE_TYPE_SUBMARINE_RIDE: + case RIDE_TYPE_RIVER_RAFTS: + case RIDE_TYPE_INVERTED_IMPULSE_COASTER: + case RIDE_TYPE_MINI_ROLLER_COASTER: + case RIDE_TYPE_MINE_RIDE: + case RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER: + return false; + case RIDE_TYPE_MAZE: + case RIDE_TYPE_SPIRAL_SLIDE: + case RIDE_TYPE_DODGEMS: + case RIDE_TYPE_SWINGING_SHIP: + case RIDE_TYPE_SWINGING_INVERTER_SHIP: + case RIDE_TYPE_FOOD_STALL: + case RIDE_TYPE_1D: + case RIDE_TYPE_DRINK_STALL: + case RIDE_TYPE_1F: + case RIDE_TYPE_SHOP: + case RIDE_TYPE_MERRY_GO_ROUND: + case RIDE_TYPE_22: + case RIDE_TYPE_INFORMATION_KIOSK: + case RIDE_TYPE_TOILETS: + case RIDE_TYPE_FERRIS_WHEEL: + case RIDE_TYPE_MOTION_SIMULATOR: + case RIDE_TYPE_3D_CINEMA: + case RIDE_TYPE_TOP_SPIN: + case RIDE_TYPE_SPACE_RINGS: + case RIDE_TYPE_CASH_MACHINE: + case RIDE_TYPE_TWIST: + case RIDE_TYPE_HAUNTED_HOUSE: + case RIDE_TYPE_FIRST_AID: + case RIDE_TYPE_CIRCUS: + case RIDE_TYPE_MINI_GOLF: + case RIDE_TYPE_FLYING_SAUCERS: + case RIDE_TYPE_CROOKED_HOUSE: + case RIDE_TYPE_MAGIC_CARPET: + case RIDE_TYPE_50: + case RIDE_TYPE_ENTERPRISE: + case RIDE_TYPE_52: + case RIDE_TYPE_53: + case RIDE_TYPE_54: + case RIDE_TYPE_55: + case RIDE_TYPE_59: + return true; } assert(false); diff --git a/src/openrct2/ride/RideGroupManager.h b/src/openrct2/ride/RideGroupManager.h index 4053c88869..d917788dfd 100644 --- a/src/openrct2/ride/RideGroupManager.h +++ b/src/openrct2/ride/RideGroupManager.h @@ -9,11 +9,11 @@ #pragma once -#include - #include "../common.h" #include "RideData.h" +#include + #define MAX_RIDE_GROUPS_PER_RIDE_TYPE 2 extern const uint8_t gRideCategories[RIDE_TYPE_COUNT]; @@ -33,12 +33,12 @@ struct RideGroup class RideGroupManager { public: - static const RideGroup * GetRideGroup(const uint8_t trackType, const rct_ride_entry * rideEntry); + static const RideGroup* GetRideGroup(const uint8_t trackType, const rct_ride_entry* rideEntry); static bool RideTypeHasRideGroups(const uint8_t trackType); - static const RideGroup * RideGroupFind(const uint8_t rideType, const uint8_t index); + static const RideGroup* RideGroupFind(const uint8_t rideType, const uint8_t index); - static const std::vector GetPreferredRideEntryOrder(const uint8_t rideType); - static int32_t VehiclePreferenceCompare(const uint8_t rideType, const char * a, const char * b); + static const std::vector GetPreferredRideEntryOrder(const uint8_t rideType); + static int32_t VehiclePreferenceCompare(const uint8_t rideType, const char* a, const char* b); static bool RideTypeIsIndependent(const uint8_t rideType); }; diff --git a/src/openrct2/ride/RideRatings.cpp b/src/openrct2/ride/RideRatings.cpp index 5cfb9eec3a..7871fcb797 100644 --- a/src/openrct2/ride/RideRatings.cpp +++ b/src/openrct2/ride/RideRatings.cpp @@ -7,23 +7,26 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ -#include +#include "RideRatings.h" + #include "../Cheats.h" +#include "../OpenRCT2.h" #include "../core/Math.hpp" #include "../core/Util.hpp" #include "../interface/Window.h" #include "../localisation/Date.h" -#include "../OpenRCT2.h" #include "../world/Footpath.h" #include "../world/Map.h" #include "../world/Surface.h" #include "Ride.h" #include "RideData.h" -#include "RideRatings.h" #include "Station.h" #include "Track.h" -enum { +#include + +enum +{ RIDE_RATINGS_STATE_FIND_NEXT_RIDE, RIDE_RATINGS_STATE_INITIALISE, RIDE_RATINGS_STATE_2, @@ -32,37 +35,38 @@ enum { RIDE_RATINGS_STATE_5 }; -enum { - PROXIMITY_WATER_OVER, // 0x0138B596 - PROXIMITY_WATER_TOUCH, // 0x0138B598 - PROXIMITY_WATER_LOW, // 0x0138B59A - PROXIMITY_WATER_HIGH, // 0x0138B59C - PROXIMITY_SURFACE_TOUCH, // 0x0138B59E - PROXIMITY_PATH_ZERO_OVER, // 0x0138B5A0 - PROXIMITY_PATH_ZERO_TOUCH_ABOVE, // 0x0138B5A2 - PROXIMITY_PATH_ZERO_TOUCH_UNDER, // 0x0138B5A4 - PROXIMITY_PATH_TOUCH_ABOVE, // 0x0138B5A6 - PROXIMITY_PATH_TOUCH_UNDER, // 0x0138B5A8 - PROXIMITY_OWN_TRACK_TOUCH_ABOVE, // 0x0138B5AA - PROXIMITY_OWN_TRACK_CLOSE_ABOVE, // 0x0138B5AC - PROXIMITY_FOREIGN_TRACK_ABOVE_OR_BELOW, // 0x0138B5AE - PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE, // 0x0138B5B0 - PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE, // 0x0138B5B2 - PROXIMITY_SCENERY_SIDE_BELOW, // 0x0138B5B4 - PROXIMITY_SCENERY_SIDE_ABOVE, // 0x0138B5B6 - PROXIMITY_OWN_STATION_TOUCH_ABOVE, // 0x0138B5B8 - PROXIMITY_OWN_STATION_CLOSE_ABOVE, // 0x0138B5BA - PROXIMITY_TRACK_THROUGH_VERTICAL_LOOP, // 0x0138B5BC - PROXIMITY_PATH_TROUGH_VERTICAL_LOOP, // 0x0138B5BE - PROXIMITY_INTERSECTING_VERTICAL_LOOP, // 0x0138B5C0 - PROXIMITY_THROUGH_VERTICAL_LOOP, // 0x0138B5C2 - PROXIMITY_PATH_SIDE_CLOSE, // 0x0138B5C4 - PROXIMITY_FOREIGN_TRACK_SIDE_CLOSE, // 0x0138B5C6 - PROXIMITY_SURFACE_SIDE_CLOSE, // 0x0138B5C8 +enum +{ + PROXIMITY_WATER_OVER, // 0x0138B596 + PROXIMITY_WATER_TOUCH, // 0x0138B598 + PROXIMITY_WATER_LOW, // 0x0138B59A + PROXIMITY_WATER_HIGH, // 0x0138B59C + PROXIMITY_SURFACE_TOUCH, // 0x0138B59E + PROXIMITY_PATH_ZERO_OVER, // 0x0138B5A0 + PROXIMITY_PATH_ZERO_TOUCH_ABOVE, // 0x0138B5A2 + PROXIMITY_PATH_ZERO_TOUCH_UNDER, // 0x0138B5A4 + PROXIMITY_PATH_TOUCH_ABOVE, // 0x0138B5A6 + PROXIMITY_PATH_TOUCH_UNDER, // 0x0138B5A8 + PROXIMITY_OWN_TRACK_TOUCH_ABOVE, // 0x0138B5AA + PROXIMITY_OWN_TRACK_CLOSE_ABOVE, // 0x0138B5AC + PROXIMITY_FOREIGN_TRACK_ABOVE_OR_BELOW, // 0x0138B5AE + PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE, // 0x0138B5B0 + PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE, // 0x0138B5B2 + PROXIMITY_SCENERY_SIDE_BELOW, // 0x0138B5B4 + PROXIMITY_SCENERY_SIDE_ABOVE, // 0x0138B5B6 + PROXIMITY_OWN_STATION_TOUCH_ABOVE, // 0x0138B5B8 + PROXIMITY_OWN_STATION_CLOSE_ABOVE, // 0x0138B5BA + PROXIMITY_TRACK_THROUGH_VERTICAL_LOOP, // 0x0138B5BC + PROXIMITY_PATH_TROUGH_VERTICAL_LOOP, // 0x0138B5BE + PROXIMITY_INTERSECTING_VERTICAL_LOOP, // 0x0138B5C0 + PROXIMITY_THROUGH_VERTICAL_LOOP, // 0x0138B5C2 + PROXIMITY_PATH_SIDE_CLOSE, // 0x0138B5C4 + PROXIMITY_FOREIGN_TRACK_SIDE_CLOSE, // 0x0138B5C6 + PROXIMITY_SURFACE_SIDE_CLOSE, // 0x0138B5C8 PROXIMITY_COUNT }; -using ride_ratings_calculation = void (*)(Ride *ride); +using ride_ratings_calculation = void (*)(Ride* ride); rct_ride_rating_calc_data gRideRatingsCalcData; @@ -76,11 +80,11 @@ static void ride_ratings_update_state_3(); static void ride_ratings_update_state_4(); static void ride_ratings_update_state_5(); static void ride_ratings_begin_proximity_loop(); -static void ride_ratings_calculate(Ride *ride); -static void ride_ratings_calculate_value(Ride *ride); -static void ride_ratings_score_close_proximity(rct_tile_element *inputTileElement); +static void ride_ratings_calculate(Ride* ride); +static void ride_ratings_calculate_value(Ride* ride); +static void ride_ratings_score_close_proximity(rct_tile_element* inputTileElement); -static void ride_ratings_add(rating_tuple * rating, int32_t excitement, int32_t intensity, int32_t nausea); +static void ride_ratings_add(rating_tuple* rating, int32_t excitement, int32_t intensity, int32_t nausea); /** * This is a small hack function to keep calling the ride rating processor until @@ -90,8 +94,9 @@ static void ride_ratings_add(rating_tuple * rating, int32_t excitement, int32_t */ void ride_ratings_update_ride(int rideIndex) { - Ride *ride = get_ride(rideIndex); - if (ride->type != RIDE_TYPE_NULL && ride->status != RIDE_STATUS_CLOSED) { + Ride* ride = get_ride(rideIndex); + if (ride->type != RIDE_TYPE_NULL && ride->status != RIDE_STATUS_CLOSED) + { gRideRatingsCalcData.current_ride = rideIndex; gRideRatingsCalcData.state = RIDE_RATINGS_STATE_INITIALISE; while (gRideRatingsCalcData.state != RIDE_RATINGS_STATE_FIND_NEXT_RIDE) @@ -115,25 +120,26 @@ void ride_ratings_update_all() static void ride_ratings_update_state() { - switch (gRideRatingsCalcData.state) { - case RIDE_RATINGS_STATE_FIND_NEXT_RIDE: - ride_ratings_update_state_0(); - break; - case RIDE_RATINGS_STATE_INITIALISE: - ride_ratings_update_state_1(); - break; - case RIDE_RATINGS_STATE_2: - ride_ratings_update_state_2(); - break; - case RIDE_RATINGS_STATE_CALCULATE: - ride_ratings_update_state_3(); - break; - case RIDE_RATINGS_STATE_4: - ride_ratings_update_state_4(); - break; - case RIDE_RATINGS_STATE_5: - ride_ratings_update_state_5(); - break; + switch (gRideRatingsCalcData.state) + { + case RIDE_RATINGS_STATE_FIND_NEXT_RIDE: + ride_ratings_update_state_0(); + break; + case RIDE_RATINGS_STATE_INITIALISE: + ride_ratings_update_state_1(); + break; + case RIDE_RATINGS_STATE_2: + ride_ratings_update_state_2(); + break; + case RIDE_RATINGS_STATE_CALCULATE: + ride_ratings_update_state_3(); + break; + case RIDE_RATINGS_STATE_4: + ride_ratings_update_state_4(); + break; + case RIDE_RATINGS_STATE_5: + ride_ratings_update_state_5(); + break; } } @@ -146,12 +152,14 @@ static void ride_ratings_update_state_0() int32_t currentRide = gRideRatingsCalcData.current_ride; currentRide++; - if (currentRide == 255) { + if (currentRide == 255) + { currentRide = 0; } - Ride *ride = get_ride(currentRide); - if (ride->type != RIDE_TYPE_NULL && ride->status != RIDE_STATUS_CLOSED) { + Ride* ride = get_ride(currentRide); + if (ride->type != RIDE_TYPE_NULL && ride->status != RIDE_STATUS_CLOSED) + { gRideRatingsCalcData.state = RIDE_RATINGS_STATE_INITIALISE; } gRideRatingsCalcData.current_ride = currentRide; @@ -164,7 +172,8 @@ static void ride_ratings_update_state_0() static void ride_ratings_update_state_1() { gRideRatingsCalcData.proximity_total = 0; - for (int32_t i = 0; i < PROXIMITY_COUNT; i++) { + for (int32_t i = 0; i < PROXIMITY_COUNT; i++) + { gRideRatingsCalcData.proximity_scores[i] = 0; } gRideRatingsCalcData.num_brakes = 0; @@ -181,8 +190,9 @@ static void ride_ratings_update_state_1() static void ride_ratings_update_state_2() { const int32_t rideIndex = gRideRatingsCalcData.current_ride; - Ride *ride = get_ride(rideIndex); - if (ride->type == RIDE_TYPE_NULL || ride->status == RIDE_STATUS_CLOSED) { + Ride* ride = get_ride(rideIndex); + if (ride->type == RIDE_TYPE_NULL || ride->status == RIDE_STATUS_CLOSED) + { gRideRatingsCalcData.state = RIDE_RATINGS_STATE_FIND_NEXT_RIDE; return; } @@ -192,18 +202,19 @@ static void ride_ratings_update_state_2() int32_t z = gRideRatingsCalcData.proximity_z / 8; int32_t trackType = gRideRatingsCalcData.proximity_track_type; - rct_tile_element *tileElement = map_get_first_element_at(x, y); - do { + rct_tile_element* tileElement = map_get_first_element_at(x, y); + do + { if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; if (tileElement->base_height != z) continue; - if ( - trackType == 255 || - (tile_element_get_track_sequence(tileElement) == 0 && trackType == track_element_get_type(tileElement))) + if (trackType == 255 + || (tile_element_get_track_sequence(tileElement) == 0 && trackType == track_element_get_type(tileElement))) { - if (trackType == TRACK_ELEM_END_STATION) { + if (trackType == TRACK_ELEM_END_STATION) + { int32_t entranceIndex = tile_element_get_station(tileElement); gRideRatingsCalcData.station_flags &= ~RIDE_RATING_STATION_FLAG_NO_ENTRANCE; if (ride_get_entrance_location(rideIndex, entranceIndex).isNull()) @@ -214,13 +225,12 @@ static void ride_ratings_update_state_2() ride_ratings_score_close_proximity(tileElement); - CoordsXYE trackElement = { - /* .x = */ gRideRatingsCalcData.proximity_x, - /* .y = */ gRideRatingsCalcData.proximity_y, - /* .element = */ tileElement - }; + CoordsXYE trackElement = { /* .x = */ gRideRatingsCalcData.proximity_x, + /* .y = */ gRideRatingsCalcData.proximity_y, + /* .element = */ tileElement }; CoordsXYE nextTrackElement; - if (!track_block_get_next(&trackElement, &nextTrackElement, NULL, NULL)) { + if (!track_block_get_next(&trackElement, &nextTrackElement, NULL, NULL)) + { gRideRatingsCalcData.state = RIDE_RATINGS_STATE_4; return; } @@ -229,7 +239,9 @@ static void ride_ratings_update_state_2() y = nextTrackElement.y; z = nextTrackElement.element->base_height * 8; tileElement = nextTrackElement.element; - if (x == gRideRatingsCalcData.proximity_start_x && y == gRideRatingsCalcData.proximity_start_y && z == gRideRatingsCalcData.proximity_start_z) { + if (x == gRideRatingsCalcData.proximity_start_x && y == gRideRatingsCalcData.proximity_start_y + && z == gRideRatingsCalcData.proximity_start_z) + { gRideRatingsCalcData.state = RIDE_RATINGS_STATE_CALCULATE; return; } @@ -250,8 +262,9 @@ static void ride_ratings_update_state_2() */ static void ride_ratings_update_state_3() { - Ride *ride = get_ride(gRideRatingsCalcData.current_ride); - if (ride->type == RIDE_TYPE_NULL || ride->status == RIDE_STATUS_CLOSED) { + Ride* ride = get_ride(gRideRatingsCalcData.current_ride); + if (ride->type == RIDE_TYPE_NULL || ride->status == RIDE_STATUS_CLOSED) + { gRideRatingsCalcData.state = RIDE_RATINGS_STATE_FIND_NEXT_RIDE; return; } @@ -279,8 +292,9 @@ static void ride_ratings_update_state_4() */ static void ride_ratings_update_state_5() { - Ride *ride = get_ride(gRideRatingsCalcData.current_ride); - if (ride->type == RIDE_TYPE_NULL || ride->status == RIDE_STATUS_CLOSED) { + Ride* ride = get_ride(gRideRatingsCalcData.current_ride); + if (ride->type == RIDE_TYPE_NULL || ride->status == RIDE_STATUS_CLOSED) + { gRideRatingsCalcData.state = RIDE_RATINGS_STATE_FIND_NEXT_RIDE; return; } @@ -290,20 +304,23 @@ static void ride_ratings_update_state_5() int32_t z = gRideRatingsCalcData.proximity_z / 8; int32_t trackType = gRideRatingsCalcData.proximity_track_type; - rct_tile_element *tileElement = map_get_first_element_at(x, y); - do { + rct_tile_element* tileElement = map_get_first_element_at(x, y); + do + { if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; if (tileElement->base_height != z) continue; - if (trackType == 255 || trackType == track_element_get_type(tileElement)) { + if (trackType == 255 || trackType == track_element_get_type(tileElement)) + { ride_ratings_score_close_proximity(tileElement); x = gRideRatingsCalcData.proximity_x; y = gRideRatingsCalcData.proximity_y; track_begin_end trackBeginEnd; - if (!track_block_get_previous(x, y, tileElement, &trackBeginEnd)) { + if (!track_block_get_previous(x, y, tileElement, &trackBeginEnd)) + { gRideRatingsCalcData.state = RIDE_RATINGS_STATE_CALCULATE; return; } @@ -311,7 +328,9 @@ static void ride_ratings_update_state_5() x = trackBeginEnd.begin_x; y = trackBeginEnd.begin_y; z = trackBeginEnd.begin_z; - if (x == gRideRatingsCalcData.proximity_start_x && y == gRideRatingsCalcData.proximity_start_y && z == gRideRatingsCalcData.proximity_start_z) { + if (x == gRideRatingsCalcData.proximity_start_x && y == gRideRatingsCalcData.proximity_start_y + && z == gRideRatingsCalcData.proximity_start_z) + { gRideRatingsCalcData.state = RIDE_RATINGS_STATE_CALCULATE; return; } @@ -333,19 +352,23 @@ static void ride_ratings_update_state_5() static void ride_ratings_begin_proximity_loop() { const int32_t rideIndex = gRideRatingsCalcData.current_ride; - Ride *ride = get_ride(rideIndex); - if (ride->type == RIDE_TYPE_NULL || ride->status == RIDE_STATUS_CLOSED) { + Ride* ride = get_ride(rideIndex); + if (ride->type == RIDE_TYPE_NULL || ride->status == RIDE_STATUS_CLOSED) + { gRideRatingsCalcData.state = RIDE_RATINGS_STATE_FIND_NEXT_RIDE; return; } - if (ride->type == RIDE_TYPE_MAZE) { + if (ride->type == RIDE_TYPE_MAZE) + { gRideRatingsCalcData.state = RIDE_RATINGS_STATE_CALCULATE; return; } - for (int32_t i = 0; i < MAX_STATIONS; i++) { - if (ride->station_starts[i].xy != RCT_XY8_UNDEFINED) { + for (int32_t i = 0; i < MAX_STATIONS; i++) + { + if (ride->station_starts[i].xy != RCT_XY8_UNDEFINED) + { gRideRatingsCalcData.station_flags &= ~RIDE_RATING_STATION_FLAG_NO_ENTRANCE; if (ride_get_entrance_location(rideIndex, i).isNull()) { @@ -379,81 +402,95 @@ static void proximity_score_increment(int32_t type) * * rct2: 0x006B6207 */ -static void ride_ratings_score_close_proximity_in_direction(rct_tile_element *inputTileElement, int32_t direction) +static void ride_ratings_score_close_proximity_in_direction(rct_tile_element* inputTileElement, int32_t direction) { int32_t x = gRideRatingsCalcData.proximity_x + CoordsDirectionDelta[direction].x; int32_t y = gRideRatingsCalcData.proximity_y + CoordsDirectionDelta[direction].y; if (x < 0 || y < 0 || x >= (32 * 256) || y >= (32 * 256)) return; - rct_tile_element *tileElement = map_get_first_element_at(x >> 5, y >> 5); - do { - switch (tileElement->GetType()) { - case TILE_ELEMENT_TYPE_SURFACE: - if (gRideRatingsCalcData.proximity_base_height <= inputTileElement->base_height) { - if (inputTileElement->clearance_height <= tileElement->base_height) { - proximity_score_increment(PROXIMITY_SURFACE_SIDE_CLOSE); + rct_tile_element* tileElement = map_get_first_element_at(x >> 5, y >> 5); + do + { + switch (tileElement->GetType()) + { + case TILE_ELEMENT_TYPE_SURFACE: + if (gRideRatingsCalcData.proximity_base_height <= inputTileElement->base_height) + { + if (inputTileElement->clearance_height <= tileElement->base_height) + { + proximity_score_increment(PROXIMITY_SURFACE_SIDE_CLOSE); + } } - } - break; - case TILE_ELEMENT_TYPE_PATH: - if (abs((int32_t)inputTileElement->base_height - (int32_t)tileElement->base_height) <= 2) { - proximity_score_increment(PROXIMITY_PATH_SIDE_CLOSE); - } - break; - case TILE_ELEMENT_TYPE_TRACK: - if (track_element_get_ride_index(inputTileElement) != track_element_get_ride_index(tileElement)) { - if (abs((int32_t)inputTileElement->base_height - (int32_t)tileElement->base_height) <= 2) { - proximity_score_increment(PROXIMITY_FOREIGN_TRACK_SIDE_CLOSE); + break; + case TILE_ELEMENT_TYPE_PATH: + if (abs((int32_t)inputTileElement->base_height - (int32_t)tileElement->base_height) <= 2) + { + proximity_score_increment(PROXIMITY_PATH_SIDE_CLOSE); } - } - break; - case TILE_ELEMENT_TYPE_SMALL_SCENERY: - case TILE_ELEMENT_TYPE_LARGE_SCENERY: - if (tileElement->base_height < inputTileElement->clearance_height) { - if (inputTileElement->base_height > tileElement->clearance_height) { - proximity_score_increment(PROXIMITY_SCENERY_SIDE_ABOVE); - } else { - proximity_score_increment(PROXIMITY_SCENERY_SIDE_BELOW); + break; + case TILE_ELEMENT_TYPE_TRACK: + if (track_element_get_ride_index(inputTileElement) != track_element_get_ride_index(tileElement)) + { + if (abs((int32_t)inputTileElement->base_height - (int32_t)tileElement->base_height) <= 2) + { + proximity_score_increment(PROXIMITY_FOREIGN_TRACK_SIDE_CLOSE); + } } - } - break; + break; + case TILE_ELEMENT_TYPE_SMALL_SCENERY: + case TILE_ELEMENT_TYPE_LARGE_SCENERY: + if (tileElement->base_height < inputTileElement->clearance_height) + { + if (inputTileElement->base_height > tileElement->clearance_height) + { + proximity_score_increment(PROXIMITY_SCENERY_SIDE_ABOVE); + } + else + { + proximity_score_increment(PROXIMITY_SCENERY_SIDE_BELOW); + } + } + break; } } while (!(tileElement++)->IsLastForTile()); - } -static void ride_ratings_score_close_proximity_loops_helper(rct_tile_element *inputTileElement, int32_t x, int32_t y) +static void ride_ratings_score_close_proximity_loops_helper(rct_tile_element* inputTileElement, int32_t x, int32_t y) { - rct_tile_element *tileElement = map_get_first_element_at(x >> 5, y >> 5); - do { - switch (tileElement->GetType()) { - case TILE_ELEMENT_TYPE_PATH: + rct_tile_element* tileElement = map_get_first_element_at(x >> 5, y >> 5); + do + { + switch (tileElement->GetType()) { - int32_t zDiff = (int32_t)tileElement->base_height - (int32_t)inputTileElement->base_height; - if (zDiff >= 0 && zDiff <= 16) - { - proximity_score_increment(PROXIMITY_PATH_TROUGH_VERTICAL_LOOP); - } - } break; - - case TILE_ELEMENT_TYPE_TRACK: - { - bool elementsAreAt90DegAngle = ((tileElement->GetDirection() ^ inputTileElement->GetDirection()) & 1) != 0; - if (elementsAreAt90DegAngle) + case TILE_ELEMENT_TYPE_PATH: { int32_t zDiff = (int32_t)tileElement->base_height - (int32_t)inputTileElement->base_height; if (zDiff >= 0 && zDiff <= 16) { - proximity_score_increment(PROXIMITY_TRACK_THROUGH_VERTICAL_LOOP); - if (track_element_get_type(tileElement) == TRACK_ELEM_LEFT_VERTICAL_LOOP || - track_element_get_type(tileElement) == TRACK_ELEM_RIGHT_VERTICAL_LOOP) + proximity_score_increment(PROXIMITY_PATH_TROUGH_VERTICAL_LOOP); + } + } + break; + + case TILE_ELEMENT_TYPE_TRACK: + { + bool elementsAreAt90DegAngle = ((tileElement->GetDirection() ^ inputTileElement->GetDirection()) & 1) != 0; + if (elementsAreAt90DegAngle) + { + int32_t zDiff = (int32_t)tileElement->base_height - (int32_t)inputTileElement->base_height; + if (zDiff >= 0 && zDiff <= 16) { - proximity_score_increment(PROXIMITY_INTERSECTING_VERTICAL_LOOP); + proximity_score_increment(PROXIMITY_TRACK_THROUGH_VERTICAL_LOOP); + if (track_element_get_type(tileElement) == TRACK_ELEM_LEFT_VERTICAL_LOOP + || track_element_get_type(tileElement) == TRACK_ELEM_RIGHT_VERTICAL_LOOP) + { + proximity_score_increment(PROXIMITY_INTERSECTING_VERTICAL_LOOP); + } } } } - } break; + break; } } while (!(tileElement++)->IsLastForTile()); } @@ -462,10 +499,11 @@ static void ride_ratings_score_close_proximity_loops_helper(rct_tile_element *in * * rct2: 0x006B62DA */ -static void ride_ratings_score_close_proximity_loops(rct_tile_element *inputTileElement) +static void ride_ratings_score_close_proximity_loops(rct_tile_element* inputTileElement) { int32_t trackType = track_element_get_type(inputTileElement); - if (trackType == TRACK_ELEM_LEFT_VERTICAL_LOOP || trackType == TRACK_ELEM_RIGHT_VERTICAL_LOOP) { + if (trackType == TRACK_ELEM_LEFT_VERTICAL_LOOP || trackType == TRACK_ELEM_RIGHT_VERTICAL_LOOP) + { int32_t x = gRideRatingsCalcData.proximity_x; int32_t y = gRideRatingsCalcData.proximity_y; ride_ratings_score_close_proximity_loops_helper(inputTileElement, x, y); @@ -481,132 +519,170 @@ static void ride_ratings_score_close_proximity_loops(rct_tile_element *inputTile * * rct2: 0x006B5F9D */ -static void ride_ratings_score_close_proximity(rct_tile_element *inputTileElement) +static void ride_ratings_score_close_proximity(rct_tile_element* inputTileElement) { - if (gRideRatingsCalcData.station_flags & RIDE_RATING_STATION_FLAG_NO_ENTRANCE) { + if (gRideRatingsCalcData.station_flags & RIDE_RATING_STATION_FLAG_NO_ENTRANCE) + { return; } gRideRatingsCalcData.proximity_total++; int32_t x = gRideRatingsCalcData.proximity_x; int32_t y = gRideRatingsCalcData.proximity_y; - rct_tile_element *tileElement = map_get_first_element_at(x >> 5, y >> 5); - do { + rct_tile_element* tileElement = map_get_first_element_at(x >> 5, y >> 5); + do + { int32_t waterHeight; - switch (tileElement->GetType()) { - case TILE_ELEMENT_TYPE_SURFACE: - gRideRatingsCalcData.proximity_base_height = tileElement->base_height; - if (tileElement->base_height * 8 == gRideRatingsCalcData.proximity_z) { - proximity_score_increment(PROXIMITY_SURFACE_TOUCH); - } - waterHeight = surface_get_water_height(tileElement); - if (waterHeight != 0) { - int32_t z = waterHeight * 16; - if (z <= gRideRatingsCalcData.proximity_z) { - proximity_score_increment(PROXIMITY_WATER_OVER); - if (z == gRideRatingsCalcData.proximity_z) { - proximity_score_increment(PROXIMITY_WATER_TOUCH); - } - z += 16; - if (z == gRideRatingsCalcData.proximity_z) { - proximity_score_increment(PROXIMITY_WATER_LOW); - } - z += 112; - if (z <= gRideRatingsCalcData.proximity_z) { - proximity_score_increment(PROXIMITY_WATER_HIGH); - } - } - } - break; - case TILE_ELEMENT_TYPE_PATH: - // Bonus for normal path - if (footpath_element_get_type(tileElement) != 0) { - if (tileElement->clearance_height == inputTileElement->base_height) { - proximity_score_increment(PROXIMITY_PATH_TOUCH_ABOVE); - } - if (tileElement->base_height == inputTileElement->clearance_height) { - proximity_score_increment(PROXIMITY_PATH_TOUCH_UNDER); - } - } else { - // Bonus for path in first object entry - if (tileElement->clearance_height <= inputTileElement->base_height) { - proximity_score_increment(PROXIMITY_PATH_ZERO_OVER); - } - if (tileElement->clearance_height == inputTileElement->base_height) { - proximity_score_increment(PROXIMITY_PATH_ZERO_TOUCH_ABOVE); - } - if (tileElement->base_height == inputTileElement->clearance_height) { - proximity_score_increment(PROXIMITY_PATH_ZERO_TOUCH_UNDER); - } - } - break; - case TILE_ELEMENT_TYPE_TRACK: + switch (tileElement->GetType()) { - int32_t trackType = track_element_get_type(tileElement); - if (trackType == TRACK_ELEM_LEFT_VERTICAL_LOOP || trackType == TRACK_ELEM_RIGHT_VERTICAL_LOOP) { - int32_t sequence = tile_element_get_track_sequence(tileElement); - if (sequence == 3 || sequence == 6) { - if (tileElement->base_height - inputTileElement->clearance_height <= 10) { - proximity_score_increment(PROXIMITY_THROUGH_VERTICAL_LOOP); - } + case TILE_ELEMENT_TYPE_SURFACE: + gRideRatingsCalcData.proximity_base_height = tileElement->base_height; + if (tileElement->base_height * 8 == gRideRatingsCalcData.proximity_z) + { + proximity_score_increment(PROXIMITY_SURFACE_TOUCH); } - } - if (track_element_get_ride_index(inputTileElement) != track_element_get_ride_index(tileElement)) { - proximity_score_increment(PROXIMITY_FOREIGN_TRACK_ABOVE_OR_BELOW); - if (tileElement->clearance_height == inputTileElement->base_height) { - proximity_score_increment(PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE); - } - if (tileElement->clearance_height + 2 <= inputTileElement->base_height) { - if (tileElement->clearance_height + 10 >= inputTileElement->base_height) { - proximity_score_increment(PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE); - } - } - if (inputTileElement->clearance_height == tileElement->base_height) { - proximity_score_increment(PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE); - } - if (inputTileElement->clearance_height + 2 == tileElement->base_height) { - if ((uint8_t)(inputTileElement->clearance_height + 10) >= tileElement->base_height) { - proximity_score_increment(PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE); - } - } - } else { - trackType = track_element_get_type(tileElement); - bool isStation = ( - trackType == TRACK_ELEM_END_STATION || - trackType == TRACK_ELEM_MIDDLE_STATION || - trackType == TRACK_ELEM_BEGIN_STATION - ); - if (tileElement->clearance_height == inputTileElement->base_height) { - proximity_score_increment(PROXIMITY_OWN_TRACK_TOUCH_ABOVE); - if (isStation) { - proximity_score_increment(PROXIMITY_OWN_STATION_TOUCH_ABOVE); - } - } - if (tileElement->clearance_height + 2 <= inputTileElement->base_height) { - if (tileElement->clearance_height + 10 >= inputTileElement->base_height) { - proximity_score_increment(PROXIMITY_OWN_TRACK_CLOSE_ABOVE); - if (isStation) { - proximity_score_increment(PROXIMITY_OWN_STATION_CLOSE_ABOVE); + waterHeight = surface_get_water_height(tileElement); + if (waterHeight != 0) + { + int32_t z = waterHeight * 16; + if (z <= gRideRatingsCalcData.proximity_z) + { + proximity_score_increment(PROXIMITY_WATER_OVER); + if (z == gRideRatingsCalcData.proximity_z) + { + proximity_score_increment(PROXIMITY_WATER_TOUCH); + } + z += 16; + if (z == gRideRatingsCalcData.proximity_z) + { + proximity_score_increment(PROXIMITY_WATER_LOW); + } + z += 112; + if (z <= gRideRatingsCalcData.proximity_z) + { + proximity_score_increment(PROXIMITY_WATER_HIGH); } } } + break; + case TILE_ELEMENT_TYPE_PATH: + // Bonus for normal path + if (footpath_element_get_type(tileElement) != 0) + { + if (tileElement->clearance_height == inputTileElement->base_height) + { + proximity_score_increment(PROXIMITY_PATH_TOUCH_ABOVE); + } + if (tileElement->base_height == inputTileElement->clearance_height) + { + proximity_score_increment(PROXIMITY_PATH_TOUCH_UNDER); + } + } + else + { + // Bonus for path in first object entry + if (tileElement->clearance_height <= inputTileElement->base_height) + { + proximity_score_increment(PROXIMITY_PATH_ZERO_OVER); + } + if (tileElement->clearance_height == inputTileElement->base_height) + { + proximity_score_increment(PROXIMITY_PATH_ZERO_TOUCH_ABOVE); + } + if (tileElement->base_height == inputTileElement->clearance_height) + { + proximity_score_increment(PROXIMITY_PATH_ZERO_TOUCH_UNDER); + } + } + break; + case TILE_ELEMENT_TYPE_TRACK: + { + int32_t trackType = track_element_get_type(tileElement); + if (trackType == TRACK_ELEM_LEFT_VERTICAL_LOOP || trackType == TRACK_ELEM_RIGHT_VERTICAL_LOOP) + { + int32_t sequence = tile_element_get_track_sequence(tileElement); + if (sequence == 3 || sequence == 6) + { + if (tileElement->base_height - inputTileElement->clearance_height <= 10) + { + proximity_score_increment(PROXIMITY_THROUGH_VERTICAL_LOOP); + } + } + } + if (track_element_get_ride_index(inputTileElement) != track_element_get_ride_index(tileElement)) + { + proximity_score_increment(PROXIMITY_FOREIGN_TRACK_ABOVE_OR_BELOW); + if (tileElement->clearance_height == inputTileElement->base_height) + { + proximity_score_increment(PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE); + } + if (tileElement->clearance_height + 2 <= inputTileElement->base_height) + { + if (tileElement->clearance_height + 10 >= inputTileElement->base_height) + { + proximity_score_increment(PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE); + } + } + if (inputTileElement->clearance_height == tileElement->base_height) + { + proximity_score_increment(PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE); + } + if (inputTileElement->clearance_height + 2 == tileElement->base_height) + { + if ((uint8_t)(inputTileElement->clearance_height + 10) >= tileElement->base_height) + { + proximity_score_increment(PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE); + } + } + } + else + { + trackType = track_element_get_type(tileElement); + bool isStation + = (trackType == TRACK_ELEM_END_STATION || trackType == TRACK_ELEM_MIDDLE_STATION + || trackType == TRACK_ELEM_BEGIN_STATION); + if (tileElement->clearance_height == inputTileElement->base_height) + { + proximity_score_increment(PROXIMITY_OWN_TRACK_TOUCH_ABOVE); + if (isStation) + { + proximity_score_increment(PROXIMITY_OWN_STATION_TOUCH_ABOVE); + } + } + if (tileElement->clearance_height + 2 <= inputTileElement->base_height) + { + if (tileElement->clearance_height + 10 >= inputTileElement->base_height) + { + proximity_score_increment(PROXIMITY_OWN_TRACK_CLOSE_ABOVE); + if (isStation) + { + proximity_score_increment(PROXIMITY_OWN_STATION_CLOSE_ABOVE); + } + } + } - if (inputTileElement->clearance_height == tileElement->base_height) { - proximity_score_increment(PROXIMITY_OWN_TRACK_TOUCH_ABOVE); - if (isStation) { - proximity_score_increment(PROXIMITY_OWN_STATION_TOUCH_ABOVE); + if (inputTileElement->clearance_height == tileElement->base_height) + { + proximity_score_increment(PROXIMITY_OWN_TRACK_TOUCH_ABOVE); + if (isStation) + { + proximity_score_increment(PROXIMITY_OWN_STATION_TOUCH_ABOVE); + } } - } - if (inputTileElement->clearance_height + 2 <= tileElement->base_height) { - if (inputTileElement->clearance_height + 10 >= tileElement->base_height) { - proximity_score_increment(PROXIMITY_OWN_TRACK_CLOSE_ABOVE); - if (isStation) { - proximity_score_increment(PROXIMITY_OWN_STATION_CLOSE_ABOVE); + if (inputTileElement->clearance_height + 2 <= tileElement->base_height) + { + if (inputTileElement->clearance_height + 10 >= tileElement->base_height) + { + proximity_score_increment(PROXIMITY_OWN_TRACK_CLOSE_ABOVE); + if (isStation) + { + proximity_score_increment(PROXIMITY_OWN_STATION_CLOSE_ABOVE); + } } } } } - } break; + break; } // switch tileElement->GetType } while (!(tileElement++)->IsLastForTile()); @@ -615,26 +691,29 @@ static void ride_ratings_score_close_proximity(rct_tile_element *inputTileElemen ride_ratings_score_close_proximity_in_direction(inputTileElement, (direction - 1) & 3); ride_ratings_score_close_proximity_loops(inputTileElement); - switch (gRideRatingsCalcData.proximity_track_type) { - case TRACK_ELEM_BRAKES: - gRideRatingsCalcData.num_brakes++; - break; - case TRACK_ELEM_LEFT_REVERSER: - case TRACK_ELEM_RIGHT_REVERSER: - gRideRatingsCalcData.num_reversers++; - break; + switch (gRideRatingsCalcData.proximity_track_type) + { + case TRACK_ELEM_BRAKES: + gRideRatingsCalcData.num_brakes++; + break; + case TRACK_ELEM_LEFT_REVERSER: + case TRACK_ELEM_RIGHT_REVERSER: + gRideRatingsCalcData.num_reversers++; + break; } } -static void ride_ratings_calculate(Ride *ride) +static void ride_ratings_calculate(Ride* ride) { auto calcFunc = ride_ratings_get_calculate_func(ride->type); - if (calcFunc != nullptr) { + if (calcFunc != nullptr) + { calcFunc(ride); } #ifdef ORIGINAL_RATINGS - if (ride->ratings.excitement != -1) { + if (ride->ratings.excitement != -1) + { // Address underflows allowed by original RCT2 code ride->ratings.excitement = max(0, ride->ratings.excitement); ride->ratings.intensity = max(0, ride->ratings.intensity); @@ -643,54 +722,57 @@ static void ride_ratings_calculate(Ride *ride) #endif } -static void ride_ratings_calculate_value(Ride *ride) +static void ride_ratings_calculate_value(Ride* ride) { - struct row { int32_t months, multiplier, divisor, summand; }; + struct row + { + int32_t months, multiplier, divisor, summand; + }; static const row age_table_new[] = { - {5, 3, 2, 0}, // 1.5x - {13, 6, 5, 0}, // 1.2x - {40, 1, 1, 0}, // 1x - {64, 3, 4, 0}, // 0.75x - {88, 9, 16, 0}, // 0.56x - {104, 27, 64, 0}, // 0.42x - {120, 81, 256, 0}, // 0.32x - {128, 81, 512, 0}, // 0.16x - {200, 81, 1024, 0}, // 0.08x - {200, 9, 16, 0} // 0.56x "easter egg" - }; + { 5, 3, 2, 0 }, // 1.5x + { 13, 6, 5, 0 }, // 1.2x + { 40, 1, 1, 0 }, // 1x + { 64, 3, 4, 0 }, // 0.75x + { 88, 9, 16, 0 }, // 0.56x + { 104, 27, 64, 0 }, // 0.42x + { 120, 81, 256, 0 }, // 0.32x + { 128, 81, 512, 0 }, // 0.16x + { 200, 81, 1024, 0 }, // 0.08x + { 200, 9, 16, 0 } // 0.56x "easter egg" + }; #ifdef ORIGINAL_RATINGS static const row age_table_old[] = { - {5, 1, 1, 30}, // +30 - {13, 1, 1, 10}, // +10 - {40, 1, 1, 0}, // 1x - {64, 3, 4, 0}, // 0.75x - {88, 9, 16, 0}, // 0.56x - {104, 27, 64, 0}, // 0.42x - {120, 81, 256, 0}, // 0.32x - {128, 81, 512, 0}, // 0.16x - {200, 81, 1024, 0}, // 0.08x - {200, 9, 16, 0} // 0.56x "easter egg" - }; + { 5, 1, 1, 30 }, // +30 + { 13, 1, 1, 10 }, // +10 + { 40, 1, 1, 0 }, // 1x + { 64, 3, 4, 0 }, // 0.75x + { 88, 9, 16, 0 }, // 0.56x + { 104, 27, 64, 0 }, // 0.42x + { 120, 81, 256, 0 }, // 0.32x + { 128, 81, 512, 0 }, // 0.16x + { 200, 81, 1024, 0 }, // 0.08x + { 200, 9, 16, 0 } // 0.56x "easter egg" + }; #endif - - if (!ride_has_ratings(ride)) { + if (!ride_has_ratings(ride)) + { return; } // Start with the base ratings, multiplied by the ride type specific weights for excitement, intensity and nausea. - int32_t value = - (((ride->excitement * RideRatings[ride->type].excitement) * 32) >> 15) + - (((ride->intensity * RideRatings[ride->type].intensity) * 32) >> 15) + - (((ride->nausea * RideRatings[ride->type].nausea) * 32) >> 15); + int32_t value = (((ride->excitement * RideRatings[ride->type].excitement) * 32) >> 15) + + (((ride->intensity * RideRatings[ride->type].intensity) * 32) >> 15) + + (((ride->nausea * RideRatings[ride->type].nausea) * 32) >> 15); int32_t monthsOld = 0; - if (!gCheatsDisableRideValueAging) { + if (!gCheatsDisableRideValueAging) + { monthsOld = gDateMonthsElapsed - ride->build_date; } - const row *age_table = age_table_new; + const row* age_table = age_table_new; size_t table_size = Util::CountOf(age_table_new); #ifdef ORIGINAL_RATINGS @@ -698,18 +780,22 @@ static void ride_ratings_calculate_value(Ride *ride) table_size = Util::CountOf(age_table_old); #endif - row last_row = age_table[table_size-1]; + row last_row = age_table[table_size - 1]; // Ride is older than oldest age in the table? - if(monthsOld >= last_row.months) { + if (monthsOld >= last_row.months) + { value = (value * last_row.multiplier) / last_row.divisor + last_row.summand; } - else { + else + { // Find the first hit in the table that matches this ride's age - for(size_t it = 0; it < table_size; it++) { + for (size_t it = 0; it < table_size; it++) + { row curr = age_table[it]; - if(monthsOld < curr.months) { + if (monthsOld < curr.months) + { value = (value * curr.multiplier) / curr.divisor + curr.summand; break; } @@ -718,9 +804,10 @@ static void ride_ratings_calculate_value(Ride *ride) // Other ride of same type penalty int32_t otherRidesOfSameType = 0; - Ride *ride2; + Ride* ride2; int32_t i; - FOR_ALL_RIDES(i, ride2) { + FOR_ALL_RIDES (i, ride2) + { if (ride2->type == ride->type && ride2->status == RIDE_STATUS_OPEN) otherRidesOfSameType++; } @@ -736,7 +823,7 @@ static void ride_ratings_calculate_value(Ride *ride) * inputs * - edi: ride ptr */ -static uint16_t ride_compute_upkeep(Ride *ride) +static uint16_t ride_compute_upkeep(Ride* ride) { // data stored at 0x0057E3A8, incrementing 18 bytes at a time uint16_t upkeep = initialUpkeepCosts[ride->type]; @@ -754,12 +841,14 @@ static uint16_t ride_compute_upkeep(Ride *ride) // rides that had tracks. The 0's were fixed rides like crooked house or // dodgems. // Data source is 0x0097E3AC - if (hasRunningTrack[ride->type]) { + if (hasRunningTrack[ride->type]) + { totalLength *= 20; } upkeep += (uint16_t)(totalLength >> 10); - if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) { + if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) + { // The original code read from a table starting at 0x0097E3AE and // incrementing by 0x12 bytes between values. However, all of these // values were 40. I have replaced the table lookup with the constant @@ -769,7 +858,8 @@ static uint16_t ride_compute_upkeep(Ride *ride) // Add maintenance cost for reverser track pieces uint16_t reverserMaintenanceCost = 80; - if (ride->type == RIDE_TYPE_REVERSER_ROLLER_COASTER) { + if (ride->type == RIDE_TYPE_REVERSER_ROLLER_COASTER) + { reverserMaintenanceCost = 10; } upkeep += reverserMaintenanceCost * gRideRatingsCalcData.num_reversers; @@ -784,7 +874,8 @@ static uint16_t ride_compute_upkeep(Ride *ride) upkeep += costPerVehicle[ride->type] * ride->num_vehicles; // either set to 3 or 0, extra boosts for some rides including mini golf - if (chargeUpkeepForTrainLength[ride->type]) { + if (chargeUpkeepForTrainLength[ride->type]) + { upkeep += 3 * ride->num_cars_per_train; } @@ -792,14 +883,20 @@ static uint16_t ride_compute_upkeep(Ride *ride) // flume/rapids, 10 for roller coaster, 28 for giga coaster upkeep += costPerStation[ride->type] * ride->num_stations; - if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) { + if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) + { upkeep += 30; - } else if (ride->mode == RIDE_MODE_POWERED_LAUNCH_PASSTROUGH) { + } + else if (ride->mode == RIDE_MODE_POWERED_LAUNCH_PASSTROUGH) + { upkeep += 160; - } else if (ride->mode == RIDE_MODE_LIM_POWERED_LAUNCH) { + } + else if (ride->mode == RIDE_MODE_LIM_POWERED_LAUNCH) + { upkeep += 320; - } else if (ride->mode == RIDE_MODE_POWERED_LAUNCH || - ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) { + } + else if (ride->mode == RIDE_MODE_POWERED_LAUNCH || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) + { upkeep += 220; } @@ -819,9 +916,9 @@ static uint16_t ride_compute_upkeep(Ride *ride) * - bp: nausea * - edi: ride ptr */ -static void ride_ratings_apply_adjustments(Ride *ride, rating_tuple *ratings) +static void ride_ratings_apply_adjustments(Ride* ride, rating_tuple* ratings) { - rct_ride_entry *rideEntry = get_ride_entry(ride->subtype); + rct_ride_entry* rideEntry = get_ride_entry(ride->subtype); if (rideEntry == nullptr) { @@ -829,34 +926,44 @@ static void ride_ratings_apply_adjustments(Ride *ride, rating_tuple *ratings) } // Apply ride entry multipliers - ride_ratings_add(ratings, + ride_ratings_add( + ratings, (((int32_t)ratings->excitement * rideEntry->excitement_multiplier) >> 7), - (((int32_t)ratings->intensity * rideEntry->intensity_multiplier) >> 7), - (((int32_t)ratings->nausea * rideEntry->nausea_multiplier) >> 7)); + (((int32_t)ratings->intensity * rideEntry->intensity_multiplier) >> 7), + (((int32_t)ratings->nausea * rideEntry->nausea_multiplier) >> 7)); // Apply total air time #ifdef ORIGINAL_RATINGS - if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_AIR_TIME) { + if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_AIR_TIME) + { uint16_t totalAirTime = ride->total_air_time; - if (rideEntry->flags & RIDE_ENTRY_FLAG_LIMIT_AIRTIME_BONUS) { - if (totalAirTime >= 96) { + if (rideEntry->flags & RIDE_ENTRY_FLAG_LIMIT_AIRTIME_BONUS) + { + if (totalAirTime >= 96) + { totalAirTime -= 96; ratings->excitement -= totalAirTime / 8; ratings->nausea += totalAirTime / 16; } - } else { + } + else + { ratings->excitement += totalAirTime / 8; ratings->nausea += totalAirTime / 16; } } #else - if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_AIR_TIME) { + if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_AIR_TIME) + { int32_t excitementModifier; int32_t nauseaModifier; - if (rideEntry->flags & RIDE_ENTRY_FLAG_LIMIT_AIRTIME_BONUS) { + if (rideEntry->flags & RIDE_ENTRY_FLAG_LIMIT_AIRTIME_BONUS) + { // Limit airtime bonus for heartline twister coaster (see issues #2031 and #2064) excitementModifier = std::min(ride->total_air_time, 96) / 8; - } else { + } + else + { excitementModifier = ride->total_air_time / 8; } nauseaModifier = ride->total_air_time / 16; @@ -870,7 +977,7 @@ static void ride_ratings_apply_adjustments(Ride *ride, rating_tuple *ratings) * Lowers excitement, the higher the intensity. * rct2: 0x0065E7A3 */ -static void ride_ratings_apply_intensity_penalty(rating_tuple *ratings) +static void ride_ratings_apply_intensity_penalty(rating_tuple* ratings) { static const ride_rating intensityBounds[] = { 1000, 1100, 1200, 1320, 1450 }; ride_rating excitement = ratings->excitement; @@ -888,7 +995,7 @@ static void ride_ratings_apply_intensity_penalty(rating_tuple *ratings) * * rct2: 0x00655FD6 */ -static void set_unreliability_factor(Ride *ride) +static void set_unreliability_factor(Ride* ride) { // The bigger the difference in lift speed and minimum the higher the unreliability uint8_t lift_speed_adjustment = RideLiftData[ride->type].minimum_speed; @@ -903,7 +1010,8 @@ static uint32_t get_proximity_score_helper_1(uint16_t x, uint16_t max, uint32_t static uint32_t get_proximity_score_helper_2(uint16_t x, uint16_t additionIfNotZero, uint16_t max, uint32_t multiplier) { uint32_t result = x; - if (result != 0) result += additionIfNotZero; + if (result != 0) + result += additionIfNotZero; return (std::min(result, max) * multiplier) >> 16; } @@ -918,35 +1026,35 @@ static uint32_t get_proximity_score_helper_3(uint16_t x, uint16_t resultIfNotZer */ static uint32_t ride_ratings_get_proximity_score() { - const uint16_t * scores = gRideRatingsCalcData.proximity_scores; + const uint16_t* scores = gRideRatingsCalcData.proximity_scores; uint32_t result = 0; - result += get_proximity_score_helper_1(scores[PROXIMITY_WATER_OVER ] , 60, 0x00AAAA); - result += get_proximity_score_helper_1(scores[PROXIMITY_WATER_TOUCH ] , 22, 0x0245D1); - result += get_proximity_score_helper_1(scores[PROXIMITY_WATER_LOW ] , 10, 0x020000); - result += get_proximity_score_helper_1(scores[PROXIMITY_WATER_HIGH ] , 40, 0x00A000); - result += get_proximity_score_helper_1(scores[PROXIMITY_SURFACE_TOUCH ] , 70, 0x01B6DB); - result += get_proximity_score_helper_1(scores[PROXIMITY_PATH_ZERO_OVER ] + 8, 12, 0x064000); - result += get_proximity_score_helper_3(scores[PROXIMITY_PATH_ZERO_TOUCH_ABOVE ] , 40 ); - result += get_proximity_score_helper_3(scores[PROXIMITY_PATH_ZERO_TOUCH_UNDER ] , 45 ); - result += get_proximity_score_helper_2(scores[PROXIMITY_PATH_TOUCH_ABOVE ] , 10, 20, 0x03C000); - result += get_proximity_score_helper_2(scores[PROXIMITY_PATH_TOUCH_UNDER ] , 10, 20, 0x044000); - result += get_proximity_score_helper_2(scores[PROXIMITY_OWN_TRACK_TOUCH_ABOVE ] , 10, 15, 0x035555); - result += get_proximity_score_helper_1(scores[PROXIMITY_OWN_TRACK_CLOSE_ABOVE ] , 5, 0x060000); - result += get_proximity_score_helper_2(scores[PROXIMITY_FOREIGN_TRACK_ABOVE_OR_BELOW] , 10, 15, 0x02AAAA); - result += get_proximity_score_helper_2(scores[PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE ] , 10, 15, 0x04AAAA); - result += get_proximity_score_helper_1(scores[PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE ] , 5, 0x090000); - result += get_proximity_score_helper_1(scores[PROXIMITY_SCENERY_SIDE_BELOW ] , 35, 0x016DB6); - result += get_proximity_score_helper_1(scores[PROXIMITY_SCENERY_SIDE_ABOVE ] , 35, 0x00DB6D); - result += get_proximity_score_helper_3(scores[PROXIMITY_OWN_STATION_TOUCH_ABOVE ] , 55 ); - result += get_proximity_score_helper_3(scores[PROXIMITY_OWN_STATION_CLOSE_ABOVE ] , 25 ); - result += get_proximity_score_helper_2(scores[PROXIMITY_TRACK_THROUGH_VERTICAL_LOOP ] , 4, 6, 0x140000); - result += get_proximity_score_helper_2(scores[PROXIMITY_PATH_TROUGH_VERTICAL_LOOP ] , 4, 6, 0x0F0000); - result += get_proximity_score_helper_3(scores[PROXIMITY_INTERSECTING_VERTICAL_LOOP ] , 100 ); - result += get_proximity_score_helper_2(scores[PROXIMITY_THROUGH_VERTICAL_LOOP ] , 4, 6, 0x0A0000); - result += get_proximity_score_helper_2(scores[PROXIMITY_PATH_SIDE_CLOSE ] , 10, 20, 0x01C000); - result += get_proximity_score_helper_2(scores[PROXIMITY_FOREIGN_TRACK_SIDE_CLOSE ] , 10, 20, 0x024000); - result += get_proximity_score_helper_2(scores[PROXIMITY_SURFACE_SIDE_CLOSE ] , 10, 20, 0x028000); + result += get_proximity_score_helper_1(scores[PROXIMITY_WATER_OVER], 60, 0x00AAAA); + result += get_proximity_score_helper_1(scores[PROXIMITY_WATER_TOUCH], 22, 0x0245D1); + result += get_proximity_score_helper_1(scores[PROXIMITY_WATER_LOW], 10, 0x020000); + result += get_proximity_score_helper_1(scores[PROXIMITY_WATER_HIGH], 40, 0x00A000); + result += get_proximity_score_helper_1(scores[PROXIMITY_SURFACE_TOUCH], 70, 0x01B6DB); + result += get_proximity_score_helper_1(scores[PROXIMITY_PATH_ZERO_OVER] + 8, 12, 0x064000); + result += get_proximity_score_helper_3(scores[PROXIMITY_PATH_ZERO_TOUCH_ABOVE], 40); + result += get_proximity_score_helper_3(scores[PROXIMITY_PATH_ZERO_TOUCH_UNDER], 45); + result += get_proximity_score_helper_2(scores[PROXIMITY_PATH_TOUCH_ABOVE], 10, 20, 0x03C000); + result += get_proximity_score_helper_2(scores[PROXIMITY_PATH_TOUCH_UNDER], 10, 20, 0x044000); + result += get_proximity_score_helper_2(scores[PROXIMITY_OWN_TRACK_TOUCH_ABOVE], 10, 15, 0x035555); + result += get_proximity_score_helper_1(scores[PROXIMITY_OWN_TRACK_CLOSE_ABOVE], 5, 0x060000); + result += get_proximity_score_helper_2(scores[PROXIMITY_FOREIGN_TRACK_ABOVE_OR_BELOW], 10, 15, 0x02AAAA); + result += get_proximity_score_helper_2(scores[PROXIMITY_FOREIGN_TRACK_TOUCH_ABOVE], 10, 15, 0x04AAAA); + result += get_proximity_score_helper_1(scores[PROXIMITY_FOREIGN_TRACK_CLOSE_ABOVE], 5, 0x090000); + result += get_proximity_score_helper_1(scores[PROXIMITY_SCENERY_SIDE_BELOW], 35, 0x016DB6); + result += get_proximity_score_helper_1(scores[PROXIMITY_SCENERY_SIDE_ABOVE], 35, 0x00DB6D); + result += get_proximity_score_helper_3(scores[PROXIMITY_OWN_STATION_TOUCH_ABOVE], 55); + result += get_proximity_score_helper_3(scores[PROXIMITY_OWN_STATION_CLOSE_ABOVE], 25); + result += get_proximity_score_helper_2(scores[PROXIMITY_TRACK_THROUGH_VERTICAL_LOOP], 4, 6, 0x140000); + result += get_proximity_score_helper_2(scores[PROXIMITY_PATH_TROUGH_VERTICAL_LOOP], 4, 6, 0x0F0000); + result += get_proximity_score_helper_3(scores[PROXIMITY_INTERSECTING_VERTICAL_LOOP], 100); + result += get_proximity_score_helper_2(scores[PROXIMITY_THROUGH_VERTICAL_LOOP], 4, 6, 0x0A0000); + result += get_proximity_score_helper_2(scores[PROXIMITY_PATH_SIDE_CLOSE], 10, 20, 0x01C000); + result += get_proximity_score_helper_2(scores[PROXIMITY_FOREIGN_TRACK_SIDE_CLOSE], 10, 20, 0x024000); + result += get_proximity_score_helper_2(scores[PROXIMITY_SURFACE_SIDE_CLOSE], 10, 20, 0x028000); return result; } @@ -954,22 +1062,24 @@ static uint32_t ride_ratings_get_proximity_score() * Calculates how much of the track is sheltered in eighths. * rct2: 0x0065E72D */ -static int32_t get_num_of_sheltered_eighths(Ride *ride) +static int32_t get_num_of_sheltered_eighths(Ride* ride) { int32_t totalLength = ride_get_total_length(ride); int32_t shelteredLength = ride->sheltered_length; int32_t lengthEighth = totalLength / 8; int32_t lengthCounter = lengthEighth; int32_t numShelteredEighths = 0; - for (int32_t i = 0; i < 7; i++) { - if (shelteredLength >= lengthCounter) { + for (int32_t i = 0; i < 7; i++) + { + if (shelteredLength >= lengthCounter) + { lengthCounter += lengthEighth; numShelteredEighths++; } } int32_t dh = numShelteredEighths; - rct_ride_entry *rideType = get_ride_entry(ride->subtype); + rct_ride_entry* rideType = get_ride_entry(ride->subtype); if (rideType == nullptr) { return 0; @@ -1032,7 +1142,8 @@ static rating_tuple get_banked_turns_rating(Ride* ride) * * rct2: 0x0065E047 */ -static rating_tuple get_sloped_turns_rating(Ride* ride) { +static rating_tuple get_sloped_turns_rating(Ride* ride) +{ rating_tuple rating; int32_t no_4_plus_turns = get_turn_count_4_plus_elements(ride, 2); @@ -1054,7 +1165,8 @@ static rating_tuple get_sloped_turns_rating(Ride* ride) { * * rct2: 0x0065E0F2 */ -static rating_tuple get_inversions_ratings(uint8_t inversions) { +static rating_tuple get_inversions_ratings(uint8_t inversions) +{ rating_tuple rating; rating.excitement = (std::min(inversions, 6) * 0x1AAAAA) >> 16; @@ -1064,35 +1176,46 @@ static rating_tuple get_inversions_ratings(uint8_t inversions) { return rating; } -static rating_tuple get_special_track_elements_rating(uint8_t type, Ride *ride) { +static rating_tuple get_special_track_elements_rating(uint8_t type, Ride* ride) +{ int32_t excitement = 0, intensity = 0, nausea = 0; - if (type == RIDE_TYPE_GHOST_TRAIN) { - if (ride_has_spinning_tunnel(ride)) { + if (type == RIDE_TYPE_GHOST_TRAIN) + { + if (ride_has_spinning_tunnel(ride)) + { excitement += 40; - intensity += 25; - nausea += 55; + intensity += 25; + nausea += 55; } - } else if (type == RIDE_TYPE_LOG_FLUME) { + } + else if (type == RIDE_TYPE_LOG_FLUME) + { // Reverser for log flume - if (ride_has_log_reverser(ride)) { + if (ride_has_log_reverser(ride)) + { excitement += 48; - intensity += 55; - nausea += 65; + intensity += 55; + nausea += 65; } - } else { - if (ride_has_water_splash(ride)) { + } + else + { + if (ride_has_water_splash(ride)) + { excitement += 50; - intensity += 30; - nausea += 20; + intensity += 30; + nausea += 20; } - if (ride_has_waterfall(ride)) { + if (ride_has_waterfall(ride)) + { excitement += 55; - intensity += 30; + intensity += 30; } - if (ride_has_whirlpool(ride)) { + if (ride_has_whirlpool(ride)) + { excitement += 35; - intensity += 20; - nausea += 23; + intensity += 20; + nausea += 23; } } uint8_t helix_sections = ride_get_helix_sections(ride); @@ -1114,34 +1237,34 @@ static rating_tuple get_special_track_elements_rating(uint8_t type, Ride *ride) * * rct2: 0x0065DDD1 */ -static rating_tuple ride_ratings_get_turns_ratings(Ride *ride) +static rating_tuple ride_ratings_get_turns_ratings(Ride* ride) { int32_t excitement = 0, intensity = 0, nausea = 0; rating_tuple special_track_element_rating = get_special_track_elements_rating(ride->type, ride); excitement += special_track_element_rating.excitement; - intensity += special_track_element_rating.intensity; - nausea += special_track_element_rating.nausea; + intensity += special_track_element_rating.intensity; + nausea += special_track_element_rating.nausea; rating_tuple var_10E_rating = get_flat_turns_rating(ride); excitement += var_10E_rating.excitement; - intensity += var_10E_rating.intensity; - nausea += var_10E_rating.nausea; + intensity += var_10E_rating.intensity; + nausea += var_10E_rating.nausea; rating_tuple var_110_rating = get_banked_turns_rating(ride); excitement += var_110_rating.excitement; - intensity += var_110_rating.intensity; - nausea += var_110_rating.nausea; + intensity += var_110_rating.intensity; + nausea += var_110_rating.nausea; rating_tuple var_112_rating = get_sloped_turns_rating(ride); excitement += var_112_rating.excitement; - intensity += var_112_rating.intensity; - nausea += var_112_rating.nausea; + intensity += var_112_rating.intensity; + nausea += var_112_rating.nausea; rating_tuple inversions_rating = get_inversions_ratings(ride->inversions & 0x1F); excitement += inversions_rating.excitement; - intensity += inversions_rating.intensity; - nausea += inversions_rating.nausea; + intensity += inversions_rating.intensity; + nausea += inversions_rating.nausea; rating_tuple rating = { (ride_rating)excitement, (ride_rating)intensity, (ride_rating)nausea }; return rating; @@ -1151,7 +1274,7 @@ static rating_tuple ride_ratings_get_turns_ratings(Ride *ride) * * rct2: 0x0065E1C2 */ -static rating_tuple ride_ratings_get_sheltered_ratings(Ride *ride) +static rating_tuple ride_ratings_get_sheltered_ratings(Ride* ride) { int32_t sheltered_length_shifted = (ride->sheltered_length) >> 16; uint32_t eax = std::min(sheltered_length_shifted, 1000); @@ -1166,14 +1289,16 @@ static rating_tuple ride_ratings_get_sheltered_ratings(Ride *ride) /*eax = (ride->var_11C * 30340) >> 16;*/ /*nausea += eax;*/ - if (ride->num_sheltered_sections & 0x40) { + if (ride->num_sheltered_sections & 0x40) + { excitement += 20; - nausea += 15; + nausea += 15; } - if (ride->num_sheltered_sections & 0x20) { + if (ride->num_sheltered_sections & 0x20) + { excitement += 20; - nausea += 15; + nausea += 15; } uint8_t lowerval = ride->num_sheltered_sections & 0x1F; @@ -1188,13 +1313,11 @@ static rating_tuple ride_ratings_get_sheltered_ratings(Ride *ride) * * rct2: 0x0065DCDC */ -static rating_tuple ride_ratings_get_gforce_ratings(Ride *ride) +static rating_tuple ride_ratings_get_gforce_ratings(Ride* ride) { - rating_tuple result = { - /* .excitement = */ 0, - /* .intensity = */ 0, - /* .nausea = */ 0 - }; + rating_tuple result = { /* .excitement = */ 0, + /* .intensity = */ 0, + /* .nausea = */ 0 }; // Apply maximum positive G force factor result.excitement += (ride->max_positive_vertical_g * 5242) >> 16; @@ -1203,27 +1326,29 @@ static rating_tuple ride_ratings_get_gforce_ratings(Ride *ride) // Apply maximum negative G force factor fixed16_2dp gforce = ride->max_negative_vertical_g; - result.excitement += (Math::Clamp(-FIXED_2DP(2,50), gforce, FIXED_2DP(0,00)) * -15728) >> 16; - result.intensity += ((gforce - FIXED_2DP(1,00)) * -52428) >> 16; - result.nausea += ((gforce - FIXED_2DP(1,00)) * -14563) >> 16; + result.excitement += (Math::Clamp(-FIXED_2DP(2, 50), gforce, FIXED_2DP(0, 00)) * -15728) >> 16; + result.intensity += ((gforce - FIXED_2DP(1, 00)) * -52428) >> 16; + result.nausea += ((gforce - FIXED_2DP(1, 00)) * -14563) >> 16; // Apply lateral G force factor - result.excitement += (std::min(FIXED_2DP(1,50), ride->max_lateral_g) * 26214) >> 16; + result.excitement += (std::min(FIXED_2DP(1, 50), ride->max_lateral_g) * 26214) >> 16; result.intensity += ride->max_lateral_g; result.nausea += (ride->max_lateral_g * 21845) >> 16; - // Very high lateral G force penalty - #ifdef ORIGINAL_RATINGS - if (ride->max_lateral_g > FIXED_2DP(2,80)) { - result.intensity += FIXED_2DP(3,75); - result.nausea += FIXED_2DP(2,00); +// Very high lateral G force penalty +#ifdef ORIGINAL_RATINGS + if (ride->max_lateral_g > FIXED_2DP(2, 80)) + { + result.intensity += FIXED_2DP(3, 75); + result.nausea += FIXED_2DP(2, 00); } - if (ride->max_lateral_g > FIXED_2DP(3,10)) { + if (ride->max_lateral_g > FIXED_2DP(3, 10)) + { result.excitement /= 2; - result.intensity += FIXED_2DP(8,50); - result.nausea += FIXED_2DP(4,00); + result.intensity += FIXED_2DP(8, 50); + result.nausea += FIXED_2DP(4, 00); } - #endif +#endif return result; } @@ -1232,13 +1357,11 @@ static rating_tuple ride_ratings_get_gforce_ratings(Ride *ride) * * rct2: 0x0065E139 */ -static rating_tuple ride_ratings_get_drop_ratings(Ride *ride) +static rating_tuple ride_ratings_get_drop_ratings(Ride* ride) { - rating_tuple result = { - /* .excitement = */ 0, - /* .intensity = */ 0, - /* .nausea = */ 0 - }; + rating_tuple result = { /* .excitement = */ 0, + /* .intensity = */ 0, + /* .nausea = */ 0 }; // Apply number of drops factor int32_t drops = ride->drops & 0x3F; @@ -1247,7 +1370,8 @@ static rating_tuple ride_ratings_get_drop_ratings(Ride *ride) result.nausea += (drops * 655360) >> 16; // Apply highest drop factor - ride_ratings_add(&result, + ride_ratings_add( + &result, ((ride->highest_drop_height * 2) * 16000) >> 16, ((ride->highest_drop_height * 2) * 32000) >> 16, ((ride->highest_drop_height * 2) * 10240) >> 16); @@ -1259,7 +1383,7 @@ static rating_tuple ride_ratings_get_drop_ratings(Ride *ride) * Calculates a score based on the surrounding scenery. * rct2: 0x0065E557 */ -static int32_t ride_ratings_get_scenery_score(Ride *ride) +static int32_t ride_ratings_get_scenery_score(Ride* ride) { int8_t i = ride_get_first_valid_station_start(ride); int32_t x, y; @@ -1292,11 +1416,14 @@ static int32_t ride_ratings_get_scenery_score(Ride *ride) // Count surrounding scenery items int32_t numSceneryItems = 0; - for (int32_t yy = std::max(y - 5, 0); yy <= std::min(y + 5, 255); yy++) { - for (int32_t xx = std::max(x - 5, 0); xx <= std::min(x + 5, 255); xx++) { + for (int32_t yy = std::max(y - 5, 0); yy <= std::min(y + 5, 255); yy++) + { + for (int32_t xx = std::max(x - 5, 0); xx <= std::min(x + 5, 255); xx++) + { // Count scenery items on this tile - rct_tile_element *tileElement = map_get_first_element_at(xx, yy); - do { + rct_tile_element* tileElement = map_get_first_element_at(xx, yy); + do + { if (tileElement->flags & (1 << 4)) continue; @@ -1312,7 +1439,7 @@ static int32_t ride_ratings_get_scenery_score(Ride *ride) #pragma region Ride rating calculation helpers -static void ride_ratings_set(rating_tuple *ratings, int32_t excitement, int32_t intensity, int32_t nausea) +static void ride_ratings_set(rating_tuple* ratings, int32_t excitement, int32_t intensity, int32_t nausea) { ratings->excitement = 0; ratings->intensity = 0; @@ -1323,7 +1450,7 @@ static void ride_ratings_set(rating_tuple *ratings, int32_t excitement, int32_t /** * Add to a ride rating with overflow protection. */ -static void ride_ratings_add(rating_tuple * rating, int32_t excitement, int32_t intensity, int32_t nausea) +static void ride_ratings_add(rating_tuple* rating, int32_t excitement, int32_t intensity, int32_t nausea) { int32_t newExcitement = rating->excitement + excitement; int32_t newIntensity = rating->intensity + intensity; @@ -1333,186 +1460,226 @@ static void ride_ratings_add(rating_tuple * rating, int32_t excitement, int32_t rating->nausea = Math::Clamp(0, newNausea, INT16_MAX); } -static void ride_ratings_apply_length(rating_tuple *ratings, Ride *ride, int32_t maxLength, int32_t excitementMultiplier) +static void ride_ratings_apply_length(rating_tuple* ratings, Ride* ride, int32_t maxLength, int32_t excitementMultiplier) { - ride_ratings_add(ratings, - (std::min(ride_get_total_length(ride) >> 16, maxLength) * excitementMultiplier) >> 16, - 0, - 0); + ride_ratings_add(ratings, (std::min(ride_get_total_length(ride) >> 16, maxLength) * excitementMultiplier) >> 16, 0, 0); } -static void ride_ratings_apply_synchronisation(rating_tuple *ratings, Ride *ride, int32_t excitement, int32_t intensity) +static void ride_ratings_apply_synchronisation(rating_tuple* ratings, Ride* ride, int32_t excitement, int32_t intensity) { - if ((ride->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS) && - ride_has_adjacent_station(ride) - ) { + if ((ride->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS) && ride_has_adjacent_station(ride)) + { ride_ratings_add(ratings, excitement, intensity, 0); } } -static void ride_ratings_apply_train_length(rating_tuple *ratings, Ride *ride, int32_t excitementMultiplier) +static void ride_ratings_apply_train_length(rating_tuple* ratings, Ride* ride, int32_t excitementMultiplier) { - ride_ratings_add(ratings, - ((ride->num_cars_per_train - 1) * excitementMultiplier) >> 16, - 0, - 0); + ride_ratings_add(ratings, ((ride->num_cars_per_train - 1) * excitementMultiplier) >> 16, 0, 0); } -static void ride_ratings_apply_max_speed(rating_tuple *ratings, Ride *ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) +static void ride_ratings_apply_max_speed( + rating_tuple* ratings, Ride* ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) { int32_t modifier = ride->max_speed >> 16; - ride_ratings_add(ratings, + ride_ratings_add( + ratings, (modifier * excitementMultiplier) >> 16, (modifier * intensityMultiplier) >> 16, (modifier * nauseaMultiplier) >> 16); } -static void ride_ratings_apply_average_speed(rating_tuple *ratings, Ride *ride, int32_t excitementMultiplier, int32_t intensityMultiplier) +static void ride_ratings_apply_average_speed( + rating_tuple* ratings, Ride* ride, int32_t excitementMultiplier, int32_t intensityMultiplier) { int32_t modifier = ride->average_speed >> 16; - ride_ratings_add(ratings, - (modifier * excitementMultiplier) >> 16, - (modifier * intensityMultiplier) >> 16, - 0); + ride_ratings_add(ratings, (modifier * excitementMultiplier) >> 16, (modifier * intensityMultiplier) >> 16, 0); } -static void ride_ratings_apply_duration(rating_tuple *ratings, Ride *ride, int32_t maxDuration, int32_t excitementMultiplier) +static void ride_ratings_apply_duration(rating_tuple* ratings, Ride* ride, int32_t maxDuration, int32_t excitementMultiplier) { - ride_ratings_add(ratings, - (std::min(ride_get_total_time(ride), maxDuration) * excitementMultiplier) >> 16, - 0, - 0); + ride_ratings_add(ratings, (std::min(ride_get_total_time(ride), maxDuration) * excitementMultiplier) >> 16, 0, 0); } -static void ride_ratings_apply_gforces(rating_tuple *ratings, Ride *ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) +static void ride_ratings_apply_gforces( + rating_tuple* ratings, Ride* ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) { rating_tuple subRating = ride_ratings_get_gforce_ratings(ride); - ride_ratings_add(ratings, + ride_ratings_add( + ratings, (subRating.excitement * excitementMultiplier) >> 16, (subRating.intensity * intensityMultiplier) >> 16, (subRating.nausea * nauseaMultiplier) >> 16); } -static void ride_ratings_apply_turns(rating_tuple *ratings, Ride *ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) +static void ride_ratings_apply_turns( + rating_tuple* ratings, Ride* ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) { rating_tuple subRating = ride_ratings_get_turns_ratings(ride); - ride_ratings_add(ratings, + ride_ratings_add( + ratings, (subRating.excitement * excitementMultiplier) >> 16, (subRating.intensity * intensityMultiplier) >> 16, (subRating.nausea * nauseaMultiplier) >> 16); } -static void ride_ratings_apply_drops(rating_tuple *ratings, Ride *ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) +static void ride_ratings_apply_drops( + rating_tuple* ratings, Ride* ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) { rating_tuple subRating = ride_ratings_get_drop_ratings(ride); - ride_ratings_add(ratings, + ride_ratings_add( + ratings, (subRating.excitement * excitementMultiplier) >> 16, (subRating.intensity * intensityMultiplier) >> 16, (subRating.nausea * nauseaMultiplier) >> 16); } -static void ride_ratings_apply_sheltered_ratings(rating_tuple *ratings, Ride *ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) +static void ride_ratings_apply_sheltered_ratings( + rating_tuple* ratings, Ride* ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) { rating_tuple subRating = ride_ratings_get_sheltered_ratings(ride); - ride_ratings_add(ratings, + ride_ratings_add( + ratings, (subRating.excitement * excitementMultiplier) >> 16, (subRating.intensity * intensityMultiplier) >> 16, (subRating.nausea * nauseaMultiplier) >> 16); } -static void ride_ratings_apply_operation_option(rating_tuple *ratings, Ride *ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) +static void ride_ratings_apply_operation_option( + rating_tuple* ratings, Ride* ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) { - ride_ratings_add(ratings, + ride_ratings_add( + ratings, (ride->operation_option * excitementMultiplier) >> 16, (ride->operation_option * intensityMultiplier) >> 16, (ride->operation_option * nauseaMultiplier) >> 16); } -static void ride_ratings_apply_rotations(rating_tuple *ratings, Ride *ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) +static void ride_ratings_apply_rotations( + rating_tuple* ratings, Ride* ride, int32_t excitementMultiplier, int32_t intensityMultiplier, int32_t nauseaMultiplier) { - ride_ratings_add(ratings, + ride_ratings_add( + ratings, ride->rotations * excitementMultiplier, ride->rotations * intensityMultiplier, ride->rotations * nauseaMultiplier); } -static void ride_ratings_apply_proximity(rating_tuple *ratings, int32_t excitementMultiplier) +static void ride_ratings_apply_proximity(rating_tuple* ratings, int32_t excitementMultiplier) { - ride_ratings_add(ratings, - (ride_ratings_get_proximity_score() * excitementMultiplier) >> 16, - 0, - 0); + ride_ratings_add(ratings, (ride_ratings_get_proximity_score() * excitementMultiplier) >> 16, 0, 0); } -static void ride_ratings_apply_scenery(rating_tuple *ratings, Ride *ride, int32_t excitementMultiplier) +static void ride_ratings_apply_scenery(rating_tuple* ratings, Ride* ride, int32_t excitementMultiplier) { - ride_ratings_add(ratings, - (ride_ratings_get_scenery_score(ride) * excitementMultiplier) >> 16, - 0, - 0); + ride_ratings_add(ratings, (ride_ratings_get_scenery_score(ride) * excitementMultiplier) >> 16, 0, 0); } -static void ride_ratings_apply_highest_drop_height_penalty(rating_tuple *ratings, Ride *ride, int32_t minHighestDropHeight, int32_t excitementPenalty, int32_t intensityPenalty, int32_t nauseaPenalty) +static void ride_ratings_apply_highest_drop_height_penalty( + rating_tuple* ratings, + Ride* ride, + int32_t minHighestDropHeight, + int32_t excitementPenalty, + int32_t intensityPenalty, + int32_t nauseaPenalty) { - if (ride->highest_drop_height < minHighestDropHeight) { + if (ride->highest_drop_height < minHighestDropHeight) + { ratings->excitement /= excitementPenalty; ratings->intensity /= intensityPenalty; ratings->nausea /= nauseaPenalty; } } -static void ride_ratings_apply_max_speed_penalty(rating_tuple *ratings, Ride *ride, int32_t minMaxSpeed, int32_t excitementPenalty, int32_t intensityPenalty, int32_t nauseaPenalty) +static void ride_ratings_apply_max_speed_penalty( + rating_tuple* ratings, + Ride* ride, + int32_t minMaxSpeed, + int32_t excitementPenalty, + int32_t intensityPenalty, + int32_t nauseaPenalty) { - if (ride->max_speed < minMaxSpeed) { + if (ride->max_speed < minMaxSpeed) + { ratings->excitement /= excitementPenalty; ratings->intensity /= intensityPenalty; ratings->nausea /= nauseaPenalty; } } -static void ride_ratings_apply_num_drops_penalty(rating_tuple *ratings, Ride *ride, int32_t minNumDrops, int32_t excitementPenalty, int32_t intensityPenalty, int32_t nauseaPenalty) +static void ride_ratings_apply_num_drops_penalty( + rating_tuple* ratings, + Ride* ride, + int32_t minNumDrops, + int32_t excitementPenalty, + int32_t intensityPenalty, + int32_t nauseaPenalty) { - if ((ride->drops & 0x3F) < minNumDrops) { + if ((ride->drops & 0x3F) < minNumDrops) + { ratings->excitement /= excitementPenalty; ratings->intensity /= intensityPenalty; ratings->nausea /= nauseaPenalty; } } -static void ride_ratings_apply_max_negative_g_penalty(rating_tuple *ratings, Ride *ride, int32_t maxMaxNegativeVerticalG, int32_t excitementPenalty, int32_t intensityPenalty, int32_t nauseaPenalty) +static void ride_ratings_apply_max_negative_g_penalty( + rating_tuple* ratings, + Ride* ride, + int32_t maxMaxNegativeVerticalG, + int32_t excitementPenalty, + int32_t intensityPenalty, + int32_t nauseaPenalty) { - if (ride->max_negative_vertical_g >= maxMaxNegativeVerticalG) { + if (ride->max_negative_vertical_g >= maxMaxNegativeVerticalG) + { ratings->excitement /= excitementPenalty; ratings->intensity /= intensityPenalty; ratings->nausea /= nauseaPenalty; } } -static void ride_ratings_apply_max_lateral_g_penalty(rating_tuple *ratings, Ride *ride, int32_t minMaxLateralG, int32_t excitementPenalty, int32_t intensityPenalty, int32_t nauseaPenalty) +static void ride_ratings_apply_max_lateral_g_penalty( + rating_tuple* ratings, + Ride* ride, + int32_t minMaxLateralG, + int32_t excitementPenalty, + int32_t intensityPenalty, + int32_t nauseaPenalty) { - if (ride->max_lateral_g < minMaxLateralG) { + if (ride->max_lateral_g < minMaxLateralG) + { ratings->excitement /= excitementPenalty; ratings->intensity /= intensityPenalty; ratings->nausea /= nauseaPenalty; } } -static void ride_ratings_apply_excessive_lateral_g_penalty(rating_tuple *ratings, Ride *ride) +static void ride_ratings_apply_excessive_lateral_g_penalty(rating_tuple* ratings, Ride* ride) { #ifndef ORIGINAL_RATINGS - if (ride->max_lateral_g > FIXED_2DP(2,80)) { - ride_ratings_add(ratings, 0, FIXED_2DP(3,75), FIXED_2DP(2,00)); + if (ride->max_lateral_g > FIXED_2DP(2, 80)) + { + ride_ratings_add(ratings, 0, FIXED_2DP(3, 75), FIXED_2DP(2, 00)); } - if (ride->max_lateral_g > FIXED_2DP(3,10)) { + if (ride->max_lateral_g > FIXED_2DP(3, 10)) + { ratings->excitement /= 2; - ride_ratings_add(ratings, 0, FIXED_2DP(8,50), FIXED_2DP(4,00)); + ride_ratings_add(ratings, 0, FIXED_2DP(8, 50), FIXED_2DP(4, 00)); } #endif } -static void ride_ratings_apply_first_length_penalty(rating_tuple *ratings, Ride *ride, int32_t minFirstLength, int32_t excitementPenalty, int32_t intensityPenalty, int32_t nauseaPenalty) +static void ride_ratings_apply_first_length_penalty( + rating_tuple* ratings, + Ride* ride, + int32_t minFirstLength, + int32_t excitementPenalty, + int32_t intensityPenalty, + int32_t nauseaPenalty) { - if (ride->length[0] < minFirstLength) { + if (ride->length[0] < minFirstLength) + { ratings->excitement /= excitementPenalty; ratings->intensity /= intensityPenalty; ratings->nausea /= nauseaPenalty; @@ -1523,7 +1690,7 @@ static void ride_ratings_apply_first_length_penalty(rating_tuple *ratings, Ride #pragma region Ride rating calculation functions -static void ride_ratings_calculate_spiral_roller_coaster(Ride *ride) +static void ride_ratings_calculate_spiral_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -1532,9 +1699,9 @@ static void ride_ratings_calculate_spiral_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(3,30), RIDE_RATING(0,30), RIDE_RATING(0,30)); + ride_ratings_set(&ratings, RIDE_RATING(3, 30), RIDE_RATING(0, 30), RIDE_RATING(0, 30)); ride_ratings_apply_length(&ratings, ride, 6000, 819); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 140434); ride_ratings_apply_max_speed(&ratings, ride, 51366, 85019, 35424); ride_ratings_apply_average_speed(&ratings, ride, 364088, 400497); @@ -1551,7 +1718,8 @@ static void ride_ratings_calculate_spiral_roller_coaster(Ride *ride) ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); - if ((ride->inversions & 0x1F) == 0) { + if ((ride->inversions & 0x1F) == 0) + { ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 40), 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); } @@ -1569,7 +1737,7 @@ static void ride_ratings_calculate_spiral_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_stand_up_roller_coaster(Ride *ride) +static void ride_ratings_calculate_stand_up_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -1578,9 +1746,9 @@ static void ride_ratings_calculate_stand_up_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,50), RIDE_RATING(3,00), RIDE_RATING(3,00)); + ride_ratings_set(&ratings, RIDE_RATING(2, 50), RIDE_RATING(3, 00), RIDE_RATING(3, 00)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,10)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 10)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 123987, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -1593,7 +1761,7 @@ static void ride_ratings_calculate_stand_up_roller_coaster(Ride *ride) ride_ratings_apply_scenery(&ratings, ride, 5577); ride_ratings_apply_highest_drop_height_penalty(&ratings, ride, 12, 2, 2, 2); ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); - ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0,50), 2, 2, 2); + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 50), 2, 2, 2); ride_ratings_apply_excessive_lateral_g_penalty(&ratings, ride); ride_ratings_apply_intensity_penalty(&ratings); @@ -1608,7 +1776,7 @@ static void ride_ratings_calculate_stand_up_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_suspended_swinging_coaster(Ride *ride) +static void ride_ratings_calculate_suspended_swinging_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -1617,9 +1785,9 @@ static void ride_ratings_calculate_suspended_swinging_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(3,30), RIDE_RATING(2,90), RIDE_RATING(3,50)); + ride_ratings_set(&ratings, RIDE_RATING(3, 30), RIDE_RATING(2, 90), RIDE_RATING(3, 50)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,10)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 10)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -1649,7 +1817,7 @@ static void ride_ratings_calculate_suspended_swinging_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_inverted_roller_coaster(Ride *ride) +static void ride_ratings_calculate_inverted_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -1658,9 +1826,9 @@ static void ride_ratings_calculate_inverted_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(3,60), RIDE_RATING(2,80), RIDE_RATING(3,20)); + ride_ratings_set(&ratings, RIDE_RATING(3, 60), RIDE_RATING(2, 80), RIDE_RATING(3, 20)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,42), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 42), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -1678,7 +1846,7 @@ static void ride_ratings_calculate_inverted_roller_coaster(Ride *ride) ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); if ((ride->inversions & 0x1F) == 0) - ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0,30), 2, 2, 2); + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 30), 2, 2, 2); ride_ratings_apply_excessive_lateral_g_penalty(&ratings, ride); ride_ratings_apply_intensity_penalty(&ratings); @@ -1693,7 +1861,7 @@ static void ride_ratings_calculate_inverted_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_junior_roller_coaster(Ride *ride) +static void ride_ratings_calculate_junior_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -1702,9 +1870,9 @@ static void ride_ratings_calculate_junior_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,40), RIDE_RATING(2,50), RIDE_RATING(1,80)); + ride_ratings_set(&ratings, RIDE_RATING(2, 40), RIDE_RATING(2, 50), RIDE_RATING(1, 80)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -1732,7 +1900,7 @@ static void ride_ratings_calculate_junior_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_miniature_railway(Ride *ride) +static void ride_ratings_calculate_miniature_railway(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -1741,7 +1909,7 @@ static void ride_ratings_calculate_miniature_railway(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,50), RIDE_RATING(0,00), RIDE_RATING(0,00)); + ride_ratings_set(&ratings, RIDE_RATING(2, 50), RIDE_RATING(0, 00), RIDE_RATING(0, 00)); ride_ratings_apply_length(&ratings, ride, 6000, 764); ride_ratings_apply_train_length(&ratings, ride, 140434); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); @@ -1768,7 +1936,7 @@ static void ride_ratings_calculate_miniature_railway(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_monorail(Ride *ride) +static void ride_ratings_calculate_monorail(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -1777,7 +1945,7 @@ static void ride_ratings_calculate_monorail(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,00), RIDE_RATING(0,00), RIDE_RATING(0,00)); + ride_ratings_set(&ratings, RIDE_RATING(2, 00), RIDE_RATING(0, 00), RIDE_RATING(0, 00)); ride_ratings_apply_length(&ratings, ride, 6000, 764); ride_ratings_apply_train_length(&ratings, ride, 93622); ride_ratings_apply_max_speed(&ratings, ride, 44281, 70849, 35424); @@ -1804,7 +1972,7 @@ static void ride_ratings_calculate_monorail(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_mini_suspended_coaster(Ride *ride) +static void ride_ratings_calculate_mini_suspended_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -1813,9 +1981,9 @@ static void ride_ratings_calculate_mini_suspended_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,80), RIDE_RATING(2,50), RIDE_RATING(2,70)); + ride_ratings_set(&ratings, RIDE_RATING(2, 80), RIDE_RATING(2, 50), RIDE_RATING(2, 70)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,45), RIDE_RATING(0,15)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 45), RIDE_RATING(0, 15)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -1828,7 +1996,7 @@ static void ride_ratings_calculate_mini_suspended_coaster(Ride *ride) ride_ratings_apply_scenery(&ratings, ride, 13943); ride_ratings_apply_highest_drop_height_penalty(&ratings, ride, 6, 2, 2, 2); ride_ratings_apply_max_speed_penalty(&ratings, ride, 0x80000, 2, 2, 2); - ride_ratings_apply_max_lateral_g_penalty(&ratings, ride, FIXED_2DP(1,30), 2, 2, 2); + ride_ratings_apply_max_lateral_g_penalty(&ratings, ride, FIXED_2DP(1, 30), 2, 2, 2); ride_ratings_apply_first_length_penalty(&ratings, ride, 0xC80000, 2, 2, 2); ride_ratings_apply_excessive_lateral_g_penalty(&ratings, ride); @@ -1844,7 +2012,7 @@ static void ride_ratings_calculate_mini_suspended_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_boat_hire(Ride *ride) +static void ride_ratings_calculate_boat_hire(Ride* ride) { ride->unreliability_factor = 7; set_unreliability_factor(ride); @@ -1854,11 +2022,12 @@ static void ride_ratings_calculate_boat_hire(Ride *ride) // ebx (excitement). This is assumed to be a bug and therefore fixed. rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,90), RIDE_RATING(0,80), RIDE_RATING(0,90)); + ride_ratings_set(&ratings, RIDE_RATING(1, 90), RIDE_RATING(0, 80), RIDE_RATING(0, 90)); // Most likely checking if the ride has does not have a circuit - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) { - ride_ratings_add(&ratings, RIDE_RATING(0,20), 0, 0); + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) + { + ride_ratings_add(&ratings, RIDE_RATING(0, 20), 0, 0); } ride_ratings_apply_proximity(&ratings, 11183); @@ -1876,7 +2045,7 @@ static void ride_ratings_calculate_boat_hire(Ride *ride) ride->inversions |= 0 << 5; } -static void ride_ratings_calculate_wooden_wild_mouse(Ride *ride) +static void ride_ratings_calculate_wooden_wild_mouse(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -1885,9 +2054,9 @@ static void ride_ratings_calculate_wooden_wild_mouse(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,90), RIDE_RATING(2,90), RIDE_RATING(2,10)); + ride_ratings_set(&ratings, RIDE_RATING(2, 90), RIDE_RATING(2, 90), RIDE_RATING(2, 10)); ride_ratings_apply_length(&ratings, ride, 6000, 873); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0, 8)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 8)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 364088, 655360); @@ -1900,8 +2069,8 @@ static void ride_ratings_calculate_wooden_wild_mouse(Ride *ride) ride_ratings_apply_scenery(&ratings, ride, 5577); ride_ratings_apply_highest_drop_height_penalty(&ratings, ride, 8, 2, 2, 2); ride_ratings_apply_max_speed_penalty(&ratings, ride, 0x70000, 2, 2, 2); - ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0,10), 2, 2, 2); - ride_ratings_apply_max_lateral_g_penalty(&ratings, ride, FIXED_2DP(1,50), 2, 2, 2); + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 10), 2, 2, 2); + ride_ratings_apply_max_lateral_g_penalty(&ratings, ride, FIXED_2DP(1, 50), 2, 2, 2); ride_ratings_apply_first_length_penalty(&ratings, ride, 0xAA0000, 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 3, 2, 2, 2); @@ -1918,7 +2087,7 @@ static void ride_ratings_calculate_wooden_wild_mouse(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_steeplechase(Ride *ride) +static void ride_ratings_calculate_steeplechase(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -1927,9 +2096,9 @@ static void ride_ratings_calculate_steeplechase(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,70), RIDE_RATING(2,40), RIDE_RATING(1,80)); + ride_ratings_set(&ratings, RIDE_RATING(2, 70), RIDE_RATING(2, 40), RIDE_RATING(1, 80)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,75), RIDE_RATING(0, 9)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 75), RIDE_RATING(0, 9)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -1942,7 +2111,7 @@ static void ride_ratings_calculate_steeplechase(Ride *ride) ride_ratings_apply_scenery(&ratings, ride, 9760); ride_ratings_apply_highest_drop_height_penalty(&ratings, ride, 4, 2, 2, 2); ride_ratings_apply_max_speed_penalty(&ratings, ride, 0x80000, 2, 2, 2); - ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0,50), 2, 2, 2); + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 50), 2, 2, 2); ride_ratings_apply_first_length_penalty(&ratings, ride, 0xF00000, 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); @@ -1959,7 +2128,7 @@ static void ride_ratings_calculate_steeplechase(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_car_ride(Ride *ride) +static void ride_ratings_calculate_car_ride(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -1968,9 +2137,9 @@ static void ride_ratings_calculate_car_ride(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,00), RIDE_RATING(0,50), RIDE_RATING(0,00)); + ride_ratings_set(&ratings, RIDE_RATING(2, 00), RIDE_RATING(0, 50), RIDE_RATING(0, 00)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,15), RIDE_RATING(0,00)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 15), RIDE_RATING(0, 00)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -1994,7 +2163,7 @@ static void ride_ratings_calculate_car_ride(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_launched_freefall(Ride *ride) +static void ride_ratings_calculate_launched_freefall(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2003,13 +2172,11 @@ static void ride_ratings_calculate_launched_freefall(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,70), RIDE_RATING(3,00), RIDE_RATING(3,50)); + ride_ratings_set(&ratings, RIDE_RATING(2, 70), RIDE_RATING(3, 00), RIDE_RATING(3, 50)); - if (ride->mode == RIDE_MODE_DOWNWARD_LAUNCH) { - ride_ratings_add(&ratings, - RIDE_RATING(0,30), - RIDE_RATING(0,65), - RIDE_RATING(0,45)); + if (ride->mode == RIDE_MODE_DOWNWARD_LAUNCH) + { + ride_ratings_add(&ratings, RIDE_RATING(0, 30), RIDE_RATING(0, 65), RIDE_RATING(0, 45)); } int32_t excitementModifier = ((ride_get_total_length(ride) >> 16) * 32768) >> 16; @@ -2019,9 +2186,12 @@ static void ride_ratings_calculate_launched_freefall(Ride *ride) ride_ratings_apply_operation_option(&ratings, ride, 0, 1355917, 451972); #else // Only apply "launch speed" effects when the setting can be modified - if (ride->mode == RIDE_MODE_UPWARD_LAUNCH) { + if (ride->mode == RIDE_MODE_UPWARD_LAUNCH) + { ride_ratings_apply_operation_option(&ratings, ride, 0, 1355917, 451972); - } else { + } + else + { // Fix #3282: When the ride mode is in downward launch mode, the intensity and // nausea were fixed regardless of how high the ride is. The following // calculation is based on roto-drop which is a similar mechanic. @@ -2045,7 +2215,7 @@ static void ride_ratings_calculate_launched_freefall(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_bobsleigh_coaster(Ride *ride) +static void ride_ratings_calculate_bobsleigh_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2054,9 +2224,9 @@ static void ride_ratings_calculate_bobsleigh_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,80), RIDE_RATING(3,20), RIDE_RATING(2,50)); + ride_ratings_set(&ratings, RIDE_RATING(2, 80), RIDE_RATING(3, 20), RIDE_RATING(2, 50)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,20), RIDE_RATING(0,00)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 20), RIDE_RATING(0, 00)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -2068,7 +2238,7 @@ static void ride_ratings_calculate_bobsleigh_coaster(Ride *ride) ride_ratings_apply_proximity(&ratings, 20130); ride_ratings_apply_scenery(&ratings, ride, 5577); ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xC0000, 2, 2, 2); - ride_ratings_apply_max_lateral_g_penalty(&ratings, ride, FIXED_2DP(1,20), 2, 2, 2); + ride_ratings_apply_max_lateral_g_penalty(&ratings, ride, FIXED_2DP(1, 20), 2, 2, 2); ride_ratings_apply_first_length_penalty(&ratings, ride, 0x1720000, 2, 2, 2); ride_ratings_apply_excessive_lateral_g_penalty(&ratings, ride); @@ -2084,7 +2254,7 @@ static void ride_ratings_calculate_bobsleigh_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_observation_tower(Ride *ride) +static void ride_ratings_calculate_observation_tower(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2093,11 +2263,9 @@ static void ride_ratings_calculate_observation_tower(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,50), RIDE_RATING(0,00), RIDE_RATING(0,10)); - ride_ratings_add(&ratings, - ((ride_get_total_length(ride) >> 16) * 45875) >> 16, - 0, - ((ride_get_total_length(ride) >> 16) * 26214) >> 16); + ride_ratings_set(&ratings, RIDE_RATING(1, 50), RIDE_RATING(0, 00), RIDE_RATING(0, 10)); + ride_ratings_add( + &ratings, ((ride_get_total_length(ride) >> 16) * 45875) >> 16, 0, ((ride_get_total_length(ride) >> 16) * 26214) >> 16); ride_ratings_apply_proximity(&ratings, 20130); ride_ratings_apply_scenery(&ratings, ride, 83662); @@ -2117,7 +2285,7 @@ static void ride_ratings_calculate_observation_tower(Ride *ride) ride->excitement /= 4; } -static void ride_ratings_calculate_looping_roller_coaster(Ride *ride) +static void ride_ratings_calculate_looping_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2126,9 +2294,9 @@ static void ride_ratings_calculate_looping_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(3,00), RIDE_RATING(0,50), RIDE_RATING(0,20)); + ride_ratings_set(&ratings, RIDE_RATING(3, 00), RIDE_RATING(0, 50), RIDE_RATING(0, 20)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -2145,7 +2313,8 @@ static void ride_ratings_calculate_looping_roller_coaster(Ride *ride) ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); - if ((ride->inversions & 0x1F) == 0) { + if ((ride->inversions & 0x1F) == 0) + { ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 10), 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); } @@ -2163,7 +2332,7 @@ static void ride_ratings_calculate_looping_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_dinghy_slide(Ride *ride) +static void ride_ratings_calculate_dinghy_slide(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2172,9 +2341,9 @@ static void ride_ratings_calculate_dinghy_slide(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,70), RIDE_RATING(2,00), RIDE_RATING(1,50)); + ride_ratings_set(&ratings, RIDE_RATING(2, 70), RIDE_RATING(2, 00), RIDE_RATING(1, 50)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,50), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 50), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -2202,7 +2371,7 @@ static void ride_ratings_calculate_dinghy_slide(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_mine_train_coaster(Ride *ride) +static void ride_ratings_calculate_mine_train_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2211,9 +2380,9 @@ static void ride_ratings_calculate_mine_train_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,90), RIDE_RATING(2,30), RIDE_RATING(2,10)); + ride_ratings_set(&ratings, RIDE_RATING(2, 90), RIDE_RATING(2, 30), RIDE_RATING(2, 10)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -2226,7 +2395,7 @@ static void ride_ratings_calculate_mine_train_coaster(Ride *ride) ride_ratings_apply_scenery(&ratings, ride, 16732); ride_ratings_apply_highest_drop_height_penalty(&ratings, ride, 8, 2, 2, 2); ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); - ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0,10), 2, 2, 2); + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 10), 2, 2, 2); ride_ratings_apply_first_length_penalty(&ratings, ride, 0x1720000, 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); @@ -2243,7 +2412,7 @@ static void ride_ratings_calculate_mine_train_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_chairlift(Ride *ride) +static void ride_ratings_calculate_chairlift(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2252,7 +2421,7 @@ static void ride_ratings_calculate_chairlift(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,60), RIDE_RATING(0,40), RIDE_RATING(0,50)); + ride_ratings_set(&ratings, RIDE_RATING(1, 60), RIDE_RATING(0, 40), RIDE_RATING(0, 50)); ride_ratings_apply_length(&ratings, ride, 6000, 764); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); @@ -2267,7 +2436,8 @@ static void ride_ratings_calculate_chairlift(Ride *ride) ride_ratings_apply_intensity_penalty(&ratings); ride_ratings_apply_adjustments(ride, &ratings); - if (ride->num_stations <= 1) { + if (ride->num_stations <= 1) + { ratings.excitement = 0; ratings.intensity /= 2; } @@ -2285,7 +2455,7 @@ static void ride_ratings_calculate_chairlift(Ride *ride) ride->inversions |= edx << 5; } -static void ride_ratings_calculate_corkscrew_roller_coaster(Ride *ride) +static void ride_ratings_calculate_corkscrew_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2294,9 +2464,9 @@ static void ride_ratings_calculate_corkscrew_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(3,00), RIDE_RATING(0,50), RIDE_RATING(0,20)); + ride_ratings_set(&ratings, RIDE_RATING(3, 00), RIDE_RATING(0, 50), RIDE_RATING(0, 20)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -2313,7 +2483,8 @@ static void ride_ratings_calculate_corkscrew_roller_coaster(Ride *ride) ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); - if ((ride->inversions & 0x1F) == 0) { + if ((ride->inversions & 0x1F) == 0) + { ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 40), 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); } @@ -2331,7 +2502,7 @@ static void ride_ratings_calculate_corkscrew_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_maze(Ride *ride) +static void ride_ratings_calculate_maze(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -2339,13 +2510,10 @@ static void ride_ratings_calculate_maze(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,30), RIDE_RATING(0,50), RIDE_RATING(0,00)); + ride_ratings_set(&ratings, RIDE_RATING(1, 30), RIDE_RATING(0, 50), RIDE_RATING(0, 00)); int32_t size = std::min(ride->maze_tiles, 100); - ride_ratings_add(&ratings, - size, - size * 2, - 0); + ride_ratings_add(&ratings, size, size * 2, 0); ride_ratings_apply_scenery(&ratings, ride, 22310); @@ -2361,7 +2529,7 @@ static void ride_ratings_calculate_maze(Ride *ride) ride->inversions |= 0 << 5; } -static void ride_ratings_calculate_spiral_slide(Ride *ride) +static void ride_ratings_calculate_spiral_slide(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -2369,14 +2537,12 @@ static void ride_ratings_calculate_spiral_slide(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,50), RIDE_RATING(1,40), RIDE_RATING(0,90)); + ride_ratings_set(&ratings, RIDE_RATING(1, 50), RIDE_RATING(1, 40), RIDE_RATING(0, 90)); // Unlimited slides boost - if (ride->mode == RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION) { - ride_ratings_add(&ratings, - RIDE_RATING(0,40), - RIDE_RATING(0,20), - RIDE_RATING(0,25)); + if (ride->mode == RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION) + { + ride_ratings_add(&ratings, RIDE_RATING(0, 40), RIDE_RATING(0, 20), RIDE_RATING(0, 25)); } ride_ratings_apply_scenery(&ratings, ride, 25098); @@ -2393,7 +2559,7 @@ static void ride_ratings_calculate_spiral_slide(Ride *ride) ride->inversions |= 2 << 5; } -static void ride_ratings_calculate_go_karts(Ride *ride) +static void ride_ratings_calculate_go_karts(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2402,20 +2568,15 @@ static void ride_ratings_calculate_go_karts(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,42), RIDE_RATING(1,73), RIDE_RATING(0,40)); + ride_ratings_set(&ratings, RIDE_RATING(1, 42), RIDE_RATING(1, 73), RIDE_RATING(0, 40)); ride_ratings_apply_length(&ratings, ride, 700, 32768); - if (ride->mode == RIDE_MODE_RACE && ride->num_vehicles >= 4) { - ride_ratings_add(&ratings, - RIDE_RATING(1,40), - RIDE_RATING(0,50), - 0); + if (ride->mode == RIDE_MODE_RACE && ride->num_vehicles >= 4) + { + ride_ratings_add(&ratings, RIDE_RATING(1, 40), RIDE_RATING(0, 50), 0); int32_t lapsFactor = (ride->num_laps - 1) * 30; - ride_ratings_add(&ratings, - lapsFactor, - lapsFactor / 2, - 0); + ride_ratings_add(&ratings, lapsFactor, lapsFactor / 2, 0); } ride_ratings_apply_turns(&ratings, ride, 4458, 3476, 5718); @@ -2441,7 +2602,7 @@ static void ride_ratings_calculate_go_karts(Ride *ride) ride->excitement /= 2; } -static void ride_ratings_calculate_log_flume(Ride *ride) +static void ride_ratings_calculate_log_flume(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2450,9 +2611,9 @@ static void ride_ratings_calculate_log_flume(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,50), RIDE_RATING(0,55), RIDE_RATING(0,30)); + ride_ratings_set(&ratings, RIDE_RATING(1, 50), RIDE_RATING(0, 55), RIDE_RATING(0, 30)); ride_ratings_apply_length(&ratings, ride, 2000, 7208); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_max_speed(&ratings, ride, 531372, 655360, 301111); ride_ratings_apply_duration(&ratings, ride, 300, 13107); ride_ratings_apply_turns(&ratings, ride, 22291, 20860, 4574); @@ -2474,7 +2635,7 @@ static void ride_ratings_calculate_log_flume(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_river_rapids(Ride *ride) +static void ride_ratings_calculate_river_rapids(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2483,9 +2644,9 @@ static void ride_ratings_calculate_river_rapids(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,20), RIDE_RATING(0,70), RIDE_RATING(0,50)); + ride_ratings_set(&ratings, RIDE_RATING(1, 20), RIDE_RATING(0, 70), RIDE_RATING(0, 50)); ride_ratings_apply_length(&ratings, ride, 2000, 6225); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,30), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 30), RIDE_RATING(0, 05)); ride_ratings_apply_max_speed(&ratings, ride, 115130, 159411, 106274); ride_ratings_apply_duration(&ratings, ride, 500, 13107); ride_ratings_apply_turns(&ratings, ride, 29721, 22598, 5718); @@ -2508,7 +2669,7 @@ static void ride_ratings_calculate_river_rapids(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_dodgems(Ride *ride) +static void ride_ratings_calculate_dodgems(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -2516,25 +2677,18 @@ static void ride_ratings_calculate_dodgems(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,30), RIDE_RATING(0,50), RIDE_RATING(0,35)); + ride_ratings_set(&ratings, RIDE_RATING(1, 30), RIDE_RATING(0, 50), RIDE_RATING(0, 35)); - if (ride->num_vehicles >= 4) { - ride_ratings_add(&ratings, - RIDE_RATING(0,40), - 0, - 0); + if (ride->num_vehicles >= 4) + { + ride_ratings_add(&ratings, RIDE_RATING(0, 40), 0, 0); } - ride_ratings_add(&ratings, - ride->operation_option, - ride->operation_option / 2, - 0); + ride_ratings_add(&ratings, ride->operation_option, ride->operation_option / 2, 0); - if (ride->num_vehicles >= 4) { - ride_ratings_add(&ratings, - RIDE_RATING(0,40), - 0, - 0); + if (ride->num_vehicles >= 4) + { + ride_ratings_add(&ratings, RIDE_RATING(0, 40), 0, 0); } ride_ratings_apply_scenery(&ratings, ride, 5577); @@ -2551,7 +2705,7 @@ static void ride_ratings_calculate_dodgems(Ride *ride) ride->inversions |= 7 << 5; } -static void ride_ratings_calculate_pirate_ship(Ride *ride) +static void ride_ratings_calculate_pirate_ship(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -2559,12 +2713,9 @@ static void ride_ratings_calculate_pirate_ship(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,50), RIDE_RATING(1,90), RIDE_RATING(1,41)); + ride_ratings_set(&ratings, RIDE_RATING(1, 50), RIDE_RATING(1, 90), RIDE_RATING(1, 41)); - ride_ratings_add(&ratings, - ride->operation_option * 5, - ride->operation_option * 5, - ride->operation_option * 10); + ride_ratings_add(&ratings, ride->operation_option * 5, ride->operation_option * 5, ride->operation_option * 10); ride_ratings_apply_scenery(&ratings, ride, 16732); @@ -2580,7 +2731,7 @@ static void ride_ratings_calculate_pirate_ship(Ride *ride) ride->inversions |= 0 << 5; } -static void ride_ratings_calculate_inverter_ship(Ride *ride) +static void ride_ratings_calculate_inverter_ship(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -2588,12 +2739,9 @@ static void ride_ratings_calculate_inverter_ship(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,50), RIDE_RATING(2,70), RIDE_RATING(2,74)); + ride_ratings_set(&ratings, RIDE_RATING(2, 50), RIDE_RATING(2, 70), RIDE_RATING(2, 74)); - ride_ratings_add(&ratings, - ride->operation_option * 11, - ride->operation_option * 22, - ride->operation_option * 22); + ride_ratings_add(&ratings, ride->operation_option * 11, ride->operation_option * 22, ride->operation_option * 22); ride_ratings_apply_scenery(&ratings, ride, 11155); @@ -2609,25 +2757,25 @@ static void ride_ratings_calculate_inverter_ship(Ride *ride) ride->inversions |= 0 << 5; } -static void ride_ratings_calculate_food_stall(Ride *ride) +static void ride_ratings_calculate_food_stall(Ride* ride) { ride->upkeep_cost = ride_compute_upkeep(ride); ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_INCOME; } -static void ride_ratings_calculate_drink_stall(Ride *ride) +static void ride_ratings_calculate_drink_stall(Ride* ride) { ride->upkeep_cost = ride_compute_upkeep(ride); ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_INCOME; } -static void ride_ratings_calculate_shop(Ride *ride) +static void ride_ratings_calculate_shop(Ride* ride) { ride->upkeep_cost = ride_compute_upkeep(ride); ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_INCOME; } -static void ride_ratings_calculate_merry_go_round(Ride *ride) +static void ride_ratings_calculate_merry_go_round(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -2635,7 +2783,7 @@ static void ride_ratings_calculate_merry_go_round(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(0,60), RIDE_RATING(0,15), RIDE_RATING(0,30)); + ride_ratings_set(&ratings, RIDE_RATING(0, 60), RIDE_RATING(0, 15), RIDE_RATING(0, 30)); ride_ratings_apply_rotations(&ratings, ride, 5, 5, 5); ride_ratings_apply_scenery(&ratings, ride, 19521); ride_ratings_apply_intensity_penalty(&ratings); @@ -2650,19 +2798,19 @@ static void ride_ratings_calculate_merry_go_round(Ride *ride) ride->inversions |= 7 << 5; } -static void ride_ratings_calculate_information_kiosk(Ride *ride) +static void ride_ratings_calculate_information_kiosk(Ride* ride) { ride->upkeep_cost = ride_compute_upkeep(ride); ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_INCOME; } -static void ride_ratings_calculate_toilets(Ride *ride) +static void ride_ratings_calculate_toilets(Ride* ride) { ride->upkeep_cost = ride_compute_upkeep(ride); ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_INCOME; } -static void ride_ratings_calculate_ferris_wheel(Ride *ride) +static void ride_ratings_calculate_ferris_wheel(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -2670,7 +2818,7 @@ static void ride_ratings_calculate_ferris_wheel(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(0,60), RIDE_RATING(0,25), RIDE_RATING(0,30)); + ride_ratings_set(&ratings, RIDE_RATING(0, 60), RIDE_RATING(0, 25), RIDE_RATING(0, 30)); ride_ratings_apply_rotations(&ratings, ride, 25, 25, 25); ride_ratings_apply_scenery(&ratings, ride, 41831); ride_ratings_apply_intensity_penalty(&ratings); @@ -2685,7 +2833,7 @@ static void ride_ratings_calculate_ferris_wheel(Ride *ride) ride->inversions |= 0 << 5; } -static void ride_ratings_calculate_motion_simulator(Ride *ride) +static void ride_ratings_calculate_motion_simulator(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -2694,14 +2842,17 @@ static void ride_ratings_calculate_motion_simulator(Ride *ride) // Base ratings rating_tuple ratings; - if (ride->mode == RIDE_MODE_FILM_THRILL_RIDERS) { - ratings.excitement = RIDE_RATING(3,25); - ratings.intensity = RIDE_RATING(4,10); - ratings.nausea = RIDE_RATING(3,30); - } else { - ratings.excitement = RIDE_RATING(2,90); - ratings.intensity = RIDE_RATING(3,50); - ratings.nausea = RIDE_RATING(3,00); + if (ride->mode == RIDE_MODE_FILM_THRILL_RIDERS) + { + ratings.excitement = RIDE_RATING(3, 25); + ratings.intensity = RIDE_RATING(4, 10); + ratings.nausea = RIDE_RATING(3, 30); + } + else + { + ratings.excitement = RIDE_RATING(2, 90); + ratings.intensity = RIDE_RATING(3, 50); + ratings.nausea = RIDE_RATING(3, 00); } ride_ratings_apply_intensity_penalty(&ratings); @@ -2716,7 +2867,7 @@ static void ride_ratings_calculate_motion_simulator(Ride *ride) ride->inversions |= 7 << 5; } -static void ride_ratings_calculate_3d_cinema(Ride *ride) +static void ride_ratings_calculate_3d_cinema(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -2725,23 +2876,24 @@ static void ride_ratings_calculate_3d_cinema(Ride *ride) // Base ratings rating_tuple ratings; - switch (ride->mode) { - default: - case RIDE_MODE_3D_FILM_MOUSE_TAILS: - ratings.excitement = RIDE_RATING(3,50); - ratings.intensity = RIDE_RATING(2,40); - ratings.nausea = RIDE_RATING(1,40); - break; - case RIDE_MODE_3D_FILM_STORM_CHASERS: - ratings.excitement = RIDE_RATING(4,00); - ratings.intensity = RIDE_RATING(2,65); - ratings.nausea = RIDE_RATING(1,55); - break; - case RIDE_MODE_3D_FILM_SPACE_RAIDERS: - ratings.excitement = RIDE_RATING(4,20); - ratings.intensity = RIDE_RATING(2,60); - ratings.nausea = RIDE_RATING(1,48); - break; + switch (ride->mode) + { + default: + case RIDE_MODE_3D_FILM_MOUSE_TAILS: + ratings.excitement = RIDE_RATING(3, 50); + ratings.intensity = RIDE_RATING(2, 40); + ratings.nausea = RIDE_RATING(1, 40); + break; + case RIDE_MODE_3D_FILM_STORM_CHASERS: + ratings.excitement = RIDE_RATING(4, 00); + ratings.intensity = RIDE_RATING(2, 65); + ratings.nausea = RIDE_RATING(1, 55); + break; + case RIDE_MODE_3D_FILM_SPACE_RAIDERS: + ratings.excitement = RIDE_RATING(4, 20); + ratings.intensity = RIDE_RATING(2, 60); + ratings.nausea = RIDE_RATING(1, 48); + break; } ride_ratings_apply_intensity_penalty(&ratings); @@ -2756,7 +2908,7 @@ static void ride_ratings_calculate_3d_cinema(Ride *ride) ride->inversions |= 7 << 5; } -static void ride_ratings_calculate_top_spin(Ride *ride) +static void ride_ratings_calculate_top_spin(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -2765,23 +2917,24 @@ static void ride_ratings_calculate_top_spin(Ride *ride) // Base ratings rating_tuple ratings; - switch (ride->mode) { - default: - case RIDE_MODE_BEGINNERS: - ratings.excitement = RIDE_RATING(2,00); - ratings.intensity = RIDE_RATING(4,80); - ratings.nausea = RIDE_RATING(5,74); - break; - case RIDE_MODE_INTENSE: - ratings.excitement = RIDE_RATING(3,00); - ratings.intensity = RIDE_RATING(5,75); - ratings.nausea = RIDE_RATING(6,64); - break; - case RIDE_MODE_BERSERK: - ratings.excitement = RIDE_RATING(3,20); - ratings.intensity = RIDE_RATING(6,80); - ratings.nausea = RIDE_RATING(7,94); - break; + switch (ride->mode) + { + default: + case RIDE_MODE_BEGINNERS: + ratings.excitement = RIDE_RATING(2, 00); + ratings.intensity = RIDE_RATING(4, 80); + ratings.nausea = RIDE_RATING(5, 74); + break; + case RIDE_MODE_INTENSE: + ratings.excitement = RIDE_RATING(3, 00); + ratings.intensity = RIDE_RATING(5, 75); + ratings.nausea = RIDE_RATING(6, 64); + break; + case RIDE_MODE_BERSERK: + ratings.excitement = RIDE_RATING(3, 20); + ratings.intensity = RIDE_RATING(6, 80); + ratings.nausea = RIDE_RATING(7, 94); + break; } ride_ratings_apply_scenery(&ratings, ride, 11155); @@ -2798,7 +2951,7 @@ static void ride_ratings_calculate_top_spin(Ride *ride) ride->inversions |= 0 << 5; } -static void ride_ratings_calculate_space_rings(Ride *ride) +static void ride_ratings_calculate_space_rings(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -2806,7 +2959,7 @@ static void ride_ratings_calculate_space_rings(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,50), RIDE_RATING(2,10), RIDE_RATING(6,50)); + ride_ratings_set(&ratings, RIDE_RATING(1, 50), RIDE_RATING(2, 10), RIDE_RATING(6, 50)); ride_ratings_apply_scenery(&ratings, ride, 25098); ride_ratings_apply_intensity_penalty(&ratings); @@ -2821,7 +2974,7 @@ static void ride_ratings_calculate_space_rings(Ride *ride) ride->inversions |= 0 << 5; } -static void ride_ratings_calculate_reverse_freefall_coaster(Ride *ride) +static void ride_ratings_calculate_reverse_freefall_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2830,9 +2983,9 @@ static void ride_ratings_calculate_reverse_freefall_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,00), RIDE_RATING(3,20), RIDE_RATING(2,80)); + ride_ratings_set(&ratings, RIDE_RATING(2, 00), RIDE_RATING(3, 20), RIDE_RATING(2, 80)); ride_ratings_apply_length(&ratings, ride, 6000, 327); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,60), RIDE_RATING(0,15)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 60), RIDE_RATING(0, 15)); ride_ratings_apply_max_speed(&ratings, ride, 436906, 436906, 320398); ride_ratings_apply_gforces(&ratings, ride, 24576, 41704, 59578); ride_ratings_apply_sheltered_ratings(&ratings, ride, 12850, 28398, 11702); @@ -2852,7 +3005,7 @@ static void ride_ratings_calculate_reverse_freefall_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_lift(Ride *ride) +static void ride_ratings_calculate_lift(Ride* ride) { int32_t totalLength; @@ -2863,13 +3016,10 @@ static void ride_ratings_calculate_lift(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,11), RIDE_RATING(0,35), RIDE_RATING(0,30)); + ride_ratings_set(&ratings, RIDE_RATING(1, 11), RIDE_RATING(0, 35), RIDE_RATING(0, 30)); totalLength = ride_get_total_length(ride) >> 16; - ride_ratings_add(&ratings, - (totalLength * 45875) >> 16, - 0, - (totalLength * 26214) >> 16); + ride_ratings_add(&ratings, (totalLength * 45875) >> 16, 0, (totalLength * 26214) >> 16); ride_ratings_apply_proximity(&ratings, 11183); ride_ratings_apply_scenery(&ratings, ride, 83662); @@ -2889,7 +3039,7 @@ static void ride_ratings_calculate_lift(Ride *ride) ride->excitement /= 4; } -static void ride_ratings_calculate_vertical_drop_roller_coaster(Ride *ride) +static void ride_ratings_calculate_vertical_drop_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2898,9 +3048,9 @@ static void ride_ratings_calculate_vertical_drop_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(3,20), RIDE_RATING(0,80), RIDE_RATING(0,30)); + ride_ratings_set(&ratings, RIDE_RATING(3, 20), RIDE_RATING(0, 80), RIDE_RATING(0, 30)); ride_ratings_apply_length(&ratings, ride, 4000, 1146); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_max_speed(&ratings, ride, 97418, 141699, 70849); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); ride_ratings_apply_duration(&ratings, ride, 150, 26214); @@ -2912,7 +3062,7 @@ static void ride_ratings_calculate_vertical_drop_roller_coaster(Ride *ride) ride_ratings_apply_scenery(&ratings, ride, 6693); ride_ratings_apply_highest_drop_height_penalty(&ratings, ride, 20, 2, 2, 2); ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); - ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0,10), 2, 2, 2); + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 10), 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 1, 2, 2, 2); ride_ratings_apply_excessive_lateral_g_penalty(&ratings, ride); @@ -2928,13 +3078,13 @@ static void ride_ratings_calculate_vertical_drop_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_cash_machine(Ride *ride) +static void ride_ratings_calculate_cash_machine(Ride* ride) { ride->upkeep_cost = ride_compute_upkeep(ride); ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_INCOME; } -static void ride_ratings_calculate_twist(Ride *ride) +static void ride_ratings_calculate_twist(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -2942,7 +3092,7 @@ static void ride_ratings_calculate_twist(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,13), RIDE_RATING(0,97), RIDE_RATING(1,90)); + ride_ratings_set(&ratings, RIDE_RATING(1, 13), RIDE_RATING(0, 97), RIDE_RATING(1, 90)); ride_ratings_apply_rotations(&ratings, ride, 20, 20, 20); ride_ratings_apply_scenery(&ratings, ride, 13943); ride_ratings_apply_intensity_penalty(&ratings); @@ -2957,18 +3107,16 @@ static void ride_ratings_calculate_twist(Ride *ride) ride->inversions |= 0 << 5; } -static void ride_ratings_calculate_haunted_house(Ride *ride) +static void ride_ratings_calculate_haunted_house(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; ride->unreliability_factor = 8; set_unreliability_factor(ride); - rating_tuple ratings = { - /* .excitement = */ RIDE_RATING(3,41), - /* .intensity = */ RIDE_RATING(1,53), - /* .nausea = */ RIDE_RATING(0,10) - }; + rating_tuple ratings = { /* .excitement = */ RIDE_RATING(3, 41), + /* .intensity = */ RIDE_RATING(1, 53), + /* .nausea = */ RIDE_RATING(0, 10) }; ride_ratings_apply_intensity_penalty(&ratings); ride_ratings_apply_adjustments(ride, &ratings); @@ -2982,7 +3130,7 @@ static void ride_ratings_calculate_haunted_house(Ride *ride) ride->inversions |= 0xE0; } -static void ride_ratings_calculate_flying_roller_coaster(Ride *ride) +static void ride_ratings_calculate_flying_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -2991,9 +3139,9 @@ static void ride_ratings_calculate_flying_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(4,35), RIDE_RATING(1,85), RIDE_RATING(4,33)); + ride_ratings_set(&ratings, RIDE_RATING(4, 35), RIDE_RATING(1, 85), RIDE_RATING(4, 33)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -3011,7 +3159,7 @@ static void ride_ratings_calculate_flying_roller_coaster(Ride *ride) ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 1, 1); if ((ride->inversions & 0x1F) == 0) - ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0,40), 2, 1, 1); + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 40), 2, 1, 1); ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 1, 1); @@ -3028,7 +3176,7 @@ static void ride_ratings_calculate_flying_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_virginia_reel(Ride *ride) +static void ride_ratings_calculate_virginia_reel(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3037,9 +3185,9 @@ static void ride_ratings_calculate_virginia_reel(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,10), RIDE_RATING(1,90), RIDE_RATING(3,70)); + ride_ratings_set(&ratings, RIDE_RATING(2, 10), RIDE_RATING(1, 90), RIDE_RATING(3, 70)); ride_ratings_apply_length(&ratings, ride, 6000, 873); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 364088, 655360); @@ -3066,7 +3214,7 @@ static void ride_ratings_calculate_virginia_reel(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_splash_boats(Ride *ride) +static void ride_ratings_calculate_splash_boats(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3075,9 +3223,9 @@ static void ride_ratings_calculate_splash_boats(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,46), RIDE_RATING(0,35), RIDE_RATING(0,30)); + ride_ratings_set(&ratings, RIDE_RATING(1, 46), RIDE_RATING(0, 35), RIDE_RATING(0, 30)); ride_ratings_apply_length(&ratings, ride, 2000, 7208); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_max_speed(&ratings, ride, 797059, 655360, 301111); ride_ratings_apply_duration(&ratings, ride, 500, 13107); ride_ratings_apply_turns(&ratings, ride, 22291, 20860, 4574); @@ -3099,7 +3247,7 @@ static void ride_ratings_calculate_splash_boats(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_mini_helicopters(Ride *ride) +static void ride_ratings_calculate_mini_helicopters(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3108,9 +3256,9 @@ static void ride_ratings_calculate_mini_helicopters(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,60), RIDE_RATING(0,40), RIDE_RATING(0,00)); + ride_ratings_set(&ratings, RIDE_RATING(1, 60), RIDE_RATING(0, 40), RIDE_RATING(0, 00)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,15), RIDE_RATING(0,00)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 15), RIDE_RATING(0, 00)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -3134,7 +3282,7 @@ static void ride_ratings_calculate_mini_helicopters(Ride *ride) ride->inversions |= 6 << 5; } -static void ride_ratings_calculate_lay_down_roller_coaster(Ride *ride) +static void ride_ratings_calculate_lay_down_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3143,9 +3291,9 @@ static void ride_ratings_calculate_lay_down_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(3,85), RIDE_RATING(1,15), RIDE_RATING(2,75)); + ride_ratings_set(&ratings, RIDE_RATING(3, 85), RIDE_RATING(1, 15), RIDE_RATING(2, 75)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -3157,7 +3305,8 @@ static void ride_ratings_calculate_lay_down_roller_coaster(Ride *ride) ride_ratings_apply_proximity(&ratings, 20130); ride_ratings_apply_scenery(&ratings, ride, 6693); - if ((ride->inversions & 0x1F) == 0) { + if ((ride->inversions & 0x1F) == 0) + { ratings.excitement /= 4; ratings.intensity /= 2; ratings.nausea /= 2; @@ -3165,7 +3314,8 @@ static void ride_ratings_calculate_lay_down_roller_coaster(Ride *ride) ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); - if ((ride->inversions & 0x1F) == 0) { + if ((ride->inversions & 0x1F) == 0) + { ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 40), 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); } @@ -3183,7 +3333,7 @@ static void ride_ratings_calculate_lay_down_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_suspended_monorail(Ride *ride) +static void ride_ratings_calculate_suspended_monorail(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3192,7 +3342,7 @@ static void ride_ratings_calculate_suspended_monorail(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,15), RIDE_RATING(0,23), RIDE_RATING(0, 8)); + ride_ratings_set(&ratings, RIDE_RATING(2, 15), RIDE_RATING(0, 23), RIDE_RATING(0, 8)); ride_ratings_apply_length(&ratings, ride, 6000, 764); ride_ratings_apply_train_length(&ratings, ride, 93622); ride_ratings_apply_max_speed(&ratings, ride, 44281, 70849, 35424); @@ -3219,7 +3369,7 @@ static void ride_ratings_calculate_suspended_monorail(Ride *ride) ride->inversions |= edx << 5; } -static void ride_ratings_calculate_reverser_roller_coaster(Ride *ride) +static void ride_ratings_calculate_reverser_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3228,19 +3378,16 @@ static void ride_ratings_calculate_reverser_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,40), RIDE_RATING(1,80), RIDE_RATING(1,70)); + ride_ratings_set(&ratings, RIDE_RATING(2, 40), RIDE_RATING(1, 80), RIDE_RATING(1, 70)); ride_ratings_apply_length(&ratings, ride, 6000, 873); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 364088, 655360); int32_t numReversers = std::min(gRideRatingsCalcData.num_reversers, 6); - ride_rating reverserRating = numReversers * RIDE_RATING(0,20); - ride_ratings_add(&ratings, - reverserRating, - reverserRating, - reverserRating); + ride_rating reverserRating = numReversers * RIDE_RATING(0, 20); + ride_ratings_add(&ratings, reverserRating, reverserRating, reverserRating); ride_ratings_apply_duration(&ratings, ride, 150, 26214); ride_ratings_apply_gforces(&ratings, ride, 28672, 23831, 49648); @@ -3250,7 +3397,8 @@ static void ride_ratings_calculate_reverser_roller_coaster(Ride *ride) ride_ratings_apply_proximity(&ratings, 22367); ride_ratings_apply_scenery(&ratings, ride, 11155); - if (gRideRatingsCalcData.num_reversers < 1) { + if (gRideRatingsCalcData.num_reversers < 1) + { ratings.excitement /= 8; } @@ -3270,7 +3418,7 @@ static void ride_ratings_calculate_reverser_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_heartline_twister_coaster(Ride *ride) +static void ride_ratings_calculate_heartline_twister_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3279,9 +3427,9 @@ static void ride_ratings_calculate_heartline_twister_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,40), RIDE_RATING(1,70), RIDE_RATING(1,65)); + ride_ratings_set(&ratings, RIDE_RATING(1, 40), RIDE_RATING(1, 70), RIDE_RATING(1, 65)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,20), RIDE_RATING(0,04)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 20), RIDE_RATING(0, 04)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 97418, 123987, 70849); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -3311,7 +3459,7 @@ static void ride_ratings_calculate_heartline_twister_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_mini_golf(Ride *ride) +static void ride_ratings_calculate_mini_golf(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3320,7 +3468,7 @@ static void ride_ratings_calculate_mini_golf(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,50), RIDE_RATING(0,90), RIDE_RATING(0,00)); + ride_ratings_set(&ratings, RIDE_RATING(1, 50), RIDE_RATING(0, 90), RIDE_RATING(0, 00)); ride_ratings_apply_length(&ratings, ride, 6000, 873); ride_ratings_apply_turns(&ratings, ride, 14860, 0, 0); ride_ratings_apply_sheltered_ratings(&ratings, ride, 5140, 6553, 4681); @@ -3328,13 +3476,11 @@ static void ride_ratings_calculate_mini_golf(Ride *ride) ride_ratings_apply_scenery(&ratings, ride, 27887); // Apply golf holes factor - ride_ratings_add(&ratings, - (ride->holes & 0x1F) * 5, - 0, - 0); + ride_ratings_add(&ratings, (ride->holes & 0x1F) * 5, 0, 0); // Apply no golf holes penalty - if ((ride->inversions & 0x1F) == 0) { + if ((ride->inversions & 0x1F) == 0) + { ratings.excitement /= 8; ratings.intensity /= 2; ratings.nausea /= 2; @@ -3352,24 +3498,22 @@ static void ride_ratings_calculate_mini_golf(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_first_aid(Ride *ride) +static void ride_ratings_calculate_first_aid(Ride* ride) { ride->upkeep_cost = ride_compute_upkeep(ride); ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_INCOME; } -static void ride_ratings_calculate_circus_show(Ride *ride) +static void ride_ratings_calculate_circus_show(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; ride->unreliability_factor = 9; set_unreliability_factor(ride); - rating_tuple ratings = { - /* .excitement = */ RIDE_RATING(2,10), - /* .intensity = */ RIDE_RATING(0,30), - /* .nausea = */ RIDE_RATING(0,0) - }; + rating_tuple ratings = { /* .excitement = */ RIDE_RATING(2, 10), + /* .intensity = */ RIDE_RATING(0, 30), + /* .nausea = */ RIDE_RATING(0, 0) }; ride_ratings_apply_intensity_penalty(&ratings); ride_ratings_apply_adjustments(ride, &ratings); @@ -3383,7 +3527,7 @@ static void ride_ratings_calculate_circus_show(Ride *ride) ride->inversions |= 7 << 5; } -static void ride_ratings_calculate_ghost_train(Ride *ride) +static void ride_ratings_calculate_ghost_train(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3392,9 +3536,9 @@ static void ride_ratings_calculate_ghost_train(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,00), RIDE_RATING(0,20), RIDE_RATING(0,03)); + ride_ratings_set(&ratings, RIDE_RATING(2, 00), RIDE_RATING(0, 20), RIDE_RATING(0, 03)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,15), RIDE_RATING(0,00)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 15), RIDE_RATING(0, 00)); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); ride_ratings_apply_duration(&ratings, ride, 150, 26214); @@ -3417,7 +3561,7 @@ static void ride_ratings_calculate_ghost_train(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_twister_roller_coaster(Ride *ride) +static void ride_ratings_calculate_twister_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3426,9 +3570,9 @@ static void ride_ratings_calculate_twister_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(3,50), RIDE_RATING(0,40), RIDE_RATING(0,30)); + ride_ratings_set(&ratings, RIDE_RATING(3, 50), RIDE_RATING(0, 40), RIDE_RATING(0, 30)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -3445,7 +3589,8 @@ static void ride_ratings_calculate_twister_roller_coaster(Ride *ride) ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); - if ((ride->inversions & 0x1F) == 0) { + if ((ride->inversions & 0x1F) == 0) + { ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 40), 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); } @@ -3463,7 +3608,7 @@ static void ride_ratings_calculate_twister_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_wooden_roller_coaster(Ride *ride) +static void ride_ratings_calculate_wooden_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3472,9 +3617,9 @@ static void ride_ratings_calculate_wooden_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(3,20), RIDE_RATING(2,60), RIDE_RATING(2,00)); + ride_ratings_set(&ratings, RIDE_RATING(3, 20), RIDE_RATING(2, 60), RIDE_RATING(2, 00)); ride_ratings_apply_length(&ratings, ride, 6000, 873); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 364088, 655360); @@ -3487,7 +3632,7 @@ static void ride_ratings_calculate_wooden_roller_coaster(Ride *ride) ride_ratings_apply_scenery(&ratings, ride, 11155); ride_ratings_apply_highest_drop_height_penalty(&ratings, ride, 12, 2, 2, 2); ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); - ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0,10), 2, 2, 2); + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 10), 2, 2, 2); ride_ratings_apply_first_length_penalty(&ratings, ride, 0x1720000, 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); @@ -3504,7 +3649,7 @@ static void ride_ratings_calculate_wooden_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_side_friction_roller_coaster(Ride *ride) +static void ride_ratings_calculate_side_friction_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3513,9 +3658,9 @@ static void ride_ratings_calculate_side_friction_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,50), RIDE_RATING(2,00), RIDE_RATING(1,50)); + ride_ratings_set(&ratings, RIDE_RATING(2, 50), RIDE_RATING(2, 00), RIDE_RATING(1, 50)); ride_ratings_apply_length(&ratings, ride, 6000, 873); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 364088, 655360); @@ -3544,7 +3689,7 @@ static void ride_ratings_calculate_side_friction_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_wild_mouse(Ride *ride) +static void ride_ratings_calculate_wild_mouse(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3553,9 +3698,9 @@ static void ride_ratings_calculate_wild_mouse(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,80), RIDE_RATING(2,50), RIDE_RATING(2,10)); + ride_ratings_set(&ratings, RIDE_RATING(2, 80), RIDE_RATING(2, 50), RIDE_RATING(2, 10)); ride_ratings_apply_length(&ratings, ride, 6000, 873); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0, 8)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 8)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 364088, 655360); @@ -3568,7 +3713,7 @@ static void ride_ratings_calculate_wild_mouse(Ride *ride) ride_ratings_apply_scenery(&ratings, ride, 5577); ride_ratings_apply_highest_drop_height_penalty(&ratings, ride, 6, 2, 2, 2); ride_ratings_apply_max_speed_penalty(&ratings, ride, 0x70000, 2, 2, 2); - ride_ratings_apply_max_lateral_g_penalty(&ratings, ride, FIXED_2DP(1,50), 2, 2, 2); + ride_ratings_apply_max_lateral_g_penalty(&ratings, ride, FIXED_2DP(1, 50), 2, 2, 2); ride_ratings_apply_first_length_penalty(&ratings, ride, 0xAA0000, 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); @@ -3585,7 +3730,7 @@ static void ride_ratings_calculate_wild_mouse(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_multi_dimension_roller_coaster(Ride *ride) +static void ride_ratings_calculate_multi_dimension_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3594,9 +3739,9 @@ static void ride_ratings_calculate_multi_dimension_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(3,75), RIDE_RATING(1,95), RIDE_RATING(4,79)); + ride_ratings_set(&ratings, RIDE_RATING(3, 75), RIDE_RATING(1, 95), RIDE_RATING(4, 79)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -3613,7 +3758,7 @@ static void ride_ratings_calculate_multi_dimension_roller_coaster(Ride *ride) ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 1, 1); if ((ride->inversions & 0x1F) == 0) - ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0,40), 2, 1, 1); + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 40), 2, 1, 1); if ((ride->inversions & 0x1F) == 0) ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 1, 1); @@ -3631,7 +3776,7 @@ static void ride_ratings_calculate_multi_dimension_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_giga_coaster(Ride *ride) +static void ride_ratings_calculate_giga_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3640,9 +3785,9 @@ static void ride_ratings_calculate_giga_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(3,85), RIDE_RATING(0,40), RIDE_RATING(0,35)); + ride_ratings_set(&ratings, RIDE_RATING(3, 85), RIDE_RATING(0, 40), RIDE_RATING(0, 35)); ride_ratings_apply_length(&ratings, ride, 6000, 819); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 140434); ride_ratings_apply_max_speed(&ratings, ride, 51366, 85019, 35424); ride_ratings_apply_average_speed(&ratings, ride, 364088, 400497); @@ -3659,7 +3804,8 @@ static void ride_ratings_calculate_giga_coaster(Ride *ride) ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); - if ((ride->inversions & 0x1F) == 0) { + if ((ride->inversions & 0x1F) == 0) + { ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 40), 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); } @@ -3677,7 +3823,7 @@ static void ride_ratings_calculate_giga_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_roto_drop(Ride *ride) +static void ride_ratings_calculate_roto_drop(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3686,13 +3832,10 @@ static void ride_ratings_calculate_roto_drop(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,80), RIDE_RATING(3,50), RIDE_RATING(3,50)); + ride_ratings_set(&ratings, RIDE_RATING(2, 80), RIDE_RATING(3, 50), RIDE_RATING(3, 50)); int32_t lengthFactor = ((ride_get_total_length(ride) >> 16) * 209715) >> 16; - ride_ratings_add(&ratings, - lengthFactor, - lengthFactor * 2, - lengthFactor * 2); + ride_ratings_add(&ratings, lengthFactor, lengthFactor * 2, lengthFactor * 2); ride_ratings_apply_proximity(&ratings, 11183); ride_ratings_apply_scenery(&ratings, ride, 25098); @@ -3709,36 +3852,27 @@ static void ride_ratings_calculate_roto_drop(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_flying_saucers(Ride *ride) +static void ride_ratings_calculate_flying_saucers(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; ride->unreliability_factor = 32; set_unreliability_factor(ride); - rating_tuple ratings = { - /* .excitement = */ RIDE_RATING(2,40), - /* .intensity = */ RIDE_RATING(0,55), - /* .nausea = */ RIDE_RATING(0,39) - }; + rating_tuple ratings = { /* .excitement = */ RIDE_RATING(2, 40), + /* .intensity = */ RIDE_RATING(0, 55), + /* .nausea = */ RIDE_RATING(0, 39) }; - if (ride->num_vehicles >= 4) { - ride_ratings_add(&ratings, - RIDE_RATING(0,40), - 0, - 0); + if (ride->num_vehicles >= 4) + { + ride_ratings_add(&ratings, RIDE_RATING(0, 40), 0, 0); } - ride_ratings_add(&ratings, - ride->time_limit, - ride->time_limit / 2, - 0); + ride_ratings_add(&ratings, ride->time_limit, ride->time_limit / 2, 0); - if (ride->num_vehicles >= 4) { - ride_ratings_add(&ratings, - RIDE_RATING(0, 40), - 0, - 0); + if (ride->num_vehicles >= 4) + { + ride_ratings_add(&ratings, RIDE_RATING(0, 40), 0, 0); } ride_ratings_apply_scenery(&ratings, ride, 5577); @@ -3755,18 +3889,16 @@ static void ride_ratings_calculate_flying_saucers(Ride *ride) ride->inversions |= 0 << 5; } -static void ride_ratings_calculate_crooked_house(Ride *ride) +static void ride_ratings_calculate_crooked_house(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; ride->unreliability_factor = 5; set_unreliability_factor(ride); - rating_tuple ratings = { - /* .excitement = */ RIDE_RATING(2,15), - /* .intensity = */ RIDE_RATING(0,62), - /* .nausea = */ RIDE_RATING(0,34) - }; + rating_tuple ratings = { /* .excitement = */ RIDE_RATING(2, 15), + /* .intensity = */ RIDE_RATING(0, 62), + /* .nausea = */ RIDE_RATING(0, 34) }; ride_ratings_apply_intensity_penalty(&ratings); ride_ratings_apply_adjustments(ride, &ratings); @@ -3780,7 +3912,7 @@ static void ride_ratings_calculate_crooked_house(Ride *ride) ride->inversions |= 0xE0; } -static void ride_ratings_calculate_monorail_cycles(Ride *ride) +static void ride_ratings_calculate_monorail_cycles(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3789,9 +3921,9 @@ static void ride_ratings_calculate_monorail_cycles(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,40), RIDE_RATING(0,20), RIDE_RATING(0,00)); + ride_ratings_set(&ratings, RIDE_RATING(1, 40), RIDE_RATING(0, 20), RIDE_RATING(0, 00)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,15), RIDE_RATING(0,00)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 15), RIDE_RATING(0, 00)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -3815,7 +3947,7 @@ static void ride_ratings_calculate_monorail_cycles(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_compact_inverted_coaster(Ride *ride) +static void ride_ratings_calculate_compact_inverted_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3824,9 +3956,9 @@ static void ride_ratings_calculate_compact_inverted_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(3,15), RIDE_RATING(2,80), RIDE_RATING(3,20)); + ride_ratings_set(&ratings, RIDE_RATING(3, 15), RIDE_RATING(2, 80), RIDE_RATING(3, 20)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,42), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 42), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -3844,7 +3976,7 @@ static void ride_ratings_calculate_compact_inverted_coaster(Ride *ride) ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); if ((ride->inversions & 0x1F) == 0) - ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0,30), 2, 2, 2); + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 30), 2, 2, 2); ride_ratings_apply_excessive_lateral_g_penalty(&ratings, ride); ride_ratings_apply_intensity_penalty(&ratings); @@ -3859,7 +3991,7 @@ static void ride_ratings_calculate_compact_inverted_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_water_coaster(Ride *ride) +static void ride_ratings_calculate_water_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3868,9 +4000,9 @@ static void ride_ratings_calculate_water_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,70), RIDE_RATING(2,80), RIDE_RATING(2,10)); + ride_ratings_set(&ratings, RIDE_RATING(2, 70), RIDE_RATING(2, 80), RIDE_RATING(2, 10)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -3901,7 +4033,7 @@ static void ride_ratings_calculate_water_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_air_powered_vertical_coaster(Ride *ride) +static void ride_ratings_calculate_air_powered_vertical_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3910,9 +4042,9 @@ static void ride_ratings_calculate_air_powered_vertical_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(4,13), RIDE_RATING(2,50), RIDE_RATING(2,80)); + ride_ratings_set(&ratings, RIDE_RATING(4, 13), RIDE_RATING(2, 50), RIDE_RATING(2, 80)); ride_ratings_apply_length(&ratings, ride, 6000, 327); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,60), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 60), RIDE_RATING(0, 05)); ride_ratings_apply_max_speed(&ratings, ride, 509724, 364088, 320398); ride_ratings_apply_gforces(&ratings, ride, 24576, 35746, 59578); ride_ratings_apply_sheltered_ratings(&ratings, ride, 15420, 21845, 11702); @@ -3933,7 +4065,7 @@ static void ride_ratings_calculate_air_powered_vertical_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_inverted_hairpin_coaster(Ride *ride) +static void ride_ratings_calculate_inverted_hairpin_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -3942,9 +4074,9 @@ static void ride_ratings_calculate_inverted_hairpin_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(3,00), RIDE_RATING(2,65), RIDE_RATING(2,25)); + ride_ratings_set(&ratings, RIDE_RATING(3, 00), RIDE_RATING(2, 65), RIDE_RATING(2, 25)); ride_ratings_apply_length(&ratings, ride, 6000, 873); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0, 8)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 8)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 364088, 655360); @@ -3957,8 +4089,8 @@ static void ride_ratings_calculate_inverted_hairpin_coaster(Ride *ride) ride_ratings_apply_scenery(&ratings, ride, 5577); ride_ratings_apply_highest_drop_height_penalty(&ratings, ride, 8, 2, 2, 2); ride_ratings_apply_max_speed_penalty(&ratings, ride, 0x70000, 2, 2, 2); - ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0,10), 2, 2, 2); - ride_ratings_apply_max_lateral_g_penalty(&ratings, ride, FIXED_2DP(1,50), 2, 2, 2); + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 10), 2, 2, 2); + ride_ratings_apply_max_lateral_g_penalty(&ratings, ride, FIXED_2DP(1, 50), 2, 2, 2); ride_ratings_apply_first_length_penalty(&ratings, ride, 0xAA0000, 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 3, 2, 2, 2); @@ -3975,7 +4107,7 @@ static void ride_ratings_calculate_inverted_hairpin_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_magic_carpet(Ride *ride) +static void ride_ratings_calculate_magic_carpet(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -3983,12 +4115,9 @@ static void ride_ratings_calculate_magic_carpet(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,45), RIDE_RATING(1,60), RIDE_RATING(2,60)); + ride_ratings_set(&ratings, RIDE_RATING(2, 45), RIDE_RATING(1, 60), RIDE_RATING(2, 60)); - ride_ratings_add(&ratings, - ride->operation_option * 10, - ride->operation_option * 20, - ride->operation_option * 20); + ride_ratings_add(&ratings, ride->operation_option * 10, ride->operation_option * 20, ride->operation_option * 20); ride_ratings_apply_scenery(&ratings, ride, 11155); @@ -4004,7 +4133,7 @@ static void ride_ratings_calculate_magic_carpet(Ride *ride) ride->inversions |= 0 << 5; } -static void ride_ratings_calculate_submarine_ride(Ride *ride) +static void ride_ratings_calculate_submarine_ride(Ride* ride) { ride->unreliability_factor = 7; set_unreliability_factor(ride); @@ -4012,7 +4141,7 @@ static void ride_ratings_calculate_submarine_ride(Ride *ride) // NOTE Fixed bug from original game, see boat Hire. rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,20), RIDE_RATING(1,80), RIDE_RATING(1,40)); + ride_ratings_set(&ratings, RIDE_RATING(2, 20), RIDE_RATING(1, 80), RIDE_RATING(1, 40)); ride_ratings_apply_length(&ratings, ride, 6000, 764); ride_ratings_apply_proximity(&ratings, 11183); ride_ratings_apply_scenery(&ratings, ride, 22310); @@ -4029,7 +4158,7 @@ static void ride_ratings_calculate_submarine_ride(Ride *ride) ride->inversions |= 0 << 5; } -static void ride_ratings_calculate_river_rafts(Ride *ride) +static void ride_ratings_calculate_river_rafts(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -4038,9 +4167,9 @@ static void ride_ratings_calculate_river_rafts(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(1,45), RIDE_RATING(0,25), RIDE_RATING(0,34)); + ride_ratings_set(&ratings, RIDE_RATING(1, 45), RIDE_RATING(0, 25), RIDE_RATING(0, 34)); ride_ratings_apply_length(&ratings, ride, 2000, 7208); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_max_speed(&ratings, ride, 531372, 655360, 301111); ride_ratings_apply_duration(&ratings, ride, 500, 13107); ride_ratings_apply_turns(&ratings, ride, 22291, 20860, 4574); @@ -4060,7 +4189,7 @@ static void ride_ratings_calculate_river_rafts(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_enterprise(Ride *ride) +static void ride_ratings_calculate_enterprise(Ride* ride) { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; @@ -4068,16 +4197,11 @@ static void ride_ratings_calculate_enterprise(Ride *ride) set_unreliability_factor(ride); // Base ratings - rating_tuple ratings = { - /* .excitement = */ RIDE_RATING(3,60), - /* .intensity = */ RIDE_RATING(4,55), - /* .nausea = */ RIDE_RATING(5,72) - }; + rating_tuple ratings = { /* .excitement = */ RIDE_RATING(3, 60), + /* .intensity = */ RIDE_RATING(4, 55), + /* .nausea = */ RIDE_RATING(5, 72) }; - ride_ratings_add(&ratings, - ride->operation_option, - ride->operation_option * 16, - ride->operation_option * 16); + ride_ratings_add(&ratings, ride->operation_option, ride->operation_option * 16, ride->operation_option * 16); ride_ratings_apply_scenery(&ratings, ride, 19521); @@ -4093,7 +4217,7 @@ static void ride_ratings_calculate_enterprise(Ride *ride) ride->inversions |= 3 << 5; } -static void ride_ratings_calculate_inverted_impulse_coaster(Ride *ride) +static void ride_ratings_calculate_inverted_impulse_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -4102,9 +4226,9 @@ static void ride_ratings_calculate_inverted_impulse_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(4,00), RIDE_RATING(3,00), RIDE_RATING(3,20)); + ride_ratings_set(&ratings, RIDE_RATING(4, 00), RIDE_RATING(3, 00), RIDE_RATING(3, 20)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,42), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 42), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -4131,7 +4255,7 @@ static void ride_ratings_calculate_inverted_impulse_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_mini_roller_coaster(Ride *ride) +static void ride_ratings_calculate_mini_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -4140,9 +4264,9 @@ static void ride_ratings_calculate_mini_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,55), RIDE_RATING(2,40), RIDE_RATING(1,85)); + ride_ratings_set(&ratings, RIDE_RATING(2, 55), RIDE_RATING(2, 40), RIDE_RATING(1, 85)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -4155,7 +4279,7 @@ static void ride_ratings_calculate_mini_roller_coaster(Ride *ride) ride_ratings_apply_scenery(&ratings, ride, 9760); ride_ratings_apply_highest_drop_height_penalty(&ratings, ride, 12, 2, 2, 2); ride_ratings_apply_max_speed_penalty(&ratings, ride, 0x70000, 2, 2, 2); - ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0,50), 2, 2, 2); + ride_ratings_apply_max_negative_g_penalty(&ratings, ride, FIXED_2DP(0, 50), 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); ride_ratings_apply_excessive_lateral_g_penalty(&ratings, ride); @@ -4171,7 +4295,7 @@ static void ride_ratings_calculate_mini_roller_coaster(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_mine_ride(Ride *ride) +static void ride_ratings_calculate_mine_ride(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -4180,9 +4304,9 @@ static void ride_ratings_calculate_mine_ride(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,75), RIDE_RATING(1,00), RIDE_RATING(1,80)); + ride_ratings_set(&ratings, RIDE_RATING(2, 75), RIDE_RATING(1, 00), RIDE_RATING(1, 80)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -4208,7 +4332,7 @@ static void ride_ratings_calculate_mine_ride(Ride *ride) ride->inversions |= get_num_of_sheltered_eighths(ride) << 5; } -static void ride_ratings_calculate_lim_launched_roller_coaster(Ride *ride) +static void ride_ratings_calculate_lim_launched_roller_coaster(Ride* ride) { if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) return; @@ -4217,9 +4341,9 @@ static void ride_ratings_calculate_lim_launched_roller_coaster(Ride *ride) set_unreliability_factor(ride); rating_tuple ratings; - ride_ratings_set(&ratings, RIDE_RATING(2,90), RIDE_RATING(1,50), RIDE_RATING(2,20)); + ride_ratings_set(&ratings, RIDE_RATING(2, 90), RIDE_RATING(1, 50), RIDE_RATING(2, 20)); ride_ratings_apply_length(&ratings, ride, 6000, 764); - ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0,40), RIDE_RATING(0,05)); + ride_ratings_apply_synchronisation(&ratings, ride, RIDE_RATING(0, 40), RIDE_RATING(0, 05)); ride_ratings_apply_train_length(&ratings, ride, 187245); ride_ratings_apply_max_speed(&ratings, ride, 44281, 88562, 35424); ride_ratings_apply_average_speed(&ratings, ride, 291271, 436906); @@ -4236,7 +4360,8 @@ static void ride_ratings_calculate_lim_launched_roller_coaster(Ride *ride) ride_ratings_apply_max_speed_penalty(&ratings, ride, 0xA0000, 2, 2, 2); - if ((ride->inversions & 0x1F) == 0) { + if ((ride->inversions & 0x1F) == 0) + { ride_ratings_apply_max_negative_g_penalty(&ratings, ride, 10, 2, 2, 2); ride_ratings_apply_num_drops_penalty(&ratings, ride, 2, 2, 2, 2); } @@ -4260,97 +4385,97 @@ static void ride_ratings_calculate_lim_launched_roller_coaster(Ride *ride) // rct2: 0x0097E050 static const ride_ratings_calculation ride_ratings_calculate_func_table[RIDE_TYPE_COUNT] = { - ride_ratings_calculate_spiral_roller_coaster, // SPIRAL_ROLLER_COASTER - ride_ratings_calculate_stand_up_roller_coaster, // STAND_UP_ROLLER_COASTER - ride_ratings_calculate_suspended_swinging_coaster, // SUSPENDED_SWINGING_COASTER - ride_ratings_calculate_inverted_roller_coaster, // INVERTED_ROLLER_COASTER - ride_ratings_calculate_junior_roller_coaster, // JUNIOR_ROLLER_COASTER - ride_ratings_calculate_miniature_railway, // MINIATURE_RAILWAY - ride_ratings_calculate_monorail, // MONORAIL - ride_ratings_calculate_mini_suspended_coaster, // MINI_SUSPENDED_COASTER - ride_ratings_calculate_boat_hire, // BOAT_HIRE - ride_ratings_calculate_wooden_wild_mouse, // WOODEN_WILD_MOUSE - ride_ratings_calculate_steeplechase, // STEEPLECHASE - ride_ratings_calculate_car_ride, // CAR_RIDE - ride_ratings_calculate_launched_freefall, // LAUNCHED_FREEFALL - ride_ratings_calculate_bobsleigh_coaster, // BOBSLEIGH_COASTER - ride_ratings_calculate_observation_tower, // OBSERVATION_TOWER - ride_ratings_calculate_looping_roller_coaster, // LOOPING_ROLLER_COASTER - ride_ratings_calculate_dinghy_slide, // DINGHY_SLIDE - ride_ratings_calculate_mine_train_coaster, // MINE_TRAIN_COASTER - ride_ratings_calculate_chairlift, // CHAIRLIFT - ride_ratings_calculate_corkscrew_roller_coaster, // CORKSCREW_ROLLER_COASTER - ride_ratings_calculate_maze, // MAZE - ride_ratings_calculate_spiral_slide, // SPIRAL_SLIDE - ride_ratings_calculate_go_karts, // GO_KARTS - ride_ratings_calculate_log_flume, // LOG_FLUME - ride_ratings_calculate_river_rapids, // RIVER_RAPIDS - ride_ratings_calculate_dodgems, // DODGEMS - ride_ratings_calculate_pirate_ship, // PIRATE_SHIP - ride_ratings_calculate_inverter_ship, // SWINGING_INVERTER_SHIP - ride_ratings_calculate_food_stall, // FOOD_STALL - ride_ratings_calculate_food_stall, // 1D - ride_ratings_calculate_drink_stall, // DRINK_STALL - ride_ratings_calculate_drink_stall, // 1F - ride_ratings_calculate_shop, // SHOP - ride_ratings_calculate_merry_go_round, // MERRY_GO_ROUND - ride_ratings_calculate_shop, // 22 - ride_ratings_calculate_information_kiosk, // INFORMATION_KIOSK - ride_ratings_calculate_toilets, // TOILETS - ride_ratings_calculate_ferris_wheel, // FERRIS_WHEEL - ride_ratings_calculate_motion_simulator, // MOTION_SIMULATOR - ride_ratings_calculate_3d_cinema, // 3D_CINEMA - ride_ratings_calculate_top_spin, // TOP_SPIN - ride_ratings_calculate_space_rings, // SPACE_RINGS - ride_ratings_calculate_reverse_freefall_coaster, // REVERSE_FREEFALL_COASTER - ride_ratings_calculate_lift, // LIFT - ride_ratings_calculate_vertical_drop_roller_coaster, // VERTICAL_DROP_ROLLER_COASTER - ride_ratings_calculate_cash_machine, // CASH_MACHINE - ride_ratings_calculate_twist, // TWIST - ride_ratings_calculate_haunted_house, // HAUNTED_HOUSE - ride_ratings_calculate_first_aid, // FIRST_AID - ride_ratings_calculate_circus_show, // CIRCUS_SHOW - ride_ratings_calculate_ghost_train, // GHOST_TRAIN - ride_ratings_calculate_twister_roller_coaster, // TWISTER_ROLLER_COASTER - ride_ratings_calculate_wooden_roller_coaster, // WOODEN_ROLLER_COASTER - ride_ratings_calculate_side_friction_roller_coaster, // SIDE_FRICTION_ROLLER_COASTER - ride_ratings_calculate_wild_mouse, // WILD_MOUSE - ride_ratings_calculate_multi_dimension_roller_coaster, // MULTI_DIMENSION_ROLLER_COASTER - ride_ratings_calculate_multi_dimension_roller_coaster, // 38 - ride_ratings_calculate_flying_roller_coaster, // FLYING_ROLLER_COASTER - ride_ratings_calculate_flying_roller_coaster, // 3A - ride_ratings_calculate_virginia_reel, // VIRGINIA_REEL - ride_ratings_calculate_splash_boats, // SPLASH_BOATS - ride_ratings_calculate_mini_helicopters, // MINI_HELICOPTERS - ride_ratings_calculate_lay_down_roller_coaster, // LAY_DOWN_ROLLER_COASTER - ride_ratings_calculate_suspended_monorail, // SUSPENDED_MONORAIL - ride_ratings_calculate_lay_down_roller_coaster, // 40 - ride_ratings_calculate_reverser_roller_coaster, // REVERSER_ROLLER_COASTER - ride_ratings_calculate_heartline_twister_coaster, // HEARTLINE_TWISTER_COASTER - ride_ratings_calculate_mini_golf, // MINI_GOLF - ride_ratings_calculate_giga_coaster, // GIGA_COASTER - ride_ratings_calculate_roto_drop, // ROTO_DROP - ride_ratings_calculate_flying_saucers, // FLYING_SAUCERS - ride_ratings_calculate_crooked_house, // CROOKED_HOUSE - ride_ratings_calculate_monorail_cycles, // MONORAIL_CYCLES - ride_ratings_calculate_compact_inverted_coaster, // COMPACT_INVERTED_COASTER - ride_ratings_calculate_water_coaster, // WATER_COASTER - ride_ratings_calculate_air_powered_vertical_coaster, // AIR_POWERED_VERTICAL_COASTER - ride_ratings_calculate_inverted_hairpin_coaster, // INVERTED_HAIRPIN_COASTER - ride_ratings_calculate_magic_carpet, // MAGIC_CARPET - ride_ratings_calculate_submarine_ride, // SUBMARINE_RIDE - ride_ratings_calculate_river_rafts, // RIVER_RAFTS - NULL, // 50 - ride_ratings_calculate_enterprise, // ENTERPRISE - NULL, // 52 - NULL, // 53 - NULL, // 54 - NULL, // 55 - ride_ratings_calculate_inverted_impulse_coaster, // INVERTED_IMPULSE_COASTER - ride_ratings_calculate_mini_roller_coaster, // MINI_ROLLER_COASTER - ride_ratings_calculate_mine_ride, // MINE_RIDE - NULL, // 59 - ride_ratings_calculate_lim_launched_roller_coaster, // LIM_LAUNCHED_ROLLER_COASTER + ride_ratings_calculate_spiral_roller_coaster, // SPIRAL_ROLLER_COASTER + ride_ratings_calculate_stand_up_roller_coaster, // STAND_UP_ROLLER_COASTER + ride_ratings_calculate_suspended_swinging_coaster, // SUSPENDED_SWINGING_COASTER + ride_ratings_calculate_inverted_roller_coaster, // INVERTED_ROLLER_COASTER + ride_ratings_calculate_junior_roller_coaster, // JUNIOR_ROLLER_COASTER + ride_ratings_calculate_miniature_railway, // MINIATURE_RAILWAY + ride_ratings_calculate_monorail, // MONORAIL + ride_ratings_calculate_mini_suspended_coaster, // MINI_SUSPENDED_COASTER + ride_ratings_calculate_boat_hire, // BOAT_HIRE + ride_ratings_calculate_wooden_wild_mouse, // WOODEN_WILD_MOUSE + ride_ratings_calculate_steeplechase, // STEEPLECHASE + ride_ratings_calculate_car_ride, // CAR_RIDE + ride_ratings_calculate_launched_freefall, // LAUNCHED_FREEFALL + ride_ratings_calculate_bobsleigh_coaster, // BOBSLEIGH_COASTER + ride_ratings_calculate_observation_tower, // OBSERVATION_TOWER + ride_ratings_calculate_looping_roller_coaster, // LOOPING_ROLLER_COASTER + ride_ratings_calculate_dinghy_slide, // DINGHY_SLIDE + ride_ratings_calculate_mine_train_coaster, // MINE_TRAIN_COASTER + ride_ratings_calculate_chairlift, // CHAIRLIFT + ride_ratings_calculate_corkscrew_roller_coaster, // CORKSCREW_ROLLER_COASTER + ride_ratings_calculate_maze, // MAZE + ride_ratings_calculate_spiral_slide, // SPIRAL_SLIDE + ride_ratings_calculate_go_karts, // GO_KARTS + ride_ratings_calculate_log_flume, // LOG_FLUME + ride_ratings_calculate_river_rapids, // RIVER_RAPIDS + ride_ratings_calculate_dodgems, // DODGEMS + ride_ratings_calculate_pirate_ship, // PIRATE_SHIP + ride_ratings_calculate_inverter_ship, // SWINGING_INVERTER_SHIP + ride_ratings_calculate_food_stall, // FOOD_STALL + ride_ratings_calculate_food_stall, // 1D + ride_ratings_calculate_drink_stall, // DRINK_STALL + ride_ratings_calculate_drink_stall, // 1F + ride_ratings_calculate_shop, // SHOP + ride_ratings_calculate_merry_go_round, // MERRY_GO_ROUND + ride_ratings_calculate_shop, // 22 + ride_ratings_calculate_information_kiosk, // INFORMATION_KIOSK + ride_ratings_calculate_toilets, // TOILETS + ride_ratings_calculate_ferris_wheel, // FERRIS_WHEEL + ride_ratings_calculate_motion_simulator, // MOTION_SIMULATOR + ride_ratings_calculate_3d_cinema, // 3D_CINEMA + ride_ratings_calculate_top_spin, // TOP_SPIN + ride_ratings_calculate_space_rings, // SPACE_RINGS + ride_ratings_calculate_reverse_freefall_coaster, // REVERSE_FREEFALL_COASTER + ride_ratings_calculate_lift, // LIFT + ride_ratings_calculate_vertical_drop_roller_coaster, // VERTICAL_DROP_ROLLER_COASTER + ride_ratings_calculate_cash_machine, // CASH_MACHINE + ride_ratings_calculate_twist, // TWIST + ride_ratings_calculate_haunted_house, // HAUNTED_HOUSE + ride_ratings_calculate_first_aid, // FIRST_AID + ride_ratings_calculate_circus_show, // CIRCUS_SHOW + ride_ratings_calculate_ghost_train, // GHOST_TRAIN + ride_ratings_calculate_twister_roller_coaster, // TWISTER_ROLLER_COASTER + ride_ratings_calculate_wooden_roller_coaster, // WOODEN_ROLLER_COASTER + ride_ratings_calculate_side_friction_roller_coaster, // SIDE_FRICTION_ROLLER_COASTER + ride_ratings_calculate_wild_mouse, // WILD_MOUSE + ride_ratings_calculate_multi_dimension_roller_coaster, // MULTI_DIMENSION_ROLLER_COASTER + ride_ratings_calculate_multi_dimension_roller_coaster, // 38 + ride_ratings_calculate_flying_roller_coaster, // FLYING_ROLLER_COASTER + ride_ratings_calculate_flying_roller_coaster, // 3A + ride_ratings_calculate_virginia_reel, // VIRGINIA_REEL + ride_ratings_calculate_splash_boats, // SPLASH_BOATS + ride_ratings_calculate_mini_helicopters, // MINI_HELICOPTERS + ride_ratings_calculate_lay_down_roller_coaster, // LAY_DOWN_ROLLER_COASTER + ride_ratings_calculate_suspended_monorail, // SUSPENDED_MONORAIL + ride_ratings_calculate_lay_down_roller_coaster, // 40 + ride_ratings_calculate_reverser_roller_coaster, // REVERSER_ROLLER_COASTER + ride_ratings_calculate_heartline_twister_coaster, // HEARTLINE_TWISTER_COASTER + ride_ratings_calculate_mini_golf, // MINI_GOLF + ride_ratings_calculate_giga_coaster, // GIGA_COASTER + ride_ratings_calculate_roto_drop, // ROTO_DROP + ride_ratings_calculate_flying_saucers, // FLYING_SAUCERS + ride_ratings_calculate_crooked_house, // CROOKED_HOUSE + ride_ratings_calculate_monorail_cycles, // MONORAIL_CYCLES + ride_ratings_calculate_compact_inverted_coaster, // COMPACT_INVERTED_COASTER + ride_ratings_calculate_water_coaster, // WATER_COASTER + ride_ratings_calculate_air_powered_vertical_coaster, // AIR_POWERED_VERTICAL_COASTER + ride_ratings_calculate_inverted_hairpin_coaster, // INVERTED_HAIRPIN_COASTER + ride_ratings_calculate_magic_carpet, // MAGIC_CARPET + ride_ratings_calculate_submarine_ride, // SUBMARINE_RIDE + ride_ratings_calculate_river_rafts, // RIVER_RAFTS + NULL, // 50 + ride_ratings_calculate_enterprise, // ENTERPRISE + NULL, // 52 + NULL, // 53 + NULL, // 54 + NULL, // 55 + ride_ratings_calculate_inverted_impulse_coaster, // INVERTED_IMPULSE_COASTER + ride_ratings_calculate_mini_roller_coaster, // MINI_ROLLER_COASTER + ride_ratings_calculate_mine_ride, // MINE_RIDE + NULL, // 59 + ride_ratings_calculate_lim_launched_roller_coaster, // LIM_LAUNCHED_ROLLER_COASTER }; static ride_ratings_calculation ride_ratings_get_calculate_func(uint8_t rideType) diff --git a/src/openrct2/ride/RideRatings.h b/src/openrct2/ride/RideRatings.h index 422ac5ab24..2ebed683c3 100644 --- a/src/openrct2/ride/RideRatings.h +++ b/src/openrct2/ride/RideRatings.h @@ -15,13 +15,14 @@ using ride_rating = fixed16_2dp; // Convenience function for writing ride ratings. The result is a 16 bit signed // integer. To create the ride rating 3.65 type RIDE_RATING(3,65) -#define RIDE_RATING(whole, fraction) FIXED_2DP(whole, fraction) -#define RIDE_RATING_UNDEFINED (ride_rating)(uint16_t)0xFFFF +#define RIDE_RATING(whole, fraction) FIXED_2DP(whole, fraction) +#define RIDE_RATING_UNDEFINED (ride_rating)(uint16_t) 0xFFFF #pragma pack(push, 1) // Used for return values, for functions that modify all three. -struct rating_tuple { +struct rating_tuple +{ ride_rating excitement; ride_rating intensity; ride_rating nausea; @@ -30,30 +31,31 @@ assert_struct_size(rating_tuple, 6); #pragma pack(pop) -enum { +enum +{ RIDE_RATING_STATION_FLAG_NO_ENTRANCE = 1 << 0 }; -struct rct_ride_rating_calc_data { - uint16_t proximity_x; - uint16_t proximity_y; - uint16_t proximity_z; - uint16_t proximity_start_x; - uint16_t proximity_start_y; - uint16_t proximity_start_z; - uint8_t current_ride; - uint8_t state; - uint8_t proximity_track_type; - uint8_t proximity_base_height; - uint16_t proximity_total; - uint16_t proximity_scores[26]; - uint16_t num_brakes; - uint16_t num_reversers; - uint16_t station_flags; +struct rct_ride_rating_calc_data +{ + uint16_t proximity_x; + uint16_t proximity_y; + uint16_t proximity_z; + uint16_t proximity_start_x; + uint16_t proximity_start_y; + uint16_t proximity_start_z; + uint8_t current_ride; + uint8_t state; + uint8_t proximity_track_type; + uint8_t proximity_base_height; + uint16_t proximity_total; + uint16_t proximity_scores[26]; + uint16_t num_brakes; + uint16_t num_reversers; + uint16_t station_flags; }; extern rct_ride_rating_calc_data gRideRatingsCalcData; void ride_ratings_update_ride(int rideIndex); void ride_ratings_update_all(); - diff --git a/src/openrct2/ride/ShopItem.cpp b/src/openrct2/ride/ShopItem.cpp index 8b27fdd7fb..b961b8355c 100644 --- a/src/openrct2/ride/ShopItem.cpp +++ b/src/openrct2/ride/ShopItem.cpp @@ -7,194 +7,391 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ +#include "ShopItem.h" + #include "../common.h" #include "../localisation/StringIds.h" #include "../sprites.h" -#include "ShopItem.h" uint32_t gSamePriceThroughoutParkA; uint32_t gSamePriceThroughoutParkB; /** rct2: 0x00982164 */ -static const rct_shop_item_stats ShopItemStats[SHOP_ITEM_COUNT] = -{ - { 3, 14, 14, 14 }, // SHOP_ITEM_BALLOON +static const rct_shop_item_stats ShopItemStats[SHOP_ITEM_COUNT] = { + { 3, 14, 14, 14 }, // SHOP_ITEM_BALLOON { 15, 30, 30, 30 }, // SHOP_ITEM_TOY - { 1, 7, 7, 8 }, // SHOP_ITEM_MAP - { 2, 30, 30, 30 }, // SHOP_ITEM_PHOTO + { 1, 7, 7, 8 }, // SHOP_ITEM_MAP + { 2, 30, 30, 30 }, // SHOP_ITEM_PHOTO { 20, 35, 25, 50 }, // SHOP_ITEM_UMBRELLA - { 3, 12, 20, 10 }, // SHOP_ITEM_DRINK - { 5, 19, 19, 22 }, // SHOP_ITEM_BURGER - { 4, 16, 16, 18 }, // SHOP_ITEM_CHIPS - { 4, 10, 15, 6 }, // SHOP_ITEM_ICE_CREAM - { 3, 9, 9, 6 }, // SHOP_ITEM_CANDYFLOSS - { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_CAN - { 0, 0, 0, 0 }, // SHOP_ITEM_RUBBISH - { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_BURGER_BOX - { 6, 21, 21, 25 }, // SHOP_ITEM_PIZZA - { 0, 0, 0, 0 }, // SHOP_ITEM_VOUCHER - { 5, 13, 13, 11 }, // SHOP_ITEM_POPCORN - { 5, 17, 17, 20 }, // SHOP_ITEM_HOT_DOG + { 3, 12, 20, 10 }, // SHOP_ITEM_DRINK + { 5, 19, 19, 22 }, // SHOP_ITEM_BURGER + { 4, 16, 16, 18 }, // SHOP_ITEM_CHIPS + { 4, 10, 15, 6 }, // SHOP_ITEM_ICE_CREAM + { 3, 9, 9, 6 }, // SHOP_ITEM_CANDYFLOSS + { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_CAN + { 0, 0, 0, 0 }, // SHOP_ITEM_RUBBISH + { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_BURGER_BOX + { 6, 21, 21, 25 }, // SHOP_ITEM_PIZZA + { 0, 0, 0, 0 }, // SHOP_ITEM_VOUCHER + { 5, 13, 13, 11 }, // SHOP_ITEM_POPCORN + { 5, 17, 17, 20 }, // SHOP_ITEM_HOT_DOG { 11, 22, 20, 18 }, // SHOP_ITEM_TENTACLE - { 9, 27, 32, 24 }, // SHOP_ITEM_HAT - { 4, 10, 10, 10 }, // SHOP_ITEM_TOFFEE_APPLE + { 9, 27, 32, 24 }, // SHOP_ITEM_HAT + { 4, 10, 10, 10 }, // SHOP_ITEM_TOFFEE_APPLE { 20, 37, 37, 37 }, // SHOP_ITEM_TSHIRT - { 4, 8, 7, 10 }, // SHOP_ITEM_DOUGHNUT - { 3, 11, 15, 20 }, // SHOP_ITEM_COFFEE - { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_CUP - { 5, 19, 19, 22 }, // SHOP_ITEM_CHICKEN - { 4, 11, 21, 10 }, // SHOP_ITEM_LEMONADE - { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_BOX - { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_BOTTLE - { 0, 0, 0, 0 }, // 28 - { 0, 0, 0, 0 }, // 29 - { 0, 0, 0, 0 }, // 30 - { 0, 0, 0, 0 }, // SHOP_ITEM_ADMISSION - { 2, 30, 30, 30 }, // SHOP_ITEM_PHOTO2 - { 2, 30, 30, 30 }, // SHOP_ITEM_PHOTO3 - { 2, 30, 30, 30 }, // SHOP_ITEM_PHOTO4 - { 5, 11, 11, 11 }, // SHOP_ITEM_PRETZEL - { 4, 13, 13, 20 }, // SHOP_ITEM_CHOCOLATE - { 3, 10, 20, 10 }, // SHOP_ITEM_ICED_TEA - { 5, 13, 11, 14 }, // SHOP_ITEM_FUNNEL_CAKE - { 8, 15, 20, 12 }, // SHOP_ITEM_SUNGLASSES - { 7, 17, 17, 20 }, // SHOP_ITEM_BEEF_NOODLES - { 6, 17, 17, 20 }, // SHOP_ITEM_FRIED_RICE_NOODLES - { 4, 13, 13, 15 }, // SHOP_ITEM_WONTON_SOUP - { 5, 14, 14, 16 }, // SHOP_ITEM_MEATBALL_SOUP - { 4, 11, 19, 11 }, // SHOP_ITEM_FRUIT_JUICE - { 4, 10, 14, 10 }, // SHOP_ITEM_SOYBEAN_MILK - { 3, 11, 14, 11 }, // SHOP_ITEM_SUJEONGGWA - { 5, 19, 19, 17 }, // SHOP_ITEM_SUB_SANDWICH - { 4, 8, 8, 8 }, // SHOP_ITEM_COOKIE - { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_BOWL_RED - { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_DRINK_CARTON - { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_JUICE_CUP - { 5, 16, 16, 20 }, // SHOP_ITEM_ROAST_SAUSAGE - { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_BOWL_BLUE + { 4, 8, 7, 10 }, // SHOP_ITEM_DOUGHNUT + { 3, 11, 15, 20 }, // SHOP_ITEM_COFFEE + { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_CUP + { 5, 19, 19, 22 }, // SHOP_ITEM_CHICKEN + { 4, 11, 21, 10 }, // SHOP_ITEM_LEMONADE + { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_BOX + { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_BOTTLE + { 0, 0, 0, 0 }, // 28 + { 0, 0, 0, 0 }, // 29 + { 0, 0, 0, 0 }, // 30 + { 0, 0, 0, 0 }, // SHOP_ITEM_ADMISSION + { 2, 30, 30, 30 }, // SHOP_ITEM_PHOTO2 + { 2, 30, 30, 30 }, // SHOP_ITEM_PHOTO3 + { 2, 30, 30, 30 }, // SHOP_ITEM_PHOTO4 + { 5, 11, 11, 11 }, // SHOP_ITEM_PRETZEL + { 4, 13, 13, 20 }, // SHOP_ITEM_CHOCOLATE + { 3, 10, 20, 10 }, // SHOP_ITEM_ICED_TEA + { 5, 13, 11, 14 }, // SHOP_ITEM_FUNNEL_CAKE + { 8, 15, 20, 12 }, // SHOP_ITEM_SUNGLASSES + { 7, 17, 17, 20 }, // SHOP_ITEM_BEEF_NOODLES + { 6, 17, 17, 20 }, // SHOP_ITEM_FRIED_RICE_NOODLES + { 4, 13, 13, 15 }, // SHOP_ITEM_WONTON_SOUP + { 5, 14, 14, 16 }, // SHOP_ITEM_MEATBALL_SOUP + { 4, 11, 19, 11 }, // SHOP_ITEM_FRUIT_JUICE + { 4, 10, 14, 10 }, // SHOP_ITEM_SOYBEAN_MILK + { 3, 11, 14, 11 }, // SHOP_ITEM_SUJEONGGWA + { 5, 19, 19, 17 }, // SHOP_ITEM_SUB_SANDWICH + { 4, 8, 8, 8 }, // SHOP_ITEM_COOKIE + { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_BOWL_RED + { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_DRINK_CARTON + { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_JUICE_CUP + { 5, 16, 16, 20 }, // SHOP_ITEM_ROAST_SAUSAGE + { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_BOWL_BLUE }; // rct2: 0x00982358 -const money8 DefaultShopItemPrice[SHOP_ITEM_COUNT] = -{ - MONEY(0,90), // SHOP_ITEM_BALLOON - MONEY(2,50), // SHOP_ITEM_TOY - MONEY(0,60), // SHOP_ITEM_MAP - MONEY(0,00), // SHOP_ITEM_PHOTO - MONEY(2,50), // SHOP_ITEM_UMBRELLA - MONEY(1,20), // SHOP_ITEM_DRINK - MONEY(1,50), // SHOP_ITEM_BURGER - MONEY(1,50), // SHOP_ITEM_CHIPS - MONEY(0,90), // SHOP_ITEM_ICE_CREAM - MONEY(0,80), // SHOP_ITEM_CANDYFLOSS - MONEY(0,00), // SHOP_ITEM_EMPTY_CAN - MONEY(0,00), // SHOP_ITEM_RUBBISH - MONEY(0,00), // SHOP_ITEM_EMPTY_BURGER_BOX - MONEY(1,60), // SHOP_ITEM_PIZZA - MONEY(0,00), // SHOP_ITEM_VOUCHER - MONEY(1,20), // SHOP_ITEM_POPCORN - MONEY(1,00), // SHOP_ITEM_HOT_DOG - MONEY(1,50), // SHOP_ITEM_TENTACLE - MONEY(1,50), // SHOP_ITEM_HAT - MONEY(0,70), // SHOP_ITEM_TOFFEE_APPLE - MONEY(3,00), // SHOP_ITEM_TSHIRT - MONEY(0,70), // SHOP_ITEM_DOUGHNUT - MONEY(1,20), // SHOP_ITEM_COFFEE - MONEY(0,00), // SHOP_ITEM_EMPTY_CUP - MONEY(1,50), // SHOP_ITEM_CHICKEN - MONEY(1,20), // SHOP_ITEM_LEMONADE - MONEY(0,00), // SHOP_ITEM_EMPTY_BOX - MONEY(0,00), // SHOP_ITEM_EMPTY_BOTTLE - MONEY(0,00), // 28 - MONEY(0,00), // 29 - MONEY(0,00), // 30 - MONEY(0,00), // 31 - MONEY(0,00), // SHOP_ITEM_PHOTO2 - MONEY(0,00), // SHOP_ITEM_PHOTO3 - MONEY(0,00), // SHOP_ITEM_PHOTO4 - MONEY(1,10), // SHOP_ITEM_PRETZEL - MONEY(1,20), // SHOP_ITEM_CHOCOLATE - MONEY(1,10), // SHOP_ITEM_ICED_TEA - MONEY(1,20), // SHOP_ITEM_FUNNEL_CAKE - MONEY(1,50), // SHOP_ITEM_SUNGLASSES - MONEY(1,50), // SHOP_ITEM_BEEF_NOODLES - MONEY(1,50), // SHOP_ITEM_FRIED_RICE_NOODLES - MONEY(1,50), // SHOP_ITEM_WONTON_SOUP - MONEY(1,50), // SHOP_ITEM_MEATBALL_SOUP - MONEY(1,20), // SHOP_ITEM_FRUIT_JUICE - MONEY(1,20), // SHOP_ITEM_SOYBEAN_MILK - MONEY(1,20), // SHOP_ITEM_SUJEONGGWA - MONEY(1,50), // SHOP_ITEM_SUB_SANDWICH - MONEY(0,70), // SHOP_ITEM_COOKIE - MONEY(0,00), // SHOP_ITEM_EMPTY_BOWL_RED - MONEY(0,00), // SHOP_ITEM_EMPTY_DRINK_CARTON - MONEY(0,00), // SHOP_ITEM_EMPTY_JUICE_CUP - MONEY(1,50), // SHOP_ITEM_ROAST_SAUSAGE - MONEY(0,00), // SHOP_ITEM_EMPTY_BOWL_BLUE - MONEY(0,00), // 54 - MONEY(0,00), // 55 +const money8 DefaultShopItemPrice[SHOP_ITEM_COUNT] = { + MONEY(0, 90), // SHOP_ITEM_BALLOON + MONEY(2, 50), // SHOP_ITEM_TOY + MONEY(0, 60), // SHOP_ITEM_MAP + MONEY(0, 00), // SHOP_ITEM_PHOTO + MONEY(2, 50), // SHOP_ITEM_UMBRELLA + MONEY(1, 20), // SHOP_ITEM_DRINK + MONEY(1, 50), // SHOP_ITEM_BURGER + MONEY(1, 50), // SHOP_ITEM_CHIPS + MONEY(0, 90), // SHOP_ITEM_ICE_CREAM + MONEY(0, 80), // SHOP_ITEM_CANDYFLOSS + MONEY(0, 00), // SHOP_ITEM_EMPTY_CAN + MONEY(0, 00), // SHOP_ITEM_RUBBISH + MONEY(0, 00), // SHOP_ITEM_EMPTY_BURGER_BOX + MONEY(1, 60), // SHOP_ITEM_PIZZA + MONEY(0, 00), // SHOP_ITEM_VOUCHER + MONEY(1, 20), // SHOP_ITEM_POPCORN + MONEY(1, 00), // SHOP_ITEM_HOT_DOG + MONEY(1, 50), // SHOP_ITEM_TENTACLE + MONEY(1, 50), // SHOP_ITEM_HAT + MONEY(0, 70), // SHOP_ITEM_TOFFEE_APPLE + MONEY(3, 00), // SHOP_ITEM_TSHIRT + MONEY(0, 70), // SHOP_ITEM_DOUGHNUT + MONEY(1, 20), // SHOP_ITEM_COFFEE + MONEY(0, 00), // SHOP_ITEM_EMPTY_CUP + MONEY(1, 50), // SHOP_ITEM_CHICKEN + MONEY(1, 20), // SHOP_ITEM_LEMONADE + MONEY(0, 00), // SHOP_ITEM_EMPTY_BOX + MONEY(0, 00), // SHOP_ITEM_EMPTY_BOTTLE + MONEY(0, 00), // 28 + MONEY(0, 00), // 29 + MONEY(0, 00), // 30 + MONEY(0, 00), // 31 + MONEY(0, 00), // SHOP_ITEM_PHOTO2 + MONEY(0, 00), // SHOP_ITEM_PHOTO3 + MONEY(0, 00), // SHOP_ITEM_PHOTO4 + MONEY(1, 10), // SHOP_ITEM_PRETZEL + MONEY(1, 20), // SHOP_ITEM_CHOCOLATE + MONEY(1, 10), // SHOP_ITEM_ICED_TEA + MONEY(1, 20), // SHOP_ITEM_FUNNEL_CAKE + MONEY(1, 50), // SHOP_ITEM_SUNGLASSES + MONEY(1, 50), // SHOP_ITEM_BEEF_NOODLES + MONEY(1, 50), // SHOP_ITEM_FRIED_RICE_NOODLES + MONEY(1, 50), // SHOP_ITEM_WONTON_SOUP + MONEY(1, 50), // SHOP_ITEM_MEATBALL_SOUP + MONEY(1, 20), // SHOP_ITEM_FRUIT_JUICE + MONEY(1, 20), // SHOP_ITEM_SOYBEAN_MILK + MONEY(1, 20), // SHOP_ITEM_SUJEONGGWA + MONEY(1, 50), // SHOP_ITEM_SUB_SANDWICH + MONEY(0, 70), // SHOP_ITEM_COOKIE + MONEY(0, 00), // SHOP_ITEM_EMPTY_BOWL_RED + MONEY(0, 00), // SHOP_ITEM_EMPTY_DRINK_CARTON + MONEY(0, 00), // SHOP_ITEM_EMPTY_JUICE_CUP + MONEY(1, 50), // SHOP_ITEM_ROAST_SAUSAGE + MONEY(0, 00), // SHOP_ITEM_EMPTY_BOWL_BLUE + MONEY(0, 00), // 54 + MONEY(0, 00), // 55 }; -const rct_shop_item_string_types ShopItemStringIds[SHOP_ITEM_COUNT] = -{ - { STR_SHOP_ITEM_PRICE_LABEL_BALLOON, STR_SHOP_ITEM_SINGULAR_BALLOON, STR_SHOP_ITEM_PLURAL_BALLOON, STR_SHOP_ITEM_INDEFINITE_BALLOON, STR_SHOP_ITEM_DISPLAY_BALLOON }, - { STR_SHOP_ITEM_PRICE_LABEL_CUDDLY_TOY, STR_SHOP_ITEM_SINGULAR_CUDDLY_TOY, STR_SHOP_ITEM_PLURAL_CUDDLY_TOY, STR_SHOP_ITEM_INDEFINITE_CUDDLY_TOY, STR_SHOP_ITEM_DISPLAY_CUDDLY_TOY }, - { STR_SHOP_ITEM_PRICE_LABEL_PARK_MAP, STR_SHOP_ITEM_SINGULAR_PARK_MAP, STR_SHOP_ITEM_PLURAL_PARK_MAP, STR_SHOP_ITEM_INDEFINITE_PARK_MAP, STR_SHOP_ITEM_DISPLAY_PARK_MAP }, - { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, - { STR_SHOP_ITEM_PRICE_LABEL_UMBRELLA, STR_SHOP_ITEM_SINGULAR_UMBRELLA, STR_SHOP_ITEM_PLURAL_UMBRELLA, STR_SHOP_ITEM_INDEFINITE_UMBRELLA, STR_SHOP_ITEM_DISPLAY_UMBRELLA }, - { STR_SHOP_ITEM_PRICE_LABEL_DRINK, STR_SHOP_ITEM_SINGULAR_DRINK, STR_SHOP_ITEM_PLURAL_DRINK, STR_SHOP_ITEM_INDEFINITE_DRINK, STR_SHOP_ITEM_DISPLAY_DRINK }, - { STR_SHOP_ITEM_PRICE_LABEL_BURGER, STR_SHOP_ITEM_SINGULAR_BURGER, STR_SHOP_ITEM_PLURAL_BURGER, STR_SHOP_ITEM_INDEFINITE_BURGER, STR_SHOP_ITEM_DISPLAY_BURGER }, - { STR_SHOP_ITEM_PRICE_LABEL_CHIPS, STR_SHOP_ITEM_SINGULAR_CHIPS, STR_SHOP_ITEM_PLURAL_CHIPS, STR_SHOP_ITEM_INDEFINITE_CHIPS, STR_SHOP_ITEM_DISPLAY_CHIPS }, - { STR_SHOP_ITEM_PRICE_LABEL_ICE_CREAM, STR_SHOP_ITEM_SINGULAR_ICE_CREAM, STR_SHOP_ITEM_PLURAL_ICE_CREAM, STR_SHOP_ITEM_INDEFINITE_ICE_CREAM, STR_SHOP_ITEM_DISPLAY_ICE_CREAM }, - { STR_SHOP_ITEM_PRICE_LABEL_CANDYFLOSS, STR_SHOP_ITEM_SINGULAR_CANDYFLOSS, STR_SHOP_ITEM_PLURAL_CANDYFLOSS, STR_SHOP_ITEM_INDEFINITE_CANDYFLOSS, STR_SHOP_ITEM_DISPLAY_CANDYFLOSS }, - { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_CAN, STR_SHOP_ITEM_SINGULAR_EMPTY_CAN, STR_SHOP_ITEM_PLURAL_EMPTY_CAN, STR_SHOP_ITEM_INDEFINITE_EMPTY_CAN, STR_SHOP_ITEM_DISPLAY_EMPTY_CAN }, - { STR_SHOP_ITEM_PRICE_LABEL_RUBBISH, STR_SHOP_ITEM_SINGULAR_RUBBISH, STR_SHOP_ITEM_PLURAL_RUBBISH, STR_SHOP_ITEM_INDEFINITE_RUBBISH, STR_SHOP_ITEM_DISPLAY_RUBBISH }, - { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BURGER_BOX, STR_SHOP_ITEM_SINGULAR_EMPTY_BURGER_BOX, STR_SHOP_ITEM_PLURAL_EMPTY_BURGER_BOX, STR_SHOP_ITEM_INDEFINITE_EMPTY_BURGER_BOX, STR_SHOP_ITEM_DISPLAY_EMPTY_BURGER_BOX }, - { STR_SHOP_ITEM_PRICE_LABEL_PIZZA, STR_SHOP_ITEM_SINGULAR_PIZZA, STR_SHOP_ITEM_PLURAL_PIZZA, STR_SHOP_ITEM_INDEFINITE_PIZZA, STR_SHOP_ITEM_DISPLAY_PIZZA }, - { STR_SHOP_ITEM_PRICE_LABEL_VOUCHER, STR_SHOP_ITEM_SINGULAR_VOUCHER, STR_SHOP_ITEM_PLURAL_VOUCHER, STR_SHOP_ITEM_INDEFINITE_VOUCHER, STR_SHOP_ITEM_DISPLAY_VOUCHER }, - { STR_SHOP_ITEM_PRICE_LABEL_POPCORN, STR_SHOP_ITEM_SINGULAR_POPCORN, STR_SHOP_ITEM_PLURAL_POPCORN, STR_SHOP_ITEM_INDEFINITE_POPCORN, STR_SHOP_ITEM_DISPLAY_POPCORN }, - { STR_SHOP_ITEM_PRICE_LABEL_HOT_DOG, STR_SHOP_ITEM_SINGULAR_HOT_DOG, STR_SHOP_ITEM_PLURAL_HOT_DOG, STR_SHOP_ITEM_INDEFINITE_HOT_DOG, STR_SHOP_ITEM_DISPLAY_HOT_DOG }, - { STR_SHOP_ITEM_PRICE_LABEL_TENTACLE, STR_SHOP_ITEM_SINGULAR_TENTACLE, STR_SHOP_ITEM_PLURAL_TENTACLE, STR_SHOP_ITEM_INDEFINITE_TENTACLE, STR_SHOP_ITEM_DISPLAY_TENTACLE }, - { STR_SHOP_ITEM_PRICE_LABEL_HAT, STR_SHOP_ITEM_SINGULAR_HAT, STR_SHOP_ITEM_PLURAL_HAT, STR_SHOP_ITEM_INDEFINITE_HAT, STR_SHOP_ITEM_DISPLAY_HAT }, - { STR_SHOP_ITEM_PRICE_LABEL_TOFFEE_APPLE, STR_SHOP_ITEM_SINGULAR_TOFFEE_APPLE, STR_SHOP_ITEM_PLURAL_TOFFEE_APPLE, STR_SHOP_ITEM_INDEFINITE_TOFFEE_APPLE, STR_SHOP_ITEM_DISPLAY_TOFFEE_APPLE }, - { STR_SHOP_ITEM_PRICE_LABEL_T_SHIRT, STR_SHOP_ITEM_SINGULAR_T_SHIRT, STR_SHOP_ITEM_PLURAL_T_SHIRT, STR_SHOP_ITEM_INDEFINITE_T_SHIRT, STR_SHOP_ITEM_DISPLAY_T_SHIRT }, - { STR_SHOP_ITEM_PRICE_LABEL_DOUGHNUT, STR_SHOP_ITEM_SINGULAR_DOUGHNUT, STR_SHOP_ITEM_PLURAL_DOUGHNUT, STR_SHOP_ITEM_INDEFINITE_DOUGHNUT, STR_SHOP_ITEM_DISPLAY_DOUGHNUT }, - { STR_SHOP_ITEM_PRICE_LABEL_COFFEE, STR_SHOP_ITEM_SINGULAR_COFFEE, STR_SHOP_ITEM_PLURAL_COFFEE, STR_SHOP_ITEM_INDEFINITE_COFFEE, STR_SHOP_ITEM_DISPLAY_COFFEE }, - { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_CUP, STR_SHOP_ITEM_SINGULAR_EMPTY_CUP, STR_SHOP_ITEM_PLURAL_EMPTY_CUP, STR_SHOP_ITEM_INDEFINITE_EMPTY_CUP, STR_SHOP_ITEM_DISPLAY_EMPTY_CUP }, - { STR_SHOP_ITEM_PRICE_LABEL_FRIED_CHICKEN, STR_SHOP_ITEM_SINGULAR_FRIED_CHICKEN, STR_SHOP_ITEM_PLURAL_FRIED_CHICKEN, STR_SHOP_ITEM_INDEFINITE_FRIED_CHICKEN, STR_SHOP_ITEM_DISPLAY_FRIED_CHICKEN }, - { STR_SHOP_ITEM_PRICE_LABEL_LEMONADE, STR_SHOP_ITEM_SINGULAR_LEMONADE, STR_SHOP_ITEM_PLURAL_LEMONADE, STR_SHOP_ITEM_INDEFINITE_LEMONADE, STR_SHOP_ITEM_DISPLAY_LEMONADE }, - { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOX, STR_SHOP_ITEM_SINGULAR_EMPTY_BOX, STR_SHOP_ITEM_PLURAL_EMPTY_BOX, STR_SHOP_ITEM_INDEFINITE_EMPTY_BOX, STR_SHOP_ITEM_DISPLAY_EMPTY_BOX }, - { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOTTLE, STR_SHOP_ITEM_SINGULAR_EMPTY_BOTTLE, STR_SHOP_ITEM_PLURAL_EMPTY_BOTTLE, STR_SHOP_ITEM_INDEFINITE_EMPTY_BOTTLE, STR_SHOP_ITEM_DISPLAY_EMPTY_BOTTLE }, - { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE }, - { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE }, - { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE }, - { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE }, - { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, - { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, - { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, - { STR_SHOP_ITEM_PRICE_LABEL_PRETZEL, STR_SHOP_ITEM_SINGULAR_PRETZEL, STR_SHOP_ITEM_PLURAL_PRETZEL, STR_SHOP_ITEM_INDEFINITE_PRETZEL, STR_SHOP_ITEM_DISPLAY_PRETZEL }, - { STR_SHOP_ITEM_PRICE_LABEL_HOT_CHOCOLATE, STR_SHOP_ITEM_SINGULAR_HOT_CHOCOLATE, STR_SHOP_ITEM_PLURAL_HOT_CHOCOLATE, STR_SHOP_ITEM_INDEFINITE_HOT_CHOCOLATE, STR_SHOP_ITEM_DISPLAY_HOT_CHOCOLATE }, - { STR_SHOP_ITEM_PRICE_LABEL_ICED_TEA, STR_SHOP_ITEM_SINGULAR_ICED_TEA, STR_SHOP_ITEM_PLURAL_ICED_TEA, STR_SHOP_ITEM_INDEFINITE_ICED_TEA, STR_SHOP_ITEM_DISPLAY_ICED_TEA }, - { STR_SHOP_ITEM_PRICE_LABEL_FUNNEL_CAKE, STR_SHOP_ITEM_SINGULAR_FUNNEL_CAKE, STR_SHOP_ITEM_PLURAL_FUNNEL_CAKE, STR_SHOP_ITEM_INDEFINITE_FUNNEL_CAKE, STR_SHOP_ITEM_DISPLAY_FUNNEL_CAKE }, - { STR_SHOP_ITEM_PRICE_LABEL_SUNGLASSES, STR_SHOP_ITEM_SINGULAR_SUNGLASSES, STR_SHOP_ITEM_PLURAL_SUNGLASSES, STR_SHOP_ITEM_INDEFINITE_SUNGLASSES, STR_SHOP_ITEM_DISPLAY_SUNGLASSES }, - { STR_SHOP_ITEM_PRICE_LABEL_BEEF_NOODLES, STR_SHOP_ITEM_SINGULAR_BEEF_NOODLES, STR_SHOP_ITEM_PLURAL_BEEF_NOODLES, STR_SHOP_ITEM_INDEFINITE_BEEF_NOODLES, STR_SHOP_ITEM_DISPLAY_BEEF_NOODLES }, - { STR_SHOP_ITEM_PRICE_LABEL_FRIED_RICE_NOODLES, STR_SHOP_ITEM_SINGULAR_FRIED_RICE_NOODLES, STR_SHOP_ITEM_PLURAL_FRIED_RICE_NOODLES, STR_SHOP_ITEM_INDEFINITE_FRIED_RICE_NOODLES, STR_SHOP_ITEM_DISPLAY_FRIED_RICE_NOODLES }, - { STR_SHOP_ITEM_PRICE_LABEL_WONTON_SOUP, STR_SHOP_ITEM_SINGULAR_WONTON_SOUP, STR_SHOP_ITEM_PLURAL_WONTON_SOUP, STR_SHOP_ITEM_INDEFINITE_WONTON_SOUP, STR_SHOP_ITEM_DISPLAY_WONTON_SOUP }, - { STR_SHOP_ITEM_PRICE_LABEL_MEATBALL_SOUP, STR_SHOP_ITEM_SINGULAR_MEATBALL_SOUP, STR_SHOP_ITEM_PLURAL_MEATBALL_SOUP, STR_SHOP_ITEM_INDEFINITE_MEATBALL_SOUP, STR_SHOP_ITEM_DISPLAY_MEATBALL_SOUP }, - { STR_SHOP_ITEM_PRICE_LABEL_FRUIT_JUICE, STR_SHOP_ITEM_SINGULAR_FRUIT_JUICE, STR_SHOP_ITEM_PLURAL_FRUIT_JUICE, STR_SHOP_ITEM_INDEFINITE_FRUIT_JUICE, STR_SHOP_ITEM_DISPLAY_FRUIT_JUICE }, - { STR_SHOP_ITEM_PRICE_LABEL_SOYBEAN_MILK, STR_SHOP_ITEM_SINGULAR_SOYBEAN_MILK, STR_SHOP_ITEM_PLURAL_SOYBEAN_MILK, STR_SHOP_ITEM_INDEFINITE_SOYBEAN_MILK, STR_SHOP_ITEM_DISPLAY_SOYBEAN_MILK }, - { STR_SHOP_ITEM_PRICE_LABEL_SUJONGKWA, STR_SHOP_ITEM_SINGULAR_SUJONGKWA, STR_SHOP_ITEM_PLURAL_SUJONGKWA, STR_SHOP_ITEM_INDEFINITE_SUJONGKWA, STR_SHOP_ITEM_DISPLAY_SUJONGKWA }, - { STR_SHOP_ITEM_PRICE_LABEL_SUB_SANDWICH, STR_SHOP_ITEM_SINGULAR_SUB_SANDWICH, STR_SHOP_ITEM_PLURAL_SUB_SANDWICH, STR_SHOP_ITEM_INDEFINITE_SUB_SANDWICH, STR_SHOP_ITEM_DISPLAY_SUB_SANDWICH }, - { STR_SHOP_ITEM_PRICE_LABEL_COOKIE, STR_SHOP_ITEM_SINGULAR_COOKIE, STR_SHOP_ITEM_PLURAL_COOKIE, STR_SHOP_ITEM_INDEFINITE_COOKIE, STR_SHOP_ITEM_DISPLAY_COOKIE }, - { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOWL_RED, STR_SHOP_ITEM_SINGULAR_EMPTY_BOWL_RED, STR_SHOP_ITEM_PLURAL_EMPTY_BOWL_RED, STR_SHOP_ITEM_INDEFINITE_EMPTY_BOWL_RED, STR_SHOP_ITEM_DISPLAY_EMPTY_BOWL_RED }, - { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_DRINK_CARTON, STR_SHOP_ITEM_SINGULAR_EMPTY_DRINK_CARTON, STR_SHOP_ITEM_PLURAL_EMPTY_DRINK_CARTON, STR_SHOP_ITEM_INDEFINITE_EMPTY_DRINK_CARTON, STR_SHOP_ITEM_DISPLAY_EMPTY_DRINK_CARTON }, - { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_JUICE_CUP, STR_SHOP_ITEM_SINGULAR_EMPTY_JUICE_CUP, STR_SHOP_ITEM_PLURAL_EMPTY_JUICE_CUP, STR_SHOP_ITEM_INDEFINITE_EMPTY_JUICE_CUP, STR_SHOP_ITEM_DISPLAY_EMPTY_JUICE_CUP }, - { STR_SHOP_ITEM_PRICE_LABEL_ROAST_SAUSAGE, STR_SHOP_ITEM_SINGULAR_ROAST_SAUSAGE, STR_SHOP_ITEM_PLURAL_ROAST_SAUSAGE, STR_SHOP_ITEM_INDEFINITE_ROAST_SAUSAGE, STR_SHOP_ITEM_DISPLAY_ROAST_SAUSAGE }, - { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOWL_BLUE, STR_SHOP_ITEM_SINGULAR_EMPTY_BOWL_BLUE, STR_SHOP_ITEM_PLURAL_EMPTY_BOWL_BLUE, STR_SHOP_ITEM_INDEFINITE_EMPTY_BOWL_BLUE, STR_SHOP_ITEM_DISPLAY_EMPTY_BOWL_BLUE }, +const rct_shop_item_string_types ShopItemStringIds[SHOP_ITEM_COUNT] = { + { STR_SHOP_ITEM_PRICE_LABEL_BALLOON, + STR_SHOP_ITEM_SINGULAR_BALLOON, + STR_SHOP_ITEM_PLURAL_BALLOON, + STR_SHOP_ITEM_INDEFINITE_BALLOON, + STR_SHOP_ITEM_DISPLAY_BALLOON }, + { STR_SHOP_ITEM_PRICE_LABEL_CUDDLY_TOY, + STR_SHOP_ITEM_SINGULAR_CUDDLY_TOY, + STR_SHOP_ITEM_PLURAL_CUDDLY_TOY, + STR_SHOP_ITEM_INDEFINITE_CUDDLY_TOY, + STR_SHOP_ITEM_DISPLAY_CUDDLY_TOY }, + { STR_SHOP_ITEM_PRICE_LABEL_PARK_MAP, + STR_SHOP_ITEM_SINGULAR_PARK_MAP, + STR_SHOP_ITEM_PLURAL_PARK_MAP, + STR_SHOP_ITEM_INDEFINITE_PARK_MAP, + STR_SHOP_ITEM_DISPLAY_PARK_MAP }, + { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, + STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, + STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, + STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, + STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, + { STR_SHOP_ITEM_PRICE_LABEL_UMBRELLA, + STR_SHOP_ITEM_SINGULAR_UMBRELLA, + STR_SHOP_ITEM_PLURAL_UMBRELLA, + STR_SHOP_ITEM_INDEFINITE_UMBRELLA, + STR_SHOP_ITEM_DISPLAY_UMBRELLA }, + { STR_SHOP_ITEM_PRICE_LABEL_DRINK, + STR_SHOP_ITEM_SINGULAR_DRINK, + STR_SHOP_ITEM_PLURAL_DRINK, + STR_SHOP_ITEM_INDEFINITE_DRINK, + STR_SHOP_ITEM_DISPLAY_DRINK }, + { STR_SHOP_ITEM_PRICE_LABEL_BURGER, + STR_SHOP_ITEM_SINGULAR_BURGER, + STR_SHOP_ITEM_PLURAL_BURGER, + STR_SHOP_ITEM_INDEFINITE_BURGER, + STR_SHOP_ITEM_DISPLAY_BURGER }, + { STR_SHOP_ITEM_PRICE_LABEL_CHIPS, + STR_SHOP_ITEM_SINGULAR_CHIPS, + STR_SHOP_ITEM_PLURAL_CHIPS, + STR_SHOP_ITEM_INDEFINITE_CHIPS, + STR_SHOP_ITEM_DISPLAY_CHIPS }, + { STR_SHOP_ITEM_PRICE_LABEL_ICE_CREAM, + STR_SHOP_ITEM_SINGULAR_ICE_CREAM, + STR_SHOP_ITEM_PLURAL_ICE_CREAM, + STR_SHOP_ITEM_INDEFINITE_ICE_CREAM, + STR_SHOP_ITEM_DISPLAY_ICE_CREAM }, + { STR_SHOP_ITEM_PRICE_LABEL_CANDYFLOSS, + STR_SHOP_ITEM_SINGULAR_CANDYFLOSS, + STR_SHOP_ITEM_PLURAL_CANDYFLOSS, + STR_SHOP_ITEM_INDEFINITE_CANDYFLOSS, + STR_SHOP_ITEM_DISPLAY_CANDYFLOSS }, + { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_CAN, + STR_SHOP_ITEM_SINGULAR_EMPTY_CAN, + STR_SHOP_ITEM_PLURAL_EMPTY_CAN, + STR_SHOP_ITEM_INDEFINITE_EMPTY_CAN, + STR_SHOP_ITEM_DISPLAY_EMPTY_CAN }, + { STR_SHOP_ITEM_PRICE_LABEL_RUBBISH, + STR_SHOP_ITEM_SINGULAR_RUBBISH, + STR_SHOP_ITEM_PLURAL_RUBBISH, + STR_SHOP_ITEM_INDEFINITE_RUBBISH, + STR_SHOP_ITEM_DISPLAY_RUBBISH }, + { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BURGER_BOX, + STR_SHOP_ITEM_SINGULAR_EMPTY_BURGER_BOX, + STR_SHOP_ITEM_PLURAL_EMPTY_BURGER_BOX, + STR_SHOP_ITEM_INDEFINITE_EMPTY_BURGER_BOX, + STR_SHOP_ITEM_DISPLAY_EMPTY_BURGER_BOX }, + { STR_SHOP_ITEM_PRICE_LABEL_PIZZA, + STR_SHOP_ITEM_SINGULAR_PIZZA, + STR_SHOP_ITEM_PLURAL_PIZZA, + STR_SHOP_ITEM_INDEFINITE_PIZZA, + STR_SHOP_ITEM_DISPLAY_PIZZA }, + { STR_SHOP_ITEM_PRICE_LABEL_VOUCHER, + STR_SHOP_ITEM_SINGULAR_VOUCHER, + STR_SHOP_ITEM_PLURAL_VOUCHER, + STR_SHOP_ITEM_INDEFINITE_VOUCHER, + STR_SHOP_ITEM_DISPLAY_VOUCHER }, + { STR_SHOP_ITEM_PRICE_LABEL_POPCORN, + STR_SHOP_ITEM_SINGULAR_POPCORN, + STR_SHOP_ITEM_PLURAL_POPCORN, + STR_SHOP_ITEM_INDEFINITE_POPCORN, + STR_SHOP_ITEM_DISPLAY_POPCORN }, + { STR_SHOP_ITEM_PRICE_LABEL_HOT_DOG, + STR_SHOP_ITEM_SINGULAR_HOT_DOG, + STR_SHOP_ITEM_PLURAL_HOT_DOG, + STR_SHOP_ITEM_INDEFINITE_HOT_DOG, + STR_SHOP_ITEM_DISPLAY_HOT_DOG }, + { STR_SHOP_ITEM_PRICE_LABEL_TENTACLE, + STR_SHOP_ITEM_SINGULAR_TENTACLE, + STR_SHOP_ITEM_PLURAL_TENTACLE, + STR_SHOP_ITEM_INDEFINITE_TENTACLE, + STR_SHOP_ITEM_DISPLAY_TENTACLE }, + { STR_SHOP_ITEM_PRICE_LABEL_HAT, + STR_SHOP_ITEM_SINGULAR_HAT, + STR_SHOP_ITEM_PLURAL_HAT, + STR_SHOP_ITEM_INDEFINITE_HAT, + STR_SHOP_ITEM_DISPLAY_HAT }, + { STR_SHOP_ITEM_PRICE_LABEL_TOFFEE_APPLE, + STR_SHOP_ITEM_SINGULAR_TOFFEE_APPLE, + STR_SHOP_ITEM_PLURAL_TOFFEE_APPLE, + STR_SHOP_ITEM_INDEFINITE_TOFFEE_APPLE, + STR_SHOP_ITEM_DISPLAY_TOFFEE_APPLE }, + { STR_SHOP_ITEM_PRICE_LABEL_T_SHIRT, + STR_SHOP_ITEM_SINGULAR_T_SHIRT, + STR_SHOP_ITEM_PLURAL_T_SHIRT, + STR_SHOP_ITEM_INDEFINITE_T_SHIRT, + STR_SHOP_ITEM_DISPLAY_T_SHIRT }, + { STR_SHOP_ITEM_PRICE_LABEL_DOUGHNUT, + STR_SHOP_ITEM_SINGULAR_DOUGHNUT, + STR_SHOP_ITEM_PLURAL_DOUGHNUT, + STR_SHOP_ITEM_INDEFINITE_DOUGHNUT, + STR_SHOP_ITEM_DISPLAY_DOUGHNUT }, + { STR_SHOP_ITEM_PRICE_LABEL_COFFEE, + STR_SHOP_ITEM_SINGULAR_COFFEE, + STR_SHOP_ITEM_PLURAL_COFFEE, + STR_SHOP_ITEM_INDEFINITE_COFFEE, + STR_SHOP_ITEM_DISPLAY_COFFEE }, + { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_CUP, + STR_SHOP_ITEM_SINGULAR_EMPTY_CUP, + STR_SHOP_ITEM_PLURAL_EMPTY_CUP, + STR_SHOP_ITEM_INDEFINITE_EMPTY_CUP, + STR_SHOP_ITEM_DISPLAY_EMPTY_CUP }, + { STR_SHOP_ITEM_PRICE_LABEL_FRIED_CHICKEN, + STR_SHOP_ITEM_SINGULAR_FRIED_CHICKEN, + STR_SHOP_ITEM_PLURAL_FRIED_CHICKEN, + STR_SHOP_ITEM_INDEFINITE_FRIED_CHICKEN, + STR_SHOP_ITEM_DISPLAY_FRIED_CHICKEN }, + { STR_SHOP_ITEM_PRICE_LABEL_LEMONADE, + STR_SHOP_ITEM_SINGULAR_LEMONADE, + STR_SHOP_ITEM_PLURAL_LEMONADE, + STR_SHOP_ITEM_INDEFINITE_LEMONADE, + STR_SHOP_ITEM_DISPLAY_LEMONADE }, + { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOX, + STR_SHOP_ITEM_SINGULAR_EMPTY_BOX, + STR_SHOP_ITEM_PLURAL_EMPTY_BOX, + STR_SHOP_ITEM_INDEFINITE_EMPTY_BOX, + STR_SHOP_ITEM_DISPLAY_EMPTY_BOX }, + { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOTTLE, + STR_SHOP_ITEM_SINGULAR_EMPTY_BOTTLE, + STR_SHOP_ITEM_PLURAL_EMPTY_BOTTLE, + STR_SHOP_ITEM_INDEFINITE_EMPTY_BOTTLE, + STR_SHOP_ITEM_DISPLAY_EMPTY_BOTTLE }, + { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE }, + { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE }, + { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE }, + { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE }, + { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, + STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, + STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, + STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, + STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, + { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, + STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, + STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, + STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, + STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, + { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, + STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, + STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, + STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, + STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, + { STR_SHOP_ITEM_PRICE_LABEL_PRETZEL, + STR_SHOP_ITEM_SINGULAR_PRETZEL, + STR_SHOP_ITEM_PLURAL_PRETZEL, + STR_SHOP_ITEM_INDEFINITE_PRETZEL, + STR_SHOP_ITEM_DISPLAY_PRETZEL }, + { STR_SHOP_ITEM_PRICE_LABEL_HOT_CHOCOLATE, + STR_SHOP_ITEM_SINGULAR_HOT_CHOCOLATE, + STR_SHOP_ITEM_PLURAL_HOT_CHOCOLATE, + STR_SHOP_ITEM_INDEFINITE_HOT_CHOCOLATE, + STR_SHOP_ITEM_DISPLAY_HOT_CHOCOLATE }, + { STR_SHOP_ITEM_PRICE_LABEL_ICED_TEA, + STR_SHOP_ITEM_SINGULAR_ICED_TEA, + STR_SHOP_ITEM_PLURAL_ICED_TEA, + STR_SHOP_ITEM_INDEFINITE_ICED_TEA, + STR_SHOP_ITEM_DISPLAY_ICED_TEA }, + { STR_SHOP_ITEM_PRICE_LABEL_FUNNEL_CAKE, + STR_SHOP_ITEM_SINGULAR_FUNNEL_CAKE, + STR_SHOP_ITEM_PLURAL_FUNNEL_CAKE, + STR_SHOP_ITEM_INDEFINITE_FUNNEL_CAKE, + STR_SHOP_ITEM_DISPLAY_FUNNEL_CAKE }, + { STR_SHOP_ITEM_PRICE_LABEL_SUNGLASSES, + STR_SHOP_ITEM_SINGULAR_SUNGLASSES, + STR_SHOP_ITEM_PLURAL_SUNGLASSES, + STR_SHOP_ITEM_INDEFINITE_SUNGLASSES, + STR_SHOP_ITEM_DISPLAY_SUNGLASSES }, + { STR_SHOP_ITEM_PRICE_LABEL_BEEF_NOODLES, + STR_SHOP_ITEM_SINGULAR_BEEF_NOODLES, + STR_SHOP_ITEM_PLURAL_BEEF_NOODLES, + STR_SHOP_ITEM_INDEFINITE_BEEF_NOODLES, + STR_SHOP_ITEM_DISPLAY_BEEF_NOODLES }, + { STR_SHOP_ITEM_PRICE_LABEL_FRIED_RICE_NOODLES, + STR_SHOP_ITEM_SINGULAR_FRIED_RICE_NOODLES, + STR_SHOP_ITEM_PLURAL_FRIED_RICE_NOODLES, + STR_SHOP_ITEM_INDEFINITE_FRIED_RICE_NOODLES, + STR_SHOP_ITEM_DISPLAY_FRIED_RICE_NOODLES }, + { STR_SHOP_ITEM_PRICE_LABEL_WONTON_SOUP, + STR_SHOP_ITEM_SINGULAR_WONTON_SOUP, + STR_SHOP_ITEM_PLURAL_WONTON_SOUP, + STR_SHOP_ITEM_INDEFINITE_WONTON_SOUP, + STR_SHOP_ITEM_DISPLAY_WONTON_SOUP }, + { STR_SHOP_ITEM_PRICE_LABEL_MEATBALL_SOUP, + STR_SHOP_ITEM_SINGULAR_MEATBALL_SOUP, + STR_SHOP_ITEM_PLURAL_MEATBALL_SOUP, + STR_SHOP_ITEM_INDEFINITE_MEATBALL_SOUP, + STR_SHOP_ITEM_DISPLAY_MEATBALL_SOUP }, + { STR_SHOP_ITEM_PRICE_LABEL_FRUIT_JUICE, + STR_SHOP_ITEM_SINGULAR_FRUIT_JUICE, + STR_SHOP_ITEM_PLURAL_FRUIT_JUICE, + STR_SHOP_ITEM_INDEFINITE_FRUIT_JUICE, + STR_SHOP_ITEM_DISPLAY_FRUIT_JUICE }, + { STR_SHOP_ITEM_PRICE_LABEL_SOYBEAN_MILK, + STR_SHOP_ITEM_SINGULAR_SOYBEAN_MILK, + STR_SHOP_ITEM_PLURAL_SOYBEAN_MILK, + STR_SHOP_ITEM_INDEFINITE_SOYBEAN_MILK, + STR_SHOP_ITEM_DISPLAY_SOYBEAN_MILK }, + { STR_SHOP_ITEM_PRICE_LABEL_SUJONGKWA, + STR_SHOP_ITEM_SINGULAR_SUJONGKWA, + STR_SHOP_ITEM_PLURAL_SUJONGKWA, + STR_SHOP_ITEM_INDEFINITE_SUJONGKWA, + STR_SHOP_ITEM_DISPLAY_SUJONGKWA }, + { STR_SHOP_ITEM_PRICE_LABEL_SUB_SANDWICH, + STR_SHOP_ITEM_SINGULAR_SUB_SANDWICH, + STR_SHOP_ITEM_PLURAL_SUB_SANDWICH, + STR_SHOP_ITEM_INDEFINITE_SUB_SANDWICH, + STR_SHOP_ITEM_DISPLAY_SUB_SANDWICH }, + { STR_SHOP_ITEM_PRICE_LABEL_COOKIE, + STR_SHOP_ITEM_SINGULAR_COOKIE, + STR_SHOP_ITEM_PLURAL_COOKIE, + STR_SHOP_ITEM_INDEFINITE_COOKIE, + STR_SHOP_ITEM_DISPLAY_COOKIE }, + { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOWL_RED, + STR_SHOP_ITEM_SINGULAR_EMPTY_BOWL_RED, + STR_SHOP_ITEM_PLURAL_EMPTY_BOWL_RED, + STR_SHOP_ITEM_INDEFINITE_EMPTY_BOWL_RED, + STR_SHOP_ITEM_DISPLAY_EMPTY_BOWL_RED }, + { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_DRINK_CARTON, + STR_SHOP_ITEM_SINGULAR_EMPTY_DRINK_CARTON, + STR_SHOP_ITEM_PLURAL_EMPTY_DRINK_CARTON, + STR_SHOP_ITEM_INDEFINITE_EMPTY_DRINK_CARTON, + STR_SHOP_ITEM_DISPLAY_EMPTY_DRINK_CARTON }, + { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_JUICE_CUP, + STR_SHOP_ITEM_SINGULAR_EMPTY_JUICE_CUP, + STR_SHOP_ITEM_PLURAL_EMPTY_JUICE_CUP, + STR_SHOP_ITEM_INDEFINITE_EMPTY_JUICE_CUP, + STR_SHOP_ITEM_DISPLAY_EMPTY_JUICE_CUP }, + { STR_SHOP_ITEM_PRICE_LABEL_ROAST_SAUSAGE, + STR_SHOP_ITEM_SINGULAR_ROAST_SAUSAGE, + STR_SHOP_ITEM_PLURAL_ROAST_SAUSAGE, + STR_SHOP_ITEM_INDEFINITE_ROAST_SAUSAGE, + STR_SHOP_ITEM_DISPLAY_ROAST_SAUSAGE }, + { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOWL_BLUE, + STR_SHOP_ITEM_SINGULAR_EMPTY_BOWL_BLUE, + STR_SHOP_ITEM_PLURAL_EMPTY_BOWL_BLUE, + STR_SHOP_ITEM_INDEFINITE_EMPTY_BOWL_BLUE, + STR_SHOP_ITEM_DISPLAY_EMPTY_BOWL_BLUE }, }; -const uint32_t ShopItemImage[SHOP_ITEM_COUNT] = -{ +const uint32_t ShopItemImage[SHOP_ITEM_COUNT] = { SPR_SHOP_ITEM_BALLOON, SPR_SHOP_ITEM_TOY, SPR_SHOP_ITEM_MAP, @@ -223,10 +420,10 @@ const uint32_t ShopItemImage[SHOP_ITEM_COUNT] = SPR_SHOP_ITEM_LEMONADE, SPR_SHOP_ITEM_EMPTY_BOX, SPR_SHOP_ITEM_EMPTY_BOTTLE, - 0, // 28 - 0, // 29 - 0, // 30 - 0, // 31 + 0, // 28 + 0, // 29 + 0, // 30 + 0, // 31 SPR_SHOP_ITEM_PHOTO2, SPR_SHOP_ITEM_PHOTO3, SPR_SHOP_ITEM_PHOTO4, @@ -277,7 +474,7 @@ money32 shop_item_get_common_price(Ride* forRide, int32_t shopItem) Ride* ride; int32_t i; - FOR_ALL_RIDES(i, ride) + FOR_ALL_RIDES (i, ride) { if (ride != forRide) { @@ -307,8 +504,8 @@ money32 shop_item_get_common_price(Ride* forRide, int32_t shopItem) bool shop_item_is_photo(int32_t shopItem) { return ( - shopItem == SHOP_ITEM_PHOTO || shopItem == SHOP_ITEM_PHOTO2 || - shopItem == SHOP_ITEM_PHOTO3 || shopItem == SHOP_ITEM_PHOTO4); + shopItem == SHOP_ITEM_PHOTO || shopItem == SHOP_ITEM_PHOTO2 || shopItem == SHOP_ITEM_PHOTO3 + || shopItem == SHOP_ITEM_PHOTO4); } bool shop_item_has_common_price(int32_t shopItem) diff --git a/src/openrct2/ride/ShopItem.h b/src/openrct2/ride/ShopItem.h index 7d5cbd89d4..159ce77526 100644 --- a/src/openrct2/ride/ShopItem.h +++ b/src/openrct2/ride/ShopItem.h @@ -80,11 +80,11 @@ struct rct_shop_item_stats struct rct_shop_item_string_types { - rct_string_id price_label; // Balloon price: - rct_string_id singular; // Balloon - rct_string_id plural; // Balloons - rct_string_id indefinite; // a Balloon - rct_string_id display; // "Diamond Heights" Balloon + rct_string_id price_label; // Balloon price: + rct_string_id singular; // Balloon + rct_string_id plural; // Balloons + rct_string_id indefinite; // a Balloon + rct_string_id display; // "Diamond Heights" Balloon }; extern uint32_t gSamePriceThroughoutParkA; @@ -98,7 +98,7 @@ money32 get_shop_item_cost(int32_t shopItem); money16 get_shop_base_value(int32_t shopItem); money16 get_shop_hot_value(int32_t shopItem); money16 get_shop_cold_value(int32_t shopItem); -money32 shop_item_get_common_price(Ride *forRide, int32_t shopItem); +money32 shop_item_get_common_price(Ride* forRide, int32_t shopItem); bool shop_item_is_photo(int32_t shopItem); bool shop_item_has_common_price(int32_t shopItem); bool shop_item_is_food_or_drink(int32_t shopItem); diff --git a/src/openrct2/ride/Station.cpp b/src/openrct2/ride/Station.cpp index 8e8c42e429..79e88c3d5c 100644 --- a/src/openrct2/ride/Station.cpp +++ b/src/openrct2/ride/Station.cpp @@ -7,43 +7,44 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ -#include "../Game.h" #include "Station.h" -#include "Track.h" + +#include "../Game.h" #include "../scenario/Scenario.h" #include "../world/Sprite.h" +#include "Track.h" -static void ride_update_station_blocksection(Ride * ride, int32_t stationIndex); -static void ride_update_station_bumpercar(Ride * ride, int32_t stationIndex); -static void ride_update_station_normal(Ride * ride, int32_t stationIndex); -static void ride_update_station_race(Ride * ride, int32_t stationIndex); -static void ride_race_init_vehicle_speeds(Ride * ride); -static void ride_invalidate_station_start(Ride * ride, int32_t stationIndex, bool greenLight); +static void ride_update_station_blocksection(Ride* ride, int32_t stationIndex); +static void ride_update_station_bumpercar(Ride* ride, int32_t stationIndex); +static void ride_update_station_normal(Ride* ride, int32_t stationIndex); +static void ride_update_station_race(Ride* ride, int32_t stationIndex); +static void ride_race_init_vehicle_speeds(Ride* ride); +static void ride_invalidate_station_start(Ride* ride, int32_t stationIndex, bool greenLight); /** * * rct2: 0x006ABFFB */ -void ride_update_station(Ride * ride, int32_t stationIndex) +void ride_update_station(Ride* ride, int32_t stationIndex) { if (ride->station_starts[stationIndex].xy == RCT_XY8_UNDEFINED) return; switch (ride->mode) { - case RIDE_MODE_RACE: - ride_update_station_race(ride, stationIndex); - break; - case RIDE_MODE_BUMPERCAR: - ride_update_station_bumpercar(ride, stationIndex); - break; - case RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED: - case RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED: - ride_update_station_blocksection(ride, stationIndex); - break; - default: - ride_update_station_normal(ride, stationIndex); - break; + case RIDE_MODE_RACE: + ride_update_station_race(ride, stationIndex); + break; + case RIDE_MODE_BUMPERCAR: + ride_update_station_bumpercar(ride, stationIndex); + break; + case RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED: + case RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED: + ride_update_station_blocksection(ride, stationIndex); + break; + default: + ride_update_station_normal(ride, stationIndex); + break; } } @@ -51,15 +52,16 @@ void ride_update_station(Ride * ride, int32_t stationIndex) * * rct2: 0x006AC0A1 */ -static void ride_update_station_blocksection(Ride * ride, int32_t stationIndex) +static void ride_update_station_blocksection(Ride* ride, int32_t stationIndex) { - rct_tile_element * tileElement = ride_get_station_start_track_element(ride, stationIndex); + rct_tile_element* tileElement = ride_get_station_start_track_element(ride, stationIndex); if ((ride->status == RIDE_STATUS_CLOSED && ride->num_riders == 0) || (tileElement != nullptr && tileElement->flags & 0x20)) { ride->station_depart[stationIndex] &= ~STATION_DEPART_FLAG; - if ((ride->station_depart[stationIndex] & STATION_DEPART_FLAG) || (tileElement != nullptr && tile_element_get_green_light(tileElement))) + if ((ride->station_depart[stationIndex] & STATION_DEPART_FLAG) + || (tileElement != nullptr && tile_element_get_green_light(tileElement))) ride_invalidate_station_start(ride, stationIndex, false); } else @@ -80,12 +82,11 @@ static void ride_update_station_blocksection(Ride * ride, int32_t stationIndex) * * rct2: 0x006AC12B */ -static void ride_update_station_bumpercar(Ride * ride, int32_t stationIndex) +static void ride_update_station_bumpercar(Ride* ride, int32_t stationIndex) { // Change of station depart flag should really call invalidate_station_start // but since dodgems do not have station lights there is no point. - if (ride->status == RIDE_STATUS_CLOSED || - (ride->lifecycle_flags & (RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED))) + if (ride->status == RIDE_STATUS_CLOSED || (ride->lifecycle_flags & (RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED))) { ride->station_depart[stationIndex] &= ~STATION_DEPART_FLAG; return; @@ -98,7 +99,7 @@ static void ride_update_station_bumpercar(Ride * ride, int32_t stationIndex) int32_t dh = (dx >> 8) & 0xFF; for (size_t i = 0; i < ride->num_vehicles; i++) { - rct_vehicle * vehicle = &(get_sprite(ride->vehicles[i])->vehicle); + rct_vehicle* vehicle = &(get_sprite(ride->vehicles[i])->vehicle); if (vehicle->var_CE < dh || (vehicle->var_CE < dh && vehicle->sub_state > dl)) continue; @@ -116,7 +117,7 @@ static void ride_update_station_bumpercar(Ride * ride, int32_t stationIndex) // Check if all vehicles are ready to go for (size_t i = 0; i < ride->num_vehicles; i++) { - rct_vehicle * vehicle = &(get_sprite(ride->vehicles[i])->vehicle); + rct_vehicle* vehicle = &(get_sprite(ride->vehicles[i])->vehicle); if (vehicle->status != VEHICLE_STATUS_WAITING_TO_DEPART) { ride->station_depart[stationIndex] &= ~STATION_DEPART_FLAG; @@ -135,11 +136,11 @@ static void ride_update_station_bumpercar(Ride * ride, int32_t stationIndex) * * rct2: 0x006AC02C */ -static void ride_update_station_normal(Ride * ride, int32_t stationIndex) +static void ride_update_station_normal(Ride* ride, int32_t stationIndex) { int32_t time = ride->station_depart[stationIndex] & STATION_DEPART_MASK; - if ((ride->lifecycle_flags & (RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED)) || - (ride->status == RIDE_STATUS_CLOSED && ride->num_riders == 0)) + if ((ride->lifecycle_flags & (RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED)) + || (ride->status == RIDE_STATUS_CLOSED && ride->num_riders == 0)) { if (time != 0 && time != 127 && !(gCurrentTicks & 7)) time--; @@ -169,10 +170,9 @@ static void ride_update_station_normal(Ride * ride, int32_t stationIndex) * * rct2: 0x006AC1DF */ -static void ride_update_station_race(Ride * ride, int32_t stationIndex) +static void ride_update_station_race(Ride* ride, int32_t stationIndex) { - if (ride->status == RIDE_STATUS_CLOSED || - (ride->lifecycle_flags & (RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED))) + if (ride->status == RIDE_STATUS_CLOSED || (ride->lifecycle_flags & (RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED))) { if (ride->station_depart[stationIndex] & STATION_DEPART_FLAG) { @@ -187,13 +187,13 @@ static void ride_update_station_race(Ride * ride, int32_t stationIndex) int32_t numLaps = ride->num_laps; for (size_t i = 0; i < ride->num_vehicles; i++) { - rct_vehicle * vehicle = &(get_sprite(ride->vehicles[i])->vehicle); + rct_vehicle* vehicle = &(get_sprite(ride->vehicles[i])->vehicle); if (vehicle->status != VEHICLE_STATUS_WAITING_TO_DEPART && vehicle->num_laps >= numLaps) { // Found a winner if (vehicle->num_peeps != 0) { - rct_peep * peep = &(get_sprite(vehicle->peep[0])->peep); + rct_peep* peep = &(get_sprite(vehicle->peep[0])->peep); ride->race_winner = peep->sprite_index; ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST; } @@ -217,7 +217,7 @@ static void ride_update_station_race(Ride * ride, int32_t stationIndex) // Check if all vehicles are ready to go for (size_t i = 0; i < ride->num_vehicles; i++) { - rct_vehicle * vehicle = &(get_sprite(ride->vehicles[i])->vehicle); + rct_vehicle* vehicle = &(get_sprite(ride->vehicles[i])->vehicle); if (vehicle->status != VEHICLE_STATUS_WAITING_TO_DEPART && vehicle->status != VEHICLE_STATUS_DEPARTING) { if (ride->station_depart[stationIndex] & STATION_DEPART_FLAG) @@ -247,38 +247,38 @@ static void ride_update_station_race(Ride * ride, int32_t stationIndex) * set the speed of the go kart type vehicle at the start to a random value or alter if peep name is an easter egg * @param ride (esi) */ -static void ride_race_init_vehicle_speeds(Ride * ride) +static void ride_race_init_vehicle_speeds(Ride* ride) { for (size_t i = 0; i < ride->num_vehicles; i++) { - rct_vehicle * vehicle = &get_sprite(ride->vehicles[i])->vehicle; + rct_vehicle* vehicle = &get_sprite(ride->vehicles[i])->vehicle; vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_6; - rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); + rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); vehicle->speed = (scenario_rand() & 16) - 8 + rideEntry->vehicles[vehicle->vehicle_type].powered_max_speed; if (vehicle->num_peeps != 0) { - rct_peep * peep = &get_sprite(vehicle->peep[0])->peep; + rct_peep* peep = &get_sprite(vehicle->peep[0])->peep; switch (peep_get_easteregg_name_id(peep)) { - case EASTEREGG_PEEP_NAME_MICHAEL_SCHUMACHER: - vehicle->speed += 35; - break; - case EASTEREGG_PEEP_NAME_JACQUES_VILLENEUVE: - vehicle->speed += 25; - break; - case EASTEREGG_PEEP_NAME_DAMON_HILL: - vehicle->speed += 55; - break; - case EASTEREGG_PEEP_NAME_CHRIS_SAWYER: - vehicle->speed += 14; - break; - case EASTEREGG_PEEP_NAME_MR_BEAN: - vehicle->speed = 9; - break; + case EASTEREGG_PEEP_NAME_MICHAEL_SCHUMACHER: + vehicle->speed += 35; + break; + case EASTEREGG_PEEP_NAME_JACQUES_VILLENEUVE: + vehicle->speed += 25; + break; + case EASTEREGG_PEEP_NAME_DAMON_HILL: + vehicle->speed += 55; + break; + case EASTEREGG_PEEP_NAME_CHRIS_SAWYER: + vehicle->speed += 14; + break; + case EASTEREGG_PEEP_NAME_MR_BEAN: + vehicle->speed = 9; + break; } } } @@ -288,11 +288,11 @@ static void ride_race_init_vehicle_speeds(Ride * ride) * * rct2: 0x006AC2C7 */ -static void ride_invalidate_station_start(Ride * ride, int32_t stationIndex, bool greenLight) +static void ride_invalidate_station_start(Ride* ride, int32_t stationIndex, bool greenLight) { int32_t x = ride->station_starts[stationIndex].x * 32; int32_t y = ride->station_starts[stationIndex].y * 32; - rct_tile_element * tileElement = ride_get_station_start_track_element(ride, stationIndex); + rct_tile_element* tileElement = ride_get_station_start_track_element(ride, stationIndex); // If no station track found return if (tileElement == nullptr) @@ -304,40 +304,38 @@ static void ride_invalidate_station_start(Ride * ride, int32_t stationIndex, boo map_invalidate_tile_zoom1(x, y, tileElement->base_height * 8, tileElement->clearance_height * 8); } -rct_tile_element * ride_get_station_start_track_element(Ride * ride, int32_t stationIndex) +rct_tile_element* ride_get_station_start_track_element(Ride* ride, int32_t stationIndex) { int32_t x = ride->station_starts[stationIndex].x; int32_t y = ride->station_starts[stationIndex].y; int32_t z = ride->station_heights[stationIndex]; // Find the station track element - rct_tile_element * tileElement = map_get_first_element_at(x, y); + rct_tile_element* tileElement = map_get_first_element_at(x, y); do { if (tileElement->GetType() == TILE_ELEMENT_TYPE_TRACK && z == tileElement->base_height) return tileElement; - } - while (!(tileElement++)->IsLastForTile()); + } while (!(tileElement++)->IsLastForTile()); return nullptr; } -rct_tile_element * ride_get_station_exit_element(int32_t x, int32_t y, int32_t z) +rct_tile_element* ride_get_station_exit_element(int32_t x, int32_t y, int32_t z) { // Find the station track element - rct_tile_element * tileElement = map_get_first_element_at(x, y); + rct_tile_element* tileElement = map_get_first_element_at(x, y); do { if (tileElement->GetType() == TILE_ELEMENT_TYPE_ENTRANCE && z == tileElement->base_height) return tileElement; - } - while (!(tileElement++)->IsLastForTile()); + } while (!(tileElement++)->IsLastForTile()); return nullptr; } -int8_t ride_get_first_valid_station_exit(Ride * ride) +int8_t ride_get_first_valid_station_exit(Ride* ride) { for (int32_t i = 0; i < MAX_STATIONS; i++) { @@ -349,7 +347,7 @@ int8_t ride_get_first_valid_station_exit(Ride * ride) return -1; } -int8_t ride_get_first_valid_station_start(const Ride * ride) +int8_t ride_get_first_valid_station_start(const Ride* ride) { for (int8_t i = 0; i < MAX_STATIONS; i++) { @@ -361,7 +359,7 @@ int8_t ride_get_first_valid_station_start(const Ride * ride) return -1; } -int8_t ride_get_first_empty_station_start(const Ride * ride) +int8_t ride_get_first_empty_station_start(const Ride* ride) { for (int8_t i = 0; i < MAX_STATIONS; i++) { @@ -375,46 +373,42 @@ int8_t ride_get_first_empty_station_start(const Ride * ride) TileCoordsXYZD ride_get_entrance_location(const int32_t rideIndex, const int32_t stationIndex) { - const Ride * ride = get_ride(rideIndex); + const Ride* ride = get_ride(rideIndex); return ride->entrances[stationIndex]; } TileCoordsXYZD ride_get_exit_location(const int32_t rideIndex, const int32_t stationIndex) { - const Ride * ride = get_ride(rideIndex); + const Ride* ride = get_ride(rideIndex); return ride->exits[stationIndex]; } -TileCoordsXYZD ride_get_entrance_location(const Ride * ride, const int32_t stationIndex) +TileCoordsXYZD ride_get_entrance_location(const Ride* ride, const int32_t stationIndex) { return ride->entrances[stationIndex]; } -TileCoordsXYZD ride_get_exit_location(const Ride * ride, const int32_t stationIndex) +TileCoordsXYZD ride_get_exit_location(const Ride* ride, const int32_t stationIndex) { return ride->exits[stationIndex]; } -void ride_clear_entrance_location( - Ride * ride, - const int32_t stationIndex) +void ride_clear_entrance_location(Ride* ride, const int32_t stationIndex) { ride->entrances[stationIndex].x = COORDS_NULL; } -void ride_clear_exit_location( - Ride * ride, - const int32_t stationIndex) +void ride_clear_exit_location(Ride* ride, const int32_t stationIndex) { ride->exits[stationIndex].x = COORDS_NULL; } -void ride_set_entrance_location(Ride * ride, const int32_t stationIndex, const TileCoordsXYZD location) +void ride_set_entrance_location(Ride* ride, const int32_t stationIndex, const TileCoordsXYZD location) { ride->entrances[stationIndex] = location; } -void ride_set_exit_location(Ride * ride, const int32_t stationIndex, const TileCoordsXYZD location) +void ride_set_exit_location(Ride* ride, const int32_t stationIndex, const TileCoordsXYZD location) { ride->exits[stationIndex] = location; } diff --git a/src/openrct2/ride/Station.h b/src/openrct2/ride/Station.h index a252f0dd00..174f365280 100644 --- a/src/openrct2/ride/Station.h +++ b/src/openrct2/ride/Station.h @@ -12,18 +12,18 @@ #include "../common.h" #include "Ride.h" -void ride_update_station(Ride * ride, int32_t stationIndex); -int8_t ride_get_first_valid_station_exit(Ride * ride); -int8_t ride_get_first_valid_station_start(const Ride * ride); -int8_t ride_get_first_empty_station_start(const Ride * ride); +void ride_update_station(Ride* ride, int32_t stationIndex); +int8_t ride_get_first_valid_station_exit(Ride* ride); +int8_t ride_get_first_valid_station_start(const Ride* ride); +int8_t ride_get_first_empty_station_start(const Ride* ride); TileCoordsXYZD ride_get_entrance_location(const int32_t rideIndex, const int32_t stationIndex); TileCoordsXYZD ride_get_exit_location(const int32_t rideIndex, const int32_t stationIndex); -TileCoordsXYZD ride_get_entrance_location(const Ride * ride, const int32_t stationIndex); -TileCoordsXYZD ride_get_exit_location(const Ride * ride, const int32_t stationIndex); +TileCoordsXYZD ride_get_entrance_location(const Ride* ride, const int32_t stationIndex); +TileCoordsXYZD ride_get_exit_location(const Ride* ride, const int32_t stationIndex); -void ride_clear_entrance_location(Ride * ride, const int32_t stationIndex); -void ride_clear_exit_location(Ride * ride, const int32_t stationIndex); +void ride_clear_entrance_location(Ride* ride, const int32_t stationIndex); +void ride_clear_exit_location(Ride* ride, const int32_t stationIndex); -void ride_set_entrance_location(Ride * ride, const int32_t stationIndex, const TileCoordsXYZD location); -void ride_set_exit_location(Ride * ride, const int32_t stationIndex, const TileCoordsXYZD location); +void ride_set_entrance_location(Ride* ride, const int32_t stationIndex, const TileCoordsXYZD location); +void ride_set_exit_location(Ride* ride, const int32_t stationIndex, const TileCoordsXYZD location); diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index 03e80da97e..37d089a657 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -7,10 +7,12 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ -#include "../audio/audio.h" +#include "Track.h" + #include "../Cheats.h" -#include "../config/Config.h" #include "../Game.h" +#include "../audio/audio.h" +#include "../config/Config.h" #include "../interface/Viewport.h" #include "../localisation/Localisation.h" #include "../management/Finance.h" @@ -27,10 +29,9 @@ #include "../world/Surface.h" #include "Ride.h" #include "RideData.h" -#include "RideRatings.h" #include "RideGroupManager.h" +#include "RideRatings.h" #include "Station.h" -#include "Track.h" #include "TrackData.h" #include "TrackDesign.h" @@ -564,45 +565,42 @@ const rct_trackdefinition FlatRideTrackDefinitions[256] = /** * Helper method to determine if a connects to b by its bank and angle, not location. */ -int32_t track_is_connected_by_shape(rct_tile_element * a, rct_tile_element * b) +int32_t track_is_connected_by_shape(rct_tile_element* a, rct_tile_element* b) { int32_t trackType, aBank, aAngle, bBank, bAngle; trackType = track_element_get_type(a); - aBank = TrackDefinitions[trackType].bank_end; - aAngle = TrackDefinitions[trackType].vangle_end; - aBank = track_get_actual_bank(a, aBank); + aBank = TrackDefinitions[trackType].bank_end; + aAngle = TrackDefinitions[trackType].vangle_end; + aBank = track_get_actual_bank(a, aBank); trackType = track_element_get_type(b); - bBank = TrackDefinitions[trackType].bank_start; - bAngle = TrackDefinitions[trackType].vangle_start; - bBank = track_get_actual_bank(b, bBank); + bBank = TrackDefinitions[trackType].bank_start; + bAngle = TrackDefinitions[trackType].vangle_start; + bBank = track_get_actual_bank(b, bBank); return aBank == bBank && aAngle == bAngle; } -const rct_preview_track * get_track_def_from_ride(Ride * ride, int32_t trackType) +const rct_preview_track* get_track_def_from_ride(Ride* ride, int32_t trackType) { - return ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE) ? - FlatRideTrackBlocks[trackType] : - TrackBlocks[trackType]; + return ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE) ? FlatRideTrackBlocks[trackType] : TrackBlocks[trackType]; } -const rct_track_coordinates * get_track_coord_from_ride(Ride * ride, int32_t trackType) +const rct_track_coordinates* get_track_coord_from_ride(Ride* ride, int32_t trackType) { - return ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE) ? - &FlatTrackCoordinates[trackType] : - &TrackCoordinates[trackType]; + return ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE) ? &FlatTrackCoordinates[trackType] + : &TrackCoordinates[trackType]; } -const rct_preview_track * get_track_def_from_ride_index(int32_t rideIndex, int32_t trackType) +const rct_preview_track* get_track_def_from_ride_index(int32_t rideIndex, int32_t trackType) { return get_track_def_from_ride(get_ride(rideIndex), trackType); } -static rct_tile_element * find_station_element(int32_t x, int32_t y, int32_t z, int32_t direction, int32_t rideIndex) +static rct_tile_element* find_station_element(int32_t x, int32_t y, int32_t z, int32_t direction, int32_t rideIndex) { - rct_tile_element * tileElement = map_get_first_element_at(x >> 5, y >> 5); + rct_tile_element* tileElement = map_get_first_element_at(x >> 5, y >> 5); do { if (z != tileElement->base_height) @@ -617,18 +615,15 @@ static rct_tile_element * find_station_element(int32_t x, int32_t y, int32_t z, continue; return tileElement; - } - while (!(tileElement++)->IsLastForTile()); + } while (!(tileElement++)->IsLastForTile()); return nullptr; } -static void ride_remove_station(Ride * ride, int32_t x, int32_t y, int32_t z) +static void ride_remove_station(Ride* ride, int32_t x, int32_t y, int32_t z) { for (int32_t i = 0; i < MAX_STATIONS; i++) { - if (ride->station_starts[i].x == (x >> 5) && - ride->station_starts[i].y == (y >> 5) && - ride->station_heights[i] == z) + if (ride->station_starts[i].x == (x >> 5) && ride->station_starts[i].y == (y >> 5) && ride->station_heights[i] == z) { ride->station_starts[i].xy = RCT_XY8_UNDEFINED; ride->num_stations--; @@ -643,13 +638,13 @@ static void ride_remove_station(Ride * ride, int32_t x, int32_t y, int32_t z) */ static bool track_add_station_element(int32_t x, int32_t y, int32_t z, int32_t direction, int32_t rideIndex, int32_t flags) { - int32_t stationX0 = x; - int32_t stationY0 = y; - int32_t stationX1 = x; - int32_t stationY1 = y; + int32_t stationX0 = x; + int32_t stationY0 = y; + int32_t stationX1 = x; + int32_t stationY1 = y; int32_t stationLength = 1; - Ride * ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_3)) { if (ride->num_stations >= MAX_STATIONS) @@ -664,15 +659,15 @@ static bool track_add_station_element(int32_t x, int32_t y, int32_t z, int32_t d ride->station_starts[stationIndex].x = (x >> 5); ride->station_starts[stationIndex].y = (y >> 5); - ride->station_heights[stationIndex] = z; - ride->station_depart[stationIndex] = 1; - ride->station_length[stationIndex] = 0; + ride->station_heights[stationIndex] = z; + ride->station_depart[stationIndex] = 1; + ride->station_length[stationIndex] = 0; ride->num_stations++; } return true; } - rct_tile_element * stationElement; + rct_tile_element* stationElement; // Search backwards for more station x = stationX0; @@ -697,8 +692,7 @@ static bool track_add_station_element(int32_t x, int32_t y, int32_t z, int32_t d stationY0 = y; stationLength++; } - } - while (stationElement != nullptr); + } while (stationElement != nullptr); // Search forwards for more station x = stationX1; @@ -723,8 +717,7 @@ static bool track_add_station_element(int32_t x, int32_t y, int32_t z, int32_t d stationY1 = y; stationLength++; } - } - while (stationElement != nullptr); + } while (stationElement != nullptr); if (stationX0 == stationX1 && stationY0 == stationY1 && ride->num_stations >= MAX_STATIONS) { @@ -759,9 +752,9 @@ static bool track_add_station_element(int32_t x, int32_t y, int32_t z, int32_t d ride->station_starts[stationIndex].x = (x >> 5); ride->station_starts[stationIndex].y = (y >> 5); - ride->station_heights[stationIndex] = z; - ride->station_depart[stationIndex] = 1; - ride->station_length[stationIndex] = stationLength; + ride->station_heights[stationIndex] = z; + ride->station_depart[stationIndex] = 1; + ride->station_length[stationIndex] = stationLength; ride->num_stations++; targetTrackType = TRACK_ELEM_END_STATION; @@ -785,8 +778,7 @@ static bool track_add_station_element(int32_t x, int32_t y, int32_t z, int32_t d finaliseStationDone = false; } } - } - while (!finaliseStationDone); + } while (!finaliseStationDone); } return true; } @@ -797,19 +789,19 @@ static bool track_add_station_element(int32_t x, int32_t y, int32_t z, int32_t d */ static bool track_remove_station_element(int32_t x, int32_t y, int32_t z, int32_t direction, int32_t rideIndex, int32_t flags) { - int32_t removeX = x; - int32_t removeY = y; - int32_t stationX0 = x; - int32_t stationY0 = y; - int32_t stationX1 = x; - int32_t stationY1 = y; + int32_t removeX = x; + int32_t removeY = y; + int32_t stationX0 = x; + int32_t stationY0 = y; + int32_t stationX1 = x; + int32_t stationY1 = y; int32_t stationLength = 0; - int32_t byte_F441D1 = -1; + int32_t byte_F441D1 = -1; - Ride * ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_3)) { - rct_tile_element * tileElement = map_get_track_element_at_with_direction_from_ride(x, y, z, direction, rideIndex); + rct_tile_element* tileElement = map_get_track_element_at_with_direction_from_ride(x, y, z, direction, rideIndex); if (tileElement != nullptr) { if (flags & GAME_COMMAND_FLAG_APPLY) @@ -820,7 +812,7 @@ static bool track_remove_station_element(int32_t x, int32_t y, int32_t z, int32_ return true; } - rct_tile_element * stationElement; + rct_tile_element* stationElement; // Search backwards for more station x = stationX0; @@ -866,15 +858,12 @@ static bool track_remove_station_element(int32_t x, int32_t y, int32_t z, int32_ stationY1 = y; stationLength++; } - } - while (stationElement != nullptr); + } while (stationElement != nullptr); if (!(flags & GAME_COMMAND_FLAG_APPLY)) { - if ((removeX != stationX0 || removeY != stationY0) && - (removeX != stationX1 || removeY != stationY1) && - ride->num_stations >= MAX_STATIONS - ) + if ((removeX != stationX0 || removeY != stationY0) && (removeX != stationX1 || removeY != stationY1) + && ride->num_stations >= MAX_STATIONS) { gGameCommandErrorText = STR_NO_MORE_STATIONS_ALLOWED_ON_THIS_RIDE; return false; @@ -906,25 +895,24 @@ static bool track_remove_station_element(int32_t x, int32_t y, int32_t z, int32_ ride->station_starts[stationIndex].x = (x >> 5); ride->station_starts[stationIndex].y = (y >> 5); - ride->station_heights[stationIndex] = z; - ride->station_depart[stationIndex] = 1; - ride->station_length[stationIndex] = stationLength != 0 ? stationLength : byte_F441D1; + ride->station_heights[stationIndex] = z; + ride->station_depart[stationIndex] = 1; + ride->station_length[stationIndex] = stationLength != 0 ? stationLength : byte_F441D1; ride->num_stations++; - stationLength = 0; + stationLength = 0; targetTrackType = TRACK_ELEM_END_STATION; } else { - if (x + CoordsDirectionDelta[direction].x == removeX && - y + CoordsDirectionDelta[direction].y == removeY) + if (x + CoordsDirectionDelta[direction].x == removeX && y + CoordsDirectionDelta[direction].y == removeY) { goto loc_6C4BF5; } else { - if (x - CoordsDirectionDelta[direction].x == removeX && - y - CoordsDirectionDelta[direction].y == removeY) + if (x - CoordsDirectionDelta[direction].x == removeX + && y - CoordsDirectionDelta[direction].y == removeY) { targetTrackType = TRACK_ELEM_BEGIN_STATION; } @@ -953,25 +941,25 @@ static bool track_remove_station_element(int32_t x, int32_t y, int32_t z, int32_ y -= CoordsDirectionDelta[direction].y; finaliseStationDone = false; } - } - while (!finaliseStationDone); + } while (!finaliseStationDone); return true; } -static money32 track_place(int32_t rideIndex, - int32_t type, - int32_t originX, - int32_t originY, - int32_t originZ, - int32_t direction, - int32_t brakeSpeed, - int32_t colour, - int32_t seatRotation, - int32_t liftHillAndAlternativeState, - int32_t flags) +static money32 track_place( + int32_t rideIndex, + int32_t type, + int32_t originX, + int32_t originY, + int32_t originZ, + int32_t direction, + int32_t brakeSpeed, + int32_t colour, + int32_t seatRotation, + int32_t liftHillAndAlternativeState, + int32_t flags) { - Ride * ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); if (ride == nullptr) { log_warning("Invalid ride for track placement, rideIndex = %d", rideIndex); @@ -982,13 +970,13 @@ static money32 track_place(int32_t rideIndex, log_warning("Invalid ride type, rideIndex = %d", rideIndex); return MONEY32_UNDEFINED; } - rct_ride_entry * rideEntry = get_ride_entry(ride->subtype); + rct_ride_entry* rideEntry = get_ride_entry(ride->subtype); if (rideEntry == nullptr) { log_warning("Invalid ride type for track placement, rideIndex = %d", rideIndex); return MONEY32_UNDEFINED; } - rct_tile_element * tileElement; + rct_tile_element* tileElement; gCommandExpenditureType = RCT_EXPENDITURE_TYPE_RIDE_CONSTRUCTION; gCommandPosition.x = originX + 16; @@ -996,9 +984,9 @@ static money32 track_place(int32_t rideIndex, gCommandPosition.z = originZ; int16_t trackpieceZ = originZ; direction &= 3; - gTrackGroundFlags = 0; + gTrackGroundFlags = 0; - uint32_t rideTypeFlags = RideProperties[ride->type].flags; + uint32_t rideTypeFlags = RideProperties[ride->type].flags; if ((ride->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE_TRACK) && type == TRACK_ELEM_END_STATION) { @@ -1015,7 +1003,7 @@ static money32 track_place(int32_t rideIndex, } } - const uint8_t (* wallEdges)[16]; + const uint8_t(*wallEdges)[16]; if (rideTypeFlags & RIDE_TYPE_FLAG_FLAT_RIDE) { wallEdges = &FlatRideTrackSequenceElementAllowedWallEdges[type]; @@ -1039,9 +1027,9 @@ static money32 track_place(int32_t rideIndex, } } // Backwards steep lift hills are allowed, even on roller coasters that do not support forwards steep lift hills. - if ((liftHillAndAlternativeState & CONSTRUCTION_LIFT_HILL_SELECTED) && - !(RideTypePossibleTrackConfigurations[ride->type] & (1ULL << TRACK_LIFT_HILL_STEEP)) && - !gCheatsEnableChainLiftOnAllTrack) + if ((liftHillAndAlternativeState & CONSTRUCTION_LIFT_HILL_SELECTED) + && !(RideTypePossibleTrackConfigurations[ride->type] & (1ULL << TRACK_LIFT_HILL_STEEP)) + && !gCheatsEnableChainLiftOnAllTrack) { if (TrackFlags[type] & TRACK_ELEM_FLAG_IS_STEEP_UP) { @@ -1053,9 +1041,9 @@ static money32 track_place(int32_t rideIndex, wallEdges = &TrackSequenceElementAllowedWallEdges[type]; } - money32 cost = 0; - const rct_preview_track * trackBlock = get_track_def_from_ride(ride, type); - uint32_t num_elements = 0; + money32 cost = 0; + const rct_preview_track* trackBlock = get_track_def_from_ride(ride, type); + uint32_t num_elements = 0; // First check if any of the track pieces are outside the park for (; trackBlock->index != 0xFF; trackBlock++) { @@ -1064,22 +1052,22 @@ static money32 track_place(int32_t rideIndex, switch (direction) { - case 0: - offsetX = trackBlock->x; - offsetY = trackBlock->y; - break; - case 1: - offsetX = trackBlock->y; - offsetY = -trackBlock->x; - break; - case 2: - offsetX = -trackBlock->x; - offsetY = -trackBlock->y; - break; - case 3: - offsetX = -trackBlock->y; - offsetY = trackBlock->x; - break; + case 0: + offsetX = trackBlock->x; + offsetY = trackBlock->y; + break; + case 1: + offsetX = trackBlock->y; + offsetY = -trackBlock->x; + break; + case 2: + offsetX = -trackBlock->x; + offsetY = -trackBlock->y; + break; + case 3: + offsetX = -trackBlock->y; + offsetY = trackBlock->x; + break; } int32_t x = originX + offsetX; @@ -1098,9 +1086,7 @@ static money32 track_place(int32_t rideIndex, { return MONEY32_UNDEFINED; } - const uint16_t * trackFlags = (rideTypeFlags & RIDE_TYPE_FLAG_FLAT_RIDE) ? - FlatTrackFlags : - TrackFlags; + const uint16_t* trackFlags = (rideTypeFlags & RIDE_TYPE_FLAG_FLAT_RIDE) ? FlatTrackFlags : TrackFlags; if (trackFlags[type] & TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT) { if ((originZ & 0x0F) != 8) @@ -1125,44 +1111,44 @@ static money32 track_place(int32_t rideIndex, { int32_t offsetX = 0; int32_t offsetY = 0; - int32_t bl = trackBlock->var_08; + int32_t bl = trackBlock->var_08; int32_t bh; switch (direction) { - case 0: - offsetX = trackBlock->x; - offsetY = trackBlock->y; - break; - case 1: - offsetX = trackBlock->y; - offsetY = -trackBlock->x; - bl = rol8(bl, 1); - bh = bl; - bh = ror8(bh, 4); - bl &= 0xEE; - bh &= 0x11; - bl |= bh; - break; - case 2: - offsetX = -trackBlock->x; - offsetY = -trackBlock->y; - bl = rol8(bl, 2); - bh = bl; - bh = ror8(bh, 4); - bl &= 0xCC; - bh &= 0x33; - bl |= bh; - break; - case 3: - offsetX = -trackBlock->y; - offsetY = trackBlock->x; - bl = rol8(bl, 3); - bh = bl; - bh = ror8(bh, 4); - bl &= 0x88; - bh &= 0x77; - bl |= bh; - break; + case 0: + offsetX = trackBlock->x; + offsetY = trackBlock->y; + break; + case 1: + offsetX = trackBlock->y; + offsetY = -trackBlock->x; + bl = rol8(bl, 1); + bh = bl; + bh = ror8(bh, 4); + bl &= 0xEE; + bh &= 0x11; + bl |= bh; + break; + case 2: + offsetX = -trackBlock->x; + offsetY = -trackBlock->y; + bl = rol8(bl, 2); + bh = bl; + bh = ror8(bh, 4); + bl &= 0xCC; + bh &= 0x33; + bl |= bh; + break; + case 3: + offsetX = -trackBlock->y; + offsetY = trackBlock->x; + bl = rol8(bl, 3); + bh = bl; + bh = ror8(bh, 4); + bl &= 0x88; + bh &= 0x77; + bl |= bh; + break; } int32_t x = originX + offsetX; int32_t y = originY + offsetY; @@ -1201,14 +1187,15 @@ static money32 track_place(int32_t rideIndex, if (!gCheatsDisableClearanceChecks || flags & GAME_COMMAND_FLAG_GHOST) { - uint8_t crossingMode = (ride->type == RIDE_TYPE_MINIATURE_RAILWAY && type == TRACK_ELEM_FLAT) ? - CREATE_CROSSING_MODE_TRACK_OVER_PATH : - CREATE_CROSSING_MODE_NONE; - if (!map_can_construct_with_clear_at(x, y, baseZ, clearanceZ, &map_place_non_scenery_clear_func, bl, flags, &cost, crossingMode)) + uint8_t crossingMode = (ride->type == RIDE_TYPE_MINIATURE_RAILWAY && type == TRACK_ELEM_FLAT) + ? CREATE_CROSSING_MODE_TRACK_OVER_PATH + : CREATE_CROSSING_MODE_NONE; + if (!map_can_construct_with_clear_at( + x, y, baseZ, clearanceZ, &map_place_non_scenery_clear_func, bl, flags, &cost, crossingMode)) return MONEY32_UNDEFINED; } - //6c53dc + // 6c53dc if ((flags & GAME_COMMAND_FLAG_APPLY) && !(flags & GAME_COMMAND_FLAG_GHOST) && !gCheatsDisableClearanceChecks) { @@ -1294,7 +1281,7 @@ static money32 track_place(int32_t rideIndex, if ((rideTypeFlags & RIDE_TYPE_FLAG_TRACK_MUST_BE_ON_WATER) && !byte_9D8150) { - tileElement = map_get_surface_element_at({x, y}); + tileElement = map_get_surface_element_at({ x, y }); uint8_t water_height = surface_get_water_height(tileElement) * 2; if (water_height == 0) @@ -1312,10 +1299,8 @@ static money32 track_place(int32_t rideIndex, if (water_height == tileElement->base_height) { bh = tileElement->properties.surface.slope & TILE_ELEMENT_SLOPE_ALL_CORNERS_UP; - if (bh == TILE_ELEMENT_SLOPE_W_CORNER_DN || - bh == TILE_ELEMENT_SLOPE_S_CORNER_DN || - bh == TILE_ELEMENT_SLOPE_E_CORNER_DN || - bh == TILE_ELEMENT_SLOPE_N_CORNER_DN) + if (bh == TILE_ELEMENT_SLOPE_W_CORNER_DN || bh == TILE_ELEMENT_SLOPE_S_CORNER_DN + || bh == TILE_ELEMENT_SLOPE_E_CORNER_DN || bh == TILE_ELEMENT_SLOPE_N_CORNER_DN) { gGameCommandErrorText = STR_CAN_ONLY_BUILD_THIS_ON_WATER; return MONEY32_UNDEFINED; @@ -1339,21 +1324,19 @@ static money32 track_place(int32_t rideIndex, return MONEY32_UNDEFINED; } } - //6c55be + // 6c55be if (entranceDirections & TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH) { entranceDirections &= 0x0F; if (entranceDirections != 0) { - if (!(flags & GAME_COMMAND_FLAG_APPLY) && - !(flags & GAME_COMMAND_FLAG_GHOST) && - !gCheatsDisableClearanceChecks) + if (!(flags & GAME_COMMAND_FLAG_APPLY) && !(flags & GAME_COMMAND_FLAG_GHOST) && !gCheatsDisableClearanceChecks) { uint8_t _bl = entranceDirections; for (int32_t dl = bitscanforward(_bl); dl != -1; dl = bitscanforward(_bl)) { _bl &= ~(1 << dl); - int32_t temp_x = x, temp_y = y; + int32_t temp_x = x, temp_y = y; int32_t temp_direction = (direction + dl) & 3; temp_x += CoordsDirectionDelta[temp_direction].x; temp_y += CoordsDirectionDelta[temp_direction].y; @@ -1363,14 +1346,13 @@ static money32 track_place(int32_t rideIndex, } } } - //6c5648 12 push - tileElement = map_get_surface_element_at({x, y}); + // 6c5648 12 push + tileElement = map_get_surface_element_at({ x, y }); if (!gCheatsDisableSupportLimits) { int32_t ride_height = clearanceZ - tileElement->base_height; if (ride_height >= 0) { - uint16_t maxHeight; if (RideGroupManager::RideTypeIsIndependent(ride->type) && rideEntry->max_height != 0) @@ -1379,7 +1361,7 @@ static money32 track_place(int32_t rideIndex, } else if (RideGroupManager::RideTypeHasRideGroups(ride->type)) { - const RideGroup * rideGroup = RideGroupManager::GetRideGroup(ride->type, rideEntry); + const RideGroup* rideGroup = RideGroupManager::GetRideGroup(ride->type, rideEntry); maxHeight = rideGroup->MaximumHeight; } else @@ -1404,7 +1386,7 @@ static money32 track_place(int32_t rideIndex, cost += ((_support_height / 2) * RideTrackCosts[ride->type].support_price) * 5; - //6c56d3 + // 6c56d3 if (!(flags & GAME_COMMAND_FLAG_APPLY)) continue; @@ -1412,42 +1394,42 @@ static money32 track_place(int32_t rideIndex, invalidate_test_results(rideIndex); switch (type) { - case TRACK_ELEM_ON_RIDE_PHOTO: - ride->lifecycle_flags |= RIDE_LIFECYCLE_ON_RIDE_PHOTO; - break; - case TRACK_ELEM_CABLE_LIFT_HILL: - if (trackBlock->index != 0) + case TRACK_ELEM_ON_RIDE_PHOTO: + ride->lifecycle_flags |= RIDE_LIFECYCLE_ON_RIDE_PHOTO; break; - ride->lifecycle_flags |= RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED; - ride->cable_lift_x = x; - ride->cable_lift_y = y; - ride->cable_lift_z = baseZ; - break; - case TRACK_ELEM_BLOCK_BRAKES: - ride->num_block_brakes++; - ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_OPERATING; + case TRACK_ELEM_CABLE_LIFT_HILL: + if (trackBlock->index != 0) + break; + ride->lifecycle_flags |= RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED; + ride->cable_lift_x = x; + ride->cable_lift_y = y; + ride->cable_lift_z = baseZ; + break; + case TRACK_ELEM_BLOCK_BRAKES: + ride->num_block_brakes++; + ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_OPERATING; - ride->mode = RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED; - if (ride->type == RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER) - ride->mode = RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED; + ride->mode = RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED; + if (ride->type == RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER) + ride->mode = RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED; - break; + break; } if (trackBlock->index == 0) { switch (type) { - case TRACK_ELEM_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_60_DEG_UP_TO_FLAT: - case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: - if (!(liftHillAndAlternativeState & CONSTRUCTION_LIFT_HILL_SELECTED)) + case TRACK_ELEM_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_60_DEG_UP_TO_FLAT: + case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: + if (!(liftHillAndAlternativeState & CONSTRUCTION_LIFT_HILL_SELECTED)) + break; + // Fall Through + case TRACK_ELEM_CABLE_LIFT_HILL: + ride->num_block_brakes++; break; - //Fall Through - case TRACK_ELEM_CABLE_LIFT_HILL: - ride->num_block_brakes++; - break; } } @@ -1495,18 +1477,18 @@ static money32 track_place(int32_t rideIndex, switch (type) { - case TRACK_ELEM_WATERFALL: - map_animation_create(MAP_ANIMATION_TYPE_TRACK_WATERFALL, x, y, tileElement->base_height); - break; - case TRACK_ELEM_RAPIDS: - map_animation_create(MAP_ANIMATION_TYPE_TRACK_RAPIDS, x, y, tileElement->base_height); - break; - case TRACK_ELEM_WHIRLPOOL: - map_animation_create(MAP_ANIMATION_TYPE_TRACK_WHIRLPOOL, x, y, tileElement->base_height); - break; - case TRACK_ELEM_SPINNING_TUNNEL: - map_animation_create(MAP_ANIMATION_TYPE_TRACK_SPINNINGTUNNEL, x, y, tileElement->base_height); - break; + case TRACK_ELEM_WATERFALL: + map_animation_create(MAP_ANIMATION_TYPE_TRACK_WATERFALL, x, y, tileElement->base_height); + break; + case TRACK_ELEM_RAPIDS: + map_animation_create(MAP_ANIMATION_TYPE_TRACK_RAPIDS, x, y, tileElement->base_height); + break; + case TRACK_ELEM_WHIRLPOOL: + map_animation_create(MAP_ANIMATION_TYPE_TRACK_WHIRLPOOL, x, y, tileElement->base_height); + break; + case TRACK_ELEM_SPINNING_TUNNEL: + map_animation_create(MAP_ANIMATION_TYPE_TRACK_SPINNINGTUNNEL, x, y, tileElement->base_height); + break; } if (track_element_has_speed_setting(type)) { @@ -1544,7 +1526,7 @@ static money32 track_place(int32_t rideIndex, if (rideTypeFlags & RIDE_TYPE_FLAG_TRACK_MUST_BE_ON_WATER) { - rct_tile_element * surfaceElement = map_get_surface_element_at({x, y}); + rct_tile_element* surfaceElement = map_get_surface_element_at({ x, y }); surfaceElement->type |= (1 << 6); tileElement = surfaceElement; } @@ -1566,9 +1548,7 @@ static money32 track_place(int32_t rideIndex, } money32 price = RideTrackCosts[ride->type].track_price; - price *= (rideTypeFlags & RIDE_TYPE_FLAG_FLAT_RIDE) ? - FlatRideTrackPricing[type] : - TrackPricing[type]; + price *= (rideTypeFlags & RIDE_TYPE_FLAG_FLAT_RIDE) ? FlatRideTrackPricing[type] : TrackPricing[type]; price >>= 16; price = cost + ((price / 2) * 10); @@ -1588,36 +1568,30 @@ static money32 track_place(int32_t rideIndex, * rct2: 0x006C511D */ void game_command_place_track( - int32_t * eax, - int32_t * ebx, - int32_t * ecx, - int32_t * edx, - [[maybe_unused]] int32_t * esi, - int32_t * edi, - [[maybe_unused]] int32_t * ebp) + int32_t* eax, + int32_t* ebx, + int32_t* ecx, + int32_t* edx, + [[maybe_unused]] int32_t* esi, + int32_t* edi, + [[maybe_unused]] int32_t* ebp) { *ebx = track_place( *edx & 0xFF, (*edx >> 8) & 0xFF, - (int16_t) (*eax & 0xFFFF), - (int16_t) (*ecx & 0xFFFF), - (int16_t) (*edi & 0xFFFF), + (int16_t)(*eax & 0xFFFF), + (int16_t)(*ecx & 0xFFFF), + (int16_t)(*edi & 0xFFFF), (*ebx >> 8) & 0xFF, (*edi >> 16) & 0xFF, (*edi >> 24) & 0x0F, (*edi >> 28) & 0x0F, (*edx >> 16), - *ebx & 0xFF - ); + *ebx & 0xFF); } -static money32 track_remove(uint8_t type, - uint8_t sequence, - int16_t originX, - int16_t originY, - int16_t originZ, - uint8_t rotation, - uint8_t flags) +static money32 track_remove( + uint8_t type, uint8_t sequence, int16_t originX, int16_t originY, int16_t originZ, uint8_t rotation, uint8_t flags) { gCommandExpenditureType = RCT_EXPENDITURE_TYPE_RIDE_CONSTRUCTION; gCommandPosition.x = originX + 16; @@ -1627,10 +1601,10 @@ static money32 track_remove(uint8_t type, switch (type) { - case TRACK_ELEM_BEGIN_STATION: - case TRACK_ELEM_MIDDLE_STATION: - type = TRACK_ELEM_END_STATION; - break; + case TRACK_ELEM_BEGIN_STATION: + case TRACK_ELEM_MIDDLE_STATION: + type = TRACK_ELEM_END_STATION; + break; } if (!(flags & (1 << 3)) && game_is_paused() && !gCheatsBuildInPauseMode) @@ -1641,7 +1615,7 @@ static money32 track_remove(uint8_t type, bool found = false; bool isGhost = flags & GAME_COMMAND_FLAG_GHOST; - rct_tile_element * tileElement = map_get_first_element_at(originX / 32, originY / 32); + rct_tile_element* tileElement = map_get_first_element_at(originX / 32, originY / 32); if (tileElement == nullptr) { log_warning("Invalid coordinates for track removal. x = %d, y = %d", originX, originY); @@ -1667,10 +1641,10 @@ static money32 track_remove(uint8_t type, uint8_t track_type = track_element_get_type(tileElement); switch (track_type) { - case TRACK_ELEM_BEGIN_STATION: - case TRACK_ELEM_MIDDLE_STATION: - track_type = TRACK_ELEM_END_STATION; - break; + case TRACK_ELEM_BEGIN_STATION: + case TRACK_ELEM_MIDDLE_STATION: + track_type = TRACK_ELEM_END_STATION; + break; } if (track_type != type) @@ -1678,8 +1652,7 @@ static money32 track_remove(uint8_t type, found = true; break; - } - while (!(tileElement++)->IsLastForTile()); + } while (!(tileElement++)->IsLastForTile()); if (!found) { @@ -1696,29 +1669,29 @@ static money32 track_remove(uint8_t type, type = track_element_get_type(tileElement); bool isLiftHill = track_element_is_lift_hill(tileElement); - Ride * ride = get_ride(rideIndex); - const rct_preview_track * trackBlock = get_track_def_from_ride(ride, type); + Ride* ride = get_ride(rideIndex); + const rct_preview_track* trackBlock = get_track_def_from_ride(ride, type); trackBlock += tile_element_get_track_sequence(tileElement); uint8_t originDirection = tile_element_get_direction(tileElement); switch (originDirection) { - case 0: - originX -= trackBlock->x; - originY -= trackBlock->y; - break; - case 1: - originX -= trackBlock->y; - originY += trackBlock->x; - break; - case 2: - originX += trackBlock->x; - originY += trackBlock->y; - break; - case 3: - originX += trackBlock->y; - originY -= trackBlock->x; - break; + case 0: + originX -= trackBlock->x; + originY -= trackBlock->y; + break; + case 1: + originX -= trackBlock->y; + originY += trackBlock->x; + break; + case 2: + originX += trackBlock->x; + originY += trackBlock->y; + break; + case 3: + originX += trackBlock->y; + originY -= trackBlock->x; + break; } originZ -= trackBlock->z; @@ -1732,22 +1705,22 @@ static money32 track_remove(uint8_t type, switch (originDirection) { - case 0: - x += trackBlock->x; - y += trackBlock->y; - break; - case 1: - x += trackBlock->y; - y -= trackBlock->x; - break; - case 2: - x -= trackBlock->x; - y -= trackBlock->y; - break; - case 3: - x -= trackBlock->y; - y += trackBlock->x; - break; + case 0: + x += trackBlock->x; + y += trackBlock->y; + break; + case 1: + x += trackBlock->y; + y -= trackBlock->x; + break; + case 2: + x -= trackBlock->x; + y -= trackBlock->y; + break; + case 3: + x -= trackBlock->y; + y += trackBlock->x; + break; } z += trackBlock->z; @@ -1783,8 +1756,7 @@ static money32 track_remove(uint8_t type, found = true; break; - } - while (!(tileElement++)->IsLastForTile()); + } while (!(tileElement++)->IsLastForTile()); if (!found) { @@ -1810,7 +1782,7 @@ static money32 track_remove(uint8_t type, } } - rct_tile_element * surfaceElement = map_get_surface_element_at({x, y}); + rct_tile_element* surfaceElement = map_get_surface_element_at({ x, y }); if (surfaceElement == nullptr) { return MONEY32_UNDEFINED; @@ -1858,38 +1830,38 @@ static money32 track_remove(uint8_t type, { switch (type) { - case TRACK_ELEM_ON_RIDE_PHOTO: - ride->lifecycle_flags &= ~RIDE_LIFECYCLE_ON_RIDE_PHOTO; - break; - case TRACK_ELEM_CABLE_LIFT_HILL: - ride->lifecycle_flags &= ~RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED; - break; - case TRACK_ELEM_BLOCK_BRAKES: - ride->num_block_brakes--; - if (ride->num_block_brakes == 0) - { - ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_OPERATING; - ride->mode = RIDE_MODE_CONTINUOUS_CIRCUIT; - if (ride->type == RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER) + case TRACK_ELEM_ON_RIDE_PHOTO: + ride->lifecycle_flags &= ~RIDE_LIFECYCLE_ON_RIDE_PHOTO; + break; + case TRACK_ELEM_CABLE_LIFT_HILL: + ride->lifecycle_flags &= ~RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED; + break; + case TRACK_ELEM_BLOCK_BRAKES: + ride->num_block_brakes--; + if (ride->num_block_brakes == 0) { - ride->mode = RIDE_MODE_POWERED_LAUNCH; + ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_OPERATING; + ride->mode = RIDE_MODE_CONTINUOUS_CIRCUIT; + if (ride->type == RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER) + { + ride->mode = RIDE_MODE_POWERED_LAUNCH; + } } - } - break; + break; } switch (type) { - case TRACK_ELEM_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_60_DEG_UP_TO_FLAT: - case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: - if (!isLiftHill) + case TRACK_ELEM_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_60_DEG_UP_TO_FLAT: + case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: + if (!isLiftHill) + break; + // Fall through + case TRACK_ELEM_CABLE_LIFT_HILL: + ride->num_block_brakes--; break; - // Fall through - case TRACK_ELEM_CABLE_LIFT_HILL: - ride->num_block_brakes--; - break; } } @@ -1929,17 +1901,16 @@ static money32 track_remove(uint8_t type, * rct2: 0x006C5B69 */ void game_command_remove_track( - int32_t * eax, int32_t * ebx, int32_t * ecx, int32_t * edx, [[maybe_unused]] int32_t * esi, int32_t * edi, [[maybe_unused]] int32_t * ebp) + int32_t* eax, + int32_t* ebx, + int32_t* ecx, + int32_t* edx, + [[maybe_unused]] int32_t* esi, + int32_t* edi, + [[maybe_unused]] int32_t* ebp) { *ebx = track_remove( - *edx & 0xFF, - (*edx >> 8) & 0xFF, - *eax & 0xFFFF, - *ecx & 0xFFFF, - *edi & 0xFFFF, - (*ebx >> 8) & 0xFF, - *ebx & 0xFF - ); + *edx & 0xFF, (*edx >> 8) & 0xFF, *eax & 0xFFFF, *ecx & 0xFFFF, *edi & 0xFFFF, (*ebx >> 8) & 0xFF, *ebx & 0xFF); } /** @@ -1947,18 +1918,18 @@ void game_command_remove_track( * rct2: 0x006C5AE9 */ void game_command_set_brakes_speed( - int32_t * eax, - int32_t * ebx, - int32_t * ecx, - int32_t * edx, - [[maybe_unused]] int32_t * esi, - int32_t * edi, - [[maybe_unused]] int32_t * ebp) + int32_t* eax, + int32_t* ebx, + int32_t* ecx, + int32_t* edx, + [[maybe_unused]] int32_t* esi, + int32_t* edi, + [[maybe_unused]] int32_t* ebp) { - int32_t x = (*eax & 0xFFFF); - int32_t y = (*ecx & 0xFFFF); - int32_t z = (*edi & 0xFFFF); - int32_t trackType = (*edx & 0xFF); + int32_t x = (*eax & 0xFFFF); + int32_t y = (*ecx & 0xFFFF); + int32_t z = (*edi & 0xFFFF); + int32_t trackType = (*edx & 0xFF); int32_t brakesSpeed = ((*ebx >> 8) & 0xFF); gCommandExpenditureType = RCT_EXPENDITURE_TYPE_RIDE_CONSTRUCTION; @@ -1972,7 +1943,7 @@ void game_command_set_brakes_speed( return; } - rct_tile_element * tileElement = map_get_first_element_at(x >> 5, y >> 5); + rct_tile_element* tileElement = map_get_first_element_at(x >> 5, y >> 5); if (tileElement == nullptr) { log_warning("Invalid game command for setting brakes speed. x = %d, y = %d", x, y); @@ -1991,21 +1962,20 @@ void game_command_set_brakes_speed( tile_element_set_brake_booster_speed(tileElement, brakesSpeed); break; - } - while (!(tileElement++)->IsLastForTile()); + } while (!(tileElement++)->IsLastForTile()); *ebx = 0; } -void track_circuit_iterator_begin(track_circuit_iterator * it, CoordsXYE first) +void track_circuit_iterator_begin(track_circuit_iterator* it, CoordsXYE first) { - it->last = first; - it->first = nullptr; + it->last = first; + it->first = nullptr; it->firstIteration = true; - it->looped = false; + it->looped = false; } -bool track_circuit_iterator_previous(track_circuit_iterator * it) +bool track_circuit_iterator_previous(track_circuit_iterator* it) { track_begin_end trackBeginEnd; @@ -2014,10 +1984,10 @@ bool track_circuit_iterator_previous(track_circuit_iterator * it) if (!track_block_get_previous(it->last.x, it->last.y, it->last.element, &trackBeginEnd)) return false; - it->current.x = trackBeginEnd.begin_x; - it->current.y = trackBeginEnd.begin_y; - it->current.element = trackBeginEnd.begin_element; - it->currentZ = trackBeginEnd.begin_z; + it->current.x = trackBeginEnd.begin_x; + it->current.y = trackBeginEnd.begin_y; + it->current.element = trackBeginEnd.begin_element; + it->currentZ = trackBeginEnd.begin_z; it->currentDirection = trackBeginEnd.begin_direction; it->first = it->current.element; @@ -2032,14 +2002,14 @@ bool track_circuit_iterator_previous(track_circuit_iterator * it) } it->firstIteration = false; - it->last = it->current; + it->last = it->current; if (track_block_get_previous(it->last.x, it->last.y, it->last.element, &trackBeginEnd)) { - it->current.x = trackBeginEnd.end_x; - it->current.y = trackBeginEnd.end_y; - it->current.element = trackBeginEnd.begin_element; - it->currentZ = trackBeginEnd.begin_z; + it->current.x = trackBeginEnd.end_x; + it->current.y = trackBeginEnd.end_y; + it->current.element = trackBeginEnd.begin_element; + it->currentZ = trackBeginEnd.begin_z; it->currentDirection = trackBeginEnd.begin_direction; return true; } @@ -2050,7 +2020,7 @@ bool track_circuit_iterator_previous(track_circuit_iterator * it) } } -bool track_circuit_iterator_next(track_circuit_iterator * it) +bool track_circuit_iterator_next(track_circuit_iterator* it) { if (it->first == nullptr) { @@ -2069,24 +2039,23 @@ bool track_circuit_iterator_next(track_circuit_iterator * it) } it->firstIteration = false; - it->last = it->current; + it->last = it->current; return track_block_get_next(&it->last, &it->current, &it->currentZ, &it->currentDirection); } } -bool track_circuit_iterators_match(const track_circuit_iterator * firstIt, const track_circuit_iterator * secondIt) +bool track_circuit_iterators_match(const track_circuit_iterator* firstIt, const track_circuit_iterator* secondIt) { - return (firstIt->currentZ == secondIt->currentZ && - firstIt->currentDirection == secondIt->currentDirection && - firstIt->current.x == secondIt->current.x && - firstIt->current.y == secondIt->current.y); + return ( + firstIt->currentZ == secondIt->currentZ && firstIt->currentDirection == secondIt->currentDirection + && firstIt->current.x == secondIt->current.x && firstIt->current.y == secondIt->current.y); } -void track_get_back(CoordsXYE * input, CoordsXYE * output) +void track_get_back(CoordsXYE* input, CoordsXYE* output) { - CoordsXYE lastTrack; + CoordsXYE lastTrack; track_begin_end currentTrack; - bool result; + bool result; lastTrack = *input; do @@ -2094,20 +2063,19 @@ void track_get_back(CoordsXYE * input, CoordsXYE * output) result = track_block_get_previous(lastTrack.x, lastTrack.y, lastTrack.element, ¤tTrack); if (result) { - lastTrack.x = currentTrack.begin_x; - lastTrack.y = currentTrack.begin_y; + lastTrack.x = currentTrack.begin_x; + lastTrack.y = currentTrack.begin_y; lastTrack.element = currentTrack.begin_element; } - } - while (result); + } while (result); *output = lastTrack; } -void track_get_front(CoordsXYE * input, CoordsXYE * output) +void track_get_front(CoordsXYE* input, CoordsXYE* output) { CoordsXYE lastTrack, currentTrack; - int32_t z, direction; - bool result; + int32_t z, direction; + bool result; lastTrack = *input; do @@ -2117,17 +2085,16 @@ void track_get_front(CoordsXYE * input, CoordsXYE * output) { lastTrack = currentTrack; } - } - while (result); + } while (result); *output = lastTrack; } -bool track_element_is_lift_hill(const rct_tile_element * trackElement) +bool track_element_is_lift_hill(const rct_tile_element* trackElement) { return trackElement->type & TRACK_ELEMENT_TYPE_FLAG_CHAIN_LIFT; } -void track_element_set_lift_hill(rct_tile_element * trackElement, bool on) +void track_element_set_lift_hill(rct_tile_element* trackElement, bool on) { if (on) { @@ -2144,48 +2111,48 @@ void track_element_set_lift_hill(rct_tile_element * trackElement, bool on) * A beginning of a block can be the end of a station, the end of a lift hill, * or a block brake. */ -bool track_element_is_block_start(rct_tile_element * trackElement) +bool track_element_is_block_start(rct_tile_element* trackElement) { switch (track_element_get_type(trackElement)) { - case TRACK_ELEM_END_STATION: - case TRACK_ELEM_CABLE_LIFT_HILL: - case TRACK_ELEM_BLOCK_BRAKES: - return true; - case TRACK_ELEM_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_60_DEG_UP_TO_FLAT: - case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: - if (track_element_is_lift_hill(trackElement)) - { + case TRACK_ELEM_END_STATION: + case TRACK_ELEM_CABLE_LIFT_HILL: + case TRACK_ELEM_BLOCK_BRAKES: return true; - } - break; + case TRACK_ELEM_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_60_DEG_UP_TO_FLAT: + case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: + if (track_element_is_lift_hill(trackElement)) + { + return true; + } + break; } return false; } -bool track_element_is_cable_lift(const rct_tile_element * trackElement) +bool track_element_is_cable_lift(const rct_tile_element* trackElement) { return trackElement->properties.track.colour & TRACK_ELEMENT_COLOUR_FLAG_CABLE_LIFT; } -void track_element_set_cable_lift(rct_tile_element * trackElement) +void track_element_set_cable_lift(rct_tile_element* trackElement) { trackElement->properties.track.colour |= TRACK_ELEMENT_COLOUR_FLAG_CABLE_LIFT; } -void track_element_clear_cable_lift(rct_tile_element * trackElement) +void track_element_clear_cable_lift(rct_tile_element* trackElement) { trackElement->properties.track.colour &= ~TRACK_ELEMENT_COLOUR_FLAG_CABLE_LIFT; } -bool track_element_is_inverted(const rct_tile_element * tileElement) +bool track_element_is_inverted(const rct_tile_element* tileElement) { return tileElement->properties.track.colour & TRACK_ELEMENT_COLOUR_FLAG_INVERTED; } -void track_element_set_inverted(rct_tile_element * tileElement, bool inverted) +void track_element_set_inverted(rct_tile_element* tileElement, bool inverted) { if (inverted) { @@ -2197,9 +2164,9 @@ void track_element_set_inverted(rct_tile_element * tileElement, bool inverted) } } -int32_t track_get_actual_bank(rct_tile_element * tileElement, int32_t bank) +int32_t track_get_actual_bank(rct_tile_element* tileElement, int32_t bank) { - Ride * ride = get_ride(track_element_get_ride_index(tileElement)); + Ride* ride = get_ride(track_element_get_ride_index(tileElement)); bool isInverted = track_element_is_inverted(tileElement); return track_get_actual_bank_2(ride->type, isInverted, bank); } @@ -2223,25 +2190,26 @@ int32_t track_get_actual_bank_2(int32_t rideType, bool isInverted, int32_t bank) return bank; } -int32_t track_get_actual_bank_3(rct_vehicle * vehicle, rct_tile_element * tileElement) +int32_t track_get_actual_bank_3(rct_vehicle* vehicle, rct_tile_element* tileElement) { - bool isInverted = ((vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) > 0) ^ track_element_is_inverted(tileElement); - int32_t trackType = track_element_get_type(tileElement); - int32_t rideType = get_ride(track_element_get_ride_index(tileElement))->type; - int32_t bankStart = TrackDefinitions[trackType].bank_start; + bool isInverted + = ((vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) > 0) ^ track_element_is_inverted(tileElement); + int32_t trackType = track_element_get_type(tileElement); + int32_t rideType = get_ride(track_element_get_ride_index(tileElement))->type; + int32_t bankStart = TrackDefinitions[trackType].bank_start; return track_get_actual_bank_2(rideType, isInverted, bankStart); } -bool track_element_is_station(rct_tile_element * trackElement) +bool track_element_is_station(rct_tile_element* trackElement) { switch (track_element_get_type(trackElement)) { - case TRACK_ELEM_END_STATION: - case TRACK_ELEM_BEGIN_STATION: - case TRACK_ELEM_MIDDLE_STATION: - return true; - default: - return false; + case TRACK_ELEM_END_STATION: + case TRACK_ELEM_BEGIN_STATION: + case TRACK_ELEM_MIDDLE_STATION: + return true; + default: + return false; } } @@ -2249,28 +2217,28 @@ bool track_element_is_covered(int32_t trackElementType) { switch (trackElementType) { - case TRACK_ELEM_FLAT_COVERED: - case TRACK_ELEM_25_DEG_UP_COVERED: - case TRACK_ELEM_60_DEG_UP_COVERED: - case TRACK_ELEM_FLAT_TO_25_DEG_UP_COVERED: - case TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED: - case TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED: - case TRACK_ELEM_25_DEG_UP_TO_FLAT_COVERED: - case TRACK_ELEM_25_DEG_DOWN_COVERED: - case TRACK_ELEM_60_DEG_DOWN_COVERED: - case TRACK_ELEM_FLAT_TO_25_DEG_DOWN_COVERED: - case TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED: - case TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED: - case TRACK_ELEM_25_DEG_DOWN_TO_FLAT_COVERED: - case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED: - case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED: - case TRACK_ELEM_S_BEND_LEFT_COVERED: - case TRACK_ELEM_S_BEND_RIGHT_COVERED: - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED: - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED: - return true; - default: - return false; + case TRACK_ELEM_FLAT_COVERED: + case TRACK_ELEM_25_DEG_UP_COVERED: + case TRACK_ELEM_60_DEG_UP_COVERED: + case TRACK_ELEM_FLAT_TO_25_DEG_UP_COVERED: + case TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED: + case TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED: + case TRACK_ELEM_25_DEG_UP_TO_FLAT_COVERED: + case TRACK_ELEM_25_DEG_DOWN_COVERED: + case TRACK_ELEM_60_DEG_DOWN_COVERED: + case TRACK_ELEM_FLAT_TO_25_DEG_DOWN_COVERED: + case TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED: + case TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED: + case TRACK_ELEM_25_DEG_DOWN_TO_FLAT_COVERED: + case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED: + case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED: + case TRACK_ELEM_S_BEND_LEFT_COVERED: + case TRACK_ELEM_S_BEND_RIGHT_COVERED: + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED: + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED: + return true; + default: + return false; } } @@ -2287,52 +2255,51 @@ bool track_element_has_speed_setting(uint8_t trackType) return trackType == TRACK_ELEM_BRAKES || trackType == TRACK_ELEM_BOOSTER; } -uint8_t track_element_get_seat_rotation(const rct_tile_element * tileElement) +uint8_t track_element_get_seat_rotation(const rct_tile_element* tileElement) { return tileElement->properties.track.colour >> 4; } -void track_element_set_seat_rotation(rct_tile_element * tileElement, uint8_t seatRotation) +void track_element_set_seat_rotation(rct_tile_element* tileElement, uint8_t seatRotation) { tileElement->properties.track.colour &= 0x0F; tileElement->properties.track.colour |= (seatRotation << 4); } -uint8_t track_element_get_colour_scheme(const rct_tile_element * tileElement) +uint8_t track_element_get_colour_scheme(const rct_tile_element* tileElement) { return tileElement->properties.track.colour & 0x3; } -void track_element_set_colour_scheme(rct_tile_element * tileElement, uint8_t colourScheme) +void track_element_set_colour_scheme(rct_tile_element* tileElement, uint8_t colourScheme) { tileElement->properties.track.colour &= ~0x3; tileElement->properties.track.colour |= (colourScheme & 0x3); } - -void tile_element_set_station(rct_tile_element * tileElement, uint32_t stationIndex) +void tile_element_set_station(rct_tile_element* tileElement, uint32_t stationIndex) { tileElement->properties.track.sequence &= ~MAP_ELEM_TRACK_SEQUENCE_STATION_INDEX_MASK; tileElement->properties.track.sequence |= (stationIndex << 4); } -int32_t tile_element_get_track_sequence(const rct_tile_element * tileElement) +int32_t tile_element_get_track_sequence(const rct_tile_element* tileElement) { return tileElement->properties.track.sequence & MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK; } -void tile_element_set_track_sequence(rct_tile_element * tileElement, int32_t trackSequence) +void tile_element_set_track_sequence(rct_tile_element* tileElement, int32_t trackSequence) { tileElement->properties.track.sequence &= ~MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK; tileElement->properties.track.sequence |= (trackSequence & MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK); } -bool tile_element_get_green_light(const rct_tile_element * tileElement) +bool tile_element_get_green_light(const rct_tile_element* tileElement) { return (tileElement->properties.track.sequence & MAP_ELEM_TRACK_SEQUENCE_GREEN_LIGHT) != 0; } -void tile_element_set_green_light(rct_tile_element * tileElement, bool greenLight) +void tile_element_set_green_light(rct_tile_element* tileElement, bool greenLight) { tileElement->properties.track.sequence &= ~MAP_ELEM_TRACK_SEQUENCE_GREEN_LIGHT; if (greenLight) @@ -2341,28 +2308,28 @@ void tile_element_set_green_light(rct_tile_element * tileElement, bool greenLigh } } -int32_t tile_element_get_brake_booster_speed(const rct_tile_element * tileElement) +int32_t tile_element_get_brake_booster_speed(const rct_tile_element* tileElement) { return (tileElement->properties.track.sequence >> 4) << 1; } -void tile_element_set_brake_booster_speed(rct_tile_element * tileElement, int32_t speed) +void tile_element_set_brake_booster_speed(rct_tile_element* tileElement, int32_t speed) { tileElement->properties.track.sequence = tile_element_get_track_sequence(tileElement) | ((speed >> 1) << 4); } -bool tile_element_is_taking_photo(const rct_tile_element * tileElement) +bool tile_element_is_taking_photo(const rct_tile_element* tileElement) { return (tileElement->properties.track.sequence & MAP_ELEM_TRACK_SEQUENCE_TAKING_PHOTO_MASK) != 0; } -void tile_element_set_onride_photo_timeout(rct_tile_element * tileElement) +void tile_element_set_onride_photo_timeout(rct_tile_element* tileElement) { tileElement->properties.track.sequence &= MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK; tileElement->properties.track.sequence |= (3 << 4); } -void tile_element_decrement_onride_photo_timout(rct_tile_element * tileElement) +void tile_element_decrement_onride_photo_timout(rct_tile_element* tileElement) { // We should only touch the upper 4 bits, avoid underflow into the lower 4. if (tileElement->properties.track.sequence & MAP_ELEM_TRACK_SEQUENCE_TAKING_PHOTO_MASK) @@ -2371,37 +2338,37 @@ void tile_element_decrement_onride_photo_timout(rct_tile_element * tileElement) } } -uint16_t track_element_get_maze_entry(const rct_tile_element * tileElement) +uint16_t track_element_get_maze_entry(const rct_tile_element* tileElement) { return tileElement->properties.track.maze_entry; } -uint8_t track_element_get_ride_index(const rct_tile_element * tileElement) +uint8_t track_element_get_ride_index(const rct_tile_element* tileElement) { return tileElement->properties.track.ride_index; } -void track_element_set_ride_index(rct_tile_element * tileElement, uint8_t rideIndex) +void track_element_set_ride_index(rct_tile_element* tileElement, uint8_t rideIndex) { tileElement->properties.track.ride_index = rideIndex; } -uint8_t track_element_get_type(const rct_tile_element * tileElement) +uint8_t track_element_get_type(const rct_tile_element* tileElement) { return tileElement->properties.track.type; } -void track_element_set_type(rct_tile_element * tileElement, uint8_t type) +void track_element_set_type(rct_tile_element* tileElement, uint8_t type) { tileElement->properties.track.type = type; } -uint8_t track_element_get_door_a_state(const rct_tile_element * tileElement) +uint8_t track_element_get_door_a_state(const rct_tile_element* tileElement) { return (tileElement->properties.track.colour & TRACK_ELEMENT_DOOR_A_MASK) >> 2; } -uint8_t track_element_get_door_b_state(const rct_tile_element * tileElement) +uint8_t track_element_get_door_b_state(const rct_tile_element* tileElement) { return (tileElement->properties.track.colour & TRACK_ELEMENT_DOOR_B_MASK) >> 5; } diff --git a/src/openrct2/ride/Track.h b/src/openrct2/ride/Track.h index d13c4fd191..2d85065f01 100644 --- a/src/openrct2/ride/Track.h +++ b/src/openrct2/ride/Track.h @@ -30,35 +30,35 @@ assert_struct_size(rct_trackdefinition, 8); /* size 0x0A */ struct rct_preview_track { - uint8_t index; // 0x00 - int16_t x; // 0x01 - int16_t y; // 0x03 - int16_t z; // 0x05 - uint8_t var_07; - uint8_t var_08; - uint8_t var_09; + uint8_t index; // 0x00 + int16_t x; // 0x01 + int16_t y; // 0x03 + int16_t z; // 0x05 + uint8_t var_07; + uint8_t var_08; + uint8_t var_09; }; /* size 0x0A */ struct rct_track_coordinates { - int8_t rotation_begin; // 0x00 - int8_t rotation_end; // 0x01 - int16_t z_begin; // 0x02 - int16_t z_end; // 0x04 - int16_t x; // 0x06 - int16_t y; // 0x08 + int8_t rotation_begin; // 0x00 + int8_t rotation_end; // 0x01 + int16_t z_begin; // 0x02 + int16_t z_end; // 0x04 + int16_t x; // 0x06 + int16_t y; // 0x08 }; enum { TRACK_ELEMENT_FLAG_TERMINAL_STATION = 1 << 3, - TRACK_ELEMENT_FLAG_INVERTED = 1 << 6, + TRACK_ELEMENT_FLAG_INVERTED = 1 << 6, }; enum { - TRACK_ELEMENT_TYPE_FLAG_CHAIN_LIFT = 1 << 7, + TRACK_ELEMENT_TYPE_FLAG_CHAIN_LIFT = 1 << 7, }; enum @@ -86,7 +86,7 @@ enum { TRACK_NONE = 0, - TRACK_FLAT = 0, + TRACK_FLAT = 0, TRACK_STRAIGHT, TRACK_STATION_END, TRACK_LIFT_HILL, @@ -143,68 +143,69 @@ enum TRACK_HALF_LOOP_INVERTED, TRACK_BOOSTER = TRACK_ROTATION_CONTROL_TOGGLE, - TRACK_WATERFALL = 152, - TRACK_WHIRLPOOL = 152, + TRACK_WATERFALL = 152, + TRACK_WHIRLPOOL = 152, TRACK_BRAKE_FOR_DROP = 172, - TRACK_190 = 190, - TRACK_192 = 192, - TRACK_194 = 194, + TRACK_190 = 190, + TRACK_192 = 192, + TRACK_194 = 194, TRACK_MINI_GOLF_HOLE = 195, }; enum { - TRACK_CURVE_LEFT_VERY_SMALL = 5, - TRACK_CURVE_LEFT_SMALL = 3, - TRACK_CURVE_LEFT = 1, - TRACK_CURVE_LEFT_LARGE = 7, - TRACK_CURVE_NONE = 0, - TRACK_CURVE_RIGHT_LARGE = 8, - TRACK_CURVE_RIGHT = 2, - TRACK_CURVE_RIGHT_SMALL = 4, + TRACK_CURVE_LEFT_VERY_SMALL = 5, + TRACK_CURVE_LEFT_SMALL = 3, + TRACK_CURVE_LEFT = 1, + TRACK_CURVE_LEFT_LARGE = 7, + TRACK_CURVE_NONE = 0, + TRACK_CURVE_RIGHT_LARGE = 8, + TRACK_CURVE_RIGHT = 2, + TRACK_CURVE_RIGHT_SMALL = 4, TRACK_CURVE_RIGHT_VERY_SMALL = 6 }; enum { - TRACK_SLOPE_NONE = 0, - TRACK_SLOPE_UP_25 = 2, - TRACK_SLOPE_UP_60 = 4, + TRACK_SLOPE_NONE = 0, + TRACK_SLOPE_UP_25 = 2, + TRACK_SLOPE_UP_60 = 4, TRACK_SLOPE_DOWN_25 = 6, TRACK_SLOPE_DOWN_60 = 8, - TRACK_SLOPE_UP_90 = 10, + TRACK_SLOPE_UP_90 = 10, TRACK_SLOPE_DOWN_90 = 18, - TRACK_VANGLE_TOWER = 10, + TRACK_VANGLE_TOWER = 10, TRACK_VANGLE_REVERSE_FREEFALL = 10 }; enum { - TRACK_BANK_NONE = 0, - TRACK_BANK_LEFT = 2, - TRACK_BANK_RIGHT = 4, + TRACK_BANK_NONE = 0, + TRACK_BANK_LEFT = 2, + TRACK_BANK_RIGHT = 4, TRACK_BANK_UPSIDE_DOWN = 15, }; enum { - TRACK_ELEM_FLAG_ONLY_UNDERWATER = (1 << 0), - TRACK_ELEM_FLAG_TURN_LEFT = (1 << 1), - TRACK_ELEM_FLAG_TURN_RIGHT = (1 << 2), - TRACK_ELEM_FLAG_TURN_BANKED = (1 << 3), - TRACK_ELEM_FLAG_TURN_SLOPED = (1 << 4), - TRACK_ELEM_FLAG_DOWN = (1 << 5), - TRACK_ELEM_FLAG_UP = (1 << 6), - TRACK_ELEM_FLAG_NORMAL_TO_INVERSION = (1 << 7), + TRACK_ELEM_FLAG_ONLY_UNDERWATER = (1 << 0), + TRACK_ELEM_FLAG_TURN_LEFT = (1 << 1), + TRACK_ELEM_FLAG_TURN_RIGHT = (1 << 2), + TRACK_ELEM_FLAG_TURN_BANKED = (1 << 3), + TRACK_ELEM_FLAG_TURN_SLOPED = (1 << 4), + TRACK_ELEM_FLAG_DOWN = (1 << 5), + TRACK_ELEM_FLAG_UP = (1 << 6), + TRACK_ELEM_FLAG_NORMAL_TO_INVERSION = (1 << 7), TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT = (1 << 8), - TRACK_ELEM_FLAG_ONLY_ABOVE_GROUND = (1 << 9), - TRACK_ELEM_FLAG_IS_STEEP_UP = (1 << 10), // Used to allow steep backwards lifts on roller coasters that do not allow steep forward lift hills - TRACK_ELEM_FLAG_HELIX = (1 << 11), - TRACK_ELEM_FLAG_ALLOW_LIFT_HILL = (1 << 12), - TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT = (1 << 13), - TRACK_ELEM_FLAG_INVERSION_TO_NORMAL = (1 << 14), - TRACK_ELEM_FLAG_BANKED = (1 << 15), // Also set on Spinning Tunnel and Log Flume reverser, probably to save a flag. + TRACK_ELEM_FLAG_ONLY_ABOVE_GROUND = (1 << 9), + TRACK_ELEM_FLAG_IS_STEEP_UP + = (1 << 10), // Used to allow steep backwards lifts on roller coasters that do not allow steep forward lift hills + TRACK_ELEM_FLAG_HELIX = (1 << 11), + TRACK_ELEM_FLAG_ALLOW_LIFT_HILL = (1 << 12), + TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT = (1 << 13), + TRACK_ELEM_FLAG_INVERSION_TO_NORMAL = (1 << 14), + TRACK_ELEM_FLAG_BANKED = (1 << 15), // Also set on Spinning Tunnel and Log Flume reverser, probably to save a flag. }; enum @@ -219,7 +220,7 @@ enum TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP, TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP, TRACK_ELEM_25_DEG_UP_TO_FLAT, - TRACK_ELEM_25_DEG_DOWN = 10, + TRACK_ELEM_25_DEG_DOWN = 10, TRACK_ELEM_60_DEG_DOWN, TRACK_ELEM_FLAT_TO_25_DEG_DOWN, TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN, @@ -229,7 +230,7 @@ enum TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES, TRACK_ELEM_FLAT_TO_LEFT_BANK, TRACK_ELEM_FLAT_TO_RIGHT_BANK, - TRACK_ELEM_LEFT_BANK_TO_FLAT = 20, + TRACK_ELEM_LEFT_BANK_TO_FLAT = 20, TRACK_ELEM_RIGHT_BANK_TO_FLAT, TRACK_ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES, TRACK_ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES, @@ -239,7 +240,7 @@ enum TRACK_ELEM_25_DEG_UP_TO_RIGHT_BANK, TRACK_ELEM_LEFT_BANK_TO_25_DEG_DOWN, TRACK_ELEM_RIGHT_BANK_TO_25_DEG_DOWN, - TRACK_ELEM_25_DEG_DOWN_TO_LEFT_BANK = 30, + TRACK_ELEM_25_DEG_DOWN_TO_LEFT_BANK = 30, TRACK_ELEM_25_DEG_DOWN_TO_RIGHT_BANK, TRACK_ELEM_LEFT_BANK, TRACK_ELEM_RIGHT_BANK, @@ -249,7 +250,7 @@ enum TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN, TRACK_ELEM_S_BEND_LEFT, TRACK_ELEM_S_BEND_RIGHT, - TRACK_ELEM_LEFT_VERTICAL_LOOP = 40, + TRACK_ELEM_LEFT_VERTICAL_LOOP = 40, TRACK_ELEM_RIGHT_VERTICAL_LOOP, TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES, TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES, @@ -259,7 +260,7 @@ enum TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP, TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN, TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN, - TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE = 50, + TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE = 50, TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE, TRACK_ELEM_LEFT_TWIST_DOWN_TO_UP, TRACK_ELEM_RIGHT_TWIST_DOWN_TO_UP, @@ -269,7 +270,7 @@ enum TRACK_ELEM_HALF_LOOP_DOWN, TRACK_ELEM_LEFT_CORKSCREW_UP, TRACK_ELEM_RIGHT_CORKSCREW_UP, - TRACK_ELEM_LEFT_CORKSCREW_DOWN = 60, + TRACK_ELEM_LEFT_CORKSCREW_DOWN = 60, TRACK_ELEM_RIGHT_CORKSCREW_DOWN, TRACK_ELEM_FLAT_TO_60_DEG_UP, TRACK_ELEM_60_DEG_UP_TO_FLAT, @@ -279,7 +280,7 @@ enum TRACK_ELEM_TOWER_SECTION, TRACK_ELEM_FLAT_COVERED, TRACK_ELEM_25_DEG_UP_COVERED, - TRACK_ELEM_60_DEG_UP_COVERED = 70, + TRACK_ELEM_60_DEG_UP_COVERED = 70, TRACK_ELEM_FLAT_TO_25_DEG_UP_COVERED, TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED, TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED, @@ -289,7 +290,7 @@ enum TRACK_ELEM_FLAT_TO_25_DEG_DOWN_COVERED, TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED, TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED, - TRACK_ELEM_25_DEG_DOWN_TO_FLAT_COVERED = 80, + TRACK_ELEM_25_DEG_DOWN_TO_FLAT_COVERED = 80, TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED, TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED, TRACK_ELEM_S_BEND_LEFT_COVERED, @@ -299,7 +300,7 @@ enum TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL, TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL, TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL, - TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL = 90, + TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL = 90, TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE, TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE, TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE, @@ -309,11 +310,11 @@ enum TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN, TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN, TRACK_ELEM_BRAKES, - TRACK_ELEM_ROTATION_CONTROL_TOGGLE = 100, - TRACK_ELEM_BOOSTER = 100, - TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP = 101, - TRACK_ELEM_MAZE = 101, - TRACK_ELEM_255_ALIAS = 101, // Used by the multi-dimension coaster, as TD6 cannot handle index 255. + TRACK_ELEM_ROTATION_CONTROL_TOGGLE = 100, + TRACK_ELEM_BOOSTER = 100, + TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP = 101, + TRACK_ELEM_MAZE = 101, + TRACK_ELEM_255_ALIAS = 101, // Used by the multi-dimension coaster, as TD6 cannot handle index 255. TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP, TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP, TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN, @@ -322,7 +323,7 @@ enum TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_UP, TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN, TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN, - TRACK_ELEM_25_DEG_UP_LEFT_BANKED = 110, + TRACK_ELEM_25_DEG_UP_LEFT_BANKED = 110, TRACK_ELEM_25_DEG_UP_RIGHT_BANKED, TRACK_ELEM_WATERFALL, TRACK_ELEM_RAPIDS, @@ -332,7 +333,7 @@ enum TRACK_ELEM_WATER_SPLASH, TRACK_ELEM_FLAT_TO_60_DEG_UP_LONG_BASE, TRACK_ELEM_60_DEG_UP_TO_FLAT_LONG_BASE, - TRACK_ELEM_WHIRLPOOL = 120, + TRACK_ELEM_WHIRLPOOL = 120, TRACK_ELEM_FLAT_TO_60_DEG_DOWN_LONG_BASE, TRACK_ELEM_60_DEG_UP_TO_FLAT_LONG_BASE_122, TRACK_ELEM_CABLE_LIFT_HILL, @@ -342,7 +343,7 @@ enum TRACK_ELEM_90_DEG_DOWN, TRACK_ELEM_60_DEG_UP_TO_90_DEG_UP, TRACK_ELEM_90_DEG_DOWN_TO_60_DEG_DOWN, - TRACK_ELEM_90_DEG_UP_TO_60_DEG_UP = 130, + TRACK_ELEM_90_DEG_UP_TO_60_DEG_UP = 130, TRACK_ELEM_60_DEG_DOWN_TO_90_DEG_DOWN, TRACK_ELEM_BRAKE_FOR_DROP, TRACK_ELEM_LEFT_EIGHTH_TO_DIAG, @@ -352,7 +353,7 @@ enum TRACK_ELEM_LEFT_EIGHTH_BANK_TO_DIAG, TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_DIAG, TRACK_ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL, - TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL = 140, + TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL = 140, TRACK_ELEM_DIAG_FLAT, TRACK_ELEM_DIAG_25_DEG_UP, TRACK_ELEM_DIAG_60_DEG_UP, @@ -362,7 +363,7 @@ enum TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT, TRACK_ELEM_DIAG_25_DEG_DOWN, TRACK_ELEM_DIAG_60_DEG_DOWN, - TRACK_ELEM_DIAG_FLAT_TO_25_DEG_DOWN = 150, + TRACK_ELEM_DIAG_FLAT_TO_25_DEG_DOWN = 150, TRACK_ELEM_DIAG_25_DEG_DOWN_TO_60_DEG_DOWN, TRACK_ELEM_DIAG_60_DEG_DOWN_TO_25_DEG_DOWN, TRACK_ELEM_DIAG_25_DEG_DOWN_TO_FLAT, @@ -372,7 +373,7 @@ enum TRACK_ELEM_DIAG_60_DEG_DOWN_TO_FLAT, TRACK_ELEM_DIAG_FLAT_TO_LEFT_BANK, TRACK_ELEM_DIAG_FLAT_TO_RIGHT_BANK, - TRACK_ELEM_DIAG_LEFT_BANK_TO_FLAT = 160, + TRACK_ELEM_DIAG_LEFT_BANK_TO_FLAT = 160, TRACK_ELEM_DIAG_RIGHT_BANK_TO_FLAT, TRACK_ELEM_DIAG_LEFT_BANK_TO_25_DEG_UP, TRACK_ELEM_DIAG_RIGHT_BANK_TO_25_DEG_UP, @@ -382,7 +383,7 @@ enum TRACK_ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN, TRACK_ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK, TRACK_ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK, - TRACK_ELEM_DIAG_LEFT_BANK = 170, + TRACK_ELEM_DIAG_LEFT_BANK = 170, TRACK_ELEM_DIAG_RIGHT_BANK, TRACK_ELEM_LOG_FLUME_REVERSER, TRACK_ELEM_SPINNING_TUNNEL, @@ -402,7 +403,7 @@ enum TRACK_ELEM_LEFT_FLYER_TWIST_UP, TRACK_ELEM_RIGHT_FLYER_TWIST_UP, TRACK_ELEM_LEFT_FLYER_TWIST_DOWN, - TRACK_ELEM_RIGHT_FLYER_TWIST_DOWN = 190, + TRACK_ELEM_RIGHT_FLYER_TWIST_DOWN = 190, TRACK_ELEM_FLYER_HALF_LOOP_UP, TRACK_ELEM_FLYER_HALF_LOOP_DOWN, TRACK_ELEM_LEFT_FLYER_CORKSCREW_UP, @@ -412,7 +413,7 @@ enum TRACK_ELEM_HEARTLINE_TRANSFER_UP, TRACK_ELEM_HEARTLINE_TRANSFER_DOWN, TRACK_ELEM_LEFT_HEARTLINE_ROLL, - TRACK_ELEM_RIGHT_HEARTLINE_ROLL = 200, + TRACK_ELEM_RIGHT_HEARTLINE_ROLL = 200, TRACK_ELEM_MINI_GOLF_HOLE_A, TRACK_ELEM_MINI_GOLF_HOLE_B, TRACK_ELEM_MINI_GOLF_HOLE_C, @@ -422,7 +423,7 @@ enum TRACK_ELEM_90_DEG_TO_INVERTED_FLAT_QUARTER_LOOP_UP, TRACK_ELEM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN, TRACK_ELEM_LEFT_CURVED_LIFT_HILL, - TRACK_ELEM_RIGHT_CURVED_LIFT_HILL = 210, + TRACK_ELEM_RIGHT_CURVED_LIFT_HILL = 210, TRACK_ELEM_LEFT_REVERSER, TRACK_ELEM_RIGHT_REVERSER, TRACK_ELEM_AIR_THRUST_TOP_CAP, @@ -473,25 +474,25 @@ enum enum { FLAT_TRACK_ELEM_1_X_4_A = 95, - FLAT_TRACK_ELEM_2_X_2 = 110, - FLAT_TRACK_ELEM_4_X_4 = 111, - FLAT_TRACK_ELEM_1_X_5 = 116, + FLAT_TRACK_ELEM_2_X_2 = 110, + FLAT_TRACK_ELEM_4_X_4 = 111, + FLAT_TRACK_ELEM_1_X_5 = 116, FLAT_TRACK_ELEM_1_X_1_A = 118, FLAT_TRACK_ELEM_1_X_4_B = 119, FLAT_TRACK_ELEM_1_X_1_B = 121, FLAT_TRACK_ELEM_1_X_4_C = 122, - FLAT_TRACK_ELEM_3_X_3 = 123, + FLAT_TRACK_ELEM_3_X_3 = 123, }; enum { - TRACK_SEQUENCE_FLAG_DIRECTION_0 = (1 << 0), - TRACK_SEQUENCE_FLAG_DIRECTION_1 = (1 << 1), - TRACK_SEQUENCE_FLAG_DIRECTION_2 = (1 << 2), - TRACK_SEQUENCE_FLAG_DIRECTION_3 = (1 << 3), - TRACK_SEQUENCE_FLAG_ORIGIN = (1 << 4), // 0x10 + TRACK_SEQUENCE_FLAG_DIRECTION_0 = (1 << 0), + TRACK_SEQUENCE_FLAG_DIRECTION_1 = (1 << 1), + TRACK_SEQUENCE_FLAG_DIRECTION_2 = (1 << 2), + TRACK_SEQUENCE_FLAG_DIRECTION_3 = (1 << 3), + TRACK_SEQUENCE_FLAG_ORIGIN = (1 << 4), // 0x10 TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH = (1 << 5), // 0x20 - TRACK_SEQUENCE_FLAG_DISALLOW_DOORS = (1 << 6), // 0x40 + TRACK_SEQUENCE_FLAG_DISALLOW_DOORS = (1 << 6), // 0x40 }; enum @@ -502,19 +503,19 @@ enum enum { GC_SET_MAZE_TRACK_BUILD = 0, - GC_SET_MAZE_TRACK_MOVE = 1, - GC_SET_MAZE_TRACK_FILL = 2, + GC_SET_MAZE_TRACK_MOVE = 1, + GC_SET_MAZE_TRACK_FILL = 2, }; struct track_circuit_iterator { - CoordsXYE last; - CoordsXYE current; - int32_t currentZ; - int32_t currentDirection; - rct_tile_element * first; - bool firstIteration; - bool looped; + CoordsXYE last; + CoordsXYE current; + int32_t currentZ; + int32_t currentDirection; + rct_tile_element* first; + bool firstIteration; + bool looped; }; extern const rct_trackdefinition FlatRideTrackDefinitions[256]; @@ -522,64 +523,75 @@ extern const rct_trackdefinition TrackDefinitions[256]; extern uint8_t gTrackGroundFlags; -int32_t track_is_connected_by_shape(rct_tile_element * a, rct_tile_element * b); +int32_t track_is_connected_by_shape(rct_tile_element* a, rct_tile_element* b); -const rct_preview_track * get_track_def_from_ride(Ride * ride, int32_t trackType); -const rct_preview_track * get_track_def_from_ride_index(int32_t rideIndex, int32_t trackType); -const rct_track_coordinates * get_track_coord_from_ride(Ride * ride, int32_t trackType); +const rct_preview_track* get_track_def_from_ride(Ride* ride, int32_t trackType); +const rct_preview_track* get_track_def_from_ride_index(int32_t rideIndex, int32_t trackType); +const rct_track_coordinates* get_track_coord_from_ride(Ride* ride, int32_t trackType); -void track_circuit_iterator_begin(track_circuit_iterator * it, CoordsXYE first); -bool track_circuit_iterator_previous(track_circuit_iterator * it); -bool track_circuit_iterator_next(track_circuit_iterator * it); -bool track_circuit_iterators_match(const track_circuit_iterator * firstIt, const track_circuit_iterator * secondIt); +void track_circuit_iterator_begin(track_circuit_iterator* it, CoordsXYE first); +bool track_circuit_iterator_previous(track_circuit_iterator* it); +bool track_circuit_iterator_next(track_circuit_iterator* it); +bool track_circuit_iterators_match(const track_circuit_iterator* firstIt, const track_circuit_iterator* secondIt); -void track_get_back(CoordsXYE * input, CoordsXYE * output); -void track_get_front(CoordsXYE * input, CoordsXYE * output); +void track_get_back(CoordsXYE* input, CoordsXYE* output); +void track_get_front(CoordsXYE* input, CoordsXYE* output); -bool track_element_is_block_start(rct_tile_element * trackElement); +bool track_element_is_block_start(rct_tile_element* trackElement); bool track_element_is_covered(int32_t trackElementType); -bool track_element_is_station(rct_tile_element * trackElement); -bool track_element_is_lift_hill(const rct_tile_element * trackElement); -void track_element_set_lift_hill(rct_tile_element * trackElement, bool on); -bool track_element_is_cable_lift(const rct_tile_element * trackElement); -void track_element_set_cable_lift(rct_tile_element * trackElement); -void track_element_clear_cable_lift(rct_tile_element * trackElement); -bool track_element_is_inverted(const rct_tile_element * tileElement); -void track_element_set_inverted(rct_tile_element * tileElement, bool inverted); +bool track_element_is_station(rct_tile_element* trackElement); +bool track_element_is_lift_hill(const rct_tile_element* trackElement); +void track_element_set_lift_hill(rct_tile_element* trackElement, bool on); +bool track_element_is_cable_lift(const rct_tile_element* trackElement); +void track_element_set_cable_lift(rct_tile_element* trackElement); +void track_element_clear_cable_lift(rct_tile_element* trackElement); +bool track_element_is_inverted(const rct_tile_element* tileElement); +void track_element_set_inverted(rct_tile_element* tileElement, bool inverted); -int32_t track_get_actual_bank(rct_tile_element * tileElement, int32_t bank); +int32_t track_get_actual_bank(rct_tile_element* tileElement, int32_t bank); int32_t track_get_actual_bank_2(int32_t rideType, bool isInverted, int32_t bank); -int32_t track_get_actual_bank_3(rct_vehicle * vehicle, rct_tile_element * tileElement); +int32_t track_get_actual_bank_3(rct_vehicle* vehicle, rct_tile_element* tileElement); -void game_command_place_track(int32_t * eax, int32_t * ebx, int32_t * ecx, int32_t * edx, int32_t * esi, int32_t * edi, int32_t * ebp); -void game_command_remove_track(int32_t * eax, int32_t * ebx, int32_t * ecx, int32_t * edx, int32_t * esi, int32_t * edi, int32_t * ebp); +void game_command_place_track(int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); +void game_command_remove_track( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); -void game_command_set_maze_track(int32_t * eax, int32_t * ebx, int32_t * ecx, int32_t * edx, int32_t * esi, int32_t * edi, int32_t * ebp); -money32 maze_set_track(uint16_t x, uint16_t y, uint16_t z, uint8_t flags, bool initialPlacement, uint8_t direction, uint8_t rideIndex, uint8_t mode); +void game_command_set_maze_track( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); +money32 maze_set_track( + uint16_t x, + uint16_t y, + uint16_t z, + uint8_t flags, + bool initialPlacement, + uint8_t direction, + uint8_t rideIndex, + uint8_t mode); -void game_command_set_brakes_speed(int32_t * eax, int32_t * ebx, int32_t * ecx, int32_t * edx, int32_t * esi, int32_t * edi, int32_t * ebp); +void game_command_set_brakes_speed( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); bool track_element_is_booster(uint8_t rideType, uint8_t trackType); bool track_element_has_speed_setting(uint8_t trackType); -uint8_t track_element_get_seat_rotation(const rct_tile_element * tileElement); -void track_element_set_seat_rotation(rct_tile_element * tileElement, uint8_t seatRotation); -uint8_t track_element_get_colour_scheme(const rct_tile_element * tileElement); -void track_element_set_colour_scheme(rct_tile_element * tileElement, uint8_t colourScheme); -int32_t tile_element_get_station(const rct_tile_element * tileElement); -void tile_element_set_station(rct_tile_element * tileElement, uint32_t stationIndex); -int32_t tile_element_get_track_sequence(const rct_tile_element * tileElement); -void tile_element_set_track_sequence(rct_tile_element * tileElement, int32_t trackSequence); -bool tile_element_get_green_light(const rct_tile_element * tileElement); -void tile_element_set_green_light(rct_tile_element * tileElement, bool greenLight); -int32_t tile_element_get_brake_booster_speed(const rct_tile_element *tileElement); -void tile_element_set_brake_booster_speed(rct_tile_element *tileElement, int32_t speed); -bool tile_element_is_taking_photo(const rct_tile_element * tileElement); -void tile_element_set_onride_photo_timeout(rct_tile_element * tileElement); -void tile_element_decrement_onride_photo_timout(rct_tile_element * tileElement); -uint16_t track_element_get_maze_entry(const rct_tile_element * tileElement); -uint8_t track_element_get_ride_index(const rct_tile_element * tileElement); -void track_element_set_ride_index(rct_tile_element * tileElement, uint8_t rideIndex); -uint8_t track_element_get_type(const rct_tile_element * tileElement); -void track_element_set_type(rct_tile_element * tileElement, uint8_t rideIndex); +uint8_t track_element_get_seat_rotation(const rct_tile_element* tileElement); +void track_element_set_seat_rotation(rct_tile_element* tileElement, uint8_t seatRotation); +uint8_t track_element_get_colour_scheme(const rct_tile_element* tileElement); +void track_element_set_colour_scheme(rct_tile_element* tileElement, uint8_t colourScheme); +int32_t tile_element_get_station(const rct_tile_element* tileElement); +void tile_element_set_station(rct_tile_element* tileElement, uint32_t stationIndex); +int32_t tile_element_get_track_sequence(const rct_tile_element* tileElement); +void tile_element_set_track_sequence(rct_tile_element* tileElement, int32_t trackSequence); +bool tile_element_get_green_light(const rct_tile_element* tileElement); +void tile_element_set_green_light(rct_tile_element* tileElement, bool greenLight); +int32_t tile_element_get_brake_booster_speed(const rct_tile_element* tileElement); +void tile_element_set_brake_booster_speed(rct_tile_element* tileElement, int32_t speed); +bool tile_element_is_taking_photo(const rct_tile_element* tileElement); +void tile_element_set_onride_photo_timeout(rct_tile_element* tileElement); +void tile_element_decrement_onride_photo_timout(rct_tile_element* tileElement); +uint16_t track_element_get_maze_entry(const rct_tile_element* tileElement); +uint8_t track_element_get_ride_index(const rct_tile_element* tileElement); +void track_element_set_ride_index(rct_tile_element* tileElement, uint8_t rideIndex); +uint8_t track_element_get_type(const rct_tile_element* tileElement); +void track_element_set_type(rct_tile_element* tileElement, uint8_t rideIndex); -uint8_t track_element_get_door_a_state(const rct_tile_element * tileElement); -uint8_t track_element_get_door_b_state(const rct_tile_element * tileElement); +uint8_t track_element_get_door_a_state(const rct_tile_element* tileElement); +uint8_t track_element_get_door_b_state(const rct_tile_element* tileElement); diff --git a/src/openrct2/ride/TrackData.cpp b/src/openrct2/ride/TrackData.cpp index 503e198573..0027482013 100644 --- a/src/openrct2/ride/TrackData.cpp +++ b/src/openrct2/ride/TrackData.cpp @@ -7,9 +7,10 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ +#include "TrackData.h" + #include "../core/Util.hpp" #include "Track.h" -#include "TrackData.h" #include "TrackPaint.h" // clang-format off diff --git a/src/openrct2/ride/TrackData.h b/src/openrct2/ride/TrackData.h index 9cd8487d3e..7f0f243151 100644 --- a/src/openrct2/ride/TrackData.h +++ b/src/openrct2/ride/TrackData.h @@ -21,9 +21,9 @@ extern const rct_track_coordinates FlatTrackCoordinates[253]; extern const uint8_t TrackSequenceProperties[256][16]; extern const uint8_t FlatRideTrackSequenceProperties[256][16]; -extern const uint64_t RideTypePossibleTrackConfigurations[RIDE_TYPE_COUNT]; -extern const rct_preview_track * TrackBlocks[256]; -extern const rct_preview_track * FlatRideTrackBlocks[256]; +extern const uint64_t RideTypePossibleTrackConfigurations[RIDE_TYPE_COUNT]; +extern const rct_preview_track* TrackBlocks[256]; +extern const rct_preview_track* FlatRideTrackBlocks[256]; extern const uint8_t TrackPieceLengths[256]; @@ -37,11 +37,11 @@ extern const track_curve_chain gTrackCurveChain[256]; extern const track_curve_chain gFlatRideTrackCurveChain[256]; extern const TRACK_PAINT_FUNCTION_GETTER RideTypeTrackPaintFunctions[RIDE_TYPE_COUNT]; -extern const uint32_t * RideTypeTrackPaintFunctionsOld[RIDE_TYPE_COUNT]; +extern const uint32_t* RideTypeTrackPaintFunctionsOld[RIDE_TYPE_COUNT]; struct track_descriptor { - bool starts_diagonal; + bool starts_diagonal; uint8_t slope_start; uint8_t bank_start; uint8_t track_curve; @@ -54,11 +54,11 @@ extern const track_descriptor gTrackDescriptors[142]; struct rct_vehicle_info_list { - uint16_t size; - const rct_vehicle_info * info; + uint16_t size; + const rct_vehicle_info* info; }; -extern const rct_vehicle_info_list * const * const gTrackVehicleInfo[17]; +extern const rct_vehicle_info_list* const* const gTrackVehicleInfo[17]; extern const int16_t AlternativeTrackTypes[256]; @@ -84,4 +84,3 @@ extern const uint8_t FlatRideTrackSequenceElementAllowedWallEdges[256][16]; extern const uint16_t FlatTrackFlags[256]; extern const uint16_t TrackFlags[256]; - diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 0fc5979b3a..11167b14e8 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -7,13 +7,17 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ -#include "../audio/audio.h" +#include "TrackDesign.h" + #include "../Cheats.h" +#include "../Game.h" +#include "../OpenRCT2.h" +#include "../actions/WallRemoveAction.hpp" +#include "../audio/audio.h" #include "../core/File.h" #include "../core/Math.hpp" #include "../core/String.hpp" #include "../core/Util.hpp" -#include "../Game.h" #include "../localisation/Localisation.h" #include "../localisation/StringIds.h" #include "../management/Finance.h" @@ -21,15 +25,8 @@ #include "../object/ObjectList.h" #include "../object/ObjectManager.h" #include "../object/ObjectRepository.h" -#include "../OpenRCT2.h" #include "../rct1/RCT1.h" #include "../rct1/Tables.h" -#include "RideData.h" -#include "Ride.h" -#include "TrackData.h" -#include "TrackDesign.h" -#include "TrackDesignRepository.h" -#include "Track.h" #include "../util/SawyerCoding.h" #include "../util/Util.h" #include "../world/Footpath.h" @@ -38,51 +35,55 @@ #include "../world/SmallScenery.h" #include "../world/Surface.h" #include "../world/Wall.h" -#include "../actions/WallRemoveAction.hpp" +#include "Ride.h" +#include "RideData.h" +#include "Track.h" +#include "TrackData.h" +#include "TrackDesignRepository.h" struct map_backup { rct_tile_element tile_elements[MAX_TILE_ELEMENTS]; - rct_tile_element * tile_pointers[MAX_TILE_TILE_ELEMENT_POINTERS]; - rct_tile_element * next_free_tile_element; - uint16_t map_size_units; - uint16_t map_size_units_minus_2; - uint16_t map_size; - uint8_t current_rotation; + rct_tile_element* tile_pointers[MAX_TILE_TILE_ELEMENT_POINTERS]; + rct_tile_element* next_free_tile_element; + uint16_t map_size_units; + uint16_t map_size_units_minus_2; + uint16_t map_size; + uint8_t current_rotation; }; -rct_track_td6 * gActiveTrackDesign; -bool gTrackDesignSceneryToggle; -LocationXYZ16 gTrackPreviewMin; -LocationXYZ16 gTrackPreviewMax; -LocationXYZ16 gTrackPreviewOrigin; +rct_track_td6* gActiveTrackDesign; +bool gTrackDesignSceneryToggle; +LocationXYZ16 gTrackPreviewMin; +LocationXYZ16 gTrackPreviewMax; +LocationXYZ16 gTrackPreviewOrigin; -bool byte_9D8150; -static uint8_t _trackDesignPlaceOperation; -static bool _trackDesignDontPlaceScenery; +bool byte_9D8150; +static uint8_t _trackDesignPlaceOperation; +static bool _trackDesignDontPlaceScenery; static money32 _trackDesignPlaceCost; -static int16_t _trackDesignPlaceZ; -static int16_t _trackDesignPlaceSceneryZ; +static int16_t _trackDesignPlaceZ; +static int16_t _trackDesignPlaceSceneryZ; // Previously all flags in byte_F4414E static bool _trackDesignPlaceStateEntranceExitPlaced = false; static bool _trackDesignPlaceStateSceneryUnavailable = false; -static bool _trackDesignPlaceStateHasScenery = false; -static bool _trackDesignPlaceStatePlaceScenery = true; +static bool _trackDesignPlaceStateHasScenery = false; +static bool _trackDesignPlaceStatePlaceScenery = true; -static rct_track_td6 * track_design_open_from_buffer(uint8_t * src, size_t srcLength); +static rct_track_td6* track_design_open_from_buffer(uint8_t* src, size_t srcLength); -static map_backup * track_design_preview_backup_map(); +static map_backup* track_design_preview_backup_map(); -static void track_design_preview_restore_map(map_backup * backup); +static void track_design_preview_restore_map(map_backup* backup); static void track_design_preview_clear_map(); -static void td6_reset_trailing_elements(rct_track_td6 * td6); +static void td6_reset_trailing_elements(rct_track_td6* td6); -static void td6_set_element_helper_pointers(rct_track_td6 * td6, bool clearScenery); +static void td6_set_element_helper_pointers(rct_track_td6* td6, bool clearScenery); -rct_track_td6 * track_design_open(const utf8 * path) +rct_track_td6* track_design_open(const utf8* path) { log_verbose("track_design_open(\"%s\")", path); @@ -96,16 +97,16 @@ rct_track_td6 * track_design_open(const utf8 * path) } // Decode the track data - uint8_t * decoded = (uint8_t *) malloc(0x10000); + uint8_t* decoded = (uint8_t*)malloc(0x10000); size_t decodedLength = sawyercoding_decode_td6(buffer.data(), decoded, buffer.size()); - decoded = (uint8_t *) realloc(decoded, decodedLength); + decoded = (uint8_t*)realloc(decoded, decodedLength); if (decoded == nullptr) { log_error("failed to realloc"); } else { - rct_track_td6 * td6 = track_design_open_from_buffer(decoded, decodedLength); + rct_track_td6* td6 = track_design_open_from_buffer(decoded, decodedLength); free(decoded); if (td6 != nullptr) @@ -122,9 +123,9 @@ rct_track_td6 * track_design_open(const utf8 * path) return nullptr; } -static rct_track_td6 * track_design_open_from_td4(uint8_t * src, size_t srcLength) +static rct_track_td6* track_design_open_from_td4(uint8_t* src, size_t srcLength) { - rct_track_td4 * td4 = (rct_track_td4 *) calloc(1, sizeof(rct_track_td4)); + rct_track_td4* td4 = (rct_track_td4*)calloc(1, sizeof(rct_track_td4)); if (td4 == nullptr) { log_error("Unable to allocate memory for TD4 data."); @@ -137,7 +138,7 @@ static rct_track_td6 * track_design_open_from_td4(uint8_t * src, size_t srcLengt { memcpy(td4, src, 0x38); td4->elementsSize = srcLength - 0x38; - td4->elements = malloc(td4->elementsSize); + td4->elements = malloc(td4->elementsSize); if (td4->elements == nullptr) { log_error("Unable to allocate memory for TD4 element data."); @@ -150,7 +151,7 @@ static rct_track_td6 * track_design_open_from_td4(uint8_t * src, size_t srcLengt { memcpy(td4, src, 0xC4); td4->elementsSize = srcLength - 0xC4; - td4->elements = malloc(td4->elementsSize); + td4->elements = malloc(td4->elementsSize); if (td4->elements == nullptr) { log_error("Unable to allocate memory for TD4 element data."); @@ -166,7 +167,7 @@ static rct_track_td6 * track_design_open_from_td4(uint8_t * src, size_t srcLengt return nullptr; } - rct_track_td6 * td6 = (rct_track_td6 *) calloc(1, sizeof(rct_track_td6)); + rct_track_td6* td6 = (rct_track_td6*)calloc(1, sizeof(rct_track_td6)); if (td6 == nullptr) { log_error("Unable to allocate memory for TD6 data."); @@ -184,31 +185,31 @@ static rct_track_td6 * track_design_open_from_td4(uint8_t * src, size_t srcLengt } // Convert RCT1 vehicle type to RCT2 vehicle type. Intialise with an string consisting of 8 spaces. - rct_object_entry vehicleObject = {0x80, " "}; + rct_object_entry vehicleObject = { 0x80, " " }; if (td4->type == RIDE_TYPE_MAZE) { - const char * name = RCT1::GetRideTypeObject(td4->type); + const char* name = RCT1::GetRideTypeObject(td4->type); assert(name != nullptr); memcpy(vehicleObject.name, name, std::min(String::SizeOf(name), (size_t)8)); } else { - const char * name = RCT1::GetVehicleObject(td4->vehicle_type); + const char* name = RCT1::GetVehicleObject(td4->vehicle_type); assert(name != nullptr); memcpy(vehicleObject.name, name, std::min(String::SizeOf(name), (size_t)8)); } memcpy(&td6->vehicle_object, &vehicleObject, sizeof(rct_object_entry)); td6->vehicle_type = td4->vehicle_type; - td6->flags = td4->flags; + td6->flags = td4->flags; td6->version_and_colour_scheme = td4->version_and_colour_scheme; // Vehicle colours for (int32_t i = 0; i < RCT1_MAX_TRAINS_PER_RIDE; i++) { // RCT1 had no third colour - RCT1::RCT1VehicleColourSchemeCopyDescriptor colourSchemeCopyDescriptor = RCT1::GetColourSchemeCopyDescriptor( - td4->vehicle_type); + RCT1::RCT1VehicleColourSchemeCopyDescriptor colourSchemeCopyDescriptor + = RCT1::GetColourSchemeCopyDescriptor(td4->vehicle_type); if (colourSchemeCopyDescriptor.colour1 == COPY_COLOUR_1) { td6->vehicle_colours[i].body_colour = RCT1::GetColour(td4->vehicle_colours[i].body_colour); @@ -251,7 +252,7 @@ static rct_track_td6 * track_design_open_from_td4(uint8_t * src, size_t srcLengt // Set remaining vehicles to same colour as first vehicle for (int32_t i = RCT1_MAX_TRAINS_PER_RIDE; i < MAX_VEHICLES_PER_RIDE; i++) { - td6->vehicle_colours[i] = td6->vehicle_colours[0]; + td6->vehicle_colours[i] = td6->vehicle_colours[0]; td6->vehicle_additional_colour[i] = td6->vehicle_additional_colour[0]; } @@ -260,20 +261,20 @@ static rct_track_td6 * track_design_open_from_td4(uint8_t * src, size_t srcLengt { for (int32_t i = 0; i < NUM_COLOUR_SCHEMES; i++) { - td6->track_spine_colour[i] = RCT1::GetColour(td4->track_spine_colour_v0); - td6->track_rail_colour[i] = RCT1::GetColour(td4->track_rail_colour_v0); + td6->track_spine_colour[i] = RCT1::GetColour(td4->track_spine_colour_v0); + td6->track_rail_colour[i] = RCT1::GetColour(td4->track_rail_colour_v0); td6->track_support_colour[i] = RCT1::GetColour(td4->track_support_colour_v0); // Mazes were only hedges switch (td4->type) { - case RCT1_RIDE_TYPE_HEDGE_MAZE: - td6->track_support_colour[i] = MAZE_WALL_TYPE_HEDGE; - break; - case RCT1_RIDE_TYPE_RIVER_RAPIDS: - td6->track_spine_colour[i] = COLOUR_WHITE; - td6->track_rail_colour[i] = COLOUR_WHITE; - break; + case RCT1_RIDE_TYPE_HEDGE_MAZE: + td6->track_support_colour[i] = MAZE_WALL_TYPE_HEDGE; + break; + case RCT1_RIDE_TYPE_RIVER_RAPIDS: + td6->track_spine_colour[i] = COLOUR_WHITE; + td6->track_rail_colour[i] = COLOUR_WHITE; + break; } } } @@ -281,42 +282,42 @@ static rct_track_td6 * track_design_open_from_td4(uint8_t * src, size_t srcLengt { for (int32_t i = 0; i < RCT12_NUM_COLOUR_SCHEMES; i++) { - td6->track_spine_colour[i] = RCT1::GetColour(td4->track_spine_colour[i]); - td6->track_rail_colour[i] = RCT1::GetColour(td4->track_rail_colour[i]); + td6->track_spine_colour[i] = RCT1::GetColour(td4->track_spine_colour[i]); + td6->track_rail_colour[i] = RCT1::GetColour(td4->track_rail_colour[i]); td6->track_support_colour[i] = RCT1::GetColour(td4->track_support_colour[i]); } } - td6->depart_flags = td4->depart_flags; - td6->number_of_trains = td4->number_of_trains; + td6->depart_flags = td4->depart_flags; + td6->number_of_trains = td4->number_of_trains; td6->number_of_cars_per_train = td4->number_of_cars_per_train; - td6->min_waiting_time = td4->min_waiting_time; - td6->max_waiting_time = td4->max_waiting_time; - td6->operation_setting = std::min(td4->operation_setting, RideProperties[td6->type].max_value); - td6->max_speed = td4->max_speed; - td6->average_speed = td4->average_speed; - td6->ride_length = td4->ride_length; - td6->max_positive_vertical_g = td4->max_positive_vertical_g; - td6->max_negative_vertical_g = td4->max_negative_vertical_g; - td6->max_lateral_g = td4->max_lateral_g; - td6->inversions = td4->num_inversions; - td6->drops = td4->num_drops; - td6->highest_drop_height = td4->highest_drop_height / 2; - td6->excitement = td4->excitement; - td6->intensity = td4->intensity; - td6->nausea = td4->nausea; - td6->upkeep_cost = td4->upkeep_cost; + td6->min_waiting_time = td4->min_waiting_time; + td6->max_waiting_time = td4->max_waiting_time; + td6->operation_setting = std::min(td4->operation_setting, RideProperties[td6->type].max_value); + td6->max_speed = td4->max_speed; + td6->average_speed = td4->average_speed; + td6->ride_length = td4->ride_length; + td6->max_positive_vertical_g = td4->max_positive_vertical_g; + td6->max_negative_vertical_g = td4->max_negative_vertical_g; + td6->max_lateral_g = td4->max_lateral_g; + td6->inversions = td4->num_inversions; + td6->drops = td4->num_drops; + td6->highest_drop_height = td4->highest_drop_height / 2; + td6->excitement = td4->excitement; + td6->intensity = td4->intensity; + td6->nausea = td4->nausea; + td6->upkeep_cost = td4->upkeep_cost; if (version == 1) { td6->flags2 = td4->flags2; } - td6->space_required_x = 255; - td6->space_required_y = 255; + td6->space_required_x = 255; + td6->space_required_y = 255; td6->lift_hill_speed_num_circuits = 5; // Move elements across - td6->elements = td4->elements; + td6->elements = td4->elements; td6->elementsSize = td4->elementsSize; td6_reset_trailing_elements(td6); @@ -326,7 +327,7 @@ static rct_track_td6 * track_design_open_from_td4(uint8_t * src, size_t srcLengt return td6; } -static rct_track_td6 * track_design_open_from_buffer(uint8_t * src, size_t srcLength) +static rct_track_td6* track_design_open_from_buffer(uint8_t* src, size_t srcLength) { uint8_t version = (src[7] >> 2) & 3; if (version == 0 || version == 1) @@ -339,7 +340,7 @@ static rct_track_td6 * track_design_open_from_buffer(uint8_t * src, size_t srcLe return nullptr; } - rct_track_td6 * td6 = (rct_track_td6 *) calloc(1, sizeof(rct_track_td6)); + rct_track_td6* td6 = (rct_track_td6*)calloc(1, sizeof(rct_track_td6)); if (td6 == nullptr) { log_error("Unable to allocate memory for TD6 data."); @@ -347,7 +348,7 @@ static rct_track_td6 * track_design_open_from_buffer(uint8_t * src, size_t srcLe } memcpy(td6, src, 0xA3); td6->elementsSize = srcLength - 0xA3; - td6->elements = malloc(td6->elementsSize); + td6->elements = malloc(td6->elementsSize); if (td6->elements == nullptr) { free(td6); @@ -363,31 +364,31 @@ static rct_track_td6 * track_design_open_from_buffer(uint8_t * src, size_t srcLe return td6; } -static void td6_reset_trailing_elements(rct_track_td6 * td6) +static void td6_reset_trailing_elements(rct_track_td6* td6) { - void * lastElement; + void* lastElement; if (td6->type == RIDE_TYPE_MAZE) { - rct_td6_maze_element * mazeElement = (rct_td6_maze_element *) td6->elements; + rct_td6_maze_element* mazeElement = (rct_td6_maze_element*)td6->elements; while (mazeElement->all != 0) { mazeElement++; } - lastElement = (void *) ((uintptr_t) mazeElement + 1); + lastElement = (void*)((uintptr_t)mazeElement + 1); - size_t trailingSize = td6->elementsSize - (size_t)((uintptr_t) lastElement - (uintptr_t) td6->elements); + size_t trailingSize = td6->elementsSize - (size_t)((uintptr_t)lastElement - (uintptr_t)td6->elements); memset(lastElement, 0, trailingSize); } else { - rct_td6_track_element * trackElement = (rct_td6_track_element *) td6->elements; + rct_td6_track_element* trackElement = (rct_td6_track_element*)td6->elements; while (trackElement->type != 0xFF) { trackElement++; } - lastElement = (void *) ((uintptr_t) trackElement + 1); + lastElement = (void*)((uintptr_t)trackElement + 1); - size_t trailingSize = td6->elementsSize - (size_t)((uintptr_t) lastElement - (uintptr_t) td6->elements); + size_t trailingSize = td6->elementsSize - (size_t)((uintptr_t)lastElement - (uintptr_t)td6->elements); memset(lastElement, 0xFF, trailingSize); } } @@ -396,16 +397,16 @@ static void td6_reset_trailing_elements(rct_track_td6 * td6) * * @param clearScenery Set when importing TD4 designs, to avoid corrupted data being interpreted as scenery. */ -static void td6_set_element_helper_pointers(rct_track_td6 * td6, bool clearScenery) +static void td6_set_element_helper_pointers(rct_track_td6* td6, bool clearScenery) { uintptr_t sceneryElementsStart; if (td6->type == RIDE_TYPE_MAZE) { td6->track_elements = nullptr; - td6->maze_elements = (rct_td6_maze_element *) td6->elements; + td6->maze_elements = (rct_td6_maze_element*)td6->elements; - rct_td6_maze_element * maze = td6->maze_elements; + rct_td6_maze_element* maze = td6->maze_elements; for (; maze->all != 0; maze++) { } @@ -413,21 +414,21 @@ static void td6_set_element_helper_pointers(rct_track_td6 * td6, bool clearScene } else { - td6->maze_elements = nullptr; - td6->track_elements = (rct_td6_track_element *) td6->elements; + td6->maze_elements = nullptr; + td6->track_elements = (rct_td6_track_element*)td6->elements; - rct_td6_track_element * track = td6->track_elements; + rct_td6_track_element* track = td6->track_elements; for (; track->type != 0xFF; track++) { } - uintptr_t entranceElementsStart = (uintptr_t) track + 1; + uintptr_t entranceElementsStart = (uintptr_t)track + 1; - rct_td6_entrance_element * entranceElement = (rct_td6_entrance_element *) entranceElementsStart; + rct_td6_entrance_element* entranceElement = (rct_td6_entrance_element*)entranceElementsStart; td6->entrance_elements = entranceElement; for (; entranceElement->z != -1; entranceElement++) { } - sceneryElementsStart = (uintptr_t) entranceElement + 1; + sceneryElementsStart = (uintptr_t)entranceElement + 1; } if (clearScenery) @@ -436,12 +437,12 @@ static void td6_set_element_helper_pointers(rct_track_td6 * td6, bool clearScene } else { - rct_td6_scenery_element * sceneryElement = (rct_td6_scenery_element *) sceneryElementsStart; + rct_td6_scenery_element* sceneryElement = (rct_td6_scenery_element*)sceneryElementsStart; td6->scenery_elements = sceneryElement; } } -void track_design_dispose(rct_track_td6 * td6) +void track_design_dispose(rct_track_td6* td6) { if (td6 != nullptr) { @@ -455,19 +456,19 @@ void track_design_dispose(rct_track_td6 * td6) * * rct2: 0x006ABDB0 */ -static void track_design_load_scenery_objects(rct_track_td6 * td6) +static void track_design_load_scenery_objects(rct_track_td6* td6) { object_manager_unload_all_objects(); // Load ride object - rct_object_entry * rideEntry = &td6->vehicle_object; + rct_object_entry* rideEntry = &td6->vehicle_object; object_manager_load_object(rideEntry); // Load scenery objects - rct_td6_scenery_element * scenery = td6->scenery_elements; + rct_td6_scenery_element* scenery = td6->scenery_elements; for (; scenery != nullptr && scenery->scenery_object.end_flag != 0xFF; scenery++) { - rct_object_entry * sceneryEntry = &scenery->scenery_object; + rct_object_entry* sceneryEntry = &scenery->scenery_object; object_manager_load_object(sceneryEntry); } } @@ -476,9 +477,9 @@ static void track_design_load_scenery_objects(rct_track_td6 * td6) * * rct2: 0x006D247A */ -static void track_design_mirror_scenery(rct_track_td6 * td6) +static void track_design_mirror_scenery(rct_track_td6* td6) { - rct_td6_scenery_element * scenery = td6->scenery_elements; + rct_td6_scenery_element* scenery = td6->scenery_elements; for (; scenery != nullptr && scenery->scenery_object.end_flag != 0xFF; scenery++) { uint8_t entry_type, entry_index; @@ -491,13 +492,13 @@ static void track_design_mirror_scenery(rct_track_td6 * td6) } } - rct_scenery_entry * scenery_entry = (rct_scenery_entry *)object_entry_get_chunk(entry_type, entry_index); + rct_scenery_entry* scenery_entry = (rct_scenery_entry*)object_entry_get_chunk(entry_type, entry_index); switch (entry_type) { - case OBJECT_TYPE_LARGE_SCENERY: + case OBJECT_TYPE_LARGE_SCENERY: { - int16_t x1 = 0, x2 = 0, y1 = 0, y2 = 0; - for (rct_large_scenery_tile * tile = scenery_entry->large_scenery.tiles; tile->x_offset != -1; tile++) + int16_t x1 = 0, x2 = 0, y1 = 0, y2 = 0; + for (rct_large_scenery_tile* tile = scenery_entry->large_scenery.tiles; tile->x_offset != -1; tile++) { if (x1 > tile->x_offset) { @@ -519,65 +520,65 @@ static void track_design_mirror_scenery(rct_track_td6 * td6) switch (scenery->flags & 3) { - case 0: - scenery->y = (-(scenery->y * 32 + y1) - y2) / 32; - break; - case 1: - scenery->x = (scenery->x * 32 + y2 + y1) / 32; - scenery->y = (-(scenery->y * 32)) / 32; - scenery->flags ^= (1 << 1); - break; - case 2: - scenery->y = (-(scenery->y * 32 - y2) + y1) / 32; - break; - case 3: - scenery->x = (scenery->x * 32 - y2 - y1) / 32; - scenery->y = (-(scenery->y * 32)) / 32; - scenery->flags ^= (1 << 1); - break; + case 0: + scenery->y = (-(scenery->y * 32 + y1) - y2) / 32; + break; + case 1: + scenery->x = (scenery->x * 32 + y2 + y1) / 32; + scenery->y = (-(scenery->y * 32)) / 32; + scenery->flags ^= (1 << 1); + break; + case 2: + scenery->y = (-(scenery->y * 32 - y2) + y1) / 32; + break; + case 3: + scenery->x = (scenery->x * 32 - y2 - y1) / 32; + scenery->y = (-(scenery->y * 32)) / 32; + scenery->flags ^= (1 << 1); + break; } break; } - case OBJECT_TYPE_SMALL_SCENERY: - scenery->y = -scenery->y; + case OBJECT_TYPE_SMALL_SCENERY: + scenery->y = -scenery->y; - if (scenery_small_entry_has_flag(scenery_entry, SMALL_SCENERY_FLAG_DIAGONAL)) - { - scenery->flags ^= (1 << 0); - if (!scenery_small_entry_has_flag(scenery_entry, SMALL_SCENERY_FLAG_FULL_TILE)) + if (scenery_small_entry_has_flag(scenery_entry, SMALL_SCENERY_FLAG_DIAGONAL)) { - scenery->flags ^= (1 << 2); + scenery->flags ^= (1 << 0); + if (!scenery_small_entry_has_flag(scenery_entry, SMALL_SCENERY_FLAG_FULL_TILE)) + { + scenery->flags ^= (1 << 2); + } + break; + } + if (scenery->flags & (1 << 0)) + { + scenery->flags ^= (1 << 1); + } + + scenery->flags ^= (1 << 2); + break; + + case OBJECT_TYPE_WALLS: + scenery->y = -scenery->y; + if (scenery->flags & (1 << 0)) + { + scenery->flags ^= (1 << 1); } break; - } - if (scenery->flags & (1 << 0)) - { - scenery->flags ^= (1 << 1); - } - scenery->flags ^= (1 << 2); - break; + case OBJECT_TYPE_PATHS: + scenery->y = -scenery->y; - case OBJECT_TYPE_WALLS: - scenery->y = -scenery->y; - if (scenery->flags & (1 << 0)) - { - scenery->flags ^= (1 << 1); - } - break; + if (scenery->flags & (1 << 5)) + { + scenery->flags ^= (1 << 6); + } - case OBJECT_TYPE_PATHS: - scenery->y = -scenery->y; - - if (scenery->flags & (1 << 5)) - { - scenery->flags ^= (1 << 6); - } - - uint8_t flags = scenery->flags; - flags = ((flags & (1 << 3)) >> 2) | ((flags & (1 << 1)) << 2); - scenery->flags &= 0xF5; - scenery->flags |= flags; + uint8_t flags = scenery->flags; + flags = ((flags & (1 << 3)) >> 2) | ((flags & (1 << 1)) << 2); + scenery->flags &= 0xF5; + scenery->flags |= flags; } } } @@ -586,15 +587,15 @@ static void track_design_mirror_scenery(rct_track_td6 * td6) * * rct2: 0x006D2443 */ -static void track_design_mirror_ride(rct_track_td6 * td6) +static void track_design_mirror_ride(rct_track_td6* td6) { - rct_td6_track_element * track = td6->track_elements; + rct_td6_track_element* track = td6->track_elements; for (; track->type != 0xFF; track++) { track->type = TrackElementMirrorMap[track->type]; } - rct_td6_entrance_element * entrance = td6->entrance_elements; + rct_td6_entrance_element* entrance = td6->entrance_elements; for (; entrance->z != -1; entrance++) { entrance->y = -entrance->y; @@ -606,17 +607,15 @@ static void track_design_mirror_ride(rct_track_td6 * td6) } /** rct2: 0x00993EDC */ -static constexpr const uint8_t maze_segment_mirror_map[] = { - 5, 4, 2, 7, 1, 0, 14, 3, 13, 12, 10, 15, 9, 8, 6, 11 -}; +static constexpr const uint8_t maze_segment_mirror_map[] = { 5, 4, 2, 7, 1, 0, 14, 3, 13, 12, 10, 15, 9, 8, 6, 11 }; /** * * rct2: 0x006D25FA */ -static void track_design_mirror_maze(rct_track_td6 * td6) +static void track_design_mirror_maze(rct_track_td6* td6) { - rct_td6_maze_element * maze = td6->maze_elements; + rct_td6_maze_element* maze = td6->maze_elements; for (; maze->all != 0; maze++) { maze->y = -maze->y; @@ -630,9 +629,9 @@ static void track_design_mirror_maze(rct_track_td6 * td6) continue; } - uint16_t maze_entry = maze->maze_entry; - uint16_t new_entry = 0; - for (uint8_t position = bitscanforward(maze_entry); position != 0xFF; position = bitscanforward(maze_entry)) + uint16_t maze_entry = maze->maze_entry; + uint16_t new_entry = 0; + for (uint8_t position = bitscanforward(maze_entry); position != 0xFF; position = bitscanforward(maze_entry)) { maze_entry &= ~(1 << position); new_entry |= (1 << maze_segment_mirror_map[position]); @@ -645,7 +644,7 @@ static void track_design_mirror_maze(rct_track_td6 * td6) * * rct2: 0x006D2436 */ -void track_design_mirror(rct_track_td6 * td6) +void track_design_mirror(rct_track_td6* td6) { if (td6->type == RIDE_TYPE_MAZE) { @@ -660,7 +659,7 @@ void track_design_mirror(rct_track_td6 * td6) static void track_design_add_selection_tile(int16_t x, int16_t y) { - LocationXY16 * selectionTile = gMapSelectionTiles; + LocationXY16* selectionTile = gMapSelectionTiles; // Subtract 2 because the tile gets incremented later on for (; (selectionTile < gMapSelectionTiles + Util::CountOf(gMapSelectionTiles) - 2) && (selectionTile->x != -1); selectionTile++) @@ -695,7 +694,7 @@ static void track_design_update_max_min_coordinates(int16_t x, int16_t y, int16_ * rct2: 0x006D0964 */ static int32_t -track_design_place_scenery(rct_td6_scenery_element * scenery_start, int32_t originX, int32_t originY, int32_t originZ) + track_design_place_scenery(rct_td6_scenery_element* scenery_start, int32_t originX, int32_t originY, int32_t originZ) { for (uint8_t mode = 0; mode <= 1; mode++) { @@ -709,37 +708,37 @@ track_design_place_scenery(rct_td6_scenery_element * scenery_start, int32_t orig continue; } - for (rct_td6_scenery_element * scenery = scenery_start; scenery->scenery_object.end_flag != 0xFF; scenery++) + for (rct_td6_scenery_element* scenery = scenery_start; scenery->scenery_object.end_flag != 0xFF; scenery++) { - uint8_t rotation = _currentTrackPieceDirection; - LocationXY8 tile = {(uint8_t) (originX / 32), (uint8_t) (originY / 32)}; + uint8_t rotation = _currentTrackPieceDirection; + LocationXY8 tile = { (uint8_t)(originX / 32), (uint8_t)(originY / 32) }; switch (rotation & 3) { - case TILE_ELEMENT_DIRECTION_WEST: - tile.x += scenery->x; - tile.y += scenery->y; - break; - case TILE_ELEMENT_DIRECTION_NORTH: - tile.x += scenery->y; - tile.y -= scenery->x; - break; - case TILE_ELEMENT_DIRECTION_EAST: - tile.x -= scenery->x; - tile.y -= scenery->y; - break; - case TILE_ELEMENT_DIRECTION_SOUTH: - tile.x -= scenery->y; - tile.y += scenery->x; - break; + case TILE_ELEMENT_DIRECTION_WEST: + tile.x += scenery->x; + tile.y += scenery->y; + break; + case TILE_ELEMENT_DIRECTION_NORTH: + tile.x += scenery->y; + tile.y -= scenery->x; + break; + case TILE_ELEMENT_DIRECTION_EAST: + tile.x -= scenery->x; + tile.y -= scenery->y; + break; + case TILE_ELEMENT_DIRECTION_SOUTH: + tile.x -= scenery->y; + tile.y += scenery->x; + break; } - LocationXY16 mapCoord = {(int16_t) (tile.x * 32), (int16_t) (tile.y * 32)}; + LocationXY16 mapCoord = { (int16_t)(tile.x * 32), (int16_t)(tile.y * 32) }; track_design_update_max_min_coordinates(mapCoord.x, mapCoord.y, originZ); if (_trackDesignPlaceOperation == PTD_OPERATION_DRAW_OUTLINES && mode == 0) { - uint8_t new_tile = 1; - LocationXY16 * selectionTile = gMapSelectionTiles; + uint8_t new_tile = 1; + LocationXY16* selectionTile = gMapSelectionTiles; for (; selectionTile->x != -1; selectionTile++) { if (selectionTile->x == tile.x && selectionTile->y == tile.y) @@ -779,10 +778,9 @@ track_design_place_scenery(rct_td6_scenery_element * scenery_start, int32_t orig } entry_index = 0; - for (rct_footpath_entry * path = get_footpath_entry(0); + for (rct_footpath_entry* path = get_footpath_entry(0); entry_index < object_entry_group_counts[OBJECT_TYPE_PATHS]; - path = get_footpath_entry(entry_index), entry_index++ - ) + path = get_footpath_entry(entry_index), entry_index++) { if (path == nullptr) { @@ -799,59 +797,52 @@ track_design_place_scenery(rct_td6_scenery_element * scenery_start, int32_t orig entry_type = 0xFF; } } - int32_t z; - const uint32_t flags = GAME_COMMAND_FLAG_APPLY | - GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | - GAME_COMMAND_FLAG_5 | - GAME_COMMAND_FLAG_GHOST; + int32_t z; + const uint32_t flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 + | GAME_COMMAND_FLAG_GHOST; switch (entry_type) { - case OBJECT_TYPE_SMALL_SCENERY: - { - //bl - rotation += scenery->flags; - rotation &= 3; - - //bh - uint8_t quadrant = (scenery->flags >> 2) + _currentTrackPieceDirection; - quadrant &= 3; - - uint8_t bh = rotation | (quadrant << 6) | TILE_ELEMENT_TYPE_SMALL_SCENERY; - - rct_scenery_entry * small_scenery = get_small_scenery_entry(entry_index); - if (!(!scenery_small_entry_has_flag(small_scenery, SMALL_SCENERY_FLAG_FULL_TILE) && - scenery_small_entry_has_flag(small_scenery, SMALL_SCENERY_FLAG_DIAGONAL)) && - scenery_small_entry_has_flag(small_scenery, - SMALL_SCENERY_FLAG_DIAGONAL | SMALL_SCENERY_FLAG_HALF_SPACE | - SMALL_SCENERY_FLAG_THREE_QUARTERS)) + case OBJECT_TYPE_SMALL_SCENERY: { - bh &= 0x3F; - } + // bl + rotation += scenery->flags; + rotation &= 3; - z = (scenery->z * 8 + originZ) / 8; - game_do_command( - mapCoord.x, - flags | bh << 8, - mapCoord.y, - (entry_index << 8) | z, - GAME_COMMAND_REMOVE_SCENERY, - 0, - 0); - break; - } - case OBJECT_TYPE_LARGE_SCENERY: - z = (scenery->z * 8 + originZ) / 8; - game_do_command( - mapCoord.x, - flags | (((rotation + scenery->flags) & 0x3) << 8), - mapCoord.y, - z, - GAME_COMMAND_REMOVE_LARGE_SCENERY, - 0, - 0); - break; - case OBJECT_TYPE_WALLS: + // bh + uint8_t quadrant = (scenery->flags >> 2) + _currentTrackPieceDirection; + quadrant &= 3; + + uint8_t bh = rotation | (quadrant << 6) | TILE_ELEMENT_TYPE_SMALL_SCENERY; + + rct_scenery_entry* small_scenery = get_small_scenery_entry(entry_index); + if (!(!scenery_small_entry_has_flag(small_scenery, SMALL_SCENERY_FLAG_FULL_TILE) + && scenery_small_entry_has_flag(small_scenery, SMALL_SCENERY_FLAG_DIAGONAL)) + && scenery_small_entry_has_flag( + small_scenery, + SMALL_SCENERY_FLAG_DIAGONAL | SMALL_SCENERY_FLAG_HALF_SPACE + | SMALL_SCENERY_FLAG_THREE_QUARTERS)) + { + bh &= 0x3F; + } + + z = (scenery->z * 8 + originZ) / 8; + game_do_command( + mapCoord.x, flags | bh << 8, mapCoord.y, (entry_index << 8) | z, GAME_COMMAND_REMOVE_SCENERY, 0, 0); + break; + } + case OBJECT_TYPE_LARGE_SCENERY: + z = (scenery->z * 8 + originZ) / 8; + game_do_command( + mapCoord.x, + flags | (((rotation + scenery->flags) & 0x3) << 8), + mapCoord.y, + z, + GAME_COMMAND_REMOVE_LARGE_SCENERY, + 0, + 0); + break; + case OBJECT_TYPE_WALLS: { z = (scenery->z * 8 + originZ) / 8; @@ -864,14 +855,10 @@ track_design_place_scenery(rct_td6_scenery_element * scenery_start, int32_t orig GameActions::Execute(&wallRemoveAction); } break; - case OBJECT_TYPE_PATHS: - z = (scenery->z * 8 + originZ) / 8; - footpath_remove( - mapCoord.x, - mapCoord.y, - z, - flags); - break; + case OBJECT_TYPE_PATHS: + z = (scenery->z * 8 + originZ) / 8; + footpath_remove(mapCoord.x, mapCoord.y, z, flags); + break; } } @@ -884,14 +871,10 @@ track_design_place_scenery(rct_td6_scenery_element * scenery_start, int32_t orig } } - if (_trackDesignPlaceOperation == PTD_OPERATION_1 || - _trackDesignPlaceOperation == PTD_OPERATION_2 || - _trackDesignPlaceOperation == PTD_OPERATION_GET_PLACE_Z || - _trackDesignPlaceOperation == PTD_OPERATION_4 || - _trackDesignPlaceOperation == PTD_OPERATION_GET_COST - ) + if (_trackDesignPlaceOperation == PTD_OPERATION_1 || _trackDesignPlaceOperation == PTD_OPERATION_2 + || _trackDesignPlaceOperation == PTD_OPERATION_GET_PLACE_Z || _trackDesignPlaceOperation == PTD_OPERATION_4 + || _trackDesignPlaceOperation == PTD_OPERATION_GET_COST) { - uint8_t entry_type, entry_index; if (!find_object_in_entry_group(&scenery->scenery_object, &entry_type, &entry_index)) { @@ -909,11 +892,10 @@ track_design_place_scenery(rct_td6_scenery_element * scenery_start, int32_t orig } entry_index = 0; - for (rct_footpath_entry * path = get_footpath_entry(0); + for (rct_footpath_entry* path = get_footpath_entry(0); entry_index < object_entry_group_counts[OBJECT_TYPE_PATHS]; - path = get_footpath_entry(entry_index), entry_index++) + path = get_footpath_entry(entry_index), entry_index++) { - if (path == nullptr) { continue; @@ -932,174 +914,118 @@ track_design_place_scenery(rct_td6_scenery_element * scenery_start, int32_t orig } money32 cost; - int16_t z; - uint8_t bl; - uint8_t quadrant; + int16_t z; + uint8_t bl; + uint8_t quadrant; switch (entry_type) { - case OBJECT_TYPE_SMALL_SCENERY: - if (mode != 0) - { - continue; - } - if (_trackDesignPlaceOperation == PTD_OPERATION_GET_PLACE_Z) - { - continue; - } - - rotation += scenery->flags; - rotation &= 3; - z = scenery->z * 8 + originZ; - quadrant = ((scenery->flags >> 2) + _currentTrackPieceDirection) & 3; - - bl = 0x81; - if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) - { - bl = 0xA9; - } - if (_trackDesignPlaceOperation == PTD_OPERATION_4) - { - bl = 0xE9; - } - if (_trackDesignPlaceOperation == PTD_OPERATION_1) - { - bl = 0x80; - } - - gGameCommandErrorTitle = STR_CANT_POSITION_THIS_HERE; - - cost = game_do_command( - mapCoord.x, - bl | (entry_index << 8), - mapCoord.y, - quadrant | (scenery->primary_colour << 8), - GAME_COMMAND_PLACE_SCENERY, - rotation | (scenery->secondary_colour << 16), - z - ); - - if (cost == MONEY32_UNDEFINED) - { - cost = 0; - } - break; - case OBJECT_TYPE_LARGE_SCENERY: - if (mode != 0) - { - continue; - } - if (_trackDesignPlaceOperation == PTD_OPERATION_GET_PLACE_Z) - { - continue; - } - - rotation += scenery->flags; - rotation &= 3; - - z = scenery->z * 8 + originZ; - - bl = 0x81; - if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) - { - bl = 0xA9; - } - if (_trackDesignPlaceOperation == PTD_OPERATION_4) - { - bl = 0xE9; - } - if (_trackDesignPlaceOperation == PTD_OPERATION_1) - { - bl = 0x80; - } - - cost = game_do_command( - mapCoord.x, - bl | (rotation << 8), - mapCoord.y, - scenery->primary_colour | (scenery->secondary_colour << 8), - GAME_COMMAND_PLACE_LARGE_SCENERY, - entry_index, - z - ); - - if (cost == MONEY32_UNDEFINED) - { - cost = 0; - } - break; - case OBJECT_TYPE_WALLS: - if (mode != 0) - { - continue; - } - if (_trackDesignPlaceOperation == PTD_OPERATION_GET_PLACE_Z) - { - continue; - } - - z = scenery->z * 8 + originZ; - rotation += scenery->flags; - rotation &= 3; - - bl = 1; - if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) - { - bl = 0xA9; - } - if (_trackDesignPlaceOperation == PTD_OPERATION_4) - { - bl = 105; - } - if (_trackDesignPlaceOperation == PTD_OPERATION_1) - { - bl = 0; - } - - gGameCommandErrorTitle = STR_CANT_BUILD_PARK_ENTRANCE_HERE; - - cost = game_do_command( - mapCoord.x, - bl | (entry_index << 8), - mapCoord.y, - rotation | (scenery->primary_colour << 8), - GAME_COMMAND_PLACE_WALL, - z, - scenery->secondary_colour | ((scenery->flags & 0xFC) << 6) - ); - - if (cost == MONEY32_UNDEFINED) - { - cost = 0; - } - break; - case OBJECT_TYPE_PATHS: - if (_trackDesignPlaceOperation == PTD_OPERATION_GET_PLACE_Z) - { - continue; - } - - z = (scenery->z * 8 + originZ) / 8; - if (mode == 0) - { - if (scenery->flags & (1 << 7)) + case OBJECT_TYPE_SMALL_SCENERY: + if (mode != 0) { - //dh - entry_index |= (1 << 7); + continue; + } + if (_trackDesignPlaceOperation == PTD_OPERATION_GET_PLACE_Z) + { + continue; } - uint8_t bh = ((scenery->flags & 0xF) << rotation); - bl = bh >> 4; - bh = (bh | bl) & 0xF; - bl = (((scenery->flags >> 5) + rotation) & 3) << 5; - bh |= bl; + rotation += scenery->flags; + rotation &= 3; + z = scenery->z * 8 + originZ; + quadrant = ((scenery->flags >> 2) + _currentTrackPieceDirection) & 3; - bh |= scenery->flags & 0x90; + bl = 0x81; + if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) + { + bl = 0xA9; + } + if (_trackDesignPlaceOperation == PTD_OPERATION_4) + { + bl = 0xE9; + } + if (_trackDesignPlaceOperation == PTD_OPERATION_1) + { + bl = 0x80; + } + + gGameCommandErrorTitle = STR_CANT_POSITION_THIS_HERE; + + cost = game_do_command( + mapCoord.x, + bl | (entry_index << 8), + mapCoord.y, + quadrant | (scenery->primary_colour << 8), + GAME_COMMAND_PLACE_SCENERY, + rotation | (scenery->secondary_colour << 16), + z); + + if (cost == MONEY32_UNDEFINED) + { + cost = 0; + } + break; + case OBJECT_TYPE_LARGE_SCENERY: + if (mode != 0) + { + continue; + } + if (_trackDesignPlaceOperation == PTD_OPERATION_GET_PLACE_Z) + { + continue; + } + + rotation += scenery->flags; + rotation &= 3; + + z = scenery->z * 8 + originZ; + + bl = 0x81; + if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) + { + bl = 0xA9; + } + if (_trackDesignPlaceOperation == PTD_OPERATION_4) + { + bl = 0xE9; + } + if (_trackDesignPlaceOperation == PTD_OPERATION_1) + { + bl = 0x80; + } + + cost = game_do_command( + mapCoord.x, + bl | (rotation << 8), + mapCoord.y, + scenery->primary_colour | (scenery->secondary_colour << 8), + GAME_COMMAND_PLACE_LARGE_SCENERY, + entry_index, + z); + + if (cost == MONEY32_UNDEFINED) + { + cost = 0; + } + break; + case OBJECT_TYPE_WALLS: + if (mode != 0) + { + continue; + } + if (_trackDesignPlaceOperation == PTD_OPERATION_GET_PLACE_Z) + { + continue; + } + + z = scenery->z * 8 + originZ; + rotation += scenery->flags; + rotation &= 3; bl = 1; if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) { - bl = 41; + bl = 0xA9; } if (_trackDesignPlaceOperation == PTD_OPERATION_4) { @@ -1110,46 +1036,104 @@ track_design_place_scenery(rct_td6_scenery_element * scenery_start, int32_t orig bl = 0; } - gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; - cost = game_do_command(mapCoord.x, bl | (bh << 8), mapCoord.y, - z | (entry_index << 8), - GAME_COMMAND_PLACE_PATH_FROM_TRACK, 0, 0); - } - else - { - if (_trackDesignPlaceOperation == PTD_OPERATION_1) + gGameCommandErrorTitle = STR_CANT_BUILD_PARK_ENTRANCE_HERE; + + cost = game_do_command( + mapCoord.x, + bl | (entry_index << 8), + mapCoord.y, + rotation | (scenery->primary_colour << 8), + GAME_COMMAND_PLACE_WALL, + z, + scenery->secondary_colour | ((scenery->flags & 0xFC) << 6)); + + if (cost == MONEY32_UNDEFINED) + { + cost = 0; + } + break; + case OBJECT_TYPE_PATHS: + if (_trackDesignPlaceOperation == PTD_OPERATION_GET_PLACE_Z) { continue; } - rct_tile_element * tile_element = map_get_path_element_at(mapCoord.x / 32, mapCoord.y / 32, z); - - if (tile_element == nullptr) + z = (scenery->z * 8 + originZ) / 8; + if (mode == 0) { + if (scenery->flags & (1 << 7)) + { + // dh + entry_index |= (1 << 7); + } + + uint8_t bh = ((scenery->flags & 0xF) << rotation); + bl = bh >> 4; + bh = (bh | bl) & 0xF; + bl = (((scenery->flags >> 5) + rotation) & 3) << 5; + bh |= bl; + + bh |= scenery->flags & 0x90; + + bl = 1; + if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) + { + bl = 41; + } + if (_trackDesignPlaceOperation == PTD_OPERATION_4) + { + bl = 105; + } + if (_trackDesignPlaceOperation == PTD_OPERATION_1) + { + bl = 0; + } + + gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + cost = game_do_command( + mapCoord.x, + bl | (bh << 8), + mapCoord.y, + z | (entry_index << 8), + GAME_COMMAND_PLACE_PATH_FROM_TRACK, + 0, + 0); + } + else + { + if (_trackDesignPlaceOperation == PTD_OPERATION_1) + { + continue; + } + + rct_tile_element* tile_element = map_get_path_element_at(mapCoord.x / 32, mapCoord.y / 32, z); + + if (tile_element == nullptr) + { + continue; + } + + footpath_queue_chain_reset(); + footpath_remove_edges_at(mapCoord.x, mapCoord.y, tile_element); + + bl = 1; + if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) + { + bl = 41; + } + if (_trackDesignPlaceOperation == PTD_OPERATION_4) + { + bl = 105; + } + + footpath_connect_edges(mapCoord.x, mapCoord.y, tile_element, bl); + footpath_update_queue_chains(); continue; } - - footpath_queue_chain_reset(); - footpath_remove_edges_at(mapCoord.x, mapCoord.y, tile_element); - - bl = 1; - if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) - { - bl = 41; - } - if (_trackDesignPlaceOperation == PTD_OPERATION_4) - { - bl = 105; - } - - footpath_connect_edges(mapCoord.x, mapCoord.y, tile_element, bl); - footpath_update_queue_chains(); + break; + default: + _trackDesignPlaceStateSceneryUnavailable = true; continue; - } - break; - default: - _trackDesignPlaceStateSceneryUnavailable = true; - continue; } _trackDesignPlaceCost = add_clamp_money32(_trackDesignPlaceCost, cost); if (_trackDesignPlaceOperation != PTD_OPERATION_2) @@ -1174,24 +1158,24 @@ track_design_place_scenery(rct_td6_scenery_element * scenery_start, int32_t orig return 1; } -static int32_t track_design_place_maze(rct_track_td6 * td6, int16_t x, int16_t y, int16_t z, uint8_t rideIndex) +static int32_t track_design_place_maze(rct_track_td6* td6, int16_t x, int16_t y, int16_t z, uint8_t rideIndex) { if (_trackDesignPlaceOperation == PTD_OPERATION_DRAW_OUTLINES) { - gMapSelectionTiles->x = -1; + gMapSelectionTiles->x = -1; gMapSelectArrowPosition.x = x; gMapSelectArrowPosition.y = y; gMapSelectArrowPosition.z = tile_element_height(x, y) & 0xFFFF; gMapSelectArrowDirection = _currentTrackPieceDirection; } - _trackDesignPlaceZ = 0; + _trackDesignPlaceZ = 0; _trackDesignPlaceCost = 0; - rct_td6_maze_element * maze_element = td6->maze_elements; + rct_td6_maze_element* maze_element = td6->maze_elements; for (; maze_element->all != 0; maze_element++) { - uint8_t rotation = _currentTrackPieceDirection & 3; + uint8_t rotation = _currentTrackPieceDirection & 3; int16_t tmpX = maze_element->x * 32; int16_t tmpY = maze_element->y * 32; rotate_map_coordinates(&tmpX, &tmpY, rotation); @@ -1206,107 +1190,134 @@ static int32_t track_design_place_maze(rct_track_td6 * td6, int16_t x, int16_t y track_design_add_selection_tile(mapCoord.x, mapCoord.y); } - if (_trackDesignPlaceOperation == PTD_OPERATION_1 || - _trackDesignPlaceOperation == PTD_OPERATION_2 || - _trackDesignPlaceOperation == PTD_OPERATION_4 || - _trackDesignPlaceOperation == PTD_OPERATION_GET_COST - ) + if (_trackDesignPlaceOperation == PTD_OPERATION_1 || _trackDesignPlaceOperation == PTD_OPERATION_2 + || _trackDesignPlaceOperation == PTD_OPERATION_4 || _trackDesignPlaceOperation == PTD_OPERATION_GET_COST) { - uint8_t flags; + uint8_t flags; money32 cost = 0; - uint16_t maze_entry; + uint16_t maze_entry; switch (maze_element->type) { - case MAZE_ELEMENT_TYPE_ENTRANCE: - // entrance - rotation += maze_element->direction; - rotation &= 3; + case MAZE_ELEMENT_TYPE_ENTRANCE: + // entrance + rotation += maze_element->direction; + rotation &= 3; - flags = GAME_COMMAND_FLAG_APPLY; - gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; - - if (_trackDesignPlaceOperation == PTD_OPERATION_1) - { - cost = game_do_command(mapCoord.x, 0 | rotation << 8, mapCoord.y, (z / 16) & 0xFF, - GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, -1, 0); - } - else - { - if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) - { - flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5; - } - else if (_trackDesignPlaceOperation == PTD_OPERATION_4) - { - flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 | - GAME_COMMAND_FLAG_GHOST; - } - cost = game_do_command(mapCoord.x, flags | rotation << 8, mapCoord.y, rideIndex, - GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, 0, 0); - } - if (cost != MONEY32_UNDEFINED) - { - _trackDesignPlaceStateEntranceExitPlaced = true; - } - break; - case MAZE_ELEMENT_TYPE_EXIT: - // exit - rotation += maze_element->direction; - rotation &= 3; - - flags = GAME_COMMAND_FLAG_APPLY; - gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; - - if (_trackDesignPlaceOperation == PTD_OPERATION_1) - { - cost = game_do_command(mapCoord.x, 0 | rotation << 8, mapCoord.y, ((z / 16) & 0xFF) | (1 << 8), - GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, -1, 0); - } - else - { - if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) - { - flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5; - } - else if (_trackDesignPlaceOperation == PTD_OPERATION_4) - { - flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 | - GAME_COMMAND_FLAG_GHOST; - } - cost = game_do_command(mapCoord.x, flags | rotation << 8, mapCoord.y, rideIndex | (1 << 8), - GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, 0, 0); - } - if (cost != MONEY32_UNDEFINED) - { - _trackDesignPlaceStateEntranceExitPlaced = true; - } - break; - default: - maze_entry = rol16(maze_element->maze_entry, rotation * 4); - - if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) - { - flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5; - } - else if (_trackDesignPlaceOperation == PTD_OPERATION_4) - { - flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 | - GAME_COMMAND_FLAG_GHOST; - } - else if (_trackDesignPlaceOperation == PTD_OPERATION_1) - { - flags = 0; - } - else - { flags = GAME_COMMAND_FLAG_APPLY; - } + gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; - gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + if (_trackDesignPlaceOperation == PTD_OPERATION_1) + { + cost = game_do_command( + mapCoord.x, + 0 | rotation << 8, + mapCoord.y, + (z / 16) & 0xFF, + GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, + -1, + 0); + } + else + { + if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) + { + flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5; + } + else if (_trackDesignPlaceOperation == PTD_OPERATION_4) + { + flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 + | GAME_COMMAND_FLAG_GHOST; + } + cost = game_do_command( + mapCoord.x, + flags | rotation << 8, + mapCoord.y, + rideIndex, + GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, + 0, + 0); + } + if (cost != MONEY32_UNDEFINED) + { + _trackDesignPlaceStateEntranceExitPlaced = true; + } + break; + case MAZE_ELEMENT_TYPE_EXIT: + // exit + rotation += maze_element->direction; + rotation &= 3; - cost = game_do_command(mapCoord.x, flags | (maze_entry & 0xFF) << 8, mapCoord.y, - rideIndex | (maze_entry & 0xFF00), GAME_COMMAND_PLACE_MAZE_DESIGN, z, 0); - break; + flags = GAME_COMMAND_FLAG_APPLY; + gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + + if (_trackDesignPlaceOperation == PTD_OPERATION_1) + { + cost = game_do_command( + mapCoord.x, + 0 | rotation << 8, + mapCoord.y, + ((z / 16) & 0xFF) | (1 << 8), + GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, + -1, + 0); + } + else + { + if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) + { + flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5; + } + else if (_trackDesignPlaceOperation == PTD_OPERATION_4) + { + flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 + | GAME_COMMAND_FLAG_GHOST; + } + cost = game_do_command( + mapCoord.x, + flags | rotation << 8, + mapCoord.y, + rideIndex | (1 << 8), + GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, + 0, + 0); + } + if (cost != MONEY32_UNDEFINED) + { + _trackDesignPlaceStateEntranceExitPlaced = true; + } + break; + default: + maze_entry = rol16(maze_element->maze_entry, rotation * 4); + + if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) + { + flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5; + } + else if (_trackDesignPlaceOperation == PTD_OPERATION_4) + { + flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 + | GAME_COMMAND_FLAG_GHOST; + } + else if (_trackDesignPlaceOperation == PTD_OPERATION_1) + { + flags = 0; + } + else + { + flags = GAME_COMMAND_FLAG_APPLY; + } + + gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + + cost = game_do_command( + mapCoord.x, + flags | (maze_entry & 0xFF) << 8, + mapCoord.y, + rideIndex | (maze_entry & 0xFF00), + GAME_COMMAND_PLACE_MAZE_DESIGN, + z, + 0); + break; } _trackDesignPlaceCost += cost; @@ -1337,8 +1348,8 @@ static int32_t track_design_place_maze(rct_track_td6 * td6, int16_t x, int16_t y continue; } - rct_tile_element * tile_element = map_get_surface_element_at(mapCoord); - int16_t map_height = tile_element->base_height * 8; + rct_tile_element* tile_element = map_get_surface_element_at(mapCoord); + int16_t map_height = tile_element->base_height * 8; if (tile_element->properties.surface.slope & TILE_ELEMENT_SLOPE_ALL_CORNERS_UP) { map_height += 16; @@ -1368,7 +1379,10 @@ static int32_t track_design_place_maze(rct_track_td6 * td6, int16_t x, int16_t y if (_trackDesignPlaceOperation == PTD_OPERATION_CLEAR_OUTLINES) { - ride_action_modify(rideIndex, RIDE_MODIFY_DEMOLISH, GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 | GAME_COMMAND_FLAG_GHOST); + ride_action_modify( + rideIndex, + RIDE_MODIFY_DEMOLISH, + GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 | GAME_COMMAND_FLAG_GHOST); } gTrackPreviewOrigin.x = x; @@ -1377,28 +1391,29 @@ static int32_t track_design_place_maze(rct_track_td6 * td6, int16_t x, int16_t y return 1; } -static bool track_design_place_ride(rct_track_td6 * td6, int16_t x, int16_t y, int16_t z, uint8_t rideIndex) +static bool track_design_place_ride(rct_track_td6* td6, int16_t x, int16_t y, int16_t z, uint8_t rideIndex) { - const rct_preview_track * * trackBlockArray = (ride_type_has_flag(td6->type, RIDE_TYPE_FLAG_HAS_TRACK)) ? TrackBlocks : FlatRideTrackBlocks; + const rct_preview_track** trackBlockArray + = (ride_type_has_flag(td6->type, RIDE_TYPE_FLAG_HAS_TRACK)) ? TrackBlocks : FlatRideTrackBlocks; gTrackPreviewOrigin.x = x; gTrackPreviewOrigin.y = y; gTrackPreviewOrigin.z = z; if (_trackDesignPlaceOperation == PTD_OPERATION_DRAW_OUTLINES) { - gMapSelectionTiles->x = -1; + gMapSelectionTiles->x = -1; gMapSelectArrowPosition.x = x; gMapSelectArrowPosition.y = y; gMapSelectArrowPosition.z = tile_element_height(x, y) & 0xFFFF; gMapSelectArrowDirection = _currentTrackPieceDirection; } - _trackDesignPlaceZ = 0; + _trackDesignPlaceZ = 0; _trackDesignPlaceCost = 0; uint8_t rotation = _currentTrackPieceDirection; // Track elements - rct_td6_track_element * track = td6->track_elements; + rct_td6_track_element* track = td6->track_elements; for (; track->type != 0xFF; track++) { uint8_t trackType = track->type; @@ -1411,130 +1426,123 @@ static bool track_design_place_ride(rct_track_td6 * td6, int16_t x, int16_t y, i switch (_trackDesignPlaceOperation) { - case PTD_OPERATION_DRAW_OUTLINES: - for (const rct_preview_track * trackBlock = trackBlockArray[trackType]; trackBlock->index != 0xFF; trackBlock++) - { - LocationXY16 tile = {x, y}; - map_offset_with_rotation(&tile.x, &tile.y, trackBlock->x, trackBlock->y, rotation); - track_design_update_max_min_coordinates(tile.x, tile.y, z); - track_design_add_selection_tile(tile.x, tile.y); - } - break; - case PTD_OPERATION_CLEAR_OUTLINES: - { - const rct_track_coordinates * trackCoordinates = &TrackCoordinates[trackType]; - const rct_preview_track * trackBlock = trackBlockArray[trackType]; - int32_t tempZ = z - trackCoordinates->z_begin + trackBlock->z; - uint8_t flags = - GAME_COMMAND_FLAG_APPLY | - GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | - GAME_COMMAND_FLAG_5 | - GAME_COMMAND_FLAG_GHOST; - ride_remove_track_piece(x, y, tempZ, rotation & 3, trackType, flags); - break; - } - case PTD_OPERATION_1: - case PTD_OPERATION_2: - case PTD_OPERATION_4: - case PTD_OPERATION_GET_COST: - { - const rct_track_coordinates * trackCoordinates = &TrackCoordinates[trackType]; - - //di - int16_t tempZ = z - trackCoordinates->z_begin; - uint32_t trackColour = (track->flags >> 4) & 0x3; - uint32_t brakeSpeed = (track->flags & 0x0F) * 2; - uint32_t seatRotation = track->flags & 0x0F; - - uint32_t edi = - (brakeSpeed << 16) | - (seatRotation << 28) | - (trackColour << 24) | - (tempZ & 0xFFFF); - - int32_t edx = _currentRideIndex | (trackType << 8); - if (track->flags & TRACK_ELEMENT_TYPE_FLAG_CHAIN_LIFT) - { - edx |= 0x10000; - } - if (track->flags & TRACK_ELEMENT_FLAG_INVERTED) - { - edx |= 0x20000; - } - - uint8_t flags = GAME_COMMAND_FLAG_APPLY; - if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) - { - flags |= GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED; - flags |= GAME_COMMAND_FLAG_5; - } - else if (_trackDesignPlaceOperation == PTD_OPERATION_4) - { - flags |= GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED; - flags |= GAME_COMMAND_FLAG_5; - flags |= GAME_COMMAND_FLAG_GHOST; - } - else if (_trackDesignPlaceOperation == PTD_OPERATION_1) - { - flags = 0; - } - - gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; - money32 cost = game_do_command(x, flags | (rotation << 8), y, edx, GAME_COMMAND_PLACE_TRACK, edi, 0); - _trackDesignPlaceCost += cost; - if (cost == MONEY32_UNDEFINED) - { - _trackDesignPlaceCost = cost; - return false; - } - break; - } - case PTD_OPERATION_GET_PLACE_Z: - { - int32_t tempZ = z - TrackCoordinates[trackType].z_begin; - for (const rct_preview_track * trackBlock = trackBlockArray[trackType]; trackBlock->index != 0xFF; trackBlock++) - { - int16_t tmpX = x; - int16_t tmpY = y; - map_offset_with_rotation(&tmpX, &tmpY, trackBlock->x, trackBlock->y, rotation); - CoordsXY tile = { tmpX, tmpY }; - if (tile.x < 0 || tile.y < 0 || tile.x >= (256 * 32) || tile.y >= (256 * 32)) + case PTD_OPERATION_DRAW_OUTLINES: + for (const rct_preview_track* trackBlock = trackBlockArray[trackType]; trackBlock->index != 0xFF; trackBlock++) { - continue; + LocationXY16 tile = { x, y }; + map_offset_with_rotation(&tile.x, &tile.y, trackBlock->x, trackBlock->y, rotation); + track_design_update_max_min_coordinates(tile.x, tile.y, z); + track_design_add_selection_tile(tile.x, tile.y); + } + break; + case PTD_OPERATION_CLEAR_OUTLINES: + { + const rct_track_coordinates* trackCoordinates = &TrackCoordinates[trackType]; + const rct_preview_track* trackBlock = trackBlockArray[trackType]; + int32_t tempZ = z - trackCoordinates->z_begin + trackBlock->z; + uint8_t flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 + | GAME_COMMAND_FLAG_GHOST; + ride_remove_track_piece(x, y, tempZ, rotation & 3, trackType, flags); + break; + } + case PTD_OPERATION_1: + case PTD_OPERATION_2: + case PTD_OPERATION_4: + case PTD_OPERATION_GET_COST: + { + const rct_track_coordinates* trackCoordinates = &TrackCoordinates[trackType]; + + // di + int16_t tempZ = z - trackCoordinates->z_begin; + uint32_t trackColour = (track->flags >> 4) & 0x3; + uint32_t brakeSpeed = (track->flags & 0x0F) * 2; + uint32_t seatRotation = track->flags & 0x0F; + + uint32_t edi = (brakeSpeed << 16) | (seatRotation << 28) | (trackColour << 24) | (tempZ & 0xFFFF); + + int32_t edx = _currentRideIndex | (trackType << 8); + if (track->flags & TRACK_ELEMENT_TYPE_FLAG_CHAIN_LIFT) + { + edx |= 0x10000; + } + if (track->flags & TRACK_ELEMENT_FLAG_INVERTED) + { + edx |= 0x20000; } - rct_tile_element * tileElement = map_get_surface_element_at(tile); - if (tileElement == nullptr) + uint8_t flags = GAME_COMMAND_FLAG_APPLY; + if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) { + flags |= GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED; + flags |= GAME_COMMAND_FLAG_5; + } + else if (_trackDesignPlaceOperation == PTD_OPERATION_4) + { + flags |= GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED; + flags |= GAME_COMMAND_FLAG_5; + flags |= GAME_COMMAND_FLAG_GHOST; + } + else if (_trackDesignPlaceOperation == PTD_OPERATION_1) + { + flags = 0; + } + + gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + money32 cost = game_do_command(x, flags | (rotation << 8), y, edx, GAME_COMMAND_PLACE_TRACK, edi, 0); + _trackDesignPlaceCost += cost; + if (cost == MONEY32_UNDEFINED) + { + _trackDesignPlaceCost = cost; return false; } - - int32_t height = tileElement->base_height * 8; - if (tileElement->properties.surface.slope & TILE_ELEMENT_SLOPE_ALL_CORNERS_UP) + break; + } + case PTD_OPERATION_GET_PLACE_Z: + { + int32_t tempZ = z - TrackCoordinates[trackType].z_begin; + for (const rct_preview_track* trackBlock = trackBlockArray[trackType]; trackBlock->index != 0xFF; trackBlock++) { - height += 16; - if (tileElement->properties.surface.slope & TILE_ELEMENT_SLOPE_DOUBLE_HEIGHT) + int16_t tmpX = x; + int16_t tmpY = y; + map_offset_with_rotation(&tmpX, &tmpY, trackBlock->x, trackBlock->y, rotation); + CoordsXY tile = { tmpX, tmpY }; + if (tile.x < 0 || tile.y < 0 || tile.x >= (256 * 32) || tile.y >= (256 * 32)) + { + continue; + } + + rct_tile_element* tileElement = map_get_surface_element_at(tile); + if (tileElement == nullptr) + { + return false; + } + + int32_t height = tileElement->base_height * 8; + if (tileElement->properties.surface.slope & TILE_ELEMENT_SLOPE_ALL_CORNERS_UP) { height += 16; + if (tileElement->properties.surface.slope & TILE_ELEMENT_SLOPE_DOUBLE_HEIGHT) + { + height += 16; + } + } + + uint8_t water_height = surface_get_water_height(tileElement) * 16; + if (water_height > 0 && water_height > height) + { + height = water_height; + } + int32_t heightDifference = tempZ + _trackDesignPlaceZ + trackBlock->z - height; + if (heightDifference < 0) + { + _trackDesignPlaceZ -= heightDifference; } } - - uint8_t water_height = surface_get_water_height(tileElement) * 16; - if (water_height > 0 && water_height > height) - { - height = water_height; - } - int32_t heightDifference = tempZ + _trackDesignPlaceZ + trackBlock->z - height; - if (heightDifference < 0) - { - _trackDesignPlaceZ -= heightDifference; - } + break; } - break; - } } - const rct_track_coordinates * track_coordinates = &TrackCoordinates[trackType]; + const rct_track_coordinates* track_coordinates = &TrackCoordinates[trackType]; map_offset_with_rotation(&x, &y, track_coordinates->x, track_coordinates->y, rotation); z -= track_coordinates->z_begin; z += track_coordinates->z_end; @@ -1552,12 +1560,12 @@ static bool track_design_place_ride(rct_track_td6 * td6, int16_t x, int16_t y, i } // Entrance elements - rct_td6_entrance_element * entrance = td6->entrance_elements; + rct_td6_entrance_element* entrance = td6->entrance_elements; for (; entrance->z != -1; entrance++) { rotation = _currentTrackPieceDirection & 3; - x = entrance->x; - y = entrance->y; + x = entrance->x; + y = entrance->y; rotate_map_coordinates(&x, &y, rotation); x += gTrackPreviewOrigin.x; y += gTrackPreviewOrigin.y; @@ -1566,97 +1574,98 @@ static bool track_design_place_ride(rct_track_td6 * td6, int16_t x, int16_t y, i switch (_trackDesignPlaceOperation) { - case PTD_OPERATION_DRAW_OUTLINES: - track_design_add_selection_tile(x, y); - break; - case PTD_OPERATION_1: - case PTD_OPERATION_2: - case PTD_OPERATION_4: - case PTD_OPERATION_GET_COST: - { - rotation = (rotation + entrance->direction) & 3; - uint8_t isExit = 0; - if (entrance->direction & (1 << 7)) + case PTD_OPERATION_DRAW_OUTLINES: + track_design_add_selection_tile(x, y); + break; + case PTD_OPERATION_1: + case PTD_OPERATION_2: + case PTD_OPERATION_4: + case PTD_OPERATION_GET_COST: { - isExit = 1; - } - - if (_trackDesignPlaceOperation != PTD_OPERATION_1) - { - LocationXY16 tile = { - (int16_t) (x + CoordsDirectionDelta[rotation].x), - (int16_t) (y + CoordsDirectionDelta[rotation].y) - }; - rct_tile_element * tile_element = map_get_first_element_at(tile.x >> 5, tile.y >> 5); - z = gTrackPreviewOrigin.z / 8; - z += (entrance->z == (int8_t) (uint8_t) 0x80) ? -1 : entrance->z; - - do + rotation = (rotation + entrance->direction) & 3; + uint8_t isExit = 0; + if (entrance->direction & (1 << 7)) { - if (tile_element->GetType() != TILE_ELEMENT_TYPE_TRACK) - { - continue; - } - if (tile_element->base_height != z) - { - continue; - } + isExit = 1; + } - int32_t stationIndex = tile_element_get_station(tile_element); - uint8_t bl = 1; - if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) + if (_trackDesignPlaceOperation != PTD_OPERATION_1) + { + LocationXY16 tile + = { (int16_t)(x + CoordsDirectionDelta[rotation].x), (int16_t)(y + CoordsDirectionDelta[rotation].y) }; + rct_tile_element* tile_element = map_get_first_element_at(tile.x >> 5, tile.y >> 5); + z = gTrackPreviewOrigin.z / 8; + z += (entrance->z == (int8_t)(uint8_t)0x80) ? -1 : entrance->z; + + do { - bl = 41; - } - if (_trackDesignPlaceOperation == PTD_OPERATION_4) - { - bl = 105; - } - if (_trackDesignPlaceOperation == PTD_OPERATION_1) - { - bl = 0; - } + if (tile_element->GetType() != TILE_ELEMENT_TYPE_TRACK) + { + continue; + } + if (tile_element->base_height != z) + { + continue; + } + + int32_t stationIndex = tile_element_get_station(tile_element); + uint8_t bl = 1; + if (_trackDesignPlaceOperation == PTD_OPERATION_GET_COST) + { + bl = 41; + } + if (_trackDesignPlaceOperation == PTD_OPERATION_4) + { + bl = 105; + } + if (_trackDesignPlaceOperation == PTD_OPERATION_1) + { + bl = 0; + } + + gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; + money32 cost = game_do_command( + x, + bl | (rotation << 8), + y, + rideIndex | (isExit << 8), + GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, + stationIndex, + 0); + _trackDesignPlaceCost += cost; + + if (cost == MONEY32_UNDEFINED) + { + _trackDesignPlaceCost = cost; + return false; + } + _trackDesignPlaceStateEntranceExitPlaced = true; + break; + } while (!(tile_element++)->IsLastForTile()); + } + else + { + z = (entrance->z == (int8_t)(uint8_t)0x80) ? -1 : entrance->z; + z *= 8; + z += gTrackPreviewOrigin.z; + z >>= 4; gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; - money32 cost = game_do_command(x, bl | (rotation << 8), y, - rideIndex | (isExit << 8), - GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, - stationIndex, 0); - _trackDesignPlaceCost += cost; - + money32 cost = game_do_command( + x, 0 | (rotation << 8), y, z | (isExit << 8), GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, -1, 0); if (cost == MONEY32_UNDEFINED) { _trackDesignPlaceCost = cost; return false; } - _trackDesignPlaceStateEntranceExitPlaced = true; - break; + else + { + _trackDesignPlaceCost += cost; + _trackDesignPlaceStateEntranceExitPlaced = true; + } } - while (!(tile_element++)->IsLastForTile()); + break; } - else - { - z = (entrance->z == (int8_t) (uint8_t) 0x80) ? -1 : entrance->z; - z *= 8; - z += gTrackPreviewOrigin.z; - z >>= 4; - - gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; - money32 cost = game_do_command(x, 0 | (rotation << 8), y, z | (isExit << 8), - GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, -1, 0); - if (cost == MONEY32_UNDEFINED) - { - _trackDesignPlaceCost = cost; - return false; - } - else - { - _trackDesignPlaceCost += cost; - _trackDesignPlaceStateEntranceExitPlaced = true; - } - } - break; - } } } @@ -1669,32 +1678,33 @@ static bool track_design_place_ride(rct_track_td6 * td6, int16_t x, int16_t y, i } /** -* Places a virtual track. This can involve highlighting the surface tiles and showing the track layout. It is also used by -* the track preview window to place the whole track. -* Depending on the value of bl it modifies the function. -* bl == 0, Draw outlines on the ground -* bl == 1, -* bl == 2, -* bl == 3, Returns the z value of a successful placement. Only lower 16 bits are the value, the rest may be garbage? -* bl == 4, -* bl == 5, Returns cost to create the track. All 32 bits are used. Places the track. (used by the preview) -* bl == 6, Clear white outlined track. -* rct2: 0x006D01B3 -*/ -int32_t place_virtual_track(rct_track_td6 * td6, uint8_t ptdOperation, bool placeScenery, uint8_t rideIndex, int16_t x, int16_t y, int16_t z) + * Places a virtual track. This can involve highlighting the surface tiles and showing the track layout. It is also used by + * the track preview window to place the whole track. + * Depending on the value of bl it modifies the function. + * bl == 0, Draw outlines on the ground + * bl == 1, + * bl == 2, + * bl == 3, Returns the z value of a successful placement. Only lower 16 bits are the value, the rest may be garbage? + * bl == 4, + * bl == 5, Returns cost to create the track. All 32 bits are used. Places the track. (used by the preview) + * bl == 6, Clear white outlined track. + * rct2: 0x006D01B3 + */ +int32_t place_virtual_track( + rct_track_td6* td6, uint8_t ptdOperation, bool placeScenery, uint8_t rideIndex, int16_t x, int16_t y, int16_t z) { // Previously byte_F4414E was cleared here - _trackDesignPlaceStatePlaceScenery = placeScenery; + _trackDesignPlaceStatePlaceScenery = placeScenery; _trackDesignPlaceStateEntranceExitPlaced = false; _trackDesignPlaceStateSceneryUnavailable = false; - _trackDesignPlaceStateHasScenery = false; + _trackDesignPlaceStateHasScenery = false; _trackDesignPlaceOperation = ptdOperation; if (gTrackDesignSceneryToggle) { _trackDesignPlaceStatePlaceScenery = false; } - _currentRideIndex = rideIndex; + _currentRideIndex = rideIndex; gTrackPreviewMin.x = x; gTrackPreviewMin.y = y; @@ -1715,15 +1725,10 @@ int32_t place_virtual_track(rct_track_td6 * td6, uint8_t ptdOperation, bool plac } // Scenery elements - rct_td6_scenery_element * scenery = td6->scenery_elements; + rct_td6_scenery_element* scenery = td6->scenery_elements; if (track_place_success && scenery != nullptr) { - if (!track_design_place_scenery( - scenery, - gTrackPreviewOrigin.x, - gTrackPreviewOrigin.y, - gTrackPreviewOrigin.z - )) + if (!track_design_place_scenery(scenery, gTrackPreviewOrigin.x, gTrackPreviewOrigin.y, gTrackPreviewOrigin.z)) { return _trackDesignPlaceCost; } @@ -1753,9 +1758,9 @@ int32_t place_virtual_track(rct_track_td6 * td6, uint8_t ptdOperation, bool plac * ebx = ride_id * cost = edi */ -static bool track_design_place_preview(rct_track_td6 * td6, money32 * cost, uint8_t * rideId, uint8_t * flags) +static bool track_design_place_preview(rct_track_td6* td6, money32* cost, uint8_t* rideId, uint8_t* flags) { - *flags = 0; + *flags = 0; uint8_t entry_type, entry_index; if (!find_object_in_entry_group(&td6->vehicle_object, &entry_type, &entry_index)) @@ -1771,9 +1776,8 @@ static bool track_design_place_preview(rct_track_td6 * td6, money32 * cost, uint return false; } - Ride * ride = get_ride(rideIndex); - rct_string_id new_ride_name = user_string_allocate(USER_STRING_HIGH_ID_NUMBER | USER_STRING_DUPLICATION_PERMITTED, - ""); + Ride* ride = get_ride(rideIndex); + rct_string_id new_ride_name = user_string_allocate(USER_STRING_HIGH_ID_NUMBER | USER_STRING_DUPLICATION_PERMITTED, ""); if (new_ride_name != 0) { rct_string_id old_name = ride->name; @@ -1785,9 +1789,9 @@ static bool track_design_place_preview(rct_track_td6 * td6, money32 * cost, uint for (int32_t i = 0; i < RCT12_NUM_COLOUR_SCHEMES; i++) { - ride->track_colour_main[i] = td6->track_spine_colour[i]; + ride->track_colour_main[i] = td6->track_spine_colour[i]; ride->track_colour_additional[i] = td6->track_rail_colour[i]; - ride->track_colour_supports[i] = td6->track_support_colour[i]; + ride->track_colour_supports[i] = td6->track_support_colour[i]; } // Flat rides need their vehicle colours loaded for display @@ -1802,7 +1806,7 @@ static bool track_design_place_preview(rct_track_td6 * td6, money32 * cost, uint } byte_9D8150 = true; - uint8_t backup_rotation = _currentTrackPieceDirection; + uint8_t backup_rotation = _currentTrackPieceDirection; uint32_t backup_park_flags = gParkFlags; gParkFlags &= ~PARK_FLAGS_FORBID_HIGH_CONSTRUCTION; int32_t mapSize = gMapSize << 4; @@ -1839,8 +1843,8 @@ static bool track_design_place_preview(rct_track_td6 * td6, money32 * cost, uint } _currentTrackPieceDirection = backup_rotation; - byte_9D8150 = false; - *cost = resultCost; + byte_9D8150 = false; + *cost = resultCost; *rideId = rideIndex; return true; } @@ -1854,7 +1858,7 @@ static bool track_design_place_preview(rct_track_td6 * td6, money32 * cost, uint } } -static money32 place_track_design(int16_t x, int16_t y, int16_t z, uint8_t flags, uint8_t * outRideIndex) +static money32 place_track_design(int16_t x, int16_t y, int16_t z, uint8_t flags, uint8_t* outRideIndex) { *outRideIndex = 255; @@ -1871,19 +1875,19 @@ static money32 place_track_design(int16_t x, int16_t y, int16_t z, uint8_t flags } } - rct_track_td6 * td6 = gActiveTrackDesign; + rct_track_td6* td6 = gActiveTrackDesign; if (td6 == nullptr) { return MONEY32_UNDEFINED; } - rct_object_entry * rideEntryObject = &td6->vehicle_object; + rct_object_entry* rideEntryObject = &td6->vehicle_object; uint8_t entryType, entryIndex; if (!find_object_in_entry_group(rideEntryObject, &entryType, &entryIndex)) { entryIndex = 0xFF; } - // Force a fallback if the entry is not invented yet a td6 of it is selected, which can happen in select-by-track-type mode. + // Force a fallback if the entry is not invented yet a td6 of it is selected, which can happen in select-by-track-type mode. else if (!ride_entry_is_invented(entryIndex) && !gCheatsIgnoreResearchStatus) { entryIndex = 0xFF; @@ -1892,23 +1896,23 @@ static money32 place_track_design(int16_t x, int16_t y, int16_t z, uint8_t flags // The rest of the cases are handled by the code in ride_create() if (RideGroupManager::RideTypeHasRideGroups(td6->type) && entryIndex == 0xFF) { - const ObjectRepositoryItem * ori = object_repository_find_object_by_name(rideEntryObject->name); + const ObjectRepositoryItem* ori = object_repository_find_object_by_name(rideEntryObject->name); if (ori != nullptr) { - uint8_t rideGroupIndex = ori->RideInfo.RideGroupIndex; - const RideGroup * td6RideGroup = RideGroupManager::RideGroupFind(td6->type, rideGroupIndex); + uint8_t rideGroupIndex = ori->RideInfo.RideGroupIndex; + const RideGroup* td6RideGroup = RideGroupManager::RideGroupFind(td6->type, rideGroupIndex); - uint8_t * availableRideEntries = get_ride_entry_indices_for_ride_type(td6->type); - for (uint8_t * rei = availableRideEntries; *rei != RIDE_ENTRY_INDEX_NULL; rei++) + uint8_t* availableRideEntries = get_ride_entry_indices_for_ride_type(td6->type); + for (uint8_t* rei = availableRideEntries; *rei != RIDE_ENTRY_INDEX_NULL; rei++) { - rct_ride_entry * ire = get_ride_entry(*rei); + rct_ride_entry* ire = get_ride_entry(*rei); if (!ride_entry_is_invented(*rei) && !gCheatsIgnoreResearchStatus) { continue; } - const RideGroup * irg = RideGroupManager::GetRideGroup(td6->type, ire); + const RideGroup* irg = RideGroupManager::GetRideGroup(td6->type, ire); if (td6RideGroup->Equals(irg)) { entryIndex = *rei; @@ -1918,18 +1922,17 @@ static money32 place_track_design(int16_t x, int16_t y, int16_t z, uint8_t flags } } - uint8_t rideIndex; - uint8_t rideColour; - money32 createRideResult = ride_create_command(td6->type, entryIndex, GAME_COMMAND_FLAG_APPLY, &rideIndex, - &rideColour); + uint8_t rideIndex; + uint8_t rideColour; + money32 createRideResult = ride_create_command(td6->type, entryIndex, GAME_COMMAND_FLAG_APPLY, &rideIndex, &rideColour); if (createRideResult == MONEY32_UNDEFINED) { - gGameCommandErrorTitle = STR_CANT_CREATE_NEW_RIDE_ATTRACTION; + gGameCommandErrorTitle = STR_CANT_CREATE_NEW_RIDE_ATTRACTION; gCommandExpenditureType = RCT_EXPENDITURE_TYPE_RIDE_CONSTRUCTION; return MONEY32_UNDEFINED; } - Ride * ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); if (ride->type == RIDE_TYPE_NULL) { log_warning("Invalid game command for track placement, ride id = %d", rideIndex); @@ -1940,11 +1943,11 @@ static money32 place_track_design(int16_t x, int16_t y, int16_t z, uint8_t flags if (!(flags & GAME_COMMAND_FLAG_APPLY)) { _trackDesignDontPlaceScenery = false; - cost = place_virtual_track(td6, PTD_OPERATION_1, true, rideIndex, x, y, z); + cost = place_virtual_track(td6, PTD_OPERATION_1, true, rideIndex, x, y, z); if (_trackDesignPlaceStateSceneryUnavailable) { _trackDesignDontPlaceScenery = true; - cost = place_virtual_track(td6, PTD_OPERATION_1, false, rideIndex, x, y, z); + cost = place_virtual_track(td6, PTD_OPERATION_1, false, rideIndex, x, y, z); } } else @@ -1966,7 +1969,7 @@ static money32 place_track_design(int16_t x, int16_t y, int16_t z, uint8_t flags { rct_string_id error_reason = gGameCommandErrorText; ride_action_modify(rideIndex, RIDE_MODIFY_DEMOLISH, GAME_COMMAND_FLAG_APPLY); - gGameCommandErrorText = error_reason; + gGameCommandErrorText = error_reason; gCommandExpenditureType = RCT_EXPENDITURE_TYPE_RIDE_CONSTRUCTION; *outRideIndex = rideIndex; return cost; @@ -1974,34 +1977,70 @@ static money32 place_track_design(int16_t x, int16_t y, int16_t z, uint8_t flags if (entryIndex != 0xFF) { - game_do_command(0, GAME_COMMAND_FLAG_APPLY | (2 << 8), 0, rideIndex | (entryIndex << 8), - GAME_COMMAND_SET_RIDE_VEHICLES, 0, 0); + game_do_command( + 0, GAME_COMMAND_FLAG_APPLY | (2 << 8), 0, rideIndex | (entryIndex << 8), GAME_COMMAND_SET_RIDE_VEHICLES, 0, 0); } - game_do_command(0, GAME_COMMAND_FLAG_APPLY | (td6->ride_mode << 8), 0, rideIndex | (0 << 8), - GAME_COMMAND_SET_RIDE_SETTING, 0, 0); - game_do_command(0, GAME_COMMAND_FLAG_APPLY | (0 << 8), 0, rideIndex | (td6->number_of_trains << 8), - GAME_COMMAND_SET_RIDE_VEHICLES, 0, 0); - game_do_command(0, GAME_COMMAND_FLAG_APPLY | (1 << 8), 0, rideIndex | (td6->number_of_cars_per_train << 8), - GAME_COMMAND_SET_RIDE_VEHICLES, 0, 0); - game_do_command(0, GAME_COMMAND_FLAG_APPLY | (td6->depart_flags << 8), 0, rideIndex | (1 << 8), - GAME_COMMAND_SET_RIDE_SETTING, 0, 0); - game_do_command(0, GAME_COMMAND_FLAG_APPLY | (td6->min_waiting_time << 8), 0, rideIndex | (2 << 8), - GAME_COMMAND_SET_RIDE_SETTING, 0, 0); - game_do_command(0, GAME_COMMAND_FLAG_APPLY | (td6->max_waiting_time << 8), 0, rideIndex | (3 << 8), - GAME_COMMAND_SET_RIDE_SETTING, 0, 0); - game_do_command(0, GAME_COMMAND_FLAG_APPLY | (td6->operation_setting << 8), 0, rideIndex | (4 << 8), - GAME_COMMAND_SET_RIDE_SETTING, 0, 0); - game_do_command(0, GAME_COMMAND_FLAG_APPLY | ((td6->lift_hill_speed_num_circuits & 0x1F) << 8), 0, - rideIndex | (8 << 8), GAME_COMMAND_SET_RIDE_SETTING, 0, 0); + game_do_command( + 0, GAME_COMMAND_FLAG_APPLY | (td6->ride_mode << 8), 0, rideIndex | (0 << 8), GAME_COMMAND_SET_RIDE_SETTING, 0, 0); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY | (0 << 8), + 0, + rideIndex | (td6->number_of_trains << 8), + GAME_COMMAND_SET_RIDE_VEHICLES, + 0, + 0); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY | (1 << 8), + 0, + rideIndex | (td6->number_of_cars_per_train << 8), + GAME_COMMAND_SET_RIDE_VEHICLES, + 0, + 0); + game_do_command( + 0, GAME_COMMAND_FLAG_APPLY | (td6->depart_flags << 8), 0, rideIndex | (1 << 8), GAME_COMMAND_SET_RIDE_SETTING, 0, 0); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY | (td6->min_waiting_time << 8), + 0, + rideIndex | (2 << 8), + GAME_COMMAND_SET_RIDE_SETTING, + 0, + 0); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY | (td6->max_waiting_time << 8), + 0, + rideIndex | (3 << 8), + GAME_COMMAND_SET_RIDE_SETTING, + 0, + 0); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY | (td6->operation_setting << 8), + 0, + rideIndex | (4 << 8), + GAME_COMMAND_SET_RIDE_SETTING, + 0, + 0); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY | ((td6->lift_hill_speed_num_circuits & 0x1F) << 8), + 0, + rideIndex | (8 << 8), + GAME_COMMAND_SET_RIDE_SETTING, + 0, + 0); - uint8_t num_circuits = td6->lift_hill_speed_num_circuits >> 5; + uint8_t num_circuits = td6->lift_hill_speed_num_circuits >> 5; if (num_circuits == 0) { num_circuits = 1; } - game_do_command(0, GAME_COMMAND_FLAG_APPLY | (num_circuits << 8), 0, rideIndex | (9 << 8), - GAME_COMMAND_SET_RIDE_SETTING, 0, 0); + game_do_command( + 0, GAME_COMMAND_FLAG_APPLY | (num_circuits << 8), 0, rideIndex | (9 << 8), GAME_COMMAND_SET_RIDE_SETTING, 0, 0); ride_set_to_default_inspection_interval(rideIndex); ride->lifecycle_flags |= RIDE_LIFECYCLE_NOT_CUSTOM_DESIGN; @@ -2011,9 +2050,9 @@ static money32 place_track_design(int16_t x, int16_t y, int16_t z, uint8_t flags for (int32_t i = 0; i < RCT12_NUM_COLOUR_SCHEMES; i++) { - ride->track_colour_main[i] = td6->track_spine_colour[i]; + ride->track_colour_main[i] = td6->track_spine_colour[i]; ride->track_colour_additional[i] = td6->track_rail_colour[i]; - ride->track_colour_supports[i] = td6->track_support_colour[i]; + ride->track_colour_supports[i] = td6->track_support_colour[i]; } for (int32_t i = 0; i < MAX_VEHICLES_PER_RIDE; i++) @@ -2075,11 +2114,11 @@ static money32 place_maze_design(uint8_t flags, uint8_t rideIndex, uint16_t maze // Check support height if (!gCheatsDisableSupportLimits) { - rct_tile_element * tileElement = map_get_surface_element_at({x, y}); - uint8_t supportZ = (z + 32) >> 3; + rct_tile_element* tileElement = map_get_surface_element_at({ x, y }); + uint8_t supportZ = (z + 32) >> 3; if (supportZ > tileElement->base_height) { - uint8_t supportHeight = (supportZ - tileElement->base_height) / 2; + uint8_t supportHeight = (supportZ - tileElement->base_height) / 2; uint8_t maxSupportHeight = RideData5[RIDE_TYPE_MAZE].max_height; if (supportHeight > maxSupportHeight) { @@ -2093,12 +2132,13 @@ static money32 place_maze_design(uint8_t flags, uint8_t rideIndex, uint16_t maze // Clearance checks if (!gCheatsDisableClearanceChecks) { - int32_t fx = floor2(x, 32); - int32_t fy = floor2(y, 32); + int32_t fx = floor2(x, 32); + int32_t fy = floor2(y, 32); int32_t fz0 = z >> 3; int32_t fz1 = fz0 + 4; - if (!map_can_construct_with_clear_at(fx, fy, fz0, fz1, &map_place_non_scenery_clear_func, 15, flags, &cost, CREATE_CROSSING_MODE_NONE)) + if (!map_can_construct_with_clear_at( + fx, fy, fz0, fz1, &map_place_non_scenery_clear_func, 15, flags, &cost, CREATE_CROSSING_MODE_NONE)) { return MONEY32_UNDEFINED; } @@ -2116,7 +2156,7 @@ static money32 place_maze_design(uint8_t flags, uint8_t rideIndex, uint16_t maze } } - Ride * ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); // Calculate price money32 price = 0; @@ -2140,12 +2180,12 @@ static money32 place_maze_design(uint8_t flags, uint8_t rideIndex, uint16_t maze } // Place track element - int32_t fx = floor2(x, 32); - int32_t fy = floor2(y, 32); - int32_t fz = z >> 3; - rct_tile_element * tileElement = tile_element_insert(fx >> 5, fy >> 5, fz, 15); - tileElement->clearance_height = fz + 4; - tileElement->type = TILE_ELEMENT_TYPE_TRACK; + int32_t fx = floor2(x, 32); + int32_t fy = floor2(y, 32); + int32_t fz = z >> 3; + rct_tile_element* tileElement = tile_element_insert(fx >> 5, fy >> 5, fz, 15); + tileElement->clearance_height = fz + 4; + tileElement->type = TILE_ELEMENT_TYPE_TRACK; track_element_set_type(tileElement, TRACK_ELEM_MAZE); track_element_set_ride_index(tileElement, rideIndex); tileElement->properties.track.maze_entry = mazeEntry; @@ -2174,19 +2214,19 @@ static money32 place_maze_design(uint8_t flags, uint8_t rideIndex, uint16_t maze * rct2: 0x006D13FE */ void game_command_place_track_design( - int32_t * eax, - int32_t * ebx, - int32_t * ecx, - [[maybe_unused]] int32_t * edx, - [[maybe_unused]] int32_t * esi, - int32_t * edi, - [[maybe_unused]] int32_t * ebp) + int32_t* eax, + int32_t* ebx, + int32_t* ecx, + [[maybe_unused]] int32_t* edx, + [[maybe_unused]] int32_t* esi, + int32_t* edi, + [[maybe_unused]] int32_t* ebp) { - int16_t x = *eax & 0xFFFF; - int16_t y = *ecx & 0xFFFF; - int16_t z = *edi & 0xFFFF; - uint8_t flags = *ebx; - uint8_t rideIndex; + int16_t x = *eax & 0xFFFF; + int16_t y = *ecx & 0xFFFF; + int16_t z = *edi & 0xFFFF; + uint8_t flags = *ebx; + uint8_t rideIndex; *ebx = place_track_design(x, y, z, flags, &rideIndex); *edi = rideIndex; } @@ -2196,7 +2236,13 @@ void game_command_place_track_design( * rct2: 0x006CDEE4 */ void game_command_place_maze_design( - int32_t * eax, int32_t * ebx, int32_t * ecx, int32_t * edx, [[maybe_unused]] int32_t * esi, int32_t * edi, [[maybe_unused]] int32_t * ebp) + int32_t* eax, + int32_t* ebx, + int32_t* ecx, + int32_t* edx, + [[maybe_unused]] int32_t* esi, + int32_t* edi, + [[maybe_unused]] int32_t* ebp) { *ebx = place_maze_design( *ebx & 0xFF, @@ -2204,8 +2250,7 @@ void game_command_place_maze_design( ((*ebx >> 8) & 0xFF) | (((*edx >> 8) & 0xFF) << 8), *eax & 0xFFFF, *ecx & 0xFFFF, - *edi & 0xFFFF - ); + *edi & 0xFFFF); } #pragma region Track Design Preview @@ -2214,10 +2259,10 @@ void game_command_place_maze_design( * * rct2: 0x006D1EF0 */ -void track_design_draw_preview(rct_track_td6 * td6, uint8_t * pixels) +void track_design_draw_preview(rct_track_td6* td6, uint8_t* pixels) { // Make a copy of the map - map_backup * mapBackup = track_design_preview_backup_map(); + map_backup* mapBackup = track_design_preview_backup_map(); if (mapBackup == nullptr) { return; @@ -2230,15 +2275,15 @@ void track_design_draw_preview(rct_track_td6 * td6, uint8_t * pixels) } money32 cost; - uint8_t rideIndex; - uint8_t flags; + uint8_t rideIndex; + uint8_t flags; if (!track_design_place_preview(td6, &cost, &rideIndex, &flags)) { memset(pixels, 0, TRACK_PREVIEW_IMAGE_SIZE * 4); track_design_preview_restore_map(mapBackup); return; } - td6->cost = cost; + td6->cost = cost; td6->track_flags = flags & 7; CoordsXYZ centre; @@ -2279,25 +2324,25 @@ void track_design_draw_preview(rct_track_td6 * td6, uint8_t * pixels) size_y = 217 << zoom_level; rct_viewport view; - view.width = 370; - view.height = 217; - view.view_width = size_x; + view.width = 370; + view.height = 217; + view.view_width = size_x; view.view_height = size_y; - view.x = 0; - view.y = 0; - view.zoom = zoom_level; - view.flags = VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_INVISIBLE_SPRITES; + view.x = 0; + view.y = 0; + view.zoom = zoom_level; + view.flags = VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_INVISIBLE_SPRITES; rct_drawpixelinfo dpi; dpi.zoom_level = zoom_level; - dpi.x = 0; - dpi.y = 0; - dpi.width = 370; - dpi.height = 217; - dpi.pitch = 0; - dpi.bits = pixels; + dpi.x = 0; + dpi.y = 0; + dpi.width = 370; + dpi.height = 217; + dpi.pitch = 0; + dpi.bits = pixels; - CoordsXY offset = {size_x / 2, size_y / 2}; + CoordsXY offset = { size_x / 2, size_y / 2 }; for (uint8_t i = 0; i < 4; i++) { gCurrentRotation = i; @@ -2306,9 +2351,9 @@ void track_design_draw_preview(rct_track_td6 * td6, uint8_t * pixels) pos2d.x -= offset.x; pos2d.y -= offset.y; - int32_t left = pos2d.x; - int32_t top = pos2d.y; - int32_t right = left + size_x; + int32_t left = pos2d.x; + int32_t top = pos2d.y; + int32_t right = left + size_x; int32_t bottom = top + size_y; view.view_x = left; @@ -2327,26 +2372,18 @@ void track_design_draw_preview(rct_track_td6 * td6, uint8_t * pixels) * design preview. * rct2: 0x006D1C68 */ -static map_backup * track_design_preview_backup_map() +static map_backup* track_design_preview_backup_map() { - map_backup * backup = (map_backup *) malloc(sizeof(map_backup)); + map_backup* backup = (map_backup*)malloc(sizeof(map_backup)); if (backup != nullptr) { - memcpy( - backup->tile_elements, - gTileElements, - sizeof(backup->tile_elements) - ); - memcpy( - backup->tile_pointers, - gTileElementTilePointers, - sizeof(backup->tile_pointers) - ); - backup->next_free_tile_element = gNextFreeTileElement; - backup->map_size_units = gMapSizeUnits; + memcpy(backup->tile_elements, gTileElements, sizeof(backup->tile_elements)); + memcpy(backup->tile_pointers, gTileElementTilePointers, sizeof(backup->tile_pointers)); + backup->next_free_tile_element = gNextFreeTileElement; + backup->map_size_units = gMapSizeUnits; backup->map_size_units_minus_2 = gMapSizeMinus2; - backup->map_size = gMapSize; - backup->current_rotation = get_current_rotation(); + backup->map_size = gMapSize; + backup->current_rotation = get_current_rotation(); } return backup; } @@ -2355,23 +2392,15 @@ static map_backup * track_design_preview_backup_map() * Restores the map from a backup. * rct2: 0x006D2378 */ -static void track_design_preview_restore_map(map_backup * backup) +static void track_design_preview_restore_map(map_backup* backup) { - memcpy( - gTileElements, - backup->tile_elements, - sizeof(backup->tile_elements) - ); - memcpy( - gTileElementTilePointers, - backup->tile_pointers, - sizeof(backup->tile_pointers) - ); + memcpy(gTileElements, backup->tile_elements, sizeof(backup->tile_elements)); + memcpy(gTileElementTilePointers, backup->tile_pointers, sizeof(backup->tile_pointers)); gNextFreeTileElement = backup->next_free_tile_element; - gMapSizeUnits = backup->map_size_units; - gMapSizeMinus2 = backup->map_size_units_minus_2; - gMapSize = backup->map_size; - gCurrentRotation = backup->current_rotation; + gMapSizeUnits = backup->map_size_units; + gMapSizeMinus2 = backup->map_size_units_minus_2; + gMapSize = backup->map_size; + gCurrentRotation = backup->current_rotation; free(backup); } @@ -2384,21 +2413,21 @@ static void track_design_preview_clear_map() { // These values were previously allocated in backup map but // it seems more fitting to place in this function - gMapSizeUnits = 255 * 32; + gMapSizeUnits = 255 * 32; gMapSizeMinus2 = (264 * 32) - 2; - gMapSize = 256; + gMapSize = 256; for (int32_t i = 0; i < MAX_TILE_TILE_ELEMENT_POINTERS; i++) { - rct_tile_element * tile_element = &gTileElements[i]; - tile_element->type = TILE_ELEMENT_TYPE_SURFACE; - tile_element->flags = TILE_ELEMENT_FLAG_LAST_TILE; - tile_element->base_height = 2; - tile_element->clearance_height = 0; - tile_element->properties.surface.slope = 0; - tile_element->properties.surface.terrain = 0; + rct_tile_element* tile_element = &gTileElements[i]; + tile_element->type = TILE_ELEMENT_TYPE_SURFACE; + tile_element->flags = TILE_ELEMENT_FLAG_LAST_TILE; + tile_element->base_height = 2; + tile_element->clearance_height = 0; + tile_element->properties.surface.slope = 0; + tile_element->properties.surface.terrain = 0; tile_element->properties.surface.grass_length = GRASS_LENGTH_CLEAR_0; - tile_element->properties.surface.ownership = OWNERSHIP_OWNED; + tile_element->properties.surface.ownership = OWNERSHIP_OWNED; } map_update_tile_pointers(); } diff --git a/src/openrct2/ride/TrackDesign.h b/src/openrct2/ride/TrackDesign.h index 4d3740a408..ad4b41af78 100644 --- a/src/openrct2/ride/TrackDesign.h +++ b/src/openrct2/ride/TrackDesign.h @@ -21,15 +21,20 @@ #pragma pack(push, 1) /* Maze Element entry size: 0x04 */ -struct rct_td6_maze_element { - union { +struct rct_td6_maze_element +{ + union + { uint32_t all; - struct { + struct + { int8_t x; int8_t y; - union { + union + { uint16_t maze_entry; - struct{ + struct + { uint8_t direction; uint8_t type; }; @@ -40,30 +45,33 @@ struct rct_td6_maze_element { assert_struct_size(rct_td6_maze_element, 0x04); /* Track Element entry size: 0x02 */ -struct rct_td6_track_element { - uint8_t type; // 0x00 - uint8_t flags; // 0x01 +struct rct_td6_track_element +{ + uint8_t type; // 0x00 + uint8_t flags; // 0x01 }; assert_struct_size(rct_td6_track_element, 0x02); /* Track Entrance entry size: 0x06 */ -struct rct_td6_entrance_element { - int8_t z; // 0x00 - uint8_t direction; // 0x01 - int16_t x; // 0x02 - int16_t y; // 0x04 +struct rct_td6_entrance_element +{ + int8_t z; // 0x00 + uint8_t direction; // 0x01 + int16_t x; // 0x02 + int16_t y; // 0x04 }; assert_struct_size(rct_td6_entrance_element, 0x06); /* Track Scenery entry size: 0x16 */ -struct rct_td6_scenery_element { - rct_object_entry scenery_object; // 0x00 - int8_t x; // 0x10 - int8_t y; // 0x11 - int8_t z; // 0x12 - uint8_t flags; // 0x13 direction quadrant tertiary colour - uint8_t primary_colour; // 0x14 - uint8_t secondary_colour; // 0x15 +struct rct_td6_scenery_element +{ + rct_object_entry scenery_object; // 0x00 + int8_t x; // 0x10 + int8_t y; // 0x11 + int8_t z; // 0x12 + uint8_t flags; // 0x13 direction quadrant tertiary colour + uint8_t primary_colour; // 0x14 + uint8_t secondary_colour; // 0x15 }; assert_struct_size(rct_td6_scenery_element, 0x16); @@ -71,77 +79,84 @@ assert_struct_size(rct_td6_scenery_element, 0x16); * Track design structure. * size: 0x4E72B */ -struct rct_track_td6 { - uint8_t type; // 0x00 +struct rct_track_td6 +{ + uint8_t type; // 0x00 uint8_t vehicle_type; - union{ + union + { // After loading the track this is converted to // a cost but before its a flags register - money32 cost; // 0x02 - uint32_t flags; // 0x02 + money32 cost; // 0x02 + uint32_t flags; // 0x02 }; - union{ + union + { // After loading the track this is converted to // a flags register - uint8_t ride_mode; // 0x06 - uint8_t track_flags; // 0x06 + uint8_t ride_mode; // 0x06 + uint8_t track_flags; // 0x06 }; - uint8_t version_and_colour_scheme; // 0x07 0b0000_VVCC + uint8_t version_and_colour_scheme; // 0x07 0b0000_VVCC rct_vehicle_colour vehicle_colours[RCT2_MAX_CARS_PER_TRAIN]; // 0x08 - union{ + union + { uint8_t pad_48; - uint8_t track_spine_colour_rct1; // 0x48 + uint8_t track_spine_colour_rct1; // 0x48 }; - union{ - uint8_t entrance_style; // 0x49 - uint8_t track_rail_colour_rct1; // 0x49 + union + { + uint8_t entrance_style; // 0x49 + uint8_t track_rail_colour_rct1; // 0x49 }; - union{ - uint8_t total_air_time; // 0x4A - uint8_t track_support_colour_rct1; // 0x4A + union + { + uint8_t total_air_time; // 0x4A + uint8_t track_support_colour_rct1; // 0x4A }; - uint8_t depart_flags; // 0x4B - uint8_t number_of_trains; // 0x4C - uint8_t number_of_cars_per_train; // 0x4D - uint8_t min_waiting_time; // 0x4E - uint8_t max_waiting_time; // 0x4F + uint8_t depart_flags; // 0x4B + uint8_t number_of_trains; // 0x4C + uint8_t number_of_cars_per_train; // 0x4D + uint8_t min_waiting_time; // 0x4E + uint8_t max_waiting_time; // 0x4F uint8_t operation_setting; - int8_t max_speed; // 0x51 - int8_t average_speed; // 0x52 - uint16_t ride_length; // 0x53 - uint8_t max_positive_vertical_g; // 0x55 - int8_t max_negative_vertical_g; // 0x56 - uint8_t max_lateral_g; // 0x57 - union { - uint8_t inversions; // 0x58 - uint8_t holes; // 0x58 + int8_t max_speed; // 0x51 + int8_t average_speed; // 0x52 + uint16_t ride_length; // 0x53 + uint8_t max_positive_vertical_g; // 0x55 + int8_t max_negative_vertical_g; // 0x56 + uint8_t max_lateral_g; // 0x57 + union + { + uint8_t inversions; // 0x58 + uint8_t holes; // 0x58 }; - uint8_t drops; // 0x59 - uint8_t highest_drop_height; // 0x5A - uint8_t excitement; // 0x5B - uint8_t intensity; // 0x5C - uint8_t nausea; // 0x5D - money16 upkeep_cost; // 0x5E - uint8_t track_spine_colour[RCT12_NUM_COLOUR_SCHEMES]; // 0x60 - uint8_t track_rail_colour[RCT12_NUM_COLOUR_SCHEMES]; // 0x64 - uint8_t track_support_colour[RCT12_NUM_COLOUR_SCHEMES]; // 0x68 - uint32_t flags2; // 0x6C - rct_object_entry vehicle_object; // 0x70 - uint8_t space_required_x; // 0x80 - uint8_t space_required_y; // 0x81 + uint8_t drops; // 0x59 + uint8_t highest_drop_height; // 0x5A + uint8_t excitement; // 0x5B + uint8_t intensity; // 0x5C + uint8_t nausea; // 0x5D + money16 upkeep_cost; // 0x5E + uint8_t track_spine_colour[RCT12_NUM_COLOUR_SCHEMES]; // 0x60 + uint8_t track_rail_colour[RCT12_NUM_COLOUR_SCHEMES]; // 0x64 + uint8_t track_support_colour[RCT12_NUM_COLOUR_SCHEMES]; // 0x68 + uint32_t flags2; // 0x6C + rct_object_entry vehicle_object; // 0x70 + uint8_t space_required_x; // 0x80 + uint8_t space_required_y; // 0x81 uint8_t vehicle_additional_colour[RCT2_MAX_CARS_PER_TRAIN]; // 0x82 - uint8_t lift_hill_speed_num_circuits; // 0xA2 0bCCCL_LLLL - void *elements; // 0xA3 (data starts here in file) + uint8_t lift_hill_speed_num_circuits; // 0xA2 0bCCCL_LLLL + void* elements; // 0xA3 (data starts here in file) size_t elementsSize; - rct_td6_maze_element *maze_elements; - rct_td6_track_element *track_elements; - rct_td6_entrance_element *entrance_elements; - rct_td6_scenery_element *scenery_elements; + rct_td6_maze_element* maze_elements; + rct_td6_track_element* track_elements; + rct_td6_entrance_element* entrance_elements; + rct_td6_scenery_element* scenery_elements; - utf8 *name; + utf8* name; }; -//Warning: improper struct size in comment +// Warning: improper struct size in comment #ifdef PLATFORM_32BIT assert_struct_size(rct_track_td6, 0xbf); #endif @@ -163,7 +178,7 @@ enum : uint32_t enum : uint32_t { TRACK_FLAGS2_CONTAINS_LOG_FLUME_REVERSER = (1 << 1), - TRACK_FLAGS2_SIX_FLAGS_RIDE_DEPRECATED = (1u << 31) // Not used anymore. + TRACK_FLAGS2_SIX_FLAGS_RIDE_DEPRECATED = (1u << 31) // Not used anymore. }; enum @@ -178,7 +193,8 @@ enum TRACK_DESIGN_FLAG_VEHICLE_UNAVAILABLE = (1 << 2), }; -enum { +enum +{ PTD_OPERATION_DRAW_OUTLINES, PTD_OPERATION_1, PTD_OPERATION_2, @@ -188,13 +204,14 @@ enum { PTD_OPERATION_CLEAR_OUTLINES, }; -enum { +enum +{ MAZE_ELEMENT_TYPE_MAZE_TRACK = 0, MAZE_ELEMENT_TYPE_ENTRANCE = (1 << 3), MAZE_ELEMENT_TYPE_EXIT = (1 << 7) }; -extern rct_track_td6 *gActiveTrackDesign; +extern rct_track_td6* gActiveTrackDesign; extern bool gTrackDesignSceneryToggle; extern LocationXYZ16 gTrackPreviewMin; extern LocationXYZ16 gTrackPreviewMax; @@ -205,31 +222,35 @@ extern bool byte_9D8150; extern bool gTrackDesignSaveMode; extern uint8_t gTrackDesignSaveRideIndex; -rct_track_td6 *track_design_open(const utf8 *path); -void track_design_dispose(rct_track_td6 *td6); +rct_track_td6* track_design_open(const utf8* path); +void track_design_dispose(rct_track_td6* td6); -void track_design_mirror(rct_track_td6 *td6); +void track_design_mirror(rct_track_td6* td6); -int32_t place_virtual_track(rct_track_td6 *td6, uint8_t ptdOperation, bool placeScenery, uint8_t rideIndex, int16_t x, int16_t y, int16_t z); +int32_t place_virtual_track( + rct_track_td6* td6, uint8_t ptdOperation, bool placeScenery, uint8_t rideIndex, int16_t x, int16_t y, int16_t z); -void game_command_place_track_design(int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); -void game_command_place_maze_design(int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); +void game_command_place_track_design( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); +void game_command_place_maze_design( + int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp); /////////////////////////////////////////////////////////////////////////////// // Track design preview /////////////////////////////////////////////////////////////////////////////// -void track_design_draw_preview(rct_track_td6 *td6, uint8_t *pixels); +void track_design_draw_preview(rct_track_td6* td6, uint8_t* pixels); /////////////////////////////////////////////////////////////////////////////// // Track design saving /////////////////////////////////////////////////////////////////////////////// void track_design_save_init(); void track_design_save_reset_scenery(); -bool track_design_save_contains_tile_element(const rct_tile_element * tileElement); +bool track_design_save_contains_tile_element(const rct_tile_element* tileElement); void track_design_save_select_nearby_scenery(int32_t rideIndex); -void track_design_save_select_tile_element(int32_t interactionType, int32_t x, int32_t y, rct_tile_element *tileElement, bool collect); +void track_design_save_select_tile_element( + int32_t interactionType, int32_t x, int32_t y, rct_tile_element* tileElement, bool collect); bool track_design_save(uint8_t rideIndex); -bool track_design_save_to_file(const utf8 *path); +bool track_design_save_to_file(const utf8* path); bool track_design_are_entrance_and_exit_placed(); diff --git a/src/openrct2/ride/TrackDesignRepository.cpp b/src/openrct2/ride/TrackDesignRepository.cpp index a7c6ccc00f..0c82931711 100644 --- a/src/openrct2/ride/TrackDesignRepository.cpp +++ b/src/openrct2/ride/TrackDesignRepository.cpp @@ -7,10 +7,10 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ -#include -#include -#include +#include "TrackDesignRepository.h" + #include "../Context.h" +#include "../PlatformEnvironment.h" #include "../config/Config.h" #include "../core/Collections.hpp" #include "../core/Console.hpp" @@ -22,12 +22,13 @@ #include "../localisation/LocalisationService.h" #include "../object/ObjectRepository.h" #include "../object/RideObject.h" -#include "../PlatformEnvironment.h" #include "RideGroupManager.h" -#include "TrackDesignRepository.h" - #include "TrackDesign.h" +#include +#include +#include + using namespace OpenRCT2; struct TrackRepositoryItem @@ -44,10 +45,10 @@ enum TRACK_REPO_ITEM_FLAGS TRIF_READ_ONLY = (1 << 0), }; -std::string GetNameFromTrackPath(const std::string &path) +std::string GetNameFromTrackPath(const std::string& path) { std::string name = Path::GetFileNameWithoutExtension(path); - //The track name should be the file name until the first instance of a dot + // The track name should be the file name until the first instance of a dot name = name.substr(0, name.find_first_of('.')); return name; } @@ -60,21 +61,21 @@ private: static constexpr auto PATTERN = "*.td4;*.td6"; public: - explicit TrackDesignFileIndex(const IPlatformEnvironment &env) : - FileIndex("track design index", - MAGIC_NUMBER, - VERSION, - env.GetFilePath(PATHID::CACHE_TRACKS), - std::string(PATTERN), - std::vector({ - env.GetDirectoryPath(DIRBASE::RCT1, DIRID::TRACK), - env.GetDirectoryPath(DIRBASE::RCT2, DIRID::TRACK), - env.GetDirectoryPath(DIRBASE::USER, DIRID::TRACK) })) + explicit TrackDesignFileIndex(const IPlatformEnvironment& env) + : FileIndex( + "track design index", + MAGIC_NUMBER, + VERSION, + env.GetFilePath(PATHID::CACHE_TRACKS), + std::string(PATTERN), + std::vector({ env.GetDirectoryPath(DIRBASE::RCT1, DIRID::TRACK), + env.GetDirectoryPath(DIRBASE::RCT2, DIRID::TRACK), + env.GetDirectoryPath(DIRBASE::USER, DIRID::TRACK) })) { } public: - std::tuple Create(int32_t, const std::string &path) const override + std::tuple Create(int32_t, const std::string& path) const override { auto td6 = track_design_open(path.c_str()); if (td6 != nullptr) @@ -99,7 +100,7 @@ public: } protected: - void Serialise(IStream * stream, const TrackRepositoryItem &item) const override + void Serialise(IStream* stream, const TrackRepositoryItem& item) const override { stream->WriteString(item.Name); stream->WriteString(item.Path); @@ -108,7 +109,7 @@ protected: stream->WriteValue(item.Flags); } - TrackRepositoryItem Deserialise(IStream * stream) const override + TrackRepositoryItem Deserialise(IStream* stream) const override { TrackRepositoryItem item; item.Name = stream->ReadStdString(); @@ -120,11 +121,9 @@ protected: } private: - bool IsTrackReadOnly(const std::string &path) const + bool IsTrackReadOnly(const std::string& path) const { - return - String::StartsWith(path, SearchPaths[0]) || - String::StartsWith(path, SearchPaths[1]); + return String::StartsWith(path, SearchPaths[0]) || String::StartsWith(path, SearchPaths[1]); } }; @@ -137,8 +136,8 @@ private: public: explicit TrackDesignRepository(const std::shared_ptr& env) - : _env(env), - _fileIndex(*env) + : _env(env) + , _fileIndex(*env) { Guard::ArgumentNotNull(env); } @@ -150,14 +149,15 @@ public: /** * - * @param entry The entry name to count the track list of. Leave empty to count track list for the non-separated types (e.g. Hyper-Twister, Car Ride) + * @param entry The entry name to count the track list of. Leave empty to count track list for the non-separated types (e.g. + * Hyper-Twister, Car Ride) */ - size_t GetCountForObjectEntry(uint8_t rideType, const std::string &entry) const override + size_t GetCountForObjectEntry(uint8_t rideType, const std::string& entry) const override { size_t count = 0; const auto repo = GetContext()->GetObjectRepository(); - for (const auto &item : _items) + for (const auto& item : _items) { if (item.RideType != rideType) { @@ -167,7 +167,7 @@ public: bool entryIsNotSeparate = false; if (entry.empty()) { - const ObjectRepositoryItem * ori = repo->FindObject(item.ObjectEntry.c_str()); + const ObjectRepositoryItem* ori = repo->FindObject(item.ObjectEntry.c_str()); if (ori == nullptr || !RideGroupManager::RideTypeIsIndependent(rideType)) entryIsNotSeparate = true; @@ -181,21 +181,21 @@ public: return count; } - size_t GetCountForRideGroup(uint8_t rideType, const RideGroup * rideGroup) const override + size_t GetCountForRideGroup(uint8_t rideType, const RideGroup* rideGroup) const override { size_t count = 0; const auto repo = GetContext()->GetObjectRepository(); - for (const auto &item : _items) + for (const auto& item : _items) { if (item.RideType != rideType) { continue; } - const ObjectRepositoryItem * ori = repo->FindObject(item.ObjectEntry.c_str()); + const ObjectRepositoryItem* ori = repo->FindObject(item.ObjectEntry.c_str()); uint8_t rideGroupIndex = (ori != nullptr) ? ori->RideInfo.RideGroupIndex : 0; - const RideGroup * itemRideGroup = RideGroupManager::RideGroupFind(rideType, rideGroupIndex); + const RideGroup* itemRideGroup = RideGroupManager::RideGroupFind(rideType, rideGroupIndex); if (itemRideGroup != nullptr && itemRideGroup->Equals(rideGroup)) { @@ -208,14 +208,15 @@ public: /** * - * @param entry The entry name to build a track list for. Leave empty to build track list for the non-separated types (e.g. Hyper-Twister, Car Ride) + * @param entry The entry name to build a track list for. Leave empty to build track list for the non-separated types (e.g. + * Hyper-Twister, Car Ride) */ - std::vector GetItemsForObjectEntry(uint8_t rideType, const std::string &entry) const override + std::vector GetItemsForObjectEntry(uint8_t rideType, const std::string& entry) const override { std::vector refs; const auto repo = GetContext()->GetObjectRepository(); - for (const auto &item : _items) + for (const auto& item : _items) { if (item.RideType != rideType) { @@ -225,7 +226,7 @@ public: bool entryIsNotSeparate = false; if (entry.empty()) { - const ObjectRepositoryItem * ori = repo->FindObject(item.ObjectEntry.c_str()); + const ObjectRepositoryItem* ori = repo->FindObject(item.ObjectEntry.c_str()); if (ori == nullptr || !RideGroupManager::RideTypeIsIndependent(rideType)) entryIsNotSeparate = true; @@ -243,21 +244,21 @@ public: return refs; } - std::vector GetItemsForRideGroup(uint8_t rideType, const RideGroup * rideGroup) const override + std::vector GetItemsForRideGroup(uint8_t rideType, const RideGroup* rideGroup) const override { std::vector refs; const auto repo = GetContext()->GetObjectRepository(); - for (const auto &item : _items) + for (const auto& item : _items) { if (item.RideType != rideType) { continue; } - const ObjectRepositoryItem * ori = repo->FindObject(item.ObjectEntry.c_str()); + const ObjectRepositoryItem* ori = repo->FindObject(item.ObjectEntry.c_str()); uint8_t rideGroupIndex = (ori != nullptr) ? ori->RideInfo.RideGroupIndex : 0; - const RideGroup * itemRideGroup = RideGroupManager::RideGroupFind(rideType, rideGroupIndex); + const RideGroup* itemRideGroup = RideGroupManager::RideGroupFind(rideType, rideGroupIndex); if (itemRideGroup != nullptr && itemRideGroup->Equals(rideGroup)) { @@ -275,7 +276,7 @@ public: { _items.clear(); auto trackDesigns = _fileIndex.LoadOrBuild(language); - for (const auto &td : trackDesigns) + for (const auto& td : trackDesigns) { _items.push_back(td); } @@ -283,13 +284,13 @@ public: SortItems(); } - bool Delete(const std::string &path) override + bool Delete(const std::string& path) override { bool result = false; size_t index = GetTrackIndex(path); if (index != SIZE_MAX) { - const TrackRepositoryItem * item = &_items[index]; + const TrackRepositoryItem* item = &_items[index]; if (!(item->Flags & TRIF_READ_ONLY)) { if (File::Delete(path)) @@ -302,13 +303,13 @@ public: return result; } - std::string Rename(const std::string &path, const std::string &newName) override + std::string Rename(const std::string& path, const std::string& newName) override { std::string result; size_t index = GetTrackIndex(path); if (index != SIZE_MAX) { - TrackRepositoryItem * item = &_items[index]; + TrackRepositoryItem* item = &_items[index]; if (!(item->Flags & TRIF_READ_ONLY)) { std::string directory = Path::GetDirectory(path); @@ -325,7 +326,7 @@ public: return result; } - std::string Install(const std::string &path) override + std::string Install(const std::string& path) override { std::string result; std::string fileName = Path::GetFileName(path); @@ -349,18 +350,16 @@ public: private: void SortItems() { - std::sort(_items.begin(), _items.end(), [](const TrackRepositoryItem &a, - const TrackRepositoryItem &b) -> bool + std::sort(_items.begin(), _items.end(), [](const TrackRepositoryItem& a, const TrackRepositoryItem& b) -> bool { + if (a.RideType != b.RideType) { - if (a.RideType != b.RideType) - { - return a.RideType < b.RideType; - } - return String::Compare(a.Name, b.Name) < 0; - }); + return a.RideType < b.RideType; + } + return String::Compare(a.Name, b.Name) < 0; + }); } - size_t GetTrackIndex(const std::string &path) const + size_t GetTrackIndex(const std::string& path) const { for (size_t i = 0; i < _items.size(); i++) { @@ -372,9 +371,9 @@ private: return SIZE_MAX; } - TrackRepositoryItem * GetTrackItem(const std::string &path) + TrackRepositoryItem* GetTrackItem(const std::string& path) { - TrackRepositoryItem * result = nullptr; + TrackRepositoryItem* result = nullptr; size_t index = GetTrackIndex(path); if (index != SIZE_MAX) { @@ -391,26 +390,26 @@ std::unique_ptr CreateTrackDesignRepository(const std::s void track_repository_scan() { - ITrackDesignRepository * repo = GetContext()->GetTrackDesignRepository(); + ITrackDesignRepository* repo = GetContext()->GetTrackDesignRepository(); repo->Scan(LocalisationService_GetCurrentLanguage()); } -bool track_repository_delete(const utf8 * path) +bool track_repository_delete(const utf8* path) { - ITrackDesignRepository * repo = GetContext()->GetTrackDesignRepository(); + ITrackDesignRepository* repo = GetContext()->GetTrackDesignRepository(); return repo->Delete(path); } -bool track_repository_rename(const utf8 * path, const utf8 * newName) +bool track_repository_rename(const utf8* path, const utf8* newName) { - ITrackDesignRepository * repo = GetContext()->GetTrackDesignRepository(); + ITrackDesignRepository* repo = GetContext()->GetTrackDesignRepository(); std::string newPath = repo->Rename(path, newName); return !newPath.empty(); } -bool track_repository_install(const utf8 * srcPath) +bool track_repository_install(const utf8* srcPath) { - ITrackDesignRepository * repo = GetContext()->GetTrackDesignRepository(); + ITrackDesignRepository* repo = GetContext()->GetTrackDesignRepository(); std::string newPath = repo->Install(srcPath); return !newPath.empty(); } diff --git a/src/openrct2/ride/TrackDesignRepository.h b/src/openrct2/ride/TrackDesignRepository.h index d9f651c1c4..930ee25d77 100644 --- a/src/openrct2/ride/TrackDesignRepository.h +++ b/src/openrct2/ride/TrackDesignRepository.h @@ -9,15 +9,15 @@ #pragma once -#include #include "../common.h" #include "RideGroupManager.h" +#include struct track_design_file_ref { - utf8 * name; - utf8 * path; + utf8* name; + utf8* path; }; #include @@ -32,23 +32,23 @@ interface ITrackDesignRepository virtual ~ITrackDesignRepository() = default; virtual size_t GetCount() const abstract; - virtual size_t GetCountForObjectEntry(uint8_t rideType, const std::string &entry) const abstract; - virtual size_t GetCountForRideGroup(uint8_t rideType, const RideGroup * rideGroup) const abstract; - virtual std::vector GetItemsForObjectEntry(uint8_t rideType, - const std::string &entry) const abstract; - virtual std::vector GetItemsForRideGroup(uint8_t rideType, - const RideGroup * rideGroup) const abstract; + virtual size_t GetCountForObjectEntry(uint8_t rideType, const std::string& entry) const abstract; + virtual size_t GetCountForRideGroup(uint8_t rideType, const RideGroup* rideGroup) const abstract; + virtual std::vector GetItemsForObjectEntry(uint8_t rideType, const std::string& entry) + const abstract; + virtual std::vector GetItemsForRideGroup(uint8_t rideType, const RideGroup* rideGroup) + const abstract; virtual void Scan(int32_t language) abstract; - virtual bool Delete(const std::string &path) abstract; - virtual std::string Rename(const std::string &path, const std::string &newName) abstract; - virtual std::string Install(const std::string &path) abstract; + virtual bool Delete(const std::string& path) abstract; + virtual std::string Rename(const std::string& path, const std::string& newName) abstract; + virtual std::string Install(const std::string& path) abstract; }; std::unique_ptr CreateTrackDesignRepository(const std::shared_ptr& env); -std::string GetNameFromTrackPath(const std::string &path); +std::string GetNameFromTrackPath(const std::string& path); -void track_repository_scan(); -bool track_repository_delete(const utf8 *path); -bool track_repository_rename(const utf8 *path, const utf8 *newName); -bool track_repository_install(const utf8 *srcPath); +void track_repository_scan(); +bool track_repository_delete(const utf8* path); +bool track_repository_rename(const utf8* path, const utf8* newName); +bool track_repository_install(const utf8* srcPath); diff --git a/src/openrct2/ride/TrackDesignSave.cpp b/src/openrct2/ride/TrackDesignSave.cpp index 532604192f..0a565f72ba 100644 --- a/src/openrct2/ride/TrackDesignSave.cpp +++ b/src/openrct2/ride/TrackDesignSave.cpp @@ -7,14 +7,13 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ -#include -#include "../audio/audio.h" -#include "../config/Config.h" #include "../Context.h" #include "../Game.h" +#include "../audio/audio.h" +#include "../config/Config.h" +#include "../interface/Viewport.h" #include "../localisation/Localisation.h" #include "../localisation/StringIds.h" -#include "../interface/Viewport.h" #include "../object/ObjectList.h" #include "../util/SawyerCoding.h" #include "../util/Util.h" @@ -25,12 +24,13 @@ #include "../world/SmallScenery.h" #include "../world/Wall.h" #include "RideData.h" +#include "Station.h" #include "Track.h" #include "TrackData.h" #include "TrackDesign.h" #include "TrackDesignRepository.h" -#include "Station.h" +#include #define TRACK_MAX_SAVED_TILE_ELEMENTS 1500 #define TRACK_NEARBY_SCENERY_DISTANCE 1 @@ -40,22 +40,22 @@ bool gTrackDesignSaveMode = false; uint8_t gTrackDesignSaveRideIndex = 255; static size_t _trackSavedTileElementsCount; -static rct_tile_element *_trackSavedTileElements[TRACK_MAX_SAVED_TILE_ELEMENTS]; +static rct_tile_element* _trackSavedTileElements[TRACK_MAX_SAVED_TILE_ELEMENTS]; static size_t _trackSavedTileElementsDescCount; static rct_td6_scenery_element _trackSavedTileElementsDesc[TRACK_MAX_SAVED_TILE_ELEMENTS]; -static rct_track_td6 *_trackDesign; +static rct_track_td6* _trackDesign; static uint8_t _trackSaveDirection; -static bool track_design_save_should_select_scenery_around(int32_t rideIndex, rct_tile_element *tileElement); +static bool track_design_save_should_select_scenery_around(int32_t rideIndex, rct_tile_element* tileElement); static void track_design_save_select_nearby_scenery_for_tile(int32_t rideIndex, int32_t cx, int32_t cy); -static bool track_design_save_add_tile_element(int32_t interactionType, int32_t x, int32_t y, rct_tile_element *tileElement); -static void track_design_save_remove_tile_element(int32_t interactionType, int32_t x, int32_t y, rct_tile_element *tileElement); -static bool track_design_save_copy_scenery_to_td6(rct_track_td6 *td6); -static rct_track_td6 *track_design_save_to_td6(uint8_t rideIndex); -static bool track_design_save_to_td6_for_maze(uint8_t rideIndex, rct_track_td6 *td6); -static bool track_design_save_to_td6_for_tracked_ride(uint8_t rideIndex, rct_track_td6 *td6); +static bool track_design_save_add_tile_element(int32_t interactionType, int32_t x, int32_t y, rct_tile_element* tileElement); +static void track_design_save_remove_tile_element(int32_t interactionType, int32_t x, int32_t y, rct_tile_element* tileElement); +static bool track_design_save_copy_scenery_to_td6(rct_track_td6* td6); +static rct_track_td6* track_design_save_to_td6(uint8_t rideIndex); +static bool track_design_save_to_td6_for_maze(uint8_t rideIndex, rct_track_td6* td6); +static bool track_design_save_to_td6_for_tracked_ride(uint8_t rideIndex, rct_track_td6* td6); void track_design_save_init() { @@ -70,19 +70,25 @@ void track_design_save_init() * * rct2: 0x006D2B07 */ -void track_design_save_select_tile_element(int32_t interactionType, int32_t x, int32_t y, rct_tile_element *tileElement, bool collect) +void track_design_save_select_tile_element( + int32_t interactionType, int32_t x, int32_t y, rct_tile_element* tileElement, bool collect) { - if (track_design_save_contains_tile_element(tileElement)) { - if (!collect) { + if (track_design_save_contains_tile_element(tileElement)) + { + if (!collect) + { track_design_save_remove_tile_element(interactionType, x, y, tileElement); } - } else { - if (collect) { - if (!track_design_save_add_tile_element(interactionType, x, y, tileElement)) { + } + else + { + if (collect) + { + if (!track_design_save_add_tile_element(interactionType, x, y, tileElement)) + { context_show_error( STR_SAVE_TRACK_SCENERY_UNABLE_TO_SELECT_ADDITIONAL_ITEM_OF_SCENERY, - STR_SAVE_TRACK_SCENERY_TOO_MANY_ITEMS_SELECTED - ); + STR_SAVE_TRACK_SCENERY_TOO_MANY_ITEMS_SELECTED); } } } @@ -94,13 +100,17 @@ void track_design_save_select_tile_element(int32_t interactionType, int32_t x, i */ void track_design_save_select_nearby_scenery(int32_t rideIndex) { - rct_tile_element *tileElement; + rct_tile_element* tileElement; - for (int32_t y = 0; y < MAXIMUM_MAP_SIZE_TECHNICAL; y++) { - for (int32_t x = 0; x < MAXIMUM_MAP_SIZE_TECHNICAL; x++) { + for (int32_t y = 0; y < MAXIMUM_MAP_SIZE_TECHNICAL; y++) + { + for (int32_t x = 0; x < MAXIMUM_MAP_SIZE_TECHNICAL; x++) + { tileElement = map_get_first_element_at(x, y); - do { - if (track_design_save_should_select_scenery_around(rideIndex, tileElement)) { + do + { + if (track_design_save_should_select_scenery_around(rideIndex, tileElement)) + { track_design_save_select_nearby_scenery_for_tile(rideIndex, x, y); break; } @@ -120,14 +130,15 @@ void track_design_save_reset_scenery() gfx_invalidate_screen(); } -static void track_design_save_callback(int32_t result, [[maybe_unused]] const utf8 * path) +static void track_design_save_callback(int32_t result, [[maybe_unused]] const utf8* path) { free(_trackDesign->track_elements); free(_trackDesign->entrance_elements); free(_trackDesign->scenery_elements); free(_trackDesign); - if (result == MODAL_RESULT_OK) { + if (result == MODAL_RESULT_OK) + { track_repository_scan(); } gfx_invalidate_screen(); @@ -141,24 +152,29 @@ bool track_design_save(uint8_t rideIndex) { Ride* ride = get_ride(rideIndex); - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)){ + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) + { context_show_error(STR_CANT_SAVE_TRACK_DESIGN, gGameCommandErrorText); return false; } - if (!ride_has_ratings(ride)) { + if (!ride_has_ratings(ride)) + { context_show_error(STR_CANT_SAVE_TRACK_DESIGN, gGameCommandErrorText); return false; } _trackDesign = track_design_save_to_td6(rideIndex); - if (_trackDesign == nullptr) { + if (_trackDesign == nullptr) + { context_show_error(STR_CANT_SAVE_TRACK_DESIGN, gGameCommandErrorText); return false; } - if (gTrackDesignSaveMode) { - if (!track_design_save_copy_scenery_to_td6(_trackDesign)) { + if (gTrackDesignSaveMode) + { + if (!track_design_save_copy_scenery_to_td6(_trackDesign)) + { free(_trackDesign->track_elements); free(_trackDesign->entrance_elements); free(_trackDesign); @@ -171,47 +187,51 @@ bool track_design_save(uint8_t rideIndex) auto intent = Intent(WC_LOADSAVE); intent.putExtra(INTENT_EXTRA_LOADSAVE_TYPE, LOADSAVETYPE_SAVE | LOADSAVETYPE_TRACK); - intent.putExtra(INTENT_EXTRA_PATH, std::string{track_name}); - intent.putExtra(INTENT_EXTRA_CALLBACK, (void *) track_design_save_callback); + intent.putExtra(INTENT_EXTRA_PATH, std::string{ track_name }); + intent.putExtra(INTENT_EXTRA_CALLBACK, (void*)track_design_save_callback); context_open_intent(&intent); return true; } -bool track_design_save_contains_tile_element(const rct_tile_element * tileElement) +bool track_design_save_contains_tile_element(const rct_tile_element* tileElement) { - for (size_t i = 0; i < _trackSavedTileElementsCount; i++) { - if (_trackSavedTileElements[i] == tileElement) { + for (size_t i = 0; i < _trackSavedTileElementsCount; i++) + { + if (_trackSavedTileElements[i] == tileElement) + { return true; } } return false; } -static int32_t tile_element_get_total_element_count(rct_tile_element *tileElement) +static int32_t tile_element_get_total_element_count(rct_tile_element* tileElement) { int32_t elementCount; - rct_scenery_entry *sceneryEntry; - rct_large_scenery_tile *tile; + rct_scenery_entry* sceneryEntry; + rct_large_scenery_tile* tile; - switch (tileElement->GetType()) { - case TILE_ELEMENT_TYPE_PATH: - case TILE_ELEMENT_TYPE_SMALL_SCENERY: - case TILE_ELEMENT_TYPE_WALL: - return 1; + switch (tileElement->GetType()) + { + case TILE_ELEMENT_TYPE_PATH: + case TILE_ELEMENT_TYPE_SMALL_SCENERY: + case TILE_ELEMENT_TYPE_WALL: + return 1; - case TILE_ELEMENT_TYPE_LARGE_SCENERY: - sceneryEntry = get_large_scenery_entry(scenery_large_get_type(tileElement)); - tile = sceneryEntry->large_scenery.tiles; - elementCount = 0; - do { - tile++; - elementCount++; - } while (tile->x_offset != (int16_t)(uint16_t)0xFFFF); - return elementCount; + case TILE_ELEMENT_TYPE_LARGE_SCENERY: + sceneryEntry = get_large_scenery_entry(scenery_large_get_type(tileElement)); + tile = sceneryEntry->large_scenery.tiles; + elementCount = 0; + do + { + tile++; + elementCount++; + } while (tile->x_offset != (int16_t)(uint16_t)0xFFFF); + return elementCount; - default: - return 0; + default: + return 0; } } @@ -219,16 +239,18 @@ static int32_t tile_element_get_total_element_count(rct_tile_element *tileElemen * * rct2: 0x006D2ED2 */ -static bool track_design_save_can_add_tile_element(rct_tile_element *tileElement) +static bool track_design_save_can_add_tile_element(rct_tile_element* tileElement) { size_t newElementCount = tile_element_get_total_element_count(tileElement); - if (newElementCount == 0) { + if (newElementCount == 0) + { return false; } // Get number of spare elements left size_t spareSavedElements = TRACK_MAX_SAVED_TILE_ELEMENTS - _trackSavedTileElementsCount; - if (newElementCount > spareSavedElements) { + if (newElementCount > spareSavedElements) + { // No more spare saved elements left return false; } @@ -240,9 +262,10 @@ static bool track_design_save_can_add_tile_element(rct_tile_element *tileElement * * rct2: 0x006D2F4C */ -static void track_design_save_push_tile_element(int32_t x, int32_t y, rct_tile_element *tileElement) +static void track_design_save_push_tile_element(int32_t x, int32_t y, rct_tile_element* tileElement) { - if (_trackSavedTileElementsCount < TRACK_MAX_SAVED_TILE_ELEMENTS) { + if (_trackSavedTileElementsCount < TRACK_MAX_SAVED_TILE_ELEMENTS) + { _trackSavedTileElements[_trackSavedTileElementsCount++] = tileElement; map_invalidate_tile_full(x, y); } @@ -252,9 +275,16 @@ static void track_design_save_push_tile_element(int32_t x, int32_t y, rct_tile_e * * rct2: 0x006D2FA7 */ -static void track_design_save_push_tile_element_desc(const rct_object_entry * entry, int32_t x, int32_t y, int32_t z, uint8_t flags, uint8_t primaryColour, uint8_t secondaryColour) +static void track_design_save_push_tile_element_desc( + const rct_object_entry* entry, + int32_t x, + int32_t y, + int32_t z, + uint8_t flags, + uint8_t primaryColour, + uint8_t secondaryColour) { - rct_td6_scenery_element *item = &_trackSavedTileElementsDesc[_trackSavedTileElementsDescCount++]; + rct_td6_scenery_element* item = &_trackSavedTileElementsDesc[_trackSavedTileElementsDescCount++]; item->scenery_object = *entry; item->x = x / 32; item->y = y / 32; @@ -264,7 +294,7 @@ static void track_design_save_push_tile_element_desc(const rct_object_entry * en item->secondary_colour = secondaryColour; } -static void track_design_save_add_scenery(int32_t x, int32_t y, rct_tile_element *tileElement) +static void track_design_save_add_scenery(int32_t x, int32_t y, rct_tile_element* tileElement) { int32_t entryType = tileElement->properties.scenery.type; auto entry = object_entry_get_entry(OBJECT_TYPE_SMALL_SCENERY, entryType); @@ -280,7 +310,7 @@ static void track_design_save_add_scenery(int32_t x, int32_t y, rct_tile_element track_design_save_push_tile_element_desc(entry, x, y, tileElement->base_height, flags, primaryColour, secondaryColour); } -static void track_design_save_add_large_scenery(int32_t x, int32_t y, rct_tile_element *tileElement) +static void track_design_save_add_large_scenery(int32_t x, int32_t y, rct_tile_element* tileElement) { rct_large_scenery_tile *sceneryTiles, *tile; int32_t x0, y0, z0, z; @@ -294,13 +324,15 @@ static void track_design_save_add_large_scenery(int32_t x, int32_t y, rct_tile_e direction = tileElement->type & 3; sequence = scenery_large_get_sequence(tileElement); - if (!map_large_scenery_get_origin(x, y, z, direction, sequence, &x0, &y0, &z0, NULL)) { + if (!map_large_scenery_get_origin(x, y, z, direction, sequence, &x0, &y0, &z0, NULL)) + { return; } // Iterate through each tile of the large scenery element sequence = 0; - for (tile = sceneryTiles; tile->x_offset != -1; tile++, sequence++) { + for (tile = sceneryTiles; tile->x_offset != -1; tile++, sequence++) + { int16_t offsetX = tile->x_offset; int16_t offsetY = tile->y_offset; rotate_map_coordinates(&offsetX, &offsetY, direction); @@ -324,7 +356,7 @@ static void track_design_save_add_large_scenery(int32_t x, int32_t y, rct_tile_e } } -static void track_design_save_add_wall(int32_t x, int32_t y, rct_tile_element *tileElement) +static void track_design_save_add_wall(int32_t x, int32_t y, rct_tile_element* tileElement) { int32_t entryType = tileElement->properties.wall.type; auto entry = object_entry_get_entry(OBJECT_TYPE_WALLS, entryType); @@ -340,7 +372,7 @@ static void track_design_save_add_wall(int32_t x, int32_t y, rct_tile_element *t track_design_save_push_tile_element_desc(entry, x, y, tileElement->base_height, flags, primaryColour, secondaryColour); } -static void track_design_save_add_footpath(int32_t x, int32_t y, rct_tile_element *tileElement) +static void track_design_save_add_footpath(int32_t x, int32_t y, rct_tile_element* tileElement) { int32_t entryType = tileElement->properties.path.type >> 4; auto entry = object_entry_get_entry(OBJECT_TYPE_PATHS, entryType); @@ -359,27 +391,29 @@ static void track_design_save_add_footpath(int32_t x, int32_t y, rct_tile_elemen * * rct2: 0x006D2B3C */ -static bool track_design_save_add_tile_element(int32_t interactionType, int32_t x, int32_t y, rct_tile_element *tileElement) +static bool track_design_save_add_tile_element(int32_t interactionType, int32_t x, int32_t y, rct_tile_element* tileElement) { - if (!track_design_save_can_add_tile_element(tileElement)) { + if (!track_design_save_can_add_tile_element(tileElement)) + { return false; } - switch (interactionType) { - case VIEWPORT_INTERACTION_ITEM_SCENERY: - track_design_save_add_scenery(x, y, tileElement); - return true; - case VIEWPORT_INTERACTION_ITEM_LARGE_SCENERY: - track_design_save_add_large_scenery(x, y, tileElement); - return true; - case VIEWPORT_INTERACTION_ITEM_WALL: - track_design_save_add_wall(x, y, tileElement); - return true; - case VIEWPORT_INTERACTION_ITEM_FOOTPATH: - track_design_save_add_footpath(x, y, tileElement); - return true; - default: - return false; + switch (interactionType) + { + case VIEWPORT_INTERACTION_ITEM_SCENERY: + track_design_save_add_scenery(x, y, tileElement); + return true; + case VIEWPORT_INTERACTION_ITEM_LARGE_SCENERY: + track_design_save_add_large_scenery(x, y, tileElement); + return true; + case VIEWPORT_INTERACTION_ITEM_WALL: + track_design_save_add_wall(x, y, tileElement); + return true; + case VIEWPORT_INTERACTION_ITEM_FOOTPATH: + track_design_save_add_footpath(x, y, tileElement); + return true; + default: + return false; } } @@ -387,27 +421,30 @@ static bool track_design_save_add_tile_element(int32_t interactionType, int32_t * * rct2: 0x006D2F78 */ -static void track_design_save_pop_tile_element(int32_t x, int32_t y, rct_tile_element *tileElement) +static void track_design_save_pop_tile_element(int32_t x, int32_t y, rct_tile_element* tileElement) { map_invalidate_tile_full(x, y); // Find index of map element to remove size_t removeIndex = SIZE_MAX; - for (size_t i = 0; i < _trackSavedTileElementsCount; i++) { - if (_trackSavedTileElements[i] == tileElement) { + for (size_t i = 0; i < _trackSavedTileElementsCount; i++) + { + if (_trackSavedTileElements[i] == tileElement) + { removeIndex = i; } } // Remove map element from list - if (removeIndex != SIZE_MAX) { + if (removeIndex != SIZE_MAX) + { size_t remainingNumItems = _trackSavedTileElementsCount - removeIndex - 1; - if (remainingNumItems > 0) { + if (remainingNumItems > 0) + { memmove( &_trackSavedTileElements[removeIndex], &_trackSavedTileElements[removeIndex + 1], - remainingNumItems * sizeof(rct_tile_element*) - ); + remainingNumItems * sizeof(rct_tile_element*)); } _trackSavedTileElementsCount--; _trackSavedTileElements[_trackSavedTileElementsCount] = nullptr; @@ -418,34 +455,42 @@ static void track_design_save_pop_tile_element(int32_t x, int32_t y, rct_tile_el * * rct2: 0x006D2FDD */ -static void track_design_save_pop_tile_element_desc(const rct_object_entry *entry, int32_t x, int32_t y, int32_t z, uint8_t flags) +static void + track_design_save_pop_tile_element_desc(const rct_object_entry* entry, int32_t x, int32_t y, int32_t z, uint8_t flags) { size_t removeIndex = SIZE_MAX; - for (size_t i = 0; i < _trackSavedTileElementsDescCount; i++) { - rct_td6_scenery_element *item = &_trackSavedTileElementsDesc[i]; - if (item->x != x / 32) continue; - if (item->y != y / 32) continue; - if (item->z != z) continue; - if (item->flags != flags) continue; - if (!object_entry_compare(&item->scenery_object, entry)) continue; + for (size_t i = 0; i < _trackSavedTileElementsDescCount; i++) + { + rct_td6_scenery_element* item = &_trackSavedTileElementsDesc[i]; + if (item->x != x / 32) + continue; + if (item->y != y / 32) + continue; + if (item->z != z) + continue; + if (item->flags != flags) + continue; + if (!object_entry_compare(&item->scenery_object, entry)) + continue; removeIndex = i; } - if (removeIndex != SIZE_MAX) { + if (removeIndex != SIZE_MAX) + { size_t remainingNumItems = _trackSavedTileElementsDescCount - removeIndex - 1; - if (remainingNumItems > 0) { + if (remainingNumItems > 0) + { memmove( &_trackSavedTileElementsDesc[removeIndex], &_trackSavedTileElementsDesc[removeIndex + 1], - remainingNumItems * sizeof(rct_td6_scenery_element) - ); + remainingNumItems * sizeof(rct_td6_scenery_element)); } _trackSavedTileElementsDescCount--; } } -static void track_design_save_remove_scenery(int32_t x, int32_t y, rct_tile_element *tileElement) +static void track_design_save_remove_scenery(int32_t x, int32_t y, rct_tile_element* tileElement) { int32_t entryType = tileElement->properties.scenery.type; auto entry = object_entry_get_entry(OBJECT_TYPE_SMALL_SCENERY, entryType); @@ -458,7 +503,7 @@ static void track_design_save_remove_scenery(int32_t x, int32_t y, rct_tile_elem track_design_save_pop_tile_element_desc(entry, x, y, tileElement->base_height, flags); } -static void track_design_save_remove_large_scenery(int32_t x, int32_t y, rct_tile_element *tileElement) +static void track_design_save_remove_large_scenery(int32_t x, int32_t y, rct_tile_element* tileElement) { rct_large_scenery_tile *sceneryTiles, *tile; int32_t x0, y0, z0, z; @@ -472,13 +517,15 @@ static void track_design_save_remove_large_scenery(int32_t x, int32_t y, rct_til direction = tileElement->type & 3; sequence = scenery_large_get_sequence(tileElement); - if (!map_large_scenery_get_origin(x, y, z, direction, sequence, &x0, &y0, &z0, NULL)) { + if (!map_large_scenery_get_origin(x, y, z, direction, sequence, &x0, &y0, &z0, NULL)) + { return; } // Iterate through each tile of the large scenery element sequence = 0; - for (tile = sceneryTiles; tile->x_offset != -1; tile++, sequence++) { + for (tile = sceneryTiles; tile->x_offset != -1; tile++, sequence++) + { int16_t offsetX = tile->x_offset; int16_t offsetY = tile->y_offset; rotate_map_coordinates(&offsetX, &offsetY, direction); @@ -499,7 +546,7 @@ static void track_design_save_remove_large_scenery(int32_t x, int32_t y, rct_til } } -static void track_design_save_remove_wall(int32_t x, int32_t y, rct_tile_element *tileElement) +static void track_design_save_remove_wall(int32_t x, int32_t y, rct_tile_element* tileElement) { int32_t entryType = tileElement->properties.wall.type; auto entry = object_entry_get_entry(OBJECT_TYPE_WALLS, entryType); @@ -512,7 +559,7 @@ static void track_design_save_remove_wall(int32_t x, int32_t y, rct_tile_element track_design_save_pop_tile_element_desc(entry, x, y, tileElement->base_height, flags); } -static void track_design_save_remove_footpath(int32_t x, int32_t y, rct_tile_element *tileElement) +static void track_design_save_remove_footpath(int32_t x, int32_t y, rct_tile_element* tileElement) { int32_t entryType = tileElement->properties.path.type >> 4; auto entry = object_entry_get_entry(OBJECT_TYPE_PATHS, entryType); @@ -531,76 +578,85 @@ static void track_design_save_remove_footpath(int32_t x, int32_t y, rct_tile_ele * * rct2: 0x006D2B3C */ -static void track_design_save_remove_tile_element(int32_t interactionType, int32_t x, int32_t y, rct_tile_element *tileElement) +static void track_design_save_remove_tile_element(int32_t interactionType, int32_t x, int32_t y, rct_tile_element* tileElement) { - switch (interactionType) { - case VIEWPORT_INTERACTION_ITEM_SCENERY: - track_design_save_remove_scenery(x, y, tileElement); - break; - case VIEWPORT_INTERACTION_ITEM_LARGE_SCENERY: - track_design_save_remove_large_scenery(x, y, tileElement); - break; - case VIEWPORT_INTERACTION_ITEM_WALL: - track_design_save_remove_wall(x, y, tileElement); - break; - case VIEWPORT_INTERACTION_ITEM_FOOTPATH: - track_design_save_remove_footpath(x, y, tileElement); - break; + switch (interactionType) + { + case VIEWPORT_INTERACTION_ITEM_SCENERY: + track_design_save_remove_scenery(x, y, tileElement); + break; + case VIEWPORT_INTERACTION_ITEM_LARGE_SCENERY: + track_design_save_remove_large_scenery(x, y, tileElement); + break; + case VIEWPORT_INTERACTION_ITEM_WALL: + track_design_save_remove_wall(x, y, tileElement); + break; + case VIEWPORT_INTERACTION_ITEM_FOOTPATH: + track_design_save_remove_footpath(x, y, tileElement); + break; } } -static bool track_design_save_should_select_scenery_around(int32_t rideIndex, rct_tile_element *tileElement) +static bool track_design_save_should_select_scenery_around(int32_t rideIndex, rct_tile_element* tileElement) { - switch (tileElement->GetType()) { - case TILE_ELEMENT_TYPE_PATH: - if ((tileElement->type & FOOTPATH_ELEMENT_TYPE_FLAG_IS_QUEUE) && tileElement->properties.path.addition_status == rideIndex) - return true; - break; - case TILE_ELEMENT_TYPE_TRACK: - if (track_element_get_ride_index(tileElement) == rideIndex) - return true; - break; - case TILE_ELEMENT_TYPE_ENTRANCE: - if (tileElement->properties.entrance.type != ENTRANCE_TYPE_RIDE_ENTRANCE) + switch (tileElement->GetType()) + { + case TILE_ELEMENT_TYPE_PATH: + if ((tileElement->type & FOOTPATH_ELEMENT_TYPE_FLAG_IS_QUEUE) + && tileElement->properties.path.addition_status == rideIndex) + return true; break; - if (tileElement->properties.entrance.type != ENTRANCE_TYPE_RIDE_EXIT) + case TILE_ELEMENT_TYPE_TRACK: + if (track_element_get_ride_index(tileElement) == rideIndex) + return true; + break; + case TILE_ELEMENT_TYPE_ENTRANCE: + if (tileElement->properties.entrance.type != ENTRANCE_TYPE_RIDE_ENTRANCE) + break; + if (tileElement->properties.entrance.type != ENTRANCE_TYPE_RIDE_EXIT) + break; + if (tileElement->properties.entrance.ride_index == rideIndex) + return true; break; - if (tileElement->properties.entrance.ride_index == rideIndex) - return true; - break; } return false; } static void track_design_save_select_nearby_scenery_for_tile(int32_t rideIndex, int32_t cx, int32_t cy) { - rct_tile_element *tileElement; + rct_tile_element* tileElement; - for (int32_t y = cy - TRACK_NEARBY_SCENERY_DISTANCE; y <= cy + TRACK_NEARBY_SCENERY_DISTANCE; y++) { - for (int32_t x = cx - TRACK_NEARBY_SCENERY_DISTANCE; x <= cx + TRACK_NEARBY_SCENERY_DISTANCE; x++) { + for (int32_t y = cy - TRACK_NEARBY_SCENERY_DISTANCE; y <= cy + TRACK_NEARBY_SCENERY_DISTANCE; y++) + { + for (int32_t x = cx - TRACK_NEARBY_SCENERY_DISTANCE; x <= cx + TRACK_NEARBY_SCENERY_DISTANCE; x++) + { tileElement = map_get_first_element_at(x, y); - do { + do + { int32_t interactionType = VIEWPORT_INTERACTION_ITEM_NONE; - switch (tileElement->GetType()) { - case TILE_ELEMENT_TYPE_PATH: - if (!(tileElement->type & FOOTPATH_ELEMENT_TYPE_FLAG_IS_QUEUE)) - interactionType = VIEWPORT_INTERACTION_ITEM_FOOTPATH; - else if (tileElement->properties.path.addition_status == rideIndex) - interactionType = VIEWPORT_INTERACTION_ITEM_FOOTPATH; - break; - case TILE_ELEMENT_TYPE_SMALL_SCENERY: - interactionType = VIEWPORT_INTERACTION_ITEM_SCENERY; - break; - case TILE_ELEMENT_TYPE_WALL: - interactionType = VIEWPORT_INTERACTION_ITEM_WALL; - break; - case TILE_ELEMENT_TYPE_LARGE_SCENERY: - interactionType = VIEWPORT_INTERACTION_ITEM_LARGE_SCENERY; - break; + switch (tileElement->GetType()) + { + case TILE_ELEMENT_TYPE_PATH: + if (!(tileElement->type & FOOTPATH_ELEMENT_TYPE_FLAG_IS_QUEUE)) + interactionType = VIEWPORT_INTERACTION_ITEM_FOOTPATH; + else if (tileElement->properties.path.addition_status == rideIndex) + interactionType = VIEWPORT_INTERACTION_ITEM_FOOTPATH; + break; + case TILE_ELEMENT_TYPE_SMALL_SCENERY: + interactionType = VIEWPORT_INTERACTION_ITEM_SCENERY; + break; + case TILE_ELEMENT_TYPE_WALL: + interactionType = VIEWPORT_INTERACTION_ITEM_WALL; + break; + case TILE_ELEMENT_TYPE_LARGE_SCENERY: + interactionType = VIEWPORT_INTERACTION_ITEM_LARGE_SCENERY; + break; } - if (interactionType != VIEWPORT_INTERACTION_ITEM_NONE) { - if (!track_design_save_contains_tile_element(tileElement)) { + if (interactionType != VIEWPORT_INTERACTION_ITEM_NONE) + { + if (!track_design_save_contains_tile_element(tileElement)) + { track_design_save_add_tile_element(interactionType, x * 32, y * 32, tileElement); } } @@ -610,57 +666,59 @@ static void track_design_save_select_nearby_scenery_for_tile(int32_t rideIndex, } /* Based on rct2: 0x006D2897 */ -static bool track_design_save_copy_scenery_to_td6(rct_track_td6 *td6) +static bool track_design_save_copy_scenery_to_td6(rct_track_td6* td6) { // Copy TD6 scenery elements to new memory and add end marker size_t totalSceneryElementsSize = _trackSavedTileElementsDescCount * sizeof(rct_td6_scenery_element); - td6->scenery_elements = (rct_td6_scenery_element *)malloc(totalSceneryElementsSize + 1); + td6->scenery_elements = (rct_td6_scenery_element*)malloc(totalSceneryElementsSize + 1); memcpy(td6->scenery_elements, _trackSavedTileElementsDesc, totalSceneryElementsSize); *((uint8_t*)&td6->scenery_elements[_trackSavedTileElementsDescCount]) = 0xFF; // Run an element loop - for (size_t i = 0; i < _trackSavedTileElementsDescCount; i++) { - rct_td6_scenery_element *scenery = &td6->scenery_elements[i]; + for (size_t i = 0; i < _trackSavedTileElementsDescCount; i++) + { + rct_td6_scenery_element* scenery = &td6->scenery_elements[i]; - switch (object_entry_get_type(&scenery->scenery_object)) { - case OBJECT_TYPE_PATHS: + switch (object_entry_get_type(&scenery->scenery_object)) { - uint8_t slope = (scenery->flags & 0x60) >> 5; - slope -= _trackSaveDirection; + case OBJECT_TYPE_PATHS: + { + uint8_t slope = (scenery->flags & 0x60) >> 5; + slope -= _trackSaveDirection; - scenery->flags &= 0x9F; - scenery->flags |= ((slope & 3) << 5); + scenery->flags &= 0x9F; + scenery->flags |= ((slope & 3) << 5); - // Direction of connection on path - uint8_t direction = scenery->flags & 0xF; - // Rotate the direction by the track direction - direction = ((direction << 4) >> _trackSaveDirection); + // Direction of connection on path + uint8_t direction = scenery->flags & 0xF; + // Rotate the direction by the track direction + direction = ((direction << 4) >> _trackSaveDirection); - scenery->flags &= 0xF0; - scenery->flags |= (direction & 0xF) | (direction >> 4); - break; - } - case OBJECT_TYPE_WALLS: - { - uint8_t direction = scenery->flags & 3; - direction -= _trackSaveDirection; + scenery->flags &= 0xF0; + scenery->flags |= (direction & 0xF) | (direction >> 4); + break; + } + case OBJECT_TYPE_WALLS: + { + uint8_t direction = scenery->flags & 3; + direction -= _trackSaveDirection; - scenery->flags &= 0xFC; - scenery->flags |= (direction & 3); - break; - } - default: - { - uint8_t direction = scenery->flags & 3; - uint8_t quadrant = (scenery->flags & 0x0C) >> 2; + scenery->flags &= 0xFC; + scenery->flags |= (direction & 3); + break; + } + default: + { + uint8_t direction = scenery->flags & 3; + uint8_t quadrant = (scenery->flags & 0x0C) >> 2; - direction -= _trackSaveDirection; - quadrant -= _trackSaveDirection; + direction -= _trackSaveDirection; + quadrant -= _trackSaveDirection; - scenery->flags &= 0xF0; - scenery->flags |= (direction & 3) | ((quadrant & 3) << 2); - break; - } + scenery->flags &= 0xF0; + scenery->flags |= (direction & 3) | ((quadrant & 3) << 2); + break; + } } int16_t x = ((uint8_t)scenery->x) * 32 - gTrackPreviewOrigin.x; @@ -669,7 +727,8 @@ static bool track_design_save_copy_scenery_to_td6(rct_track_td6 *td6) x /= 32; y /= 32; - if (x > 127 || y > 127 || x < -126 || y < -126){ + if (x > 127 || y > 127 || x < -126 || y < -126) + { context_show_error(STR_CANT_SAVE_TRACK_DESIGN, STR_TRACK_TOO_LARGE_OR_TOO_MUCH_SCENERY); SafeFree(td6->scenery_elements); return false; @@ -680,7 +739,8 @@ static bool track_design_save_copy_scenery_to_td6(rct_track_td6 *td6) int32_t z = scenery->z * 8 - gTrackPreviewOrigin.z; z /= 8; - if (z > 127 || z < -126) { + if (z > 127 || z < -126) + { context_show_error(STR_CANT_SAVE_TRACK_DESIGN, STR_TRACK_TOO_LARGE_OR_TOO_MUCH_SCENERY); SafeFree(td6->scenery_elements); return false; @@ -695,10 +755,10 @@ static bool track_design_save_copy_scenery_to_td6(rct_track_td6 *td6) * * rct2: 0x006CE44F */ -static rct_track_td6 *track_design_save_to_td6(uint8_t rideIndex) +static rct_track_td6* track_design_save_to_td6(uint8_t rideIndex) { - rct_track_td6 *td6 = (rct_track_td6 *)calloc(1, sizeof(rct_track_td6)); - Ride *ride = get_ride(rideIndex); + rct_track_td6* td6 = (rct_track_td6*)calloc(1, sizeof(rct_track_td6)); + Ride* ride = get_ride(rideIndex); td6->type = ride->type; auto object = object_entry_get_entry(OBJECT_TYPE_RIDE, ride->subtype); @@ -708,9 +768,7 @@ static rct_track_td6 *track_design_save_to_td6(uint8_t rideIndex) td6->ride_mode = ride->mode; - td6->version_and_colour_scheme = - (ride->colour_scheme_type & 3) | - (1 << 3); // Version .TD6 + td6->version_and_colour_scheme = (ride->colour_scheme_type & 3) | (1 << 3); // Version .TD6 for (int32_t i = 0; i < RCT12_MAX_VEHICLES_PER_RIDE; i++) { @@ -731,9 +789,7 @@ static rct_track_td6 *track_design_save_to_td6(uint8_t rideIndex) td6->min_waiting_time = ride->min_waiting_time; td6->max_waiting_time = ride->max_waiting_time; td6->operation_setting = ride->operation_option; - td6->lift_hill_speed_num_circuits = - ride->lift_hill_speed | - (ride->num_circuits << 5); + td6->lift_hill_speed_num_circuits = ride->lift_hill_speed | (ride->num_circuits << 5); td6->entrance_style = ride->entrance_style; td6->max_speed = (int8_t)(ride->max_speed / 65536); @@ -747,7 +803,8 @@ static rct_track_td6 *track_design_save_to_td6(uint8_t rideIndex) td6->highest_drop_height = ride->highest_drop_height; uint16_t total_air_time = (ride->total_air_time * 123) / 1024; - if (total_air_time > 255) { + if (total_air_time > 255) + { total_air_time = 0; } td6->total_air_time = (uint8_t)total_air_time; @@ -761,13 +818,17 @@ static rct_track_td6 *track_design_save_to_td6(uint8_t rideIndex) td6->flags2 = 0; bool result; - if (td6->type == RIDE_TYPE_MAZE) { + if (td6->type == RIDE_TYPE_MAZE) + { result = track_design_save_to_td6_for_maze(rideIndex, td6); - } else { + } + else + { result = track_design_save_to_td6_for_tracked_ride(rideIndex, td6); } - if (!result) { + if (!result) + { track_design_dispose(td6); td6 = nullptr; } @@ -778,33 +839,40 @@ static rct_track_td6 *track_design_save_to_td6(uint8_t rideIndex) * * rct2: 0x006CEAAE */ -static bool track_design_save_to_td6_for_maze(uint8_t rideIndex, rct_track_td6 *td6) +static bool track_design_save_to_td6_for_maze(uint8_t rideIndex, rct_track_td6* td6) { - rct_tile_element *tileElement = nullptr; + rct_tile_element* tileElement = nullptr; bool mapFound = false; int16_t startX = 0; int16_t startY = 0; - for (startY = 0; startY < 8192; startY += 32) { - for (startX = 0; startX < 8192; startX += 32) { + for (startY = 0; startY < 8192; startY += 32) + { + for (startX = 0; startX < 8192; startX += 32) + { tileElement = map_get_first_element_at(startX >> 5, startY >> 5); - do { + do + { if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; - if (track_element_get_ride_index(tileElement) == rideIndex){ + if (track_element_get_ride_index(tileElement) == rideIndex) + { mapFound = true; break; } } while (!(tileElement++)->IsLastForTile()); - if (mapFound) { + if (mapFound) + { break; } } - if (mapFound) { + if (mapFound) + { break; } } - if (mapFound == 0) { + if (mapFound == 0) + { gGameCommandErrorText = STR_TRACK_TOO_LARGE_OR_TOO_MUCH_SCENERY; return false; } @@ -812,18 +880,23 @@ static bool track_design_save_to_td6_for_maze(uint8_t rideIndex, rct_track_td6 * gTrackPreviewOrigin = { startX, startY, (int16_t)(tileElement->base_height * 8) }; size_t numMazeElements = 0; - td6->maze_elements = (rct_td6_maze_element *)calloc(8192, sizeof(rct_td6_maze_element)); - rct_td6_maze_element *maze = td6->maze_elements; + td6->maze_elements = (rct_td6_maze_element*)calloc(8192, sizeof(rct_td6_maze_element)); + rct_td6_maze_element* maze = td6->maze_elements; // x is defined here as we can start the search // on tile start_x, start_y but then the next row // must restart on 0 - for (int16_t y = startY, x = startX; y < 8192; y += 32) { - for (; x < 8192; x += 32) { + for (int16_t y = startY, x = startX; y < 8192; y += 32) + { + for (; x < 8192; x += 32) + { tileElement = map_get_first_element_at(x / 32, y / 32); - do { - if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; - if (track_element_get_ride_index(tileElement) != rideIndex) continue; + do + { + if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) + continue; + if (track_element_get_ride_index(tileElement) != rideIndex) + continue; maze->maze_entry = track_element_get_maze_entry(tileElement); maze->x = (x - startX) / 32; @@ -831,13 +904,13 @@ static bool track_design_save_to_td6_for_maze(uint8_t rideIndex, rct_track_td6 * maze++; numMazeElements++; - if (numMazeElements >= 2000) { + if (numMazeElements >= 2000) + { gGameCommandErrorText = STR_TRACK_TOO_LARGE_OR_TOO_MUCH_SCENERY; SafeFree(td6->maze_elements); return false; } } while (!(tileElement++)->IsLastForTile()); - } x = 0; } @@ -855,10 +928,14 @@ static bool track_design_save_to_td6_for_maze(uint8_t rideIndex, rct_track_td6 * int16_t y = location.y * 32; tileElement = map_get_first_element_at(location.x, location.y); - do { - if (tileElement->GetType() != TILE_ELEMENT_TYPE_ENTRANCE) continue; - if (tileElement->properties.entrance.type != ENTRANCE_TYPE_RIDE_ENTRANCE) continue; - if (tileElement->properties.entrance.ride_index == rideIndex) break; + do + { + if (tileElement->GetType() != TILE_ELEMENT_TYPE_ENTRANCE) + continue; + if (tileElement->properties.entrance.type != ENTRANCE_TYPE_RIDE_ENTRANCE) + continue; + if (tileElement->properties.entrance.ride_index == rideIndex) + break; } while (!(tileElement++)->IsLastForTile()); // Add something that stops this from walking off the end @@ -881,10 +958,14 @@ static bool track_design_save_to_td6_for_maze(uint8_t rideIndex, rct_track_td6 * x = location.x * 32; y = location.y * 32; tileElement = map_get_first_element_at(location.x, location.y); - do { - if (tileElement->GetType() != TILE_ELEMENT_TYPE_ENTRANCE) continue; - if (tileElement->properties.entrance.type != ENTRANCE_TYPE_RIDE_EXIT) continue; - if (tileElement->properties.entrance.ride_index == rideIndex) break; + do + { + if (tileElement->GetType() != TILE_ELEMENT_TYPE_ENTRANCE) + continue; + if (tileElement->properties.entrance.type != ENTRANCE_TYPE_RIDE_EXIT) + continue; + if (tileElement->properties.entrance.ride_index == rideIndex) + break; } while (!(tileElement++)->IsLastForTile()); // Add something that stops this from walking off the end @@ -904,7 +985,7 @@ static bool track_design_save_to_td6_for_maze(uint8_t rideIndex, rct_track_td6 * numMazeElements++; // Trim memory - td6->maze_elements = (rct_td6_maze_element *)realloc(td6->maze_elements, numMazeElements * sizeof(rct_td6_maze_element)); + td6->maze_elements = (rct_td6_maze_element*)realloc(td6->maze_elements, numMazeElements * sizeof(rct_td6_maze_element)); // Save global vars as they are still used by scenery int16_t startZ = gTrackPreviewOrigin.z; @@ -924,12 +1005,13 @@ static bool track_design_save_to_td6_for_maze(uint8_t rideIndex, rct_track_td6 * * * rct2: 0x006CE68D */ -static bool track_design_save_to_td6_for_tracked_ride(uint8_t rideIndex, rct_track_td6 *td6) +static bool track_design_save_to_td6_for_tracked_ride(uint8_t rideIndex, rct_track_td6* td6) { - Ride *ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); CoordsXYE trackElement; - if (!ride_try_get_origin_element(rideIndex, &trackElement)) { + if (!ride_try_get_origin_element(rideIndex, &trackElement)) + { gGameCommandErrorText = STR_TRACK_TOO_LARGE_OR_TOO_MUCH_SCENERY; return false; } @@ -941,16 +1023,17 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8_t rideIndex, rct_tra uint8_t direction = tile_element_get_direction(trackElement.element); _trackSaveDirection = direction; - if (sub_6C683D(&trackElement.x, &trackElement.y, &z, direction, track_type, 0, &trackElement.element, 0)) { + if (sub_6C683D(&trackElement.x, &trackElement.y, &z, direction, track_type, 0, &trackElement.element, 0)) + { gGameCommandErrorText = STR_TRACK_TOO_LARGE_OR_TOO_MUCH_SCENERY; return 0; } - const rct_track_coordinates *trackCoordinates = &TrackCoordinates[track_element_get_type(trackElement.element)]; + const rct_track_coordinates* trackCoordinates = &TrackCoordinates[track_element_get_type(trackElement.element)]; // Used in the following loop to know when we have // completed all of the elements and are back at the // start. - rct_tile_element *initialMap = trackElement.element; + rct_tile_element* initialMap = trackElement.element; int16_t start_x = trackElement.x; int16_t start_y = trackElement.y; @@ -958,11 +1041,13 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8_t rideIndex, rct_tra gTrackPreviewOrigin = { start_x, start_y, start_z }; size_t numTrackElements = 0; - td6->track_elements = (rct_td6_track_element *)calloc(TRACK_TD6_MAX_ELEMENTS, sizeof(rct_td6_track_element)); - rct_td6_track_element *track = td6->track_elements; - do { + td6->track_elements = (rct_td6_track_element*)calloc(TRACK_TD6_MAX_ELEMENTS, sizeof(rct_td6_track_element)); + rct_td6_track_element* track = td6->track_elements; + do + { track->type = track_element_get_type(trackElement.element); - if (track->type == TRACK_ELEM_255) { + if (track->type == TRACK_ELEM_255) + { track->type = TRACK_ELEM_255_ALIAS; } @@ -978,9 +1063,8 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8_t rideIndex, rct_tra uint8_t flags = (trackElement.element->type & (1 << 7)) | bh; flags |= track_element_get_colour_scheme(trackElement.element) << 4; - if ( - RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE && - track_element_is_inverted(trackElement.element)) + if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE + && track_element_is_inverted(trackElement.element)) { flags |= TRACK_ELEMENT_FLAG_INVERTED; } @@ -1009,39 +1093,48 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8_t rideIndex, rct_tra gGameCommandErrorText = STR_TRACK_TOO_LARGE_OR_TOO_MUCH_SCENERY; return false; } - } - while (trackElement.element != initialMap); + } while (trackElement.element != initialMap); - td6->track_elements = (rct_td6_track_element *)realloc(td6->track_elements, numTrackElements * sizeof(rct_td6_track_element) + 1); + td6->track_elements + = (rct_td6_track_element*)realloc(td6->track_elements, numTrackElements * sizeof(rct_td6_track_element) + 1); *((uint8_t*)&td6->track_elements[numTrackElements]) = 0xFF; size_t numEntranceElements = 0; - td6->entrance_elements = (rct_td6_entrance_element *)calloc(32, sizeof(rct_td6_entrance_element)); - rct_td6_entrance_element *entrance = td6->entrance_elements; + td6->entrance_elements = (rct_td6_entrance_element*)calloc(32, sizeof(rct_td6_entrance_element)); + rct_td6_entrance_element* entrance = td6->entrance_elements; // First entrances, second exits - for (int32_t i = 0; i < 2; i++) { - for (int32_t station_index = 0; station_index < RCT12_MAX_STATIONS_PER_RIDE; station_index++) { + for (int32_t i = 0; i < 2; i++) + { + for (int32_t station_index = 0; station_index < RCT12_MAX_STATIONS_PER_RIDE; station_index++) + { z = ride->station_heights[station_index]; TileCoordsXYZD location; - if (i == 0) { + if (i == 0) + { location = ride_get_entrance_location(rideIndex, station_index); - } else { + } + else + { location = ride_get_exit_location(rideIndex, station_index); } - if (location.isNull()) { + if (location.isNull()) + { continue; } int16_t x = location.x * 32; int16_t y = location.y * 32; - rct_tile_element *tile_element = map_get_first_element_at(x >> 5, y >> 5); - do { - if (tile_element->GetType() != TILE_ELEMENT_TYPE_ENTRANCE) continue; - if (tile_element->base_height == z) break; + rct_tile_element* tile_element = map_get_first_element_at(x >> 5, y >> 5); + do + { + if (tile_element->GetType() != TILE_ELEMENT_TYPE_ENTRANCE) + continue; + if (tile_element->base_height == z) + break; } while (!(tile_element++)->IsLastForTile()); // Add something that stops this from walking off the end @@ -1062,26 +1155,30 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8_t rideIndex, rct_tra z -= gTrackPreviewOrigin.z; z /= 8; - if (z > 127 || z < -126) { + if (z > 127 || z < -126) + { gGameCommandErrorText = STR_TRACK_TOO_LARGE_OR_TOO_MUCH_SCENERY; return 0; } - if (z == 0xFF) { + if (z == 0xFF) + { z = 0x80; } entrance->z = z; // If this is the exit version - if (i == 1) { + if (i == 1) + { entrance->direction |= (1 << 7); } entrance++; numEntranceElements++; } } - td6->entrance_elements = (rct_td6_entrance_element *)realloc(td6->entrance_elements, numEntranceElements * sizeof(rct_td6_entrance_element) + 1); + td6->entrance_elements = (rct_td6_entrance_element*)realloc( + td6->entrance_elements, numEntranceElements * sizeof(rct_td6_entrance_element) + 1); *((uint8_t*)&td6->entrance_elements[numEntranceElements]) = 0xFF; place_virtual_track(td6, PTD_OPERATION_DRAW_OUTLINES, true, 0, 4096, 4096, 0); @@ -1098,45 +1195,50 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8_t rideIndex, rct_tra return true; } -static size_t track_design_get_maze_elements_count(rct_track_td6 *td6) +static size_t track_design_get_maze_elements_count(rct_track_td6* td6) { size_t count = 0; - rct_td6_maze_element *mazeElement = td6->maze_elements; - while (mazeElement->all != 0) { + rct_td6_maze_element* mazeElement = td6->maze_elements; + while (mazeElement->all != 0) + { count++; mazeElement++; } return count; } -static size_t track_design_get_track_elements_count(rct_track_td6 *td6) +static size_t track_design_get_track_elements_count(rct_track_td6* td6) { size_t count = 0; - rct_td6_track_element *trackElement = td6->track_elements; - while (trackElement->type != 0xFF) { + rct_td6_track_element* trackElement = td6->track_elements; + while (trackElement->type != 0xFF) + { count++; trackElement++; } return count; } -static size_t track_design_get_entrance_elements_count(rct_track_td6 *td6) +static size_t track_design_get_entrance_elements_count(rct_track_td6* td6) { size_t count = 0; - rct_td6_entrance_element *entranceElement = td6->entrance_elements; - while (entranceElement->z != -1) { + rct_td6_entrance_element* entranceElement = td6->entrance_elements; + while (entranceElement->z != -1) + { count++; entranceElement++; } return count; } -static size_t track_design_get_scenery_elements_count(rct_track_td6 *td6) +static size_t track_design_get_scenery_elements_count(rct_track_td6* td6) { size_t count = 0; - rct_td6_scenery_element *sceneryElement = td6->scenery_elements; - if (sceneryElement != nullptr) { - while (sceneryElement->scenery_object.end_flag != 0xFF) { + rct_td6_scenery_element* sceneryElement = td6->scenery_elements; + if (sceneryElement != nullptr) + { + while (sceneryElement->scenery_object.end_flag != 0xFF) + { count++; sceneryElement++; } @@ -1144,17 +1246,20 @@ static size_t track_design_get_scenery_elements_count(rct_track_td6 *td6) return count; } -struct auto_buffer { - void *ptr; +struct auto_buffer +{ + void* ptr; size_t length; size_t capacity; }; -static void auto_buffer_write(auto_buffer *buffer, const void *src, size_t len) +static void auto_buffer_write(auto_buffer* buffer, const void* src, size_t len) { size_t remainingSpace = buffer->capacity - buffer->length; - if (remainingSpace < len) { - do { + if (remainingSpace < len) + { + do + { buffer->capacity = std::max(8, buffer->capacity * 2); remainingSpace = buffer->capacity - buffer->length; } while (remainingSpace < len); @@ -1170,9 +1275,9 @@ static void auto_buffer_write(auto_buffer *buffer, const void *src, size_t len) * rct2: 0x006771DC but not really its branched from that * quite far. */ -bool track_design_save_to_file(const utf8 *path) +bool track_design_save_to_file(const utf8* path) { - rct_track_td6 *td6 = _trackDesign; + rct_track_td6* td6 = _trackDesign; const rct_td6_maze_element EndMarkerForMaze = {}; const uint8_t EndMarker = 0xFF; @@ -1181,20 +1286,29 @@ bool track_design_save_to_file(const utf8 *path) // Create TD6 data buffer auto_buffer td6Buffer = {}; auto_buffer_write(&td6Buffer, td6, 0xA3); - if (td6->type == RIDE_TYPE_MAZE) { - auto_buffer_write(&td6Buffer, td6->maze_elements, track_design_get_maze_elements_count(td6) * sizeof(rct_td6_maze_element)); + if (td6->type == RIDE_TYPE_MAZE) + { + auto_buffer_write( + &td6Buffer, td6->maze_elements, track_design_get_maze_elements_count(td6) * sizeof(rct_td6_maze_element)); auto_buffer_write(&td6Buffer, &EndMarkerForMaze, sizeof(EndMarkerForMaze)); - } else { - auto_buffer_write(&td6Buffer, td6->track_elements, track_design_get_track_elements_count(td6) * sizeof(rct_td6_track_element)); + } + else + { + auto_buffer_write( + &td6Buffer, td6->track_elements, track_design_get_track_elements_count(td6) * sizeof(rct_td6_track_element)); auto_buffer_write(&td6Buffer, &EndMarker, sizeof(EndMarker)); - auto_buffer_write(&td6Buffer, td6->entrance_elements, track_design_get_entrance_elements_count(td6) * sizeof(rct_td6_entrance_element)); + auto_buffer_write( + &td6Buffer, + td6->entrance_elements, + track_design_get_entrance_elements_count(td6) * sizeof(rct_td6_entrance_element)); auto_buffer_write(&td6Buffer, &EndMarker, sizeof(EndMarker)); } - auto_buffer_write(&td6Buffer, td6->scenery_elements, track_design_get_scenery_elements_count(td6) * sizeof(rct_td6_scenery_element)); + auto_buffer_write( + &td6Buffer, td6->scenery_elements, track_design_get_scenery_elements_count(td6) * sizeof(rct_td6_scenery_element)); auto_buffer_write(&td6Buffer, &EndMarker, sizeof(EndMarker)); // Encode TD6 data - uint8_t *encodedData = (uint8_t *)malloc(0x8000); + uint8_t* encodedData = (uint8_t*)malloc(0x8000); assert(td6Buffer.ptr != nullptr); size_t encodedDataLength = sawyercoding_encode_td6((uint8_t*)td6Buffer.ptr, encodedData, td6Buffer.length); @@ -1202,7 +1316,8 @@ bool track_design_save_to_file(const utf8 *path) bool result; log_verbose("saving track %s", path); result = writeentirefile(path, encodedData, encodedDataLength); - if (!result) { + if (!result) + { log_error("Failed to save %s", path); } diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index 39030867ae..1b1dbba684 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -7,6 +7,8 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ +#include "TrackPaint.h" + #include "../config/Config.h" #include "../drawing/Drawing.h" #include "../interface/Viewport.h" @@ -19,11 +21,10 @@ #include "../sprites.h" #include "../world/Map.h" #include "../world/Sprite.h" +#include "RideData.h" +#include "Station.h" #include "TrackData.h" #include "TrackDesign.h" -#include "RideData.h" -#include "TrackPaint.h" -#include "Station.h" // clang-format off /* rct2: 0x007667AC */ @@ -200,23 +201,23 @@ enum // clang-format on bool track_paint_util_has_fence( - enum edge_t edge, LocationXY16 position, const rct_tile_element * tileElement, Ride * ride, uint8_t rotation) + enum edge_t edge, LocationXY16 position, const rct_tile_element* tileElement, Ride* ride, uint8_t rotation) { LocationXY16 offset = { 0, 0 }; switch (edge) { - case EDGE_NE: - offset = loc_7667AC[rotation]; - break; - case EDGE_SE: - offset = loc_7667AE[(rotation + 2) & 3]; - break; - case EDGE_SW: - offset = loc_7667AC[(rotation + 2) & 3]; - break; - case EDGE_NW: - offset = loc_7667AE[rotation]; - break; + case EDGE_NE: + offset = loc_7667AC[rotation]; + break; + case EDGE_SE: + offset = loc_7667AE[(rotation + 2) & 3]; + break; + case EDGE_SW: + offset = loc_7667AC[(rotation + 2) & 3]; + break; + case EDGE_NW: + offset = loc_7667AE[rotation]; + break; } int32_t entranceX = (position.x / 32) + offset.x; @@ -226,12 +227,11 @@ bool track_paint_util_has_fence( const TileCoordsXYZD entrance = ride_get_entrance_location(ride, entranceId); const TileCoordsXYZD exit = ride_get_exit_location(ride, entranceId); - return ((entrance.x != entranceX || entrance.y != entranceY) && - (exit.x != entranceX || exit.y != entranceY)); + return ((entrance.x != entranceX || entrance.y != entranceY) && (exit.x != entranceX || exit.y != entranceY)); } -void track_paint_util_paint_floor(paint_session * session, uint8_t edges, uint32_t colourFlags, uint16_t height, - const uint32_t floorSprites[4]) +void track_paint_util_paint_floor( + paint_session* session, uint8_t edges, uint32_t colourFlags, uint16_t height, const uint32_t floorSprites[4]) { uint32_t imageId; @@ -256,15 +256,15 @@ void track_paint_util_paint_floor(paint_session * session, uint8_t edges, uint32 } void track_paint_util_paint_fences( - paint_session * session, - uint8_t edges, - LocationXY16 position, - const rct_tile_element * tileElement, - Ride * ride, - uint32_t colourFlags, - uint16_t height, - const uint32_t fenceSprites[4], - uint8_t rotation) + paint_session* session, + uint8_t edges, + LocationXY16 position, + const rct_tile_element* tileElement, + Ride* ride, + uint32_t colourFlags, + uint16_t height, + const uint32_t fenceSprites[4], + uint8_t rotation) { uint32_t imageId; @@ -303,64 +303,60 @@ bool track_paint_util_should_paint_supports(LocationXY16 position) } static void track_paint_util_draw_station_impl( - paint_session * session, - uint8_t rideIndex, - uint8_t direction, - uint16_t height, - uint16_t coverHeight, - const rct_tile_element * tileElement, - int32_t fenceOffsetA, - int32_t fenceOffsetB); + paint_session* session, + uint8_t rideIndex, + uint8_t direction, + uint16_t height, + uint16_t coverHeight, + const rct_tile_element* tileElement, + int32_t fenceOffsetA, + int32_t fenceOffsetB); void track_paint_util_draw_station( - paint_session * session, - uint8_t rideIndex, - uint8_t direction, - uint16_t height, - const rct_tile_element * tileElement) + paint_session* session, uint8_t rideIndex, uint8_t direction, uint16_t height, const rct_tile_element* tileElement) { track_paint_util_draw_station_impl(session, rideIndex, direction, height, height, tileElement, 5, 7); } void track_paint_util_draw_station_2( - paint_session * session, - uint8_t rideIndex, - uint8_t direction, - uint16_t height, - const rct_tile_element * tileElement, - int32_t fenceOffsetA, - int32_t fenceOffsetB) + paint_session* session, + uint8_t rideIndex, + uint8_t direction, + uint16_t height, + const rct_tile_element* tileElement, + int32_t fenceOffsetA, + int32_t fenceOffsetB) { track_paint_util_draw_station_impl(session, rideIndex, direction, height, height, tileElement, fenceOffsetA, fenceOffsetB); } void track_paint_util_draw_station_3( - paint_session * session, - uint8_t rideIndex, - uint8_t direction, - uint16_t height, - uint16_t coverHeight, - const rct_tile_element * tileElement) + paint_session* session, + uint8_t rideIndex, + uint8_t direction, + uint16_t height, + uint16_t coverHeight, + const rct_tile_element* tileElement) { track_paint_util_draw_station_impl(session, rideIndex, direction, height, coverHeight, tileElement, 5, 7); } static void track_paint_util_draw_station_impl( - paint_session * session, - uint8_t rideIndex, - uint8_t direction, - uint16_t height, - uint16_t coverHeight, - const rct_tile_element * tileElement, - int32_t fenceOffsetA, - int32_t fenceOffsetB) + paint_session* session, + uint8_t rideIndex, + uint8_t direction, + uint16_t height, + uint16_t coverHeight, + const rct_tile_element* tileElement, + int32_t fenceOffsetA, + int32_t fenceOffsetB) { - LocationXY16 position = session->MapPosition; - Ride * ride = get_ride(rideIndex); - const rct_ride_entrance_definition * entranceStyle = &RideEntranceDefinitions[ride->entrance_style]; - const bool hasGreenLight = tile_element_get_green_light(tileElement); + LocationXY16 position = session->MapPosition; + Ride* ride = get_ride(rideIndex); + const rct_ride_entrance_definition* entranceStyle = &RideEntranceDefinitions[ride->entrance_style]; + const bool hasGreenLight = tile_element_get_green_light(tileElement); - bool hasFence; + bool hasFence; uint32_t imageId; if (direction == 0 || direction == 2) @@ -373,25 +369,25 @@ static void track_paint_util_draw_station_impl( if (hasGreenLight) { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_GREEN_LIGHT_SW_NE - : SPR_STATION_PLATFORM_END_GREEN_LIGHT_SW_NE) | - session->TrackColours[SCHEME_SUPPORTS]; + : SPR_STATION_PLATFORM_END_GREEN_LIGHT_SW_NE) + | session->TrackColours[SCHEME_SUPPORTS]; } else { - imageId = - (hasFence ? SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_RED_LIGHT_SW_NE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId + = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_RED_LIGHT_SW_NE) + | session->TrackColours[SCHEME_SUPPORTS]; } } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 2) { - imageId = (hasFence ? SPR_STATION_PLATFORM_BEGIN_FENCED_SW_NE : SPR_STATION_PLATFORM_BEGIN_SW_NE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId = (hasFence ? SPR_STATION_PLATFORM_BEGIN_FENCED_SW_NE : SPR_STATION_PLATFORM_BEGIN_SW_NE) + | session->TrackColours[SCHEME_SUPPORTS]; } else { - imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_SW_NE : SPR_STATION_PLATFORM_SW_NE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_SW_NE : SPR_STATION_PLATFORM_SW_NE) + | session->TrackColours[SCHEME_SUPPORTS]; } sub_98196C(session, imageId, 0, 0, 32, 8, 1, height + fenceOffsetA); // height -= 5 (height) @@ -400,8 +396,8 @@ static void track_paint_util_draw_station_impl( if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 0) { - imageId = (hasGreenLight ? SPR_STATION_PLATFORM_END_GREEN_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_RED_LIGHT_SW_NE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId = (hasGreenLight ? SPR_STATION_PLATFORM_END_GREEN_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_RED_LIGHT_SW_NE) + | session->TrackColours[SCHEME_SUPPORTS]; } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 2) { @@ -468,25 +464,25 @@ static void track_paint_util_draw_station_impl( if (hasGreenLight) { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_GREEN_LIGHT_NW_SE - : SPR_STATION_PLATFORM_END_GREEN_LIGHT_NW_SE) | - session->TrackColours[SCHEME_SUPPORTS]; + : SPR_STATION_PLATFORM_END_GREEN_LIGHT_NW_SE) + | session->TrackColours[SCHEME_SUPPORTS]; } else { - imageId = - (hasFence ? SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_RED_LIGHT_NW_SE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId + = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_RED_LIGHT_NW_SE) + | session->TrackColours[SCHEME_SUPPORTS]; } } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 1) { - imageId = (hasFence ? SPR_STATION_PLATFORM_BEGIN_FENCED_NW_SE : SPR_STATION_PLATFORM_BEGIN_NW_SE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId = (hasFence ? SPR_STATION_PLATFORM_BEGIN_FENCED_NW_SE : SPR_STATION_PLATFORM_BEGIN_NW_SE) + | session->TrackColours[SCHEME_SUPPORTS]; } else { - imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_NW_SE : SPR_STATION_PLATFORM_NW_SE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_NW_SE : SPR_STATION_PLATFORM_NW_SE) + | session->TrackColours[SCHEME_SUPPORTS]; } sub_98196C(session, imageId, 0, 0, 8, 32, 1, height + fenceOffsetA); // height -= 5 (height) @@ -495,8 +491,8 @@ static void track_paint_util_draw_station_impl( if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 3) { - imageId = (hasGreenLight ? SPR_STATION_PLATFORM_END_GREEN_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_RED_LIGHT_NW_SE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId = (hasGreenLight ? SPR_STATION_PLATFORM_END_GREEN_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_RED_LIGHT_NW_SE) + | session->TrackColours[SCHEME_SUPPORTS]; } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 1) { @@ -557,19 +553,19 @@ static void track_paint_util_draw_station_impl( } void track_paint_util_draw_station_inverted( - paint_session * session, - uint8_t rideIndex, - uint8_t direction, - int32_t height, - const rct_tile_element * tileElement, - uint8_t stationVariant) + paint_session* session, + uint8_t rideIndex, + uint8_t direction, + int32_t height, + const rct_tile_element* tileElement, + uint8_t stationVariant) { - LocationXY16 position = session->MapPosition; - Ride * ride = get_ride(rideIndex); - const rct_ride_entrance_definition * entranceStyle = &RideEntranceDefinitions[ride->entrance_style]; - const bool hasGreenLight = tile_element_get_green_light(tileElement); + LocationXY16 position = session->MapPosition; + Ride* ride = get_ride(rideIndex); + const rct_ride_entrance_definition* entranceStyle = &RideEntranceDefinitions[ride->entrance_style]; + const bool hasGreenLight = tile_element_get_green_light(tileElement); - bool hasFence; + bool hasFence; uint32_t imageId; if (direction == 0 || direction == 2) @@ -582,25 +578,25 @@ void track_paint_util_draw_station_inverted( if (hasGreenLight) { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_GREEN_LIGHT_SW_NE - : SPR_STATION_PLATFORM_END_GREEN_LIGHT_SW_NE) | - session->TrackColours[SCHEME_SUPPORTS]; + : SPR_STATION_PLATFORM_END_GREEN_LIGHT_SW_NE) + | session->TrackColours[SCHEME_SUPPORTS]; } else { - imageId = - (hasFence ? SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_RED_LIGHT_SW_NE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId + = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_RED_LIGHT_SW_NE) + | session->TrackColours[SCHEME_SUPPORTS]; } } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 2) { - imageId = (hasFence ? SPR_STATION_PLATFORM_BEGIN_FENCED_SW_NE : SPR_STATION_PLATFORM_BEGIN_SW_NE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId = (hasFence ? SPR_STATION_PLATFORM_BEGIN_FENCED_SW_NE : SPR_STATION_PLATFORM_BEGIN_SW_NE) + | session->TrackColours[SCHEME_SUPPORTS]; } else { - imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_SW_NE : SPR_STATION_PLATFORM_SW_NE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_SW_NE : SPR_STATION_PLATFORM_SW_NE) + | session->TrackColours[SCHEME_SUPPORTS]; } sub_98196C(session, imageId, 0, 0, 32, 8, 1, height + 6); // height -= 5 (height) @@ -609,8 +605,8 @@ void track_paint_util_draw_station_inverted( if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 0) { - imageId = (hasGreenLight ? SPR_STATION_PLATFORM_END_GREEN_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_RED_LIGHT_SW_NE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId = (hasGreenLight ? SPR_STATION_PLATFORM_END_GREEN_LIGHT_SW_NE : SPR_STATION_PLATFORM_END_RED_LIGHT_SW_NE) + | session->TrackColours[SCHEME_SUPPORTS]; } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 2) { @@ -677,25 +673,25 @@ void track_paint_util_draw_station_inverted( if (hasGreenLight) { imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_GREEN_LIGHT_NW_SE - : SPR_STATION_PLATFORM_END_GREEN_LIGHT_NW_SE) | - session->TrackColours[SCHEME_SUPPORTS]; + : SPR_STATION_PLATFORM_END_GREEN_LIGHT_NW_SE) + | session->TrackColours[SCHEME_SUPPORTS]; } else { - imageId = - (hasFence ? SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_RED_LIGHT_NW_SE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId + = (hasFence ? SPR_STATION_PLATFORM_FENCED_END_RED_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_RED_LIGHT_NW_SE) + | session->TrackColours[SCHEME_SUPPORTS]; } } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 1) { - imageId = (hasFence ? SPR_STATION_PLATFORM_BEGIN_FENCED_NW_SE : SPR_STATION_PLATFORM_BEGIN_NW_SE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId = (hasFence ? SPR_STATION_PLATFORM_BEGIN_FENCED_NW_SE : SPR_STATION_PLATFORM_BEGIN_NW_SE) + | session->TrackColours[SCHEME_SUPPORTS]; } else { - imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_NW_SE : SPR_STATION_PLATFORM_NW_SE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId = (hasFence ? SPR_STATION_PLATFORM_FENCED_NW_SE : SPR_STATION_PLATFORM_NW_SE) + | session->TrackColours[SCHEME_SUPPORTS]; } sub_98196C(session, imageId, 0, 0, 8, 32, 1, height + 6); // height -= 5 (height) @@ -704,8 +700,8 @@ void track_paint_util_draw_station_inverted( if (track_element_get_type(tileElement) == TRACK_ELEM_END_STATION && direction == 3) { - imageId = (hasGreenLight ? SPR_STATION_PLATFORM_END_GREEN_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_RED_LIGHT_NW_SE) | - session->TrackColours[SCHEME_SUPPORTS]; + imageId = (hasGreenLight ? SPR_STATION_PLATFORM_END_GREEN_LIGHT_NW_SE : SPR_STATION_PLATFORM_END_RED_LIGHT_NW_SE) + | session->TrackColours[SCHEME_SUPPORTS]; } else if (track_element_get_type(tileElement) == TRACK_ELEM_BEGIN_STATION && direction == 1) { @@ -765,15 +761,19 @@ void track_paint_util_draw_station_inverted( } } -bool track_paint_util_draw_station_covers(paint_session * session, enum edge_t edge, bool hasFence, - const rct_ride_entrance_definition * entranceStyle, uint16_t height) +bool track_paint_util_draw_station_covers( + paint_session* session, enum edge_t edge, bool hasFence, const rct_ride_entrance_definition* entranceStyle, uint16_t height) { return track_paint_util_draw_station_covers_2(session, edge, hasFence, entranceStyle, height, STATION_VARIANT_BASIC); } -bool track_paint_util_draw_station_covers_2(paint_session * session, enum edge_t edge, bool hasFence, - const rct_ride_entrance_definition * entranceStyle, uint16_t height, - uint8_t stationVariant) +bool track_paint_util_draw_station_covers_2( + paint_session* session, + enum edge_t edge, + bool hasFence, + const rct_ride_entrance_definition* entranceStyle, + uint16_t height, + uint8_t stationVariant) { if (!(session->Unk141E9DB & (G141E9DB_FLAG_1 | G141E9DB_FLAG_2))) { @@ -786,34 +786,34 @@ bool track_paint_util_draw_station_covers_2(paint_session * session, enum edge_t { 46, 0 }, }; - uint32_t imageId; - uint32_t baseImageId = entranceStyle->base_image_id; - int32_t imageOffset = 0; + uint32_t imageId; + uint32_t baseImageId = entranceStyle->base_image_id; + int32_t imageOffset = 0; LocationXYZ16 offset, bounds = { 0, 0, 0 }, boundsOffset = { 0, 0, 0 }; offset = LocationXYZ16{ 0, 0, static_cast(height) }; switch (edge) { - case EDGE_NE: - bounds = LocationXYZ16{ 1, 30, heights[stationVariant][0] }; - boundsOffset = LocationXYZ16{ 0, 1, static_cast(height + 1) }; - imageOffset = hasFence ? SPR_STATION_COVER_OFFSET_SE_NW_BACK_1 : SPR_STATION_COVER_OFFSET_SE_NW_BACK_0; - break; - case EDGE_SE: - bounds = LocationXYZ16{ 32, 32, 0 }; - boundsOffset = LocationXYZ16{ 0, 0, static_cast(height + 1 + heights[stationVariant][0]) }; - imageOffset = SPR_STATION_COVER_OFFSET_NE_SW_FRONT; - break; - case EDGE_SW: - bounds = LocationXYZ16{ 32, 32, 0 }; - boundsOffset = LocationXYZ16{ 0, 0, static_cast(height + 1 + heights[stationVariant][0]) }; - imageOffset = SPR_STATION_COVER_OFFSET_SE_NW_FRONT; - break; - case EDGE_NW: - bounds = LocationXYZ16{ 30, 1, heights[stationVariant][0] }; - boundsOffset = LocationXYZ16{ 1, 0, static_cast(height + 1) }; - imageOffset = hasFence ? SPR_STATION_COVER_OFFSET_NE_SW_BACK_1 : SPR_STATION_COVER_OFFSET_NE_SW_BACK_0; - break; + case EDGE_NE: + bounds = LocationXYZ16{ 1, 30, heights[stationVariant][0] }; + boundsOffset = LocationXYZ16{ 0, 1, static_cast(height + 1) }; + imageOffset = hasFence ? SPR_STATION_COVER_OFFSET_SE_NW_BACK_1 : SPR_STATION_COVER_OFFSET_SE_NW_BACK_0; + break; + case EDGE_SE: + bounds = LocationXYZ16{ 32, 32, 0 }; + boundsOffset = LocationXYZ16{ 0, 0, static_cast(height + 1 + heights[stationVariant][0]) }; + imageOffset = SPR_STATION_COVER_OFFSET_NE_SW_FRONT; + break; + case EDGE_SW: + bounds = LocationXYZ16{ 32, 32, 0 }; + boundsOffset = LocationXYZ16{ 0, 0, static_cast(height + 1 + heights[stationVariant][0]) }; + imageOffset = SPR_STATION_COVER_OFFSET_SE_NW_FRONT; + break; + case EDGE_NW: + bounds = LocationXYZ16{ 30, 1, heights[stationVariant][0] }; + boundsOffset = LocationXYZ16{ 1, 0, static_cast(height + 1) }; + imageOffset = hasFence ? SPR_STATION_COVER_OFFSET_NE_SW_BACK_1 : SPR_STATION_COVER_OFFSET_NE_SW_BACK_0; + break; } if (session->TrackColours[SCHEME_MISC] != IMAGE_TYPE_REMAP) @@ -835,36 +835,63 @@ bool track_paint_util_draw_station_covers_2(paint_session * session, enum edge_t { imageId = (baseImageId & ~IMAGE_TYPE_TRANSPARENT) + imageOffset; sub_98197C( - session, imageId, (int8_t)offset.x, (int8_t)offset.y, bounds.x, bounds.y, (int8_t)bounds.z, offset.z, boundsOffset.x, - boundsOffset.y, boundsOffset.z); + session, + imageId, + (int8_t)offset.x, + (int8_t)offset.y, + bounds.x, + bounds.y, + (int8_t)bounds.z, + offset.z, + boundsOffset.x, + boundsOffset.y, + boundsOffset.z); uint32_t edi = session->TrackColours[SCHEME_TRACK] & (0b11111 << 19); // weird jump imageId = (baseImageId | edi) + ((1 << 23) | (1 << 24) | (1 << 25)) + imageOffset + 12; sub_98199C( - session, imageId, (int8_t)offset.x, (int8_t)offset.y, bounds.x, bounds.y, (int8_t)bounds.z, offset.z, boundsOffset.x, - boundsOffset.y, boundsOffset.z); + session, + imageId, + (int8_t)offset.x, + (int8_t)offset.y, + bounds.x, + bounds.y, + (int8_t)bounds.z, + offset.z, + boundsOffset.x, + boundsOffset.y, + boundsOffset.z); return true; } imageId = (baseImageId + imageOffset) | session->TrackColours[SCHEME_TRACK]; sub_98197C( - session, imageId, (int8_t)offset.x, (int8_t)offset.y, bounds.x, bounds.y, (int8_t)bounds.z, offset.z, boundsOffset.x, - boundsOffset.y, boundsOffset.z); + session, + imageId, + (int8_t)offset.x, + (int8_t)offset.y, + bounds.x, + bounds.y, + (int8_t)bounds.z, + offset.z, + boundsOffset.x, + boundsOffset.y, + boundsOffset.z); return true; } void track_paint_util_draw_station_platform( - paint_session * session, Ride * ride, uint8_t direction, int32_t height, int32_t zOffset, const rct_tile_element * tileElement) + paint_session* session, Ride* ride, uint8_t direction, int32_t height, int32_t zOffset, const rct_tile_element* tileElement) { - LocationXY16 position = session->MapPosition; - const rct_ride_entrance_definition * entranceStyle = &RideEntranceDefinitions[ride->entrance_style]; + LocationXY16 position = session->MapPosition; + const rct_ride_entrance_definition* entranceStyle = &RideEntranceDefinitions[ride->entrance_style]; if (direction & 1) { - bool hasFence = track_paint_util_has_fence(EDGE_NE, position, tileElement, ride, session->CurrentRotation); - uint32_t imageId = (hasFence ? SPR_STATION_NARROW_EDGE_FENCED_NE : SPR_STATION_NARROW_EDGE_NE) | - session->TrackColours[SCHEME_SUPPORTS]; + bool hasFence = track_paint_util_has_fence(EDGE_NE, position, tileElement, ride, session->CurrentRotation); + uint32_t imageId = (hasFence ? SPR_STATION_NARROW_EDGE_FENCED_NE : SPR_STATION_NARROW_EDGE_NE) + | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 0, 0, 8, 32, 1, height + zOffset); track_paint_util_draw_station_covers(session, EDGE_NE, hasFence, entranceStyle, height); @@ -881,9 +908,9 @@ void track_paint_util_draw_station_platform( } else { - bool hasFence = track_paint_util_has_fence(EDGE_NW, position, tileElement, ride, session->CurrentRotation); - uint32_t imageId = (hasFence ? SPR_STATION_NARROW_EDGE_FENCED_NW : SPR_STATION_NARROW_EDGE_NW) | - session->TrackColours[SCHEME_SUPPORTS]; + bool hasFence = track_paint_util_has_fence(EDGE_NW, position, tileElement, ride, session->CurrentRotation); + uint32_t imageId = (hasFence ? SPR_STATION_NARROW_EDGE_FENCED_NW : SPR_STATION_NARROW_EDGE_NW) + | session->TrackColours[SCHEME_SUPPORTS]; sub_98196C(session, imageId, 0, 0, 32, 8, 1, height + zOffset); track_paint_util_draw_station_covers(session, EDGE_NW, hasFence, entranceStyle, height); @@ -901,23 +928,23 @@ void track_paint_util_draw_station_platform( } void track_paint_util_draw_pier( - paint_session * session, - Ride * ride, - const rct_ride_entrance_definition * entranceStyle, - LocationXY16 position, - uint8_t direction, - int32_t height, - const rct_tile_element * tileElement, - uint8_t rotation) + paint_session* session, + Ride* ride, + const rct_ride_entrance_definition* entranceStyle, + LocationXY16 position, + uint8_t direction, + int32_t height, + const rct_tile_element* tileElement, + uint8_t rotation) { - bool hasFence; + bool hasFence; uint32_t imageId; if (direction & 1) { hasFence = track_paint_util_has_fence(EDGE_NE, position, tileElement, ride, session->CurrentRotation); - imageId = - (hasFence ? SPR_STATION_PIER_EDGE_NE_FENCED : SPR_STATION_PIER_EDGE_NE) | session->TrackColours[SCHEME_SUPPORTS]; + imageId + = (hasFence ? SPR_STATION_PIER_EDGE_NE_FENCED : SPR_STATION_PIER_EDGE_NE) | session->TrackColours[SCHEME_SUPPORTS]; sub_98197C(session, imageId, 0, 0, 6, 32, 1, height, 2, 0, height); track_paint_util_draw_station_covers(session, EDGE_NE, hasFence, entranceStyle, height); @@ -935,8 +962,8 @@ void track_paint_util_draw_pier( else { hasFence = track_paint_util_has_fence(EDGE_NW, position, tileElement, ride, rotation); - imageId = - (hasFence ? SPR_STATION_PIER_EDGE_NW_FENCED : SPR_STATION_PIER_EDGE_NW) | session->TrackColours[SCHEME_SUPPORTS]; + imageId + = (hasFence ? SPR_STATION_PIER_EDGE_NW_FENCED : SPR_STATION_PIER_EDGE_NW) | session->TrackColours[SCHEME_SUPPORTS]; sub_98197C(session, imageId, 0, 0, 32, 6, 1, height, 0, 2, height); track_paint_util_draw_station_covers(session, EDGE_NW, hasFence, entranceStyle, height); @@ -953,13 +980,13 @@ void track_paint_util_draw_pier( } } -void track_paint_util_draw_station_metal_supports(paint_session * session, uint8_t direction, uint16_t height, uint32_t colour) +void track_paint_util_draw_station_metal_supports(paint_session* session, uint8_t direction, uint16_t height, uint32_t colour) { track_paint_util_draw_station_metal_supports_2(session, direction, height, colour, 3); } -void track_paint_util_draw_station_metal_supports_2(paint_session * session, uint8_t direction, uint16_t height, uint32_t colour, - uint8_t type) +void track_paint_util_draw_station_metal_supports_2( + paint_session* session, uint8_t direction, uint16_t height, uint32_t colour, uint8_t type) { if (direction & 1) { @@ -1021,12 +1048,17 @@ const LocationXYZ16 defaultRightHelixUpSmallQuarterBoundOffsets[4][3][2] = { static constexpr const int8_t right_helix_up_small_quarter_tiles_sprite_map[] = { 0, -1, 1, 2 }; -void track_paint_util_right_helix_up_small_quarter_tiles_paint(paint_session * session, const int8_t thickness[2], int16_t height, - int32_t direction, uint8_t trackSequence, uint32_t colourFlags, - const uint32_t sprites[4][3][2], - const LocationXY16 offsets[4][3][2], - const LocationXY16 boundsLengths[4][3][2], - const LocationXYZ16 boundsOffsets[4][3][2]) +void track_paint_util_right_helix_up_small_quarter_tiles_paint( + paint_session* session, + const int8_t thickness[2], + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][3][2], + const LocationXY16 offsets[4][3][2], + const LocationXY16 boundsLengths[4][3][2], + const LocationXYZ16 boundsOffsets[4][3][2]) { int32_t index = right_helix_up_small_quarter_tiles_sprite_map[trackSequence]; if (index < 0) @@ -1036,27 +1068,45 @@ void track_paint_util_right_helix_up_small_quarter_tiles_paint(paint_session * s if (sprites[direction][index][0] != 0) { - uint32_t imageId = sprites[direction][index][0] | colourFlags; - LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index][0]); - LocationXY16 boundsLength = boundsLengths[direction][index][0]; - LocationXYZ16 boundsOffset = (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } - : boundsOffsets[direction][index][0]); + uint32_t imageId = sprites[direction][index][0] | colourFlags; + LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index][0]); + LocationXY16 boundsLength = boundsLengths[direction][index][0]; + LocationXYZ16 boundsOffset + = (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } : boundsOffsets[direction][index][0]); sub_98197C( - session, imageId, (int8_t)offset.x, (int8_t)offset.y, boundsLength.x, boundsLength.y, thickness[0], height, - boundsOffset.x, boundsOffset.y, height + boundsOffset.z); + session, + imageId, + (int8_t)offset.x, + (int8_t)offset.y, + boundsLength.x, + boundsLength.y, + thickness[0], + height, + boundsOffset.x, + boundsOffset.y, + height + boundsOffset.z); } if (sprites[direction][index][1] != 0) { - uint32_t imageId = sprites[direction][index][1] | colourFlags; - LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index][1]); - LocationXY16 boundsLength = boundsLengths[direction][index][1]; - LocationXYZ16 boundsOffset = (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } - : boundsOffsets[direction][index][1]); + uint32_t imageId = sprites[direction][index][1] | colourFlags; + LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index][1]); + LocationXY16 boundsLength = boundsLengths[direction][index][1]; + LocationXYZ16 boundsOffset + = (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } : boundsOffsets[direction][index][1]); sub_98197C( - session, imageId, (int8_t)offset.x, (int8_t)offset.y, boundsLength.x, boundsLength.y, thickness[1], height, - boundsOffset.x, boundsOffset.y, height + boundsOffset.z); + session, + imageId, + (int8_t)offset.x, + (int8_t)offset.y, + boundsLength.x, + boundsLength.y, + thickness[1], + height, + boundsOffset.x, + boundsOffset.y, + height + boundsOffset.z); } } @@ -1123,12 +1173,17 @@ const LocationXY16 defaultRightHelixUpLargeQuarterBoundLengths[4][5][2] = { }; static constexpr const int8_t right_helix_up_large_quarter_sprite_map[] = { 0, -1, 1, 2, -1, 3, 4 }; -void track_paint_util_right_helix_up_large_quarter_tiles_paint(paint_session * session, const int8_t thickness[2], int16_t height, - int32_t direction, uint8_t trackSequence, uint32_t colourFlags, - const uint32_t sprites[4][5][2], - const LocationXY16 offsets[4][5][2], - const LocationXY16 boundsLengths[4][5][2], - const LocationXYZ16 boundsOffsets[4][5][2]) +void track_paint_util_right_helix_up_large_quarter_tiles_paint( + paint_session* session, + const int8_t thickness[2], + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][5][2], + const LocationXY16 offsets[4][5][2], + const LocationXY16 boundsLengths[4][5][2], + const LocationXYZ16 boundsOffsets[4][5][2]) { int32_t index = right_helix_up_large_quarter_sprite_map[trackSequence]; if (index < 0) @@ -1138,27 +1193,45 @@ void track_paint_util_right_helix_up_large_quarter_tiles_paint(paint_session * s if (sprites[direction][index][0] != 0) { - uint32_t imageId = sprites[direction][index][0] | colourFlags; - LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index][0]); - LocationXY16 boundsLength = boundsLengths[direction][index][0]; - LocationXYZ16 boundsOffset = (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } - : boundsOffsets[direction][index][0]); + uint32_t imageId = sprites[direction][index][0] | colourFlags; + LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index][0]); + LocationXY16 boundsLength = boundsLengths[direction][index][0]; + LocationXYZ16 boundsOffset + = (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } : boundsOffsets[direction][index][0]); sub_98197C( - session, imageId, (int8_t)offset.x, (int8_t)offset.y, boundsLength.x, boundsLength.y, thickness[0], height, - boundsOffset.x, boundsOffset.y, height + boundsOffset.z); + session, + imageId, + (int8_t)offset.x, + (int8_t)offset.y, + boundsLength.x, + boundsLength.y, + thickness[0], + height, + boundsOffset.x, + boundsOffset.y, + height + boundsOffset.z); } if (sprites[direction][index][1] != 0) { - uint32_t imageId = sprites[direction][index][1] | colourFlags; - LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index][1]); - LocationXY16 boundsLength = boundsLengths[direction][index][1]; - LocationXYZ16 boundsOffset = (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } - : boundsOffsets[direction][index][1]); + uint32_t imageId = sprites[direction][index][1] | colourFlags; + LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index][1]); + LocationXY16 boundsLength = boundsLengths[direction][index][1]; + LocationXYZ16 boundsOffset + = (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } : boundsOffsets[direction][index][1]); sub_98197C( - session, imageId, (int8_t)offset.x, (int8_t)offset.y, boundsLength.x, boundsLength.y, thickness[1], height, - boundsOffset.x, boundsOffset.y, height + boundsOffset.z); + session, + imageId, + (int8_t)offset.x, + (int8_t)offset.y, + boundsLength.x, + boundsLength.y, + thickness[1], + height, + boundsOffset.x, + boundsOffset.y, + height + boundsOffset.z); } } @@ -1300,11 +1373,17 @@ const int8_t defaultEighthToDiagThickness[4][4] = { const uint8_t mapLeftEighthTurnToOrthogonal[] = { 4, 2, 3, 1, 0 }; static constexpr const int8_t eighth_to_diag_sprite_map[] = { 0, 1, 2, -1, 3 }; -void track_paint_util_eighth_to_diag_tiles_paint(paint_session * session, const int8_t thickness[4][4], int16_t height, - int32_t direction, uint8_t trackSequence, uint32_t colourFlags, - const uint32_t sprites[4][4], const LocationXY16 offsets[4][4], - const LocationXY16 boundsLengths[4][4], - const LocationXYZ16 boundsOffsets[4][4]) +void track_paint_util_eighth_to_diag_tiles_paint( + paint_session* session, + const int8_t thickness[4][4], + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][4], + const LocationXY16 offsets[4][4], + const LocationXY16 boundsLengths[4][4], + const LocationXYZ16 boundsOffsets[4][4]) { int32_t index = eighth_to_diag_sprite_map[trackSequence]; if (index < 0) @@ -1312,15 +1391,24 @@ void track_paint_util_eighth_to_diag_tiles_paint(paint_session * session, const return; } - uint32_t imageId = sprites[direction][index] | colourFlags; - LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index]); - LocationXY16 boundsLength = boundsLengths[direction][index]; - LocationXYZ16 boundsOffset = - (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } : boundsOffsets[direction][index]); + uint32_t imageId = sprites[direction][index] | colourFlags; + LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index]); + LocationXY16 boundsLength = boundsLengths[direction][index]; + LocationXYZ16 boundsOffset + = (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } : boundsOffsets[direction][index]); sub_98197C( - session, imageId, (int8_t)offset.x, (int8_t)offset.y, boundsLength.x, boundsLength.y, thickness[direction][index], height, - boundsOffset.x, boundsOffset.y, height + boundsOffset.z); + session, + imageId, + (int8_t)offset.x, + (int8_t)offset.y, + boundsLength.x, + boundsLength.y, + thickness[direction][index], + height, + boundsOffset.x, + boundsOffset.y, + height + boundsOffset.z); } const LocationXY16 defaultDiagTileOffsets[4] = { @@ -1344,10 +1432,17 @@ static constexpr const int8_t diag_sprite_map[4][4] = { { 0, -1, -1, -1 }, }; -void track_paint_util_diag_tiles_paint(paint_session * session, int8_t thickness, int16_t height, int32_t direction, - uint8_t trackSequence, uint32_t colourFlags, const uint32_t sprites[4], - const LocationXY16 offsets[4], const LocationXY16 boundsLengths[4], - const LocationXYZ16 boundsOffsets[4]) +void track_paint_util_diag_tiles_paint( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4], + const LocationXY16 offsets[4], + const LocationXY16 boundsLengths[4], + const LocationXYZ16 boundsOffsets[4]) { int32_t index = diag_sprite_map[direction][trackSequence]; if (index < 0) @@ -1355,15 +1450,23 @@ void track_paint_util_diag_tiles_paint(paint_session * session, int8_t thickness return; } - uint32_t imageId = sprites[direction] | colourFlags; - LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction]); - LocationXY16 boundsLength = boundsLengths[direction]; - LocationXYZ16 boundsOffset = - (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } : boundsOffsets[direction]); + uint32_t imageId = sprites[direction] | colourFlags; + LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction]); + LocationXY16 boundsLength = boundsLengths[direction]; + LocationXYZ16 boundsOffset = (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } : boundsOffsets[direction]); sub_98197C( - session, imageId, (int8_t)offset.x, (int8_t)offset.y, boundsLength.x, boundsLength.y, thickness, height, boundsOffset.x, - boundsOffset.y, height + boundsOffset.z); + session, + imageId, + (int8_t)offset.x, + (int8_t)offset.y, + boundsLength.x, + boundsLength.y, + thickness, + height, + boundsOffset.x, + boundsOffset.y, + height + boundsOffset.z); } const uint8_t mapLeftQuarterTurn5TilesToRightQuarterTurn5Tiles[] = { 6, 4, 5, 3, 1, 2, 0 }; @@ -1462,11 +1565,17 @@ const LocationXY16 defaultRightQuarterTurn5TilesBoundLengths[4][5] = { }; static constexpr const int8_t right_quarter_turn_5_tiles_sprite_map[] = { 0, -1, 1, 2, -1, 3, 4 }; -void track_paint_util_right_quarter_turn_5_tiles_paint(paint_session * session, int8_t thickness, int16_t height, - int32_t direction, uint8_t trackSequence, uint32_t colourFlags, - const uint32_t sprites[4][5], const LocationXY16 offsets[4][5], - const LocationXY16 boundsLengths[4][5], - const LocationXYZ16 boundsOffsets[4][5]) +void track_paint_util_right_quarter_turn_5_tiles_paint( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][5], + const LocationXY16 offsets[4][5], + const LocationXY16 boundsLengths[4][5], + const LocationXYZ16 boundsOffsets[4][5]) { int32_t index = right_quarter_turn_5_tiles_sprite_map[trackSequence]; if (index < 0) @@ -1474,19 +1583,33 @@ void track_paint_util_right_quarter_turn_5_tiles_paint(paint_sessi return; } - uint32_t imageId = sprites[direction][index] | colourFlags; - LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index]); - LocationXY16 boundsLength = boundsLengths[direction][index]; - LocationXYZ16 boundsOffset = - (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } : boundsOffsets[direction][index]); + uint32_t imageId = sprites[direction][index] | colourFlags; + LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index]); + LocationXY16 boundsLength = boundsLengths[direction][index]; + LocationXYZ16 boundsOffset + = (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } : boundsOffsets[direction][index]); sub_98197C( - session, imageId, (int8_t)offset.x, (int8_t)offset.y, boundsLength.x, boundsLength.y, thickness, height, boundsOffset.x, - boundsOffset.y, height + boundsOffset.z); + session, + imageId, + (int8_t)offset.x, + (int8_t)offset.y, + boundsLength.x, + boundsLength.y, + thickness, + height, + boundsOffset.x, + boundsOffset.y, + height + boundsOffset.z); } -void track_paint_util_right_quarter_turn_5_tiles_paint_2(paint_session * session, int16_t height, int32_t direction, - uint8_t trackSequence, uint32_t colourFlags, const sprite_bb sprites[][5]) +void track_paint_util_right_quarter_turn_5_tiles_paint_2( + paint_session* session, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const sprite_bb sprites[][5]) { int8_t sprite = right_quarter_turn_5_tiles_sprite_map[trackSequence]; if (sprite < 0) @@ -1494,16 +1617,29 @@ void track_paint_util_right_quarter_turn_5_tiles_paint_2(paint_session * session return; } - const sprite_bb * spriteBB = &sprites[direction][sprite]; - uint32_t imageId = spriteBB->sprite_id | colourFlags; + const sprite_bb* spriteBB = &sprites[direction][sprite]; + uint32_t imageId = spriteBB->sprite_id | colourFlags; sub_98197C( - session, imageId, (int8_t)spriteBB->offset.x, (int8_t)spriteBB->offset.y, spriteBB->bb_size.x, spriteBB->bb_size.y, - (int8_t)spriteBB->bb_size.z, height + spriteBB->offset.z, spriteBB->bb_offset.x, spriteBB->bb_offset.y, + session, + imageId, + (int8_t)spriteBB->offset.x, + (int8_t)spriteBB->offset.y, + spriteBB->bb_size.x, + spriteBB->bb_size.y, + (int8_t)spriteBB->bb_size.z, + height + spriteBB->offset.z, + spriteBB->bb_offset.x, + spriteBB->bb_offset.y, height + spriteBB->bb_offset.z); } -void track_paint_util_right_quarter_turn_5_tiles_paint_3(paint_session * session, int16_t height, int32_t direction, - uint8_t trackSequence, uint32_t colourFlags, const sprite_bb sprites[][5]) +void track_paint_util_right_quarter_turn_5_tiles_paint_3( + paint_session* session, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const sprite_bb sprites[][5]) { int8_t sprite = right_quarter_turn_5_tiles_sprite_map[trackSequence]; if (sprite < 0) @@ -1511,15 +1647,21 @@ void track_paint_util_right_quarter_turn_5_tiles_paint_3(paint_session * session return; } - const sprite_bb * spriteBB = &sprites[direction][sprite]; - uint32_t imageId = spriteBB->sprite_id | colourFlags; + const sprite_bb* spriteBB = &sprites[direction][sprite]; + uint32_t imageId = spriteBB->sprite_id | colourFlags; sub_98196C( - session, imageId, (int8_t)spriteBB->offset.x, (int8_t)spriteBB->offset.y, spriteBB->bb_size.x, spriteBB->bb_size.y, - (int8_t)spriteBB->bb_size.z, height + spriteBB->offset.z); + session, + imageId, + (int8_t)spriteBB->offset.x, + (int8_t)spriteBB->offset.y, + spriteBB->bb_size.x, + spriteBB->bb_size.y, + (int8_t)spriteBB->bb_size.z, + height + spriteBB->offset.z); } -void track_paint_util_right_quarter_turn_5_tiles_tunnel(paint_session * session, int16_t height, uint8_t direction, - uint8_t trackSequence, uint8_t tunnelType) +void track_paint_util_right_quarter_turn_5_tiles_tunnel( + paint_session* session, int16_t height, uint8_t direction, uint8_t trackSequence, uint8_t tunnelType) { if (direction == 0 && trackSequence == 0) { @@ -1539,8 +1681,8 @@ void track_paint_util_right_quarter_turn_5_tiles_tunnel(paint_session * session, } } -void track_paint_util_right_quarter_turn_5_tiles_wooden_supports(paint_session * session, int16_t height, uint8_t direction, - uint8_t trackSequence) +void track_paint_util_right_quarter_turn_5_tiles_wooden_supports( + paint_session* session, int16_t height, uint8_t direction, uint8_t trackSequence) { if (trackSequence != 1 && trackSequence != 4) { @@ -1627,11 +1769,17 @@ const LocationXY16 defaultRightQuarterTurn3TilesBoundLengths[4][3] = { }; static constexpr const int8_t right_quarter_turn_3_tiles_sprite_map[] = { 0, -1, 1, 2 }; -void track_paint_util_right_quarter_turn_3_tiles_paint(paint_session * session, int8_t thickness, int16_t height, - int32_t direction, uint8_t trackSequence, uint32_t colourFlags, - const uint32_t sprites[4][3], const LocationXY16 offsets[4][3], - const LocationXY16 boundsLengths[4][3], - const LocationXYZ16 boundsOffsets[4][3]) +void track_paint_util_right_quarter_turn_3_tiles_paint( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][3], + const LocationXY16 offsets[4][3], + const LocationXY16 boundsLengths[4][3], + const LocationXYZ16 boundsOffsets[4][3]) { int32_t index = right_quarter_turn_3_tiles_sprite_map[trackSequence]; if (index < 0) @@ -1639,30 +1787,48 @@ void track_paint_util_right_quarter_turn_3_tiles_paint(paint_sessi return; } - uint32_t imageId = sprites[direction][index] | colourFlags; - LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index]); - LocationXY16 boundsLength = boundsLengths[direction][index]; - LocationXYZ16 boundsOffset = - (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } : boundsOffsets[direction][index]); + uint32_t imageId = sprites[direction][index] | colourFlags; + LocationXY16 offset = (offsets == nullptr ? LocationXY16{ 0, 0 } : offsets[direction][index]); + LocationXY16 boundsLength = boundsLengths[direction][index]; + LocationXYZ16 boundsOffset + = (boundsOffsets == nullptr ? LocationXYZ16{ offset.x, offset.y, 0 } : boundsOffsets[direction][index]); sub_98197C( - session, imageId, (int8_t)offset.x, (int8_t)offset.y, boundsLength.x, boundsLength.y, thickness, height, boundsOffset.x, - boundsOffset.y, height + boundsOffset.z); + session, + imageId, + (int8_t)offset.x, + (int8_t)offset.y, + boundsLength.x, + boundsLength.y, + thickness, + height, + boundsOffset.x, + boundsOffset.y, + height + boundsOffset.z); } -void track_paint_util_right_quarter_turn_3_tiles_paint_2(paint_session * session, int8_t thickness, int16_t height, - int32_t direction, uint8_t trackSequence, uint32_t colourFlags, - const uint32_t sprites[4][3]) +void track_paint_util_right_quarter_turn_3_tiles_paint_2( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][3]) { - track_paint_util_right_quarter_turn_3_tiles_paint_2_with_height_offset(session, thickness, height, direction, trackSequence, - colourFlags, sprites, 0); + track_paint_util_right_quarter_turn_3_tiles_paint_2_with_height_offset( + session, thickness, height, direction, trackSequence, colourFlags, sprites, 0); } -void track_paint_util_right_quarter_turn_3_tiles_paint_2_with_height_offset(paint_session * session, int8_t thickness, - int16_t height, int32_t direction, - uint8_t trackSequence, uint32_t colourFlags, - const uint32_t sprites[4][3], - int32_t heightOffset) +void track_paint_util_right_quarter_turn_3_tiles_paint_2_with_height_offset( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][3], + int32_t heightOffset) { int8_t sprite = right_quarter_turn_3_tiles_sprite_map[trackSequence]; if (sprite < 0) @@ -1674,86 +1840,102 @@ void track_paint_util_right_quarter_turn_3_tiles_paint_2_with_height_offset(pain switch (direction) { - case 0: - switch (trackSequence) - { case 0: - sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); + switch (trackSequence) + { + case 0: + sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); + break; + case 2: + sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 16, 16, height + heightOffset); + break; + case 3: + sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); + break; + } break; - case 2: - sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 16, 16, height + heightOffset); - break; - case 3: - sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); - break; - } - break; - case 1: - switch (trackSequence) - { - case 0: - sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); + case 1: + switch (trackSequence) + { + case 0: + sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); + break; + case 2: + sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 16, 0, height + heightOffset); + break; + case 3: + sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); + break; + } break; - case 2: - sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 16, 0, height + heightOffset); - break; - case 3: - sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); - break; - } - break; - case 2: - switch (trackSequence) - { - case 0: - sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); - break; case 2: - sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 0, 0, height + heightOffset); + switch (trackSequence) + { + case 0: + sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); + break; + case 2: + sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 0, 0, height + heightOffset); + break; + case 3: + sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); + break; + } break; - case 3: - sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); - break; - } - break; - case 3: - switch (trackSequence) - { - case 0: - sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); - break; - case 2: - sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 0, 16, height + heightOffset); - break; case 3: - sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); + switch (trackSequence) + { + case 0: + sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); + break; + case 2: + sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 0, 16, height + heightOffset); + break; + case 3: + sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); + break; + } break; - } - break; } } -void track_paint_util_right_quarter_turn_3_tiles_paint_3(paint_session * session, int16_t height, int32_t direction, - uint8_t trackSequence, uint32_t colourFlags, - const sprite_bb sprites[4][3]) +void track_paint_util_right_quarter_turn_3_tiles_paint_3( + paint_session* session, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const sprite_bb sprites[4][3]) { int8_t sprite = right_quarter_turn_3_tiles_sprite_map[trackSequence]; if (sprite < 0) { return; } - const sprite_bb * spriteBB = &sprites[direction][sprite]; + const sprite_bb* spriteBB = &sprites[direction][sprite]; sub_98197C( - session, spriteBB->sprite_id | colourFlags, (int8_t)spriteBB->offset.x, (int8_t)spriteBB->offset.y, spriteBB->bb_size.x, - spriteBB->bb_size.y, (int8_t)spriteBB->bb_size.z, spriteBB->offset.z + height, spriteBB->bb_offset.x, - spriteBB->bb_offset.y, height + spriteBB->bb_offset.z); + session, + spriteBB->sprite_id | colourFlags, + (int8_t)spriteBB->offset.x, + (int8_t)spriteBB->offset.y, + spriteBB->bb_size.x, + spriteBB->bb_size.y, + (int8_t)spriteBB->bb_size.z, + spriteBB->offset.z + height, + spriteBB->bb_offset.x, + spriteBB->bb_offset.y, + height + spriteBB->bb_offset.z); } -void track_paint_util_right_quarter_turn_3_tiles_paint_4(paint_session * session, int16_t height, int32_t direction, - uint8_t trackSequence, uint32_t colourFlags, +void track_paint_util_right_quarter_turn_3_tiles_paint_4( + paint_session* session, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, const sprite_bb sprites[4][3]) { int8_t sprite = right_quarter_turn_3_tiles_sprite_map[trackSequence]; @@ -1762,15 +1944,21 @@ void track_paint_util_right_quarter_turn_3_tiles_paint_4(paint_session * session return; } - const sprite_bb * spriteBB = &sprites[direction][sprite]; - uint32_t imageId = spriteBB->sprite_id | colourFlags; + const sprite_bb* spriteBB = &sprites[direction][sprite]; + uint32_t imageId = spriteBB->sprite_id | colourFlags; sub_98196C( - session, imageId, (int8_t)spriteBB->offset.x, (int8_t)spriteBB->offset.y, spriteBB->bb_size.x, spriteBB->bb_size.y, - (int8_t)spriteBB->bb_size.z, height + spriteBB->offset.z); + session, + imageId, + (int8_t)spriteBB->offset.x, + (int8_t)spriteBB->offset.y, + spriteBB->bb_size.x, + spriteBB->bb_size.y, + (int8_t)spriteBB->bb_size.z, + height + spriteBB->offset.z); } -void track_paint_util_right_quarter_turn_3_tiles_tunnel(paint_session * session, int16_t height, uint8_t direction, - uint8_t trackSequence, uint8_t tunnelType) +void track_paint_util_right_quarter_turn_3_tiles_tunnel( + paint_session* session, int16_t height, uint8_t direction, uint8_t trackSequence, uint8_t tunnelType) { if (direction == 0 && trackSequence == 0) { @@ -1793,8 +1981,8 @@ void track_paint_util_right_quarter_turn_3_tiles_tunnel(paint_session * session, } } -void track_paint_util_right_quarter_turn_3_tiles_25_deg_up_tunnel(paint_session * session, int16_t height, uint8_t direction, - uint8_t trackSequence, uint8_t tunnelType0, uint8_t tunnelType3) +void track_paint_util_right_quarter_turn_3_tiles_25_deg_up_tunnel( + paint_session* session, int16_t height, uint8_t direction, uint8_t trackSequence, uint8_t tunnelType0, uint8_t tunnelType3) { if (direction == 0 && trackSequence == 0) { @@ -1814,8 +2002,8 @@ void track_paint_util_right_quarter_turn_3_tiles_25_deg_up_tunnel(paint_session } } -void track_paint_util_right_quarter_turn_3_tiles_25_deg_down_tunnel(paint_session * session, int16_t height, uint8_t direction, - uint8_t trackSequence, uint8_t tunnelType0, uint8_t tunnelType3) +void track_paint_util_right_quarter_turn_3_tiles_25_deg_down_tunnel( + paint_session* session, int16_t height, uint8_t direction, uint8_t trackSequence, uint8_t tunnelType0, uint8_t tunnelType3) { if (direction == 0 && trackSequence == 0) { @@ -1836,17 +2024,28 @@ void track_paint_util_right_quarter_turn_3_tiles_25_deg_down_tunnel(paint_sessio } static constexpr const int8_t left_quarter_turn_3_tiles_sprite_map[] = { 2, -1, 1, 0 }; -void track_paint_util_left_quarter_turn_3_tiles_paint(paint_session * session, int8_t thickness, int16_t height, int32_t direction, - uint8_t trackSequence, uint32_t colourFlags, const uint32_t sprites[4][3]) +void track_paint_util_left_quarter_turn_3_tiles_paint( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][3]) { - track_paint_util_left_quarter_turn_3_tiles_paint_with_height_offset(session, thickness, height, direction, trackSequence, - colourFlags, sprites, 0); + track_paint_util_left_quarter_turn_3_tiles_paint_with_height_offset( + session, thickness, height, direction, trackSequence, colourFlags, sprites, 0); } -void track_paint_util_left_quarter_turn_3_tiles_paint_with_height_offset(paint_session * session, int8_t thickness, - int16_t height, int32_t direction, uint8_t trackSequence, - uint32_t colourFlags, const uint32_t sprites[4][3], - int32_t heightOffset) +void track_paint_util_left_quarter_turn_3_tiles_paint_with_height_offset( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][3], + int32_t heightOffset) { int8_t sprite = left_quarter_turn_3_tiles_sprite_map[trackSequence]; if (sprite < 0) @@ -1858,70 +2057,70 @@ void track_paint_util_left_quarter_turn_3_tiles_paint_with_height_offset(paint_s switch (direction) { - case 0: - switch (trackSequence) - { case 0: - sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); + switch (trackSequence) + { + case 0: + sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); + break; + case 2: + sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 16, 0, height + heightOffset); + break; + case 3: + sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); + break; + } break; - case 2: - sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 16, 0, height + heightOffset); - break; - case 3: - sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); - break; - } - break; - case 1: - switch (trackSequence) - { - case 0: - sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); + case 1: + switch (trackSequence) + { + case 0: + sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); + break; + case 2: + sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 0, 0, height + heightOffset); + break; + case 3: + sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); + break; + } break; - case 2: - sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 0, 0, height + heightOffset); - break; - case 3: - sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); - break; - } - break; - case 2: - switch (trackSequence) - { - case 0: - sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); - break; case 2: - sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 0, 16, height + heightOffset); + switch (trackSequence) + { + case 0: + sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); + break; + case 2: + sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 0, 16, height + heightOffset); + break; + case 3: + sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); + break; + } break; - case 3: - sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); - break; - } - break; - case 3: - switch (trackSequence) - { - case 0: - sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); - break; - case 2: - sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 16, 16, height + heightOffset); - break; case 3: - sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); + switch (trackSequence) + { + case 0: + sub_98197C(session, imageId, 0, 0, 20, 32, thickness, height, 6, 0, height + heightOffset); + break; + case 2: + sub_98197C(session, imageId, 0, 0, 16, 16, thickness, height, 16, 16, height + heightOffset); + break; + case 3: + sub_98197C(session, imageId, 0, 0, 32, 20, thickness, height, 0, 6, height + heightOffset); + break; + } break; - } - break; } } -// void track_paint_util_left_quarter_turn_3_tiles_paint_2(int16_t height, int32_t direction, uint8_t rotation, uint8_t trackSequence, -// uint32_t colourFlags, const sprite_bb sprites[][5]) +// void track_paint_util_left_quarter_turn_3_tiles_paint_2(int16_t height, int32_t direction, uint8_t rotation, uint8_t +// trackSequence, uint32_t colourFlags, const sprite_bb sprites[][5]) // { // int8_t sprite = right_quarter_turn_5_tiles_sprite_map[trackSequence]; // if (sprite < 0) { @@ -1938,8 +2137,8 @@ void track_paint_util_left_quarter_turn_3_tiles_paint_with_height_offset(paint_s // rotation); // } -void track_paint_util_left_quarter_turn_3_tiles_tunnel(paint_session * session, int16_t height, uint8_t tunnelType, - uint8_t direction, uint8_t trackSequence) +void track_paint_util_left_quarter_turn_3_tiles_tunnel( + paint_session* session, int16_t height, uint8_t tunnelType, uint8_t direction, uint8_t trackSequence) { if (direction == 0 && trackSequence == 0) { @@ -1962,57 +2161,74 @@ void track_paint_util_left_quarter_turn_3_tiles_tunnel(paint_session * session, } } -void track_paint_util_left_quarter_turn_1_tile_paint(paint_session * session, int8_t thickness, int16_t height, - int16_t boundBoxZOffset, int32_t direction, uint32_t colourFlags, - const uint32_t * sprites) +void track_paint_util_left_quarter_turn_1_tile_paint( + paint_session* session, + int8_t thickness, + int16_t height, + int16_t boundBoxZOffset, + int32_t direction, + uint32_t colourFlags, + const uint32_t* sprites) { uint32_t imageId = sprites[direction] | colourFlags; switch (direction) { - case 0: - sub_98197C(session, imageId, 0, 0, 26, 24, thickness, height, 6, 2, height + boundBoxZOffset); - break; - case 1: - sub_98197C(session, imageId, 0, 0, 26, 26, thickness, height, 0, 0, height + boundBoxZOffset); - break; - case 2: - sub_98197C(session, imageId, 0, 0, 24, 26, thickness, height, 2, 6, height + boundBoxZOffset); - break; - case 3: - sub_98197C(session, imageId, 0, 0, 24, 24, thickness, height, 6, 6, height + boundBoxZOffset); - break; + case 0: + sub_98197C(session, imageId, 0, 0, 26, 24, thickness, height, 6, 2, height + boundBoxZOffset); + break; + case 1: + sub_98197C(session, imageId, 0, 0, 26, 26, thickness, height, 0, 0, height + boundBoxZOffset); + break; + case 2: + sub_98197C(session, imageId, 0, 0, 24, 26, thickness, height, 2, 6, height + boundBoxZOffset); + break; + case 3: + sub_98197C(session, imageId, 0, 0, 24, 24, thickness, height, 6, 6, height + boundBoxZOffset); + break; } } -void track_paint_util_right_quarter_turn_1_tile_tunnel(paint_session * session, uint8_t direction, uint16_t baseHeight, - int8_t startOffset, uint8_t startTunnel, int8_t endOffset, uint8_t endTunnel) +void track_paint_util_right_quarter_turn_1_tile_tunnel( + paint_session* session, + uint8_t direction, + uint16_t baseHeight, + int8_t startOffset, + uint8_t startTunnel, + int8_t endOffset, + uint8_t endTunnel) { - track_paint_util_left_quarter_turn_1_tile_tunnel(session, (direction + 3) % 4, baseHeight, endOffset, endTunnel, - startOffset, startTunnel); + track_paint_util_left_quarter_turn_1_tile_tunnel( + session, (direction + 3) % 4, baseHeight, endOffset, endTunnel, startOffset, startTunnel); } -void track_paint_util_left_quarter_turn_1_tile_tunnel(paint_session * session, uint8_t direction, uint16_t baseHeight, - int8_t startOffset, uint8_t startTunnel, int8_t endOffset, uint8_t endTunnel) +void track_paint_util_left_quarter_turn_1_tile_tunnel( + paint_session* session, + uint8_t direction, + uint16_t baseHeight, + int8_t startOffset, + uint8_t startTunnel, + int8_t endOffset, + uint8_t endTunnel) { switch (direction) { - case 0: - paint_util_push_tunnel_left(session, baseHeight + startOffset, startTunnel); - break; - case 2: - paint_util_push_tunnel_right(session, baseHeight + endOffset, endTunnel); - break; - case 3: - paint_util_push_tunnel_right(session, baseHeight + startOffset, startTunnel); - paint_util_push_tunnel_left(session, baseHeight + endOffset, endTunnel); - break; + case 0: + paint_util_push_tunnel_left(session, baseHeight + startOffset, startTunnel); + break; + case 2: + paint_util_push_tunnel_right(session, baseHeight + endOffset, endTunnel); + break; + case 3: + paint_util_push_tunnel_right(session, baseHeight + startOffset, startTunnel); + paint_util_push_tunnel_left(session, baseHeight + endOffset, endTunnel); + break; } } -void track_paint_util_spinning_tunnel_paint(paint_session * session, int8_t thickness, int16_t height, uint8_t direction) +void track_paint_util_spinning_tunnel_paint(paint_session* session, int8_t thickness, int16_t height, uint8_t direction) { - int32_t frame = gScenarioTicks >> 2 & 3; + int32_t frame = gScenarioTicks >> 2 & 3; uint32_t colourFlags = session->TrackColours[SCHEME_SUPPORTS]; uint32_t colourFlags2 = session->TrackColours[SCHEME_TRACK]; @@ -2043,7 +2259,7 @@ void track_paint_util_spinning_tunnel_paint(paint_session * session, int8_t thic } void track_paint_util_onride_photo_small_paint( - paint_session * session, uint8_t direction, int32_t height, const rct_tile_element * tileElement) + paint_session* session, uint8_t direction, int32_t height, const rct_tile_element* tileElement) { static constexpr const uint32_t imageIds[4][3] = { { SPR_ON_RIDE_PHOTO_SIGN_SMALL_SW_NE, SPR_ON_RIDE_PHOTO_CAMERA_SMALL_S, SPR_ON_RIDE_PHOTO_CAMERA_FLASH_SMALL_S }, @@ -2052,36 +2268,36 @@ void track_paint_util_onride_photo_small_paint( { SPR_ON_RIDE_PHOTO_SIGN_SMALL_SE_NW, SPR_ON_RIDE_PHOTO_CAMERA_SMALL_E, SPR_ON_RIDE_PHOTO_CAMERA_FLASH_SMALL_E }, }; - bool takingPhoto = tile_element_is_taking_photo(tileElement); - uint32_t imageId = imageIds[direction][0] | session->TrackColours[SCHEME_MISC]; + bool takingPhoto = tile_element_is_taking_photo(tileElement); + uint32_t imageId = imageIds[direction][0] | session->TrackColours[SCHEME_MISC]; uint32_t flashImageId = imageIds[direction][takingPhoto ? 2 : 1] | session->TrackColours[SCHEME_MISC]; switch (direction) { - case 0: - sub_98196C(session, imageId, 26, 0, 1, 1, 19, height); - sub_98196C(session, imageId, 26, 31, 1, 1, 19, height); - sub_98196C(session, flashImageId, 6, 0, 1, 1, 19, height); - break; - case 1: - sub_98196C(session, imageId, 0, 6, 1, 1, 19, height); - sub_98196C(session, imageId, 31, 6, 1, 1, 19, height); - sub_98196C(session, flashImageId, 0, 26, 1, 1, 19, height); - break; - case 2: - sub_98196C(session, imageId, 6, 0, 1, 1, 19, height); - sub_98196C(session, imageId, 6, 31, 1, 1, 19, height); - sub_98196C(session, flashImageId, 26, 31, 1, 1, 19, height); - break; - case 3: - sub_98196C(session, imageId, 0, 26, 1, 1, 19, height); - sub_98196C(session, imageId, 31, 26, 1, 1, 19, height); - sub_98196C(session, flashImageId, 31, 6, 1, 1, 19, height); - break; + case 0: + sub_98196C(session, imageId, 26, 0, 1, 1, 19, height); + sub_98196C(session, imageId, 26, 31, 1, 1, 19, height); + sub_98196C(session, flashImageId, 6, 0, 1, 1, 19, height); + break; + case 1: + sub_98196C(session, imageId, 0, 6, 1, 1, 19, height); + sub_98196C(session, imageId, 31, 6, 1, 1, 19, height); + sub_98196C(session, flashImageId, 0, 26, 1, 1, 19, height); + break; + case 2: + sub_98196C(session, imageId, 6, 0, 1, 1, 19, height); + sub_98196C(session, imageId, 6, 31, 1, 1, 19, height); + sub_98196C(session, flashImageId, 26, 31, 1, 1, 19, height); + break; + case 3: + sub_98196C(session, imageId, 0, 26, 1, 1, 19, height); + sub_98196C(session, imageId, 31, 26, 1, 1, 19, height); + sub_98196C(session, flashImageId, 31, 6, 1, 1, 19, height); + break; } } void track_paint_util_onride_photo_paint( - paint_session * session, uint8_t direction, int32_t height, const rct_tile_element * tileElement) + paint_session* session, uint8_t direction, int32_t height, const rct_tile_element* tileElement) { static constexpr const uint32_t imageIds[4][3] = { { SPR_ON_RIDE_PHOTO_SIGN_SW_NE, SPR_ON_RIDE_PHOTO_CAMERA_S, SPR_ON_RIDE_PHOTO_CAMERA_FLASH_S }, @@ -2090,31 +2306,31 @@ void track_paint_util_onride_photo_paint( { SPR_ON_RIDE_PHOTO_SIGN_SE_NW, SPR_ON_RIDE_PHOTO_CAMERA_E, SPR_ON_RIDE_PHOTO_CAMERA_FLASH_E }, }; - bool takingPhoto = tile_element_is_taking_photo(tileElement); - uint32_t imageId = imageIds[direction][0] | session->TrackColours[SCHEME_MISC]; + bool takingPhoto = tile_element_is_taking_photo(tileElement); + uint32_t imageId = imageIds[direction][0] | session->TrackColours[SCHEME_MISC]; uint32_t flashImageId = imageIds[direction][takingPhoto ? 2 : 1] | session->TrackColours[SCHEME_MISC]; switch (direction) { - case 0: - sub_98196C(session, imageId, 26, 0, 1, 1, 19, height); - sub_98196C(session, imageId, 26, 31, 1, 1, 19, height); - sub_98196C(session, flashImageId, 6, 0, 1, 1, 19, height); - break; - case 1: - sub_98196C(session, imageId, 0, 6, 1, 1, 19, height); - sub_98196C(session, imageId, 31, 6, 1, 1, 19, height); - sub_98196C(session, flashImageId, 0, 26, 1, 1, 19, height); - break; - case 2: - sub_98196C(session, imageId, 6, 0, 1, 1, 19, height); - sub_98196C(session, imageId, 6, 31, 1, 1, 19, height); - sub_98196C(session, flashImageId, 26, 31, 1, 1, 19, height); - break; - case 3: - sub_98196C(session, imageId, 0, 26, 1, 1, 19, height); - sub_98196C(session, imageId, 31, 26, 1, 1, 19, height); - sub_98196C(session, flashImageId, 31, 6, 1, 1, 19, height); - break; + case 0: + sub_98196C(session, imageId, 26, 0, 1, 1, 19, height); + sub_98196C(session, imageId, 26, 31, 1, 1, 19, height); + sub_98196C(session, flashImageId, 6, 0, 1, 1, 19, height); + break; + case 1: + sub_98196C(session, imageId, 0, 6, 1, 1, 19, height); + sub_98196C(session, imageId, 31, 6, 1, 1, 19, height); + sub_98196C(session, flashImageId, 0, 26, 1, 1, 19, height); + break; + case 2: + sub_98196C(session, imageId, 6, 0, 1, 1, 19, height); + sub_98196C(session, imageId, 6, 31, 1, 1, 19, height); + sub_98196C(session, flashImageId, 26, 31, 1, 1, 19, height); + break; + case 3: + sub_98196C(session, imageId, 0, 26, 1, 1, 19, height); + sub_98196C(session, imageId, 31, 26, 1, 1, 19, height); + sub_98196C(session, flashImageId, 31, 6, 1, 1, 19, height); + break; } } @@ -2131,7 +2347,7 @@ static constexpr const uint16_t RightVerticalLoopSegments[] = { SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, }; -void track_paint_util_right_vertical_loop_segments(paint_session * session, uint8_t direction, uint8_t trackSequence) +void track_paint_util_right_vertical_loop_segments(paint_session* session, uint8_t direction, uint8_t trackSequence) { if (trackSequence > 9) { @@ -2143,21 +2359,25 @@ void track_paint_util_right_vertical_loop_segments(paint_session * session, uint session, paint_util_rotate_segments(RightVerticalLoopSegments[trackSequence], direction), 0xFFFF, 0); } -void track_paint_util_left_corkscrew_up_supports(paint_session * session, uint8_t direction, uint16_t height) +void track_paint_util_left_corkscrew_up_supports(paint_session* session, uint8_t direction, uint16_t height) { // TODO: Figure out which of these looks best, and use one to keep a consistent world if (direction == 2) { paint_util_set_segment_support_height( - session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), - 0xFFFF, 0); + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, + 0); } metal_a_supports_paint_setup(session, METAL_SUPPORTS_TUBES, 4, 0, height, session->TrackColours[SCHEME_SUPPORTS]); if (direction != 2) { paint_util_set_segment_support_height( - session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), - 0xFFFF, 0); + session, + paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), + 0xFFFF, + 0); } } @@ -2165,10 +2385,10 @@ void track_paint_util_left_corkscrew_up_supports(paint_session * session, uint8_ * * rct2: 0x006C4794 */ -void track_paint(paint_session * session, uint8_t direction, int32_t height, const rct_tile_element * tileElement) +void track_paint(paint_session* session, uint8_t direction, int32_t height, const rct_tile_element* tileElement) { int32_t rideIndex = track_element_get_ride_index(tileElement); - Ride * ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); if (ride->type == RIDE_TYPE_NULL) { log_error("Attempted to paint invalid ride: %d", rideIndex); @@ -2179,17 +2399,17 @@ void track_paint(paint_session * session, uint8_t direction, int32_t height, con bool isEntranceStyleNone = false; if (ride->entrance_style == RIDE_ENTRANCE_STYLE_NONE) { - isEntranceStyleNone = true; + isEntranceStyleNone = true; ride->entrance_style = RIDE_ENTRANCE_STYLE_PLAIN; } - rct_drawpixelinfo * dpi = session->DPI; + rct_drawpixelinfo* dpi = session->DPI; - if ((!gTrackDesignSaveMode || rideIndex == gTrackDesignSaveRideIndex) && - !(gCurrentViewportFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES)) + if ((!gTrackDesignSaveMode || rideIndex == gTrackDesignSaveRideIndex) + && !(gCurrentViewportFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES)) { - int32_t trackType = track_element_get_type(tileElement); - int32_t trackSequence = tile_element_get_track_sequence(tileElement); + int32_t trackType = track_element_get_type(tileElement); + int32_t trackSequence = tile_element_get_track_sequence(tileElement); int32_t trackColourScheme = track_element_get_colour_scheme(tileElement); if ((gCurrentViewportFlags & VIEWPORT_FLAG_TRACK_HEIGHTS) && dpi->zoom_level == 0) @@ -2197,7 +2417,7 @@ void track_paint(paint_session * session, uint8_t direction, int32_t height, con session->InteractionType = VIEWPORT_INTERACTION_ITEM_NONE; if (TrackHeightMarkerPositions[trackType] & (1 << trackSequence)) { - uint16_t ax = RideData5[ride->type].z_offset; + uint16_t ax = RideData5[ride->type].z_offset; uint32_t ebx = 0x20381689 + (height + 8) / 16; ebx += get_height_marker_offset(); ebx -= gMapBaseZ; @@ -2205,27 +2425,27 @@ void track_paint(paint_session * session, uint8_t direction, int32_t height, con } } - session->InteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; - session->TrackColours[SCHEME_TRACK] = SPRITE_ID_PALETTE_COLOUR_2(ride->track_colour_main[trackColourScheme], - ride->track_colour_additional[trackColourScheme]); + session->InteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; + session->TrackColours[SCHEME_TRACK] = SPRITE_ID_PALETTE_COLOUR_2( + ride->track_colour_main[trackColourScheme], ride->track_colour_additional[trackColourScheme]); session->TrackColours[SCHEME_SUPPORTS] = SPRITE_ID_PALETTE_COLOUR_1(ride->track_colour_supports[trackColourScheme]); - session->TrackColours[SCHEME_MISC] = IMAGE_TYPE_REMAP; - session->TrackColours[SCHEME_3] = 0x20C00000; + session->TrackColours[SCHEME_MISC] = IMAGE_TYPE_REMAP; + session->TrackColours[SCHEME_3] = 0x20C00000; if (tileElement->type & TILE_ELEMENT_TYPE_FLAG_HIGHLIGHT) { - session->TrackColours[SCHEME_TRACK] = 0x21600000; + session->TrackColours[SCHEME_TRACK] = 0x21600000; session->TrackColours[SCHEME_SUPPORTS] = 0x21600000; - session->TrackColours[SCHEME_MISC] = 0x21600000; - session->TrackColours[SCHEME_3] = 0x21600000; + session->TrackColours[SCHEME_MISC] = 0x21600000; + session->TrackColours[SCHEME_3] = 0x21600000; } if (tileElement->flags & TILE_ELEMENT_FLAG_GHOST) { - uint32_t ghost_id = CONSTRUCTION_MARKER; - session->InteractionType = VIEWPORT_INTERACTION_ITEM_NONE; - session->TrackColours[SCHEME_TRACK] = ghost_id; + uint32_t ghost_id = CONSTRUCTION_MARKER; + session->InteractionType = VIEWPORT_INTERACTION_ITEM_NONE; + session->TrackColours[SCHEME_TRACK] = ghost_id; session->TrackColours[SCHEME_SUPPORTS] = ghost_id; - session->TrackColours[SCHEME_MISC] = ghost_id; - session->TrackColours[SCHEME_3] = ghost_id; + session->TrackColours[SCHEME_MISC] = ghost_id; + session->TrackColours[SCHEME_3] = ghost_id; } TRACK_PAINT_FUNCTION_GETTER paintFunctionGetter = RideTypeTrackPaintFunctions[ride->type]; diff --git a/src/openrct2/ride/TrackPaint.h b/src/openrct2/ride/TrackPaint.h index dff25e2e87..21a93e3c2f 100644 --- a/src/openrct2/ride/TrackPaint.h +++ b/src/openrct2/ride/TrackPaint.h @@ -10,11 +10,11 @@ #ifndef _TRACK_PAINT_H #define _TRACK_PAINT_H -#include "RideData.h" #include "../common.h" -#include "../paint/tile_element/Paint.TileElement.h" #include "../paint/Paint.h" +#include "../paint/tile_element/Paint.TileElement.h" #include "../world/Map.h" +#include "RideData.h" extern const uint8_t track_map_2x2[][4]; extern const uint8_t edges_2x2[]; @@ -27,7 +27,8 @@ extern const uint8_t edges_4x4[]; extern const uint8_t track_map_1x4[][4]; -enum { +enum +{ SPR_FLOOR_PLANKS = 3395, SPR_FLOOR_PLANKS_90_DEG = 3396, SPR_FLOOR_PLANKS_SLOPE_NE_SW = 3397, @@ -203,20 +204,23 @@ enum { SPR_GHOST_TRAIN_SPINNING_TUNNEL_FRONT_NW_SE_FRAME_3 = 28880, }; -enum { +enum +{ SCHEME_TRACK = 0, SCHEME_SUPPORTS = 1, SCHEME_MISC = 2, SCHEME_3 = 3, }; -enum { +enum +{ STATION_VARIANT_BASIC, STATION_VARIANT_1, STATION_VARIANT_TALL, }; -enum { +enum +{ MAZE_ENTRY_FLAG_0 = (1 << 0), MAZE_ENTRY_FLAG_1 = (1 << 1), MAZE_ENTRY_FLAG_2 = (1 << 2), @@ -273,104 +277,259 @@ extern const uint8_t mapLeftEighthTurnToOrthogonal[5]; extern const size_t mini_golf_peep_animation_lengths[]; bool track_paint_util_has_fence( - enum edge_t edge, LocationXY16 position, const rct_tile_element * tileElement, Ride * ride, uint8_t rotation); -void track_paint_util_paint_floor(paint_session * session, uint8_t edges, uint32_t colourFlags, uint16_t height, const uint32_t floorSprites[4]); + enum edge_t edge, LocationXY16 position, const rct_tile_element* tileElement, Ride* ride, uint8_t rotation); +void track_paint_util_paint_floor( + paint_session* session, uint8_t edges, uint32_t colourFlags, uint16_t height, const uint32_t floorSprites[4]); void track_paint_util_paint_fences( - paint_session * session, - uint8_t edges, - LocationXY16 position, - const rct_tile_element * tileElement, - Ride * ride, - uint32_t colourFlags, - uint16_t height, - const uint32_t fenceSprites[4], - uint8_t rotation); -bool track_paint_util_draw_station_covers(paint_session * session, enum edge_t edge, bool hasFence, const rct_ride_entrance_definition * entranceStyle, uint16_t height); -bool track_paint_util_draw_station_covers_2(paint_session * session, enum edge_t edge, bool hasFence, const rct_ride_entrance_definition * entranceStyle, uint16_t height, uint8_t stationVariant); + paint_session* session, + uint8_t edges, + LocationXY16 position, + const rct_tile_element* tileElement, + Ride* ride, + uint32_t colourFlags, + uint16_t height, + const uint32_t fenceSprites[4], + uint8_t rotation); +bool track_paint_util_draw_station_covers( + paint_session* session, + enum edge_t edge, + bool hasFence, + const rct_ride_entrance_definition* entranceStyle, + uint16_t height); +bool track_paint_util_draw_station_covers_2( + paint_session* session, + enum edge_t edge, + bool hasFence, + const rct_ride_entrance_definition* entranceStyle, + uint16_t height, + uint8_t stationVariant); void track_paint_util_draw_station_platform( - paint_session * session, Ride * ride, uint8_t direction, int32_t height, int32_t zOffset, const rct_tile_element * tileElement); + paint_session* session, + Ride* ride, + uint8_t direction, + int32_t height, + int32_t zOffset, + const rct_tile_element* tileElement); void track_paint_util_draw_station( - paint_session * session, - uint8_t rideIndex, - uint8_t direction, - uint16_t height, - const rct_tile_element * tileElement); + paint_session* session, uint8_t rideIndex, uint8_t direction, uint16_t height, const rct_tile_element* tileElement); void track_paint_util_draw_station_2( - paint_session * session, - uint8_t rideIndex, - uint8_t direction, - uint16_t height, - const rct_tile_element * tileElement, - int32_t fenceOffsetA, - int32_t fenceOffsetB); + paint_session* session, + uint8_t rideIndex, + uint8_t direction, + uint16_t height, + const rct_tile_element* tileElement, + int32_t fenceOffsetA, + int32_t fenceOffsetB); void track_paint_util_draw_station_3( - paint_session * session, - uint8_t rideIndex, - uint8_t direction, - uint16_t height, - uint16_t coverHeight, - const rct_tile_element * tileElement); + paint_session* session, + uint8_t rideIndex, + uint8_t direction, + uint16_t height, + uint16_t coverHeight, + const rct_tile_element* tileElement); void track_paint_util_draw_station_inverted( - paint_session * session, - uint8_t rideIndex, - uint8_t direction, - int32_t height, - const rct_tile_element * tileElement, - uint8_t stationVariant); + paint_session* session, + uint8_t rideIndex, + uint8_t direction, + int32_t height, + const rct_tile_element* tileElement, + uint8_t stationVariant); bool track_paint_util_should_paint_supports(LocationXY16 position); void track_paint_util_draw_pier( - paint_session * session, - Ride * ride, - const rct_ride_entrance_definition * entranceStyle, - LocationXY16 position, - uint8_t direction, - int32_t height, - const rct_tile_element * tileElement, - uint8_t rotation); -void track_paint_util_draw_station_metal_supports(paint_session * session, uint8_t direction, uint16_t height, uint32_t colour); -void track_paint_util_draw_station_metal_supports_2(paint_session * session, uint8_t direction, uint16_t height, uint32_t colour, uint8_t type); + paint_session* session, + Ride* ride, + const rct_ride_entrance_definition* entranceStyle, + LocationXY16 position, + uint8_t direction, + int32_t height, + const rct_tile_element* tileElement, + uint8_t rotation); +void track_paint_util_draw_station_metal_supports(paint_session* session, uint8_t direction, uint16_t height, uint32_t colour); +void track_paint_util_draw_station_metal_supports_2( + paint_session* session, uint8_t direction, uint16_t height, uint32_t colour, uint8_t type); -void track_paint_util_right_quarter_turn_5_tiles_paint(paint_session * session, int8_t thickness, int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const uint32_t sprites[4][5], const LocationXY16 offsets[4][5], const LocationXY16 boundsLengths[4][5], const LocationXYZ16 boundsOffsets[4][5]); -void track_paint_util_right_quarter_turn_5_tiles_paint_2(paint_session * session, int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const sprite_bb sprites[][5]); -void track_paint_util_right_quarter_turn_5_tiles_paint_3(paint_session * session, int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const sprite_bb sprites[][5]); -void track_paint_util_right_quarter_turn_5_tiles_tunnel(paint_session * session, int16_t height, uint8_t direction, uint8_t trackSequence, uint8_t tunnelType); -void track_paint_util_right_quarter_turn_5_tiles_wooden_supports(paint_session * session, int16_t height, uint8_t direction, uint8_t trackSequence); -void track_paint_util_right_quarter_turn_3_tiles_25_deg_up_tunnel(paint_session * session, int16_t height, uint8_t direction, uint8_t trackSequence, uint8_t tunnelType0, uint8_t tunnelType3); -void track_paint_util_right_quarter_turn_3_tiles_25_deg_down_tunnel(paint_session * session, int16_t height, uint8_t direction, uint8_t trackSequence, uint8_t tunnelType0, uint8_t tunnelType3); -void track_paint_util_right_quarter_turn_3_tiles_paint(paint_session * session, int8_t thickness, int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const uint32_t sprites[4][3], const LocationXY16 offsets[4][3], const LocationXY16 boundsLengths[4][3], const LocationXYZ16 boundsOffsets[4][3]); -void track_paint_util_right_quarter_turn_3_tiles_paint_2(paint_session * session, int8_t thickness, int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const uint32_t sprites[4][3]); -void track_paint_util_right_quarter_turn_3_tiles_paint_2_with_height_offset(paint_session * session, int8_t thickness, int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const uint32_t sprites[4][3], int32_t heightOffset); -void track_paint_util_right_quarter_turn_3_tiles_paint_3(paint_session * session, int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const sprite_bb sprites[4][3]); -void track_paint_util_right_quarter_turn_3_tiles_paint_4(paint_session * session, int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const sprite_bb sprites[4][3]); -void track_paint_util_right_quarter_turn_3_tiles_tunnel(paint_session * session, int16_t height, uint8_t direction, uint8_t trackSequence, uint8_t tunnelType); -void track_paint_util_left_quarter_turn_3_tiles_paint(paint_session * session, int8_t thickness, int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const uint32_t sprites[4][3]); -void track_paint_util_left_quarter_turn_3_tiles_paint_with_height_offset(paint_session * session, int8_t thickness, int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const uint32_t sprites[4][3], int32_t heightOffset); -void track_paint_util_left_quarter_turn_3_tiles_tunnel(paint_session * session, int16_t height, uint8_t tunnelType, uint8_t direction, uint8_t trackSequence); -void track_paint_util_left_quarter_turn_1_tile_paint(paint_session * session, int8_t thickness, int16_t height, int16_t boundBoxZOffset, int32_t direction, uint32_t colourFlags, const uint32_t * sprites); -void track_paint_util_spinning_tunnel_paint(paint_session * session, int8_t thickness, int16_t height, uint8_t direction); +void track_paint_util_right_quarter_turn_5_tiles_paint( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][5], + const LocationXY16 offsets[4][5], + const LocationXY16 boundsLengths[4][5], + const LocationXYZ16 boundsOffsets[4][5]); +void track_paint_util_right_quarter_turn_5_tiles_paint_2( + paint_session* session, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const sprite_bb sprites[][5]); +void track_paint_util_right_quarter_turn_5_tiles_paint_3( + paint_session* session, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const sprite_bb sprites[][5]); +void track_paint_util_right_quarter_turn_5_tiles_tunnel( + paint_session* session, int16_t height, uint8_t direction, uint8_t trackSequence, uint8_t tunnelType); +void track_paint_util_right_quarter_turn_5_tiles_wooden_supports( + paint_session* session, int16_t height, uint8_t direction, uint8_t trackSequence); +void track_paint_util_right_quarter_turn_3_tiles_25_deg_up_tunnel( + paint_session* session, int16_t height, uint8_t direction, uint8_t trackSequence, uint8_t tunnelType0, uint8_t tunnelType3); +void track_paint_util_right_quarter_turn_3_tiles_25_deg_down_tunnel( + paint_session* session, int16_t height, uint8_t direction, uint8_t trackSequence, uint8_t tunnelType0, uint8_t tunnelType3); +void track_paint_util_right_quarter_turn_3_tiles_paint( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][3], + const LocationXY16 offsets[4][3], + const LocationXY16 boundsLengths[4][3], + const LocationXYZ16 boundsOffsets[4][3]); +void track_paint_util_right_quarter_turn_3_tiles_paint_2( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][3]); +void track_paint_util_right_quarter_turn_3_tiles_paint_2_with_height_offset( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][3], + int32_t heightOffset); +void track_paint_util_right_quarter_turn_3_tiles_paint_3( + paint_session* session, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const sprite_bb sprites[4][3]); +void track_paint_util_right_quarter_turn_3_tiles_paint_4( + paint_session* session, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const sprite_bb sprites[4][3]); +void track_paint_util_right_quarter_turn_3_tiles_tunnel( + paint_session* session, int16_t height, uint8_t direction, uint8_t trackSequence, uint8_t tunnelType); +void track_paint_util_left_quarter_turn_3_tiles_paint( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][3]); +void track_paint_util_left_quarter_turn_3_tiles_paint_with_height_offset( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][3], + int32_t heightOffset); +void track_paint_util_left_quarter_turn_3_tiles_tunnel( + paint_session* session, int16_t height, uint8_t tunnelType, uint8_t direction, uint8_t trackSequence); +void track_paint_util_left_quarter_turn_1_tile_paint( + paint_session* session, + int8_t thickness, + int16_t height, + int16_t boundBoxZOffset, + int32_t direction, + uint32_t colourFlags, + const uint32_t* sprites); +void track_paint_util_spinning_tunnel_paint(paint_session* session, int8_t thickness, int16_t height, uint8_t direction); void track_paint_util_onride_photo_small_paint( - paint_session * session, uint8_t direction, int32_t height, const rct_tile_element * tileElement); + paint_session* session, uint8_t direction, int32_t height, const rct_tile_element* tileElement); void track_paint_util_onride_photo_paint( - paint_session * session, uint8_t direction, int32_t height, const rct_tile_element * tileElement); -void track_paint_util_right_helix_up_small_quarter_tiles_paint(paint_session * session, const int8_t thickness[2], int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const uint32_t sprites[4][3][2], const LocationXY16 offsets[4][3][2], const LocationXY16 boundsLengths[4][3][2], const LocationXYZ16 boundsOffsets[4][3][2]); -void track_paint_util_right_helix_up_large_quarter_tiles_paint(paint_session * session, const int8_t thickness[2], int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const uint32_t sprites[4][5][2], const LocationXY16 offsets[4][5][2], const LocationXY16 boundsLengths[4][5][2], const LocationXYZ16 boundsOffsets[4][5][2]); -void track_paint_util_eighth_to_diag_tiles_paint(paint_session * session, const int8_t thickness[4][4], int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const uint32_t sprites[4][4], const LocationXY16 offsets[4][4], const LocationXY16 boundsLengths[4][4], const LocationXYZ16 boundsOffsets[4][4]); -void track_paint_util_diag_tiles_paint(paint_session * session, int8_t thickness, int16_t height, int32_t direction, uint8_t trackSequence, uint32_t colourFlags, const uint32_t sprites[4], const LocationXY16 offsets[4], const LocationXY16 boundsLengths[4], const LocationXYZ16 boundsOffsets[4]); + paint_session* session, uint8_t direction, int32_t height, const rct_tile_element* tileElement); +void track_paint_util_right_helix_up_small_quarter_tiles_paint( + paint_session* session, + const int8_t thickness[2], + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][3][2], + const LocationXY16 offsets[4][3][2], + const LocationXY16 boundsLengths[4][3][2], + const LocationXYZ16 boundsOffsets[4][3][2]); +void track_paint_util_right_helix_up_large_quarter_tiles_paint( + paint_session* session, + const int8_t thickness[2], + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][5][2], + const LocationXY16 offsets[4][5][2], + const LocationXY16 boundsLengths[4][5][2], + const LocationXYZ16 boundsOffsets[4][5][2]); +void track_paint_util_eighth_to_diag_tiles_paint( + paint_session* session, + const int8_t thickness[4][4], + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4][4], + const LocationXY16 offsets[4][4], + const LocationXY16 boundsLengths[4][4], + const LocationXYZ16 boundsOffsets[4][4]); +void track_paint_util_diag_tiles_paint( + paint_session* session, + int8_t thickness, + int16_t height, + int32_t direction, + uint8_t trackSequence, + uint32_t colourFlags, + const uint32_t sprites[4], + const LocationXY16 offsets[4], + const LocationXY16 boundsLengths[4], + const LocationXYZ16 boundsOffsets[4]); -void track_paint_util_left_quarter_turn_1_tile_tunnel(paint_session * session, uint8_t direction, uint16_t baseHeight, int8_t startOffset, uint8_t startTunnel, int8_t endOffset, uint8_t endTunnel); -void track_paint_util_right_quarter_turn_1_tile_tunnel(paint_session * session, uint8_t direction, uint16_t baseHeight, int8_t startOffset, uint8_t startTunnel, int8_t endOffset, uint8_t endTunnel); +void track_paint_util_left_quarter_turn_1_tile_tunnel( + paint_session* session, + uint8_t direction, + uint16_t baseHeight, + int8_t startOffset, + uint8_t startTunnel, + int8_t endOffset, + uint8_t endTunnel); +void track_paint_util_right_quarter_turn_1_tile_tunnel( + paint_session* session, + uint8_t direction, + uint16_t baseHeight, + int8_t startOffset, + uint8_t startTunnel, + int8_t endOffset, + uint8_t endTunnel); -void track_paint_util_right_vertical_loop_segments(paint_session * session, uint8_t direction, uint8_t trackSequence); +void track_paint_util_right_vertical_loop_segments(paint_session* session, uint8_t direction, uint8_t trackSequence); -void track_paint_util_left_corkscrew_up_supports(paint_session * session, uint8_t direction, uint16_t height); +void track_paint_util_left_corkscrew_up_supports(paint_session* session, uint8_t direction, uint16_t height); using TRACK_PAINT_FUNCTION = void (*)( - paint_session * session, - uint8_t rideIndex, - uint8_t trackSequence, - uint8_t direction, - int32_t height, - const rct_tile_element * tileElement); + paint_session* session, + uint8_t rideIndex, + uint8_t trackSequence, + uint8_t direction, + int32_t height, + const rct_tile_element* tileElement); using TRACK_PAINT_FUNCTION_GETTER = TRACK_PAINT_FUNCTION (*)(int32_t trackType, int32_t direction); TRACK_PAINT_FUNCTION get_track_paint_function_stand_up_rc(int32_t trackType, int32_t direction); diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index bd83f7eaad..ebe9204e0b 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -7,8 +7,11 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ +#include "Vehicle.h" + #include "../Context.h" #include "../Editor.h" +#include "../Game.h" #include "../OpenRCT2.h" #include "../audio/AudioMixer.h" #include "../audio/audio.h" @@ -16,7 +19,6 @@ #include "../core/Math.hpp" #include "../core/Memory.hpp" #include "../core/Util.hpp" -#include "../Game.h" #include "../interface/Viewport.h" #include "../localisation/Localisation.h" #include "../management/NewsItem.h" @@ -24,6 +26,7 @@ #include "../rct12/RCT12.h" #include "../scenario/Scenario.h" #include "../util/Util.h" +#include "../windows/Intent.h" #include "../world/MapAnimation.h" #include "../world/Park.h" #include "../world/Scenery.h" @@ -31,7 +34,6 @@ #include "../world/Sprite.h" #include "../world/Surface.h" #include "../world/Wall.h" -#include "Vehicle.h" #include "CableLift.h" #include "Ride.h" #include "RideData.h" @@ -39,71 +41,70 @@ #include "Track.h" #include "TrackData.h" #include "VehicleData.h" -#include "../windows/Intent.h" -static void vehicle_update(rct_vehicle * vehicle); -static void vehicle_update_crossings(const rct_vehicle * vehicle); -static void vehicle_claxon(const rct_vehicle * vehicle); +static void vehicle_update(rct_vehicle* vehicle); +static void vehicle_update_crossings(const rct_vehicle* vehicle); +static void vehicle_claxon(const rct_vehicle* vehicle); -static void vehicle_update_showing_film(rct_vehicle * vehicle); -static void vehicle_update_doing_circus_show(rct_vehicle * vehicle); -static void vehicle_update_moving_to_end_of_station(rct_vehicle * vehicle); -static void vehicle_update_waiting_for_passengers(rct_vehicle * vehicle); -static void vehicle_update_waiting_to_depart(rct_vehicle * vehicle); -static void vehicle_update_departing(rct_vehicle * vehicle); -static void vehicle_finish_departing(rct_vehicle * vehicle); -static void vehicle_update_travelling(rct_vehicle * vehicle); -static void vehicle_update_ferris_wheel_rotating(rct_vehicle * vehicle); -static void vehicle_update_rotating(rct_vehicle * vehicle); -static void vehicle_update_space_rings_operating(rct_vehicle * vehicle); -static void vehicle_update_haunted_house_operating(rct_vehicle * vehicle); -static void vehicle_update_crooked_house_operating(rct_vehicle * vehicle); -static void vehicle_update_dodgems_mode(rct_vehicle * vehicle); -static void vehicle_update_swinging(rct_vehicle * vehicle); -static void vehicle_update_simulator_operating(rct_vehicle * vehicle); -static void vehicle_update_top_spin_operating(rct_vehicle * vehicle); -static void vehicle_update_crash(rct_vehicle * vehicle); -static void vehicle_update_travelling_boat(rct_vehicle * vehicle); -static void vehicle_update_motion_boat_hire(rct_vehicle * vehicle); -static void vehicle_update_boat_location(rct_vehicle * vehicle); -static bool vehicle_boat_is_location_accessible(const TileCoordsXYZ &location); -static void vehicle_update_arriving(rct_vehicle * vehicle); -static void vehicle_update_unloading_passengers(rct_vehicle * vehicle); -static void vehicle_update_waiting_for_cable_lift(rct_vehicle * vehicle); -static void vehicle_update_travelling_cable_lift(rct_vehicle * vehicle); -static void vehicle_update_crash_setup(rct_vehicle * vehicle); -static void vehicle_update_collision_setup(rct_vehicle * vehicle); -static int32_t vehicle_update_motion_dodgems(rct_vehicle * vehicle); -static void vehicle_update_additional_animation(rct_vehicle * vehicle); -static bool vehicle_update_motion_collision_detection(rct_vehicle * vehicle, int16_t x, int16_t y, int16_t z, - uint16_t * otherVehicleIndex); +static void vehicle_update_showing_film(rct_vehicle* vehicle); +static void vehicle_update_doing_circus_show(rct_vehicle* vehicle); +static void vehicle_update_moving_to_end_of_station(rct_vehicle* vehicle); +static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle); +static void vehicle_update_waiting_to_depart(rct_vehicle* vehicle); +static void vehicle_update_departing(rct_vehicle* vehicle); +static void vehicle_finish_departing(rct_vehicle* vehicle); +static void vehicle_update_travelling(rct_vehicle* vehicle); +static void vehicle_update_ferris_wheel_rotating(rct_vehicle* vehicle); +static void vehicle_update_rotating(rct_vehicle* vehicle); +static void vehicle_update_space_rings_operating(rct_vehicle* vehicle); +static void vehicle_update_haunted_house_operating(rct_vehicle* vehicle); +static void vehicle_update_crooked_house_operating(rct_vehicle* vehicle); +static void vehicle_update_dodgems_mode(rct_vehicle* vehicle); +static void vehicle_update_swinging(rct_vehicle* vehicle); +static void vehicle_update_simulator_operating(rct_vehicle* vehicle); +static void vehicle_update_top_spin_operating(rct_vehicle* vehicle); +static void vehicle_update_crash(rct_vehicle* vehicle); +static void vehicle_update_travelling_boat(rct_vehicle* vehicle); +static void vehicle_update_motion_boat_hire(rct_vehicle* vehicle); +static void vehicle_update_boat_location(rct_vehicle* vehicle); +static bool vehicle_boat_is_location_accessible(const TileCoordsXYZ& location); +static void vehicle_update_arriving(rct_vehicle* vehicle); +static void vehicle_update_unloading_passengers(rct_vehicle* vehicle); +static void vehicle_update_waiting_for_cable_lift(rct_vehicle* vehicle); +static void vehicle_update_travelling_cable_lift(rct_vehicle* vehicle); +static void vehicle_update_crash_setup(rct_vehicle* vehicle); +static void vehicle_update_collision_setup(rct_vehicle* vehicle); +static int32_t vehicle_update_motion_dodgems(rct_vehicle* vehicle); +static void vehicle_update_additional_animation(rct_vehicle* vehicle); +static bool vehicle_update_motion_collision_detection( + rct_vehicle* vehicle, int16_t x, int16_t y, int16_t z, uint16_t* otherVehicleIndex); static int32_t vehicle_get_sound_priority_factor(rct_vehicle* vehicle); -static void vehicle_update_sound(rct_vehicle * vehicle); -static int32_t vehicle_update_scream_sound(rct_vehicle * vehicle); +static void vehicle_update_sound(rct_vehicle* vehicle); +static int32_t vehicle_update_scream_sound(rct_vehicle* vehicle); -static void vehicle_kill_all_passengers(rct_vehicle * vehicle); -static bool vehicle_can_depart_synchronised(rct_vehicle * vehicle); +static void vehicle_kill_all_passengers(rct_vehicle* vehicle); +static bool vehicle_can_depart_synchronised(rct_vehicle* vehicle); #define NO_SCREAM 254 #define VEHICLE_INVALID_ID (-1) -#define VEHICLE_MAX_SPIN_SPEED 1536 +#define VEHICLE_MAX_SPIN_SPEED 1536 #define VEHICLE_MAX_SPIN_SPEED_FOR_STOPPING 700 #define VEHICLE_MAX_SPIN_SPEED_WATER_RIDE 512 #define VEHICLE_STOPPING_SPIN_SPEED 600 -rct_vehicle * gCurrentVehicle; +rct_vehicle* gCurrentVehicle; -static uint8_t _vehicleBreakdown; -uint8_t _vehicleStationIndex; -uint32_t _vehicleMotionTrackFlags; -int32_t _vehicleVelocityF64E08; -int32_t _vehicleVelocityF64E0C; -int32_t _vehicleUnkF64E10; -uint8_t _vehicleVAngleEndF64E36; -uint8_t _vehicleBankEndF64E37; -uint8_t _vehicleF64E2C; -rct_vehicle * _vehicleFrontVehicle; +static uint8_t _vehicleBreakdown; +uint8_t _vehicleStationIndex; +uint32_t _vehicleMotionTrackFlags; +int32_t _vehicleVelocityF64E08; +int32_t _vehicleVelocityF64E0C; +int32_t _vehicleUnkF64E10; +uint8_t _vehicleVAngleEndF64E36; +uint8_t _vehicleBankEndF64E37; +uint8_t _vehicleF64E2C; +rct_vehicle* _vehicleFrontVehicle; LocationXYZ16 unk_F64E20; // clang-format off @@ -767,35 +768,35 @@ static bool vehicle_move_info_valid(int32_t cd, int32_t typeAndDirection, int32_ int32_t size = 0; switch (cd) { - case 0: - size = 1024; - break; - case 1: - size = 692; - break; - case 2: - case 3: - case 4: - size = 404; - break; - case 5: - case 6: - case 7: - case 8: - size = 208; - break; - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - size = 824; - break; - case 15: - case 16: - size = 868; - break; + case 0: + size = 1024; + break; + case 1: + size = 692; + break; + case 2: + case 3: + case 4: + size = 404; + break; + case 5: + case 6: + case 7: + case 8: + size = 208; + break; + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + size = 824; + break; + case 15: + case 16: + size = 868; + break; } if (typeAndDirection >= size) { @@ -808,7 +809,7 @@ static bool vehicle_move_info_valid(int32_t cd, int32_t typeAndDirection, int32_ return true; } -const rct_vehicle_info * vehicle_get_move_info(int32_t cd, int32_t typeAndDirection, int32_t offset) +const rct_vehicle_info* vehicle_get_move_info(int32_t cd, int32_t typeAndDirection, int32_t offset) { if (!vehicle_move_info_valid(cd, typeAndDirection, offset)) { @@ -827,9 +828,9 @@ uint16_t vehicle_get_move_info_size(int32_t cd, int32_t typeAndDirection) return gTrackVehicleInfo[cd][typeAndDirection]->size; } -rct_vehicle * try_get_vehicle(uint16_t spriteIndex) +rct_vehicle* try_get_vehicle(uint16_t spriteIndex) { - rct_sprite * sprite = try_get_sprite(spriteIndex); + rct_sprite* sprite = try_get_sprite(spriteIndex); if (sprite == nullptr) return nullptr; if (sprite->unknown.sprite_identifier != SPRITE_IDENTIFIER_VEHICLE) @@ -837,17 +838,16 @@ rct_vehicle * try_get_vehicle(uint16_t spriteIndex) return &sprite->vehicle; } -static void vehicle_invalidate(rct_vehicle * vehicle) +static void vehicle_invalidate(rct_vehicle* vehicle) { - invalidate_sprite_2((rct_sprite *)vehicle); + invalidate_sprite_2((rct_sprite*)vehicle); } -static int32_t get_train_mass(rct_vehicle * first_vehicle) +static int32_t get_train_mass(rct_vehicle* first_vehicle) { int32_t totalMass = 0; - for (rct_vehicle * vehicle = first_vehicle; - vehicle != nullptr;) + for (rct_vehicle* vehicle = first_vehicle; vehicle != nullptr;) { totalMass += vehicle->mass; @@ -864,7 +864,7 @@ static int32_t get_train_mass(rct_vehicle * first_vehicle) * * rct2: 0x006BB9FF */ -static void vehicle_update_sound_params(rct_vehicle * vehicle) +static void vehicle_update_sound_params(rct_vehicle* vehicle) { if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) return; @@ -905,11 +905,11 @@ static void vehicle_update_sound_params(rct_vehicle * vehicle) return; uint16_t sound_priority = vehicle_get_sound_priority_factor(vehicle); - rct_vehicle_sound_params * soundParam; + rct_vehicle_sound_params* soundParam; // Find a sound param of lower priority to use for (soundParam = &gVehicleSoundParamsList[0]; - soundParam < gVehicleSoundParamsListEnd && sound_priority <= soundParam->priority; - soundParam++) + soundParam < gVehicleSoundParamsListEnd && sound_priority <= soundParam->priority; + soundParam++) ; if (soundParam >= &gVehicleSoundParamsList[Util::CountOf(gVehicleSoundParamsList)]) @@ -924,14 +924,11 @@ static void vehicle_update_sound_params(rct_vehicle * vehicle) if (soundParam != gVehicleSoundParamsListEnd) { std::memmove( - soundParam + 1, - soundParam, - ((gVehicleSoundParamsListEnd - soundParam) - 1) * sizeof(rct_vehicle_sound_params)); + soundParam + 1, soundParam, ((gVehicleSoundParamsListEnd - soundParam) - 1) * sizeof(rct_vehicle_sound_params)); } soundParam->priority = sound_priority; - int32_t pan_x = - (vehicle->sprite_left / 2) + (vehicle->sprite_right / 2) - g_music_tracking_viewport->view_x; + int32_t pan_x = (vehicle->sprite_left / 2) + (vehicle->sprite_right / 2) - g_music_tracking_viewport->view_x; pan_x >>= g_music_tracking_viewport->zoom; pan_x += g_music_tracking_viewport->x; @@ -942,8 +939,7 @@ static void vehicle_update_sound_params(rct_vehicle * vehicle) } soundParam->pan_x = ((((pan_x * 65536) / screenwidth) - 0x8000) >> 4); - int32_t pan_y = - (vehicle->sprite_top / 2) + (vehicle->sprite_bottom / 2) - g_music_tracking_viewport->view_y; + int32_t pan_y = (vehicle->sprite_top / 2) + (vehicle->sprite_bottom / 2) - g_music_tracking_viewport->view_y; pan_y >>= g_music_tracking_viewport->zoom; pan_y += g_music_tracking_viewport->y; @@ -956,7 +952,7 @@ static void vehicle_update_sound_params(rct_vehicle * vehicle) int32_t frequency = std::abs(vehicle->velocity); - rct_ride_entry * ride_type = get_ride_entry(vehicle->ride_subtype); + rct_ride_entry* ride_type = get_ride_entry(vehicle->ride_subtype); if (ride_type != nullptr) { if (ride_type->vehicles[vehicle->vehicle_type].double_sound_frequency & 1) @@ -971,12 +967,12 @@ static void vehicle_update_sound_params(rct_vehicle * vehicle) frequency += 11025; frequency += 16 * vehicle->sound_vector_factor; soundParam->frequency = (uint16_t)frequency; - soundParam->id = vehicle->sprite_index; - soundParam->volume = 0; + soundParam->id = vehicle->sprite_index; + soundParam->volume = 0; if (vehicle->x != LOCATION_NULL) { - rct_tile_element * tile_element = map_get_surface_element_at({vehicle->x, vehicle->y}); + rct_tile_element* tile_element = map_get_surface_element_at({ vehicle->x, vehicle->y }); // vehicle underground if (tile_element != nullptr && tile_element->base_height * 8 > vehicle->z) @@ -990,11 +986,11 @@ static void vehicle_update_sound_params(rct_vehicle * vehicle) * * rct2: 0x006BC2F3 */ -static int32_t vehicle_get_sound_priority_factor(rct_vehicle * vehicle) +static int32_t vehicle_get_sound_priority_factor(rct_vehicle* vehicle) { int32_t mass = get_train_mass(vehicle); int32_t result = mass + (std::abs(vehicle->velocity) >> 13); - rct_vehicle_sound * vehicle_sound = &gVehicleSoundList[0]; + rct_vehicle_sound* vehicle_sound = &gVehicleSoundList[0]; while (vehicle_sound->id != vehicle->sprite_index) { @@ -1014,13 +1010,13 @@ static void vehicle_sounds_update_window_setup() { g_music_tracking_viewport = nullptr; - rct_window * window = window_get_listening(); + rct_window* window = window_get_listening(); if (window == nullptr) { return; } - rct_viewport * viewport = window_get_viewport(window); + rct_viewport* viewport = window_get_viewport(window); if (viewport == nullptr) { return; @@ -1032,10 +1028,10 @@ static void vehicle_sounds_update_window_setup() gVolumeAdjustZoom = ZoomToVolume[viewport->zoom]; } -static uint8_t vehicle_sounds_update_get_pan_volume(rct_vehicle_sound_params * sound_params) +static uint8_t vehicle_sounds_update_get_pan_volume(rct_vehicle_sound_params* sound_params) { - uint8_t vol1 = 0xFF; - uint8_t vol2 = 0xFF; + uint8_t vol1 = 0xFF; + uint8_t vol2 = 0xFF; int16_t pan_y = std::abs(sound_params->pan_y); pan_y = std::min((int16_t)0xFFF, pan_y); @@ -1082,10 +1078,10 @@ static uint8_t vehicle_sounds_update_get_pan_volume(rct_vehicle_sound_params * s * If not playing allocates a sound slot to sound_param->id. * If no free slots returns nullptr. */ -static rct_vehicle_sound * vehicle_sounds_update_get_vehicle_sound(rct_vehicle_sound_params * sound_params) +static rct_vehicle_sound* vehicle_sounds_update_get_vehicle_sound(rct_vehicle_sound_params* sound_params) { // Search for already playing vehicle sound - rct_vehicle_sound * vehicleSound = &gVehicleSoundList[0]; + rct_vehicle_sound* vehicleSound = &gVehicleSoundList[0]; for (; vehicleSound < &gVehicleSoundList[Util::CountOf(gVehicleSoundList)]; vehicleSound++) { if (vehicleSound->id == sound_params->id) @@ -1095,12 +1091,12 @@ static rct_vehicle_sound * vehicle_sounds_update_get_vehicle_sound(rct_vehicle_s // No sound already playing if (vehicleSound >= &gVehicleSoundList[Util::CountOf(gVehicleSoundList)]) { - for (vehicleSound = &gVehicleSoundList[0]; - vehicleSound < &gVehicleSoundList[Util::CountOf(gVehicleSoundList)]; - vehicleSound++) + for (vehicleSound = &gVehicleSoundList[0]; vehicleSound < &gVehicleSoundList[Util::CountOf(gVehicleSoundList)]; + vehicleSound++) { // Use free slot - if (vehicleSound->id == SOUND_ID_NULL) { + if (vehicleSound->id == SOUND_ID_NULL) + { vehicleSound->id = sound_params->id; vehicleSound->sound1_id = SOUND_ID_NULL; vehicleSound->sound2_id = SOUND_ID_NULL; @@ -1113,9 +1109,10 @@ static rct_vehicle_sound * vehicle_sounds_update_get_vehicle_sound(rct_vehicle_s } // Track Noises -static void vehicle_sounds_update_sound_1(rct_vehicle * vehicle, rct_vehicle_sound_params * sound_params, rct_vehicle_sound * sound, uint8_t panVol) +static void vehicle_sounds_update_sound_1( + rct_vehicle* vehicle, rct_vehicle_sound_params* sound_params, rct_vehicle_sound* sound, uint8_t panVol) { - int32_t volume = vehicle->sound1_volume; + int32_t volume = vehicle->sound1_volume; volume *= panVol; volume = volume / 8; volume = std::max(volume - 0x1FFF, -10000); @@ -1130,14 +1127,12 @@ static void vehicle_sounds_update_sound_1(rct_vehicle * vehicle, rct_vehicle_sou return; } - if (sound->sound1_id != SOUND_ID_NULL && - vehicle->sound1_id != sound->sound1_id) + if (sound->sound1_id != SOUND_ID_NULL && vehicle->sound1_id != sound->sound1_id) { Mixer_Stop_Channel(sound->sound1_channel); } - if ((sound->sound1_id == SOUND_ID_NULL) || - (vehicle->sound1_id != sound->sound1_id)) + if ((sound->sound1_id == SOUND_ID_NULL) || (vehicle->sound1_id != sound->sound1_id)) { sound->sound1_id = vehicle->sound1_id; sound->sound1_pan = sound_params->pan_x; @@ -1148,11 +1143,15 @@ static void vehicle_sounds_update_sound_1(rct_vehicle * vehicle, rct_vehicle_sou { frequency = (frequency / 2) + 4000; } - uint8_t looping = _soundParams[vehicle->sound1_id][0]; + uint8_t looping = _soundParams[vehicle->sound1_id][0]; int32_t pan = sound_params->pan_x; - sound->sound1_channel = - Mixer_Play_Effect(vehicle->sound1_id, looping ? MIXER_LOOP_INFINITE : MIXER_LOOP_NONE, - DStoMixerVolume(volume), DStoMixerPan(pan), DStoMixerRate(frequency), 0); + sound->sound1_channel = Mixer_Play_Effect( + vehicle->sound1_id, + looping ? MIXER_LOOP_INFINITE : MIXER_LOOP_NONE, + DStoMixerVolume(volume), + DStoMixerPan(pan), + DStoMixerRate(frequency), + 0); return; } if (volume != sound->sound1_volume) @@ -1178,7 +1177,8 @@ static void vehicle_sounds_update_sound_1(rct_vehicle * vehicle, rct_vehicle_sou } // Other noises (e.g. Screams) -static void vehicle_sounds_update_sound_2(rct_vehicle * vehicle, rct_vehicle_sound_params * sound_params, rct_vehicle_sound * sound, uint8_t panVol) +static void vehicle_sounds_update_sound_2( + rct_vehicle* vehicle, rct_vehicle_sound_params* sound_params, rct_vehicle_sound* sound, uint8_t panVol) { int32_t volume = vehicle->sound2_volume; volume *= panVol; @@ -1195,14 +1195,12 @@ static void vehicle_sounds_update_sound_2(rct_vehicle * vehicle, rct_vehicle_sou return; } - if (sound->sound2_id != SOUND_ID_NULL && - vehicle->sound2_id != sound->sound2_id) + if (sound->sound2_id != SOUND_ID_NULL && vehicle->sound2_id != sound->sound2_id) { Mixer_Stop_Channel(sound->sound2_channel); } - if ((sound->sound2_id == SOUND_ID_NULL) || - (vehicle->sound2_id != sound->sound2_id)) + if ((sound->sound2_id == SOUND_ID_NULL) || (vehicle->sound2_id != sound->sound2_id)) { sound->sound2_id = vehicle->sound2_id; sound->sound2_pan = sound_params->pan_x; @@ -1215,11 +1213,15 @@ static void vehicle_sounds_update_sound_2(rct_vehicle * vehicle, rct_vehicle_sou } frequency = std::min((frequency * 2) - 3248, 25700); - uint8_t looping = _soundParams[vehicle->sound2_id][0]; + uint8_t looping = _soundParams[vehicle->sound2_id][0]; int32_t pan = sound_params->pan_x; - sound->sound2_channel = - Mixer_Play_Effect(vehicle->sound2_id, looping ? MIXER_LOOP_INFINITE : MIXER_LOOP_NONE, - DStoMixerVolume(volume), DStoMixerPan(pan), DStoMixerRate(frequency), 0); + sound->sound2_channel = Mixer_Play_Effect( + vehicle->sound2_id, + looping ? MIXER_LOOP_INFINITE : MIXER_LOOP_NONE, + DStoMixerVolume(volume), + DStoMixerPan(pan), + DStoMixerRate(frequency), + 0); return; } if (volume != sound->sound2_volume) @@ -1265,13 +1267,14 @@ void vehicle_sounds_update() } // Stop all playing sounds that no longer have priority to play after vehicle_update_sound_params - for (auto &vehicle_sound : gVehicleSoundList) + for (auto& vehicle_sound : gVehicleSoundList) { if (vehicle_sound.id != SOUND_ID_NULL) { bool keepPlaying = false; - for (rct_vehicle_sound_params * vehicle_sound_params = &gVehicleSoundParamsList[0]; - vehicle_sound_params != gVehicleSoundParamsListEnd; vehicle_sound_params++) + for (rct_vehicle_sound_params* vehicle_sound_params = &gVehicleSoundParamsList[0]; + vehicle_sound_params != gVehicleSoundParamsListEnd; + vehicle_sound_params++) { if (vehicle_sound.id == vehicle_sound_params->id) { @@ -1295,13 +1298,13 @@ void vehicle_sounds_update() } } - for (rct_vehicle_sound_params * vehicleSoundParams = &gVehicleSoundParamsList[0]; - vehicleSoundParams < gVehicleSoundParamsListEnd; - vehicleSoundParams++) + for (rct_vehicle_sound_params* vehicleSoundParams = &gVehicleSoundParamsList[0]; + vehicleSoundParams < gVehicleSoundParamsListEnd; + vehicleSoundParams++) { - uint8_t panVol = vehicle_sounds_update_get_pan_volume(vehicleSoundParams); + uint8_t panVol = vehicle_sounds_update_get_pan_volume(vehicleSoundParams); - rct_vehicle_sound * vehicleSound = vehicle_sounds_update_get_vehicle_sound(vehicleSoundParams); + rct_vehicle_sound* vehicleSound = vehicle_sounds_update_get_vehicle_sound(vehicleSoundParams); // No free vehicle sound slots (RCT2 corrupts the pointer here) if (vehicleSound == nullptr) continue; @@ -1322,7 +1325,7 @@ void vehicle_sounds_update() vehicleSound->volume = tempvolume; panVol = std::max(0, panVol - tempvolume); - rct_vehicle * vehicle = GET_VEHICLE(vehicleSoundParams->id); + rct_vehicle* vehicle = GET_VEHICLE(vehicleSoundParams->id); vehicle_sounds_update_sound_1(vehicle, vehicleSoundParams, vehicleSound, panVol); vehicle_sounds_update_sound_2(vehicle, vehicleSoundParams, vehicleSound, panVol); } @@ -1334,8 +1337,8 @@ void vehicle_sounds_update() */ void vehicle_update_all() { - uint16_t sprite_index; - rct_vehicle * vehicle; + uint16_t sprite_index; + rct_vehicle* vehicle; if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) return; @@ -1346,7 +1349,7 @@ void vehicle_update_all() sprite_index = gSpriteListHead[SPRITE_LIST_TRAIN]; while (sprite_index != SPRITE_INDEX_NULL) { - vehicle = GET_VEHICLE(sprite_index); + vehicle = GET_VEHICLE(sprite_index); sprite_index = vehicle->next; vehicle_update(vehicle); @@ -1358,34 +1361,32 @@ void vehicle_update_all() * rct2: 0x006D6956 * @returns true when all closed */ -static bool vehicle_close_restraints(rct_vehicle * vehicle) +static bool vehicle_close_restraints(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); bool restraintsClosed = true; uint16_t vehicle_id = vehicle->sprite_index; do { vehicle = GET_VEHICLE(vehicle_id); - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_BROKEN_CAR && vehicle->restraints_position != 0 && - (ride->breakdown_reason_pending == BREAKDOWN_RESTRAINTS_STUCK_OPEN || - ride->breakdown_reason_pending == BREAKDOWN_DOORS_STUCK_OPEN)) + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_BROKEN_CAR && vehicle->restraints_position != 0 + && (ride->breakdown_reason_pending == BREAKDOWN_RESTRAINTS_STUCK_OPEN + || ride->breakdown_reason_pending == BREAKDOWN_DOORS_STUCK_OPEN)) { - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)) { - ride->lifecycle_flags |= RIDE_LIFECYCLE_BROKEN_DOWN; ride_breakdown_add_news_item(vehicle->ride); - ride->window_invalidate_flags |= - RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST | RIDE_INVALIDATE_RIDE_MAINTENANCE; + ride->window_invalidate_flags + |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST | RIDE_INVALIDATE_RIDE_MAINTENANCE; ride->mechanic_status = RIDE_MECHANIC_STATUS_CALLING; - rct_vehicle * broken_vehicle = GET_VEHICLE(ride->vehicles[ride->broken_vehicle]); - ride->inspection_station = broken_vehicle->current_station; + rct_vehicle* broken_vehicle = GET_VEHICLE(ride->vehicles[ride->broken_vehicle]); + ride->inspection_station = broken_vehicle->current_station; ride->breakdown_reason = ride->breakdown_reason_pending; } @@ -1410,7 +1411,7 @@ static bool vehicle_close_restraints(rct_vehicle * vehicle) * rct2: 0x006D6A2C * @returns true when all open */ -static bool vehicle_open_restraints(rct_vehicle * vehicle) +static bool vehicle_open_restraints(rct_vehicle* vehicle) { int32_t restraintsOpen = true; uint16_t vehicle_id = vehicle->sprite_index; @@ -1420,25 +1421,25 @@ static bool vehicle_open_restraints(rct_vehicle * vehicle) vehicle = GET_VEHICLE(vehicle_id); vehicle->swinging_car_var_0 = 0; - vehicle->var_4E = 0; - vehicle->swing_sprite = 0; + vehicle->var_4E = 0; + vehicle->swing_sprite = 0; - Ride * ride = get_ride(vehicle->ride); - rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); + Ride* ride = get_ride(vehicle->ride); + rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); if (rideEntry == nullptr) { continue; } - rct_ride_entry_vehicle * vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; + rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING) { // If the vehicle is a spinner it must be spinning slow // For vehicles without additional frames there are 4 rotations it can unload from // For vehicles with additional frames it must be facing forward - if (abs(vehicle->spin_speed) <= VEHICLE_MAX_SPIN_SPEED_FOR_STOPPING && !(vehicle->spin_sprite & 0x30) && - (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING_ADDITIONAL_FRAMES) || !(vehicle->spin_sprite & 0xF8))) + if (abs(vehicle->spin_speed) <= VEHICLE_MAX_SPIN_SPEED_FOR_STOPPING && !(vehicle->spin_sprite & 0x30) + && (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING_ADDITIONAL_FRAMES) || !(vehicle->spin_sprite & 0xF8))) { vehicle->spin_speed = 0; } @@ -1461,7 +1462,6 @@ static bool vehicle_open_restraints(rct_vehicle * vehicle) } if (vehicleEntry->animation == VEHICLE_ENTRY_ANIMATION_OBSERVATION_TOWER && vehicle->animation_frame != 0) { - if (vehicle->var_C8 + 0x3333 < 0xFFFF) { vehicle->var_C8 = vehicle->var_C8 + 0x3333 - 0xFFFF; @@ -1477,25 +1477,23 @@ static bool vehicle_open_restraints(rct_vehicle * vehicle) continue; } - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_BROKEN_CAR && vehicle->restraints_position != 0xFF && - (ride->breakdown_reason_pending == BREAKDOWN_RESTRAINTS_STUCK_CLOSED || - ride->breakdown_reason_pending == BREAKDOWN_DOORS_STUCK_CLOSED)) + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_BROKEN_CAR && vehicle->restraints_position != 0xFF + && (ride->breakdown_reason_pending == BREAKDOWN_RESTRAINTS_STUCK_CLOSED + || ride->breakdown_reason_pending == BREAKDOWN_DOORS_STUCK_CLOSED)) { - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)) { - ride->lifecycle_flags |= RIDE_LIFECYCLE_BROKEN_DOWN; ride_breakdown_add_news_item(vehicle->ride); - ride->window_invalidate_flags |= - RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST | RIDE_INVALIDATE_RIDE_MAINTENANCE; + ride->window_invalidate_flags + |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST | RIDE_INVALIDATE_RIDE_MAINTENANCE; ride->mechanic_status = RIDE_MECHANIC_STATUS_CALLING; - rct_vehicle * broken_vehicle = GET_VEHICLE(ride->vehicles[ride->broken_vehicle]); - ride->inspection_station = broken_vehicle->current_station; + rct_vehicle* broken_vehicle = GET_VEHICLE(ride->vehicles[ride->broken_vehicle]); + ride->inspection_station = broken_vehicle->current_station; ride->breakdown_reason = ride->breakdown_reason_pending; } @@ -1520,9 +1518,9 @@ static bool vehicle_open_restraints(rct_vehicle * vehicle) * * rct2: 0x006D6D1F */ -static void vehicle_update_measurements(rct_vehicle * vehicle) +static void vehicle_update_measurements(rct_vehicle* vehicle) { - Ride * ride; + Ride* ride; ride = get_ride(vehicle->ride); @@ -1574,7 +1572,7 @@ static void vehicle_update_measurements(rct_vehicle * vehicle) lateral_g >>= 1; ride->previous_vertical_g = vertical_g; - ride->previous_lateral_g = lateral_g; + ride->previous_lateral_g = lateral_g; if (vertical_g <= 0) { @@ -1598,7 +1596,7 @@ static void vehicle_update_measurements(rct_vehicle * vehicle) uint16_t map_location = (vehicle->track_x / 32) | ((vehicle->track_y / 32) << 8); if (vehicle->track_z / 8 != ride->cur_test_track_z || map_location != ride->cur_test_track_location.xy) { - ride->cur_test_track_z = vehicle->track_z / 8; + ride->cur_test_track_z = vehicle->track_z / 8; ride->cur_test_track_location.xy = map_location; if (ride_get_entrance_location(ride, ride->current_test_station).isNull()) @@ -1631,22 +1629,22 @@ static void vehicle_update_measurements(rct_vehicle * vehicle) switch (track_elem_type) { - case TRACK_ELEM_RAPIDS: - case TRACK_ELEM_SPINNING_TUNNEL: - ride->special_track_elements |= RIDE_ELEMENT_TUNNEL_SPLASH_OR_RAPIDS; - break; - case TRACK_ELEM_WATERFALL: - case TRACK_ELEM_LOG_FLUME_REVERSER: - ride->special_track_elements |= RIDE_ELEMENT_REVERSER_OR_WATERFALL; - break; - case TRACK_ELEM_WHIRLPOOL: - ride->special_track_elements |= RIDE_ELEMENT_WHIRLPOOL; - break; - case TRACK_ELEM_WATER_SPLASH: - if (vehicle->velocity >= 0xB0000) - { + case TRACK_ELEM_RAPIDS: + case TRACK_ELEM_SPINNING_TUNNEL: ride->special_track_elements |= RIDE_ELEMENT_TUNNEL_SPLASH_OR_RAPIDS; - } + break; + case TRACK_ELEM_WATERFALL: + case TRACK_ELEM_LOG_FLUME_REVERSER: + ride->special_track_elements |= RIDE_ELEMENT_REVERSER_OR_WATERFALL; + break; + case TRACK_ELEM_WHIRLPOOL: + ride->special_track_elements |= RIDE_ELEMENT_WHIRLPOOL; + break; + case TRACK_ELEM_WATER_SPLASH: + if (vehicle->velocity >= 0xB0000) + { + ride->special_track_elements |= RIDE_ELEMENT_TUNNEL_SPLASH_OR_RAPIDS; + } } // ax @@ -1665,9 +1663,8 @@ static void vehicle_update_measurements(rct_vehicle * vehicle) } else if (testing_flags & RIDE_TESTING_TURN_RIGHT || testing_flags & RIDE_TESTING_TURN_LEFT) { - - ride->testing_flags &= - ~(RIDE_TESTING_TURN_LEFT | RIDE_TESTING_TURN_RIGHT | RIDE_TESTING_TURN_BANKED | RIDE_TESTING_TURN_SLOPED); + ride->testing_flags + &= ~(RIDE_TESTING_TURN_LEFT | RIDE_TESTING_TURN_RIGHT | RIDE_TESTING_TURN_BANKED | RIDE_TESTING_TURN_SLOPED); uint8_t turn_type = 1; if (!(testing_flags & RIDE_TESTING_TURN_BANKED)) @@ -1680,18 +1677,18 @@ static void vehicle_update_measurements(rct_vehicle * vehicle) } switch (ride->turn_count_default >> 11) { - case 0: - increment_turn_count_1_element(ride, turn_type); - break; - case 1: - increment_turn_count_2_elements(ride, turn_type); - break; - case 2: - increment_turn_count_3_elements(ride, turn_type); - break; - default: - increment_turn_count_4_plus_elements(ride, turn_type); - break; + case 0: + increment_turn_count_1_element(ride, turn_type); + break; + case 1: + increment_turn_count_2_elements(ride, turn_type); + break; + case 2: + increment_turn_count_3_elements(ride, turn_type); + break; + default: + increment_turn_count_4_plus_elements(ride, turn_type); + break; } } else @@ -1825,7 +1822,7 @@ static void vehicle_update_measurements(rct_vehicle * vehicle) return; } - rct_tile_element * tile_element = map_get_surface_element_at({x, y}); + rct_tile_element* tile_element = map_get_surface_element_at({ x, y }); // If vehicle above ground. if (tile_element->base_height * 8 <= z) { @@ -1855,7 +1852,7 @@ static void vehicle_update_measurements(rct_vehicle * vehicle) if (tile_element->GetType() != TILE_ELEMENT_TYPE_SMALL_SCENERY) continue; - rct_scenery_entry * scenery = get_small_scenery_entry(tile_element->properties.scenery.type); + rct_scenery_entry* scenery = get_small_scenery_entry(tile_element->properties.scenery.type); if (scenery_small_entry_has_flag(scenery, SMALL_SCENERY_FLAG_FULL_TILE)) { cover_found = true; @@ -1918,7 +1915,7 @@ static uint16_t sub_6D7AC0(int32_t currentSoundId, int32_t currentVolume, int32_ // Begin sound at quarter volume currentSoundId = targetSoundId; - currentVolume = targetVolume == 255 ? 255 : targetVolume / 4; + currentVolume = targetVolume == 255 ? 255 : targetVolume / 4; return (currentVolume << 8) | currentSoundId; } @@ -1927,10 +1924,10 @@ static uint16_t sub_6D7AC0(int32_t currentSoundId, int32_t currentVolume, int32_ * * rct2: 0x006D77F2 */ -static void vehicle_update(rct_vehicle * vehicle) +static void vehicle_update(rct_vehicle* vehicle) { - Ride * ride; - rct_ride_entry * rideEntry; + Ride* ride; + rct_ride_entry* rideEntry; // The cable lift uses the ride type of NULL if (vehicle->ride_subtype == RIDE_TYPE_NULL) @@ -1941,7 +1938,7 @@ static void vehicle_update(rct_vehicle * vehicle) rideEntry = get_ride_entry(vehicle->ride_subtype); - rct_ride_entry_vehicle * vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; + rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; ride = get_ride(vehicle->ride); if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_TESTING) @@ -1953,8 +1950,8 @@ static void vehicle_update(rct_vehicle * vehicle) _vehicleBreakdown = ride->breakdown_reason_pending; if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED) && ride->breakdown_reason_pending == BREAKDOWN_SAFETY_CUT_OUT) { - if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_WATER_RIDE) || - (vehicle->vehicle_sprite_type == 2 && vehicle->velocity <= 0x20000)) + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_WATER_RIDE) + || (vehicle->vehicle_sprite_type == 2 && vehicle->velocity <= 0x20000)) { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_ZERO_VELOCITY; } @@ -1963,72 +1960,72 @@ static void vehicle_update(rct_vehicle * vehicle) switch (vehicle->status) { - case VEHICLE_STATUS_MOVING_TO_END_OF_STATION: - vehicle_update_moving_to_end_of_station(vehicle); - break; - case VEHICLE_STATUS_WAITING_FOR_PASSENGERS: - vehicle_update_waiting_for_passengers(vehicle); - break; - case VEHICLE_STATUS_WAITING_TO_DEPART: - vehicle_update_waiting_to_depart(vehicle); - break; - case VEHICLE_STATUS_CRASHING: - case VEHICLE_STATUS_CRASHED: - vehicle_update_crash(vehicle); - break; - case VEHICLE_STATUS_TRAVELLING_DODGEMS: - vehicle_update_dodgems_mode(vehicle); - break; - case VEHICLE_STATUS_SWINGING: - vehicle_update_swinging(vehicle); - break; - case VEHICLE_STATUS_SIMULATOR_OPERATING: - vehicle_update_simulator_operating(vehicle); - break; - case VEHICLE_STATUS_TOP_SPIN_OPERATING: - vehicle_update_top_spin_operating(vehicle); - break; - case VEHICLE_STATUS_FERRIS_WHEEL_ROTATING: - vehicle_update_ferris_wheel_rotating(vehicle); - break; - case VEHICLE_STATUS_SPACE_RINGS_OPERATING: - vehicle_update_space_rings_operating(vehicle); - break; - case VEHICLE_STATUS_HAUNTED_HOUSE_OPERATING: - vehicle_update_haunted_house_operating(vehicle); - break; - case VEHICLE_STATUS_CROOKED_HOUSE_OPERATING: - vehicle_update_crooked_house_operating(vehicle); - break; - case VEHICLE_STATUS_ROTATING: - vehicle_update_rotating(vehicle); - break; - case VEHICLE_STATUS_DEPARTING: - vehicle_update_departing(vehicle); - break; - case VEHICLE_STATUS_TRAVELLING: - vehicle_update_travelling(vehicle); - break; - case VEHICLE_STATUS_TRAVELLING_CABLE_LIFT: - vehicle_update_travelling_cable_lift(vehicle); - break; - case VEHICLE_STATUS_TRAVELLING_BOAT: - vehicle_update_travelling_boat(vehicle); - break; - case VEHICLE_STATUS_ARRIVING: - vehicle_update_arriving(vehicle); - break; - case VEHICLE_STATUS_UNLOADING_PASSENGERS: - vehicle_update_unloading_passengers(vehicle); - break; - case VEHICLE_STATUS_WAITING_FOR_CABLE_LIFT: - vehicle_update_waiting_for_cable_lift(vehicle); - break; - case VEHICLE_STATUS_SHOWING_FILM: - vehicle_update_showing_film(vehicle); - break; - case VEHICLE_STATUS_DOING_CIRCUS_SHOW: - vehicle_update_doing_circus_show(vehicle); + case VEHICLE_STATUS_MOVING_TO_END_OF_STATION: + vehicle_update_moving_to_end_of_station(vehicle); + break; + case VEHICLE_STATUS_WAITING_FOR_PASSENGERS: + vehicle_update_waiting_for_passengers(vehicle); + break; + case VEHICLE_STATUS_WAITING_TO_DEPART: + vehicle_update_waiting_to_depart(vehicle); + break; + case VEHICLE_STATUS_CRASHING: + case VEHICLE_STATUS_CRASHED: + vehicle_update_crash(vehicle); + break; + case VEHICLE_STATUS_TRAVELLING_DODGEMS: + vehicle_update_dodgems_mode(vehicle); + break; + case VEHICLE_STATUS_SWINGING: + vehicle_update_swinging(vehicle); + break; + case VEHICLE_STATUS_SIMULATOR_OPERATING: + vehicle_update_simulator_operating(vehicle); + break; + case VEHICLE_STATUS_TOP_SPIN_OPERATING: + vehicle_update_top_spin_operating(vehicle); + break; + case VEHICLE_STATUS_FERRIS_WHEEL_ROTATING: + vehicle_update_ferris_wheel_rotating(vehicle); + break; + case VEHICLE_STATUS_SPACE_RINGS_OPERATING: + vehicle_update_space_rings_operating(vehicle); + break; + case VEHICLE_STATUS_HAUNTED_HOUSE_OPERATING: + vehicle_update_haunted_house_operating(vehicle); + break; + case VEHICLE_STATUS_CROOKED_HOUSE_OPERATING: + vehicle_update_crooked_house_operating(vehicle); + break; + case VEHICLE_STATUS_ROTATING: + vehicle_update_rotating(vehicle); + break; + case VEHICLE_STATUS_DEPARTING: + vehicle_update_departing(vehicle); + break; + case VEHICLE_STATUS_TRAVELLING: + vehicle_update_travelling(vehicle); + break; + case VEHICLE_STATUS_TRAVELLING_CABLE_LIFT: + vehicle_update_travelling_cable_lift(vehicle); + break; + case VEHICLE_STATUS_TRAVELLING_BOAT: + vehicle_update_travelling_boat(vehicle); + break; + case VEHICLE_STATUS_ARRIVING: + vehicle_update_arriving(vehicle); + break; + case VEHICLE_STATUS_UNLOADING_PASSENGERS: + vehicle_update_unloading_passengers(vehicle); + break; + case VEHICLE_STATUS_WAITING_FOR_CABLE_LIFT: + vehicle_update_waiting_for_cable_lift(vehicle); + break; + case VEHICLE_STATUS_SHOWING_FILM: + vehicle_update_showing_film(vehicle); + break; + case VEHICLE_STATUS_DOING_CIRCUS_SHOW: + vehicle_update_doing_circus_show(vehicle); } vehicle_update_sound(vehicle); @@ -2038,112 +2035,112 @@ static void vehicle_update(rct_vehicle * vehicle) * * rct2: 0x006D7BCC */ -static void vehicle_update_moving_to_end_of_station(rct_vehicle * vehicle) +static void vehicle_update_moving_to_end_of_station(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); int32_t flags, station; switch (ride->mode) { - case RIDE_MODE_UPWARD_LAUNCH: - case RIDE_MODE_ROTATING_LIFT: - case RIDE_MODE_DOWNWARD_LAUNCH: - case RIDE_MODE_FREEFALL_DROP: - if (vehicle->velocity >= -131940) - { - vehicle->acceleration = -3298; - } - if (vehicle->velocity < -131940) - { - vehicle->velocity -= vehicle->velocity / 16; - vehicle->acceleration = 0; - } - flags = vehicle_update_track_motion(vehicle, &station); - if (!(flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_5)) - break; - // Fall through to next case - case RIDE_MODE_BUMPERCAR: - case RIDE_MODE_SWING: - case RIDE_MODE_ROTATION: - case RIDE_MODE_FORWARD_ROTATION: - case RIDE_MODE_BACKWARD_ROTATION: - case RIDE_MODE_FILM_AVENGING_AVIATORS: - case RIDE_MODE_FILM_THRILL_RIDERS: - case RIDE_MODE_BEGINNERS: - case RIDE_MODE_INTENSE: - case RIDE_MODE_BERSERK: - case RIDE_MODE_3D_FILM_MOUSE_TAILS: - case RIDE_MODE_3D_FILM_STORM_CHASERS: - case RIDE_MODE_3D_FILM_SPACE_RAIDERS: - case RIDE_MODE_SPACE_RINGS: - case RIDE_MODE_HAUNTED_HOUSE: - case RIDE_MODE_CROOKED_HOUSE: - case RIDE_MODE_CIRCUS_SHOW: - vehicle->current_station = 0; - vehicle->velocity = 0; - vehicle->acceleration = 0; - vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS; - vehicle->sub_state = 0; - vehicle_invalidate_window(vehicle); - break; - default: - { - rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); - if (rideEntry == nullptr) - { - return; - } - - rct_ride_entry_vehicle * vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; - - if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED)) - { - if (vehicle->velocity <= 131940) + case RIDE_MODE_UPWARD_LAUNCH: + case RIDE_MODE_ROTATING_LIFT: + case RIDE_MODE_DOWNWARD_LAUNCH: + case RIDE_MODE_FREEFALL_DROP: + if (vehicle->velocity >= -131940) { - vehicle->acceleration = 3298; + vehicle->acceleration = -3298; } - } - if (vehicle->velocity > 131940) - { - vehicle->velocity -= vehicle->velocity / 16; - vehicle->acceleration = 0; - } - - flags = vehicle_update_track_motion(vehicle, &station); - - if (flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_1) - { - vehicle->velocity = 0; - vehicle->acceleration = 0; - vehicle->sub_state++; - - if (ride->mode == RIDE_MODE_RACE && vehicle->sub_state >= 40) + if (vehicle->velocity < -131940) { - vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS; - vehicle->sub_state = 0; - vehicle_invalidate_window(vehicle); + vehicle->velocity -= vehicle->velocity / 16; + vehicle->acceleration = 0; + } + flags = vehicle_update_track_motion(vehicle, &station); + if (!(flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_5)) break; - } - } - else - { - if (vehicle->velocity > 98955) - { - vehicle->sub_state = 0; - } - } - - if (!(flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_AT_STATION)) + // Fall through to next case + case RIDE_MODE_BUMPERCAR: + case RIDE_MODE_SWING: + case RIDE_MODE_ROTATION: + case RIDE_MODE_FORWARD_ROTATION: + case RIDE_MODE_BACKWARD_ROTATION: + case RIDE_MODE_FILM_AVENGING_AVIATORS: + case RIDE_MODE_FILM_THRILL_RIDERS: + case RIDE_MODE_BEGINNERS: + case RIDE_MODE_INTENSE: + case RIDE_MODE_BERSERK: + case RIDE_MODE_3D_FILM_MOUSE_TAILS: + case RIDE_MODE_3D_FILM_STORM_CHASERS: + case RIDE_MODE_3D_FILM_SPACE_RAIDERS: + case RIDE_MODE_SPACE_RINGS: + case RIDE_MODE_HAUNTED_HOUSE: + case RIDE_MODE_CROOKED_HOUSE: + case RIDE_MODE_CIRCUS_SHOW: + vehicle->current_station = 0; + vehicle->velocity = 0; + vehicle->acceleration = 0; + vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS; + vehicle->sub_state = 0; + vehicle_invalidate_window(vehicle); break; + default: + { + rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); + if (rideEntry == nullptr) + { + return; + } - vehicle->current_station = station; - vehicle->velocity = 0; - vehicle->acceleration = 0; - vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS; - vehicle->sub_state = 0; - vehicle_invalidate_window(vehicle); - break; - } + rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; + + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED)) + { + if (vehicle->velocity <= 131940) + { + vehicle->acceleration = 3298; + } + } + if (vehicle->velocity > 131940) + { + vehicle->velocity -= vehicle->velocity / 16; + vehicle->acceleration = 0; + } + + flags = vehicle_update_track_motion(vehicle, &station); + + if (flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_1) + { + vehicle->velocity = 0; + vehicle->acceleration = 0; + vehicle->sub_state++; + + if (ride->mode == RIDE_MODE_RACE && vehicle->sub_state >= 40) + { + vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS; + vehicle->sub_state = 0; + vehicle_invalidate_window(vehicle); + break; + } + } + else + { + if (vehicle->velocity > 98955) + { + vehicle->sub_state = 0; + } + } + + if (!(flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_AT_STATION)) + break; + + vehicle->current_station = station; + vehicle->velocity = 0; + vehicle->acceleration = 0; + vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS; + vehicle->sub_state = 0; + vehicle_invalidate_window(vehicle); + break; + } } } @@ -2151,16 +2148,15 @@ static void vehicle_update_moving_to_end_of_station(rct_vehicle * vehicle) * * rct2: 0x006D7FB4 */ -static void train_ready_to_depart(rct_vehicle * vehicle, uint8_t num_peeps_on_train, uint8_t num_used_seats) +static void train_ready_to_depart(rct_vehicle* vehicle, uint8_t num_peeps_on_train, uint8_t num_used_seats) { - if (num_peeps_on_train != num_used_seats) return; - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); - if (ride->status == RIDE_STATUS_OPEN && !(ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) && - !(vehicle->update_flags & VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART)) + if (ride->status == RIDE_STATUS_OPEN && !(ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) + && !(vehicle->update_flags & VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART)) { return; } @@ -2172,20 +2168,19 @@ static void train_ready_to_depart(rct_vehicle * vehicle, uint8_t num_peeps_on_tr if (ride->status != RIDE_STATUS_CLOSED || (ride->num_riders != 0 && ride->type != RIDE_TYPE_BOAT_HIRE)) { ride->train_at_station[vehicle->current_station] = 0xFF; - vehicle->sub_state = 2; + vehicle->sub_state = 2; return; } } if (ride->mode == RIDE_MODE_FORWARD_ROTATION || ride->mode == RIDE_MODE_BACKWARD_ROTATION) { - uint8_t peep = ((-vehicle->vehicle_sprite_type) / 8) & 0xF; if (vehicle->peep[peep] != SPRITE_INDEX_NULL) { ride->train_at_station[vehicle->current_station] = 0xFF; - vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; - vehicle->sub_state = 0; + vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; + vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); return; } @@ -2194,7 +2189,7 @@ static void train_ready_to_depart(rct_vehicle * vehicle, uint8_t num_peeps_on_tr return; ride->train_at_station[vehicle->current_station] = 0xFF; - vehicle->sub_state = 2; + vehicle->sub_state = 2; return; } @@ -2202,12 +2197,12 @@ static void train_ready_to_depart(rct_vehicle * vehicle, uint8_t num_peeps_on_tr return; ride->train_at_station[vehicle->current_station] = 0xFF; - vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS; - vehicle->sub_state = 0; + vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS; + vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); } -static int ride_get_train_index_from_vehicle(Ride * ride, uint16_t spriteIndex) +static int ride_get_train_index_from_vehicle(Ride* ride, uint16_t spriteIndex) { uint32_t trainIndex = 0; while (ride->vehicles[trainIndex] != spriteIndex) @@ -2232,11 +2227,11 @@ static int ride_get_train_index_from_vehicle(Ride * ride, uint16_t spriteIndex) * * rct2: 0x006D7DA1 */ -static void vehicle_update_waiting_for_passengers(rct_vehicle * vehicle) +static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle) { vehicle->velocity = 0; - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); if (vehicle->sub_state == 0) { @@ -2246,7 +2241,7 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle * vehicle) if (ride_get_entrance_location(ride, vehicle->current_station).isNull()) { ride->train_at_station[vehicle->current_station] = 0xFF; - vehicle->sub_state = 2; + vehicle->sub_state = 2; return; } @@ -2260,8 +2255,8 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle * vehicle) return; ride->train_at_station[vehicle->current_station] = trainIndex; - vehicle->sub_state = 1; - vehicle->time_waiting = 0; + vehicle->sub_state = 1; + vehicle->time_waiting = 0; vehicle_invalidate(vehicle); return; @@ -2278,7 +2273,7 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle * vehicle) for (uint16_t sprite_id = vehicle->sprite_index; sprite_id != SPRITE_INDEX_NULL;) { - rct_vehicle * train_vehicle = GET_VEHICLE(sprite_id); + rct_vehicle* train_vehicle = GET_VEHICLE(sprite_id); num_peeps_on_train += train_vehicle->num_peeps; num_used_seats_on_train += train_vehicle->next_free_seat; @@ -2337,10 +2332,10 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle * vehicle) if (train_id == vehicle->sprite_index) continue; - rct_vehicle * train = GET_VEHICLE(train_id); + rct_vehicle* train = GET_VEHICLE(train_id); - if (train->status == VEHICLE_STATUS_UNLOADING_PASSENGERS || - train->status == VEHICLE_STATUS_MOVING_TO_END_OF_STATION) + if (train->status == VEHICLE_STATUS_UNLOADING_PASSENGERS + || train->status == VEHICLE_STATUS_MOVING_TO_END_OF_STATION) { if (train->current_station == vehicle->current_station) { @@ -2354,7 +2349,6 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle * vehicle) if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS) && ride->depart_flags & RIDE_DEPART_WAIT_FOR_LOAD) { - if (num_peeps_on_train == num_seats_on_train) { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART; @@ -2425,8 +2419,8 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle * vehicle) if (!vehicle_close_restraints(vehicle)) return; - vehicle->velocity = 0; - vehicle->status = VEHICLE_STATUS_WAITING_TO_DEPART; + vehicle->velocity = 0; + vehicle->status = VEHICLE_STATUS_WAITING_TO_DEPART; vehicle->sub_state = 0; vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_WAIT_ON_ADJACENT; @@ -2442,15 +2436,15 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle * vehicle) * * rct2: 0x006D91BF */ -static void vehicle_update_dodgems_mode(rct_vehicle * vehicle) +static void vehicle_update_dodgems_mode(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); - rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); + Ride* ride = get_ride(vehicle->ride); + rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); if (rideEntry == nullptr) { return; } - rct_ride_entry_vehicle * vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; + rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; // Mark the dodgem as in use. if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_DODGEM_INUSE_LIGHTS && vehicle->animation_frame != 1) @@ -2473,10 +2467,10 @@ static void vehicle_update_dodgems_mode(rct_vehicle * vehicle) // Mark the dodgem as not in use. vehicle->animation_frame = 0; vehicle_invalidate(vehicle); - vehicle->velocity = 0; + vehicle->velocity = 0; vehicle->acceleration = 0; - vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; - vehicle->sub_state = 0; + vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; + vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); } @@ -2484,22 +2478,22 @@ static void vehicle_update_dodgems_mode(rct_vehicle * vehicle) * * rct2: 0x006D80BE */ -static void vehicle_update_waiting_to_depart(rct_vehicle * vehicle) +static void vehicle_update_waiting_to_depart(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); - bool shouldBreak = false; + Ride* ride = get_ride(vehicle->ride); + bool shouldBreak = false; if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) { switch (ride->breakdown_reason_pending) { - case BREAKDOWN_RESTRAINTS_STUCK_CLOSED: - case BREAKDOWN_RESTRAINTS_STUCK_OPEN: - case BREAKDOWN_DOORS_STUCK_CLOSED: - case BREAKDOWN_DOORS_STUCK_OPEN: - break; - default: - shouldBreak = true; - break; + case BREAKDOWN_RESTRAINTS_STUCK_CLOSED: + case BREAKDOWN_RESTRAINTS_STUCK_OPEN: + case BREAKDOWN_DOORS_STUCK_CLOSED: + case BREAKDOWN_DOORS_STUCK_OPEN: + break; + default: + shouldBreak = true; + break; } } @@ -2520,7 +2514,7 @@ static void vehicle_update_waiting_to_depart(rct_vehicle * vehicle) { if (!ride_get_exit_location(ride, vehicle->current_station).isNull()) { - vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; + vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); return; @@ -2530,7 +2524,7 @@ static void vehicle_update_waiting_to_depart(rct_vehicle * vehicle) else { uint16_t spriteId = vehicle->sprite_index; - for (rct_vehicle * curVehicle; spriteId != SPRITE_INDEX_NULL; spriteId = curVehicle->next_vehicle_on_train) + for (rct_vehicle* curVehicle; spriteId != SPRITE_INDEX_NULL; spriteId = curVehicle->next_vehicle_on_train) { curVehicle = GET_VEHICLE(spriteId); @@ -2538,7 +2532,7 @@ static void vehicle_update_waiting_to_depart(rct_vehicle * vehicle) { if (!ride_get_exit_location(ride, vehicle->current_station).isNull()) { - vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; + vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); return; @@ -2569,14 +2563,14 @@ static void vehicle_update_waiting_to_depart(rct_vehicle * vehicle) } } - vehicle->status = VEHICLE_STATUS_DEPARTING; + vehicle->status = VEHICLE_STATUS_DEPARTING; vehicle->sub_state = 0; if (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT) { CoordsXYE track; - int32_t z; - int32_t direction; + int32_t z; + int32_t direction; if (track_block_get_next_from_zero( vehicle->track_x, @@ -2598,138 +2592,138 @@ static void vehicle_update_waiting_to_depart(rct_vehicle * vehicle) switch (ride->mode) { - case RIDE_MODE_BUMPERCAR: - vehicle->status = VEHICLE_STATUS_TRAVELLING_DODGEMS; - vehicle_invalidate_window(vehicle); - // Bumper mode uses sub_state / var_CE to tell how long - // the vehicle has been ridden. - vehicle->sub_state = 0; - vehicle->var_CE = 0; - vehicle_update_dodgems_mode(vehicle); - break; - case RIDE_MODE_SWING: - vehicle->status = VEHICLE_STATUS_SWINGING; - vehicle->sub_state = 0; - vehicle_invalidate_window(vehicle); - vehicle->var_CE = 0; - vehicle->current_time = -1; - vehicle_update_swinging(vehicle); - break; - case RIDE_MODE_ROTATION: - vehicle->status = VEHICLE_STATUS_ROTATING; - vehicle->sub_state = 0; - vehicle_invalidate_window(vehicle); - vehicle->var_CE = 0; - vehicle->current_time = -1; - vehicle_update_rotating(vehicle); - break; - case RIDE_MODE_FILM_AVENGING_AVIATORS: - case RIDE_MODE_FILM_THRILL_RIDERS: - vehicle->status = VEHICLE_STATUS_SIMULATOR_OPERATING; - vehicle->sub_state = 0; - if (ride->mode == RIDE_MODE_FILM_THRILL_RIDERS) - vehicle->sub_state = 1; - vehicle_invalidate_window(vehicle); - vehicle->current_time = -1; - vehicle_update_simulator_operating(vehicle); - break; - case RIDE_MODE_BEGINNERS: - case RIDE_MODE_INTENSE: - case RIDE_MODE_BERSERK: - vehicle->status = VEHICLE_STATUS_TOP_SPIN_OPERATING; - vehicle_invalidate_window(vehicle); - - switch (ride->mode) - { + case RIDE_MODE_BUMPERCAR: + vehicle->status = VEHICLE_STATUS_TRAVELLING_DODGEMS; + vehicle_invalidate_window(vehicle); + // Bumper mode uses sub_state / var_CE to tell how long + // the vehicle has been ridden. + vehicle->sub_state = 0; + vehicle->var_CE = 0; + vehicle_update_dodgems_mode(vehicle); + break; + case RIDE_MODE_SWING: + vehicle->status = VEHICLE_STATUS_SWINGING; + vehicle->sub_state = 0; + vehicle_invalidate_window(vehicle); + vehicle->var_CE = 0; + vehicle->current_time = -1; + vehicle_update_swinging(vehicle); + break; + case RIDE_MODE_ROTATION: + vehicle->status = VEHICLE_STATUS_ROTATING; + vehicle->sub_state = 0; + vehicle_invalidate_window(vehicle); + vehicle->var_CE = 0; + vehicle->current_time = -1; + vehicle_update_rotating(vehicle); + break; + case RIDE_MODE_FILM_AVENGING_AVIATORS: + case RIDE_MODE_FILM_THRILL_RIDERS: + vehicle->status = VEHICLE_STATUS_SIMULATOR_OPERATING; + vehicle->sub_state = 0; + if (ride->mode == RIDE_MODE_FILM_THRILL_RIDERS) + vehicle->sub_state = 1; + vehicle_invalidate_window(vehicle); + vehicle->current_time = -1; + vehicle_update_simulator_operating(vehicle); + break; case RIDE_MODE_BEGINNERS: - vehicle->sub_state = 0; - break; case RIDE_MODE_INTENSE: - vehicle->sub_state = 1; - break; case RIDE_MODE_BERSERK: - vehicle->sub_state = 2; + vehicle->status = VEHICLE_STATUS_TOP_SPIN_OPERATING; + vehicle_invalidate_window(vehicle); + + switch (ride->mode) + { + case RIDE_MODE_BEGINNERS: + vehicle->sub_state = 0; + break; + case RIDE_MODE_INTENSE: + vehicle->sub_state = 1; + break; + case RIDE_MODE_BERSERK: + vehicle->sub_state = 2; + break; + } + vehicle->current_time = -1; + vehicle->vehicle_sprite_type = 0; + vehicle->bank_rotation = 0; + vehicle_update_top_spin_operating(vehicle); + break; + case RIDE_MODE_FORWARD_ROTATION: + case RIDE_MODE_BACKWARD_ROTATION: + vehicle->status = VEHICLE_STATUS_FERRIS_WHEEL_ROTATING; + vehicle->sub_state = vehicle->vehicle_sprite_type; + vehicle_invalidate_window(vehicle); + vehicle->var_CE = 0; + vehicle->ferris_wheel_var_0 = 8; + vehicle->ferris_wheel_var_1 = 8; + vehicle_update_ferris_wheel_rotating(vehicle); break; - } - vehicle->current_time = -1; - vehicle->vehicle_sprite_type = 0; - vehicle->bank_rotation = 0; - vehicle_update_top_spin_operating(vehicle); - break; - case RIDE_MODE_FORWARD_ROTATION: - case RIDE_MODE_BACKWARD_ROTATION: - vehicle->status = VEHICLE_STATUS_FERRIS_WHEEL_ROTATING; - vehicle->sub_state = vehicle->vehicle_sprite_type; - vehicle_invalidate_window(vehicle); - vehicle->var_CE = 0; - vehicle->ferris_wheel_var_0 = 8; - vehicle->ferris_wheel_var_1 = 8; - vehicle_update_ferris_wheel_rotating(vehicle); - break; - case RIDE_MODE_3D_FILM_MOUSE_TAILS: - case RIDE_MODE_3D_FILM_STORM_CHASERS: - case RIDE_MODE_3D_FILM_SPACE_RAIDERS: - vehicle->status = VEHICLE_STATUS_SHOWING_FILM; - vehicle_invalidate_window(vehicle); - switch (ride->mode) - { case RIDE_MODE_3D_FILM_MOUSE_TAILS: - vehicle->sub_state = 0; - break; case RIDE_MODE_3D_FILM_STORM_CHASERS: - vehicle->sub_state = 1; - break; case RIDE_MODE_3D_FILM_SPACE_RAIDERS: - vehicle->sub_state = 2; + vehicle->status = VEHICLE_STATUS_SHOWING_FILM; + vehicle_invalidate_window(vehicle); + switch (ride->mode) + { + case RIDE_MODE_3D_FILM_MOUSE_TAILS: + vehicle->sub_state = 0; + break; + case RIDE_MODE_3D_FILM_STORM_CHASERS: + vehicle->sub_state = 1; + break; + case RIDE_MODE_3D_FILM_SPACE_RAIDERS: + vehicle->sub_state = 2; + break; + } + vehicle->current_time = -1; + vehicle_update_showing_film(vehicle); + break; + case RIDE_MODE_CIRCUS_SHOW: + vehicle->status = VEHICLE_STATUS_DOING_CIRCUS_SHOW; + vehicle->sub_state = 0; + vehicle_invalidate_window(vehicle); + vehicle->current_time = -1; + vehicle_update_doing_circus_show(vehicle); + break; + case RIDE_MODE_SPACE_RINGS: + vehicle->status = VEHICLE_STATUS_SPACE_RINGS_OPERATING; + vehicle->sub_state = 0; + vehicle_invalidate_window(vehicle); + vehicle->vehicle_sprite_type = 0; + vehicle->current_time = -1; + vehicle_update_space_rings_operating(vehicle); + break; + case RIDE_MODE_HAUNTED_HOUSE: + vehicle->status = VEHICLE_STATUS_HAUNTED_HOUSE_OPERATING; + vehicle->sub_state = 0; + vehicle_invalidate_window(vehicle); + vehicle->vehicle_sprite_type = 0; + vehicle->current_time = -1; + vehicle_update_haunted_house_operating(vehicle); + break; + case RIDE_MODE_CROOKED_HOUSE: + vehicle->status = VEHICLE_STATUS_CROOKED_HOUSE_OPERATING; + vehicle->sub_state = 0; + vehicle_invalidate_window(vehicle); + vehicle->vehicle_sprite_type = 0; + vehicle->current_time = -1; + vehicle_update_crooked_house_operating(vehicle); + break; + default: + vehicle->sub_state = 0; + vehicle_invalidate_window(vehicle); + vehicle->var_CE = 0; break; - } - vehicle->current_time = -1; - vehicle_update_showing_film(vehicle); - break; - case RIDE_MODE_CIRCUS_SHOW: - vehicle->status = VEHICLE_STATUS_DOING_CIRCUS_SHOW; - vehicle->sub_state = 0; - vehicle_invalidate_window(vehicle); - vehicle->current_time = -1; - vehicle_update_doing_circus_show(vehicle); - break; - case RIDE_MODE_SPACE_RINGS: - vehicle->status = VEHICLE_STATUS_SPACE_RINGS_OPERATING; - vehicle->sub_state = 0; - vehicle_invalidate_window(vehicle); - vehicle->vehicle_sprite_type = 0; - vehicle->current_time = -1; - vehicle_update_space_rings_operating(vehicle); - break; - case RIDE_MODE_HAUNTED_HOUSE: - vehicle->status = VEHICLE_STATUS_HAUNTED_HOUSE_OPERATING; - vehicle->sub_state = 0; - vehicle_invalidate_window(vehicle); - vehicle->vehicle_sprite_type = 0; - vehicle->current_time = -1; - vehicle_update_haunted_house_operating(vehicle); - break; - case RIDE_MODE_CROOKED_HOUSE: - vehicle->status = VEHICLE_STATUS_CROOKED_HOUSE_OPERATING; - vehicle->sub_state = 0; - vehicle_invalidate_window(vehicle); - vehicle->vehicle_sprite_type = 0; - vehicle->current_time = -1; - vehicle_update_crooked_house_operating(vehicle); - break; - default: - vehicle->sub_state = 0; - vehicle_invalidate_window(vehicle); - vehicle->var_CE = 0; - break; } } #pragma pack(push, 1) struct rct_synchronised_vehicle { - uint8_t ride_id; - uint8_t station_id; + uint8_t ride_id; + uint8_t station_id; uint16_t vehicle_id; }; assert_struct_size(rct_synchronised_vehicle, 4); @@ -2740,7 +2734,7 @@ assert_struct_size(rct_synchronised_vehicle, 4); // Synchronised vehicle info static rct_synchronised_vehicle _synchronisedVehicles[SYNCHRONISED_VEHICLE_COUNT] = {}; -static rct_synchronised_vehicle * _lastSynchronisedVehicle = nullptr; +static rct_synchronised_vehicle* _lastSynchronisedVehicle = nullptr; /** * Checks if a map position contains a synchronised ride station and adds the vehicle @@ -2755,7 +2749,7 @@ static bool try_add_synchronised_station(int32_t x, int32_t y, int32_t z) return false; } - rct_tile_element * tileElement = get_station_platform(x, y, z, 2); + rct_tile_element* tileElement = get_station_platform(x, y, z, 2); if (tileElement == nullptr) { /* No station platform element found, @@ -2764,7 +2758,7 @@ static bool try_add_synchronised_station(int32_t x, int32_t y, int32_t z) } int32_t rideIndex = track_element_get_ride_index(tileElement); - Ride * ride = get_ride(rideIndex); + Ride* ride = get_ride(rideIndex); if (!(ride->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS)) { /* Ride is not set to synchronise with adjacent stations. */ @@ -2777,10 +2771,10 @@ static bool try_add_synchronised_station(int32_t x, int32_t y, int32_t z) int32_t stationIndex = tile_element_get_station(tileElement); - rct_synchronised_vehicle * sv = _lastSynchronisedVehicle; - sv->ride_id = rideIndex; - sv->station_id = stationIndex; - sv->vehicle_id = SPRITE_INDEX_NULL; + rct_synchronised_vehicle* sv = _lastSynchronisedVehicle; + sv->ride_id = rideIndex; + sv->station_id = stationIndex; + sv->vehicle_id = SPRITE_INDEX_NULL; _lastSynchronisedVehicle++; /* Ride vehicles are not on the track (e.g. ride is/was under @@ -2807,7 +2801,7 @@ static bool try_add_synchronised_station(int32_t x, int32_t y, int32_t z) continue; } - rct_vehicle * vehicle = GET_VEHICLE(spriteIndex); + rct_vehicle* vehicle = GET_VEHICLE(spriteIndex); if (vehicle->status != VEHICLE_STATUS_WAITING_TO_DEPART) { continue; @@ -2846,16 +2840,16 @@ static bool try_add_synchronised_station(int32_t x, int32_t y, int32_t z) * The vehicle flag VEHICLE_UPDATE_FLAG_WAIT_ON_ADJACENT is cleared for those * vehicles that depart in sync with the vehicle in the param. */ -static bool vehicle_can_depart_synchronised(rct_vehicle * vehicle) +static bool vehicle_can_depart_synchronised(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); - int32_t station = vehicle->current_station; + Ride* ride = get_ride(vehicle->ride); + int32_t station = vehicle->current_station; LocationXY8 location = ride->station_starts[station]; - int32_t x = location.x * 32; - int32_t y = location.y * 32; - int32_t z = ride->station_heights[station]; + int32_t x = location.x * 32; + int32_t y = location.y * 32; + int32_t z = ride->station_heights[station]; - rct_tile_element * tileElement = map_get_track_element_at(x, y, z); + rct_tile_element* tileElement = map_get_track_element_at(x, y, z); if (tileElement == nullptr) { return false; @@ -2894,7 +2888,7 @@ static bool vehicle_can_depart_synchronised(rct_vehicle * vehicle) y = location.y * 32; // Other search direction. - direction = (direction ^ 2) & 3; + direction = (direction ^ 2) & 3; spaceBetween = maxCheckDistance; while (_lastSynchronisedVehicle < &_synchronisedVehicles[SYNCHRONISED_VEHICLE_COUNT - 1]) { @@ -2917,9 +2911,9 @@ static bool vehicle_can_depart_synchronised(rct_vehicle * vehicle) return true; } - for (rct_synchronised_vehicle * sv = _synchronisedVehicles; sv < _lastSynchronisedVehicle; sv++) + for (rct_synchronised_vehicle* sv = _synchronisedVehicles; sv < _lastSynchronisedVehicle; sv++) { - Ride * sv_ride = get_ride(sv->ride_id); + Ride* sv_ride = get_ride(sv->ride_id); if (!(sv_ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)) { @@ -2929,7 +2923,7 @@ static bool vehicle_can_depart_synchronised(rct_vehicle * vehicle) { if (!(sv_ride->station_depart[sv->station_id] & STATION_DEPART_FLAG)) { - sv = _synchronisedVehicles; + sv = _synchronisedVehicles; uint8_t rideId = 0xFF; for (; sv < _lastSynchronisedVehicle; sv++) { @@ -2948,7 +2942,7 @@ static bool vehicle_can_depart_synchronised(rct_vehicle * vehicle) ride = get_ride(rideId); for (int32_t i = 0; i < ride->num_vehicles; i++) { - rct_vehicle * v = GET_VEHICLE(ride->vehicles[i]); + rct_vehicle* v = GET_VEHICLE(ride->vehicles[i]); if (v->status != VEHICLE_STATUS_WAITING_TO_DEPART && v->velocity != 0) { // Here at least one vehicle on the ride is moving. @@ -2979,19 +2973,19 @@ static bool vehicle_can_depart_synchronised(rct_vehicle * vehicle) int32_t numTrainsAtStation = 0; int32_t numTravelingTrains = 0; - int32_t currentStation = sv->station_id; + int32_t currentStation = sv->station_id; for (int32_t i = 0; i < sv_ride->num_vehicles; i++) { uint16_t spriteIndex = sv_ride->vehicles[i]; if (spriteIndex != SPRITE_INDEX_NULL) { - rct_vehicle * otherVehicle = GET_VEHICLE(spriteIndex); + rct_vehicle* otherVehicle = GET_VEHICLE(spriteIndex); if (otherVehicle->status != VEHICLE_STATUS_TRAVELLING) { if (currentStation == otherVehicle->current_station) { - if (otherVehicle->status == VEHICLE_STATUS_WAITING_TO_DEPART || - otherVehicle->status == VEHICLE_STATUS_MOVING_TO_END_OF_STATION) + if (otherVehicle->status == VEHICLE_STATUS_WAITING_TO_DEPART + || otherVehicle->status == VEHICLE_STATUS_MOVING_TO_END_OF_STATION) { numTrainsAtStation++; } @@ -3027,11 +3021,11 @@ static bool vehicle_can_depart_synchronised(rct_vehicle * vehicle) } // At this point all vehicles in _snychronisedVehicles can depart. - for (rct_synchronised_vehicle * sv = _synchronisedVehicles; sv < _lastSynchronisedVehicle; sv++) + for (rct_synchronised_vehicle* sv = _synchronisedVehicles; sv < _lastSynchronisedVehicle; sv++) { if (sv->vehicle_id != SPRITE_INDEX_NULL) { - rct_vehicle * v = GET_VEHICLE(sv->vehicle_id); + rct_vehicle* v = GET_VEHICLE(sv->vehicle_id); v->update_flags &= ~VEHICLE_UPDATE_FLAG_WAIT_ON_ADJACENT; } } @@ -3043,7 +3037,7 @@ static bool vehicle_can_depart_synchronised(rct_vehicle * vehicle) * * rct2: 0x006D9EB0 */ -void vehicle_peep_easteregg_here_we_are(const rct_vehicle * vehicle) +void vehicle_peep_easteregg_here_we_are(const rct_vehicle* vehicle) { uint16_t spriteId = vehicle->sprite_index; do @@ -3051,7 +3045,7 @@ void vehicle_peep_easteregg_here_we_are(const rct_vehicle * vehicle) vehicle = GET_VEHICLE(spriteId); for (int32_t i = 0; i < vehicle->num_peeps; ++i) { - rct_peep * peep = GET_PEEP(vehicle->peep[i]); + rct_peep* peep = GET_PEEP(vehicle->peep[i]); if (peep->peep_flags & PEEP_FLAGS_HERE_WE_ARE) { peep_insert_new_thought(peep, PEEP_THOUGHT_TYPE_HERE_WE_ARE, peep->current_ride); @@ -3064,9 +3058,9 @@ void vehicle_peep_easteregg_here_we_are(const rct_vehicle * vehicle) * Performed when vehicle has completed a full circuit * rct2: 0x006D7338 */ -void vehicle_update_test_finish(rct_vehicle * vehicle) +void vehicle_update_test_finish(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); ride->lifecycle_flags &= ~RIDE_LIFECYCLE_TEST_IN_PROGRESS; vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_TESTING; ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; @@ -3076,13 +3070,13 @@ void vehicle_update_test_finish(rct_vehicle * vehicle) if (ride->time[i - 1] != 0) continue; - uint16_t oldTime = ride->time[i - 1]; + uint16_t oldTime = ride->time[i - 1]; ride->time[i - 1] = ride->time[i]; - ride->time[i] = oldTime; + ride->time[i] = oldTime; - int32_t oldLength = ride->length[i - 1]; + int32_t oldLength = ride->length[i - 1]; ride->length[i - 1] = ride->length[i]; - ride->length[i] = oldLength; + ride->length[i] = oldLength; } uint32_t totalTime = 0; @@ -3091,7 +3085,7 @@ void vehicle_update_test_finish(rct_vehicle * vehicle) totalTime += ride->time[i]; } - totalTime = std::max(totalTime, 1u); + totalTime = std::max(totalTime, 1u); ride->average_speed = ride->average_speed / totalTime; window_invalidate_by_number(WC_RIDE, vehicle->ride); @@ -3101,46 +3095,46 @@ void vehicle_update_test_finish(rct_vehicle * vehicle) * * rct2: 0x006D6BE7 */ -void vehicle_test_reset(rct_vehicle * vehicle) +void vehicle_test_reset(rct_vehicle* vehicle) { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TESTING; - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); ride->lifecycle_flags |= RIDE_LIFECYCLE_TEST_IN_PROGRESS; ride->lifecycle_flags &= ~RIDE_LIFECYCLE_NO_RAW_STATS; - ride->max_speed = 0; - ride->average_speed = 0; - ride->current_test_segment = 0; + ride->max_speed = 0; + ride->average_speed = 0; + ride->current_test_segment = 0; ride->average_speed_test_timeout = 0; - ride->max_positive_vertical_g = FIXED_2DP(1, 0); - ride->max_negative_vertical_g = FIXED_2DP(1, 0); - ride->max_lateral_g = 0; - ride->previous_vertical_g = 0; - ride->previous_lateral_g = 0; - ride->testing_flags = 0; + ride->max_positive_vertical_g = FIXED_2DP(1, 0); + ride->max_negative_vertical_g = FIXED_2DP(1, 0); + ride->max_lateral_g = 0; + ride->previous_vertical_g = 0; + ride->previous_lateral_g = 0; + ride->testing_flags = 0; ride->cur_test_track_location.xy = 0xFFFF; - ride->cur_test_track_z = 0xFF; - ride->turn_count_default = 0; - ride->turn_count_banked = 0; - ride->turn_count_sloped = 0; - ride->inversions = 0; - ride->drops = 0; - ride->sheltered_length = 0; - ride->var_11C = 0; - ride->num_sheltered_sections = 0; - ride->highest_drop_height = 0; - ride->special_track_elements = 0; + ride->cur_test_track_z = 0xFF; + ride->turn_count_default = 0; + ride->turn_count_banked = 0; + ride->turn_count_sloped = 0; + ride->inversions = 0; + ride->drops = 0; + ride->sheltered_length = 0; + ride->var_11C = 0; + ride->num_sheltered_sections = 0; + ride->highest_drop_height = 0; + ride->special_track_elements = 0; memset(&ride->length, 0, 4 * 4); memset(&ride->time, 0, 4 * 2); - ride->total_air_time = 0; + ride->total_air_time = 0; ride->current_test_station = vehicle->current_station; window_invalidate_by_number(WC_RIDE, vehicle->ride); } -static bool vehicle_next_tower_element_is_top(rct_vehicle * vehicle) +static bool vehicle_next_tower_element_is_top(rct_vehicle* vehicle) { - rct_tile_element * tileElement = - map_get_track_element_at_of_type(vehicle->track_x, vehicle->track_y, vehicle->track_z / 8, vehicle->track_type >> 2); + rct_tile_element* tileElement + = map_get_track_element_at_of_type(vehicle->track_x, vehicle->track_y, vehicle->track_z / 8, vehicle->track_type >> 2); if (tileElement->flags & TILE_ELEMENT_FLAG_LAST_TILE) { @@ -3172,19 +3166,19 @@ static bool vehicle_next_tower_element_is_top(rct_vehicle * vehicle) * * rct2: 0x006D986C */ -static void vehicle_update_travelling_boat_hire_setup(rct_vehicle * vehicle) +static void vehicle_update_travelling_boat_hire_setup(rct_vehicle* vehicle) { - vehicle->var_34 = vehicle->sprite_direction; + vehicle->var_34 = vehicle->sprite_direction; vehicle->track_x = vehicle->x & 0xFFE0; vehicle->track_y = vehicle->y & 0xFFE0; - LocationXY8 location = { static_cast((vehicle->track_x + CoordsDirectionDelta[vehicle->sprite_direction >> 3].x) / 32), - static_cast((vehicle->track_y + CoordsDirectionDelta[vehicle->sprite_direction >> 3].y) / - 32) }; + LocationXY8 location + = { static_cast((vehicle->track_x + CoordsDirectionDelta[vehicle->sprite_direction >> 3].x) / 32), + static_cast((vehicle->track_y + CoordsDirectionDelta[vehicle->sprite_direction >> 3].y) / 32) }; vehicle->boat_location = location; - vehicle->var_35 = 0; - vehicle->status = VEHICLE_STATUS_TRAVELLING_BOAT; + vehicle->var_35 = 0; + vehicle->status = VEHICLE_STATUS_TRAVELLING_BOAT; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; vehicle->remaining_distance += 27924; @@ -3196,14 +3190,14 @@ static void vehicle_update_travelling_boat_hire_setup(rct_vehicle * vehicle) * * rct2: 0x006D982F */ -static void vehicle_update_departing_boat_hire(rct_vehicle * vehicle) +static void vehicle_update_departing_boat_hire(rct_vehicle* vehicle) { vehicle->lost_time_out = 0; - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); ride->station_depart[vehicle->current_station] &= STATION_DEPART_FLAG; uint8_t waitingTime = std::max(ride->min_waiting_time, static_cast(3)); - waitingTime = std::min(waitingTime, static_cast(127)); + waitingTime = std::min(waitingTime, static_cast(127)); ride->station_depart[vehicle->current_station] |= waitingTime; vehicle_update_travelling_boat_hire_setup(vehicle); } @@ -3212,10 +3206,10 @@ static void vehicle_update_departing_boat_hire(rct_vehicle * vehicle) * * rct2: 0x006D845B */ -static void vehicle_update_departing(rct_vehicle * vehicle) +static void vehicle_update_departing(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); - rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); + Ride* ride = get_ride(vehicle->ride); + rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); if (rideEntry == nullptr) { return; @@ -3231,12 +3225,12 @@ static void vehicle_update_departing(rct_vehicle * vehicle) ride->lifecycle_flags |= RIDE_LIFECYCLE_BROKEN_DOWN; ride_breakdown_add_news_item(vehicle->ride); - ride->window_invalidate_flags |= - RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST | RIDE_INVALIDATE_RIDE_MAINTENANCE; - ride->mechanic_status = RIDE_MECHANIC_STATUS_CALLING; + ride->window_invalidate_flags + |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST | RIDE_INVALIDATE_RIDE_MAINTENANCE; + ride->mechanic_status = RIDE_MECHANIC_STATUS_CALLING; ride->inspection_station = vehicle->current_station; - ride->breakdown_reason = ride->breakdown_reason_pending; - vehicle->velocity = 0; + ride->breakdown_reason = ride->breakdown_reason_pending; + vehicle->velocity = 0; return; } @@ -3252,7 +3246,6 @@ static void vehicle_update_departing(rct_vehicle * vehicle) if (ride->mode == RIDE_MODE_UPWARD_LAUNCH || (ride->mode == RIDE_MODE_DOWNWARD_LAUNCH && vehicle->var_CE > 1)) { - audio_play_sound_at_location(SOUND_RIDE_LAUNCH_2, vehicle->x, vehicle->y, vehicle->z); } @@ -3277,50 +3270,50 @@ static void vehicle_update_departing(rct_vehicle * vehicle) } } - rct_ride_entry_vehicle * vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; + rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; switch (ride->mode) { - case RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE: - if (vehicle->velocity >= -131940) - vehicle->acceleration = -3298; - break; - case RIDE_MODE_POWERED_LAUNCH_PASSTROUGH: - case RIDE_MODE_POWERED_LAUNCH: - case RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED: - case RIDE_MODE_LIM_POWERED_LAUNCH: - case RIDE_MODE_UPWARD_LAUNCH: - if (ride->type == RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER) - { - if ((ride->launch_speed << 16) > vehicle->velocity) + case RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE: + if (vehicle->velocity >= -131940) + vehicle->acceleration = -3298; + break; + case RIDE_MODE_POWERED_LAUNCH_PASSTROUGH: + case RIDE_MODE_POWERED_LAUNCH: + case RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED: + case RIDE_MODE_LIM_POWERED_LAUNCH: + case RIDE_MODE_UPWARD_LAUNCH: + if (ride->type == RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER) { - vehicle->acceleration = ride->launch_speed << 13; + if ((ride->launch_speed << 16) > vehicle->velocity) + { + vehicle->acceleration = ride->launch_speed << 13; + } + break; } - break; - } - if ((ride->launch_speed << 16) > vehicle->velocity) - vehicle->acceleration = ride->launch_speed << 12; - break; - case RIDE_MODE_DOWNWARD_LAUNCH: - if (vehicle->var_CE >= 1) - { - if ((14 << 16) > vehicle->velocity) - vehicle->acceleration = 14 << 12; - break; - } - // Fall through - case RIDE_MODE_CONTINUOUS_CIRCUIT: - case RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED: - case RIDE_MODE_ROTATING_LIFT: - case RIDE_MODE_FREEFALL_DROP: - case RIDE_MODE_BOAT_HIRE: - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED) + if ((ride->launch_speed << 16) > vehicle->velocity) + vehicle->acceleration = ride->launch_speed << 12; break; + case RIDE_MODE_DOWNWARD_LAUNCH: + if (vehicle->var_CE >= 1) + { + if ((14 << 16) > vehicle->velocity) + vehicle->acceleration = 14 << 12; + break; + } + // Fall through + case RIDE_MODE_CONTINUOUS_CIRCUIT: + case RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED: + case RIDE_MODE_ROTATING_LIFT: + case RIDE_MODE_FREEFALL_DROP: + case RIDE_MODE_BOAT_HIRE: + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED) + break; - if (vehicle->velocity <= 131940) - vehicle->acceleration = 3298; - break; + if (vehicle->velocity <= 131940) + vehicle->acceleration = 3298; + break; } uint32_t flags = vehicle_update_track_motion(vehicle, nullptr); @@ -3449,9 +3442,9 @@ static void vehicle_update_departing(rct_vehicle * vehicle) * boosters do not affect the ride. * rct2: 0x006D8858 */ -static void vehicle_finish_departing(rct_vehicle * vehicle) +static void vehicle_finish_departing(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); if (ride->mode == RIDE_MODE_DOWNWARD_LAUNCH) { @@ -3469,10 +3462,9 @@ static void vehicle_finish_departing(rct_vehicle * vehicle) audio_play_sound_at_location(SOUND_RIDE_LAUNCH_1, vehicle->x, vehicle->y, vehicle->z); } - if (ride->mode != RIDE_MODE_RACE && ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED && - ride->mode != RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) + if (ride->mode != RIDE_MODE_RACE && ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED + && ride->mode != RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) { - ride->station_depart[vehicle->current_station] &= STATION_DEPART_FLAG; uint8_t waitingTime = 3; if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH) @@ -3497,9 +3489,9 @@ static void vehicle_finish_departing(rct_vehicle * vehicle) * * rct2: 0x006DE5CB */ -static void vehicle_check_if_missing(rct_vehicle * vehicle) +static void vehicle_check_if_missing(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED)) return; @@ -3543,15 +3535,15 @@ static void vehicle_check_if_missing(rct_vehicle * vehicle) * * rct2: 0x006DA059 */ -static void vehicle_update_collision_setup(rct_vehicle * vehicle) +static void vehicle_update_collision_setup(rct_vehicle* vehicle) { vehicle->status = VEHICLE_STATUS_CRASHED; vehicle_invalidate_window(vehicle); - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { - rct_vehicle * frontVehicle = vehicle; + rct_vehicle* frontVehicle = vehicle; while (frontVehicle->is_child != 0) frontVehicle = GET_VEHICLE(frontVehicle->prev_vehicle_on_ride); @@ -3573,11 +3565,11 @@ static void vehicle_update_collision_setup(rct_vehicle * vehicle) ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST; vehicle_kill_all_passengers(vehicle); - rct_vehicle * lastVehicle = vehicle; - uint16_t spriteId = vehicle->sprite_index; - for (rct_vehicle * train; spriteId != SPRITE_INDEX_NULL; spriteId = train->next_vehicle_on_train) + rct_vehicle* lastVehicle = vehicle; + uint16_t spriteId = vehicle->sprite_index; + for (rct_vehicle* train; spriteId != SPRITE_INDEX_NULL; spriteId = train->next_vehicle_on_train) { - train = GET_VEHICLE(spriteId); + train = GET_VEHICLE(spriteId); lastVehicle = train; train->sub_state = 2; @@ -3596,19 +3588,19 @@ static void vehicle_update_collision_setup(rct_vehicle * vehicle) train->var_CA = scenario_rand(); train->animation_frame = train->var_CA & 0x7; - train->sprite_width = 13; + train->sprite_width = 13; train->sprite_height_negative = 45; train->sprite_height_positive = 5; - sprite_move(train->x, train->y, train->z, (rct_sprite *)train); - invalidate_sprite_2((rct_sprite *)train); + sprite_move(train->x, train->y, train->z, (rct_sprite*)train); + invalidate_sprite_2((rct_sprite*)train); train->var_4E = 0; } - (GET_VEHICLE(vehicle->prev_vehicle_on_ride))->next_vehicle_on_ride = lastVehicle->next_vehicle_on_ride; + (GET_VEHICLE(vehicle->prev_vehicle_on_ride))->next_vehicle_on_ride = lastVehicle->next_vehicle_on_ride; (GET_VEHICLE(lastVehicle->next_vehicle_on_ride))->prev_vehicle_on_ride = vehicle->prev_vehicle_on_ride; - vehicle->velocity = 0; + vehicle->velocity = 0; } /** rct2: 0x009A3AC4, 0x009A3AC6 */ @@ -3621,7 +3613,7 @@ static constexpr const LocationXY16 stru_9A3AC4[] = { * * rct2: 0x006D9EFE */ -static void vehicle_update_crash_setup(rct_vehicle * vehicle) +static void vehicle_update_crash_setup(rct_vehicle* vehicle) { vehicle->status = VEHICLE_STATUS_CRASHING; vehicle_invalidate_window(vehicle); @@ -3634,16 +3626,16 @@ static void vehicle_update_crash_setup(rct_vehicle * vehicle) int32_t edx = vehicle->velocity >> 10; - rct_vehicle * lastVehicle = vehicle; - uint16_t spriteId = vehicle->sprite_index; - for (rct_vehicle * trainVehicle; spriteId != SPRITE_INDEX_NULL; spriteId = trainVehicle->next_vehicle_on_train) + rct_vehicle* lastVehicle = vehicle; + uint16_t spriteId = vehicle->sprite_index; + for (rct_vehicle* trainVehicle; spriteId != SPRITE_INDEX_NULL; spriteId = trainVehicle->next_vehicle_on_train) { trainVehicle = GET_VEHICLE(spriteId); - lastVehicle = trainVehicle; + lastVehicle = trainVehicle; trainVehicle->sub_state = 0; - int32_t x = stru_9A3AC4[trainVehicle->sprite_direction / 2].x; - int32_t y = stru_9A3AC4[trainVehicle->sprite_direction / 2].y; + int32_t x = stru_9A3AC4[trainVehicle->sprite_direction / 2].x; + int32_t y = stru_9A3AC4[trainVehicle->sprite_direction / 2].y; int32_t ecx = Unk9A37E4[trainVehicle->vehicle_sprite_type] >> 15; x *= ecx; @@ -3670,26 +3662,26 @@ static void vehicle_update_crash_setup(rct_vehicle * vehicle) trainVehicle->track_z = 0; } - (GET_VEHICLE(vehicle->prev_vehicle_on_ride))->next_vehicle_on_ride = lastVehicle->next_vehicle_on_ride; + (GET_VEHICLE(vehicle->prev_vehicle_on_ride))->next_vehicle_on_ride = lastVehicle->next_vehicle_on_ride; (GET_VEHICLE(lastVehicle->next_vehicle_on_ride))->prev_vehicle_on_ride = vehicle->prev_vehicle_on_ride; - vehicle->velocity = 0; + vehicle->velocity = 0; } /** * * rct2: 0x006D8937 */ -static void vehicle_update_travelling(rct_vehicle * vehicle) +static void vehicle_update_travelling(rct_vehicle* vehicle) { vehicle_check_if_missing(vehicle); - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); if (_vehicleBreakdown == 0 && ride->mode == RIDE_MODE_ROTATING_LIFT) return; if (vehicle->sub_state == 2) { - vehicle->velocity = 0; + vehicle->velocity = 0; vehicle->acceleration = 0; vehicle->var_C0--; if (vehicle->var_C0 == 0) @@ -3698,9 +3690,8 @@ static void vehicle_update_travelling(rct_vehicle * vehicle) if (ride->mode == RIDE_MODE_FREEFALL_DROP && vehicle->animation_frame != 0) { - vehicle->animation_frame++; - vehicle->velocity = 0; + vehicle->velocity = 0; vehicle->acceleration = 0; vehicle_invalidate(vehicle); return; @@ -3709,13 +3700,12 @@ static void vehicle_update_travelling(rct_vehicle * vehicle) uint32_t flags = vehicle_update_track_motion(vehicle, nullptr); bool skipCheck = false; - if (flags & (VEHICLE_UPDATE_MOTION_TRACK_FLAG_8 | VEHICLE_UPDATE_MOTION_TRACK_FLAG_9) && - ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE && - vehicle->sub_state == 0) + if (flags & (VEHICLE_UPDATE_MOTION_TRACK_FLAG_8 | VEHICLE_UPDATE_MOTION_TRACK_FLAG_9) + && ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE && vehicle->sub_state == 0) { vehicle->sub_state = 1; - vehicle->velocity = 0; - skipCheck = true; + vehicle->velocity = 0; + skipCheck = true; } if (!skipCheck) @@ -3741,7 +3731,7 @@ static void vehicle_update_travelling(rct_vehicle * vehicle) vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 1; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; return; } } @@ -3763,14 +3753,13 @@ static void vehicle_update_travelling(rct_vehicle * vehicle) return; } vehicle->sub_state = 1; - vehicle->velocity = 0; + vehicle->velocity = 0; } } } if (ride->mode == RIDE_MODE_ROTATING_LIFT && vehicle->sub_state <= 1) { - if (vehicle->sub_state == 0) { if (vehicle->velocity >= -131940) @@ -3781,9 +3770,9 @@ static void vehicle_update_travelling(rct_vehicle * vehicle) { if (vehicle_next_tower_element_is_top(vehicle) == true) { - vehicle->velocity = 0; + vehicle->velocity = 0; vehicle->sub_state = 2; - vehicle->var_C0 = 150; + vehicle->var_C0 = 150; } else { @@ -3842,8 +3831,8 @@ static void vehicle_update_travelling(rct_vehicle * vehicle) if (!(flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_3)) return; - if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE && vehicle->velocity >= 0 && - !(vehicle->update_flags & VEHICLE_UPDATE_FLAG_12)) + if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE && vehicle->velocity >= 0 + && !(vehicle->update_flags & VEHICLE_UPDATE_FLAG_12)) { return; } @@ -3851,7 +3840,7 @@ static void vehicle_update_travelling(rct_vehicle * vehicle) if (ride->mode == RIDE_MODE_POWERED_LAUNCH_PASSTROUGH && vehicle->velocity < 0) return; - vehicle->status = VEHICLE_STATUS_ARRIVING; + vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle->current_station = _vehicleStationIndex; vehicle_invalidate_window(vehicle); vehicle->var_C0 = 0; @@ -3865,47 +3854,47 @@ static void vehicle_update_travelling(rct_vehicle * vehicle) * * rct2: 0x006D8C36 */ -static void vehicle_update_arriving(rct_vehicle * vehicle) +static void vehicle_update_arriving(rct_vehicle* vehicle) { - uint8_t unkF64E35 = 1; - Ride * ride = get_ride(vehicle->ride); + uint8_t unkF64E35 = 1; + Ride* ride = get_ride(vehicle->ride); switch (ride->mode) { - case RIDE_MODE_SWING: - case RIDE_MODE_ROTATION: - case RIDE_MODE_FORWARD_ROTATION: - case RIDE_MODE_BACKWARD_ROTATION: - case RIDE_MODE_FILM_AVENGING_AVIATORS: - case RIDE_MODE_FILM_THRILL_RIDERS: - case RIDE_MODE_BEGINNERS: - case RIDE_MODE_INTENSE: - case RIDE_MODE_BERSERK: - case RIDE_MODE_3D_FILM_MOUSE_TAILS: - case RIDE_MODE_3D_FILM_STORM_CHASERS: - case RIDE_MODE_3D_FILM_SPACE_RAIDERS: - case RIDE_MODE_CIRCUS_SHOW: - case RIDE_MODE_SPACE_RINGS: - case RIDE_MODE_HAUNTED_HOUSE: - case RIDE_MODE_CROOKED_HOUSE: - vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_12; - vehicle->velocity = 0; - vehicle->acceleration = 0; - vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; - vehicle->sub_state = 0; - vehicle_invalidate_window(vehicle); - return; + case RIDE_MODE_SWING: + case RIDE_MODE_ROTATION: + case RIDE_MODE_FORWARD_ROTATION: + case RIDE_MODE_BACKWARD_ROTATION: + case RIDE_MODE_FILM_AVENGING_AVIATORS: + case RIDE_MODE_FILM_THRILL_RIDERS: + case RIDE_MODE_BEGINNERS: + case RIDE_MODE_INTENSE: + case RIDE_MODE_BERSERK: + case RIDE_MODE_3D_FILM_MOUSE_TAILS: + case RIDE_MODE_3D_FILM_STORM_CHASERS: + case RIDE_MODE_3D_FILM_SPACE_RAIDERS: + case RIDE_MODE_CIRCUS_SHOW: + case RIDE_MODE_SPACE_RINGS: + case RIDE_MODE_HAUNTED_HOUSE: + case RIDE_MODE_CROOKED_HOUSE: + vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_12; + vehicle->velocity = 0; + vehicle->acceleration = 0; + vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; + vehicle->sub_state = 0; + vehicle_invalidate_window(vehicle); + return; } - if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN && ride->breakdown_reason_pending == BREAKDOWN_BRAKES_FAILURE && - ride->inspection_station == vehicle->current_station && - ride->mechanic_status != RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES) + if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN && ride->breakdown_reason_pending == BREAKDOWN_BRAKES_FAILURE + && ride->inspection_station == vehicle->current_station + && ride->mechanic_status != RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES) { unkF64E35 = 0; } - rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); - rct_ride_entry_vehicle * vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; + rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); + rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; if (vehicle->sub_state == 0) { @@ -3976,8 +3965,8 @@ static void vehicle_update_arriving(rct_vehicle * vehicle) goto loc_6D8E36; } - if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS && ride->mode != RIDE_MODE_SHUTTLE && - ride->mode != RIDE_MODE_POWERED_LAUNCH) + if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS && ride->mode != RIDE_MODE_SHUTTLE + && ride->mode != RIDE_MODE_POWERED_LAUNCH) { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_12; } @@ -3999,16 +3988,15 @@ loc_6D8E36: if (flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_AT_STATION && unkF64E35 == 0) { - vehicle->status = VEHICLE_STATUS_DEPARTING; + vehicle->status = VEHICLE_STATUS_DEPARTING; vehicle->sub_state = 1; vehicle_invalidate_window(vehicle); return; } - if (!(flags & - (VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_AT_STATION | - VEHICLE_UPDATE_MOTION_TRACK_FLAG_1 | - VEHICLE_UPDATE_MOTION_TRACK_FLAG_5))) + if (!(flags + & (VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_AT_STATION | VEHICLE_UPDATE_MOTION_TRACK_FLAG_1 + | VEHICLE_UPDATE_MOTION_TRACK_FLAG_5))) { if (vehicle->velocity > 98955) vehicle->var_C0 = 0; @@ -4016,14 +4004,13 @@ loc_6D8E36: } vehicle->var_C0++; - if ((flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_1) && - (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_GO_KART) && - (vehicle->var_C0 < 40)) + if ((flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_1) && (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_GO_KART) + && (vehicle->var_C0 < 40)) { return; } - rct_tile_element * tileElement = map_get_track_element_at(vehicle->track_x, vehicle->track_y, vehicle->track_z / 8); + rct_tile_element* tileElement = map_get_track_element_at(vehicle->track_x, vehicle->track_y, vehicle->track_z / 8); if (tileElement == nullptr) { @@ -4037,7 +4024,7 @@ loc_6D8E36: { if (vehicle->num_laps < ride->num_circuits) { - vehicle->status = VEHICLE_STATUS_DEPARTING; + vehicle->status = VEHICLE_STATUS_DEPARTING; vehicle->sub_state = 1; vehicle_invalidate_window(vehicle); return; @@ -4045,7 +4032,7 @@ loc_6D8E36: if (vehicle->num_laps == ride->num_circuits && vehicle->update_flags & VEHICLE_UPDATE_FLAG_12) { - vehicle->status = VEHICLE_STATUS_DEPARTING; + vehicle->status = VEHICLE_STATUS_DEPARTING; vehicle->sub_state = 1; vehicle_invalidate_window(vehicle); return; @@ -4054,7 +4041,7 @@ loc_6D8E36: if (ride->num_circuits != 1 && vehicle->num_laps < ride->num_circuits) { - vehicle->status = VEHICLE_STATUS_DEPARTING; + vehicle->status = VEHICLE_STATUS_DEPARTING; vehicle->sub_state = 1; vehicle_invalidate_window(vehicle); return; @@ -4063,27 +4050,27 @@ loc_6D8E36: if ((ride->mode == RIDE_MODE_UPWARD_LAUNCH || ride->mode == RIDE_MODE_DOWNWARD_LAUNCH) && vehicle->var_CE < 2) { audio_play_sound_at_location(SOUND_RIDE_LAUNCH_2, vehicle->x, vehicle->y, vehicle->z); - vehicle->velocity = 0; + vehicle->velocity = 0; vehicle->acceleration = 0; - vehicle->status = VEHICLE_STATUS_DEPARTING; - vehicle->sub_state = 1; + vehicle->status = VEHICLE_STATUS_DEPARTING; + vehicle->sub_state = 1; vehicle_invalidate_window(vehicle); return; } if (ride->mode == RIDE_MODE_RACE && ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) { - vehicle->status = VEHICLE_STATUS_DEPARTING; + vehicle->status = VEHICLE_STATUS_DEPARTING; vehicle->sub_state = 1; vehicle_invalidate_window(vehicle); return; } vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_12; - vehicle->velocity = 0; + vehicle->velocity = 0; vehicle->acceleration = 0; - vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; - vehicle->sub_state = 0; + vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; + vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); } @@ -4091,7 +4078,7 @@ loc_6D8E36: * * rct2: 0x006D9002 */ -static void vehicle_update_unloading_passengers(rct_vehicle * vehicle) +static void vehicle_update_unloading_passengers(rct_vehicle* vehicle) { if (vehicle->sub_state == 0) { @@ -4101,7 +4088,7 @@ static void vehicle_update_unloading_passengers(rct_vehicle * vehicle) } } - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); if (ride->mode == RIDE_MODE_FORWARD_ROTATION || ride->mode == RIDE_MODE_BACKWARD_ROTATION) { uint8_t seat = ((-vehicle->vehicle_sprite_type) >> 3) & 0xF; @@ -4109,13 +4096,13 @@ static void vehicle_update_unloading_passengers(rct_vehicle * vehicle) { vehicle->next_free_seat -= 2; - rct_peep * peep = GET_PEEP(vehicle->peep[seat * 2]); + rct_peep* peep = GET_PEEP(vehicle->peep[seat * 2]); vehicle->peep[seat * 2] = SPRITE_INDEX_NULL; peep->SetState(PEEP_STATE_LEAVING_RIDE); peep->sub_state = PEEP_RIDE_LEAVE_VEHICLE; - peep = GET_PEEP(vehicle->peep[seat * 2 + 1]); + peep = GET_PEEP(vehicle->peep[seat * 2 + 1]); vehicle->peep[seat * 2 + 1] = SPRITE_INDEX_NULL; peep->SetState(PEEP_STATE_LEAVING_RIDE); @@ -4129,19 +4116,19 @@ static void vehicle_update_unloading_passengers(rct_vehicle * vehicle) if (vehicle->sub_state != 1) return; - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED) && vehicle->update_flags & VEHICLE_UPDATE_FLAG_TESTING && - ride->current_test_segment + 1 >= ride->num_stations) + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED) && vehicle->update_flags & VEHICLE_UPDATE_FLAG_TESTING + && ride->current_test_segment + 1 >= ride->num_stations) { vehicle_update_test_finish(vehicle); } - vehicle->status = VEHICLE_STATUS_MOVING_TO_END_OF_STATION; + vehicle->status = VEHICLE_STATUS_MOVING_TO_END_OF_STATION; vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); return; } uint16_t spriteId = vehicle->sprite_index; - for (rct_vehicle * train; spriteId != SPRITE_INDEX_NULL; spriteId = train->next_vehicle_on_train) + for (rct_vehicle* train; spriteId != SPRITE_INDEX_NULL; spriteId = train->next_vehicle_on_train) { train = GET_VEHICLE(spriteId); if (train->restraints_position != 255) @@ -4153,7 +4140,7 @@ static void vehicle_update_unloading_passengers(rct_vehicle * vehicle) train->next_free_seat = 0; for (uint8_t peepIndex = 0; peepIndex < train->num_peeps; peepIndex++) { - rct_peep * peep = GET_PEEP(train->peep[peepIndex]); + rct_peep* peep = GET_PEEP(train->peep[peepIndex]); peep->SetState(PEEP_STATE_LEAVING_RIDE); peep->sub_state = PEEP_RIDE_LEAVE_VEHICLE; } @@ -4164,19 +4151,19 @@ static void vehicle_update_unloading_passengers(rct_vehicle * vehicle) return; uint16_t spriteId = vehicle->sprite_index; - for (rct_vehicle * train; spriteId != SPRITE_INDEX_NULL; spriteId = train->next_vehicle_on_train) + for (rct_vehicle* train; spriteId != SPRITE_INDEX_NULL; spriteId = train->next_vehicle_on_train) { train = GET_VEHICLE(spriteId); if (train->num_peeps != train->next_free_seat) return; } - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED) && vehicle->update_flags & VEHICLE_UPDATE_FLAG_TESTING && - ride->current_test_segment + 1 >= ride->num_stations) + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED) && vehicle->update_flags & VEHICLE_UPDATE_FLAG_TESTING + && ride->current_test_segment + 1 >= ride->num_stations) { vehicle_update_test_finish(vehicle); } - vehicle->status = VEHICLE_STATUS_MOVING_TO_END_OF_STATION; + vehicle->status = VEHICLE_STATUS_MOVING_TO_END_OF_STATION; vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); } @@ -4185,16 +4172,16 @@ static void vehicle_update_unloading_passengers(rct_vehicle * vehicle) * * rct2: 0x006D9CE9 */ -static void vehicle_update_waiting_for_cable_lift(rct_vehicle * vehicle) +static void vehicle_update_waiting_for_cable_lift(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); - rct_vehicle * cableLift = GET_VEHICLE(ride->cable_lift); + rct_vehicle* cableLift = GET_VEHICLE(ride->cable_lift); if (cableLift->status != VEHICLE_STATUS_WAITING_FOR_PASSENGERS) return; - cableLift->status = VEHICLE_STATUS_WAITING_TO_DEPART; + cableLift->status = VEHICLE_STATUS_WAITING_TO_DEPART; cableLift->cable_lift_target = vehicle->sprite_index; } @@ -4202,9 +4189,9 @@ static void vehicle_update_waiting_for_cable_lift(rct_vehicle * vehicle) * * rct2: 0x006D9D21 */ -static void vehicle_update_travelling_cable_lift(rct_vehicle * vehicle) +static void vehicle_update_travelling_cable_lift(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); if (vehicle->sub_state == 0) { @@ -4215,13 +4202,13 @@ static void vehicle_update_travelling_cable_lift(rct_vehicle * vehicle) ride->lifecycle_flags |= RIDE_LIFECYCLE_BROKEN_DOWN; ride_breakdown_add_news_item(vehicle->ride); - ride->window_invalidate_flags |= - RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST | RIDE_INVALIDATE_RIDE_MAINTENANCE; + ride->window_invalidate_flags + |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST | RIDE_INVALIDATE_RIDE_MAINTENANCE; - ride->mechanic_status = RIDE_MECHANIC_STATUS_CALLING; + ride->mechanic_status = RIDE_MECHANIC_STATUS_CALLING; ride->inspection_station = vehicle->current_station; - ride->breakdown_reason = ride->breakdown_reason_pending; - vehicle->velocity = 0; + ride->breakdown_reason = ride->breakdown_reason_pending; + vehicle->velocity = 0; return; } @@ -4258,7 +4245,7 @@ static void vehicle_update_travelling_cable_lift(rct_vehicle * vehicle) { vehicle->status = VEHICLE_STATUS_TRAVELLING; vehicle_invalidate_window(vehicle); - vehicle->sub_state = 1; + vehicle->sub_state = 1; vehicle->lost_time_out = 0; return; } @@ -4290,13 +4277,13 @@ static void vehicle_update_travelling_cable_lift(rct_vehicle * vehicle) * * rct2: 0x006D9820 */ -static void vehicle_update_travelling_boat(rct_vehicle * vehicle) +static void vehicle_update_travelling_boat(rct_vehicle* vehicle) { vehicle_check_if_missing(vehicle); vehicle_update_motion_boat_hire(vehicle); } -static void loc_6DA9F9(rct_vehicle * vehicle, int32_t x, int32_t y, int32_t bx, int32_t dx) +static void loc_6DA9F9(rct_vehicle* vehicle, int32_t x, int32_t y, int32_t bx, int32_t dx) { vehicle->remaining_distance = 0; if (!vehicle_update_motion_collision_detection(vehicle, x, y, vehicle->z, nullptr)) @@ -4304,15 +4291,15 @@ static void loc_6DA9F9(rct_vehicle * vehicle, int32_t x, int32_t y, int32_t bx, vehicle->track_x = bx; vehicle->track_y = dx; - rct_tile_element * tileElement = map_get_track_element_at(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3); + rct_tile_element* tileElement = map_get_track_element_at(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3); - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); vehicle->track_type = (track_element_get_type(tileElement) << 2) | (ride->boat_hire_return_direction & 3); vehicle->track_progress = 0; - vehicle->status = VEHICLE_STATUS_TRAVELLING; - unk_F64E20.x = x; - unk_F64E20.y = y; + vehicle->status = VEHICLE_STATUS_TRAVELLING; + unk_F64E20.x = x; + unk_F64E20.y = y; } } @@ -4320,14 +4307,14 @@ static void loc_6DA9F9(rct_vehicle * vehicle, int32_t x, int32_t y, int32_t bx, * * rct2: 0x006DA717 */ -static void vehicle_update_motion_boat_hire(rct_vehicle * vehicle) +static void vehicle_update_motion_boat_hire(rct_vehicle* vehicle) { _vehicleMotionTrackFlags = 0; vehicle->velocity += vehicle->acceleration; _vehicleVelocityF64E08 = vehicle->velocity; _vehicleVelocityF64E0C = (vehicle->velocity >> 10) * 42; - rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); if (vehicleEntry == nullptr) { return; @@ -4337,7 +4324,7 @@ static void vehicle_update_motion_boat_hire(rct_vehicle * vehicle) vehicle_update_additional_animation(vehicle); } - _vehicleUnkF64E10 = 1; + _vehicleUnkF64E10 = 1; vehicle->acceleration = 0; vehicle->remaining_distance += _vehicleVelocityF64E0C; if (vehicle->remaining_distance >= 0x368A) @@ -4355,7 +4342,7 @@ static void vehicle_update_motion_boat_hire(rct_vehicle * vehicle) int32_t x = (vehicle->boat_location.x * 32) + 16; int32_t y = (vehicle->boat_location.y * 32) + 16; int32_t z; - uint8_t bl; + uint8_t bl; x -= vehicle->x; if (x >= 0) @@ -4364,7 +4351,7 @@ static void vehicle_update_motion_boat_hire(rct_vehicle * vehicle) if (y < 0) { // loc_6DA81A: - y = -y; + y = -y; bl = 24; if (y <= x * 4) { @@ -4394,8 +4381,8 @@ static void vehicle_update_motion_boat_hire(rct_vehicle * vehicle) if (y < 0) { // loc_6DA83D: - x = -x; - y = -y; + x = -x; + y = -y; bl = 24; if (y <= x * 4) { @@ -4408,7 +4395,7 @@ static void vehicle_update_motion_boat_hire(rct_vehicle * vehicle) } else { - x = -x; + x = -x; bl = 8; if (y <= x * 4) { @@ -4457,9 +4444,9 @@ static void vehicle_update_motion_boat_hire(rct_vehicle * vehicle) } int32_t edi = (vehicle->sprite_direction | (vehicle->var_35 & 1)) & 0x1F; - x = vehicle->x + Unk9A36C4[edi].x; - y = vehicle->y + Unk9A36C4[edi].y; - z = vehicle->z; + x = vehicle->x + Unk9A36C4[edi].x; + y = vehicle->y + Unk9A36C4[edi].y; + z = vehicle->z; if (vehicle_update_motion_collision_detection(vehicle, x, y, z, nullptr)) { vehicle->remaining_distance = 0; @@ -4476,10 +4463,10 @@ static void vehicle_update_motion_boat_hire(rct_vehicle * vehicle) int32_t flooredY = floor2(y, 32); if (flooredX != vehicle->track_x || flooredY != vehicle->track_y) { - if (!vehicle_boat_is_location_accessible(TileCoordsXYZ(CoordsXYZ{x, y, vehicle->track_z}))) + if (!vehicle_boat_is_location_accessible(TileCoordsXYZ(CoordsXYZ{ x, y, vehicle->track_z }))) { // loc_6DA939: - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); bool do_loc_6DAA97 = false; if (vehicle->sub_state != 1) @@ -4488,8 +4475,8 @@ static void vehicle_update_motion_boat_hire(rct_vehicle * vehicle) } else { - if (ride->boat_hire_return_position.x != (flooredX / 32) || - ride->boat_hire_return_position.y != (flooredY / 32)) + if (ride->boat_hire_return_position.x != (flooredX / 32) + || ride->boat_hire_return_position.y != (flooredY / 32)) { do_loc_6DAA97 = true; } @@ -4569,14 +4556,14 @@ static void vehicle_update_motion_boat_hire(rct_vehicle * vehicle) _vehicleUnkF64E10++; } - sprite_move(unk_F64E20.x, unk_F64E20.y, unk_F64E20.z, (rct_sprite *)vehicle); + sprite_move(unk_F64E20.x, unk_F64E20.y, unk_F64E20.z, (rct_sprite*)vehicle); vehicle_invalidate(vehicle); } // loc_6DAAC9: { int32_t edx = vehicle->velocity >> 8; - edx = (edx * edx); + edx = (edx * edx); if (vehicle->velocity < 0) { edx = -edx; @@ -4590,7 +4577,7 @@ static void vehicle_update_motion_boat_hire(rct_vehicle * vehicle) int32_t ecx = -eax; if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED) { - eax = vehicle->speed << 14; + eax = vehicle->speed << 14; int32_t ebx = (vehicle->speed * mass) >> 2; if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_REVERSING_SHUTTLE) { @@ -4610,34 +4597,33 @@ static void vehicle_update_motion_boat_hire(rct_vehicle * vehicle) * * rct2: 0x006DA280 */ -static void vehicle_update_boat_location(rct_vehicle * vehicle) +static void vehicle_update_boat_location(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); - LocationXY8 returnPosition = ride->boat_hire_return_position; - uint8_t returnDirection = ride->boat_hire_return_direction & 3; + Ride* ride = get_ride(vehicle->ride); + LocationXY8 returnPosition = ride->boat_hire_return_position; + uint8_t returnDirection = ride->boat_hire_return_direction & 3; LocationXY8 location = { static_cast((vehicle->x + CoordsDirectionDelta[returnDirection].x) / 32), static_cast((vehicle->y + CoordsDirectionDelta[returnDirection].y) / 32) }; if (location.xy == returnPosition.xy) { - vehicle->sub_state = 1; + vehicle->sub_state = 1; vehicle->boat_location = location; return; } - vehicle->sub_state = 0; - uint8_t curDirection = ((vehicle->sprite_direction + 19) >> 3) & 3; + vehicle->sub_state = 0; + uint8_t curDirection = ((vehicle->sprite_direction + 19) >> 3) & 3; uint8_t randDirection = scenario_rand() & 3; if (vehicle->lost_time_out > 1920) { if (scenario_rand() & 1) { - LocationXY16 destLocation = { - static_cast(returnPosition.x * 32 - CoordsDirectionDelta[returnDirection].x + 16), - static_cast(returnPosition.y * 32 - CoordsDirectionDelta[returnDirection].y + 16) - }; + LocationXY16 destLocation + = { static_cast(returnPosition.x * 32 - CoordsDirectionDelta[returnDirection].x + 16), + static_cast(returnPosition.y * 32 - CoordsDirectionDelta[returnDirection].y + 16) }; destLocation.x -= vehicle->x; destLocation.y -= vehicle->y; @@ -4664,7 +4650,7 @@ static void vehicle_update_boat_location(rct_vehicle * vehicle) int16_t x = vehicle->track_x + CoordsDirectionDelta[(randDirection + rotation) & 3].x; int16_t y = vehicle->track_y + CoordsDirectionDelta[(randDirection + rotation) & 3].y; - if (!vehicle_boat_is_location_accessible(TileCoordsXYZ(CoordsXYZ{x, y, vehicle->track_z}))) + if (!vehicle_boat_is_location_accessible(TileCoordsXYZ(CoordsXYZ{ x, y, vehicle->track_z }))) { continue; } @@ -4673,8 +4659,8 @@ static void vehicle_update_boat_location(rct_vehicle * vehicle) return; } - int16_t x = vehicle->track_x + CoordsDirectionDelta[curDirection & 3].x; - int16_t y = vehicle->track_y + CoordsDirectionDelta[curDirection & 3].y; + int16_t x = vehicle->track_x + CoordsDirectionDelta[curDirection & 3].x; + int16_t y = vehicle->track_y + CoordsDirectionDelta[curDirection & 3].y; vehicle->boat_location.x = x / 32; vehicle->boat_location.y = y / 32; } @@ -4683,9 +4669,9 @@ static void vehicle_update_boat_location(rct_vehicle * vehicle) * * rct2: 0x006DA22A */ -static bool vehicle_boat_is_location_accessible(const TileCoordsXYZ &location) +static bool vehicle_boat_is_location_accessible(const TileCoordsXYZ& location) { - rct_tile_element * tileElement = map_get_first_element_at(location.x, location.y); + rct_tile_element* tileElement = map_get_first_element_at(location.x, location.y); do { if (tileElement->GetType() == TILE_ELEMENT_TYPE_SURFACE) @@ -4711,10 +4697,10 @@ static bool vehicle_boat_is_location_accessible(const TileCoordsXYZ &location) * * rct2: 0x006D9249 */ -static void vehicle_update_swinging(rct_vehicle * vehicle) +static void vehicle_update_swinging(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); - rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); + Ride* ride = get_ride(vehicle->ride); + rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); // SubState for this ride means swinging state // 0 == first swing @@ -4727,8 +4713,8 @@ static void vehicle_update_swinging(rct_vehicle * vehicle) swingState += 4; } - const int8_t * spriteMap = SwingingTimeToSpriteMaps[swingState]; - int8_t spriteType = spriteMap[vehicle->current_time + 1]; + const int8_t* spriteMap = SwingingTimeToSpriteMaps[swingState]; + int8_t spriteType = spriteMap[vehicle->current_time + 1]; // 0x80 indicates that a complete swing has been // completed and the next swing can start @@ -4770,7 +4756,7 @@ static void vehicle_update_swinging(rct_vehicle * vehicle) vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; return; } // Go towards first swing state @@ -4782,12 +4768,12 @@ static void vehicle_update_swinging(rct_vehicle * vehicle) * * rct2: 0x006D9413 */ -static void vehicle_update_ferris_wheel_rotating(rct_vehicle * vehicle) +static void vehicle_update_ferris_wheel_rotating(rct_vehicle* vehicle) { if (_vehicleBreakdown == 0) return; - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); if ((vehicle->ferris_wheel_var_1 -= 1) != 0) return; @@ -4844,7 +4830,7 @@ static void vehicle_update_ferris_wheel_rotating(rct_vehicle * vehicle) if (shouldStop) { - ferris_wheel_var_0 = vehicle->ferris_wheel_var_0; + ferris_wheel_var_0 = vehicle->ferris_wheel_var_0; vehicle->ferris_wheel_var_0 = -abs(ferris_wheel_var_0); vehicle->ferris_wheel_var_1 = abs(ferris_wheel_var_0); } @@ -4866,14 +4852,14 @@ static void vehicle_update_ferris_wheel_rotating(rct_vehicle * vehicle) vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; } /** * * rct2: 0x006D94F2 */ -static void vehicle_update_simulator_operating(rct_vehicle * vehicle) +static void vehicle_update_simulator_operating(rct_vehicle* vehicle) { if (_vehicleBreakdown == 0) return; @@ -4894,26 +4880,26 @@ static void vehicle_update_simulator_operating(rct_vehicle * vehicle) vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; } /** * * rct2: 0x006D92FF */ -static void vehicle_update_rotating(rct_vehicle * vehicle) +static void vehicle_update_rotating(rct_vehicle* vehicle) { if (_vehicleBreakdown == 0) return; - Ride * ride = get_ride(vehicle->ride); - rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); + Ride* ride = get_ride(vehicle->ride); + rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); if (rideEntry == nullptr) { return; } - const uint8_t * timeToSpriteMap; + const uint8_t* timeToSpriteMap; if (rideEntry->flags & RIDE_ENTRY_FLAG_ALTERNATIVE_ROTATION_MODE_1) { timeToSpriteMap = Rotation1TimeToSpriteMaps[vehicle->sub_state]; @@ -4967,7 +4953,7 @@ static void vehicle_update_rotating(rct_vehicle * vehicle) vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; return; } vehicle->sub_state++; @@ -4981,7 +4967,7 @@ static void vehicle_update_rotating(rct_vehicle * vehicle) vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; return; } @@ -4993,7 +4979,7 @@ static void vehicle_update_rotating(rct_vehicle * vehicle) * * rct2: 0x006D97CB */ -static void vehicle_update_space_rings_operating(rct_vehicle * vehicle) +static void vehicle_update_space_rings_operating(rct_vehicle* vehicle) { if (_vehicleBreakdown == 0) return; @@ -5013,7 +4999,7 @@ static void vehicle_update_space_rings_operating(rct_vehicle * vehicle) vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; } } @@ -5021,7 +5007,7 @@ static void vehicle_update_space_rings_operating(rct_vehicle * vehicle) * * rct2: 0x006D9641 */ -static void vehicle_update_haunted_house_operating(rct_vehicle * vehicle) +static void vehicle_update_haunted_house_operating(rct_vehicle* vehicle) { if (_vehicleBreakdown == 0) return; @@ -5043,33 +5029,33 @@ static void vehicle_update_haunted_house_operating(rct_vehicle * vehicle) vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; return; } vehicle->current_time++; switch (vehicle->current_time) { - case 45: - audio_play_sound_at_location(SOUND_HAUNTED_HOUSE_SCARE, vehicle->x, vehicle->y, vehicle->z); - break; - case 75: - vehicle->vehicle_sprite_type = 1; - vehicle_invalidate(vehicle); - break; - case 400: - audio_play_sound_at_location(SOUND_HAUNTED_HOUSE_SCREAM_1, vehicle->x, vehicle->y, vehicle->z); - break; - case 745: - audio_play_sound_at_location(SOUND_HAUNTED_HOUSE_SCARE, vehicle->x, vehicle->y, vehicle->z); - break; - case 775: - vehicle->vehicle_sprite_type = 1; - vehicle_invalidate(vehicle); - break; - case 1100: - audio_play_sound_at_location(SOUND_HAUNTED_HOUSE_SCREAM_2, vehicle->x, vehicle->y, vehicle->z); - break; + case 45: + audio_play_sound_at_location(SOUND_HAUNTED_HOUSE_SCARE, vehicle->x, vehicle->y, vehicle->z); + break; + case 75: + vehicle->vehicle_sprite_type = 1; + vehicle_invalidate(vehicle); + break; + case 400: + audio_play_sound_at_location(SOUND_HAUNTED_HOUSE_SCREAM_1, vehicle->x, vehicle->y, vehicle->z); + break; + case 745: + audio_play_sound_at_location(SOUND_HAUNTED_HOUSE_SCARE, vehicle->x, vehicle->y, vehicle->z); + break; + case 775: + vehicle->vehicle_sprite_type = 1; + vehicle_invalidate(vehicle); + break; + case 1100: + audio_play_sound_at_location(SOUND_HAUNTED_HOUSE_SCREAM_2, vehicle->x, vehicle->y, vehicle->z); + break; } } @@ -5077,7 +5063,7 @@ static void vehicle_update_haunted_house_operating(rct_vehicle * vehicle) * * rct2: 0x006d9781 */ -static void vehicle_update_crooked_house_operating(rct_vehicle * vehicle) +static void vehicle_update_crooked_house_operating(rct_vehicle* vehicle) { if (_vehicleBreakdown == 0) return; @@ -5088,7 +5074,7 @@ static void vehicle_update_crooked_house_operating(rct_vehicle * vehicle) vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; return; } @@ -5099,13 +5085,13 @@ static void vehicle_update_crooked_house_operating(rct_vehicle * vehicle) * * rct2: 0x006D9547 */ -static void vehicle_update_top_spin_operating(rct_vehicle * vehicle) +static void vehicle_update_top_spin_operating(rct_vehicle* vehicle) { if (_vehicleBreakdown == 0) return; - const top_spin_time_to_sprite_map * sprite_map = TopSpinTimeToSpriteMaps[vehicle->sub_state]; - uint8_t rotation = sprite_map[vehicle->current_time + 1].arm_rotation; + const top_spin_time_to_sprite_map* sprite_map = TopSpinTimeToSpriteMaps[vehicle->sub_state]; + uint8_t rotation = sprite_map[vehicle->current_time + 1].arm_rotation; if (rotation != 0xFF) { vehicle->current_time = vehicle->current_time + 1; @@ -5126,21 +5112,21 @@ static void vehicle_update_top_spin_operating(rct_vehicle * vehicle) vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; } /** * * rct2: 0x006D95AD */ -static void vehicle_update_showing_film(rct_vehicle * vehicle) +static void vehicle_update_showing_film(rct_vehicle* vehicle) { int32_t currentTime, totalTime; if (_vehicleBreakdown == 0) return; - totalTime = RideFilmLength[vehicle->sub_state]; + totalTime = RideFilmLength[vehicle->sub_state]; currentTime = vehicle->current_time + 1; if (currentTime <= totalTime) { @@ -5151,7 +5137,7 @@ static void vehicle_update_showing_film(rct_vehicle * vehicle) vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; } } @@ -5159,7 +5145,7 @@ static void vehicle_update_showing_film(rct_vehicle * vehicle) * * rct2: 0x006D95F7 */ -static void vehicle_update_doing_circus_show(rct_vehicle * vehicle) +static void vehicle_update_doing_circus_show(rct_vehicle* vehicle) { if (_vehicleBreakdown == 0) return; @@ -5174,7 +5160,7 @@ static void vehicle_update_doing_circus_show(rct_vehicle * vehicle) vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; } } @@ -5183,9 +5169,9 @@ static void vehicle_update_doing_circus_show(rct_vehicle * vehicle) * rct2: 0x0068B8BD * @returns the map element that the vehicle will collide with or NULL if no collisions. */ -static rct_tile_element * vehicle_check_collision(int16_t x, int16_t y, int16_t z) +static rct_tile_element* vehicle_check_collision(int16_t x, int16_t y, int16_t z) { - rct_tile_element * tileElement = map_get_first_element_at(x / 32, y / 32); + rct_tile_element* tileElement = map_get_first_element_at(x / 32, y / 32); if (tileElement == nullptr) { return nullptr; @@ -5224,18 +5210,18 @@ static rct_tile_element * vehicle_check_collision(int16_t x, int16_t y, int16_t * * rct2: 0x006DE6C6 */ -static void vehicle_kill_all_passengers(rct_vehicle * vehicle) +static void vehicle_kill_all_passengers(rct_vehicle* vehicle) { uint16_t numFatalities = 0; uint16_t spriteId = vehicle->sprite_index; - for (rct_vehicle * curVehicle; spriteId != SPRITE_INDEX_NULL; spriteId = curVehicle->next_vehicle_on_train) + for (rct_vehicle* curVehicle; spriteId != SPRITE_INDEX_NULL; spriteId = curVehicle->next_vehicle_on_train) { curVehicle = GET_VEHICLE(spriteId); numFatalities += curVehicle->num_peeps; } - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); set_format_arg(0, uint16_t, numFatalities); uint8_t crashType = numFatalities == 0 ? RIDE_CRASH_TYPE_NO_FATALITIES : RIDE_CRASH_TYPE_FATALITIES; @@ -5256,7 +5242,7 @@ static void vehicle_kill_all_passengers(rct_vehicle * vehicle) } spriteId = vehicle->sprite_index; - for (rct_vehicle * curVehicle; spriteId != SPRITE_INDEX_NULL; spriteId = curVehicle->next_vehicle_on_train) + for (rct_vehicle* curVehicle; spriteId != SPRITE_INDEX_NULL; spriteId = curVehicle->next_vehicle_on_train) { curVehicle = GET_VEHICLE(spriteId); @@ -5268,7 +5254,7 @@ static void vehicle_kill_all_passengers(rct_vehicle * vehicle) for (uint8_t i = 0; i < curVehicle->num_peeps; i++) { - rct_peep * peep = GET_PEEP(curVehicle->peep[i]); + rct_peep* peep = GET_PEEP(curVehicle->peep[i]); if (peep->outside_of_park == 0) { decrement_guests_in_park(); @@ -5279,21 +5265,20 @@ static void vehicle_kill_all_passengers(rct_vehicle * vehicle) peep_sprite_remove(peep); } - curVehicle->num_peeps = 0; + curVehicle->num_peeps = 0; curVehicle->next_free_seat = 0; } } -static void vehicle_crash_on_land(rct_vehicle * vehicle) +static void vehicle_crash_on_land(rct_vehicle* vehicle) { vehicle->status = VEHICLE_STATUS_CRASHED; vehicle_invalidate_window(vehicle); - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { - - rct_vehicle * frontVehicle = vehicle; + rct_vehicle* frontVehicle = vehicle; while (frontVehicle->is_child != 0) frontVehicle = GET_VEHICLE(frontVehicle->prev_vehicle_on_ride); @@ -5331,27 +5316,26 @@ static void vehicle_crash_on_land(rct_vehicle * vehicle) vehicle->flags |= SPRITE_FLAGS_IS_CRASHED_VEHICLE_SPRITE; vehicle->animation_frame = 0; - vehicle->var_C8 = 0; - vehicle->sprite_width = 13; + vehicle->var_C8 = 0; + vehicle->sprite_width = 13; vehicle->sprite_height_negative = 45; vehicle->sprite_height_positive = 5; - sprite_move(vehicle->x, vehicle->y, vehicle->z, (rct_sprite *)vehicle); + sprite_move(vehicle->x, vehicle->y, vehicle->z, (rct_sprite*)vehicle); vehicle_invalidate(vehicle); vehicle->crash_z = 0; } -static void vehicle_crash_on_water(rct_vehicle * vehicle) +static void vehicle_crash_on_water(rct_vehicle* vehicle) { vehicle->status = VEHICLE_STATUS_CRASHED; vehicle_invalidate_window(vehicle); - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { - - rct_vehicle * frontVehicle = vehicle; + rct_vehicle* frontVehicle = vehicle; while (frontVehicle->is_child != 0) frontVehicle = GET_VEHICLE(frontVehicle->prev_vehicle_on_ride); @@ -5390,12 +5374,12 @@ static void vehicle_crash_on_water(rct_vehicle * vehicle) vehicle->flags |= SPRITE_FLAGS_IS_CRASHED_VEHICLE_SPRITE; vehicle->animation_frame = 0; - vehicle->var_C8 = 0; - vehicle->sprite_width = 13; + vehicle->var_C8 = 0; + vehicle->sprite_width = 13; vehicle->sprite_height_negative = 45; vehicle->sprite_height_positive = 5; - sprite_move(vehicle->x, vehicle->y, vehicle->z, (rct_sprite *)vehicle); + sprite_move(vehicle->x, vehicle->y, vehicle->z, (rct_sprite*)vehicle); vehicle_invalidate(vehicle); vehicle->crash_z = -1; @@ -5405,10 +5389,10 @@ static void vehicle_crash_on_water(rct_vehicle * vehicle) * * rct2: 0x006D98CA */ -static void vehicle_update_crash(rct_vehicle * vehicle) +static void vehicle_update_crash(rct_vehicle* vehicle) { - uint16_t spriteId = vehicle->sprite_index; - rct_vehicle * curVehicle; + uint16_t spriteId = vehicle->sprite_index; + rct_vehicle* curVehicle; do { curVehicle = GET_VEHICLE(spriteId); @@ -5419,8 +5403,10 @@ static void vehicle_update_crash(rct_vehicle * vehicle) curVehicle->crash_z++; if ((scenario_rand() & 0xFFFF) <= 0x1555) { - sprite_misc_explosion_cloud_create(curVehicle->x + ((scenario_rand() & 2) - 1), - curVehicle->y + ((scenario_rand() & 2) - 1), curVehicle->z); + sprite_misc_explosion_cloud_create( + curVehicle->x + ((scenario_rand() & 2) - 1), + curVehicle->y + ((scenario_rand() & 2) - 1), + curVehicle->z); } } if (curVehicle->var_C8 + 7281 > 0xFFFF) @@ -5428,13 +5414,13 @@ static void vehicle_update_crash(rct_vehicle * vehicle) curVehicle->animation_frame++; if (curVehicle->animation_frame >= 8) curVehicle->animation_frame = 0; - invalidate_sprite_2((rct_sprite *)curVehicle); + invalidate_sprite_2((rct_sprite*)curVehicle); } curVehicle->var_C8 += 7281; continue; } - rct_tile_element * collideElement = vehicle_check_collision(curVehicle->x, curVehicle->y, curVehicle->z); + rct_tile_element* collideElement = vehicle_check_collision(curVehicle->x, curVehicle->y, curVehicle->z); if (collideElement == nullptr) { curVehicle->sub_state = 1; @@ -5445,9 +5431,9 @@ static void vehicle_update_crash(rct_vehicle * vehicle) continue; } - int32_t z = tile_element_height(curVehicle->x, curVehicle->y); + int32_t z = tile_element_height(curVehicle->x, curVehicle->y); int16_t waterHeight = (z >> 16) & 0xFFFF; - z = (int16_t)(z & 0xFFFF); + z = (int16_t)(z & 0xFFFF); int16_t zDiff; if (waterHeight != 0) { @@ -5466,9 +5452,9 @@ static void vehicle_update_crash(rct_vehicle * vehicle) continue; } - invalidate_sprite_2((rct_sprite *)curVehicle); + invalidate_sprite_2((rct_sprite*)curVehicle); - LocationXYZ16 curPosition = {curVehicle->x, curVehicle->y, curVehicle->z}; + LocationXYZ16 curPosition = { curVehicle->x, curVehicle->y, curVehicle->z }; curPosition.x += (int8_t)(curVehicle->crash_x >> 8); curPosition.y += (int8_t)(curVehicle->crash_y >> 8); @@ -5483,8 +5469,8 @@ static void vehicle_update_crash(rct_vehicle * vehicle) continue; } - sprite_move(curPosition.x, curPosition.y, curPosition.z, (rct_sprite *)curVehicle); - invalidate_sprite_2((rct_sprite *)curVehicle); + sprite_move(curPosition.x, curPosition.y, curPosition.z, (rct_sprite*)curVehicle); + invalidate_sprite_2((rct_sprite*)curVehicle); if (curVehicle->sub_state == 1) { @@ -5496,17 +5482,17 @@ static void vehicle_update_crash(rct_vehicle * vehicle) * * rct2: 0x006D7888 */ -static void vehicle_update_sound(rct_vehicle * vehicle) +static void vehicle_update_sound(rct_vehicle* vehicle) { - Ride * ride; - rct_ride_entry * rideEntry; + Ride* ride; + rct_ride_entry* rideEntry; // frictionVolume (bl) should be set before hand uint8_t frictionVolume = 255, frictionId = 255; // bh screamVolume should be set before hand - uint8_t screamId = 255, screamVolume = 255; + uint8_t screamId = 255, screamVolume = 255; uint16_t soundIdVolume; - ride = get_ride(vehicle->ride); + ride = get_ride(vehicle->ride); rideEntry = get_ride_entry(vehicle->ride_subtype); if (rideEntry == nullptr) @@ -5514,7 +5500,7 @@ static void vehicle_update_sound(rct_vehicle * vehicle) return; } - rct_ride_entry_vehicle * vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; + rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; int32_t ecx = abs(vehicle->velocity) - 0x10000; if (ecx >= 0) @@ -5526,81 +5512,81 @@ static void vehicle_update_sound(rct_vehicle * vehicle) switch (vehicleEntry->sound_range) { - case 3: - screamId = vehicle->scream_sound_id; - if (!(gCurrentTicks & 0x7F)) - { - if (vehicle->velocity < 0x40000 || vehicle->scream_sound_id != 255) - goto loc_6D7A97; - - if ((scenario_rand() & 0xFFFF) <= 0x5555) + case 3: + screamId = vehicle->scream_sound_id; + if (!(gCurrentTicks & 0x7F)) { - vehicle->scream_sound_id = SOUND_TRAIN_WHISTLE; - screamVolume = 255; - break; + if (vehicle->velocity < 0x40000 || vehicle->scream_sound_id != 255) + goto loc_6D7A97; + + if ((scenario_rand() & 0xFFFF) <= 0x5555) + { + vehicle->scream_sound_id = SOUND_TRAIN_WHISTLE; + screamVolume = 255; + break; + } } - } - if (screamId == NO_SCREAM) - screamId = 255; - screamVolume = 255; - break; - - case 4: - screamId = vehicle->scream_sound_id; - if (!(gCurrentTicks & 0x7F)) - { - if (vehicle->velocity < 0x40000 || vehicle->scream_sound_id != 255) - goto loc_6D7A97; - - if ((scenario_rand() & 0xFFFF) <= 0x5555) - { - vehicle->scream_sound_id = SOUND_TRAM; - screamVolume = 255; - break; - } - } - if (screamId == NO_SCREAM) - screamId = 255; - screamVolume = 255; - break; - - default: - if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_RIDERS_SCREAM)) - { - screamId = vehicle_update_scream_sound(vehicle); if (screamId == NO_SCREAM) screamId = 255; - if (screamId == 255) - goto loc_6D7A97; + screamVolume = 255; break; - } - loc_6D7A97: - vehicle->scream_sound_id = 255; - if (ride->type < Util::CountOf(RideLiftData)) - { - // Get lift hill sound - screamId = RideLiftData[ride->type].sound_id; - screamVolume = 243; - if (!(vehicle->sound2_flags & VEHICLE_SOUND2_FLAGS_LIFT_HILL)) + case 4: + screamId = vehicle->scream_sound_id; + if (!(gCurrentTicks & 0x7F)) + { + if (vehicle->velocity < 0x40000 || vehicle->scream_sound_id != 255) + goto loc_6D7A97; + + if ((scenario_rand() & 0xFFFF) <= 0x5555) + { + vehicle->scream_sound_id = SOUND_TRAM; + screamVolume = 255; + break; + } + } + if (screamId == NO_SCREAM) screamId = 255; - } + screamVolume = 255; + break; + + default: + if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_RIDERS_SCREAM)) + { + screamId = vehicle_update_scream_sound(vehicle); + if (screamId == NO_SCREAM) + screamId = 255; + if (screamId == 255) + goto loc_6D7A97; + break; + } + + loc_6D7A97: + vehicle->scream_sound_id = 255; + if (ride->type < Util::CountOf(RideLiftData)) + { + // Get lift hill sound + screamId = RideLiftData[ride->type].sound_id; + screamVolume = 243; + if (!(vehicle->sound2_flags & VEHICLE_SOUND2_FLAGS_LIFT_HILL)) + screamId = 255; + } } // Friction sound - soundIdVolume = sub_6D7AC0(vehicle->sound1_id, vehicle->sound1_volume, frictionId, frictionVolume); - vehicle->sound1_id = soundIdVolume & 0xFF; + soundIdVolume = sub_6D7AC0(vehicle->sound1_id, vehicle->sound1_volume, frictionId, frictionVolume); + vehicle->sound1_id = soundIdVolume & 0xFF; vehicle->sound1_volume = (soundIdVolume >> 8) & 0xFF; // Scream sound - soundIdVolume = sub_6D7AC0(vehicle->sound2_id, vehicle->sound2_volume, screamId, screamVolume); - vehicle->sound2_id = soundIdVolume & 0xFF; + soundIdVolume = sub_6D7AC0(vehicle->sound2_id, vehicle->sound2_volume, screamId, screamVolume); + vehicle->sound2_id = soundIdVolume & 0xFF; vehicle->sound2_volume = (soundIdVolume >> 8) & 0xFF; - //Calculate Sound Vector (used for sound frequency calcs) + // Calculate Sound Vector (used for sound frequency calcs) int32_t soundDirection = SpriteDirectionToSoundDirection[vehicle->sprite_direction]; - int32_t soundVector = ((vehicle->velocity >> 14) * soundDirection) >> 14; - soundVector = Math::Clamp(-127, soundVector, 127); + int32_t soundVector = ((vehicle->velocity >> 14) * soundDirection) >> 14; + soundVector = Math::Clamp(-127, soundVector, 127); vehicle->sound_vector_factor = soundVector & 0xFF; } @@ -5609,16 +5595,16 @@ static void vehicle_update_sound(rct_vehicle * vehicle) * * rct2: 0x006D796B */ -static int32_t vehicle_update_scream_sound(rct_vehicle * vehicle) +static int32_t vehicle_update_scream_sound(rct_vehicle* vehicle) { - uint32_t r; - uint16_t spriteIndex; - rct_ride_entry * rideEntry; - rct_vehicle * vehicle2; + uint32_t r; + uint16_t spriteIndex; + rct_ride_entry* rideEntry; + rct_vehicle* vehicle2; rideEntry = get_ride_entry(vehicle->ride_subtype); - rct_ride_entry_vehicle * vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; + rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; int32_t totalNumPeeps = vehicle_get_total_num_peeps(vehicle); if (totalNumPeeps == 0) @@ -5671,18 +5657,18 @@ produceScream: { switch (vehicleEntry->sound_range) { - case 0: - vehicle->scream_sound_id = byte_9A3A14[r % 2]; - break; - case 1: - vehicle->scream_sound_id = byte_9A3A18[r % 7]; - break; - case 2: - vehicle->scream_sound_id = byte_9A3A16[r % 2]; - break; - default: - vehicle->scream_sound_id = NO_SCREAM; - break; + case 0: + vehicle->scream_sound_id = byte_9A3A14[r % 2]; + break; + case 1: + vehicle->scream_sound_id = byte_9A3A18[r % 7]; + break; + case 2: + vehicle->scream_sound_id = byte_9A3A16[r % 2]; + break; + default: + vehicle->scream_sound_id = NO_SCREAM; + break; } } else @@ -5700,503 +5686,503 @@ produceScream: * dx: lateralG * esi: vehicle */ -void vehicle_get_g_forces(const rct_vehicle * vehicle, int32_t * verticalG, int32_t * lateralG) +void vehicle_get_g_forces(const rct_vehicle* vehicle, int32_t* verticalG, int32_t* lateralG) { - int32_t gForceVert = (((int64_t)0x280000) * Unk9A37E4[vehicle->vehicle_sprite_type]) >> 32; - gForceVert = (((int64_t)gForceVert) * Unk9A39C4[vehicle->bank_rotation]) >> 32; + int32_t gForceVert = (((int64_t)0x280000) * Unk9A37E4[vehicle->vehicle_sprite_type]) >> 32; + gForceVert = (((int64_t)gForceVert) * Unk9A39C4[vehicle->bank_rotation]) >> 32; int32_t lateralFactor = 0, vertFactor = 0; // Note shr has meant some of the below functions cast a known negative number to // unsigned. Possibly an original bug but will be left implemented. switch (vehicle->track_type >> 2) { - case TRACK_ELEM_FLAT: - case TRACK_ELEM_END_STATION: - case TRACK_ELEM_BEGIN_STATION: - case TRACK_ELEM_MIDDLE_STATION: - case TRACK_ELEM_25_DEG_UP: - case TRACK_ELEM_60_DEG_UP: // - case TRACK_ELEM_25_DEG_DOWN: - case TRACK_ELEM_60_DEG_DOWN: // - case TRACK_ELEM_FLAT_TO_LEFT_BANK: - case TRACK_ELEM_FLAT_TO_RIGHT_BANK: - case TRACK_ELEM_LEFT_BANK_TO_FLAT: - case TRACK_ELEM_RIGHT_BANK_TO_FLAT: // - case TRACK_ELEM_LEFT_BANK: - case TRACK_ELEM_RIGHT_BANK: - case TRACK_ELEM_TOWER_BASE: - case TRACK_ELEM_TOWER_SECTION: - case TRACK_ELEM_FLAT_COVERED: - case TRACK_ELEM_25_DEG_UP_COVERED: - case TRACK_ELEM_60_DEG_UP_COVERED: - case TRACK_ELEM_25_DEG_DOWN_COVERED: - case TRACK_ELEM_60_DEG_DOWN_COVERED: - case TRACK_ELEM_BRAKES: - case TRACK_ELEM_ROTATION_CONTROL_TOGGLE: - case TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP: - case TRACK_ELEM_25_DEG_UP_LEFT_BANKED: - case TRACK_ELEM_25_DEG_UP_RIGHT_BANKED: - case TRACK_ELEM_WATERFALL: - case TRACK_ELEM_RAPIDS: - case TRACK_ELEM_ON_RIDE_PHOTO: - case TRACK_ELEM_25_DEG_DOWN_LEFT_BANKED: - case TRACK_ELEM_25_DEG_DOWN_RIGHT_BANKED: - case TRACK_ELEM_WHIRLPOOL: - case TRACK_ELEM_REVERSE_FREEFALL_VERTICAL: - case TRACK_ELEM_90_DEG_UP: - case TRACK_ELEM_90_DEG_DOWN: - case TRACK_ELEM_DIAG_FLAT: - case TRACK_ELEM_DIAG_25_DEG_UP: - case TRACK_ELEM_DIAG_60_DEG_UP: - case TRACK_ELEM_DIAG_25_DEG_DOWN: - case TRACK_ELEM_DIAG_60_DEG_DOWN: - case TRACK_ELEM_DIAG_FLAT_TO_LEFT_BANK: - case TRACK_ELEM_DIAG_FLAT_TO_RIGHT_BANK: - case TRACK_ELEM_DIAG_LEFT_BANK_TO_FLAT: - case TRACK_ELEM_DIAG_RIGHT_BANK_TO_FLAT: - case TRACK_ELEM_DIAG_LEFT_BANK: - case TRACK_ELEM_DIAG_RIGHT_BANK: - case TRACK_ELEM_LOG_FLUME_REVERSER: - case TRACK_ELEM_SPINNING_TUNNEL: - case TRACK_ELEM_POWERED_LIFT: - case TRACK_ELEM_MINI_GOLF_HOLE_A: - case TRACK_ELEM_MINI_GOLF_HOLE_B: - case TRACK_ELEM_MINI_GOLF_HOLE_C: - case TRACK_ELEM_MINI_GOLF_HOLE_D: - case TRACK_ELEM_MINI_GOLF_HOLE_E: - case TRACK_ELEM_LEFT_REVERSER: - case TRACK_ELEM_RIGHT_REVERSER: - case TRACK_ELEM_AIR_THRUST_VERTICAL_DOWN: - case TRACK_ELEM_BLOCK_BRAKES: - case TRACK_ELEM_25_DEG_UP_TO_LEFT_BANKED_25_DEG_UP: - case TRACK_ELEM_25_DEG_UP_TO_RIGHT_BANKED_25_DEG_UP: - case TRACK_ELEM_LEFT_BANKED_25_DEG_UP_TO_25_DEG_UP: - case TRACK_ELEM_RIGHT_BANKED_25_DEG_UP_TO_25_DEG_UP: - case TRACK_ELEM_25_DEG_DOWN_TO_LEFT_BANKED_25_DEG_DOWN: - case TRACK_ELEM_25_DEG_DOWN_TO_RIGHT_BANKED_25_DEG_DOWN: - case TRACK_ELEM_LEFT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN: - case TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN: - case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_UP: - case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_UP: - case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_DOWN: - case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_DOWN: - // 6d73FF - // Do nothing - break; - case TRACK_ELEM_FLAT_TO_25_DEG_UP: // - case TRACK_ELEM_25_DEG_DOWN_TO_FLAT: // - case TRACK_ELEM_LEFT_BANK_TO_25_DEG_UP: - case TRACK_ELEM_RIGHT_BANK_TO_25_DEG_UP: - case TRACK_ELEM_25_DEG_DOWN_TO_LEFT_BANK: - case TRACK_ELEM_25_DEG_DOWN_TO_RIGHT_BANK: - case TRACK_ELEM_FLAT_TO_25_DEG_UP_COVERED: - case TRACK_ELEM_25_DEG_DOWN_TO_FLAT_COVERED: - case TRACK_ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_UP: - case TRACK_ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_UP: - case TRACK_ELEM_LEFT_BANKED_25_DEG_DOWN_TO_LEFT_BANKED_FLAT: - case TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_RIGHT_BANKED_FLAT: - case TRACK_ELEM_FLAT_TO_LEFT_BANKED_25_DEG_UP: - case TRACK_ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_UP: - case TRACK_ELEM_LEFT_BANKED_25_DEG_DOWN_TO_FLAT: - case TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_FLAT: - vertFactor = 103; - // 6d7509 - break; - case TRACK_ELEM_25_DEG_UP_TO_FLAT: // - case TRACK_ELEM_FLAT_TO_25_DEG_DOWN: // - case TRACK_ELEM_25_DEG_UP_TO_LEFT_BANK: - case TRACK_ELEM_25_DEG_UP_TO_RIGHT_BANK: - case TRACK_ELEM_LEFT_BANK_TO_25_DEG_DOWN: - case TRACK_ELEM_RIGHT_BANK_TO_25_DEG_DOWN: - case TRACK_ELEM_25_DEG_UP_TO_FLAT_COVERED: - case TRACK_ELEM_FLAT_TO_25_DEG_DOWN_COVERED: - case TRACK_ELEM_CABLE_LIFT_HILL: - case TRACK_ELEM_LEFT_BANKED_25_DEG_UP_TO_LEFT_BANKED_FLAT: - case TRACK_ELEM_RIGHT_BANKED_25_DEG_UP_TO_RIGHT_BANKED_FLAT: - case TRACK_ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_DOWN: - case TRACK_ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN: - case TRACK_ELEM_LEFT_BANKED_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_RIGHT_BANKED_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_FLAT_TO_LEFT_BANKED_25_DEG_DOWN: - case TRACK_ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN: - vertFactor = -103; - // 6d7569 - break; - case TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP: // - case TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN: // - case TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED: - case TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED: - vertFactor = 82; - // 6d7545 - break; - case TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP: // - case TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN: // - case TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED: - case TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED: - vertFactor = -82; - // 6d7551 - break; - case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES: // - case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP: - case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN: - case TRACK_ELEM_LEFT_TWIST_DOWN_TO_UP: - case TRACK_ELEM_LEFT_TWIST_UP_TO_DOWN: - case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED: - case TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_UP: - case TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN: - case TRACK_ELEM_LEFT_FLYER_TWIST_UP: - case TRACK_ELEM_LEFT_FLYER_TWIST_DOWN: - case TRACK_ELEM_LEFT_HEARTLINE_ROLL: - lateralFactor = 98; - // 6d7590 - break; - case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES: // - case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP: - case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN: - case TRACK_ELEM_RIGHT_TWIST_DOWN_TO_UP: - case TRACK_ELEM_RIGHT_TWIST_UP_TO_DOWN: - case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED: - case TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_UP: - case TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN: - case TRACK_ELEM_RIGHT_FLYER_TWIST_UP: - case TRACK_ELEM_RIGHT_FLYER_TWIST_DOWN: - case TRACK_ELEM_RIGHT_HEARTLINE_ROLL: - lateralFactor = -98; - // 6d75B7 - break; - case TRACK_ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES: - case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE: - case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE: - case TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP: - case TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN: - vertFactor = 200; - lateralFactor = 160; - // 6d75E1 - break; - case TRACK_ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES: - case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE: - case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE: - case TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP: - case TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN: - vertFactor = 200; - lateralFactor = -160; - // 6d75F0 - break; - case TRACK_ELEM_S_BEND_LEFT: - case TRACK_ELEM_S_BEND_LEFT_COVERED: - lateralFactor = (vehicle->track_progress < 48) ? 98 : -98; - // 6d75FF - break; - case TRACK_ELEM_S_BEND_RIGHT: - case TRACK_ELEM_S_BEND_RIGHT_COVERED: - lateralFactor = (vehicle->track_progress < 48) ? -98 : 98; - // 6d7608 - break; - case TRACK_ELEM_LEFT_VERTICAL_LOOP: - case TRACK_ELEM_RIGHT_VERTICAL_LOOP: - vertFactor = (abs(vehicle->track_progress - 155) / 2) + 28; - // 6d7690 - break; - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES: - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP: - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN: - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED: - case TRACK_ELEM_LEFT_CURVED_LIFT_HILL: - lateralFactor = 59; - // 6d7704 - break; - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES: - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP: - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN: - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED: - case TRACK_ELEM_RIGHT_CURVED_LIFT_HILL: - lateralFactor = -59; - // 6d7710 - break; - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_BANK: - case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL: - case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL: - vertFactor = 100; - lateralFactor = 100; - // 6d7782 - break; - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK: - case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL: - case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL: - vertFactor = 100; - lateralFactor = -100; - // 6d778E - break; - case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE: - lateralFactor = 45; - // 6d779A - break; - case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE: - lateralFactor = -45; - // 6d77A3 - break; - case TRACK_ELEM_HALF_LOOP_UP: - case TRACK_ELEM_FLYER_HALF_LOOP_UP: - vertFactor = (((uint16_t)(-(vehicle->track_progress - 155))) / 2) + 28; - // 6d763E - break; - case TRACK_ELEM_HALF_LOOP_DOWN: - case TRACK_ELEM_FLYER_HALF_LOOP_DOWN: - vertFactor = (vehicle->track_progress / 2) + 28; - // 6d7656 - break; - case TRACK_ELEM_LEFT_CORKSCREW_UP: - case TRACK_ELEM_RIGHT_CORKSCREW_DOWN: - case TRACK_ELEM_LEFT_FLYER_CORKSCREW_UP: - case TRACK_ELEM_RIGHT_FLYER_CORKSCREW_DOWN: - vertFactor = 52; - lateralFactor = 70; - // 6d76AA - break; - case TRACK_ELEM_RIGHT_CORKSCREW_UP: - case TRACK_ELEM_LEFT_CORKSCREW_DOWN: - case TRACK_ELEM_RIGHT_FLYER_CORKSCREW_UP: - case TRACK_ELEM_LEFT_FLYER_CORKSCREW_DOWN: - vertFactor = 52; - lateralFactor = -70; - // 6d76B9 - break; - case TRACK_ELEM_FLAT_TO_60_DEG_UP: - case TRACK_ELEM_60_DEG_DOWN_TO_FLAT: - vertFactor = 56; - // 6d747C - break; - case TRACK_ELEM_60_DEG_UP_TO_FLAT: - case TRACK_ELEM_FLAT_TO_60_DEG_DOWN: - case TRACK_ELEM_BRAKE_FOR_DROP: - vertFactor = -56; - // 6d7488 - break; - case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP: - case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN: - lateralFactor = 88; - // 6d7770 - break; - case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP: - case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN: - lateralFactor = -88; - // 6d7779 - break; - case TRACK_ELEM_WATER_SPLASH: - vertFactor = -150; - if (vehicle->track_progress < 32) + case TRACK_ELEM_FLAT: + case TRACK_ELEM_END_STATION: + case TRACK_ELEM_BEGIN_STATION: + case TRACK_ELEM_MIDDLE_STATION: + case TRACK_ELEM_25_DEG_UP: + case TRACK_ELEM_60_DEG_UP: // + case TRACK_ELEM_25_DEG_DOWN: + case TRACK_ELEM_60_DEG_DOWN: // + case TRACK_ELEM_FLAT_TO_LEFT_BANK: + case TRACK_ELEM_FLAT_TO_RIGHT_BANK: + case TRACK_ELEM_LEFT_BANK_TO_FLAT: + case TRACK_ELEM_RIGHT_BANK_TO_FLAT: // + case TRACK_ELEM_LEFT_BANK: + case TRACK_ELEM_RIGHT_BANK: + case TRACK_ELEM_TOWER_BASE: + case TRACK_ELEM_TOWER_SECTION: + case TRACK_ELEM_FLAT_COVERED: + case TRACK_ELEM_25_DEG_UP_COVERED: + case TRACK_ELEM_60_DEG_UP_COVERED: + case TRACK_ELEM_25_DEG_DOWN_COVERED: + case TRACK_ELEM_60_DEG_DOWN_COVERED: + case TRACK_ELEM_BRAKES: + case TRACK_ELEM_ROTATION_CONTROL_TOGGLE: + case TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP: + case TRACK_ELEM_25_DEG_UP_LEFT_BANKED: + case TRACK_ELEM_25_DEG_UP_RIGHT_BANKED: + case TRACK_ELEM_WATERFALL: + case TRACK_ELEM_RAPIDS: + case TRACK_ELEM_ON_RIDE_PHOTO: + case TRACK_ELEM_25_DEG_DOWN_LEFT_BANKED: + case TRACK_ELEM_25_DEG_DOWN_RIGHT_BANKED: + case TRACK_ELEM_WHIRLPOOL: + case TRACK_ELEM_REVERSE_FREEFALL_VERTICAL: + case TRACK_ELEM_90_DEG_UP: + case TRACK_ELEM_90_DEG_DOWN: + case TRACK_ELEM_DIAG_FLAT: + case TRACK_ELEM_DIAG_25_DEG_UP: + case TRACK_ELEM_DIAG_60_DEG_UP: + case TRACK_ELEM_DIAG_25_DEG_DOWN: + case TRACK_ELEM_DIAG_60_DEG_DOWN: + case TRACK_ELEM_DIAG_FLAT_TO_LEFT_BANK: + case TRACK_ELEM_DIAG_FLAT_TO_RIGHT_BANK: + case TRACK_ELEM_DIAG_LEFT_BANK_TO_FLAT: + case TRACK_ELEM_DIAG_RIGHT_BANK_TO_FLAT: + case TRACK_ELEM_DIAG_LEFT_BANK: + case TRACK_ELEM_DIAG_RIGHT_BANK: + case TRACK_ELEM_LOG_FLUME_REVERSER: + case TRACK_ELEM_SPINNING_TUNNEL: + case TRACK_ELEM_POWERED_LIFT: + case TRACK_ELEM_MINI_GOLF_HOLE_A: + case TRACK_ELEM_MINI_GOLF_HOLE_B: + case TRACK_ELEM_MINI_GOLF_HOLE_C: + case TRACK_ELEM_MINI_GOLF_HOLE_D: + case TRACK_ELEM_MINI_GOLF_HOLE_E: + case TRACK_ELEM_LEFT_REVERSER: + case TRACK_ELEM_RIGHT_REVERSER: + case TRACK_ELEM_AIR_THRUST_VERTICAL_DOWN: + case TRACK_ELEM_BLOCK_BRAKES: + case TRACK_ELEM_25_DEG_UP_TO_LEFT_BANKED_25_DEG_UP: + case TRACK_ELEM_25_DEG_UP_TO_RIGHT_BANKED_25_DEG_UP: + case TRACK_ELEM_LEFT_BANKED_25_DEG_UP_TO_25_DEG_UP: + case TRACK_ELEM_RIGHT_BANKED_25_DEG_UP_TO_25_DEG_UP: + case TRACK_ELEM_25_DEG_DOWN_TO_LEFT_BANKED_25_DEG_DOWN: + case TRACK_ELEM_25_DEG_DOWN_TO_RIGHT_BANKED_25_DEG_DOWN: + case TRACK_ELEM_LEFT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN: + case TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN: + case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_UP: + case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_UP: + case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_DOWN: + case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_DOWN: + // 6d73FF + // Do nothing break; - vertFactor = 150; - if (vehicle->track_progress < 64) + case TRACK_ELEM_FLAT_TO_25_DEG_UP: // + case TRACK_ELEM_25_DEG_DOWN_TO_FLAT: // + case TRACK_ELEM_LEFT_BANK_TO_25_DEG_UP: + case TRACK_ELEM_RIGHT_BANK_TO_25_DEG_UP: + case TRACK_ELEM_25_DEG_DOWN_TO_LEFT_BANK: + case TRACK_ELEM_25_DEG_DOWN_TO_RIGHT_BANK: + case TRACK_ELEM_FLAT_TO_25_DEG_UP_COVERED: + case TRACK_ELEM_25_DEG_DOWN_TO_FLAT_COVERED: + case TRACK_ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_UP: + case TRACK_ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_UP: + case TRACK_ELEM_LEFT_BANKED_25_DEG_DOWN_TO_LEFT_BANKED_FLAT: + case TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_RIGHT_BANKED_FLAT: + case TRACK_ELEM_FLAT_TO_LEFT_BANKED_25_DEG_UP: + case TRACK_ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_UP: + case TRACK_ELEM_LEFT_BANKED_25_DEG_DOWN_TO_FLAT: + case TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_FLAT: + vertFactor = 103; + // 6d7509 break; - vertFactor = 0; - if (vehicle->track_progress < 96) + case TRACK_ELEM_25_DEG_UP_TO_FLAT: // + case TRACK_ELEM_FLAT_TO_25_DEG_DOWN: // + case TRACK_ELEM_25_DEG_UP_TO_LEFT_BANK: + case TRACK_ELEM_25_DEG_UP_TO_RIGHT_BANK: + case TRACK_ELEM_LEFT_BANK_TO_25_DEG_DOWN: + case TRACK_ELEM_RIGHT_BANK_TO_25_DEG_DOWN: + case TRACK_ELEM_25_DEG_UP_TO_FLAT_COVERED: + case TRACK_ELEM_FLAT_TO_25_DEG_DOWN_COVERED: + case TRACK_ELEM_CABLE_LIFT_HILL: + case TRACK_ELEM_LEFT_BANKED_25_DEG_UP_TO_LEFT_BANKED_FLAT: + case TRACK_ELEM_RIGHT_BANKED_25_DEG_UP_TO_RIGHT_BANKED_FLAT: + case TRACK_ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_DOWN: + case TRACK_ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN: + case TRACK_ELEM_LEFT_BANKED_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_RIGHT_BANKED_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_FLAT_TO_LEFT_BANKED_25_DEG_DOWN: + case TRACK_ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN: + vertFactor = -103; + // 6d7569 break; - vertFactor = 150; - if (vehicle->track_progress < 128) + case TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP: // + case TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN: // + case TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED: + case TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED: + vertFactor = 82; + // 6d7545 break; - vertFactor = -150; - // 6d7408 - break; - case TRACK_ELEM_FLAT_TO_60_DEG_UP_LONG_BASE: - case TRACK_ELEM_FLAT_TO_60_DEG_DOWN_LONG_BASE: - vertFactor = 160; - // 6d74F1 - break; - case TRACK_ELEM_60_DEG_UP_TO_FLAT_LONG_BASE: - case TRACK_ELEM_60_DEG_UP_TO_FLAT_LONG_BASE_122: - vertFactor = -160; - // 6d74FD - break; - case TRACK_ELEM_REVERSE_FREEFALL_SLOPE: - case TRACK_ELEM_AIR_THRUST_VERTICAL_DOWN_TO_LEVEL: - vertFactor = 120; - // 6d7458 - break; - case TRACK_ELEM_60_DEG_UP_TO_90_DEG_UP: - case TRACK_ELEM_90_DEG_DOWN_TO_60_DEG_DOWN: - vertFactor = 110; - // 6d7515 - break; - case TRACK_ELEM_90_DEG_UP_TO_60_DEG_UP: - case TRACK_ELEM_60_DEG_DOWN_TO_90_DEG_DOWN: - vertFactor = -110; - // 6d7521 - break; - case TRACK_ELEM_LEFT_EIGHTH_TO_DIAG: - case TRACK_ELEM_LEFT_EIGHTH_TO_ORTHOGONAL: - lateralFactor = 137; - // 6d7575 - break; - case TRACK_ELEM_RIGHT_EIGHTH_TO_DIAG: - case TRACK_ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL: - lateralFactor = -137; - // 6d759C - break; - case TRACK_ELEM_LEFT_EIGHTH_BANK_TO_DIAG: - case TRACK_ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL: - vertFactor = 270; - lateralFactor = 200; - // 6d75C3 - break; - case TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_DIAG: - case TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL: - vertFactor = 270; - lateralFactor = -200; - // 6d75D2 - break; - case TRACK_ELEM_DIAG_FLAT_TO_25_DEG_UP: - case TRACK_ELEM_DIAG_25_DEG_DOWN_TO_FLAT: - case TRACK_ELEM_DIAG_LEFT_BANK_TO_25_DEG_UP: - case TRACK_ELEM_DIAG_RIGHT_BANK_TO_25_DEG_UP: - case TRACK_ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK: - case TRACK_ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK: - vertFactor = 113; - // 6d7494 - break; - case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_DIAG_FLAT_TO_25_DEG_DOWN: - case TRACK_ELEM_DIAG_25_DEG_UP_TO_LEFT_BANK: - case TRACK_ELEM_DIAG_25_DEG_UP_TO_RIGHT_BANK: - case TRACK_ELEM_DIAG_LEFT_BANK_TO_25_DEG_DOWN: - case TRACK_ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN: - vertFactor = -113; - // 6d755D - break; - case TRACK_ELEM_DIAG_25_DEG_UP_TO_60_DEG_UP: - case TRACK_ELEM_DIAG_60_DEG_DOWN_TO_25_DEG_DOWN: - vertFactor = 95; - // 6D752D - break; - case TRACK_ELEM_DIAG_60_DEG_UP_TO_25_DEG_UP: - case TRACK_ELEM_DIAG_25_DEG_DOWN_TO_60_DEG_DOWN: - vertFactor = -95; - // 6D7539 - break; - case TRACK_ELEM_DIAG_FLAT_TO_60_DEG_UP: - case TRACK_ELEM_DIAG_60_DEG_DOWN_TO_FLAT: - vertFactor = 60; - // 6D7464 - break; - case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: - case TRACK_ELEM_DIAG_FLAT_TO_60_DEG_DOWN: - vertFactor = -60; - // 6d7470 - break; - case TRACK_ELEM_LEFT_BARREL_ROLL_UP_TO_DOWN: - case TRACK_ELEM_LEFT_BARREL_ROLL_DOWN_TO_UP: - vertFactor = 170; - lateralFactor = 115; - // 6d7581 - break; - case TRACK_ELEM_RIGHT_BARREL_ROLL_UP_TO_DOWN: - case TRACK_ELEM_RIGHT_BARREL_ROLL_DOWN_TO_UP: - vertFactor = 170; - lateralFactor = -115; - // 6d75A8 - break; - case TRACK_ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP: - vertFactor = -(vehicle->track_progress / 2) + 134; - lateralFactor = 90; - // 6d771C - break; - case TRACK_ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP: - vertFactor = -(vehicle->track_progress / 2) + 134; - lateralFactor = -90; - // 6D7746 - break; - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK: - vertFactor = -(vehicle->track_progress / 2) + 134; - lateralFactor = 90; - // 6D7731 identical to 6d771c - break; - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK: - vertFactor = -(vehicle->track_progress / 2) + 134; - lateralFactor = -90; - // 6D775B identical to 6d7746 - break; - case TRACK_ELEM_LEFT_LARGE_HALF_LOOP_UP: - case TRACK_ELEM_RIGHT_LARGE_HALF_LOOP_UP: - vertFactor = (((uint16_t)(-(vehicle->track_progress - 311))) / 4) + 46; - // 6d7666 - break; - case TRACK_ELEM_RIGHT_LARGE_HALF_LOOP_DOWN: - case TRACK_ELEM_LEFT_LARGE_HALF_LOOP_DOWN: - vertFactor = (vehicle->track_progress / 4) + 46; - // 6d767F - break; - case TRACK_ELEM_HEARTLINE_TRANSFER_UP: - vertFactor = 103; - if (vehicle->track_progress < 32) + case TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP: // + case TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN: // + case TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED: + case TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED: + vertFactor = -82; + // 6d7551 break; - vertFactor = -103; - if (vehicle->track_progress < 64) + case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES: // + case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP: + case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN: + case TRACK_ELEM_LEFT_TWIST_DOWN_TO_UP: + case TRACK_ELEM_LEFT_TWIST_UP_TO_DOWN: + case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED: + case TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_UP: + case TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN: + case TRACK_ELEM_LEFT_FLYER_TWIST_UP: + case TRACK_ELEM_LEFT_FLYER_TWIST_DOWN: + case TRACK_ELEM_LEFT_HEARTLINE_ROLL: + lateralFactor = 98; + // 6d7590 break; - vertFactor = 0; - if (vehicle->track_progress < 96) + case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES: // + case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP: + case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN: + case TRACK_ELEM_RIGHT_TWIST_DOWN_TO_UP: + case TRACK_ELEM_RIGHT_TWIST_UP_TO_DOWN: + case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED: + case TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_UP: + case TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN: + case TRACK_ELEM_RIGHT_FLYER_TWIST_UP: + case TRACK_ELEM_RIGHT_FLYER_TWIST_DOWN: + case TRACK_ELEM_RIGHT_HEARTLINE_ROLL: + lateralFactor = -98; + // 6d75B7 break; - vertFactor = 103; - if (vehicle->track_progress < 128) + case TRACK_ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES: + case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE: + case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE: + case TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP: + case TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN: + vertFactor = 200; + lateralFactor = 160; + // 6d75E1 break; - vertFactor = -103; - // 6d74A0 - break; - case TRACK_ELEM_HEARTLINE_TRANSFER_DOWN: - vertFactor = -103; - if (vehicle->track_progress < 32) + case TRACK_ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES: + case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE: + case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE: + case TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP: + case TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN: + vertFactor = 200; + lateralFactor = -160; + // 6d75F0 break; - vertFactor = 103; - if (vehicle->track_progress < 64) + case TRACK_ELEM_S_BEND_LEFT: + case TRACK_ELEM_S_BEND_LEFT_COVERED: + lateralFactor = (vehicle->track_progress < 48) ? 98 : -98; + // 6d75FF break; - vertFactor = 0; - if (vehicle->track_progress < 96) + case TRACK_ELEM_S_BEND_RIGHT: + case TRACK_ELEM_S_BEND_RIGHT_COVERED: + lateralFactor = (vehicle->track_progress < 48) ? -98 : 98; + // 6d7608 break; - vertFactor = -103; - if (vehicle->track_progress < 128) + case TRACK_ELEM_LEFT_VERTICAL_LOOP: + case TRACK_ELEM_RIGHT_VERTICAL_LOOP: + vertFactor = (abs(vehicle->track_progress - 155) / 2) + 28; + // 6d7690 + break; + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES: + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP: + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN: + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED: + case TRACK_ELEM_LEFT_CURVED_LIFT_HILL: + lateralFactor = 59; + // 6d7704 + break; + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES: + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP: + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN: + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED: + case TRACK_ELEM_RIGHT_CURVED_LIFT_HILL: + lateralFactor = -59; + // 6d7710 + break; + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_BANK: + case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL: + case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL: + vertFactor = 100; + lateralFactor = 100; + // 6d7782 + break; + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK: + case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL: + case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL: + vertFactor = 100; + lateralFactor = -100; + // 6d778E + break; + case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE: + lateralFactor = 45; + // 6d779A + break; + case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE: + lateralFactor = -45; + // 6d77A3 + break; + case TRACK_ELEM_HALF_LOOP_UP: + case TRACK_ELEM_FLYER_HALF_LOOP_UP: + vertFactor = (((uint16_t)(-(vehicle->track_progress - 155))) / 2) + 28; + // 6d763E + break; + case TRACK_ELEM_HALF_LOOP_DOWN: + case TRACK_ELEM_FLYER_HALF_LOOP_DOWN: + vertFactor = (vehicle->track_progress / 2) + 28; + // 6d7656 + break; + case TRACK_ELEM_LEFT_CORKSCREW_UP: + case TRACK_ELEM_RIGHT_CORKSCREW_DOWN: + case TRACK_ELEM_LEFT_FLYER_CORKSCREW_UP: + case TRACK_ELEM_RIGHT_FLYER_CORKSCREW_DOWN: + vertFactor = 52; + lateralFactor = 70; + // 6d76AA + break; + case TRACK_ELEM_RIGHT_CORKSCREW_UP: + case TRACK_ELEM_LEFT_CORKSCREW_DOWN: + case TRACK_ELEM_RIGHT_FLYER_CORKSCREW_UP: + case TRACK_ELEM_LEFT_FLYER_CORKSCREW_DOWN: + vertFactor = 52; + lateralFactor = -70; + // 6d76B9 + break; + case TRACK_ELEM_FLAT_TO_60_DEG_UP: + case TRACK_ELEM_60_DEG_DOWN_TO_FLAT: + vertFactor = 56; + // 6d747C + break; + case TRACK_ELEM_60_DEG_UP_TO_FLAT: + case TRACK_ELEM_FLAT_TO_60_DEG_DOWN: + case TRACK_ELEM_BRAKE_FOR_DROP: + vertFactor = -56; + // 6d7488 + break; + case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP: + case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN: + lateralFactor = 88; + // 6d7770 + break; + case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP: + case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN: + lateralFactor = -88; + // 6d7779 + break; + case TRACK_ELEM_WATER_SPLASH: + vertFactor = -150; + if (vehicle->track_progress < 32) + break; + vertFactor = 150; + if (vehicle->track_progress < 64) + break; + vertFactor = 0; + if (vehicle->track_progress < 96) + break; + vertFactor = 150; + if (vehicle->track_progress < 128) + break; + vertFactor = -150; + // 6d7408 + break; + case TRACK_ELEM_FLAT_TO_60_DEG_UP_LONG_BASE: + case TRACK_ELEM_FLAT_TO_60_DEG_DOWN_LONG_BASE: + vertFactor = 160; + // 6d74F1 + break; + case TRACK_ELEM_60_DEG_UP_TO_FLAT_LONG_BASE: + case TRACK_ELEM_60_DEG_UP_TO_FLAT_LONG_BASE_122: + vertFactor = -160; + // 6d74FD + break; + case TRACK_ELEM_REVERSE_FREEFALL_SLOPE: + case TRACK_ELEM_AIR_THRUST_VERTICAL_DOWN_TO_LEVEL: + vertFactor = 120; + // 6d7458 + break; + case TRACK_ELEM_60_DEG_UP_TO_90_DEG_UP: + case TRACK_ELEM_90_DEG_DOWN_TO_60_DEG_DOWN: + vertFactor = 110; + // 6d7515 + break; + case TRACK_ELEM_90_DEG_UP_TO_60_DEG_UP: + case TRACK_ELEM_60_DEG_DOWN_TO_90_DEG_DOWN: + vertFactor = -110; + // 6d7521 + break; + case TRACK_ELEM_LEFT_EIGHTH_TO_DIAG: + case TRACK_ELEM_LEFT_EIGHTH_TO_ORTHOGONAL: + lateralFactor = 137; + // 6d7575 + break; + case TRACK_ELEM_RIGHT_EIGHTH_TO_DIAG: + case TRACK_ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL: + lateralFactor = -137; + // 6d759C + break; + case TRACK_ELEM_LEFT_EIGHTH_BANK_TO_DIAG: + case TRACK_ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL: + vertFactor = 270; + lateralFactor = 200; + // 6d75C3 + break; + case TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_DIAG: + case TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL: + vertFactor = 270; + lateralFactor = -200; + // 6d75D2 + break; + case TRACK_ELEM_DIAG_FLAT_TO_25_DEG_UP: + case TRACK_ELEM_DIAG_25_DEG_DOWN_TO_FLAT: + case TRACK_ELEM_DIAG_LEFT_BANK_TO_25_DEG_UP: + case TRACK_ELEM_DIAG_RIGHT_BANK_TO_25_DEG_UP: + case TRACK_ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK: + case TRACK_ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK: + vertFactor = 113; + // 6d7494 + break; + case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_DIAG_FLAT_TO_25_DEG_DOWN: + case TRACK_ELEM_DIAG_25_DEG_UP_TO_LEFT_BANK: + case TRACK_ELEM_DIAG_25_DEG_UP_TO_RIGHT_BANK: + case TRACK_ELEM_DIAG_LEFT_BANK_TO_25_DEG_DOWN: + case TRACK_ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN: + vertFactor = -113; + // 6d755D + break; + case TRACK_ELEM_DIAG_25_DEG_UP_TO_60_DEG_UP: + case TRACK_ELEM_DIAG_60_DEG_DOWN_TO_25_DEG_DOWN: + vertFactor = 95; + // 6D752D + break; + case TRACK_ELEM_DIAG_60_DEG_UP_TO_25_DEG_UP: + case TRACK_ELEM_DIAG_25_DEG_DOWN_TO_60_DEG_DOWN: + vertFactor = -95; + // 6D7539 + break; + case TRACK_ELEM_DIAG_FLAT_TO_60_DEG_UP: + case TRACK_ELEM_DIAG_60_DEG_DOWN_TO_FLAT: + vertFactor = 60; + // 6D7464 + break; + case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: + case TRACK_ELEM_DIAG_FLAT_TO_60_DEG_DOWN: + vertFactor = -60; + // 6d7470 + break; + case TRACK_ELEM_LEFT_BARREL_ROLL_UP_TO_DOWN: + case TRACK_ELEM_LEFT_BARREL_ROLL_DOWN_TO_UP: + vertFactor = 170; + lateralFactor = 115; + // 6d7581 + break; + case TRACK_ELEM_RIGHT_BARREL_ROLL_UP_TO_DOWN: + case TRACK_ELEM_RIGHT_BARREL_ROLL_DOWN_TO_UP: + vertFactor = 170; + lateralFactor = -115; + // 6d75A8 + break; + case TRACK_ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP: + vertFactor = -(vehicle->track_progress / 2) + 134; + lateralFactor = 90; + // 6d771C + break; + case TRACK_ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP: + vertFactor = -(vehicle->track_progress / 2) + 134; + lateralFactor = -90; + // 6D7746 + break; + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK: + vertFactor = -(vehicle->track_progress / 2) + 134; + lateralFactor = 90; + // 6D7731 identical to 6d771c + break; + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK: + vertFactor = -(vehicle->track_progress / 2) + 134; + lateralFactor = -90; + // 6D775B identical to 6d7746 + break; + case TRACK_ELEM_LEFT_LARGE_HALF_LOOP_UP: + case TRACK_ELEM_RIGHT_LARGE_HALF_LOOP_UP: + vertFactor = (((uint16_t)(-(vehicle->track_progress - 311))) / 4) + 46; + // 6d7666 + break; + case TRACK_ELEM_RIGHT_LARGE_HALF_LOOP_DOWN: + case TRACK_ELEM_LEFT_LARGE_HALF_LOOP_DOWN: + vertFactor = (vehicle->track_progress / 4) + 46; + // 6d767F + break; + case TRACK_ELEM_HEARTLINE_TRANSFER_UP: + vertFactor = 103; + if (vehicle->track_progress < 32) + break; + vertFactor = -103; + if (vehicle->track_progress < 64) + break; + vertFactor = 0; + if (vehicle->track_progress < 96) + break; + vertFactor = 103; + if (vehicle->track_progress < 128) + break; + vertFactor = -103; + // 6d74A0 + break; + case TRACK_ELEM_HEARTLINE_TRANSFER_DOWN: + vertFactor = -103; + if (vehicle->track_progress < 32) + break; + vertFactor = 103; + if (vehicle->track_progress < 64) + break; + vertFactor = 0; + if (vehicle->track_progress < 96) + break; + vertFactor = -103; + if (vehicle->track_progress < 128) + break; + vertFactor = 103; + // 6D74CA + break; + case TRACK_ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN: + case TRACK_ELEM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN: + case TRACK_ELEM_MULTIDIM_FLAT_TO_90_DEG_DOWN_QUARTER_LOOP: + vertFactor = (vehicle->track_progress / 4) + 55; + // 6d762D + break; + case TRACK_ELEM_90_DEG_TO_INVERTED_FLAT_QUARTER_LOOP_UP: + case TRACK_ELEM_MULTIDIM_90_DEG_UP_TO_INVERTED_FLAT_QUARTER_LOOP: + case 255: + vertFactor = (((uint16_t)(-(vehicle->track_progress - 137))) / 4) + 55; + // 6D7614 + break; + case TRACK_ELEM_AIR_THRUST_TOP_CAP: + vertFactor = -60; + // 6D744C + break; + case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP: + case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN: + vertFactor = 200; + lateralFactor = 100; + // 6d76C8 + break; + case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP: + case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN: + vertFactor = 200; + lateralFactor = -100; + // 6d76d7 + break; + case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP: + case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN: + vertFactor = 200; + lateralFactor = 160; + // 6D76E6 + break; + case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP: + case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN: + vertFactor = 200; + lateralFactor = -160; + // 6d76F5 break; - vertFactor = 103; - // 6D74CA - break; - case TRACK_ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN: - case TRACK_ELEM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN: - case TRACK_ELEM_MULTIDIM_FLAT_TO_90_DEG_DOWN_QUARTER_LOOP: - vertFactor = (vehicle->track_progress / 4) + 55; - // 6d762D - break; - case TRACK_ELEM_90_DEG_TO_INVERTED_FLAT_QUARTER_LOOP_UP: - case TRACK_ELEM_MULTIDIM_90_DEG_UP_TO_INVERTED_FLAT_QUARTER_LOOP: - case 255: - vertFactor = (((uint16_t)(-(vehicle->track_progress - 137))) / 4) + 55; - // 6D7614 - break; - case TRACK_ELEM_AIR_THRUST_TOP_CAP: - vertFactor = -60; - // 6D744C - break; - case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP: - case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN: - vertFactor = 200; - lateralFactor = 100; - // 6d76C8 - break; - case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP: - case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN: - vertFactor = 200; - lateralFactor = -100; - // 6d76d7 - break; - case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP: - case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN: - vertFactor = 200; - lateralFactor = 160; - // 6D76E6 - break; - case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP: - case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN: - vertFactor = 200; - lateralFactor = -160; - // 6d76F5 - break; } int32_t gForceLateral = 0; @@ -6222,9 +6208,9 @@ void vehicle_get_g_forces(const rct_vehicle * vehicle, int32_t * verticalG, int3 *lateralG = (int16_t)(gForceLateral & 0xFFFF); } -void vehicle_set_map_toolbar(const rct_vehicle * vehicle) +void vehicle_set_map_toolbar(const rct_vehicle* vehicle) { - Ride * ride; + Ride* ride; int32_t vehicleIndex; ride = get_ride(vehicle->ride); @@ -6246,7 +6232,7 @@ void vehicle_set_map_toolbar(const rct_vehicle * vehicle) set_map_tooltip_format_arg(12, uint16_t, vehicleIndex + 1); rct_string_id formatSecondary; - int32_t arg1; + int32_t arg1; ride_get_status(vehicle->ride, &formatSecondary, &arg1); set_map_tooltip_format_arg(14, rct_string_id, formatSecondary); // TODO: odd cast @@ -6281,7 +6267,7 @@ rct_vehicle* vehicle_get_tail(const rct_vehicle* vehicle) return const_cast(vehicle); } -int32_t vehicle_is_used_in_pairs(const rct_vehicle * vehicle) +int32_t vehicle_is_used_in_pairs(const rct_vehicle* vehicle) { return vehicle->num_seats & VEHICLE_SEAT_PAIR_FLAG; } @@ -6290,14 +6276,14 @@ int32_t vehicle_is_used_in_pairs(const rct_vehicle * vehicle) * * rct2: 0x006DA44E */ -static int32_t vehicle_update_motion_dodgems(rct_vehicle * vehicle) +static int32_t vehicle_update_motion_dodgems(rct_vehicle* vehicle) { _vehicleMotionTrackFlags = 0; - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); int32_t nextVelocity = vehicle->velocity + vehicle->acceleration; - if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN) && - ride->breakdown_reason_pending == BREAKDOWN_SAFETY_CUT_OUT) + if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN) + && ride->breakdown_reason_pending == BREAKDOWN_SAFETY_CUT_OUT) { nextVelocity = 0; } @@ -6305,15 +6291,14 @@ static int32_t vehicle_update_motion_dodgems(rct_vehicle * vehicle) _vehicleVelocityF64E08 = nextVelocity; _vehicleVelocityF64E0C = (nextVelocity / 1024) * 42; - _vehicleUnkF64E10 = 1; + _vehicleUnkF64E10 = 1; vehicle->acceleration = 0; - if (!(ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN)) || - ride->breakdown_reason_pending != BREAKDOWN_SAFETY_CUT_OUT) + if (!(ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN)) + || ride->breakdown_reason_pending != BREAKDOWN_SAFETY_CUT_OUT) { if (gCurrentTicks & 1 && vehicle->var_34 != 0) { - if (vehicle->var_34 > 0) { vehicle->var_34--; @@ -6355,7 +6340,7 @@ static int32_t vehicle_update_motion_dodgems(rct_vehicle * vehicle) if (!vehicle_update_dodgems_collision(vehicle, location.x, location.y, &collideSprite)) { vehicle_invalidate(vehicle); - sprite_move(location.x, location.y, location.z, (rct_sprite *)vehicle); + sprite_move(location.x, location.y, location.z, (rct_sprite*)vehicle); vehicle_invalidate(vehicle); } } @@ -6396,10 +6381,10 @@ static int32_t vehicle_update_motion_dodgems(rct_vehicle * vehicle) if (vehicle->remaining_distance >= 13962) { - int32_t oldVelocity = vehicle->velocity; + int32_t oldVelocity = vehicle->velocity; vehicle->remaining_distance = 0; - vehicle->velocity = 0; - uint8_t direction = vehicle->sprite_direction | 1; + vehicle->velocity = 0; + uint8_t direction = vehicle->sprite_direction | 1; if (collideSprite != 0xFFFF) { @@ -6407,7 +6392,7 @@ static int32_t vehicle_update_motion_dodgems(rct_vehicle * vehicle) if (oldVelocity >= 131072) { - rct_vehicle * collideVehicle = GET_VEHICLE(collideSprite); + rct_vehicle* collideVehicle = GET_VEHICLE(collideSprite); collideVehicle->dodgems_collision_direction = direction; vehicle->dodgems_collision_direction = direction ^ (1 << 4); } @@ -6423,7 +6408,7 @@ static int32_t vehicle_update_motion_dodgems(rct_vehicle * vehicle) } } - sprite_move(unk_F64E20.x, unk_F64E20.y, unk_F64E20.z, (rct_sprite *)vehicle); + sprite_move(unk_F64E20.x, unk_F64E20.y, unk_F64E20.z, (rct_sprite*)vehicle); vehicle_invalidate(vehicle); } @@ -6435,8 +6420,8 @@ static int32_t vehicle_update_motion_dodgems(rct_vehicle * vehicle) edx >>= 5; eax += edx; eax /= vehicle->mass; - rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); - rct_ride_entry_vehicle * vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; + rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); + rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED)) { @@ -6444,7 +6429,7 @@ static int32_t vehicle_update_motion_dodgems(rct_vehicle * vehicle) return _vehicleMotionTrackFlags; } - int32_t ebx = (vehicle->speed * vehicle->mass) >> 2; + int32_t ebx = (vehicle->speed * vehicle->mass) >> 2; int32_t _eax = vehicle->speed << 14; if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_REVERSING_SHUTTLE) { @@ -6462,14 +6447,14 @@ static int32_t vehicle_update_motion_dodgems(rct_vehicle * vehicle) * * rct2: 0x006DD365 */ -bool vehicle_update_dodgems_collision(rct_vehicle * vehicle, int16_t x, int16_t y, uint16_t * spriteId) +bool vehicle_update_dodgems_collision(rct_vehicle* vehicle, int16_t x, int16_t y, uint16_t* spriteId) { - uint16_t bp = (vehicle->var_44 * 30) >> 9; + uint16_t bp = (vehicle->var_44 * 30) >> 9; uint32_t trackType = vehicle->track_type >> 2; - int16_t rideLeft = vehicle->track_x + DodgemsTrackSize[trackType].left; - int16_t rideRight = vehicle->track_x + DodgemsTrackSize[trackType].right; - int16_t rideTop = vehicle->track_y + DodgemsTrackSize[trackType].top; + int16_t rideLeft = vehicle->track_x + DodgemsTrackSize[trackType].left; + int16_t rideRight = vehicle->track_x + DodgemsTrackSize[trackType].right; + int16_t rideTop = vehicle->track_y + DodgemsTrackSize[trackType].top; int16_t rideBottom = vehicle->track_y + DodgemsTrackSize[trackType].bottom; if (x - bp < rideLeft || y - bp < rideTop || x + bp > rideRight || y + bp > rideBottom) @@ -6490,8 +6475,8 @@ bool vehicle_update_dodgems_collision(rct_vehicle * vehicle, int16_t x, int16_t uint16_t spriteIdx = sprite_get_first_in_quadrant(location.x * 32, location.y * 32); while (spriteIdx != SPRITE_INDEX_NULL) { - rct_vehicle * vehicle2 = GET_VEHICLE(spriteIdx); - spriteIdx = vehicle2->next_in_quadrant; + rct_vehicle* vehicle2 = GET_VEHICLE(spriteIdx); + spriteIdx = vehicle2->next_in_quadrant; if (vehicle2 == vehicle) continue; @@ -6529,10 +6514,10 @@ bool vehicle_update_dodgems_collision(rct_vehicle * vehicle, int16_t x, int16_t * * rct2: 0x006DAB90 */ -static void vehicle_update_track_motion_up_stop_check(rct_vehicle * vehicle) +static void vehicle_update_track_motion_up_stop_check(rct_vehicle* vehicle) { - rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); - int32_t verticalG, lateralG; + rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); + int32_t verticalG, lateralG; if (vehicleEntry == nullptr) { @@ -6606,7 +6591,7 @@ static void vehicle_update_track_motion_up_stop_check(rct_vehicle * vehicle) * merely as a velocity regulator, in a closed state. When the brake is open, it * boosts the train to the speed limit */ -static void apply_non_stop_block_brake(rct_vehicle * vehicle, bool block_brake_closed) +static void apply_non_stop_block_brake(rct_vehicle* vehicle, bool block_brake_closed) { if (vehicle->velocity >= 0) { @@ -6614,7 +6599,7 @@ static void apply_non_stop_block_brake(rct_vehicle * vehicle, bool block_brake_c if (vehicle->velocity <= 0x20364) { // Boost it to the fixed block brake speed - vehicle->velocity = 0x20364; + vehicle->velocity = 0x20364; vehicle->acceleration = 0; } else if (block_brake_closed) @@ -6630,7 +6615,7 @@ static void apply_non_stop_block_brake(rct_vehicle * vehicle, bool block_brake_c * * Modifies the train's velocity influenced by a block brake */ -static void apply_block_brakes(rct_vehicle * vehicle, bool is_block_brake_closed) +static void apply_block_brakes(rct_vehicle* vehicle, bool is_block_brake_closed) { // If the site is in a "train blocking" state if (is_block_brake_closed) @@ -6662,10 +6647,10 @@ static void apply_block_brakes(rct_vehicle * vehicle, bool is_block_brake_closed * * rct2: 0x006DAC43 */ -static void check_and_apply_block_section_stop_site(rct_vehicle * vehicle) +static void check_and_apply_block_section_stop_site(rct_vehicle* vehicle) { - Ride * ride = get_ride(vehicle->ride); - rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + Ride* ride = get_ride(vehicle->ride); + rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); if (vehicleEntry == nullptr) { @@ -6680,14 +6665,14 @@ static void check_and_apply_block_section_stop_site(rct_vehicle * vehicle) { velocity = 0; } - vehicle->velocity = velocity; + vehicle->velocity = velocity; vehicle->acceleration = 0; } int32_t trackType = vehicle->track_type >> 2; - rct_tile_element * trackElement = - map_get_track_element_at_of_type(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType); + rct_tile_element* trackElement + = map_get_track_element_at_of_type(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType); if (trackElement == nullptr) { @@ -6696,34 +6681,34 @@ static void check_and_apply_block_section_stop_site(rct_vehicle * vehicle) switch (trackType) { - case TRACK_ELEM_BLOCK_BRAKES: - if (ride_is_block_sectioned(ride)) - apply_block_brakes(vehicle, trackElement->flags & TILE_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED); - else - apply_non_stop_block_brake(vehicle, true); + case TRACK_ELEM_BLOCK_BRAKES: + if (ride_is_block_sectioned(ride)) + apply_block_brakes(vehicle, trackElement->flags & TILE_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED); + else + apply_non_stop_block_brake(vehicle, true); - break; - case TRACK_ELEM_END_STATION: - if (trackElement->flags & TILE_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED) - _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_10; + break; + case TRACK_ELEM_END_STATION: + if (trackElement->flags & TILE_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED) + _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_10; - break; - case TRACK_ELEM_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_60_DEG_UP_TO_FLAT: - case TRACK_ELEM_CABLE_LIFT_HILL: - case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: - case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: - if (ride_is_block_sectioned(ride)) - { - if (trackType == TRACK_ELEM_CABLE_LIFT_HILL || track_element_is_lift_hill(trackElement)) + break; + case TRACK_ELEM_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_60_DEG_UP_TO_FLAT: + case TRACK_ELEM_CABLE_LIFT_HILL: + case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: + case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: + if (ride_is_block_sectioned(ride)) { - if (trackElement->flags & TILE_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED) + if (trackType == TRACK_ELEM_CABLE_LIFT_HILL || track_element_is_lift_hill(trackElement)) { - apply_block_brakes(vehicle, true); + if (trackElement->flags & TILE_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED) + { + apply_block_brakes(vehicle, true); + } } } - } - break; + break; } } @@ -6731,7 +6716,7 @@ static void check_and_apply_block_section_stop_site(rct_vehicle * vehicle) * * rct2: 0x006DADAE */ -static void update_velocity(rct_vehicle * vehicle) +static void update_velocity(rct_vehicle* vehicle) { int32_t nextVelocity = vehicle->acceleration + vehicle->velocity; if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_ZERO_VELOCITY) @@ -6747,7 +6732,7 @@ static void update_velocity(rct_vehicle * vehicle) } if (vehicle->vertical_drop_countdown >= 0) { - nextVelocity = 0; + nextVelocity = 0; vehicle->acceleration = 0; } } @@ -6757,31 +6742,31 @@ static void update_velocity(rct_vehicle * vehicle) _vehicleVelocityF64E0C = (nextVelocity >> 10) * 42; } -static void vehicle_update_block_brakes_open_previous_section(rct_vehicle * vehicle, rct_tile_element * tileElement) +static void vehicle_update_block_brakes_open_previous_section(rct_vehicle* vehicle, rct_tile_element* tileElement) { - int32_t x = vehicle->track_x; - int32_t y = vehicle->track_y; - int32_t z = vehicle->track_z; + int32_t x = vehicle->track_x; + int32_t y = vehicle->track_y; + int32_t z = vehicle->track_z; track_begin_end trackBeginEnd, slowTrackBeginEnd; rct_tile_element slowTileElement = *tileElement; - bool counter = true; - int32_t slowX = x; - int32_t slowY = y; + bool counter = true; + int32_t slowX = x; + int32_t slowY = y; do { if (!track_block_get_previous(x, y, tileElement, &trackBeginEnd)) { return; } - if (trackBeginEnd.begin_x == vehicle->track_x && trackBeginEnd.begin_y == vehicle->track_y && - tileElement == trackBeginEnd.begin_element) + if (trackBeginEnd.begin_x == vehicle->track_x && trackBeginEnd.begin_y == vehicle->track_y + && tileElement == trackBeginEnd.begin_element) { return; } - x = trackBeginEnd.end_x; - y = trackBeginEnd.end_y; - z = trackBeginEnd.begin_z; + x = trackBeginEnd.end_x; + y = trackBeginEnd.end_y; + z = trackBeginEnd.begin_z; tileElement = trackBeginEnd.begin_element; //#2081: prevent infinite loop @@ -6789,11 +6774,11 @@ static void vehicle_update_block_brakes_open_previous_section(rct_vehicle * vehi if (counter) { track_block_get_previous(slowX, slowY, &slowTileElement, &slowTrackBeginEnd); - slowX = slowTrackBeginEnd.end_x; - slowY = slowTrackBeginEnd.end_y; + slowX = slowTrackBeginEnd.end_x; + slowY = slowTrackBeginEnd.end_y; slowTileElement = *(slowTrackBeginEnd.begin_element); - if (slowX == x && slowY == y && slowTileElement.base_height == tileElement->base_height && - slowTileElement.type == tileElement->type) + if (slowX == x && slowY == y && slowTileElement.base_height == tileElement->base_height + && slowTileElement.type == tileElement->type) { return; } @@ -6801,9 +6786,9 @@ static void vehicle_update_block_brakes_open_previous_section(rct_vehicle * vehi } while (!track_element_is_block_start(trackBeginEnd.begin_element)); // Get the start of the track block instead of the end - x = trackBeginEnd.begin_x; - y = trackBeginEnd.begin_y; - z = trackBeginEnd.begin_z; + x = trackBeginEnd.begin_x; + y = trackBeginEnd.begin_y; + z = trackBeginEnd.begin_z; tileElement = map_get_track_element_at(x, y, z >> 3); if (tileElement == nullptr) { @@ -6815,7 +6800,7 @@ static void vehicle_update_block_brakes_open_previous_section(rct_vehicle * vehi int32_t trackType = track_element_get_type(tileElement); if (trackType == TRACK_ELEM_BLOCK_BRAKES || trackType == TRACK_ELEM_END_STATION) { - Ride * ride = get_ride(vehicle->ride); + Ride* ride = get_ride(vehicle->ride); if (ride_is_block_sectioned(ride)) { audio_play_sound_at_location(SOUND_48, x, y, z); @@ -6823,122 +6808,122 @@ static void vehicle_update_block_brakes_open_previous_section(rct_vehicle * vehi } } -static int32_t vehicle_get_swing_amount(rct_vehicle * vehicle) +static int32_t vehicle_get_swing_amount(rct_vehicle* vehicle) { int32_t trackType = vehicle->track_type >> 2; switch (trackType) { - case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES: - case TRACK_ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES: - case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP: - case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN: - case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED: - case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE: - case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE: - case TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP: - case TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN: - case TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_UP: - case TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN: - case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP: - case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN: - // loc_6D67E1 - return 14; - - case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES: - case TRACK_ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES: - case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP: - case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN: - case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED: - case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE: - case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE: - case TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP: - case TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN: - case TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_UP: - case TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN: - case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP: - case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN: - // loc_6D6804 - return -14; - - case TRACK_ELEM_S_BEND_LEFT: - case TRACK_ELEM_S_BEND_LEFT_COVERED: - // loc_6D67EF - if (vehicle->track_progress < 48) - { + case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES: + case TRACK_ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES: + case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP: + case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN: + case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED: + case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE: + case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE: + case TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP: + case TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN: + case TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_UP: + case TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN: + case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP: + case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN: + // loc_6D67E1 return 14; - } - else - { - return -15; - } - case TRACK_ELEM_S_BEND_RIGHT: - case TRACK_ELEM_S_BEND_RIGHT_COVERED: - // loc_6D67CC - if (vehicle->track_progress < 48) - { + case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES: + case TRACK_ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES: + case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP: + case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN: + case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED: + case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE: + case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE: + case TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP: + case TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN: + case TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_UP: + case TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN: + case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP: + case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN: + // loc_6D6804 return -14; - } - else - { + + case TRACK_ELEM_S_BEND_LEFT: + case TRACK_ELEM_S_BEND_LEFT_COVERED: + // loc_6D67EF + if (vehicle->track_progress < 48) + { + return 14; + } + else + { + return -15; + } + + case TRACK_ELEM_S_BEND_RIGHT: + case TRACK_ELEM_S_BEND_RIGHT_COVERED: + // loc_6D67CC + if (vehicle->track_progress < 48) + { + return -14; + } + else + { + return 15; + } + + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES: + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_BANK: + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP: + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN: + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED: + case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL: + case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL: + case TRACK_ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP: + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK: + case TRACK_ELEM_LEFT_CURVED_LIFT_HILL: + case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP: + case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN: + // loc_6D67BE + return 13; + + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES: + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK: + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP: + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN: + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED: + case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL: + case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL: + case TRACK_ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP: + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK: + case TRACK_ELEM_RIGHT_CURVED_LIFT_HILL: + case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP: + case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN: + // loc_6D67B0 + return -13; + + case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE: + case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP: + case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN: + // loc_6D67A2 + return 12; + + case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE: + case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP: + case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN: + // loc_6D6794 + return -12; + + case TRACK_ELEM_LEFT_EIGHTH_TO_DIAG: + case TRACK_ELEM_LEFT_EIGHTH_TO_ORTHOGONAL: + case TRACK_ELEM_LEFT_EIGHTH_BANK_TO_DIAG: + case TRACK_ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL: + // loc_6D67D3 return 15; - } - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES: - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_BANK: - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP: - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN: - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED: - case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL: - case TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL: - case TRACK_ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP: - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK: - case TRACK_ELEM_LEFT_CURVED_LIFT_HILL: - case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP: - case TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN: - // loc_6D67BE - return 13; - - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES: - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK: - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP: - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN: - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED: - case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL: - case TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL: - case TRACK_ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP: - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK: - case TRACK_ELEM_RIGHT_CURVED_LIFT_HILL: - case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP: - case TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN: - // loc_6D67B0 - return -13; - - case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE: - case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP: - case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN: - // loc_6D67A2 - return 12; - - case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE: - case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP: - case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN: - // loc_6D6794 - return -12; - - case TRACK_ELEM_LEFT_EIGHTH_TO_DIAG: - case TRACK_ELEM_LEFT_EIGHTH_TO_ORTHOGONAL: - case TRACK_ELEM_LEFT_EIGHTH_BANK_TO_DIAG: - case TRACK_ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL: - // loc_6D67D3 - return 15; - - case TRACK_ELEM_RIGHT_EIGHTH_TO_DIAG: - case TRACK_ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL: - case TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_DIAG: - case TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL: - // loc_6D67F6 - return -15; + case TRACK_ELEM_RIGHT_EIGHTH_TO_DIAG: + case TRACK_ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL: + case TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_DIAG: + case TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL: + // loc_6D67F6 + return -15; } return 0; } @@ -6947,7 +6932,7 @@ static int32_t vehicle_get_swing_amount(rct_vehicle * vehicle) * * rct2: 0x006D6776 */ -static void vehicle_update_swinging_car(rct_vehicle * vehicle) +static void vehicle_update_swinging_car(rct_vehicle* vehicle) { int32_t dword_F64E08 = abs(_vehicleVelocityF64E08); vehicle->var_4E += (-vehicle->swinging_car_var_0) >> 6; @@ -6961,12 +6946,12 @@ static void vehicle_update_swinging_car(rct_vehicle * vehicle) vehicle->var_4E += dword_F64E08 >> swingAmount; } - rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); if (vehicleEntry == nullptr) { return; } - int16_t dx = 3185; + int16_t dx = 3185; if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_21) { dx = 5006; @@ -6985,30 +6970,30 @@ static void vehicle_update_swinging_car(rct_vehicle * vehicle) int32_t trackType = vehicle->track_type >> 2; switch (trackType) { - case TRACK_ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES: - case TRACK_ELEM_LEFT_BANK: - case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_BANK: - dx = 10831; - cx = -819; - break; - case TRACK_ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES: - case TRACK_ELEM_RIGHT_BANK: - case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK: - dx = 819; - cx = -10831; - break; + case TRACK_ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES: + case TRACK_ELEM_LEFT_BANK: + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_BANK: + dx = 10831; + cx = -819; + break; + case TRACK_ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES: + case TRACK_ELEM_RIGHT_BANK: + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK: + dx = 819; + cx = -10831; + break; } switch (trackType) { - case TRACK_ELEM_END_STATION: - case TRACK_ELEM_BEGIN_STATION: - case TRACK_ELEM_MIDDLE_STATION: - case TRACK_ELEM_BRAKES: - case TRACK_ELEM_BLOCK_BRAKES: - dx = 0; - cx = 0; - break; + case TRACK_ELEM_END_STATION: + case TRACK_ELEM_BEGIN_STATION: + case TRACK_ELEM_MIDDLE_STATION: + case TRACK_ELEM_BRAKES: + case TRACK_ELEM_BLOCK_BRAKES: + dx = 0; + cx = 0; + break; } if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_ON_LIFT_HILL) @@ -7023,17 +7008,17 @@ static void vehicle_update_swinging_car(rct_vehicle * vehicle) int16_t ax = vehicle->swinging_car_var_0; if (ax > dx) { - ax = dx; + ax = dx; vehicle->var_4E = 0; } if (ax < cx) { - ax = cx; + ax = cx; vehicle->var_4E = 0; } vehicle->swinging_car_var_0 = ax; - uint8_t swingSprite = 11; + uint8_t swingSprite = 11; if (ax >= -10012) { swingSprite = 12; @@ -7108,34 +7093,27 @@ enum R9_SPIN }; -static const uint8_t TrackTypeToSpinFunction[256] = { - NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, LR_SPIN, RL_SPIN, - NO_SPIN, NO_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, - L5_SPIN, R5_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, L8_SPIN, R8_SPIN, LR_SPIN, RL_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, - R7_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, L5_SPIN, R5_SPIN, L5_SPIN, R5_SPIN, NO_SPIN, - RC_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, SP_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - R5_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, L9_SPIN, - R9_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L7_SPIN, R7_SPIN, - L7_SPIN, R7_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L7_SPIN, - R7_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, - R7_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, - NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN -}; +static const uint8_t TrackTypeToSpinFunction[256] + = { NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, NO_SPIN, NO_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, LR_SPIN, + RL_SPIN, NO_SPIN, NO_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, L5_SPIN, R5_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, LR_SPIN, RL_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, + L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, L5_SPIN, R5_SPIN, L5_SPIN, R5_SPIN, NO_SPIN, RC_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, + L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, SP_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, R5_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, NO_SPIN, NO_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, + NO_SPIN, L7_SPIN, R7_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, + L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, + NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN }; #pragma endregion @@ -7143,7 +7121,7 @@ static const uint8_t TrackTypeToSpinFunction[256] = { * * rct2: 0x006D661F */ -static void vehicle_update_spinning_car(rct_vehicle * vehicle) +static void vehicle_update_spinning_car(rct_vehicle* vehicle) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_ROTATION_OFF_WILD_MOUSE) { @@ -7151,100 +7129,101 @@ static void vehicle_update_spinning_car(rct_vehicle * vehicle) return; } - rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); if (vehicleEntry == nullptr) { return; } int32_t spinningInertia = vehicleEntry->spinning_inertia; - int32_t trackType = vehicle->track_type >> 2; - int32_t dword_F64E08 = _vehicleVelocityF64E08; + int32_t trackType = vehicle->track_type >> 2; + int32_t dword_F64E08 = _vehicleVelocityF64E08; int32_t spinSpeed; // An L spin adds to the spin speed, R does the opposite // The number indicates how much right shift of the velocity will become spin // The bigger the number the less change in spin. switch (TrackTypeToSpinFunction[trackType]) { - case RC_SPIN: - // On a rotation control track element - spinningInertia += 6; - spinSpeed = dword_F64E08 >> spinningInertia; - // Alternate the spin direction (roughly). Perhaps in future save a value to the track - if (vehicle->sprite_index & 1) - { - vehicle->spin_speed -= spinSpeed; - } - else - { - vehicle->spin_speed += spinSpeed; - } - break; - case R5_SPIN: - // It looks like in the original there was going to be special code for whirlpool - // this has been removed and just uses R5_SPIN - spinningInertia += 5; - vehicle->spin_speed -= dword_F64E08 >> spinningInertia; - break; - case L5_SPIN: - spinningInertia += 5; - vehicle->spin_speed += dword_F64E08 >> spinningInertia; - break; - case R7_SPIN: - spinningInertia += 7; - vehicle->spin_speed -= dword_F64E08 >> spinningInertia; - break; - case L7_SPIN: - spinningInertia += 7; - vehicle->spin_speed += dword_F64E08 >> spinningInertia; - break; - case RL_SPIN: - // Right Left Curve Track Piece - if (vehicle->track_progress < 48) - { - // R8_SPIN + case RC_SPIN: + // On a rotation control track element + spinningInertia += 6; + spinSpeed = dword_F64E08 >> spinningInertia; + // Alternate the spin direction (roughly). Perhaps in future save a value to the track + if (vehicle->sprite_index & 1) + { + vehicle->spin_speed -= spinSpeed; + } + else + { + vehicle->spin_speed += spinSpeed; + } + break; + case R5_SPIN: + // It looks like in the original there was going to be special code for whirlpool + // this has been removed and just uses R5_SPIN + spinningInertia += 5; + vehicle->spin_speed -= dword_F64E08 >> spinningInertia; + break; + case L5_SPIN: + spinningInertia += 5; + vehicle->spin_speed += dword_F64E08 >> spinningInertia; + break; + case R7_SPIN: + spinningInertia += 7; + vehicle->spin_speed -= dword_F64E08 >> spinningInertia; + break; + case L7_SPIN: + spinningInertia += 7; + vehicle->spin_speed += dword_F64E08 >> spinningInertia; + break; + case RL_SPIN: + // Right Left Curve Track Piece + if (vehicle->track_progress < 48) + { + // R8_SPIN + spinningInertia += 8; + vehicle->spin_speed -= dword_F64E08 >> spinningInertia; + break; + } + // Fall through + case L9_SPIN: + spinningInertia += 9; + vehicle->spin_speed += dword_F64E08 >> spinningInertia; + break; + case L8_SPIN: + spinningInertia += 8; + vehicle->spin_speed += dword_F64E08 >> spinningInertia; + break; + case SP_SPIN: + // On rapids spin after fully on them + if (vehicle->track_progress > 22) + { + // L5_SPIN + spinningInertia += 5; + vehicle->spin_speed += dword_F64E08 >> spinningInertia; + } + break; + case LR_SPIN: + // Left Right Curve Track Piece + if (vehicle->track_progress < 48) + { + // L8_SPIN + spinningInertia += 8; + vehicle->spin_speed += dword_F64E08 >> spinningInertia; + break; + } + // Fall through + case R9_SPIN: + spinningInertia += 9; + vehicle->spin_speed -= dword_F64E08 >> spinningInertia; + break; + case R8_SPIN: spinningInertia += 8; vehicle->spin_speed -= dword_F64E08 >> spinningInertia; break; - } - // Fall through - case L9_SPIN: - spinningInertia += 9; - vehicle->spin_speed += dword_F64E08 >> spinningInertia; - break; - case L8_SPIN: - spinningInertia += 8; - vehicle->spin_speed += dword_F64E08 >> spinningInertia; - break; - case SP_SPIN: - // On rapids spin after fully on them - if (vehicle->track_progress > 22) - { - // L5_SPIN - spinningInertia += 5; - vehicle->spin_speed += dword_F64E08 >> spinningInertia; - } - break; - case LR_SPIN: - // Left Right Curve Track Piece - if (vehicle->track_progress < 48) - { - // L8_SPIN - spinningInertia += 8; - vehicle->spin_speed += dword_F64E08 >> spinningInertia; - break; - } - // Fall through - case R9_SPIN: - spinningInertia += 9; - vehicle->spin_speed -= dword_F64E08 >> spinningInertia; - break; - case R8_SPIN: - spinningInertia += 8; - vehicle->spin_speed -= dword_F64E08 >> spinningInertia; - break; } - spinSpeed = Math::Clamp(static_cast(-VEHICLE_MAX_SPIN_SPEED), vehicle->spin_speed, static_cast(VEHICLE_MAX_SPIN_SPEED)); + spinSpeed = Math::Clamp( + static_cast(-VEHICLE_MAX_SPIN_SPEED), vehicle->spin_speed, static_cast(VEHICLE_MAX_SPIN_SPEED)); vehicle->spin_speed = spinSpeed; vehicle->spin_sprite += spinSpeed >> 8; // Note this actually increases the spin speed if going right! @@ -7258,21 +7237,21 @@ static void vehicle_update_spinning_car(rct_vehicle * vehicle) */ static void steam_particle_create(int16_t x, int16_t y, int16_t z) { - rct_tile_element * tileElement = map_get_surface_element_at({x, y}); + rct_tile_element* tileElement = map_get_surface_element_at({ x, y }); if (tileElement != nullptr && z > tileElement->base_height * 8) { - rct_steam_particle * steam = (rct_steam_particle *)create_sprite(2); + rct_steam_particle* steam = (rct_steam_particle*)create_sprite(2); if (steam == nullptr) return; - steam->sprite_width = 20; + steam->sprite_width = 20; steam->sprite_height_negative = 18; steam->sprite_height_positive = 16; - steam->sprite_identifier = SPRITE_IDENTIFIER_MISC; - steam->misc_identifier = SPRITE_MISC_STEAM_PARTICLE; - steam->frame = 256; - steam->time_to_move = 0; - sprite_move(x, y, z, (rct_sprite *)steam); + steam->sprite_identifier = SPRITE_IDENTIFIER_MISC; + steam->misc_identifier = SPRITE_MISC_STEAM_PARTICLE; + steam->frame = 256; + steam->time_to_move = 0; + sprite_move(x, y, z, (rct_sprite*)steam); } } @@ -7280,128 +7259,93 @@ static void steam_particle_create(int16_t x, int16_t y, int16_t z) * * rct2: 0x006D63D4 */ -static void vehicle_update_additional_animation(rct_vehicle * vehicle) +static void vehicle_update_additional_animation(rct_vehicle* vehicle) { - uint8_t al, ah; + uint8_t al, ah; uint32_t eax; - uint32_t * var_C8 = (uint32_t *)&vehicle->var_C8; - rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + uint32_t* var_C8 = (uint32_t*)&vehicle->var_C8; + rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); if (vehicleEntry == nullptr) { return; } switch (vehicleEntry->animation) { - case VEHICLE_ENTRY_ANIMATION_MINITURE_RAILWAY_LOCOMOTIVE: // loc_6D652B - *var_C8 += _vehicleVelocityF64E08; - al = (*var_C8 >> 20) & 3; - if (vehicle->animation_frame != al) - { - ah = al; - al = vehicle->animation_frame; - vehicle->animation_frame = ah; - al &= 0x02; - ah &= 0x02; - if (al != ah) - { - Ride * ride = get_ride(vehicle->ride); - if (ride->entrance_style == RIDE_ENTRANCE_STYLE_PLAIN || - (vehicle->status != VEHICLE_STATUS_MOVING_TO_END_OF_STATION && vehicle->status != VEHICLE_STATUS_ARRIVING)) - { - int32_t index = vehicle->sprite_direction >> 1; - if (vehicle->vehicle_sprite_type == 2) - { - index += 16; - } - if (vehicle->vehicle_sprite_type == 6) - { - index += 32; - } - steam_particle_create(vehicle->x + SteamParticleOffsets[index].x, - vehicle->y + SteamParticleOffsets[index].y, - vehicle->z + SteamParticleOffsets[index].z); - } - } - vehicle_invalidate(vehicle); - } - break; - case VEHICLE_ENTRY_ANIMATION_SWAN: // loc_6D6424 - *var_C8 += _vehicleVelocityF64E08; - al = (*var_C8 >> 18) & 2; - if (vehicle->animation_frame != al) - { - vehicle->animation_frame = al; - vehicle_invalidate(vehicle); - } - break; - case VEHICLE_ENTRY_ANIMATION_CANOES: // loc_6D6482 - *var_C8 += _vehicleVelocityF64E08; - eax = ((*var_C8 >> 13) & 0xFF) * 6; - ah = (eax >> 8) & 0xFF; - if (vehicle->animation_frame != ah) - { - vehicle->animation_frame = ah; - vehicle_invalidate(vehicle); - } - break; - case VEHICLE_ENTRY_ANIMATION_ROW_BOATS: // loc_6D64F7 - *var_C8 += _vehicleVelocityF64E08; - eax = ((*var_C8 >> 13) & 0xFF) * 7; - ah = (eax >> 8) & 0xFF; - if (vehicle->animation_frame != ah) - { - vehicle->animation_frame = ah; - vehicle_invalidate(vehicle); - } - break; - case VEHICLE_ENTRY_ANIMATION_WATER_TRICYCLES: // loc_6D6453 - *var_C8 += _vehicleVelocityF64E08; - al = (*var_C8 >> 19) & 1; - if (vehicle->animation_frame != al) - { - vehicle->animation_frame = al; - vehicle_invalidate(vehicle); - } - break; - case VEHICLE_ENTRY_ANIMATION_OBSERVATION_TOWER: // loc_6D65C3 - if (vehicle->var_C8 <= 0xCCCC) - { - vehicle->var_C8 += 0x3333; - } - else - { - vehicle->var_C8 += 0x3333; - vehicle->animation_frame += 1; - vehicle->animation_frame &= 7; - vehicle_invalidate(vehicle); - } - break; - case VEHICLE_ENTRY_ANIMATION_HELICARS: // loc_6D63F5 - *var_C8 += _vehicleVelocityF64E08; - al = (*var_C8 >> 18) & 3; - if (vehicle->animation_frame != al) - { - vehicle->animation_frame = al; - vehicle_invalidate(vehicle); - } - break; - case VEHICLE_ENTRY_ANIMATION_MONORAIL_CYCLES: // loc_6D64B6 - if (vehicle->num_peeps != 0) - { + case VEHICLE_ENTRY_ANIMATION_MINITURE_RAILWAY_LOCOMOTIVE: // loc_6D652B *var_C8 += _vehicleVelocityF64E08; - eax = ((*var_C8 >> 13) & 0xFF) << 2; - ah = (eax >> 8) & 0xFF; + al = (*var_C8 >> 20) & 3; + if (vehicle->animation_frame != al) + { + ah = al; + al = vehicle->animation_frame; + vehicle->animation_frame = ah; + al &= 0x02; + ah &= 0x02; + if (al != ah) + { + Ride* ride = get_ride(vehicle->ride); + if (ride->entrance_style == RIDE_ENTRANCE_STYLE_PLAIN + || (vehicle->status != VEHICLE_STATUS_MOVING_TO_END_OF_STATION + && vehicle->status != VEHICLE_STATUS_ARRIVING)) + { + int32_t index = vehicle->sprite_direction >> 1; + if (vehicle->vehicle_sprite_type == 2) + { + index += 16; + } + if (vehicle->vehicle_sprite_type == 6) + { + index += 32; + } + steam_particle_create( + vehicle->x + SteamParticleOffsets[index].x, + vehicle->y + SteamParticleOffsets[index].y, + vehicle->z + SteamParticleOffsets[index].z); + } + } + vehicle_invalidate(vehicle); + } + break; + case VEHICLE_ENTRY_ANIMATION_SWAN: // loc_6D6424 + *var_C8 += _vehicleVelocityF64E08; + al = (*var_C8 >> 18) & 2; + if (vehicle->animation_frame != al) + { + vehicle->animation_frame = al; + vehicle_invalidate(vehicle); + } + break; + case VEHICLE_ENTRY_ANIMATION_CANOES: // loc_6D6482 + *var_C8 += _vehicleVelocityF64E08; + eax = ((*var_C8 >> 13) & 0xFF) * 6; + ah = (eax >> 8) & 0xFF; if (vehicle->animation_frame != ah) { vehicle->animation_frame = ah; vehicle_invalidate(vehicle); } - } - break; - case VEHICLE_ENTRY_ANIMATION_MULTI_DIM_COASTER: // loc_6D65E1 - if (vehicle->seat_rotation != vehicle->target_seat_rotation) - { + break; + case VEHICLE_ENTRY_ANIMATION_ROW_BOATS: // loc_6D64F7 + *var_C8 += _vehicleVelocityF64E08; + eax = ((*var_C8 >> 13) & 0xFF) * 7; + ah = (eax >> 8) & 0xFF; + if (vehicle->animation_frame != ah) + { + vehicle->animation_frame = ah; + vehicle_invalidate(vehicle); + } + break; + case VEHICLE_ENTRY_ANIMATION_WATER_TRICYCLES: // loc_6D6453 + *var_C8 += _vehicleVelocityF64E08; + al = (*var_C8 >> 19) & 1; + if (vehicle->animation_frame != al) + { + vehicle->animation_frame = al; + vehicle_invalidate(vehicle); + } + break; + case VEHICLE_ENTRY_ANIMATION_OBSERVATION_TOWER: // loc_6D65C3 if (vehicle->var_C8 <= 0xCCCC) { vehicle->var_C8 += 0x3333; @@ -7409,18 +7353,55 @@ static void vehicle_update_additional_animation(rct_vehicle * vehicle) else { vehicle->var_C8 += 0x3333; - - if (vehicle->seat_rotation >= vehicle->target_seat_rotation) - vehicle->seat_rotation--; - - else - vehicle->seat_rotation++; - - vehicle->animation_frame = (vehicle->seat_rotation - 4) & 7; + vehicle->animation_frame += 1; + vehicle->animation_frame &= 7; vehicle_invalidate(vehicle); } - } - break; + break; + case VEHICLE_ENTRY_ANIMATION_HELICARS: // loc_6D63F5 + *var_C8 += _vehicleVelocityF64E08; + al = (*var_C8 >> 18) & 3; + if (vehicle->animation_frame != al) + { + vehicle->animation_frame = al; + vehicle_invalidate(vehicle); + } + break; + case VEHICLE_ENTRY_ANIMATION_MONORAIL_CYCLES: // loc_6D64B6 + if (vehicle->num_peeps != 0) + { + *var_C8 += _vehicleVelocityF64E08; + eax = ((*var_C8 >> 13) & 0xFF) << 2; + ah = (eax >> 8) & 0xFF; + if (vehicle->animation_frame != ah) + { + vehicle->animation_frame = ah; + vehicle_invalidate(vehicle); + } + } + break; + case VEHICLE_ENTRY_ANIMATION_MULTI_DIM_COASTER: // loc_6D65E1 + if (vehicle->seat_rotation != vehicle->target_seat_rotation) + { + if (vehicle->var_C8 <= 0xCCCC) + { + vehicle->var_C8 += 0x3333; + } + else + { + vehicle->var_C8 += 0x3333; + + if (vehicle->seat_rotation >= vehicle->target_seat_rotation) + vehicle->seat_rotation--; + + else + vehicle->seat_rotation++; + + vehicle->animation_frame = (vehicle->seat_rotation - 4) & 7; + vehicle_invalidate(vehicle); + } + } + break; } } @@ -7428,10 +7409,10 @@ static void vehicle_update_additional_animation(rct_vehicle * vehicle) * * rct2: 0x006DEDB1 */ -static void vehicle_play_scenery_door_open_sound(rct_vehicle * vehicle, rct_tile_element * tileElement) +static void vehicle_play_scenery_door_open_sound(rct_vehicle* vehicle, rct_tile_element* tileElement) { - rct_scenery_entry * wallEntry = get_wall_entry(tileElement->properties.wall.type); - int32_t doorSoundType = wall_entry_get_door_sound(wallEntry); + rct_scenery_entry* wallEntry = get_wall_entry(tileElement->properties.wall.type); + int32_t doorSoundType = wall_entry_get_door_sound(wallEntry); if (doorSoundType != 0) { int32_t soundId = DoorOpenSoundIds[doorSoundType - 1]; @@ -7446,10 +7427,10 @@ static void vehicle_play_scenery_door_open_sound(rct_vehicle * vehicle, rct_tile * * rct2: 0x006DED7A */ -static void vehicle_play_scenery_door_close_sound(rct_vehicle * vehicle, rct_tile_element * tileElement) +static void vehicle_play_scenery_door_close_sound(rct_vehicle* vehicle, rct_tile_element* tileElement) { - rct_scenery_entry * wallEntry = get_wall_entry(tileElement->properties.wall.type); - int32_t doorSoundType = wall_entry_get_door_sound(wallEntry); + rct_scenery_entry* wallEntry = get_wall_entry(tileElement->properties.wall.type); + int32_t doorSoundType = wall_entry_get_door_sound(wallEntry); if (doorSoundType != 0) { int32_t soundId = DoorCloseSoundIds[doorSoundType - 1]; @@ -7464,21 +7445,21 @@ static void vehicle_play_scenery_door_close_sound(rct_vehicle * vehicle, rct_til * * rct2: 0x006DEE93 */ -static void vehicle_update_scenery_door(rct_vehicle * vehicle) +static void vehicle_update_scenery_door(rct_vehicle* vehicle) { - int32_t trackType = vehicle->track_type >> 2; - const rct_preview_track * trackBlock = TrackBlocks[trackType]; + int32_t trackType = vehicle->track_type >> 2; + const rct_preview_track* trackBlock = TrackBlocks[trackType]; while ((trackBlock + 1)->index != 255) { trackBlock++; } - const rct_track_coordinates * trackCoordinates = &TrackCoordinates[trackType]; - int32_t x = floor2(vehicle->x, 32); - int32_t y = floor2(vehicle->y, 32); - int32_t z = (vehicle->track_z - trackBlock->z + trackCoordinates->z_end) >> 3; - int32_t direction = (vehicle->track_direction + trackCoordinates->rotation_end) & 3; + const rct_track_coordinates* trackCoordinates = &TrackCoordinates[trackType]; + int32_t x = floor2(vehicle->x, 32); + int32_t y = floor2(vehicle->y, 32); + int32_t z = (vehicle->track_z - trackBlock->z + trackCoordinates->z_end) >> 3; + int32_t direction = (vehicle->track_direction + trackCoordinates->rotation_end) & 3; - rct_tile_element * tileElement = map_get_wall_element_at(x, y, z, direction); + rct_tile_element* tileElement = map_get_wall_element_at(x, y, z, direction); if (tileElement == nullptr) { return; @@ -7503,19 +7484,19 @@ static void vehicle_update_scenery_door(rct_vehicle * vehicle) * * rct2: 0x006DB38B */ -static bool loc_6DB38B(rct_vehicle * vehicle, rct_tile_element * tileElement) +static bool loc_6DB38B(rct_vehicle* vehicle, rct_tile_element* tileElement) { // Get bank int32_t bankStart = track_get_actual_bank_3(vehicle, tileElement); // Get vangle - int32_t trackType = track_element_get_type(tileElement); + int32_t trackType = track_element_get_type(tileElement); int32_t vangleStart = TrackDefinitions[trackType].vangle_start; return vangleStart == _vehicleVAngleEndF64E36 && bankStart == _vehicleBankEndF64E37; } -static void loc_6DB481(rct_vehicle * vehicle) +static void loc_6DB481(rct_vehicle* vehicle) { uint16_t probability = 0x8000; if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_6) @@ -7536,7 +7517,7 @@ static void loc_6DB481(rct_vehicle * vehicle) * * rct2: 0x006DB545 */ -static void vehicle_trigger_on_ride_photo(rct_vehicle * vehicle, rct_tile_element * tileElement) +static void vehicle_trigger_on_ride_photo(rct_vehicle* vehicle, rct_tile_element* tileElement) { tile_element_set_onride_photo_timeout(tileElement); @@ -7547,18 +7528,18 @@ static void vehicle_trigger_on_ride_photo(rct_vehicle * vehicle, rct_tile_elemen * * rct2: 0x006DEDE8 */ -static void vehicle_update_handle_scenery_door(rct_vehicle * vehicle) +static void vehicle_update_handle_scenery_door(rct_vehicle* vehicle) { - int32_t trackType = vehicle->track_type >> 2; - const rct_preview_track * trackBlock = TrackBlocks[trackType]; - const rct_track_coordinates * trackCoordinates = &TrackCoordinates[trackType]; - int32_t x = vehicle->track_x; - int32_t y = vehicle->track_y; - int32_t z = (vehicle->track_z - trackBlock->z + trackCoordinates->z_begin) >> 3; - int32_t direction = (vehicle->track_direction + trackCoordinates->rotation_begin) & 3; + int32_t trackType = vehicle->track_type >> 2; + const rct_preview_track* trackBlock = TrackBlocks[trackType]; + const rct_track_coordinates* trackCoordinates = &TrackCoordinates[trackType]; + int32_t x = vehicle->track_x; + int32_t y = vehicle->track_y; + int32_t z = (vehicle->track_z - trackBlock->z + trackCoordinates->z_begin) >> 3; + int32_t direction = (vehicle->track_direction + trackCoordinates->rotation_begin) & 3; direction ^= 2; - rct_tile_element * tileElement = map_get_wall_element_at(x, y, z, direction); + rct_tile_element* tileElement = map_get_wall_element_at(x, y, z, direction); if (tileElement == nullptr) { return; @@ -7593,10 +7574,10 @@ static void vehicle_update_play_water_splash_sound() * * rct2: 0x006DB59E */ -static void vehicle_update_handle_water_splash(rct_vehicle * vehicle) +static void vehicle_update_handle_water_splash(rct_vehicle* vehicle) { - rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); - int32_t trackType = vehicle->track_type >> 2; + rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); + int32_t trackType = vehicle->track_type >> 2; if (!(rideEntry->flags & RIDE_ENTRY_FLAG_PLAY_SPLASH_SOUND)) { @@ -7606,8 +7587,8 @@ static void vehicle_update_handle_water_splash(rct_vehicle * vehicle) { if (track_element_is_covered(trackType)) { - rct_vehicle * nextVehicle = GET_VEHICLE(vehicle->next_vehicle_on_ride); - rct_vehicle * nextNextVehicle = GET_VEHICLE(nextVehicle->next_vehicle_on_ride); + rct_vehicle* nextVehicle = GET_VEHICLE(vehicle->next_vehicle_on_ride); + rct_vehicle* nextNextVehicle = GET_VEHICLE(nextVehicle->next_vehicle_on_ride); if (!track_element_is_covered(nextNextVehicle->track_type >> 2)) { if (vehicle->track_progress == 4) @@ -7645,13 +7626,13 @@ static void vehicle_update_handle_water_splash(rct_vehicle * vehicle) * * rct2: 0x006DB807 */ -static void vehicle_update_reverser_car_bogies(rct_vehicle * vehicle) +static void vehicle_update_reverser_car_bogies(rct_vehicle* vehicle) { - const rct_vehicle_info * moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, vehicle->track_progress); - int32_t x = vehicle->track_x + moveInfo->x; - int32_t y = vehicle->track_y + moveInfo->y; - int32_t z = vehicle->z; - sprite_move(x, y, z, (rct_sprite *)vehicle); + const rct_vehicle_info* moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, vehicle->track_progress); + int32_t x = vehicle->track_x + moveInfo->x; + int32_t y = vehicle->track_y + moveInfo->y; + int32_t z = vehicle->z; + sprite_move(x, y, z, (rct_sprite*)vehicle); } /** @@ -7663,13 +7644,13 @@ static void vehicle_update_reverser_car_bogies(rct_vehicle * vehicle) * @param z (dx) * @param otherVehicleIndex (bp) */ -static bool vehicle_update_motion_collision_detection(rct_vehicle * vehicle, int16_t x, int16_t y, int16_t z, - uint16_t * otherVehicleIndex) +static bool vehicle_update_motion_collision_detection( + rct_vehicle* vehicle, int16_t x, int16_t y, int16_t z, uint16_t* otherVehicleIndex) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_1) return false; - rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); if (vehicleEntry == nullptr) { return false; @@ -7683,7 +7664,7 @@ static bool vehicle_update_motion_collision_detection(rct_vehicle * vehicle, int if (otherVehicleIndex == nullptr) return false; - rct_vehicle * collideVehicle = GET_VEHICLE(*otherVehicleIndex); + rct_vehicle* collideVehicle = GET_VEHICLE(*otherVehicleIndex); if (vehicle == collideVehicle) return false; @@ -7701,7 +7682,7 @@ static bool vehicle_update_motion_collision_detection(rct_vehicle * vehicle, int return false; uint16_t ecx = std::min(vehicle->var_44 + collideVehicle->var_44, 560); - ecx = ((ecx >> 1) * 30) >> 8; + ecx = ((ecx >> 1) * 30) >> 8; if (x_diff + y_diff + z_diff >= ecx) return false; @@ -7715,9 +7696,9 @@ static bool vehicle_update_motion_collision_detection(rct_vehicle * vehicle, int LocationXY8 location = { static_cast(x / 32), static_cast(y / 32) }; - bool mayCollide = false; - uint16_t collideId = SPRITE_INDEX_NULL; - rct_vehicle * collideVehicle = nullptr; + bool mayCollide = false; + uint16_t collideId = SPRITE_INDEX_NULL; + rct_vehicle* collideVehicle = nullptr; for (auto xy_offset : Unk9A37C4) { location.x += xy_offset.x; @@ -7741,7 +7722,7 @@ static bool vehicle_update_motion_collision_detection(rct_vehicle * vehicle, int if (collideVehicle->ride_subtype == RIDE_TYPE_NULL) continue; - rct_ride_entry_vehicle * collideType = vehicle_get_vehicle_entry(collideVehicle); + rct_ride_entry_vehicle* collideType = vehicle_get_vehicle_entry(collideVehicle); if (collideType == nullptr) continue; @@ -7765,7 +7746,7 @@ static bool vehicle_update_motion_collision_detection(rct_vehicle * vehicle, int } uint32_t ecx = vehicle->var_44 + collideVehicle->var_44; - ecx = ((ecx >> 1) * 30) >> 8; + ecx = ((ecx >> 1) * 30) >> 8; if (x_diff + y_diff >= ecx) continue; @@ -7782,9 +7763,9 @@ static bool vehicle_update_motion_collision_detection(rct_vehicle * vehicle, int continue; uint32_t offsetSpriteDirection = (vehicle->sprite_direction + 4) & 31; - uint32_t offsetDirection = offsetSpriteDirection >> 3; - uint32_t next_x_diff = abs(x + AvoidCollisionMoveOffset[offsetDirection].x - collideVehicle->x); - uint32_t next_y_diff = abs(y + AvoidCollisionMoveOffset[offsetDirection].y - collideVehicle->y); + uint32_t offsetDirection = offsetSpriteDirection >> 3; + uint32_t next_x_diff = abs(x + AvoidCollisionMoveOffset[offsetDirection].x - collideVehicle->x); + uint32_t next_y_diff = abs(y + AvoidCollisionMoveOffset[offsetDirection].y - collideVehicle->y); if (next_x_diff + next_y_diff < x_diff + y_diff) { @@ -7847,8 +7828,8 @@ static bool vehicle_update_motion_collision_detection(rct_vehicle * vehicle, int } } - if (collideVehicle->status == VEHICLE_STATUS_TRAVELLING_BOAT && vehicle->status != VEHICLE_STATUS_ARRIVING && - vehicle->status != VEHICLE_STATUS_TRAVELLING) + if (collideVehicle->status == VEHICLE_STATUS_TRAVELLING_BOAT && vehicle->status != VEHICLE_STATUS_ARRIVING + && vehicle->status != VEHICLE_STATUS_TRAVELLING) { return false; } @@ -7863,16 +7844,16 @@ static bool vehicle_update_motion_collision_detection(rct_vehicle * vehicle, int * * rct2: 0x006DB7D6 */ -static void vehicle_reverse_reverser_car(rct_vehicle * vehicle) +static void vehicle_reverse_reverser_car(rct_vehicle* vehicle) { - rct_vehicle * previousVehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride); - rct_vehicle * nextVehicle = GET_VEHICLE(vehicle->next_vehicle_on_ride); + rct_vehicle* previousVehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride); + rct_vehicle* nextVehicle = GET_VEHICLE(vehicle->next_vehicle_on_ride); vehicle->track_progress = 168; vehicle->vehicle_type ^= 1; previousVehicle->track_progress = 86; - nextVehicle->track_progress = 158; + nextVehicle->track_progress = 158; vehicle_update_reverser_car_bogies(nextVehicle); vehicle_update_reverser_car_bogies(previousVehicle); @@ -7882,9 +7863,9 @@ static void vehicle_reverse_reverser_car(rct_vehicle * vehicle) * * rct2: 0x006DBF3E */ -static void sub_6DBF3E(rct_vehicle * vehicle) +static void sub_6DBF3E(rct_vehicle* vehicle) { - rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); vehicle->acceleration = vehicle->acceleration / _vehicleUnkF64E10; if (vehicle->var_CD == 2) @@ -7900,11 +7881,11 @@ static void sub_6DBF3E(rct_vehicle * vehicle) _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_3; - rct_tile_element * tileElement = nullptr; - if (map_is_location_valid({vehicle->track_x, vehicle->track_y})) + rct_tile_element* tileElement = nullptr; + if (map_is_location_valid({ vehicle->track_x, vehicle->track_y })) { - tileElement = - map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); + tileElement + = map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); } if (tileElement == nullptr) @@ -7921,11 +7902,11 @@ static void sub_6DBF3E(rct_vehicle * vehicle) { if (vehicle->track_progress > 3 && !(vehicle->update_flags & VEHICLE_UPDATE_FLAG_REVERSING_SHUTTLE)) { - CoordsXYE input, output; - int32_t outputZ, outputDirection; + CoordsXYE input, output; + int32_t outputZ, outputDirection; - input.x = vehicle->track_x; - input.y = vehicle->track_y; + input.x = vehicle->track_x; + input.y = vehicle->track_y; input.element = tileElement; if (!track_block_get_next(&input, &output, &outputZ, &outputDirection)) { @@ -7975,15 +7956,15 @@ static void sub_6DBF3E(rct_vehicle * vehicle) * * rct2: 0x006DB08C */ -static bool vehicle_update_track_motion_forwards_get_new_track(rct_vehicle * vehicle, uint16_t trackType, Ride * ride, - rct_ride_entry * rideEntry) +static bool vehicle_update_track_motion_forwards_get_new_track( + rct_vehicle* vehicle, uint16_t trackType, Ride* ride, rct_ride_entry* rideEntry) { registers regs = {}; _vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_end; - _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end; - rct_tile_element * tileElement = - map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); + _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end; + rct_tile_element* tileElement + = map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); if (tileElement == nullptr) { @@ -8017,21 +7998,21 @@ static bool vehicle_update_track_motion_forwards_get_new_track(rct_vehicle * veh switch (vehicle->var_CD) { - default: - goto loc_6DB358; - case 2: - case 3: - vehicle->var_CD = 2; - goto loc_6DB32A; - case 4: - vehicle->var_CD = 1; - goto loc_6DB358; - case 7: - vehicle->var_CD = 6; - goto loc_6DB358; - case 8: - vehicle->var_CD = 5; - goto loc_6DB358; + default: + goto loc_6DB358; + case 2: + case 3: + vehicle->var_CD = 2; + goto loc_6DB32A; + case 4: + vehicle->var_CD = 1; + goto loc_6DB358; + case 7: + vehicle->var_CD = 6; + goto loc_6DB358; + case 8: + vehicle->var_CD = 5; + goto loc_6DB358; } loc_6DB32A: @@ -8041,33 +8022,33 @@ loc_6DB32A: { return false; } - regs.eax = trackBeginEnd.begin_x; - regs.ecx = trackBeginEnd.begin_y; - regs.edx = trackBeginEnd.begin_z; - regs.bl = trackBeginEnd.begin_direction; + regs.eax = trackBeginEnd.begin_x; + regs.ecx = trackBeginEnd.begin_y; + regs.edx = trackBeginEnd.begin_z; + regs.bl = trackBeginEnd.begin_direction; tileElement = trackBeginEnd.begin_element; } goto loc_6DB41D; loc_6DB358: { - CoordsXYE xyElement; - int32_t z, direction; - xyElement.x = vehicle->track_x; - xyElement.y = vehicle->track_y; + CoordsXYE xyElement; + int32_t z, direction; + xyElement.x = vehicle->track_x; + xyElement.y = vehicle->track_y; xyElement.element = tileElement; if (!track_block_get_next(&xyElement, &xyElement, &z, &direction)) { return false; } tileElement = xyElement.element; - regs.eax = xyElement.x; - regs.ecx = xyElement.y; - regs.edx = z; - regs.bl = direction; + regs.eax = xyElement.x; + regs.ecx = xyElement.y; + regs.edx = z; + regs.bl = direction; } - if (track_element_get_type(tileElement) == TRACK_ELEM_LEFT_REVERSER || - track_element_get_type(tileElement) == TRACK_ELEM_RIGHT_REVERSER) + if (track_element_get_type(tileElement) == TRACK_ELEM_LEFT_REVERSER + || track_element_get_type(tileElement) == TRACK_ELEM_RIGHT_REVERSER) { if (!vehicle->is_child && vehicle->velocity <= 0x30000) { @@ -8099,7 +8080,7 @@ loc_6DB41D: vehicle->track_z = regs.dx; // TODO check if getting the vehicle entry again is necessary - rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); if (vehicleEntry == nullptr) { return false; @@ -8172,13 +8153,13 @@ loc_6DB41D: * * rct2: 0x006DAEB9 */ -static bool vehicle_update_track_motion_forwards(rct_vehicle * vehicle, rct_ride_entry_vehicle * vehicleEntry, Ride * ride, - rct_ride_entry * rideEntry) +static bool vehicle_update_track_motion_forwards( + rct_vehicle* vehicle, rct_ride_entry_vehicle* vehicleEntry, Ride* ride, rct_ride_entry* rideEntry) { registers regs = {}; loc_6DAEB9: - regs.edi = vehicle->track_type; - regs.cx = vehicle->track_type >> 2; + regs.edi = vehicle->track_type; + regs.cx = vehicle->track_type >> 2; int32_t trackType = vehicle->track_type >> 2; if (trackType == TRACK_ELEM_HEARTLINE_TRANSFER_UP || trackType == TRACK_ELEM_HEARTLINE_TRANSFER_DOWN) { @@ -8198,9 +8179,8 @@ loc_6DAEB9: } else if (trackType == TRACK_ELEM_BRAKES) { - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN && - ride->breakdown_reason_pending == BREAKDOWN_BRAKES_FAILURE && - ride->mechanic_status == RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES)) + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN && ride->breakdown_reason_pending == BREAKDOWN_BRAKES_FAILURE + && ride->mechanic_status == RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES)) { regs.eax = vehicle->brake_speed << 16; if (regs.eax < _vehicleVelocityF64E08) @@ -8227,8 +8207,8 @@ loc_6DAEB9: } } - if ((trackType == TRACK_ELEM_FLAT && ride->type == RIDE_TYPE_REVERSE_FREEFALL_COASTER) || - (trackType == TRACK_ELEM_POWERED_LIFT)) + if ((trackType == TRACK_ELEM_FLAT && ride->type == RIDE_TYPE_REVERSE_FREEFALL_COASTER) + || (trackType == TRACK_ELEM_POWERED_LIFT)) { vehicle->acceleration = RideProperties[ride->type].powered_lift_acceleration << 16; } @@ -8257,7 +8237,7 @@ loc_6DAEB9: if (vehicle->track_progress == 32) { vehicle->vehicle_type = vehicleEntry->log_flume_reverser_vehicle_type; - vehicleEntry = vehicle_get_vehicle_entry(vehicle); + vehicleEntry = vehicle_get_vehicle_entry(vehicle); } } else @@ -8268,7 +8248,7 @@ loc_6DAEB9: regs.ax = vehicle->track_progress + 1; - const rct_vehicle_info * moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, 0); + const rct_vehicle_info* moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, 0); // Track Total Progress is in the two bytes before the move info list uint16_t trackTotalProgress = vehicle_get_move_info_size(vehicle->var_CD, vehicle->track_type); @@ -8287,7 +8267,7 @@ loc_6DAEB9: vehicle_update_handle_water_splash(vehicle); // loc_6DB706 - moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, vehicle->track_progress); + moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, vehicle->track_progress); trackType = vehicle->track_type >> 2; { int16_t x = vehicle->track_x + moveInfo->x; @@ -8308,19 +8288,19 @@ loc_6DAEB9: regs.ebx |= 4; } - if (vehicle->var_CD == 15 && (trackType == TRACK_ELEM_LEFT_REVERSER || trackType == TRACK_ELEM_RIGHT_REVERSER) && - vehicle->track_progress >= 30 && vehicle->track_progress <= 66) + if (vehicle->var_CD == 15 && (trackType == TRACK_ELEM_LEFT_REVERSER || trackType == TRACK_ELEM_RIGHT_REVERSER) + && vehicle->track_progress >= 30 && vehicle->track_progress <= 66) { regs.ebx |= 8; } - if (vehicle->var_CD == 16 && (trackType == TRACK_ELEM_LEFT_REVERSER || trackType == TRACK_ELEM_RIGHT_REVERSER) && - vehicle->track_progress == 96) + if (vehicle->var_CD == 16 && (trackType == TRACK_ELEM_LEFT_REVERSER || trackType == TRACK_ELEM_RIGHT_REVERSER) + && vehicle->track_progress == 96) { vehicle_reverse_reverser_car(vehicle); - const rct_vehicle_info * moveInfo2 = - vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, vehicle->track_progress); + const rct_vehicle_info* moveInfo2 + = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, vehicle->track_progress); x = vehicle->x + moveInfo2->x; y = vehicle->y + moveInfo2->y; } @@ -8328,20 +8308,20 @@ loc_6DAEB9: // loc_6DB8A5 regs.ebx = dword_9A2930[regs.ebx]; vehicle->remaining_distance -= regs.ebx; - unk_F64E20.x = x; - unk_F64E20.y = y; - unk_F64E20.z = z; - vehicle->sprite_direction = moveInfo->direction; - vehicle->bank_rotation = moveInfo->bank_rotation; + unk_F64E20.x = x; + unk_F64E20.y = y; + unk_F64E20.z = z; + vehicle->sprite_direction = moveInfo->direction; + vehicle->bank_rotation = moveInfo->bank_rotation; vehicle->vehicle_sprite_type = moveInfo->vehicle_sprite_type; regs.ebx = moveInfo->vehicle_sprite_type; if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_25) && moveInfo->vehicle_sprite_type != 0) { - vehicle->swing_sprite = 0; + vehicle->swing_sprite = 0; vehicle->swinging_car_var_0 = 0; - vehicle->var_4E = 0; + vehicle->var_4E = 0; } // vehicle == frontVehicle @@ -8350,7 +8330,7 @@ loc_6DAEB9: if (_vehicleVelocityF64E08 >= 0) { regs.bp = vehicle->prev_vehicle_on_ride; - if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16_t *)®s.bp)) + if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16_t*)®s.bp)) { goto loc_6DB967; } @@ -8374,7 +8354,7 @@ loc_6DB94A: regs.eax = vehicle->remaining_distance + 1; _vehicleVelocityF64E0C -= regs.eax; vehicle->remaining_distance = 0xFFFFFFFF; - regs.ebx = vehicle->vehicle_sprite_type; + regs.ebx = vehicle->vehicle_sprite_type; return false; loc_6DB967: @@ -8383,7 +8363,7 @@ loc_6DB967: vehicle->remaining_distance -= regs.eax; // Might need to be bp rather than vehicle, but hopefully not - rct_vehicle * head = vehicle_get_head(GET_VEHICLE(regs.bp)); + rct_vehicle* head = vehicle_get_head(GET_VEHICLE(regs.bp)); regs.eax = abs(vehicle->velocity - head->velocity); if (!(rideEntry->flags & RIDE_ENTRY_FLAG_DISABLE_COLLISION_CRASHES)) @@ -8404,8 +8384,8 @@ loc_6DB967: else { int32_t newHeadVelocity = vehicle->velocity >> 1; - vehicle->velocity = head->velocity >> 1; - head->velocity = newHeadVelocity; + vehicle->velocity = head->velocity >> 1; + head->velocity = newHeadVelocity; } _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_1; return false; @@ -8415,18 +8395,18 @@ loc_6DB967: * * rct2: 0x006DBAA6 */ -static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle * vehicle, uint16_t trackType, Ride * ride, - uint16_t * progress) +static bool vehicle_update_track_motion_backwards_get_new_track( + rct_vehicle* vehicle, uint16_t trackType, Ride* ride, uint16_t* progress) { _vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_start; - _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_start; - rct_tile_element * tileElement = - map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); + _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_start; + rct_tile_element* tileElement + = map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); if (tileElement == nullptr) return false; - bool nextTileBackwards = true; + bool nextTileBackwards = true; int32_t direction; // loc_6DBB08:; int16_t x = vehicle->track_x; @@ -8435,20 +8415,20 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle * ve switch (vehicle->var_CD) { - case 3: - vehicle->var_CD = 1; - break; - case 7: - vehicle->var_CD = 5; - break; - case 8: - vehicle->var_CD = 6; - break; - case 2: - case 4: - vehicle->var_CD = 2; - nextTileBackwards = false; - break; + case 3: + vehicle->var_CD = 1; + break; + case 7: + vehicle->var_CD = 5; + break; + case 8: + vehicle->var_CD = 6; + break; + case 2: + case 4: + vehicle->var_CD = 2; + nextTileBackwards = false; + break; } if (nextTileBackwards == true) @@ -8467,10 +8447,11 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle * ve return false; } - bool isInverted = ((vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) > 0) ^ track_element_is_inverted(tileElement); - int32_t bank = TrackDefinitions[trackType].bank_end; - bank = track_get_actual_bank_2(ride->type, isInverted, bank); - int32_t vAngle = TrackDefinitions[trackType].vangle_end; + bool isInverted + = ((vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) > 0) ^ track_element_is_inverted(tileElement); + int32_t bank = TrackDefinitions[trackType].bank_end; + bank = track_get_actual_bank_2(ride->type, isInverted, bank); + int32_t vAngle = TrackDefinitions[trackType].vangle_end; if (_vehicleVAngleEndF64E36 != vAngle || _vehicleBankEndF64E37 != bank) { return false; @@ -8486,29 +8467,29 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle * ve } } - x = trackBeginEnd.begin_x; - y = trackBeginEnd.begin_y; - z = trackBeginEnd.begin_z; + x = trackBeginEnd.begin_x; + y = trackBeginEnd.begin_y; + z = trackBeginEnd.begin_z; direction = trackBeginEnd.begin_direction; } else { // loc_6DBB4F:; - CoordsXYE input; - CoordsXYE output; - int32_t outputZ; + CoordsXYE input; + CoordsXYE output; + int32_t outputZ; - input.x = x; - input.y = y; + input.x = x; + input.y = y; input.element = tileElement; if (!track_block_get_next(&input, &output, &outputZ, &direction)) { return false; } tileElement = output.element; - x = output.x; - y = output.y; - z = outputZ; + x = output.x; + y = output.y; + z = outputZ; } // loc_6DBC3B: @@ -8518,13 +8499,14 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle * ve if (vehicle->var_CD != 0 && vehicle->var_CD < 5) { - if (ride->chairlift_bullwheel_location[1].x == (x >> 5) && ride->chairlift_bullwheel_location[1].y == (y >> 5) && - ride->chairlift_bullwheel_z[1] == (z >> 3)) + if (ride->chairlift_bullwheel_location[1].x == (x >> 5) && ride->chairlift_bullwheel_location[1].y == (y >> 5) + && ride->chairlift_bullwheel_z[1] == (z >> 3)) { vehicle->var_CD = 3; } - else if (ride->chairlift_bullwheel_location[0].x == (x >> 5) && ride->chairlift_bullwheel_location[0].y == (y >> 5) && - ride->chairlift_bullwheel_z[1] == (z >> 3)) + else if ( + ride->chairlift_bullwheel_location[0].x == (x >> 5) && ride->chairlift_bullwheel_location[0].y == (y >> 5) + && ride->chairlift_bullwheel_z[1] == (z >> 3)) { vehicle->var_CD = 4; } @@ -8572,7 +8554,7 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle * ve // There are two bytes before the move info list uint16_t trackTotalProgress = vehicle_get_move_info_size(vehicle->var_CD, vehicle->track_type); - *progress = trackTotalProgress - 1; + *progress = trackTotalProgress - 1; return true; } @@ -8580,8 +8562,8 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle * ve * * rct2: 0x006DBA33 */ -static bool vehicle_update_track_motion_backwards(rct_vehicle * vehicle, rct_ride_entry_vehicle * vehicleEntry, Ride * ride, - rct_ride_entry * rideEntry) +static bool vehicle_update_track_motion_backwards( + rct_vehicle* vehicle, rct_ride_entry_vehicle* vehicleEntry, Ride* ride, rct_ride_entry* rideEntry) { registers regs = {}; @@ -8592,7 +8574,7 @@ loc_6DBA33:; int32_t unkVelocity = _vehicleVelocityF64E08; if (unkVelocity < -524288) { - unkVelocity = abs(unkVelocity); + unkVelocity = abs(unkVelocity); vehicle->acceleration = unkVelocity * 2; } } @@ -8602,7 +8584,7 @@ loc_6DBA33:; regs.eax = -(vehicle->brake_speed << 16); if (regs.eax > _vehicleVelocityF64E08) { - regs.eax = _vehicleVelocityF64E08 * -16; + regs.eax = _vehicleVelocityF64E08 * -16; vehicle->acceleration = regs.eax; } } @@ -8613,7 +8595,7 @@ loc_6DBA33:; if (regs.eax < _vehicleVelocityF64E08) { - regs.eax = RideProperties[ride->type].booster_acceleration << 16; + regs.eax = RideProperties[ride->type].booster_acceleration << 16; vehicle->acceleration = regs.eax; } } @@ -8623,7 +8605,7 @@ loc_6DBA33:; { vehicle_update_crossings(vehicle); - if (!vehicle_update_track_motion_backwards_get_new_track(vehicle, trackType, ride, (uint16_t *)®s.ax)) + if (!vehicle_update_track_motion_backwards_get_new_track(vehicle, trackType, ride, (uint16_t*)®s.ax)) { goto loc_6DBE5E; } @@ -8632,8 +8614,7 @@ loc_6DBA33:; // loc_6DBD42 vehicle->track_progress = regs.ax; { - const rct_vehicle_info * moveInfo = - vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, vehicle->track_progress); + const rct_vehicle_info* moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, vehicle->track_progress); int16_t x = vehicle->track_x + moveInfo->x; int16_t y = vehicle->track_y + moveInfo->y; int16_t z = vehicle->track_z + moveInfo->z + RideData5[ride->type].z_offset; @@ -8653,19 +8634,19 @@ loc_6DBA33:; } vehicle->remaining_distance += dword_9A2930[regs.ebx]; - unk_F64E20.x = x; - unk_F64E20.y = y; - unk_F64E20.z = z; - vehicle->sprite_direction = moveInfo->direction; - vehicle->bank_rotation = moveInfo->bank_rotation; - regs.ebx = moveInfo->vehicle_sprite_type; + unk_F64E20.x = x; + unk_F64E20.y = y; + unk_F64E20.z = z; + vehicle->sprite_direction = moveInfo->direction; + vehicle->bank_rotation = moveInfo->bank_rotation; + regs.ebx = moveInfo->vehicle_sprite_type; vehicle->vehicle_sprite_type = regs.bl; if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_25) && regs.bl != 0) { - vehicle->swing_sprite = 0; + vehicle->swing_sprite = 0; vehicle->swinging_car_var_0 = 0; - vehicle->var_4E = 0; + vehicle->var_4E = 0; } if (vehicle == _vehicleFrontVehicle) @@ -8673,7 +8654,7 @@ loc_6DBA33:; if (_vehicleVelocityF64E08 < 0) { regs.bp = vehicle->next_vehicle_on_ride; - if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16_t *)®s.bp)) + if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16_t*)®s.bp)) { goto loc_6DBE7F; } @@ -8704,9 +8685,9 @@ loc_6DBE7F: _vehicleVelocityF64E0C -= regs.eax; vehicle->remaining_distance -= regs.eax; - rct_vehicle * v3 = GET_VEHICLE(regs.bp); - rct_vehicle * v4 = gCurrentVehicle; - regs.eax = abs(v4->velocity - v3->velocity); + rct_vehicle* v3 = GET_VEHICLE(regs.bp); + rct_vehicle* v4 = gCurrentVehicle; + regs.eax = abs(v4->velocity - v3->velocity); if (!(rideEntry->flags & RIDE_ENTRY_FLAG_DISABLE_COLLISION_CRASHES)) { @@ -8727,8 +8708,8 @@ loc_6DBE7F: else { int32_t v3Velocity = v3->velocity; - v3->velocity = v4->velocity >> 1; - v4->velocity = v3Velocity >> 1; + v3->velocity = v4->velocity >> 1; + v4->velocity = v3Velocity >> 1; _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_2; } @@ -8740,17 +8721,17 @@ loc_6DBE7F: * * */ -static int32_t vehicle_update_track_motion_mini_golf(rct_vehicle * vehicle, int32_t * outStation) +static int32_t vehicle_update_track_motion_mini_golf(rct_vehicle* vehicle, int32_t* outStation) { registers regs = {}; - Ride * ride = get_ride(vehicle->ride); - rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); - rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + Ride* ride = get_ride(vehicle->ride); + rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); + rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); - rct_tile_element * tileElement = nullptr; + rct_tile_element* tileElement = nullptr; - gCurrentVehicle = vehicle; + gCurrentVehicle = vehicle; _vehicleMotionTrackFlags = 0; vehicle->velocity += vehicle->acceleration; _vehicleVelocityF64E08 = vehicle->velocity; @@ -8762,9 +8743,9 @@ static int32_t vehicle_update_track_motion_mini_golf(rct_vehicle * vehicle, int3 _vehicleFrontVehicle = vehicle; loc_6DC40E: - regs.ebx = vehicle->vehicle_sprite_type; - _vehicleUnkF64E10 = 1; - vehicle->acceleration = dword_9A2970[vehicle->vehicle_sprite_type]; + regs.ebx = vehicle->vehicle_sprite_type; + _vehicleUnkF64E10 = 1; + vehicle->acceleration = dword_9A2970[vehicle->vehicle_sprite_type]; vehicle->remaining_distance = _vehicleVelocityF64E0C + vehicle->remaining_distance; if (vehicle->remaining_distance < 0) { @@ -8802,8 +8783,8 @@ loc_6DC476: if (vehicle->mini_golf_flags & (1 << 0)) { - regs.di = vehicle->is_child ? vehicle->prev_vehicle_on_ride : vehicle->next_vehicle_on_ride; - rct_vehicle * vEDI = GET_VEHICLE(regs.di); + regs.di = vehicle->is_child ? vehicle->prev_vehicle_on_ride : vehicle->next_vehicle_on_ride; + rct_vehicle* vEDI = GET_VEHICLE(regs.di); if (!(vEDI->mini_golf_flags & (1 << 0)) || (vEDI->mini_golf_flags & (1 << 2))) { goto loc_6DC985; @@ -8818,8 +8799,8 @@ loc_6DC476: if (vehicle->mini_golf_flags & (1 << 1)) { - regs.di = vehicle->is_child ? vehicle->prev_vehicle_on_ride : vehicle->next_vehicle_on_ride; - rct_vehicle * vEDI = GET_VEHICLE(regs.di); + regs.di = vehicle->is_child ? vehicle->prev_vehicle_on_ride : vehicle->next_vehicle_on_ride; + rct_vehicle* vEDI = GET_VEHICLE(regs.di); if (!(vEDI->mini_golf_flags & (1 << 1)) || (vEDI->mini_golf_flags & (1 << 2))) { goto loc_6DC985; @@ -8834,7 +8815,7 @@ loc_6DC476: if (vehicle->mini_golf_flags & (1 << 3)) { - rct_vehicle * vEDI = vehicle; + rct_vehicle* vEDI = vehicle; for (;;) { @@ -8869,7 +8850,7 @@ loc_6DC476: // There are two bytes before the move info list { uint16_t unk16_v34 = vehicle->track_progress + 1; - uint16_t unk16 = vehicle_get_move_info_size(vehicle->var_CD, vehicle->track_type); + uint16_t unk16 = vehicle_get_move_info_size(vehicle->var_CD, vehicle->track_type); if (unk16_v34 < unk16) { regs.ax = unk16_v34; @@ -8878,29 +8859,29 @@ loc_6DC476: } { - uint16_t trackType = vehicle->track_type >> 2; + uint16_t trackType = vehicle->track_type >> 2; _vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_end; - _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end; - tileElement = - map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); + _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end; + tileElement + = map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); } int16_t x, y, z; int32_t direction; { - CoordsXYE input, output; - int32_t outZ, outDirection; - input.x = vehicle->track_x; - input.y = vehicle->track_y; + CoordsXYE input, output; + int32_t outZ, outDirection; + input.x = vehicle->track_x; + input.y = vehicle->track_y; input.element = tileElement; if (!track_block_get_next(&input, &output, &outZ, &outDirection)) { goto loc_6DC9BC; } tileElement = output.element; - x = output.x; - y = output.y; - z = outZ; - direction = outDirection; + x = output.x; + y = output.y; + z = outZ; + direction = outDirection; } if (!loc_6DB38B(vehicle, tileElement)) @@ -8926,8 +8907,8 @@ loc_6DC476: if (vehicle->is_child) { - rct_vehicle * prevVehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride); - regs.al = prevVehicle->var_CD; + rct_vehicle* prevVehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride); + regs.al = prevVehicle->var_CD; if (regs.al != 9) { regs.al--; @@ -8937,8 +8918,8 @@ loc_6DC476: vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_ON_LIFT_HILL; vehicle->track_type = (track_element_get_type(tileElement) << 2) | (direction & 3); - vehicle->var_CF = tile_element_get_brake_booster_speed(tileElement); - regs.ax = 0; + vehicle->var_CF = tile_element_get_brake_booster_speed(tileElement); + regs.ax = 0; loc_6DC743: vehicle->track_progress = regs.ax; @@ -8950,7 +8931,7 @@ loc_6DC743: vehicle->animation_frame = 0; } } - const rct_vehicle_info * moveInfo; + const rct_vehicle_info* moveInfo; for (;;) { moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, vehicle->track_progress); @@ -8960,80 +8941,80 @@ loc_6DC743: } switch (moveInfo->y) { - case 0: // loc_6DC7B4 - if (vehicle->is_child) - { - vehicle->mini_golf_flags |= (1 << 3); - } - else - { - uint16_t rand16 = scenario_rand() & 0xFFFF; - regs.bl = 14; - if (rand16 <= 0xA000) + case 0: // loc_6DC7B4 + if (vehicle->is_child) { - regs.bl = 12; - if (rand16 <= 0x900) + vehicle->mini_golf_flags |= (1 << 3); + } + else + { + uint16_t rand16 = scenario_rand() & 0xFFFF; + regs.bl = 14; + if (rand16 <= 0xA000) { - regs.bl = 10; + regs.bl = 12; + if (rand16 <= 0x900) + { + regs.bl = 10; + } + } + vehicle->var_CD = regs.bl; + } + vehicle->track_progress++; + break; + case 1: // loc_6DC7ED + vehicle->var_D3 = (uint8_t)moveInfo->z; + vehicle->track_progress++; + break; + case 2: // loc_6DC800 + vehicle->mini_golf_flags |= (1 << 0); + vehicle->track_progress++; + break; + case 3: // loc_6DC810 + vehicle->mini_golf_flags |= (1 << 1); + vehicle->track_progress++; + break; + case 4: // loc_6DC820 + z = moveInfo->z; + // When the ride is closed occasionally the peep is removed + // but the vehicle is still on the track. This will prevent + // it from crashing in that situation. + if (vehicle->peep[0] != SPRITE_INDEX_NULL) + { + if (z == 2) + { + rct_peep* peep = GET_PEEP(vehicle->peep[0]); + if (peep->id & 7) + { + z = 7; + } + } + if (z == 6) + { + rct_peep* peep = GET_PEEP(vehicle->peep[0]); + if (peep->id & 7) + { + z = 8; + } } } - vehicle->var_CD = regs.bl; - } - vehicle->track_progress++; - break; - case 1: // loc_6DC7ED - vehicle->var_D3 = (uint8_t)moveInfo->z; - vehicle->track_progress++; - break; - case 2: // loc_6DC800 - vehicle->mini_golf_flags |= (1 << 0); - vehicle->track_progress++; - break; - case 3: // loc_6DC810 - vehicle->mini_golf_flags |= (1 << 1); - vehicle->track_progress++; - break; - case 4: // loc_6DC820 - z = moveInfo->z; - // When the ride is closed occasionally the peep is removed - // but the vehicle is still on the track. This will prevent - // it from crashing in that situation. - if (vehicle->peep[0] != SPRITE_INDEX_NULL) - { - if (z == 2) - { - rct_peep * peep = GET_PEEP(vehicle->peep[0]); - if (peep->id & 7) - { - z = 7; - } - } - if (z == 6) - { - rct_peep * peep = GET_PEEP(vehicle->peep[0]); - if (peep->id & 7) - { - z = 8; - } - } - } - vehicle->mini_golf_current_animation = (uint8_t)z; - vehicle->animation_frame = 0; - vehicle->track_progress++; - break; - case 5: // loc_6DC87A - vehicle->mini_golf_flags |= (1 << 2); - vehicle->track_progress++; - break; - case 6: // loc_6DC88A - vehicle->mini_golf_flags &= ~(1 << 4); - vehicle->mini_golf_flags |= (1 << 5); - vehicle->track_progress++; - break; - default: - log_error("Invalid move info..."); - assert(false); - break; + vehicle->mini_golf_current_animation = (uint8_t)z; + vehicle->animation_frame = 0; + vehicle->track_progress++; + break; + case 5: // loc_6DC87A + vehicle->mini_golf_flags |= (1 << 2); + vehicle->track_progress++; + break; + case 6: // loc_6DC88A + vehicle->mini_golf_flags &= ~(1 << 4); + vehicle->mini_golf_flags |= (1 << 5); + vehicle->track_progress++; + break; + default: + log_error("Invalid move info..."); + assert(false); + break; } } @@ -9063,20 +9044,20 @@ loc_6DC743: vehicle->remaining_distance = 0; } - unk_F64E20.x = x; - unk_F64E20.y = y; - unk_F64E20.z = z; - vehicle->sprite_direction = moveInfo->direction; - vehicle->bank_rotation = moveInfo->bank_rotation; + unk_F64E20.x = x; + unk_F64E20.y = y; + unk_F64E20.z = z; + vehicle->sprite_direction = moveInfo->direction; + vehicle->bank_rotation = moveInfo->bank_rotation; vehicle->vehicle_sprite_type = moveInfo->vehicle_sprite_type; if (rideEntry->vehicles[0].flags & VEHICLE_ENTRY_FLAG_25) { if (vehicle->vehicle_sprite_type != 0) { - vehicle->swing_sprite = 0; + vehicle->swing_sprite = 0; vehicle->swinging_car_var_0 = 0; - vehicle->var_4E = 0; + vehicle->var_4E = 0; } } @@ -9085,7 +9066,7 @@ loc_6DC743: if (_vehicleVelocityF64E08 >= 0) { regs.bp = vehicle->prev_vehicle_on_ride; - vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16_t *)®s.bp); + vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16_t*)®s.bp); } } goto loc_6DC99A; @@ -9134,12 +9115,12 @@ loc_6DCA9A: } { - uint16_t trackType = vehicle->track_type >> 2; + uint16_t trackType = vehicle->track_type >> 2; _vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_end; - _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end; + _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end; - tileElement = - map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); + tileElement + = map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); } { track_begin_end trackBeginEnd; @@ -9147,10 +9128,10 @@ loc_6DCA9A: { goto loc_6DC9BC; } - x = trackBeginEnd.begin_x; - y = trackBeginEnd.begin_y; - z = trackBeginEnd.begin_z; - direction = trackBeginEnd.begin_direction; + x = trackBeginEnd.begin_x; + y = trackBeginEnd.begin_y; + z = trackBeginEnd.begin_z; + direction = trackBeginEnd.begin_direction; tileElement = trackBeginEnd.begin_element; } @@ -9188,7 +9169,7 @@ loc_6DCA9A: } vehicle->track_type = (track_element_get_type(tileElement) << 2) | (direction & 3); - vehicle->var_CF = track_element_get_seat_rotation(tileElement) << 1; + vehicle->var_CF = track_element_get_seat_rotation(tileElement) << 1; // There are two bytes before the move info list regs.ax = vehicle_get_move_info_size(vehicle->var_CD, vehicle->track_type); @@ -9197,9 +9178,9 @@ loc_6DCC2C: vehicle->track_progress = regs.ax; moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, vehicle->track_progress); - x = vehicle->track_x + moveInfo->x; - y = vehicle->track_y + moveInfo->y; - z = vehicle->track_z + moveInfo->z + RideData5[ride->type].z_offset; + x = vehicle->track_x + moveInfo->x; + y = vehicle->track_y + moveInfo->y; + z = vehicle->track_z + moveInfo->z + RideData5[ride->type].z_offset; // Investigate redundant code regs.ebx = 0; @@ -9222,20 +9203,20 @@ loc_6DCC2C: vehicle->remaining_distance = 0; } - unk_F64E20.x = x; - unk_F64E20.y = y; - unk_F64E20.z = z; - vehicle->sprite_direction = moveInfo->direction; - vehicle->bank_rotation = moveInfo->bank_rotation; + unk_F64E20.x = x; + unk_F64E20.y = y; + unk_F64E20.z = z; + vehicle->sprite_direction = moveInfo->direction; + vehicle->bank_rotation = moveInfo->bank_rotation; vehicle->vehicle_sprite_type = moveInfo->vehicle_sprite_type; if (rideEntry->vehicles[0].flags & VEHICLE_ENTRY_FLAG_25) { if (vehicle->vehicle_sprite_type != 0) { - vehicle->swing_sprite = 0; + vehicle->swing_sprite = 0; vehicle->swinging_car_var_0 = 0; - vehicle->var_4E = 0; + vehicle->var_4E = 0; } } @@ -9244,7 +9225,7 @@ loc_6DCC2C: if (_vehicleVelocityF64E08 >= 0) { regs.bp = vehicle->var_44; - if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16_t *)®s.bp)) + if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16_t*)®s.bp)) { goto loc_6DCD6B; } @@ -9273,9 +9254,9 @@ loc_6DCD6B: _vehicleVelocityF64E0C -= regs.eax; vehicle->remaining_distance -= regs.eax; { - rct_vehicle * vEBP = GET_VEHICLE(regs.bp); - rct_vehicle * vEDI = gCurrentVehicle; - regs.eax = abs(vEDI->velocity - vEBP->velocity); + rct_vehicle* vEBP = GET_VEHICLE(regs.bp); + rct_vehicle* vEDI = gCurrentVehicle; + regs.eax = abs(vEDI->velocity - vEBP->velocity); if (regs.eax > 0xE0000) { if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_BOAT_HIRE_COLLISION_DETECTION)) @@ -9290,7 +9271,7 @@ loc_6DCD6B: goto loc_6DC99A; loc_6DCDE4: - sprite_move(unk_F64E20.x, unk_F64E20.y, unk_F64E20.z, (rct_sprite *)vehicle); + sprite_move(unk_F64E20.x, unk_F64E20.y, unk_F64E20.z, (rct_sprite*)vehicle); vehicle_invalidate(vehicle); loc_6DCE02: @@ -9375,10 +9356,10 @@ loc_6DCEB2: goto loc_6DC40E; loc_6DCEFF: - vehicle = gCurrentVehicle; + vehicle = gCurrentVehicle; regs.eax = 0; regs.ebp = 0; - regs.dx = 0; + regs.dx = 0; regs.ebx = 0; for (;;) @@ -9424,7 +9405,7 @@ loc_6DCEFF: } } regs.eax = vehicle->speed; - regs.bx = vehicle->track_type >> 2; + regs.bx = vehicle->track_type >> 2; regs.ebx = regs.eax; regs.eax <<= 14; regs.ebx *= regs.ebp; @@ -9451,7 +9432,10 @@ loc_6DCEFF: if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING) { - vehicle->spin_speed = Math::Clamp(static_cast(-VEHICLE_MAX_SPIN_SPEED_WATER_RIDE), vehicle->spin_speed, static_cast(VEHICLE_MAX_SPIN_SPEED_WATER_RIDE)); + vehicle->spin_speed = Math::Clamp( + static_cast(-VEHICLE_MAX_SPIN_SPEED_WATER_RIDE), + vehicle->spin_speed, + static_cast(VEHICLE_MAX_SPIN_SPEED_WATER_RIDE)); } if (vehicle->vehicle_sprite_type != 0) @@ -9478,8 +9462,8 @@ loc_6DCEFF: loc_6DD069: vehicle->acceleration = regs.ecx; - regs.eax = _vehicleMotionTrackFlags; - regs.ebx = _vehicleStationIndex; + regs.eax = _vehicleMotionTrackFlags; + regs.ebx = _vehicleStationIndex; if (outStation != nullptr) *outStation = regs.ebx; @@ -9490,7 +9474,8 @@ loc_6DD069: * * rct2: 0x006DC1E4 */ -static void vehicle_update_track_motion_powered_ride_acceleration(rct_vehicle * vehicle, rct_ride_entry_vehicle * vehicleEntry, uint32_t totalMass, int32_t * acceleration) +static void vehicle_update_track_motion_powered_ride_acceleration( + rct_vehicle* vehicle, rct_ride_entry_vehicle* vehicleEntry, uint32_t totalMass, int32_t* acceleration) { if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED_RIDE_UNRESTRICTED_GRAVITY) { @@ -9511,7 +9496,8 @@ static void vehicle_update_track_motion_powered_ride_acceleration(rct_vehicle * } } - enum { + enum + { FULL_SPEED, THREE_QUARTER_SPEED, HALF_SPEED @@ -9532,12 +9518,12 @@ static void vehicle_update_track_motion_powered_ride_acceleration(rct_vehicle * uint8_t speed = vehicle->speed; switch (speedModifier) { - case HALF_SPEED: - speed = vehicle->speed >> 1; - break; - case THREE_QUARTER_SPEED: - speed = vehicle->speed - (vehicle->speed >> 2); - break; + case HALF_SPEED: + speed = vehicle->speed >> 1; + break; + case THREE_QUARTER_SPEED: + speed = vehicle->speed - (vehicle->speed >> 2); + break; } int32_t poweredAcceleration = speed << 14; @@ -9567,8 +9553,10 @@ static void vehicle_update_track_motion_powered_ride_acceleration(rct_vehicle * if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING) { - vehicle->spin_speed = Math::Clamp(static_cast(-VEHICLE_MAX_SPIN_SPEED_WATER_RIDE), - vehicle->spin_speed, static_cast(VEHICLE_MAX_SPIN_SPEED_WATER_RIDE)); + vehicle->spin_speed = Math::Clamp( + static_cast(-VEHICLE_MAX_SPIN_SPEED_WATER_RIDE), + vehicle->spin_speed, + static_cast(VEHICLE_MAX_SPIN_SPEED_WATER_RIDE)); } if (vehicle->vehicle_sprite_type != 0) @@ -9603,13 +9591,13 @@ static void vehicle_update_track_motion_powered_ride_acceleration(rct_vehicle * * * rct2: 0x006DAB4C */ -int32_t vehicle_update_track_motion(rct_vehicle * vehicle, int32_t * outStation) +int32_t vehicle_update_track_motion(rct_vehicle* vehicle, int32_t* outStation) { registers regs = {}; - Ride * ride = get_ride(vehicle->ride); - rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); - rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + Ride* ride = get_ride(vehicle->ride); + rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); + rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); if (vehicleEntry == nullptr) { @@ -9641,7 +9629,7 @@ int32_t vehicle_update_track_motion(rct_vehicle * vehicle, int32_t * outStation) uint16_t spriteId = vehicle->sprite_index; while (spriteId != SPRITE_INDEX_NULL) { - rct_vehicle * car = GET_VEHICLE(spriteId); + rct_vehicle* car = GET_VEHICLE(spriteId); vehicleEntry = vehicle_get_vehicle_entry(car); if (vehicleEntry == nullptr) { @@ -9659,7 +9647,8 @@ int32_t vehicle_update_track_motion(rct_vehicle * vehicle, int32_t * outStation) vehicle_update_spinning_car(car); } // Rider sprites?? animation?? - if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_VEHICLE_ANIMATION) || (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_RIDER_ANIMATION)) + if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_VEHICLE_ANIMATION) + || (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_RIDER_ANIMATION)) { vehicle_update_additional_animation(car); } @@ -9673,7 +9662,7 @@ int32_t vehicle_update_track_motion(rct_vehicle * vehicle, int32_t * outStation) unk_F64E20.x = car->x; unk_F64E20.y = car->y; unk_F64E20.z = car->z; - invalidate_sprite_2((rct_sprite *)car); + invalidate_sprite_2((rct_sprite*)car); while (true) { @@ -9718,8 +9707,8 @@ int32_t vehicle_update_track_motion(rct_vehicle * vehicle, int32_t * outStation) } } // loc_6DBF20 - sprite_move(unk_F64E20.x, unk_F64E20.y, unk_F64E20.z, (rct_sprite *)car); - invalidate_sprite_2((rct_sprite *)car); + sprite_move(unk_F64E20.x, unk_F64E20.y, unk_F64E20.z, (rct_sprite*)car); + invalidate_sprite_2((rct_sprite*)car); loc_6DBF3E: sub_6DBF3E(car); @@ -9860,9 +9849,9 @@ int32_t vehicle_update_track_motion(rct_vehicle * vehicle, int32_t * outStation) return regs.eax; } -rct_ride_entry_vehicle * vehicle_get_vehicle_entry(const rct_vehicle * vehicle) +rct_ride_entry_vehicle* vehicle_get_vehicle_entry(const rct_vehicle* vehicle) { - rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); + rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); if (rideEntry == nullptr) { return nullptr; @@ -9870,7 +9859,7 @@ rct_ride_entry_vehicle * vehicle_get_vehicle_entry(const rct_vehicle * vehicle) return &rideEntry->vehicles[vehicle->vehicle_type]; } -int32_t vehicle_get_total_num_peeps(const rct_vehicle * vehicle) +int32_t vehicle_get_total_num_peeps(const rct_vehicle* vehicle) { uint16_t spriteIndex; int32_t numPeeps = 0; @@ -9891,22 +9880,22 @@ int32_t vehicle_get_total_num_peeps(const rct_vehicle * vehicle) * * rct2: 0x006DA1EC */ -void vehicle_invalidate_window(rct_vehicle * vehicle) +void vehicle_invalidate_window(rct_vehicle* vehicle) { auto intent = Intent(INTENT_ACTION_INVALIDATE_VEHICLE_WINDOW); intent.putExtra(INTENT_EXTRA_VEHICLE, vehicle); context_broadcast_intent(&intent); } -void vehicle_update_crossings(const rct_vehicle * vehicle) +void vehicle_update_crossings(const rct_vehicle* vehicle) { if (vehicle_get_head(vehicle) != vehicle) { return; } - const rct_vehicle * frontVehicle{}; - const rct_vehicle * backVehicle{}; + const rct_vehicle* frontVehicle{}; + const rct_vehicle* backVehicle{}; bool travellingForwards = !(vehicle->update_flags & VEHICLE_UPDATE_FLAG_REVERSING_SHUTTLE); @@ -9927,20 +9916,18 @@ void vehicle_update_crossings(const rct_vehicle * vehicle) xyElement.x = frontVehicle->track_x; xyElement.y = frontVehicle->track_y; - z = frontVehicle->track_z; + z = frontVehicle->track_z; xyElement.element = map_get_track_element_at_of_type_seq( - frontVehicle->track_x, frontVehicle->track_y, frontVehicle->track_z >> 3, - frontVehicle->track_type >> 2, 0 - ); + frontVehicle->track_x, frontVehicle->track_y, frontVehicle->track_z >> 3, frontVehicle->track_type >> 2, 0); if (xyElement.element && vehicle->status != VEHICLE_STATUS_ARRIVING) { - int16_t autoReserveAhead = 4 + abs(vehicle->velocity) / 150000; - int16_t crossingBonus = 0; - bool playedClaxon = false; + int16_t autoReserveAhead = 4 + abs(vehicle->velocity) / 150000; + int16_t crossingBonus = 0; + bool playedClaxon = false; - // vehicle positions mean we have to take larger - // margins for travelling backwards + // vehicle positions mean we have to take larger + // margins for travelling backwards if (!travellingForwards) { autoReserveAhead += 1; @@ -9948,11 +9935,8 @@ void vehicle_update_crossings(const rct_vehicle * vehicle) while (true) { - rct_tile_element *tileElement = map_get_path_element_at( - xyElement.x / 32, - xyElement.y / 32, - xyElement.element->base_height - ); + rct_tile_element* tileElement + = map_get_path_element_at(xyElement.x / 32, xyElement.y / 32, xyElement.element->base_height); if (tileElement) { @@ -9993,9 +9977,9 @@ void vehicle_update_crossings(const rct_vehicle * vehicle) xyElement.element = output.begin_element; } - if (xyElement.element->properties.track.type == TRACK_ELEM_BEGIN_STATION || - xyElement.element->properties.track.type == TRACK_ELEM_MIDDLE_STATION || - xyElement.element->properties.track.type == TRACK_ELEM_END_STATION) + if (xyElement.element->properties.track.type == TRACK_ELEM_BEGIN_STATION + || xyElement.element->properties.track.type == TRACK_ELEM_MIDDLE_STATION + || xyElement.element->properties.track.type == TRACK_ELEM_END_STATION) { break; } @@ -10004,15 +9988,13 @@ void vehicle_update_crossings(const rct_vehicle * vehicle) xyElement.x = backVehicle->track_x; xyElement.y = backVehicle->track_y; - z = backVehicle->track_z; + z = backVehicle->track_z; xyElement.element = map_get_track_element_at_of_type_seq( - backVehicle->track_x, backVehicle->track_y, backVehicle->track_z >> 3, - backVehicle->track_type >> 2, 0 - ); + backVehicle->track_x, backVehicle->track_y, backVehicle->track_z >> 3, backVehicle->track_type >> 2, 0); if (xyElement.element) { - uint8_t freeCount = travellingForwards? 3 : 1; + uint8_t freeCount = travellingForwards ? 3 : 1; while (freeCount-- > 0) { @@ -10026,11 +10008,8 @@ void vehicle_update_crossings(const rct_vehicle * vehicle) } } - rct_tile_element *tileElement = map_get_path_element_at( - xyElement.x / 32, - xyElement.y / 32, - xyElement.element->base_height - ); + rct_tile_element* tileElement + = map_get_path_element_at(xyElement.x / 32, xyElement.y / 32, xyElement.element->base_height); if (tileElement) { tileElement->flags &= ~TILE_ELEMENT_FLAG_BLOCKED_BY_VEHICLE; @@ -10039,16 +10018,16 @@ void vehicle_update_crossings(const rct_vehicle * vehicle) } } -void vehicle_claxon(const rct_vehicle * vehicle) +void vehicle_claxon(const rct_vehicle* vehicle) { rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); switch (rideEntry->vehicles[vehicle->vehicle_type].sound_range) { - case SOUND_RANGE_WHISTLE: - audio_play_sound_at_location(SOUND_TRAIN_WHISTLE, vehicle->x, vehicle->y, vehicle->z); - break; - case SOUND_RANGE_BELL: - audio_play_sound_at_location(SOUND_TRAM, vehicle->x, vehicle->y, vehicle->z); - break; + case SOUND_RANGE_WHISTLE: + audio_play_sound_at_location(SOUND_TRAIN_WHISTLE, vehicle->x, vehicle->y, vehicle->z); + break; + case SOUND_RANGE_BELL: + audio_play_sound_at_location(SOUND_TRAM, vehicle->x, vehicle->y, vehicle->z); + break; } } diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index 24eaf5e668..2835f6b991 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -10,13 +10,15 @@ #ifndef _VEHICLE_H_ #define _VEHICLE_H_ -#include -#include -#include #include "../common.h" #include "../world/Location.hpp" -struct rct_vehicle_colour { +#include +#include +#include + +struct rct_vehicle_colour +{ uint8_t body_colour; uint8_t trim_colour; }; @@ -28,54 +30,60 @@ struct rct_vehicle_colour { * Ride type vehicle structure. * size: 0x65 */ -struct rct_ride_entry_vehicle { - uint16_t rotation_frame_mask; // 0x00 , 0x1A - uint8_t num_vertical_frames; // 0x02 , 0x1C, Appears to be unused, except as a temporary variable in RCT2 (not needed for OpenRCT2) - uint8_t num_horizontal_frames; // 0x03 , 0x1D, Appears to be unused, except as a temporary variable in RCT2 (not needed for OpenRCT2) - uint32_t spacing; // 0x04 , 0x1E - uint16_t car_mass; // 0x08 , 0x22 - int8_t tab_height; // 0x0A , 0x24 - uint8_t num_seats; // 0x0B , 0x25 - uint16_t sprite_flags; // 0x0C , 0x26 - uint8_t sprite_width; // 0x0E , 0x28 - uint8_t sprite_height_negative; // 0x0F , 0x29 - uint8_t sprite_height_positive; // 0x10 , 0x2A - uint8_t animation; // 0x11 , 0x2B - uint32_t flags; // 0x12 , 0x2C - uint16_t base_num_frames; // 0x16 , 0x30, The number of sprites for a flat non-banked track piece. - uint32_t base_image_id; // 0x18 , 0x32, Following image_id's populated during loading - uint32_t restraint_image_id; // 0x1C , 0x36 - uint32_t gentle_slope_image_id; // 0x20 , 0x3A - uint32_t steep_slope_image_id; // 0x24 , 0x3E - uint32_t vertical_slope_image_id; // 0x28 , 0x42 - uint32_t diagonal_slope_image_id; // 0x2C , 0x46 - uint32_t banked_image_id; // 0x30 , 0x4A - uint32_t inline_twist_image_id; // 0x34 , 0x4E - uint32_t flat_to_gentle_bank_image_id; // 0x38 , 0x52 - uint32_t diagonal_to_gentle_slope_bank_image_id; // 0x3C , 0x56 - uint32_t gentle_slope_to_bank_image_id; // 0x40 , 0x5A - uint32_t gentle_slope_bank_turn_image_id; // 0x44 , 0x5E - uint32_t flat_bank_to_gentle_slope_image_id; // 0x48 , 0x62 - union { - uint32_t curved_lift_hill_image_id; // 0x4C , 0x66 - uint32_t corkscrew_image_id; // 0x4C , 0x66 +struct rct_ride_entry_vehicle +{ + uint16_t rotation_frame_mask; // 0x00 , 0x1A + uint8_t num_vertical_frames; // 0x02 , 0x1C, Appears to be unused, except as a temporary variable in RCT2 (not needed for + // OpenRCT2) + uint8_t num_horizontal_frames; // 0x03 , 0x1D, Appears to be unused, except as a temporary variable in RCT2 (not needed for + // OpenRCT2) + uint32_t spacing; // 0x04 , 0x1E + uint16_t car_mass; // 0x08 , 0x22 + int8_t tab_height; // 0x0A , 0x24 + uint8_t num_seats; // 0x0B , 0x25 + uint16_t sprite_flags; // 0x0C , 0x26 + uint8_t sprite_width; // 0x0E , 0x28 + uint8_t sprite_height_negative; // 0x0F , 0x29 + uint8_t sprite_height_positive; // 0x10 , 0x2A + uint8_t animation; // 0x11 , 0x2B + uint32_t flags; // 0x12 , 0x2C + uint16_t base_num_frames; // 0x16 , 0x30, The number of sprites for a flat non-banked track piece. + uint32_t base_image_id; // 0x18 , 0x32, Following image_id's populated during loading + uint32_t restraint_image_id; // 0x1C , 0x36 + uint32_t gentle_slope_image_id; // 0x20 , 0x3A + uint32_t steep_slope_image_id; // 0x24 , 0x3E + uint32_t vertical_slope_image_id; // 0x28 , 0x42 + uint32_t diagonal_slope_image_id; // 0x2C , 0x46 + uint32_t banked_image_id; // 0x30 , 0x4A + uint32_t inline_twist_image_id; // 0x34 , 0x4E + uint32_t flat_to_gentle_bank_image_id; // 0x38 , 0x52 + uint32_t diagonal_to_gentle_slope_bank_image_id; // 0x3C , 0x56 + uint32_t gentle_slope_to_bank_image_id; // 0x40 , 0x5A + uint32_t gentle_slope_bank_turn_image_id; // 0x44 , 0x5E + uint32_t flat_bank_to_gentle_slope_image_id; // 0x48 , 0x62 + union + { + uint32_t curved_lift_hill_image_id; // 0x4C , 0x66 + uint32_t corkscrew_image_id; // 0x4C , 0x66 }; - uint32_t no_vehicle_images; // 0x50 , 0x6A - uint8_t no_seating_rows; // 0x54 , 0x6E - uint8_t spinning_inertia; // 0x55 , 0x6F - uint8_t spinning_friction; // 0x56 , 0x70 - uint8_t friction_sound_id; // 0x57 , 0x71 - uint8_t log_flume_reverser_vehicle_type; // 0x58 , 0x72 - uint8_t sound_range; // 0x59 , 0x73 - uint8_t double_sound_frequency; // 0x5A , 0x74 (Doubles the velocity when working out the sound frequency {used on go karts}) - uint8_t powered_acceleration; // 0x5B , 0x75 - uint8_t powered_max_speed; // 0x5C , 0x76 - uint8_t car_visual; // 0x5D , 0x77 + uint32_t no_vehicle_images; // 0x50 , 0x6A + uint8_t no_seating_rows; // 0x54 , 0x6E + uint8_t spinning_inertia; // 0x55 , 0x6F + uint8_t spinning_friction; // 0x56 , 0x70 + uint8_t friction_sound_id; // 0x57 , 0x71 + uint8_t log_flume_reverser_vehicle_type; // 0x58 , 0x72 + uint8_t sound_range; // 0x59 , 0x73 + uint8_t + double_sound_frequency; // 0x5A , 0x74 (Doubles the velocity when working out the sound frequency {used on go karts}) + uint8_t powered_acceleration; // 0x5B , 0x75 + uint8_t powered_max_speed; // 0x5C , 0x76 + uint8_t car_visual; // 0x5D , 0x77 uint8_t effect_visual; uint8_t draw_order; - uint8_t num_vertical_frames_override; // 0x60 , 0x7A, A custom number that can be used rather than letting RCT2 determine it. Needs the VEHICLE_ENTRY_FLAG_OVERRIDE_NUM_VERTICAL_FRAMES flag to be set. + uint8_t num_vertical_frames_override; // 0x60 , 0x7A, A custom number that can be used rather than letting RCT2 determine + // it. Needs the VEHICLE_ENTRY_FLAG_OVERRIDE_NUM_VERTICAL_FRAMES flag to be set. uint8_t peep_loading_waypoint_segments; // 0x61 new - uint8_t pad_62[6] = {}; // 0x62 , 0x7B + uint8_t pad_62[6] = {}; // 0x62 , 0x7B std::vector> peep_loading_waypoints = {}; std::vector peep_loading_positions = {}; // previously 0x61 , 0x7B }; @@ -90,186 +98,211 @@ static_assert(offsetof(rct_ride_entry_vehicle, peep_loading_positions) % 8 == 0, static_assert(sizeof(rct_ride_entry_vehicle) % 8 == 0, "Invalid struct size"); #endif -struct rct_vehicle { - uint8_t sprite_identifier; // 0x00 - uint8_t is_child; // 0x01 - uint16_t next_in_quadrant; // 0x02 - uint16_t next; // 0x04 - uint16_t previous; // 0x06 - uint8_t linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_... +struct rct_vehicle +{ + uint8_t sprite_identifier; // 0x00 + uint8_t is_child; // 0x01 + uint16_t next_in_quadrant; // 0x02 + uint16_t next; // 0x04 + uint16_t previous; // 0x06 + uint8_t linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_... // Height from centre of sprite to bottom - uint8_t sprite_height_negative; // 0x09 - uint16_t sprite_index; // 0x0A - uint16_t flags; // 0x0C - int16_t x; // 0x0E - int16_t y; // 0x10 - int16_t z; // 0x12 + uint8_t sprite_height_negative; // 0x09 + uint16_t sprite_index; // 0x0A + uint16_t flags; // 0x0C + int16_t x; // 0x0E + int16_t y; // 0x10 + int16_t z; // 0x12 // Width from centre of sprite to edge - uint8_t sprite_width; // 0x14 + uint8_t sprite_width; // 0x14 // Height from centre of sprite to top - uint8_t sprite_height_positive; // 0x15 - int16_t sprite_left; // 0x16 - int16_t sprite_top; // 0x18 - int16_t sprite_right; // 0x1A - int16_t sprite_bottom; // 0x1C - uint8_t sprite_direction; // 0x1E - uint8_t vehicle_sprite_type; // 0x1F - uint8_t bank_rotation; // 0x20 + uint8_t sprite_height_positive; // 0x15 + int16_t sprite_left; // 0x16 + int16_t sprite_top; // 0x18 + int16_t sprite_right; // 0x1A + int16_t sprite_bottom; // 0x1C + uint8_t sprite_direction; // 0x1E + uint8_t vehicle_sprite_type; // 0x1F + uint8_t bank_rotation; // 0x20 uint8_t pad_21[3]; - int32_t remaining_distance; // 0x24 - int32_t velocity; // 0x28 - int32_t acceleration; // 0x2C - uint8_t ride; // 0x30 - uint8_t vehicle_type; // 0x31 - rct_vehicle_colour colours; // 0x32 - union { - uint16_t track_progress; // 0x34 - struct { + int32_t remaining_distance; // 0x24 + int32_t velocity; // 0x28 + int32_t acceleration; // 0x2C + uint8_t ride; // 0x30 + uint8_t vehicle_type; // 0x31 + rct_vehicle_colour colours; // 0x32 + union + { + uint16_t track_progress; // 0x34 + struct + { int8_t var_34; uint8_t var_35; }; }; - union { - int16_t track_direction; // 0x36 (0000 0000 0000 0011) - int16_t track_type; // 0x36 (0000 0011 1111 1100) - LocationXY8 boat_location; // 0x36 + union + { + int16_t track_direction; // 0x36 (0000 0000 0000 0011) + int16_t track_type; // 0x36 (0000 0011 1111 1100) + LocationXY8 boat_location; // 0x36 }; - uint16_t track_x; // 0x38 - uint16_t track_y; // 0x3A - uint16_t track_z; // 0x3C - uint16_t next_vehicle_on_train; // 0x3E + uint16_t track_x; // 0x38 + uint16_t track_y; // 0x3A + uint16_t track_z; // 0x3C + uint16_t next_vehicle_on_train; // 0x3E // The previous vehicle on the same train or the last vehicle on the previous or only train. - uint16_t prev_vehicle_on_ride; // 0x40 + uint16_t prev_vehicle_on_ride; // 0x40 // The next vehicle on the same train or the first vehicle on the next or only train - uint16_t next_vehicle_on_ride; // 0x42 + uint16_t next_vehicle_on_ride; // 0x42 uint16_t var_44; - uint16_t mass; // 0x46 - uint16_t update_flags; // 0x48 + uint16_t mass; // 0x46 + uint16_t update_flags; // 0x48 uint8_t swing_sprite; - uint8_t current_station; // 0x4B - union { - int16_t swinging_car_var_0; // 0x4C - int16_t current_time; // 0x4C - struct { - int8_t ferris_wheel_var_0; // 0x4C - int8_t ferris_wheel_var_1; // 0x4D + uint8_t current_station; // 0x4B + union + { + int16_t swinging_car_var_0; // 0x4C + int16_t current_time; // 0x4C + struct + { + int8_t ferris_wheel_var_0; // 0x4C + int8_t ferris_wheel_var_1; // 0x4D }; }; - union { + union + { int16_t var_4E; - int16_t crash_z; // 0x4E + int16_t crash_z; // 0x4E }; - uint8_t status; // 0x50 - uint8_t sub_state; // 0x51 - uint16_t peep[32]; // 0x52 - uint8_t peep_tshirt_colours[32]; // 0x92 - uint8_t num_seats; // 0xB2 - uint8_t num_peeps; // 0xB3 - uint8_t next_free_seat; // 0xB4 - uint8_t restraints_position; // 0xB5 0 == Close, 255 == Open - union { - int16_t spin_speed; // 0xB6 - int16_t crash_x; // 0xB6 + uint8_t status; // 0x50 + uint8_t sub_state; // 0x51 + uint16_t peep[32]; // 0x52 + uint8_t peep_tshirt_colours[32]; // 0x92 + uint8_t num_seats; // 0xB2 + uint8_t num_peeps; // 0xB3 + uint8_t next_free_seat; // 0xB4 + uint8_t restraints_position; // 0xB5 0 == Close, 255 == Open + union + { + int16_t spin_speed; // 0xB6 + int16_t crash_x; // 0xB6 }; - uint16_t sound2_flags; // 0xB8 - uint8_t spin_sprite; // 0xBA lowest 3 bits not used for sprite selection (divide by 8 to use) - uint8_t sound1_id; // 0xBB - uint8_t sound1_volume; // 0xBC - uint8_t sound2_id; // 0xBD - uint8_t sound2_volume; // 0xBE + uint16_t sound2_flags; // 0xB8 + uint8_t spin_sprite; // 0xBA lowest 3 bits not used for sprite selection (divide by 8 to use) + uint8_t sound1_id; // 0xBB + uint8_t sound1_volume; // 0xBC + uint8_t sound2_id; // 0xBD + uint8_t sound2_volume; // 0xBE int8_t sound_vector_factor; - union { + union + { uint16_t var_C0; - int16_t crash_y; // 0xC0 - uint16_t time_waiting; // 0xC0 - uint16_t cable_lift_target; // 0xC0 + int16_t crash_y; // 0xC0 + uint16_t time_waiting; // 0xC0 + uint16_t cable_lift_target; // 0xC0 }; - uint8_t speed; // 0xC2 - uint8_t powered_acceleration; // 0xC3 - union { + uint8_t speed; // 0xC2 + uint8_t powered_acceleration; // 0xC3 + union + { uint8_t dodgems_collision_direction; // 0xC4 uint8_t var_C4; }; - uint8_t animation_frame; // 0xC5 + uint8_t animation_frame; // 0xC5 uint8_t pad_C6[0x2]; uint16_t var_C8; uint16_t var_CA; - uint8_t scream_sound_id; // 0xCC + uint8_t scream_sound_id; // 0xCC uint8_t var_CD; - union { + union + { uint8_t var_CE; - uint8_t num_laps; // 0xCE + uint8_t num_laps; // 0xCE }; - union { + union + { uint8_t var_CF; - uint8_t brake_speed; // 0xCF + uint8_t brake_speed; // 0xCF }; - uint16_t lost_time_out; // 0xD0 - int8_t vertical_drop_countdown; // 0xD1 + uint16_t lost_time_out; // 0xD0 + int8_t vertical_drop_countdown; // 0xD1 uint8_t var_D3; uint8_t mini_golf_current_animation; - uint8_t mini_golf_flags; // 0xD5 - uint8_t ride_subtype; // 0xD6 - uint8_t colours_extended; // 0xD7 - uint8_t seat_rotation; // 0xD8 - uint8_t target_seat_rotation; // 0xD9 + uint8_t mini_golf_flags; // 0xD5 + uint8_t ride_subtype; // 0xD6 + uint8_t colours_extended; // 0xD7 + uint8_t seat_rotation; // 0xD8 + uint8_t target_seat_rotation; // 0xD9 }; -struct train_ref { - rct_vehicle *head; - rct_vehicle *tail; +struct train_ref +{ + rct_vehicle* head; + rct_vehicle* tail; }; // Size: 0x09 -struct rct_vehicle_info { - int16_t x; // 0x00 - int16_t y; // 0x02 - int16_t z; // 0x04 - uint8_t direction; // 0x06 - uint8_t vehicle_sprite_type; // 0x07 - uint8_t bank_rotation; // 0x08 +struct rct_vehicle_info +{ + int16_t x; // 0x00 + int16_t y; // 0x02 + int16_t z; // 0x04 + uint8_t direction; // 0x06 + uint8_t vehicle_sprite_type; // 0x07 + uint8_t bank_rotation; // 0x08 }; enum : uint32_t { - VEHICLE_ENTRY_FLAG_POWERED_RIDE_UNRESTRICTED_GRAVITY = 1 << 0, // Set on powered vehicles that do not slow down when going down a hill + VEHICLE_ENTRY_FLAG_POWERED_RIDE_UNRESTRICTED_GRAVITY = 1 + << 0, // Set on powered vehicles that do not slow down when going down a hill VEHICLE_ENTRY_FLAG_NO_UPSTOP_WHEELS = 1 << 1, VEHICLE_ENTRY_FLAG_NO_UPSTOP_BOBSLEIGH = 1 << 2, VEHICLE_ENTRY_FLAG_MINI_GOLF = 1 << 3, VEHICLE_ENTRY_FLAG_4 = 1 << 4, VEHICLE_ENTRY_FLAG_5 = 1 << 5, - VEHICLE_ENTRY_FLAG_HAS_INVERTED_SPRITE_SET = 1 << 6, // Set on vehicles that support running inverted for extended periods of time, i.e. the Flying, Lay-down and Multi-dimension RCs. - VEHICLE_ENTRY_FLAG_DODGEM_INUSE_LIGHTS = 1 << 7, // When set the vehicle has an additional frame for when in use. Used only by dodgems. - VEHICLE_ENTRY_FLAG_ALLOW_DOORS_DEPRECATED = 1 << 8, // Not used any more - every vehicle will now work with doors + VEHICLE_ENTRY_FLAG_HAS_INVERTED_SPRITE_SET = 1 << 6, // Set on vehicles that support running inverted for extended periods + // of time, i.e. the Flying, Lay-down and Multi-dimension RCs. + VEHICLE_ENTRY_FLAG_DODGEM_INUSE_LIGHTS = 1 + << 7, // When set the vehicle has an additional frame for when in use. Used only by dodgems. + VEHICLE_ENTRY_FLAG_ALLOW_DOORS_DEPRECATED = 1 << 8, // Not used any more - every vehicle will now work with doors VEHICLE_ENTRY_FLAG_ENABLE_ADDITIONAL_COLOUR_2 = 1 << 9, VEHICLE_ENTRY_FLAG_10 = 1 << 10, VEHICLE_ENTRY_FLAG_11 = 1 << 11, - VEHICLE_ENTRY_FLAG_OVERRIDE_NUM_VERTICAL_FRAMES = 1 << 12, // Setting this will cause the game to set vehicleEntry->num_vertical_frames to vehicleEntry->num_vertical_frames_override, rather than determining it itself. + VEHICLE_ENTRY_FLAG_OVERRIDE_NUM_VERTICAL_FRAMES = 1 + << 12, // Setting this will cause the game to set vehicleEntry->num_vertical_frames to + // vehicleEntry->num_vertical_frames_override, rather than determining it itself. VEHICLE_ENTRY_FLAG_13 = 1 << 13, - VEHICLE_ENTRY_FLAG_SPINNING_ADDITIONAL_FRAMES = 1 << 14, // 16x additional frames for vehicle. A spinning item with additional frames must always face forward to load/unload. Spinning without can load/unload at 4 rotations. + VEHICLE_ENTRY_FLAG_SPINNING_ADDITIONAL_FRAMES = 1 + << 14, // 16x additional frames for vehicle. A spinning item with additional frames must always face forward to + // load/unload. Spinning without can load/unload at 4 rotations. VEHICLE_ENTRY_FLAG_LIFT = 1 << 15, VEHICLE_ENTRY_FLAG_ENABLE_ADDITIONAL_COLOUR_1 = 1 << 16, VEHICLE_ENTRY_FLAG_SWINGING = 1 << 17, VEHICLE_ENTRY_FLAG_SPINNING = 1 << 18, VEHICLE_ENTRY_FLAG_POWERED = 1 << 19, VEHICLE_ENTRY_FLAG_RIDERS_SCREAM = 1 << 20, - VEHICLE_ENTRY_FLAG_21 = 1 << 21,// Swinging coaster?? + VEHICLE_ENTRY_FLAG_21 = 1 << 21, // Swinging coaster?? VEHICLE_ENTRY_FLAG_BOAT_HIRE_COLLISION_DETECTION = 1 << 22, - VEHICLE_ENTRY_FLAG_VEHICLE_ANIMATION = 1 << 23, // Set on animated vehicles like the Multi-dimension coaster trains, Miniature Railway locomotives and Helicycles. - VEHICLE_ENTRY_FLAG_RIDER_ANIMATION = 1 << 24, // Set when the animation updates rider sprite positions + VEHICLE_ENTRY_FLAG_VEHICLE_ANIMATION = 1 << 23, // Set on animated vehicles like the Multi-dimension coaster trains, + // Miniature Railway locomotives and Helicycles. + VEHICLE_ENTRY_FLAG_RIDER_ANIMATION = 1 << 24, // Set when the animation updates rider sprite positions VEHICLE_ENTRY_FLAG_25 = 1 << 25, - VEHICLE_ENTRY_FLAG_LOADING_WAYPOINTS = 1 << 26, // Peep loading positions have x and y coordinates. Normal rides just have offsets - VEHICLE_ENTRY_FLAG_SLIDE_SWING = 1 << 27, // Set on dingy slides. They have there own swing value calculations and have a different amount of images. + VEHICLE_ENTRY_FLAG_LOADING_WAYPOINTS = 1 + << 26, // Peep loading positions have x and y coordinates. Normal rides just have offsets + VEHICLE_ENTRY_FLAG_SLIDE_SWING + = 1 << 27, // Set on dingy slides. They have there own swing value calculations and have a different amount of images. VEHICLE_ENTRY_FLAG_CHAIRLIFT = 1 << 28, - VEHICLE_ENTRY_FLAG_WATER_RIDE = 1 << 29, // Set on rides where water would provide continuous propulsion + VEHICLE_ENTRY_FLAG_WATER_RIDE = 1 << 29, // Set on rides where water would provide continuous propulsion VEHICLE_ENTRY_FLAG_GO_KART = 1 << 30, VEHICLE_ENTRY_FLAG_DODGEM_CAR_PLACEMENT = 1u << 31, }; -enum { +enum +{ VEHICLE_ENTRY_ANIMATION_NONE, VEHICLE_ENTRY_ANIMATION_MINITURE_RAILWAY_LOCOMOTIVE, VEHICLE_ENTRY_ANIMATION_SWAN, @@ -282,7 +315,8 @@ enum { VEHICLE_ENTRY_ANIMATION_MULTI_DIM_COASTER }; -enum { +enum +{ VEHICLE_STATUS_MOVING_TO_END_OF_STATION, VEHICLE_STATUS_WAITING_FOR_PASSENGERS, VEHICLE_STATUS_WAITING_TO_DEPART, @@ -321,15 +355,16 @@ enum : uint32_t VEHICLE_UPDATE_FLAG_ON_LIFT_HILL = (1 << 0), VEHICLE_UPDATE_FLAG_1 = (1 << 1), VEHICLE_UPDATE_FLAG_WAIT_ON_ADJACENT = (1 << 2), - VEHICLE_UPDATE_FLAG_REVERSING_SHUTTLE = (1 << 3), // Shuttle is in reverse + VEHICLE_UPDATE_FLAG_REVERSING_SHUTTLE = (1 << 3), // Shuttle is in reverse VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART = (1 << 4), VEHICLE_UPDATE_FLAG_TESTING = (1 << 5), VEHICLE_UPDATE_FLAG_6 = (1 << 6), - VEHICLE_UPDATE_FLAG_ZERO_VELOCITY = (1 << 7), // Used on rides when safety cutout stops them on a lift + VEHICLE_UPDATE_FLAG_ZERO_VELOCITY = (1 << 7), // Used on rides when safety cutout stops them on a lift VEHICLE_UPDATE_FLAG_BROKEN_CAR = (1 << 8), VEHICLE_UPDATE_FLAG_BROKEN_TRAIN = (1 << 9), VEHICLE_UPDATE_FLAG_ON_BREAK_FOR_DROP = (1 << 10), - VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES = (1 << 11), // Used on rides where trains can run for extended periods of time, i.e. the Flying, Lay-down and Multi-dimension RCs. + VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES = (1 << 11), // Used on rides where trains can run for extended periods of time, + // i.e. the Flying, Lay-down and Multi-dimension RCs. VEHICLE_UPDATE_FLAG_12 = (1 << 12), VEHICLE_UPDATE_FLAG_ROTATION_OFF_WILD_MOUSE = (1 << 13) // After passing a rotation toggle track piece this will enable }; @@ -354,7 +389,8 @@ enum : uint32_t VEHICLE_SPRITE_FLAG_15 = (1 << 15), }; -enum { +enum +{ VEHICLE_VISUAL_DEFAULT, VEHICLE_VISUAL_FLAT_RIDE_OR_CAR_RIDE, VEHICLE_VISUAL_LAUNCHED_FREEFALL, @@ -391,11 +427,12 @@ enum : uint32_t VEHICLE_UPDATE_MOTION_TRACK_FLAG_12 = 1 << 12, }; -enum { +enum +{ VEHICLE_SOUND2_FLAGS_LIFT_HILL = 1 << 1 // When on a lift hill generate sound }; -enum +enum { FRICTION_SOUND_WOOD_SMALL = 1, FRICTION_SOUND_STEEL = 2, @@ -407,7 +444,7 @@ enum FRICTION_SOUND_NONE = 255 }; -enum +enum { SOUND_RANGE_SCREAMS_0 = 0, SOUND_RANGE_SCREAMS_1 = 1, @@ -417,29 +454,29 @@ enum SOUND_RANGE_NONE = 255 }; -#define VEHICLE_SEAT_PAIR_FLAG 0x80 -#define VEHICLE_SEAT_NUM_MASK 0x7F +#define VEHICLE_SEAT_PAIR_FLAG 0x80 +#define VEHICLE_SEAT_NUM_MASK 0x7F -rct_vehicle * try_get_vehicle(uint16_t spriteIndex); +rct_vehicle* try_get_vehicle(uint16_t spriteIndex); void vehicle_update_all(); void vehicle_sounds_update(); -void vehicle_get_g_forces(const rct_vehicle *vehicle, int32_t *verticalG, int32_t *lateralG); -void vehicle_set_map_toolbar(const rct_vehicle *vehicle); -int32_t vehicle_is_used_in_pairs(const rct_vehicle *vehicle); -int32_t vehicle_update_track_motion(rct_vehicle *vehicle, int32_t *outStation); -rct_ride_entry_vehicle *vehicle_get_vehicle_entry(const rct_vehicle *vehicle); -int32_t vehicle_get_total_num_peeps(const rct_vehicle *vehicle); -void vehicle_invalidate_window(rct_vehicle *vehicle); +void vehicle_get_g_forces(const rct_vehicle* vehicle, int32_t* verticalG, int32_t* lateralG); +void vehicle_set_map_toolbar(const rct_vehicle* vehicle); +int32_t vehicle_is_used_in_pairs(const rct_vehicle* vehicle); +int32_t vehicle_update_track_motion(rct_vehicle* vehicle, int32_t* outStation); +rct_ride_entry_vehicle* vehicle_get_vehicle_entry(const rct_vehicle* vehicle); +int32_t vehicle_get_total_num_peeps(const rct_vehicle* vehicle); +void vehicle_invalidate_window(rct_vehicle* vehicle); void vehicle_update_test_finish(rct_vehicle* vehicle); void vehicle_test_reset(rct_vehicle* vehicle); void vehicle_peep_easteregg_here_we_are(const rct_vehicle* vehicle); -rct_vehicle *vehicle_get_head(const rct_vehicle *vehicle); +rct_vehicle* vehicle_get_head(const rct_vehicle* vehicle); rct_vehicle* vehicle_get_tail(const rct_vehicle* vehicle); -const rct_vehicle_info *vehicle_get_move_info(int32_t cd, int32_t typeAndDirection, int32_t offset); +const rct_vehicle_info* vehicle_get_move_info(int32_t cd, int32_t typeAndDirection, int32_t offset); uint16_t vehicle_get_move_info_size(int32_t cd, int32_t typeAndDirection); -bool vehicle_update_dodgems_collision(rct_vehicle *vehicle, int16_t x, int16_t y, uint16_t *spriteId); +bool vehicle_update_dodgems_collision(rct_vehicle* vehicle, int16_t x, int16_t y, uint16_t* spriteId); -extern rct_vehicle *gCurrentVehicle; +extern rct_vehicle* gCurrentVehicle; extern uint8_t _vehicleStationIndex; extern uint32_t _vehicleMotionTrackFlags; extern int32_t _vehicleVelocityF64E08; @@ -448,7 +485,7 @@ extern int32_t _vehicleUnkF64E10; extern uint8_t _vehicleVAngleEndF64E36; extern uint8_t _vehicleBankEndF64E37; extern uint8_t _vehicleF64E2C; -extern rct_vehicle * _vehicleFrontVehicle; +extern rct_vehicle* _vehicleFrontVehicle; extern LocationXYZ16 unk_F64E20; /** Helper macro until rides are stored in this module. */ diff --git a/src/openrct2/ride/VehicleData.cpp b/src/openrct2/ride/VehicleData.cpp index 8b136b1e63..c6c26b3fd1 100644 --- a/src/openrct2/ride/VehicleData.cpp +++ b/src/openrct2/ride/VehicleData.cpp @@ -7,9 +7,10 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ -#include "../core/Util.hpp" #include "VehicleData.h" +#include "../core/Util.hpp" + // clang-format off /** rct2: 0x0099F100 */ static constexpr const uint8_t Rotation1TimeToSpriteMap_0[] = { diff --git a/src/openrct2/ride/VehicleData.h b/src/openrct2/ride/VehicleData.h index b8ba2105d7..3450a42537 100644 --- a/src/openrct2/ride/VehicleData.h +++ b/src/openrct2/ride/VehicleData.h @@ -12,16 +12,17 @@ #include "../common.h" -extern const uint8_t * Rotation1TimeToSpriteMaps[]; -extern const uint8_t * Rotation2TimeToSpriteMaps[]; -extern const uint8_t * Rotation3TimeToSpriteMaps[]; +extern const uint8_t* Rotation1TimeToSpriteMaps[]; +extern const uint8_t* Rotation2TimeToSpriteMaps[]; +extern const uint8_t* Rotation3TimeToSpriteMaps[]; -struct top_spin_time_to_sprite_map { +struct top_spin_time_to_sprite_map +{ uint8_t arm_rotation; uint8_t bank_rotation; }; -extern const top_spin_time_to_sprite_map * TopSpinTimeToSpriteMaps[]; +extern const top_spin_time_to_sprite_map* TopSpinTimeToSpriteMaps[]; extern const uint8_t MotionSimulatorTimeToSpriteMap[]; extern const int32_t MotionSimulatorTimeToSpriteMapCount; diff --git a/src/openrct2/ride/VehiclePaint.cpp b/src/openrct2/ride/VehiclePaint.cpp index 7264e7ec7b..e3c7371cf5 100644 --- a/src/openrct2/ride/VehiclePaint.cpp +++ b/src/openrct2/ride/VehiclePaint.cpp @@ -7,6 +7,8 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ +#include "VehiclePaint.h" + #include "../Game.h" #include "../core/Util.hpp" #include "../drawing/Drawing.h" @@ -16,7 +18,6 @@ #include "../ride/RideData.h" #include "../world/Sprite.h" #include "Track.h" -#include "VehiclePaint.h" // clang-format off // 0x0098E52C: @@ -886,10 +887,14 @@ const vehicle_boundbox VehicleBoundboxes[16][224] = { // clang-format on // 6D5214 -static void vehicle_sprite_paint(paint_session * session, const rct_vehicle * vehicle, int32_t ebx, int32_t ecx, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_paint( + paint_session* session, + const rct_vehicle* vehicle, + int32_t ebx, + int32_t ecx, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { - int32_t baseImage_id = ebx; if (vehicleEntry->draw_order >= Util::CountOf(VehicleBoundboxes)) { @@ -905,15 +910,15 @@ static void vehicle_sprite_paint(paint_session * session, const rct_vehicle * ve { baseImage_id += vehicle->animation_frame; } - int32_t image_id = - baseImage_id | (vehicle->colours.body_colour << 19) | (vehicle->colours.trim_colour << 24) | IMAGE_TYPE_REMAP_2_PLUS; - paint_struct * ps = sub_98197C( + int32_t image_id + = baseImage_id | (vehicle->colours.body_colour << 19) | (vehicle->colours.trim_colour << 24) | IMAGE_TYPE_REMAP_2_PLUS; + paint_struct* ps = sub_98197C( session, image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z); if (ps != nullptr) { ps->tertiary_colour = vehicle->colours_extended; } - rct_drawpixelinfo * dpi = session->DPI; + rct_drawpixelinfo* dpi = session->DPI; if (dpi->zoom_level < 2 && vehicle->num_peeps > 0 && vehicleEntry->no_seating_rows > 0) { baseImage_id += vehicleEntry->no_vehicle_images; @@ -921,14 +926,24 @@ static void vehicle_sprite_paint(paint_session * session, const rct_vehicle * ve { if (vehicle->num_peeps > (i * 2) && vehicleEntry->no_seating_rows > i) { - image_id = baseImage_id | SPRITE_ID_PALETTE_COLOUR_2(vehicle->peep_tshirt_colours[i * 2], - vehicle->peep_tshirt_colours[(i * 2) + 1]); + image_id = baseImage_id + | SPRITE_ID_PALETTE_COLOUR_2( + vehicle->peep_tshirt_colours[i * 2], vehicle->peep_tshirt_colours[(i * 2) + 1]); if (i == 0 && vehicleEntry->flags & VEHICLE_ENTRY_FLAG_RIDER_ANIMATION) { image_id += (vehicleEntry->no_vehicle_images * vehicle->animation_frame); } sub_98199C( - session, image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, + session, + image_id, + 0, + 0, + bb.length_x, + bb.length_y, + bb.length_z, + z, + bb.offset_x, + bb.offset_y, bb.offset_z + z); baseImage_id += vehicleEntry->no_vehicle_images; } @@ -938,15 +953,20 @@ static void vehicle_sprite_paint(paint_session * session, const rct_vehicle * ve } // 6D520E -static void vehicle_sprite_paint_6D520E(paint_session * session, const rct_vehicle * vehicle, int32_t ebx, int32_t ecx, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_paint_6D520E( + paint_session* session, + const rct_vehicle* vehicle, + int32_t ebx, + int32_t ecx, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { vehicle_sprite_paint(session, vehicle, ebx + vehicle->swing_sprite, ecx, z, vehicleEntry); } // 6D51EB -static void vehicle_sprite_paint_6D51EB(paint_session * session, const rct_vehicle * vehicle, int32_t ebx, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_paint_6D51EB( + paint_session* session, const rct_vehicle* vehicle, int32_t ebx, int32_t z, const rct_ride_entry_vehicle* vehicleEntry) { int32_t ecx = ebx / 2; if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_11) @@ -962,8 +982,8 @@ static void vehicle_sprite_paint_6D51EB(paint_session * session, const rct_vehic } // 6D51DE -static void vehicle_sprite_paint_6D51DE(paint_session * session, const rct_vehicle * vehicle, int32_t ebx, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_paint_6D51DE( + paint_session* session, const rct_vehicle* vehicle, int32_t ebx, int32_t z, const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->restraints_position < 64) { @@ -981,7 +1001,7 @@ static void vehicle_sprite_paint_6D51DE(paint_session * session, const rct_vehic return; } int32_t ecx = ebx / 2; - ebx = ebx / 8; + ebx = ebx / 8; ebx += ((vehicle->restraints_position - 64) / 64) * 4; ebx *= vehicleEntry->base_num_frames; ebx += vehicleEntry->restraint_image_id; @@ -989,15 +1009,23 @@ static void vehicle_sprite_paint_6D51DE(paint_session * session, const rct_vehic } // 6D51DE -static void vehicle_sprite_0_0(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_0( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { vehicle_sprite_paint_6D51DE(session, vehicle, imageDirection, z, vehicleEntry); } // 6D4EE7 -static void vehicle_sprite_0_1(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_1( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) { @@ -1012,8 +1040,12 @@ static void vehicle_sprite_0_1(paint_session * session, const rct_vehicle * vehi } // 6D4F34 -static void vehicle_sprite_0_2(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_2( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) { @@ -1028,8 +1060,12 @@ static void vehicle_sprite_0_2(paint_session * session, const rct_vehicle * vehi } // 6D4F0C -static void vehicle_sprite_0_3(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_3( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) { @@ -1044,8 +1080,12 @@ static void vehicle_sprite_0_3(paint_session * session, const rct_vehicle * vehi } // 6D4F5C -static void vehicle_sprite_0_4(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_4( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) { @@ -1060,8 +1100,12 @@ static void vehicle_sprite_0_4(paint_session * session, const rct_vehicle * vehi } // 6D4F84 -static void vehicle_sprite_0_5(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_5( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -1080,8 +1124,12 @@ static void vehicle_sprite_0_5(paint_session * session, const rct_vehicle * vehi } // 6D4FE4 -static void vehicle_sprite_0_6(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_6( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -1100,8 +1148,12 @@ static void vehicle_sprite_0_6(paint_session * session, const rct_vehicle * vehi } // 6D5055 -static void vehicle_sprite_0_7(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_7( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -1120,8 +1172,12 @@ static void vehicle_sprite_0_7(paint_session * session, const rct_vehicle * vehi } // 6D50C6 -static void vehicle_sprite_0_8(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_8( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -1140,8 +1196,12 @@ static void vehicle_sprite_0_8(paint_session * session, const rct_vehicle * vehi } // 6D5137 -static void vehicle_sprite_0_9(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_9( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -1160,8 +1220,12 @@ static void vehicle_sprite_0_9(paint_session * session, const rct_vehicle * vehi } // 6D4FB1 -static void vehicle_sprite_0_10(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_10( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -1180,8 +1244,12 @@ static void vehicle_sprite_0_10(paint_session * session, const rct_vehicle * veh } // 6D501B -static void vehicle_sprite_0_11(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_11( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -1200,8 +1268,12 @@ static void vehicle_sprite_0_11(paint_session * session, const rct_vehicle * veh } // 6D508C -static void vehicle_sprite_0_12(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_12( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -1220,8 +1292,12 @@ static void vehicle_sprite_0_12(paint_session * session, const rct_vehicle * veh } // 6D50FD -static void vehicle_sprite_0_13(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_13( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -1240,8 +1316,12 @@ static void vehicle_sprite_0_13(paint_session * session, const rct_vehicle * veh } // 6D516E -static void vehicle_sprite_0_14(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_14( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -1260,8 +1340,12 @@ static void vehicle_sprite_0_14(paint_session * session, const rct_vehicle * veh } // 6D4EE4 -static void vehicle_sprite_0_16(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_16( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { vehicleEntry--; if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) @@ -1277,8 +1361,12 @@ static void vehicle_sprite_0_16(paint_session * session, const rct_vehicle * veh } // 6D4F31 -static void vehicle_sprite_0_17(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_17( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { vehicleEntry--; if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) @@ -1294,8 +1382,12 @@ static void vehicle_sprite_0_17(paint_session * session, const rct_vehicle * veh } // 6D4F09 -static void vehicle_sprite_0_18(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_18( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { vehicleEntry--; if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) @@ -1311,8 +1403,12 @@ static void vehicle_sprite_0_18(paint_session * session, const rct_vehicle * veh } // 6D4F59 -static void vehicle_sprite_0_19(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0_19( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { vehicleEntry--; if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) @@ -1328,78 +1424,86 @@ static void vehicle_sprite_0_19(paint_session * session, const rct_vehicle * veh } // 6D51D7 -static void vehicle_sprite_0(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_0( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { // 0x009A3DE4: switch (vehicle->bank_rotation) { - case 0: - vehicle_sprite_0_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 1: - vehicle_sprite_0_1(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 2: - vehicle_sprite_0_2(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 3: - vehicle_sprite_0_3(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 4: - vehicle_sprite_0_4(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 5: - vehicle_sprite_0_5(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 6: - vehicle_sprite_0_6(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 7: - vehicle_sprite_0_7(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 8: - vehicle_sprite_0_8(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 9: - vehicle_sprite_0_9(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 10: - vehicle_sprite_0_10(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 11: - vehicle_sprite_0_11(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 12: - vehicle_sprite_0_12(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 13: - vehicle_sprite_0_13(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 14: - vehicle_sprite_0_14(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 15: - vehicle_sprite_0_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 16: - vehicle_sprite_0_16(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 17: - vehicle_sprite_0_17(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 18: - vehicle_sprite_0_18(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 19: - vehicle_sprite_0_19(session, vehicle, imageDirection, z, vehicleEntry); - break; + case 0: + vehicle_sprite_0_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 1: + vehicle_sprite_0_1(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 2: + vehicle_sprite_0_2(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 3: + vehicle_sprite_0_3(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 4: + vehicle_sprite_0_4(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 5: + vehicle_sprite_0_5(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 6: + vehicle_sprite_0_6(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 7: + vehicle_sprite_0_7(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 8: + vehicle_sprite_0_8(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 9: + vehicle_sprite_0_9(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 10: + vehicle_sprite_0_10(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 11: + vehicle_sprite_0_11(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 12: + vehicle_sprite_0_12(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 13: + vehicle_sprite_0_13(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 14: + vehicle_sprite_0_14(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 15: + vehicle_sprite_0_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 16: + vehicle_sprite_0_16(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 17: + vehicle_sprite_0_17(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 18: + vehicle_sprite_0_18(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 19: + vehicle_sprite_0_19(session, vehicle, imageDirection, z, vehicleEntry); + break; } } // 6D4614 -static void vehicle_sprite_1_0(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_1_0( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPES) { @@ -1414,8 +1518,12 @@ static void vehicle_sprite_1_0(paint_session * session, const rct_vehicle * vehi } // 6D4662 -static void vehicle_sprite_1_1(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_1_1( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_BANKED_TRANSITIONS) { @@ -1430,8 +1538,12 @@ static void vehicle_sprite_1_1(paint_session * session, const rct_vehicle * vehi } // 6D46DB -static void vehicle_sprite_1_2(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_1_2( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_WHILE_BANKED_TRANSITIONS) { @@ -1446,8 +1558,12 @@ static void vehicle_sprite_1_2(paint_session * session, const rct_vehicle * vehi } // 6D467D -static void vehicle_sprite_1_3(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_1_3( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_BANKED_TRANSITIONS) { @@ -1462,13 +1578,18 @@ static void vehicle_sprite_1_3(paint_session * session, const rct_vehicle * vehi } // 6D46FD -static void vehicle_sprite_1_4(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_1_4( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_WHILE_BANKED_TRANSITIONS) { int32_t ecx = imageDirection / 2; - int32_t ebx = (((imageDirection / 8) + 4) * vehicleEntry->base_num_frames) + vehicleEntry->flat_bank_to_gentle_slope_image_id; + int32_t ebx + = (((imageDirection / 8) + 4) * vehicleEntry->base_num_frames) + vehicleEntry->flat_bank_to_gentle_slope_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } else @@ -1478,78 +1599,86 @@ static void vehicle_sprite_1_4(paint_session * session, const rct_vehicle * vehi } // 6D460D -static void vehicle_sprite_1(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_1( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { // 0x009A3C04: switch (vehicle->bank_rotation) { - case 0: - vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 1: - vehicle_sprite_1_1(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 2: - vehicle_sprite_1_2(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 3: - vehicle_sprite_1_3(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 4: - vehicle_sprite_1_4(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 5: - vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 6: - vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 7: - vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 8: - vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 9: - vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 10: - vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 11: - vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 12: - vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 13: - vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 14: - vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 15: - vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 16: - vehicle_sprite_1_1(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 17: - vehicle_sprite_1_2(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 18: - vehicle_sprite_1_3(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 19: - vehicle_sprite_1_4(session, vehicle, imageDirection, z, vehicleEntry); - break; + case 0: + vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 1: + vehicle_sprite_1_1(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 2: + vehicle_sprite_1_2(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 3: + vehicle_sprite_1_3(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 4: + vehicle_sprite_1_4(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 5: + vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 6: + vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 7: + vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 8: + vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 9: + vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 10: + vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 11: + vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 12: + vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 13: + vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 14: + vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 15: + vehicle_sprite_1_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 16: + vehicle_sprite_1_1(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 17: + vehicle_sprite_1_2(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 18: + vehicle_sprite_1_3(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 19: + vehicle_sprite_1_4(session, vehicle, imageDirection, z, vehicleEntry); + break; } } // 6D4791 -static void vehicle_sprite_2_0(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_2_0( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPES) { @@ -1573,8 +1702,12 @@ static void vehicle_sprite_2_0(paint_session * session, const rct_vehicle * vehi } // 6D4833 -static void vehicle_sprite_2_1(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_2_1( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TRANSITIONS) { @@ -1589,8 +1722,12 @@ static void vehicle_sprite_2_1(paint_session * session, const rct_vehicle * vehi } // 6D48D6 -static void vehicle_sprite_2_2(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_2_2( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TURNS) { @@ -1615,13 +1752,18 @@ static void vehicle_sprite_2_2(paint_session * session, const rct_vehicle * vehi } // 6D4858 -static void vehicle_sprite_2_3(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_2_3( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TRANSITIONS) { int32_t ecx = (imageDirection / 2) + 16; - int32_t ebx = (((imageDirection / 8) + 4) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_to_bank_image_id; + int32_t ebx + = (((imageDirection / 8) + 4) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_to_bank_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } else @@ -1631,22 +1773,28 @@ static void vehicle_sprite_2_3(paint_session * session, const rct_vehicle * vehi } // 6D4910 -static void vehicle_sprite_2_4(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_2_4( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TURNS) { int32_t ecx = imageDirection / 2; if (vehicleEntry->draw_order < 5) { - ecx = (ecx ^ 8) + 108; - int32_t ebx = ((imageDirection + 32) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_bank_turn_image_id; + ecx = (ecx ^ 8) + 108; + int32_t ebx + = ((imageDirection + 32) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_bank_turn_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } else { ecx += 16; - int32_t ebx = ((imageDirection + 32) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_bank_turn_image_id; + int32_t ebx + = ((imageDirection + 32) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_bank_turn_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } } @@ -1657,78 +1805,86 @@ static void vehicle_sprite_2_4(paint_session * session, const rct_vehicle * vehi } // 6D476C -static void vehicle_sprite_2(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_2( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { // 0x009A3CA4: switch (vehicle->bank_rotation) { - case 0: - vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 1: - vehicle_sprite_2_1(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 2: - vehicle_sprite_2_2(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 3: - vehicle_sprite_2_3(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 4: - vehicle_sprite_2_4(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 5: - vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 6: - vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 7: - vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 8: - vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 9: - vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 10: - vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 11: - vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 12: - vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 13: - vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 14: - vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 15: - vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 16: - vehicle_sprite_2_1(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 17: - vehicle_sprite_2_2(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 18: - vehicle_sprite_2_3(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 19: - vehicle_sprite_2_4(session, vehicle, imageDirection, z, vehicleEntry); - break; + case 0: + vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 1: + vehicle_sprite_2_1(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 2: + vehicle_sprite_2_2(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 3: + vehicle_sprite_2_3(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 4: + vehicle_sprite_2_4(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 5: + vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 6: + vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 7: + vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 8: + vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 9: + vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 10: + vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 11: + vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 12: + vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 13: + vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 14: + vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 15: + vehicle_sprite_2_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 16: + vehicle_sprite_2_1(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 17: + vehicle_sprite_2_2(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 18: + vehicle_sprite_2_3(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 19: + vehicle_sprite_2_4(session, vehicle, imageDirection, z, vehicleEntry); + break; } } // 6D49DC -static void vehicle_sprite_3(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_3( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (!(vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_STEEP_SLOPES)) { @@ -1743,8 +1899,12 @@ static void vehicle_sprite_3(paint_session * session, const rct_vehicle * vehicl } // 6D4A31 -static void vehicle_sprite_4(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_4( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (!(vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_STEEP_SLOPES)) { @@ -1759,8 +1919,12 @@ static void vehicle_sprite_4(paint_session * session, const rct_vehicle * vehicl } // 6D463D -static void vehicle_sprite_5_0(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_5_0( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPES) { @@ -1775,8 +1939,12 @@ static void vehicle_sprite_5_0(paint_session * session, const rct_vehicle * vehi } // 6D469B -static void vehicle_sprite_5_1(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_5_1( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_BANKED_TRANSITIONS) { @@ -1791,13 +1959,18 @@ static void vehicle_sprite_5_1(paint_session * session, const rct_vehicle * vehi } // 6D4722 -static void vehicle_sprite_5_2(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_5_2( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_WHILE_BANKED_TRANSITIONS) { int32_t ecx = imageDirection / 2; - int32_t ebx = (((imageDirection / 8) + 8) * vehicleEntry->base_num_frames) + vehicleEntry->flat_bank_to_gentle_slope_image_id; + int32_t ebx + = (((imageDirection / 8) + 8) * vehicleEntry->base_num_frames) + vehicleEntry->flat_bank_to_gentle_slope_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } else @@ -1807,8 +1980,12 @@ static void vehicle_sprite_5_2(paint_session * session, const rct_vehicle * vehi } // 6D46B9 -static void vehicle_sprite_5_3(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_5_3( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_BANKED_TRANSITIONS) { @@ -1823,13 +2000,18 @@ static void vehicle_sprite_5_3(paint_session * session, const rct_vehicle * vehi } // 6D4747 -static void vehicle_sprite_5_4(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_5_4( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_WHILE_BANKED_TRANSITIONS) { int32_t ecx = imageDirection / 2; - int32_t ebx = (((imageDirection / 8) + 12) * vehicleEntry->base_num_frames) + vehicleEntry->flat_bank_to_gentle_slope_image_id; + int32_t ebx + = (((imageDirection / 8) + 12) * vehicleEntry->base_num_frames) + vehicleEntry->flat_bank_to_gentle_slope_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } else @@ -1839,78 +2021,86 @@ static void vehicle_sprite_5_4(paint_session * session, const rct_vehicle * vehi } // 6D4636 -static void vehicle_sprite_5(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_5( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { // 0x009A3C54: switch (vehicle->bank_rotation) { - case 0: - vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 1: - vehicle_sprite_5_1(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 2: - vehicle_sprite_5_2(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 3: - vehicle_sprite_5_3(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 4: - vehicle_sprite_5_4(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 5: - vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 6: - vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 7: - vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 8: - vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 9: - vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 10: - vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 11: - vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 12: - vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 13: - vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 14: - vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 15: - vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 16: - vehicle_sprite_5_1(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 17: - vehicle_sprite_5_2(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 18: - vehicle_sprite_5_3(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 19: - vehicle_sprite_5_4(session, vehicle, imageDirection, z, vehicleEntry); - break; + case 0: + vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 1: + vehicle_sprite_5_1(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 2: + vehicle_sprite_5_2(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 3: + vehicle_sprite_5_3(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 4: + vehicle_sprite_5_4(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 5: + vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 6: + vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 7: + vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 8: + vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 9: + vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 10: + vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 11: + vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 12: + vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 13: + vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 14: + vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 15: + vehicle_sprite_5_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 16: + vehicle_sprite_5_1(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 17: + vehicle_sprite_5_2(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 18: + vehicle_sprite_5_3(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 19: + vehicle_sprite_5_4(session, vehicle, imageDirection, z, vehicleEntry); + break; } } // 6D47E4 -static void vehicle_sprite_6_0(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_6_0( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPES) { @@ -1934,13 +2124,18 @@ static void vehicle_sprite_6_0(paint_session * session, const rct_vehicle * vehi } // 6D4880 -static void vehicle_sprite_6_1(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_6_1( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TRANSITIONS) { int32_t ecx = ((imageDirection / 2) ^ 8) + 16; - int32_t ebx = (((imageDirection / 8) + 8) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_to_bank_image_id; + int32_t ebx + = (((imageDirection / 8) + 8) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_to_bank_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } else @@ -1950,8 +2145,12 @@ static void vehicle_sprite_6_1(paint_session * session, const rct_vehicle * vehi } // 6D4953 -static void vehicle_sprite_6_2(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_6_2( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TURNS) { @@ -1959,13 +2158,15 @@ static void vehicle_sprite_6_2(paint_session * session, const rct_vehicle * vehi if (vehicleEntry->draw_order < 5) { ecx += 108; - int32_t ebx = ((imageDirection + 64) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_bank_turn_image_id; + int32_t ebx + = ((imageDirection + 64) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_bank_turn_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } else { - ecx = (ecx ^ 8) + 16; - int32_t ebx = ((imageDirection + 64) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_bank_turn_image_id; + ecx = (ecx ^ 8) + 16; + int32_t ebx + = ((imageDirection + 64) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_bank_turn_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } } @@ -1976,13 +2177,18 @@ static void vehicle_sprite_6_2(paint_session * session, const rct_vehicle * vehi } // 6D48AB -static void vehicle_sprite_6_3(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_6_3( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TRANSITIONS) { int32_t ecx = ((imageDirection / 2) ^ 8) + 16; - int32_t ebx = (((imageDirection / 8) + 12) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_to_bank_image_id; + int32_t ebx + = (((imageDirection / 8) + 12) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_to_bank_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } else @@ -1992,22 +2198,28 @@ static void vehicle_sprite_6_3(paint_session * session, const rct_vehicle * vehi } // 6D4996 -static void vehicle_sprite_6_4(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_6_4( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TURNS) { int32_t ecx = imageDirection / 2; if (vehicleEntry->draw_order < 5) { - ecx = (ecx ^ 8) + 108; - int32_t ebx = ((imageDirection + 96) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_bank_turn_image_id; + ecx = (ecx ^ 8) + 108; + int32_t ebx + = ((imageDirection + 96) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_bank_turn_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } else { - ecx = (ecx ^ 8) + 16; - int32_t ebx = ((imageDirection + 96) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_bank_turn_image_id; + ecx = (ecx ^ 8) + 16; + int32_t ebx + = ((imageDirection + 96) * vehicleEntry->base_num_frames) + vehicleEntry->gentle_slope_bank_turn_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } } @@ -2018,78 +2230,86 @@ static void vehicle_sprite_6_4(paint_session * session, const rct_vehicle * vehi } // 6D47DD -static void vehicle_sprite_6(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_6( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { // 0x009A3CF4: switch (vehicle->bank_rotation) { - case 0: - vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 1: - vehicle_sprite_6_1(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 2: - vehicle_sprite_6_2(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 3: - vehicle_sprite_6_3(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 4: - vehicle_sprite_6_4(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 5: - vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 6: - vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 7: - vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 8: - vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 9: - vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 10: - vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 11: - vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 12: - vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 13: - vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 14: - vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 15: - vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 16: - vehicle_sprite_6_1(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 17: - vehicle_sprite_6_2(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 18: - vehicle_sprite_6_3(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 19: - vehicle_sprite_6_4(session, vehicle, imageDirection, z, vehicleEntry); - break; + case 0: + vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 1: + vehicle_sprite_6_1(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 2: + vehicle_sprite_6_2(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 3: + vehicle_sprite_6_3(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 4: + vehicle_sprite_6_4(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 5: + vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 6: + vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 7: + vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 8: + vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 9: + vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 10: + vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 11: + vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 12: + vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 13: + vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 14: + vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 15: + vehicle_sprite_6_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 16: + vehicle_sprite_6_1(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 17: + vehicle_sprite_6_2(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 18: + vehicle_sprite_6_3(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 19: + vehicle_sprite_6_4(session, vehicle, imageDirection, z, vehicleEntry); + break; } } // 6D4A05 -static void vehicle_sprite_7(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_7( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_STEEP_SLOPES) { @@ -2104,8 +2324,12 @@ static void vehicle_sprite_7(paint_session * session, const rct_vehicle * vehicl } // 6D4A59 -static void vehicle_sprite_8(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_8( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_STEEP_SLOPES) { @@ -2120,8 +2344,12 @@ static void vehicle_sprite_8(paint_session * session, const rct_vehicle * vehicl } // 6D4A81 -static void vehicle_sprite_9(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_9( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { @@ -2136,8 +2364,12 @@ static void vehicle_sprite_9(paint_session * session, const rct_vehicle * vehicl } // 6D4AE8 -static void vehicle_sprite_10(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_10( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { @@ -2152,8 +2384,12 @@ static void vehicle_sprite_10(paint_session * session, const rct_vehicle * vehic } // 6D4B57 -static void vehicle_sprite_11(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_11( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { @@ -2168,8 +2404,12 @@ static void vehicle_sprite_11(paint_session * session, const rct_vehicle * vehic } // 6D4BB7 -static void vehicle_sprite_12(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_12( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { @@ -2184,8 +2424,12 @@ static void vehicle_sprite_12(paint_session * session, const rct_vehicle * vehic } // 6D4C17 -static void vehicle_sprite_13(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_13( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { @@ -2200,8 +2444,12 @@ static void vehicle_sprite_13(paint_session * session, const rct_vehicle * vehic } // 6D4C77 -static void vehicle_sprite_14(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_14( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { @@ -2216,8 +2464,12 @@ static void vehicle_sprite_14(paint_session * session, const rct_vehicle * vehic } // 6D4CD7 -static void vehicle_sprite_15(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_15( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { @@ -2232,8 +2484,12 @@ static void vehicle_sprite_15(paint_session * session, const rct_vehicle * vehic } // 6D4D37 -static void vehicle_sprite_16(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_16( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { @@ -2248,13 +2504,17 @@ static void vehicle_sprite_16(paint_session * session, const rct_vehicle * vehic } // 6D4AA3 -static void vehicle_sprite_17(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_17( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { - if ((vehicle->track_type >> 2) != TRACK_ELEM_90_DEG_DOWN_TO_60_DEG_DOWN && - (vehicle->track_type >> 2) != TRACK_ELEM_60_DEG_DOWN_TO_90_DEG_DOWN) + if ((vehicle->track_type >> 2) != TRACK_ELEM_90_DEG_DOWN_TO_60_DEG_DOWN + && (vehicle->track_type >> 2) != TRACK_ELEM_60_DEG_DOWN_TO_90_DEG_DOWN) { vehicleEntry--; } @@ -2272,14 +2532,18 @@ static void vehicle_sprite_17(paint_session * session, const rct_vehicle * vehic } // 6D4B0D -static void vehicle_sprite_18(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_18( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { - if ((vehicle->track_type >> 2) != TRACK_ELEM_90_DEG_DOWN && - (vehicle->track_type >> 2) != TRACK_ELEM_90_DEG_DOWN_TO_60_DEG_DOWN && - (vehicle->track_type >> 2) != TRACK_ELEM_60_DEG_DOWN_TO_90_DEG_DOWN) + if ((vehicle->track_type >> 2) != TRACK_ELEM_90_DEG_DOWN + && (vehicle->track_type >> 2) != TRACK_ELEM_90_DEG_DOWN_TO_60_DEG_DOWN + && (vehicle->track_type >> 2) != TRACK_ELEM_60_DEG_DOWN_TO_90_DEG_DOWN) { vehicleEntry--; } @@ -2297,8 +2561,12 @@ static void vehicle_sprite_18(paint_session * session, const rct_vehicle * vehic } // 6D4B80 -static void vehicle_sprite_19(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_19( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -2317,8 +2585,12 @@ static void vehicle_sprite_19(paint_session * session, const rct_vehicle * vehic } // 6D4BE0 -static void vehicle_sprite_20(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_20( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -2337,8 +2609,12 @@ static void vehicle_sprite_20(paint_session * session, const rct_vehicle * vehic } // 6D4C40 -static void vehicle_sprite_21(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_21( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -2357,8 +2633,12 @@ static void vehicle_sprite_21(paint_session * session, const rct_vehicle * vehic } // 6D4CA0 -static void vehicle_sprite_22(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_22( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -2377,8 +2657,12 @@ static void vehicle_sprite_22(paint_session * session, const rct_vehicle * vehic } // 6D4D00 -static void vehicle_sprite_23(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_23( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -2397,8 +2681,12 @@ static void vehicle_sprite_23(paint_session * session, const rct_vehicle * vehic } // 6D51A5 -static void vehicle_sprite_24(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_24( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES) { @@ -2418,8 +2706,12 @@ static void vehicle_sprite_24(paint_session * session, const rct_vehicle * vehic } // 6D4D67 -static void vehicle_sprite_50_0(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_50_0( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES) { @@ -2434,13 +2726,18 @@ static void vehicle_sprite_50_0(paint_session * session, const rct_vehicle * veh } // 6D4DB5 -static void vehicle_sprite_50_1(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_50_1( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_GENTLE_SLOPE_BANKED_TRANSITIONS) { int32_t ecx = imageDirection / 2; - int32_t ebx = ((imageDirection / 8) * vehicleEntry->base_num_frames) + vehicleEntry->diagonal_to_gentle_slope_bank_image_id; + int32_t ebx + = ((imageDirection / 8) * vehicleEntry->base_num_frames) + vehicleEntry->diagonal_to_gentle_slope_bank_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } else @@ -2450,13 +2747,18 @@ static void vehicle_sprite_50_1(paint_session * session, const rct_vehicle * veh } // 6D4DD3 -static void vehicle_sprite_50_3(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_50_3( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_GENTLE_SLOPE_BANKED_TRANSITIONS) { int32_t ecx = imageDirection / 2; - int32_t ebx = (((imageDirection / 8) + 4) * vehicleEntry->base_num_frames) + vehicleEntry->diagonal_to_gentle_slope_bank_image_id; + int32_t ebx = (((imageDirection / 8) + 4) * vehicleEntry->base_num_frames) + + vehicleEntry->diagonal_to_gentle_slope_bank_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } else @@ -2466,78 +2768,86 @@ static void vehicle_sprite_50_3(paint_session * session, const rct_vehicle * veh } // 6D4D60 -static void vehicle_sprite_50(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_50( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { // 0x009A3D44: switch (vehicle->bank_rotation) { - case 0: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 1: - vehicle_sprite_50_1(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 2: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 3: - vehicle_sprite_50_3(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 4: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 5: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 6: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 7: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 8: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 9: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 10: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 11: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 12: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 13: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 14: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 15: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 16: - vehicle_sprite_50_1(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 17: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 18: - vehicle_sprite_50_3(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 19: - vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); - break; + case 0: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 1: + vehicle_sprite_50_1(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 2: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 3: + vehicle_sprite_50_3(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 4: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 5: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 6: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 7: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 8: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 9: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 10: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 11: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 12: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 13: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 14: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 15: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 16: + vehicle_sprite_50_1(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 17: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 18: + vehicle_sprite_50_3(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 19: + vehicle_sprite_50_0(session, vehicle, imageDirection, z, vehicleEntry); + break; } } // 6D4E3A -static void vehicle_sprite_51(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_51( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES) { @@ -2552,8 +2862,12 @@ static void vehicle_sprite_51(paint_session * session, const rct_vehicle * vehic } // 6D4E8F -static void vehicle_sprite_52(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_52( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES) { @@ -2568,8 +2882,12 @@ static void vehicle_sprite_52(paint_session * session, const rct_vehicle * vehic } // 6D4D90 -static void vehicle_sprite_53_0(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_53_0( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES) { @@ -2584,13 +2902,18 @@ static void vehicle_sprite_53_0(paint_session * session, const rct_vehicle * veh } // 6D4DF4 -static void vehicle_sprite_53_1(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_53_1( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_GENTLE_SLOPE_BANKED_TRANSITIONS) { int32_t ecx = imageDirection / 2; - int32_t ebx = (((imageDirection / 8) + 8) * vehicleEntry->base_num_frames) + vehicleEntry->diagonal_to_gentle_slope_bank_image_id; + int32_t ebx = (((imageDirection / 8) + 8) * vehicleEntry->base_num_frames) + + vehicleEntry->diagonal_to_gentle_slope_bank_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } else @@ -2600,13 +2923,18 @@ static void vehicle_sprite_53_1(paint_session * session, const rct_vehicle * veh } // 6D4E15 -static void vehicle_sprite_53_3(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_53_3( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_GENTLE_SLOPE_BANKED_TRANSITIONS) { int32_t ecx = imageDirection / 2; - int32_t ebx = (((imageDirection / 8) + 12) * vehicleEntry->base_num_frames) + vehicleEntry->diagonal_to_gentle_slope_bank_image_id; + int32_t ebx = (((imageDirection / 8) + 12) * vehicleEntry->base_num_frames) + + vehicleEntry->diagonal_to_gentle_slope_bank_image_id; vehicle_sprite_paint_6D520E(session, vehicle, ebx, ecx, z, vehicleEntry); } else @@ -2616,78 +2944,86 @@ static void vehicle_sprite_53_3(paint_session * session, const rct_vehicle * veh } // 6D4D89 -static void vehicle_sprite_53(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_53( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { // 0x009A3D94: switch (vehicle->bank_rotation) { - case 0: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 1: - vehicle_sprite_53_1(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 2: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 3: - vehicle_sprite_53_3(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 4: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 5: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 6: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 7: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 8: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 9: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 10: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 11: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 12: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 13: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 14: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 15: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 16: - vehicle_sprite_53_1(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 17: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 18: - vehicle_sprite_53_3(session, vehicle, imageDirection, z, vehicleEntry); - break; - case 19: - vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); - break; + case 0: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 1: + vehicle_sprite_53_1(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 2: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 3: + vehicle_sprite_53_3(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 4: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 5: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 6: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 7: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 8: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 9: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 10: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 11: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 12: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 13: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 14: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 15: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 16: + vehicle_sprite_53_1(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 17: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 18: + vehicle_sprite_53_3(session, vehicle, imageDirection, z, vehicleEntry); + break; + case 19: + vehicle_sprite_53_0(session, vehicle, imageDirection, z, vehicleEntry); + break; } } // 6D4E63 -static void vehicle_sprite_54(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_54( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES) { @@ -2702,8 +3038,12 @@ static void vehicle_sprite_54(paint_session * session, const rct_vehicle * vehic } // 6D4EB8 -static void vehicle_sprite_55(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_55( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES) { @@ -2718,16 +3058,24 @@ static void vehicle_sprite_55(paint_session * session, const rct_vehicle * vehic } // 6D47DA -static void vehicle_sprite_56(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_56( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { vehicleEntry--; vehicle_sprite_6(session, vehicle, imageDirection, z, vehicleEntry); } // 6D4A02 -static void vehicle_sprite_57(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_57( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { vehicleEntry--; if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_STEEP_SLOPES) @@ -2743,8 +3091,12 @@ static void vehicle_sprite_57(paint_session * session, const rct_vehicle * vehic } // 6D4A56 -static void vehicle_sprite_58(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_58( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { vehicleEntry--; if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_STEEP_SLOPES) @@ -2760,8 +3112,12 @@ static void vehicle_sprite_58(paint_session * session, const rct_vehicle * vehic } // 6D4773 -static void vehicle_sprite_59(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection, int32_t z, - const rct_ride_entry_vehicle * vehicleEntry) +static void vehicle_sprite_59( + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_CURVED_LIFT_HILL) { @@ -2777,11 +3133,11 @@ static void vehicle_sprite_59(paint_session * session, const rct_vehicle * vehic // 0x009A3B14: using vehicle_sprite_func = void (*)( - paint_session * session, - const rct_vehicle * vehicle, - int32_t imageDirection, - int32_t z, - const rct_ride_entry_vehicle * vehicleEntry); + paint_session* session, + const rct_vehicle* vehicle, + int32_t imageDirection, + int32_t z, + const rct_ride_entry_vehicle* vehicleEntry); // clang-format off static constexpr const vehicle_sprite_func vehicle_sprite_funcs[] = { @@ -2852,7 +3208,7 @@ static constexpr const vehicle_sprite_func vehicle_sprite_funcs[] = { * * rct2: 0x006D5600 */ -static void vehicle_visual_splash1_effect(paint_session * session, int32_t z, const rct_vehicle * vehicle) +static void vehicle_visual_splash1_effect(paint_session* session, int32_t z, const rct_vehicle* vehicle) { if ((vehicle->track_type >> 2) != TRACK_ELEM_WATER_SPLASH) { @@ -2870,8 +3226,8 @@ static void vehicle_visual_splash1_effect(paint_session * session, int32_t z, co { return; } - int32_t image_id = - 29014 + ((((vehicle->sprite_direction / 8) + session->CurrentRotation) & 3) * 8) + ((gCurrentTicks / 2) & 7); + int32_t image_id + = 29014 + ((((vehicle->sprite_direction / 8) + session->CurrentRotation) & 3) * 8) + ((gCurrentTicks / 2) & 7); sub_98199C(session, image_id, 0, 0, 0, 0, 0, z, 0, 0, z); } @@ -2879,7 +3235,7 @@ static void vehicle_visual_splash1_effect(paint_session * session, int32_t z, co * * rct2: 0x006D5696 */ -static void vehicle_visual_splash2_effect(paint_session * session, int32_t z, const rct_vehicle * vehicle) +static void vehicle_visual_splash2_effect(paint_session* session, int32_t z, const rct_vehicle* vehicle) { if (vehicle->sprite_direction & 7) { @@ -2893,8 +3249,8 @@ static void vehicle_visual_splash2_effect(paint_session * session, int32_t z, co { return; } - int32_t image_id = - 29046 + ((((vehicle->sprite_direction / 8) + session->CurrentRotation) & 3) * 8) + ((gCurrentTicks / 2) & 7); + int32_t image_id + = 29046 + ((((vehicle->sprite_direction / 8) + session->CurrentRotation) & 3) * 8) + ((gCurrentTicks / 2) & 7); sub_98199C(session, image_id, 0, 0, 0, 0, 0, z, 0, 0, z); } @@ -2902,7 +3258,7 @@ static void vehicle_visual_splash2_effect(paint_session * session, int32_t z, co * * rct2: 0x006D57EE */ -static void vehicle_visual_splash3_effect(paint_session * session, int32_t z, const rct_vehicle * vehicle) +static void vehicle_visual_splash3_effect(paint_session* session, int32_t z, const rct_vehicle* vehicle) { if (vehicle->sprite_direction & 7) { @@ -2916,8 +3272,8 @@ static void vehicle_visual_splash3_effect(paint_session * session, int32_t z, co { return; } - int32_t image_id = - 29014 + ((((vehicle->sprite_direction / 8) + session->CurrentRotation) & 3) * 8) + ((gCurrentTicks / 2) & 7); + int32_t image_id + = 29014 + ((((vehicle->sprite_direction / 8) + session->CurrentRotation) & 3) * 8) + ((gCurrentTicks / 2) & 7); sub_98199C(session, image_id, 0, 0, 0, 0, 0, z, 0, 0, z); } @@ -2925,9 +3281,9 @@ static void vehicle_visual_splash3_effect(paint_session * session, int32_t z, co * * rct2: 0x006D5783 */ -static void vehicle_visual_splash4_effect(paint_session * session, int32_t z, const rct_vehicle * vehicle) +static void vehicle_visual_splash4_effect(paint_session* session, int32_t z, const rct_vehicle* vehicle) { - rct_vehicle * vehicle2 = GET_VEHICLE(vehicle->prev_vehicle_on_ride); + rct_vehicle* vehicle2 = GET_VEHICLE(vehicle->prev_vehicle_on_ride); if (vehicle2->velocity <= 0x50000) { return; @@ -2940,8 +3296,8 @@ static void vehicle_visual_splash4_effect(paint_session * session, int32_t z, co { return; } - int32_t image_id = - 29078 + ((((vehicle->sprite_direction / 8) + session->CurrentRotation) & 3) * 8) + ((gCurrentTicks / 2) & 7); + int32_t image_id + = 29078 + ((((vehicle->sprite_direction / 8) + session->CurrentRotation) & 3) * 8) + ((gCurrentTicks / 2) & 7); sub_98199C(session, image_id, 0, 0, 1, 1, 0, z, 0, 0, z); } @@ -2949,9 +3305,9 @@ static void vehicle_visual_splash4_effect(paint_session * session, int32_t z, co * * rct2: 0x006D5701 */ -static void vehicle_visual_splash5_effect(paint_session * session, int32_t z, const rct_vehicle * vehicle) +static void vehicle_visual_splash5_effect(paint_session* session, int32_t z, const rct_vehicle* vehicle) { - rct_vehicle * vehicle2 = GET_VEHICLE(vehicle->prev_vehicle_on_ride); + rct_vehicle* vehicle2 = GET_VEHICLE(vehicle->prev_vehicle_on_ride); if (vehicle2->velocity <= 0x50000) { return; @@ -2968,36 +3324,36 @@ static void vehicle_visual_splash5_effect(paint_session * session, int32_t z, co { return; } - int32_t image_id = - 29078 + ((((vehicle->sprite_direction / 8) + session->CurrentRotation) & 3) * 8) + ((gCurrentTicks / 2) & 7); + int32_t image_id + = 29078 + ((((vehicle->sprite_direction / 8) + session->CurrentRotation) & 3) * 8) + ((gCurrentTicks / 2) & 7); sub_98199C(session, image_id, 0, 0, 1, 1, 0, z, 0, 0, z); } -void vehicle_visual_splash_effect(paint_session * session, int32_t z, const rct_vehicle * vehicle, - const rct_ride_entry_vehicle * vehicleEntry) +void vehicle_visual_splash_effect( + paint_session* session, int32_t z, const rct_vehicle* vehicle, const rct_ride_entry_vehicle* vehicleEntry) { switch (vehicleEntry->effect_visual) { - case 1: /* nullsub */ - break; - case VEHICLE_VISUAL_SPLASH1_EFFECT: - vehicle_visual_splash1_effect(session, z, vehicle); - break; - case VEHICLE_VISUAL_SPLASH2_EFFECT: - vehicle_visual_splash2_effect(session, z, vehicle); - break; - case VEHICLE_VISUAL_SPLASH3_EFFECT: - vehicle_visual_splash3_effect(session, z, vehicle); - break; - case VEHICLE_VISUAL_SPLASH4_EFFECT: - vehicle_visual_splash4_effect(session, z, vehicle); - break; - case VEHICLE_VISUAL_SPLASH5_EFFECT: - vehicle_visual_splash5_effect(session, z, vehicle); - break; - default: - assert(false); - break; + case 1: /* nullsub */ + break; + case VEHICLE_VISUAL_SPLASH1_EFFECT: + vehicle_visual_splash1_effect(session, z, vehicle); + break; + case VEHICLE_VISUAL_SPLASH2_EFFECT: + vehicle_visual_splash2_effect(session, z, vehicle); + break; + case VEHICLE_VISUAL_SPLASH3_EFFECT: + vehicle_visual_splash3_effect(session, z, vehicle); + break; + case VEHICLE_VISUAL_SPLASH4_EFFECT: + vehicle_visual_splash4_effect(session, z, vehicle); + break; + case VEHICLE_VISUAL_SPLASH5_EFFECT: + vehicle_visual_splash5_effect(session, z, vehicle); + break; + default: + assert(false); + break; } } @@ -3005,8 +3361,12 @@ void vehicle_visual_splash_effect(paint_session * session, int32_t z, const rct_ * * rct2: 0x006D45F8 */ -void vehicle_visual_default(paint_session * session, int32_t imageDirection, int32_t z, const rct_vehicle * vehicle, - const rct_ride_entry_vehicle * vehicleEntry) +void vehicle_visual_default( + paint_session* session, + int32_t imageDirection, + int32_t z, + const rct_vehicle* vehicle, + const rct_ride_entry_vehicle* vehicleEntry) { if (vehicle->vehicle_sprite_type < Util::CountOf(vehicle_sprite_funcs)) { @@ -3018,10 +3378,10 @@ void vehicle_visual_default(paint_session * session, int32_t imageDirection, int * * rct2: 0x006D4244 */ -void vehicle_paint(paint_session * session, const rct_vehicle * vehicle, int32_t imageDirection) +void vehicle_paint(paint_session* session, const rct_vehicle* vehicle, int32_t imageDirection) { - rct_ride_entry * rideEntry = 0; - const rct_ride_entry_vehicle * vehicleEntry; + rct_ride_entry* rideEntry = 0; + const rct_ride_entry_vehicle* vehicleEntry; int32_t x = vehicle->x; int32_t y = vehicle->y; @@ -3056,38 +3416,38 @@ void vehicle_paint(paint_session * session, const rct_vehicle * vehicle, int32_t switch (vehicleEntry->car_visual) { - case VEHICLE_VISUAL_DEFAULT: - vehicle_visual_default(session, imageDirection, z, vehicle, vehicleEntry); - break; - case VEHICLE_VISUAL_LAUNCHED_FREEFALL: - vehicle_visual_launched_freefall(session, x, imageDirection, y, z, vehicle, vehicleEntry); - break; - case VEHICLE_VISUAL_OBSERVATION_TOWER: - vehicle_visual_observation_tower(session, x, imageDirection, y, z, vehicle, vehicleEntry); - break; - case VEHICLE_VISUAL_RIVER_RAPIDS: - vehicle_visual_river_rapids(session, x, imageDirection, y, z, vehicle, vehicleEntry); - break; - case VEHICLE_VISUAL_MINI_GOLF_PLAYER: - vehicle_visual_mini_golf_player(session, x, imageDirection, y, z, vehicle); - break; - case VEHICLE_VISUAL_MINI_GOLF_BALL: - vehicle_visual_mini_golf_ball(session, x, imageDirection, y, z, vehicle); - break; - case VEHICLE_VISUAL_REVERSER: - vehicle_visual_reverser(session, x, imageDirection, y, z, vehicle, vehicleEntry); - break; - case VEHICLE_VISUAL_SPLASH_BOATS_OR_WATER_COASTER: - vehicle_visual_splash_boats_or_water_coaster(session, x, imageDirection, y, z, vehicle, vehicleEntry); - break; - case VEHICLE_VISUAL_ROTO_DROP: - vehicle_visual_roto_drop(session, x, imageDirection, y, z, vehicle, vehicleEntry); - break; - case VEHICLE_VISUAL_VIRGINIA_REEL: - vehicle_visual_virginia_reel(session, x, imageDirection, y, z, vehicle, vehicleEntry); - break; - case VEHICLE_VISUAL_SUBMARINE: - vehicle_visual_submarine(session, x, imageDirection, y, z, vehicle, vehicleEntry); - break; + case VEHICLE_VISUAL_DEFAULT: + vehicle_visual_default(session, imageDirection, z, vehicle, vehicleEntry); + break; + case VEHICLE_VISUAL_LAUNCHED_FREEFALL: + vehicle_visual_launched_freefall(session, x, imageDirection, y, z, vehicle, vehicleEntry); + break; + case VEHICLE_VISUAL_OBSERVATION_TOWER: + vehicle_visual_observation_tower(session, x, imageDirection, y, z, vehicle, vehicleEntry); + break; + case VEHICLE_VISUAL_RIVER_RAPIDS: + vehicle_visual_river_rapids(session, x, imageDirection, y, z, vehicle, vehicleEntry); + break; + case VEHICLE_VISUAL_MINI_GOLF_PLAYER: + vehicle_visual_mini_golf_player(session, x, imageDirection, y, z, vehicle); + break; + case VEHICLE_VISUAL_MINI_GOLF_BALL: + vehicle_visual_mini_golf_ball(session, x, imageDirection, y, z, vehicle); + break; + case VEHICLE_VISUAL_REVERSER: + vehicle_visual_reverser(session, x, imageDirection, y, z, vehicle, vehicleEntry); + break; + case VEHICLE_VISUAL_SPLASH_BOATS_OR_WATER_COASTER: + vehicle_visual_splash_boats_or_water_coaster(session, x, imageDirection, y, z, vehicle, vehicleEntry); + break; + case VEHICLE_VISUAL_ROTO_DROP: + vehicle_visual_roto_drop(session, x, imageDirection, y, z, vehicle, vehicleEntry); + break; + case VEHICLE_VISUAL_VIRGINIA_REEL: + vehicle_visual_virginia_reel(session, x, imageDirection, y, z, vehicle, vehicleEntry); + break; + case VEHICLE_VISUAL_SUBMARINE: + vehicle_visual_submarine(session, x, imageDirection, y, z, vehicle, vehicleEntry); + break; } } diff --git a/src/openrct2/ride/VehiclePaint.h b/src/openrct2/ride/VehiclePaint.h index d7dbc680c9..71361fd8d4 100644 --- a/src/openrct2/ride/VehiclePaint.h +++ b/src/openrct2/ride/VehiclePaint.h @@ -16,7 +16,8 @@ struct paint_session; struct rct_ride_entry_vehicle; struct rct_vehicle; -struct vehicle_boundbox { +struct vehicle_boundbox +{ int8_t offset_x; int8_t offset_y; int8_t offset_z; @@ -27,19 +28,83 @@ struct vehicle_boundbox { extern const vehicle_boundbox VehicleBoundboxes[16][224]; -void vehicle_paint(paint_session * session, const rct_vehicle *vehicle, int32_t imageDirection); +void vehicle_paint(paint_session* session, const rct_vehicle* vehicle, int32_t imageDirection); -void vehicle_visual_default(paint_session * session, int32_t imageDirection, int32_t z, const rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); -void vehicle_visual_roto_drop(paint_session * session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); -void vehicle_visual_observation_tower(paint_session * session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); -void vehicle_visual_river_rapids(paint_session * session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); -void vehicle_visual_reverser(paint_session * session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); -void vehicle_visual_splash_boats_or_water_coaster(paint_session * session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); -void vehicle_visual_launched_freefall(paint_session * session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); -void vehicle_visual_splash_effect(paint_session * session, int32_t z, const rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); -void vehicle_visual_virginia_reel(paint_session * session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); -void vehicle_visual_submarine(paint_session * session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); -void vehicle_visual_mini_golf_player(paint_session * session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const rct_vehicle *vehicle); -void vehicle_visual_mini_golf_ball(paint_session * session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const rct_vehicle *vehicle); +void vehicle_visual_default( + paint_session* session, + int32_t imageDirection, + int32_t z, + const rct_vehicle* vehicle, + const rct_ride_entry_vehicle* vehicleEntry); +void vehicle_visual_roto_drop( + paint_session* session, + int32_t x, + int32_t imageDirection, + int32_t y, + int32_t z, + const rct_vehicle* vehicle, + const rct_ride_entry_vehicle* vehicleEntry); +void vehicle_visual_observation_tower( + paint_session* session, + int32_t x, + int32_t imageDirection, + int32_t y, + int32_t z, + const rct_vehicle* vehicle, + const rct_ride_entry_vehicle* vehicleEntry); +void vehicle_visual_river_rapids( + paint_session* session, + int32_t x, + int32_t imageDirection, + int32_t y, + int32_t z, + const rct_vehicle* vehicle, + const rct_ride_entry_vehicle* vehicleEntry); +void vehicle_visual_reverser( + paint_session* session, + int32_t x, + int32_t imageDirection, + int32_t y, + int32_t z, + const rct_vehicle* vehicle, + const rct_ride_entry_vehicle* vehicleEntry); +void vehicle_visual_splash_boats_or_water_coaster( + paint_session* session, + int32_t x, + int32_t imageDirection, + int32_t y, + int32_t z, + const rct_vehicle* vehicle, + const rct_ride_entry_vehicle* vehicleEntry); +void vehicle_visual_launched_freefall( + paint_session* session, + int32_t x, + int32_t imageDirection, + int32_t y, + int32_t z, + const rct_vehicle* vehicle, + const rct_ride_entry_vehicle* vehicleEntry); +void vehicle_visual_splash_effect( + paint_session* session, int32_t z, const rct_vehicle* vehicle, const rct_ride_entry_vehicle* vehicleEntry); +void vehicle_visual_virginia_reel( + paint_session* session, + int32_t x, + int32_t imageDirection, + int32_t y, + int32_t z, + const rct_vehicle* vehicle, + const rct_ride_entry_vehicle* vehicleEntry); +void vehicle_visual_submarine( + paint_session* session, + int32_t x, + int32_t imageDirection, + int32_t y, + int32_t z, + const rct_vehicle* vehicle, + const rct_ride_entry_vehicle* vehicleEntry); +void vehicle_visual_mini_golf_player( + paint_session* session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const rct_vehicle* vehicle); +void vehicle_visual_mini_golf_ball( + paint_session* session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const rct_vehicle* vehicle); #endif