From af12421f2df4134315449c475ada25e6430bf361 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sun, 19 Jan 2020 15:06:52 +0100 Subject: [PATCH] Apply fixes --- src/openrct2/peep/Guest.cpp | 2 +- src/openrct2/ride/Ride.cpp | 10 +-- src/openrct2/ride/TrackData.cpp | 34 ++++----- src/openrct2/ride/Vehicle.cpp | 116 +++++++++++++++-------------- src/openrct2/ride/Vehicle.h | 28 +++---- test/tests/S6ImportExportTests.cpp | 2 +- 6 files changed, 100 insertions(+), 92 deletions(-) diff --git a/src/openrct2/peep/Guest.cpp b/src/openrct2/peep/Guest.cpp index 77cd0aeb65..07b4e4cdc5 100644 --- a/src/openrct2/peep/Guest.cpp +++ b/src/openrct2/peep/Guest.cpp @@ -4210,7 +4210,7 @@ void Guest::UpdateRideLeaveVehicle() specialDirection = ((vehicle->sprite_direction + 3) / 8) + 1; specialDirection &= 3; - if (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_GO_KART_6) + if (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_GO_KARTS_RIGHT_LANE) specialDirection = direction_reverse(specialDirection); } } diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index be7f834500..237e0c7f36 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -4484,16 +4484,16 @@ static rct_vehicle* vehicle_create_car( VEHICLE_TRACK_SUBPOSITION subposition = VEHICLE_TRACK_SUBPOSITION_0; if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_CHAIRLIFT) { - subposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_1; + subposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_OUT; } if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_GO_KART) { // Choose which lane Go Kart should start in - subposition = VEHICLE_TRACK_SUBPOSITION_GO_KART_5; + subposition = VEHICLE_TRACK_SUBPOSITION_GO_KARTS_LEFT_LANE; if (vehicleIndex & 1) { - subposition = VEHICLE_TRACK_SUBPOSITION_GO_KART_6; + subposition = VEHICLE_TRACK_SUBPOSITION_GO_KARTS_RIGHT_LANE; } } if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_MINI_GOLF) @@ -4507,12 +4507,12 @@ static rct_vehicle* vehicle_create_car( { if (vehicle->IsHead()) { - subposition = VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_15; + subposition = VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_FRONT_BOGIE; } } if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_5) { - subposition = VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_16; + subposition = VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_REAR_BOGIE; } vehicle->TrackSubposition = subposition; diff --git a/src/openrct2/ride/TrackData.cpp b/src/openrct2/ride/TrackData.cpp index 25efd25ae6..42037f9925 100644 --- a/src/openrct2/ride/TrackData.cpp +++ b/src/openrct2/ride/TrackData.cpp @@ -29699,23 +29699,23 @@ static constexpr const rct_vehicle_info_list *TrackVehicleInfoList_8BAD28[] = { // rct2: 0x008B8F30 constexpr const rct_vehicle_info_list * const * gTrackVehicleInfo[17] = { - TrackVehicleInfoList_8B8F98,// VEHICLE_TRACK_SUBPOSITION_0 - TrackVehicleInfoList_8BBAB8,// VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_1 - TrackVehicleInfoList_8BC588,// VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_2 - TrackVehicleInfoList_8BCBD8,// VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_3 - TrackVehicleInfoList_8BD228,// VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_4 - TrackVehicleInfoList_8BD878,// VEHICLE_TRACK_SUBPOSITION_GO_KART_5 - TrackVehicleInfoList_8BDBB8,// VEHICLE_TRACK_SUBPOSITION_GO_KART_6 - TrackVehicleInfoList_8BDEF8,// VEHICLE_TRACK_SUBPOSITION_GO_KART_7 - TrackVehicleInfoList_8BE238,// VEHICLE_TRACK_SUBPOSITION_GO_KART_8 - TrackVehicleInfoList_9334D0,// VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_START_9 VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_PATH_A_9 - TrackVehicleInfoList_9341B0,// VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_BALL_PATH_A_10 - TrackVehicleInfoList_934E90,// VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_PATH_B_11 - TrackVehicleInfoList_935B70,// VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_BALL_PATH_B_12 - TrackVehicleInfoList_936850,// VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_PATH_C_13 - TrackVehicleInfoList_937530,// VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_PATH_C_14 - TrackVehicleInfoList_8B9F98,// VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_15 - TrackVehicleInfoList_8BAD28,// VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_16 + TrackVehicleInfoList_8B8F98, // VEHICLE_TRACK_SUBPOSITION_0 + TrackVehicleInfoList_8BBAB8, // VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_OUT + TrackVehicleInfoList_8BC588, // VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_BACK + TrackVehicleInfoList_8BCBD8, // VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_BULLWHEEL + TrackVehicleInfoList_8BD228, // VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_START_BULLWHEEL + TrackVehicleInfoList_8BD878, // VEHICLE_TRACK_SUBPOSITION_GO_KARTS_LEFT_LANE + TrackVehicleInfoList_8BDBB8, // VEHICLE_TRACK_SUBPOSITION_GO_KARTS_RIGHT_LANE + TrackVehicleInfoList_8BDEF8, // VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_RIGHT_LANE + TrackVehicleInfoList_8BE238, // VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_LEFT_LANE + TrackVehicleInfoList_9334D0, // VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_START_9, VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_PATH_A_9 + TrackVehicleInfoList_9341B0, // VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_BALL_PATH_A_10 + TrackVehicleInfoList_934E90, // VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_PATH_B_11 + TrackVehicleInfoList_935B70, // VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_BALL_PATH_B_12 + TrackVehicleInfoList_936850, // VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_PATH_C_13 + TrackVehicleInfoList_937530, // VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_PATH_C_14 + TrackVehicleInfoList_8B9F98, // VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_FRONT_BOGIE + TrackVehicleInfoList_8BAD28, // VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_REAR_BOGIE }; /** rct2: 0x00993D1C */ diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 7ce71238b1..23fff783b6 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -775,18 +775,18 @@ static bool vehicle_move_info_valid(int32_t trackSubposition, int32_t typeAndDir case VEHICLE_TRACK_SUBPOSITION_0: size = 1024; break; - case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_1: + case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_OUT: size = 692; break; - case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_2: - case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_3: - case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_4: + case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_BACK: + case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_BULLWHEEL: + case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_START_BULLWHEEL: size = 404; break; - case VEHICLE_TRACK_SUBPOSITION_GO_KART_5: - case VEHICLE_TRACK_SUBPOSITION_GO_KART_6: - case VEHICLE_TRACK_SUBPOSITION_GO_KART_7: - case VEHICLE_TRACK_SUBPOSITION_GO_KART_8: + case VEHICLE_TRACK_SUBPOSITION_GO_KARTS_LEFT_LANE: + case VEHICLE_TRACK_SUBPOSITION_GO_KARTS_RIGHT_LANE: + case VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_RIGHT_LANE: + case VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_LEFT_LANE: size = 208; break; case VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_PATH_A_9: // VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_START_9 @@ -797,8 +797,8 @@ static bool vehicle_move_info_valid(int32_t trackSubposition, int32_t typeAndDir case VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_BALL_PATH_C_14: size = 824; break; - case VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_15: - case VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_16: + case VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_FRONT_BOGIE: + case VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_REAR_BOGIE: size = 868; break; } @@ -813,23 +813,23 @@ static bool vehicle_move_info_valid(int32_t trackSubposition, int32_t typeAndDir return true; } -const rct_vehicle_info* vehicle_get_move_info(int32_t track_status, int32_t typeAndDirection, int32_t offset) +const rct_vehicle_info* vehicle_get_move_info(int32_t trackSubposition, int32_t typeAndDirection, int32_t offset) { - if (!vehicle_move_info_valid(track_status, typeAndDirection, offset)) + if (!vehicle_move_info_valid(trackSubposition, typeAndDirection, offset)) { static constexpr const rct_vehicle_info zero = {}; return &zero; } - return &gTrackVehicleInfo[track_status][typeAndDirection]->info[offset]; + return &gTrackVehicleInfo[trackSubposition][typeAndDirection]->info[offset]; } -uint16_t vehicle_get_move_info_size(int32_t track_status, int32_t typeAndDirection) +uint16_t vehicle_get_move_info_size(int32_t trackSubposition, int32_t typeAndDirection) { - if (!vehicle_move_info_valid(track_status, typeAndDirection, 0)) + if (!vehicle_move_info_valid(trackSubposition, typeAndDirection, 0)) { return 0; } - return gTrackVehicleInfo[track_status][typeAndDirection]->size; + return gTrackVehicleInfo[trackSubposition][typeAndDirection]->size; } rct_vehicle* try_get_vehicle(uint16_t spriteIndex) @@ -7477,7 +7477,7 @@ static bool loc_6DB38B(rct_vehicle* vehicle, TileElement* tileElement) return vangleStart == _vehicleVAngleEndF64E36 && bankStart == _vehicleBankEndF64E37; } -static void loc_6DB481(rct_vehicle* vehicle) +static void VehicleUpdateGoKartAttemptSwitchLanes(rct_vehicle* vehicle) { uint16_t probability = 0x8000; if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_6) @@ -7490,7 +7490,8 @@ static void loc_6DB481(rct_vehicle* vehicle) } if ((scenario_rand() & 0xFFFF) <= probability) { - vehicle->TrackSubposition += VEHICLE_TRACK_SUBPOSITION_GO_KART_7 - VEHICLE_TRACK_SUBPOSITION_GO_KART_5; + // This changes "riding left" to "moving to right lane" and "riding right" to "moving to left lane". + vehicle->TrackSubposition += 2; } } @@ -7719,7 +7720,7 @@ static bool vehicle_update_motion_collision_detection( uint8_t ch = std::max(vehicle->TrackSubposition, collideVehicle->TrackSubposition); if (cl != ch) { - if (cl == VEHICLE_TRACK_SUBPOSITION_GO_KART_5 && ch == VEHICLE_TRACK_SUBPOSITION_GO_KART_6) + if (cl == VEHICLE_TRACK_SUBPOSITION_GO_KARTS_LEFT_LANE && ch == VEHICLE_TRACK_SUBPOSITION_GO_KARTS_RIGHT_LANE) continue; } @@ -7846,7 +7847,7 @@ static void sub_6DBF3E(rct_vehicle* vehicle) rct_ride_entry_vehicle* vehicleEntry = vehicle_get_vehicle_entry(vehicle); vehicle->acceleration = vehicle->acceleration / _vehicleUnkF64E10; - if (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_2) + if (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_BACK) { return; } @@ -7920,7 +7921,9 @@ static void sub_6DBF3E(rct_vehicle* vehicle) } if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_GO_KART) { - cx = vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_GO_KART_6 ? 18 : 20; + // Determine the stop positions for the karts. If in left lane it's further along the track than the right lane. + // Since it's not possible to overtake when the race has ended, this does not check for overtake states (7 and 8). + cx = vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_GO_KARTS_RIGHT_LANE ? 18 : 20; } if (ax > cx) @@ -7979,18 +7982,18 @@ static bool vehicle_update_track_motion_forwards_get_new_track( { default: goto loc_6DB358; - case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_2: - case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_3: - vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_2; + case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_BACK: + case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_BULLWHEEL: + vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_BACK; goto loc_6DB32A; - case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_4: - vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_1; + case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_START_BULLWHEEL: + vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_OUT; goto loc_6DB358; - case VEHICLE_TRACK_SUBPOSITION_GO_KART_7: - vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_GO_KART_6; + case VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_RIGHT_LANE: + vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_GO_KARTS_RIGHT_LANE; goto loc_6DB358; - case VEHICLE_TRACK_SUBPOSITION_GO_KART_8: - vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_GO_KART_5; + case VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_LEFT_LANE: + vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_GO_KARTS_LEFT_LANE; goto loc_6DB358; } @@ -8064,34 +8067,35 @@ loc_6DB41D: { return false; } - if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_GO_KART) && vehicle->TrackSubposition < VEHICLE_TRACK_SUBPOSITION_GO_KART_7) + if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_GO_KART) + && vehicle->TrackSubposition < VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_RIGHT_LANE) { trackType = tileElement->AsTrack()->GetTrackType(); if (trackType == TRACK_ELEM_FLAT) { - loc_6DB481(vehicle); + VehicleUpdateGoKartAttemptSwitchLanes(vehicle); } else if (ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) { if (track_element_is_station(tileElement)) { - loc_6DB481(vehicle); + VehicleUpdateGoKartAttemptSwitchLanes(vehicle); } } } - if (vehicle->TrackSubposition >= VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_1 - && vehicle->TrackSubposition <= VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_4) + if (vehicle->TrackSubposition >= VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_OUT + && vehicle->TrackSubposition <= VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_START_BULLWHEEL) { TileCoordsXYZ curLocation{ CoordsXYZ{ vehicle->track_x, vehicle->track_y, vehicle->track_z } }; if (curLocation == ride->ChairliftBullwheelLocation[1]) { - vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_3; + vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_BULLWHEEL; } else if (curLocation == ride->ChairliftBullwheelLocation[0]) { - vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_4; + vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_START_BULLWHEEL; } } @@ -8274,14 +8278,14 @@ loc_6DAEB9: regs.ebx |= 4; } - if (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_15 + if (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_FRONT_BOGIE && (trackType == TRACK_ELEM_LEFT_REVERSER || trackType == TRACK_ELEM_RIGHT_REVERSER) && vehicle->track_progress >= 30 && vehicle->track_progress <= 66) { regs.ebx |= 8; } - if (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_16 + if (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_REAR_BOGIE && (trackType == TRACK_ELEM_LEFT_REVERSER || trackType == TRACK_ELEM_RIGHT_REVERSER) && vehicle->track_progress == 96) { @@ -8394,18 +8398,18 @@ static bool vehicle_update_track_motion_backwards_get_new_track( switch (vehicle->TrackSubposition) { - case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_3: - vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_1; + case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_BULLWHEEL: + vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_OUT; break; - case VEHICLE_TRACK_SUBPOSITION_GO_KART_7: - vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_GO_KART_5; + case VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_RIGHT_LANE: + vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_GO_KARTS_LEFT_LANE; break; - case VEHICLE_TRACK_SUBPOSITION_GO_KART_8: - vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_GO_KART_6; + case VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_LEFT_LANE: + vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_GO_KARTS_RIGHT_LANE; break; - case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_2: - case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_4: - vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_2; + case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_BACK: + case VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_START_BULLWHEEL: + vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_BACK; nextTileBackwards = false; break; } @@ -8476,18 +8480,18 @@ static bool vehicle_update_track_motion_backwards_get_new_track( vehicle->track_y = y; vehicle->track_z = z; - if (vehicle->TrackSubposition >= VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_1 - && vehicle->TrackSubposition <= VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_4) + if (vehicle->TrackSubposition >= VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_OUT + && vehicle->TrackSubposition <= VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_START_BULLWHEEL) { TileCoordsXYZ curLocation{ CoordsXYZ{ vehicle->track_x, vehicle->track_y, vehicle->track_z } }; if (curLocation == ride->ChairliftBullwheelLocation[1]) { - vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_3; + vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_BULLWHEEL; } else if (curLocation == ride->ChairliftBullwheelLocation[0]) { - vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_4; + vehicle->TrackSubposition = VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_START_BULLWHEEL; } } @@ -9251,7 +9255,7 @@ loc_6DCDE4: loc_6DCE02: vehicle->acceleration /= _vehicleUnkF64E10; - if (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_2) + if (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_BACK) { goto loc_6DCEB2; } @@ -9480,11 +9484,13 @@ static void vehicle_update_track_motion_powered_ride_acceleration( if (trackType == TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE) { - speedModifier = (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_GO_KART_5) ? HALF_SPEED : THREE_QUARTER_SPEED; + speedModifier = (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_GO_KARTS_LEFT_LANE) ? HALF_SPEED + : THREE_QUARTER_SPEED; } else if (trackType == TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE) { - speedModifier = (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_GO_KART_6) ? HALF_SPEED : THREE_QUARTER_SPEED; + speedModifier = (vehicle->TrackSubposition == VEHICLE_TRACK_SUBPOSITION_GO_KARTS_RIGHT_LANE) ? HALF_SPEED + : THREE_QUARTER_SPEED; } uint8_t speed = vehicle->speed; diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index e66525b032..902add3896 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -153,14 +153,16 @@ struct rct_vehicle_sound_params; enum VEHICLE_TRACK_SUBPOSITION : uint8_t { VEHICLE_TRACK_SUBPOSITION_0, - VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_1, - VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_2, - VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_3, - VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_4, - VEHICLE_TRACK_SUBPOSITION_GO_KART_5, - VEHICLE_TRACK_SUBPOSITION_GO_KART_6, - VEHICLE_TRACK_SUBPOSITION_GO_KART_7, - VEHICLE_TRACK_SUBPOSITION_GO_KART_8, + // Going out means "moving away from the start". Viewed from Station 1, this is the left hand side of the track. + VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_OUT, + VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_GOING_BACK, + // End and start bullwheel as viewed from Station 1. + VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_END_BULLWHEEL, + VEHICLE_TRACK_SUBPOSITION_CHAIRLIFT_START_BULLWHEEL, + VEHICLE_TRACK_SUBPOSITION_GO_KARTS_LEFT_LANE, + VEHICLE_TRACK_SUBPOSITION_GO_KARTS_RIGHT_LANE, + VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_RIGHT_LANE, + VEHICLE_TRACK_SUBPOSITION_GO_KARTS_MOVING_TO_LEFT_LANE, VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_START_9 = 9, VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_PATH_A_9 = 9, VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_BALL_PATH_A_10, @@ -168,8 +170,8 @@ enum VEHICLE_TRACK_SUBPOSITION : uint8_t VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_BALL_PATH_B_12, VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_PATH_C_13, VEHICLE_TRACK_SUBPOSITION_MINI_GOLF_BALL_PATH_C_14, - VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_15, - VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_16 + VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_FRONT_BOGIE, + VEHICLE_TRACK_SUBPOSITION_REVERSER_RC_REAR_BOGIE, }; struct rct_vehicle : rct_sprite_common @@ -266,7 +268,7 @@ struct rct_vehicle : rct_sprite_common uint8_t pad_C6[0x2]; uint16_t var_C8; uint16_t var_CA; - SoundId scream_sound_id; // 0xCC + SoundId scream_sound_id; // 0xCC uint8_t TrackSubposition; // 0xCD union { @@ -511,8 +513,8 @@ 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_tail(const rct_vehicle* vehicle); -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); +const rct_vehicle_info* vehicle_get_move_info(int32_t trackSubposition, int32_t typeAndDirection, int32_t offset); +uint16_t vehicle_get_move_info_size(int32_t trackSubposition, int32_t typeAndDirection); bool vehicle_update_dodgems_collision(rct_vehicle* vehicle, int16_t x, int16_t y, uint16_t* spriteId); extern rct_vehicle* gCurrentVehicle; diff --git a/test/tests/S6ImportExportTests.cpp b/test/tests/S6ImportExportTests.cpp index 85212d6965..6829f2695b 100644 --- a/test/tests/S6ImportExportTests.cpp +++ b/test/tests/S6ImportExportTests.cpp @@ -329,7 +329,7 @@ static void CompareSpriteDataVehicle(const rct_vehicle& left, const rct_vehicle& COMPARE_FIELD(var_C8); COMPARE_FIELD(var_CA); COMPARE_FIELD(scream_sound_id); - COMPARE_FIELD(var_CD); + COMPARE_FIELD(TrackSubposition); COMPARE_FIELD(num_laps); COMPARE_FIELD(brake_speed); COMPARE_FIELD(lost_time_out);