diff --git a/OpenRCT2.xcodeproj/project.pbxproj b/OpenRCT2.xcodeproj/project.pbxproj index af15631299..25e3e696e7 100644 --- a/OpenRCT2.xcodeproj/project.pbxproj +++ b/OpenRCT2.xcodeproj/project.pbxproj @@ -114,6 +114,7 @@ 4CFE4E801F90A3F1005243C2 /* Peep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CFE4E7B1F90A3F1005243C2 /* Peep.cpp */; }; 4CFE4E811F90A3F1005243C2 /* PeepData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CFE4E7D1F90A3F1005243C2 /* PeepData.cpp */; }; 4CFE4E821F90A3F1005243C2 /* Staff.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CFE4E7E1F90A3F1005243C2 /* Staff.cpp */; }; + 4CFE4E851F90AF41005243C2 /* Vehicle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CFE4E831F90AF41005243C2 /* Vehicle.cpp */; }; C606CCBE1DB4054000FE4015 /* compat.c in Sources */ = {isa = PBXBuildFile; fileRef = C606CCAB1DB4054000FE4015 /* compat.c */; }; C606CCBF1DB4054000FE4015 /* data.c in Sources */ = {isa = PBXBuildFile; fileRef = C606CCAC1DB4054000FE4015 /* data.c */; }; C606CCC01DB4054000FE4015 /* FunctionCall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C606CCAE1DB4054000FE4015 /* FunctionCall.cpp */; }; @@ -407,7 +408,6 @@ F76C87191EC4E88400FA49E2 /* track_design_save.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84D91EC4E7CD00FA49E2 /* track_design_save.c */; }; F76C871A1EC4E88400FA49E2 /* track_paint.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84DA1EC4E7CD00FA49E2 /* track_paint.c */; }; F76C871C1EC4E88400FA49E2 /* TrackDesignRepository.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C84DC1EC4E7CD00FA49E2 /* TrackDesignRepository.cpp */; }; - F76C87231EC4E88400FA49E2 /* vehicle.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84E41EC4E7CD00FA49E2 /* vehicle.c */; }; F76C87251EC4E88400FA49E2 /* vehicle_data.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84E61EC4E7CD00FA49E2 /* vehicle_data.c */; }; F76C87271EC4E88400FA49E2 /* vehicle_paint.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84E81EC4E7CD00FA49E2 /* vehicle_paint.c */; }; F76C87311EC4E88400FA49E2 /* scenario.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84F41EC4E7CD00FA49E2 /* scenario.c */; }; @@ -718,6 +718,8 @@ 4CFE4E7D1F90A3F1005243C2 /* PeepData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PeepData.cpp; sourceTree = ""; }; 4CFE4E7E1F90A3F1005243C2 /* Staff.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Staff.cpp; sourceTree = ""; }; 4CFE4E7F1F90A3F1005243C2 /* Staff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Staff.h; sourceTree = ""; }; + 4CFE4E831F90AF41005243C2 /* Vehicle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Vehicle.cpp; sourceTree = ""; }; + 4CFE4E841F90AF41005243C2 /* Vehicle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vehicle.h; sourceTree = ""; }; C606CCAB1DB4054000FE4015 /* compat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; lineEnding = 0; path = compat.c; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.c; }; C606CCAC1DB4054000FE4015 /* data.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; lineEnding = 0; path = data.c; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.c; }; C606CCAD1DB4054000FE4015 /* data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = data.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; @@ -1308,8 +1310,6 @@ F76C84DB1EC4E7CD00FA49E2 /* track_paint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = track_paint.h; sourceTree = ""; }; F76C84DC1EC4E7CD00FA49E2 /* TrackDesignRepository.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TrackDesignRepository.cpp; sourceTree = ""; }; F76C84DD1EC4E7CD00FA49E2 /* TrackDesignRepository.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TrackDesignRepository.h; sourceTree = ""; }; - F76C84E41EC4E7CD00FA49E2 /* vehicle.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = vehicle.c; sourceTree = ""; }; - F76C84E51EC4E7CD00FA49E2 /* vehicle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vehicle.h; sourceTree = ""; }; F76C84E61EC4E7CD00FA49E2 /* vehicle_data.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = vehicle_data.c; sourceTree = ""; }; F76C84E71EC4E7CD00FA49E2 /* vehicle_data.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vehicle_data.h; sourceTree = ""; }; F76C84E81EC4E7CD00FA49E2 /* vehicle_paint.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = vehicle_paint.c; sourceTree = ""; }; @@ -2336,8 +2336,8 @@ 4C4C1E991F5832AA00560300 /* TrackDesign.h */, F76C84DC1EC4E7CD00FA49E2 /* TrackDesignRepository.cpp */, F76C84DD1EC4E7CD00FA49E2 /* TrackDesignRepository.h */, - F76C84E41EC4E7CD00FA49E2 /* vehicle.c */, - F76C84E51EC4E7CD00FA49E2 /* vehicle.h */, + 4CFE4E831F90AF41005243C2 /* Vehicle.cpp */, + 4CFE4E841F90AF41005243C2 /* Vehicle.h */, F76C84E61EC4E7CD00FA49E2 /* vehicle_data.c */, F76C84E71EC4E7CD00FA49E2 /* vehicle_data.h */, F76C84E81EC4E7CD00FA49E2 /* vehicle_paint.c */, @@ -3206,6 +3206,7 @@ C666EE7B1F37ACB10061AA04 /* TitleExit.cpp in Sources */, F7D7747F1EC61E5100BE6EBC /* UiContext.macOS.mm in Sources */, F76C887E1EC5324E00FA49E2 /* CursorRepository.cpp in Sources */, + 4CFE4E851F90AF41005243C2 /* Vehicle.cpp in Sources */, 4C93F16A1F8B745700A9330D /* CarRide.cpp in Sources */, C654DF331F69C0430040F43D /* LoadSave.cpp in Sources */, F775F5341EE35A6B001F00E7 /* DummyUiContext.cpp in Sources */, @@ -3476,7 +3477,6 @@ F76C87191EC4E88400FA49E2 /* track_design_save.c in Sources */, F76C871A1EC4E88400FA49E2 /* track_paint.c in Sources */, F76C871C1EC4E88400FA49E2 /* TrackDesignRepository.cpp in Sources */, - F76C87231EC4E88400FA49E2 /* vehicle.c in Sources */, F76C87251EC4E88400FA49E2 /* vehicle_data.c in Sources */, F76C87271EC4E88400FA49E2 /* vehicle_paint.c in Sources */, C666EE391F33E3800061AA04 /* RideConstruction.cpp in Sources */, diff --git a/src/openrct2/game.c b/src/openrct2/game.c index b6d5e68d52..443fff69cd 100644 --- a/src/openrct2/game.c +++ b/src/openrct2/game.c @@ -43,7 +43,7 @@ #include "ride/ride_ratings.h" #include "ride/track.h" #include "ride/TrackDesign.h" -#include "ride/vehicle.h" +#include "ride/Vehicle.h" #include "scenario/scenario.h" #include "title/TitleScreen.h" #include "util/sawyercoding.h" diff --git a/src/openrct2/interface/window.h b/src/openrct2/interface/window.h index d39c636c10..da7f86e58b 100644 --- a/src/openrct2/interface/window.h +++ b/src/openrct2/interface/window.h @@ -23,7 +23,7 @@ #include "../peep/Peep.h" #include "../ride/ride.h" #include "../ride/TrackDesign.h" -#include "../ride/vehicle.h" +#include "../ride/Vehicle.h" #include "../scenario/scenario.h" #include "../world/park.h" #include "colour.h" diff --git a/src/openrct2/rct2.h b/src/openrct2/rct2.h index 6dc248f5b7..e92e58ecf7 100644 --- a/src/openrct2/rct2.h +++ b/src/openrct2/rct2.h @@ -18,7 +18,7 @@ #define _RCT2_H_ #include "ride/ride_ratings.h" -#include "ride/vehicle.h" +#include "ride/Vehicle.h" #include "common.h" #include "rct12.h" diff --git a/src/openrct2/ride/TrackDesign.h b/src/openrct2/ride/TrackDesign.h index 10af1599a2..af0615f20e 100644 --- a/src/openrct2/ride/TrackDesign.h +++ b/src/openrct2/ride/TrackDesign.h @@ -22,7 +22,7 @@ #include "../rct12.h" #include "../rct2.h" #include "../world/map.h" -#include "vehicle.h" +#include "Vehicle.h" #define TRACK_PREVIEW_IMAGE_SIZE (370 * 217) diff --git a/src/openrct2/ride/vehicle.c b/src/openrct2/ride/Vehicle.cpp similarity index 61% rename from src/openrct2/ride/vehicle.c rename to src/openrct2/ride/Vehicle.cpp index dfea7ad486..07a4a68d3e 100644 --- a/src/openrct2/ride/vehicle.c +++ b/src/openrct2/ride/Vehicle.cpp @@ -14,97 +14,101 @@ *****************************************************************************/ #pragma endregion -#include "../audio/audio.h" -#include "../audio/AudioMixer.h" -#include "../config/Config.h" #include "../Context.h" #include "../Editor.h" +#include "../OpenRCT2.h" +#include "../audio/AudioMixer.h" +#include "../audio/audio.h" +#include "../config/Config.h" +#include "../core/Math.hpp" +#include "../core/Util.hpp" #include "../game.h" #include "../interface/viewport.h" #include "../localisation/localisation.h" #include "../management/NewsItem.h" -#include "../OpenRCT2.h" #include "../platform/platform.h" #include "../rct12.h" #include "../rct2/hook.h" #include "../scenario/scenario.h" +#include "../util/util.h" #include "../world/map_animation.h" #include "../world/scenery.h" #include "../world/sprite.h" -#include "../util/util.h" +#include "Vehicle.h" #include "cable_lift.h" #include "ride.h" #include "ride_data.h" #include "station.h" #include "track.h" -#include "track.h" #include "track_data.h" -#include "vehicle.h" #include "vehicle_data.h" -static void vehicle_update(rct_vehicle *vehicle); +static void vehicle_update(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_is_boat_on_water(rct_vehicle *vehicle, int x, int y); -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 sint32 vehicle_update_motion_dodgems(rct_vehicle* vehicle); -static void sub_6D63D4(rct_vehicle *vehicle); -static bool vehicle_update_motion_collision_detection(rct_vehicle *vehicle, sint16 x, sint16 y, sint16 z, uint16 *otherVehicleIndex); -static void vehicle_update_sound(rct_vehicle *vehicle); -static sint32 vehicle_update_scream_sound(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_is_boat_on_water(rct_vehicle * vehicle, int x, int y); +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 sint32 vehicle_update_motion_dodgems(rct_vehicle * vehicle); +static void sub_6D63D4(rct_vehicle * vehicle); +static bool vehicle_update_motion_collision_detection(rct_vehicle * vehicle, sint16 x, sint16 y, sint16 z, + uint16 * otherVehicleIndex); +static void vehicle_update_sound(rct_vehicle * vehicle); +static sint32 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 -rct_vehicle *gCurrentVehicle; +rct_vehicle * gCurrentVehicle; -static uint8 _vehicleBreakdown; -uint8 _vehicleStationIndex; -uint32 _vehicleMotionTrackFlags; -sint32 _vehicleVelocityF64E08; -sint32 _vehicleVelocityF64E0C; -sint32 _vehicleUnkF64E10; -uint8 _vehicleVAngleEndF64E36; -uint8 _vehicleBankEndF64E37; -uint8 _vehicleF64E2C; +static uint8 _vehicleBreakdown; +uint8 _vehicleStationIndex; +uint32 _vehicleMotionTrackFlags; +sint32 _vehicleVelocityF64E08; +sint32 _vehicleVelocityF64E0C; +sint32 _vehicleUnkF64E10; +uint8 _vehicleVAngleEndF64E36; +uint8 _vehicleBankEndF64E37; +uint8 _vehicleF64E2C; rct_vehicle * _vehicleFrontVehicle; LocationXYZ16 unk_F64E20; +// clang-format off static const uint8 byte_9A3A14[] = { SOUND_SCREAM_8, SOUND_SCREAM_1 }; static const uint8 byte_9A3A16[] = { SOUND_SCREAM_1, SOUND_SCREAM_6 }; static const uint8 byte_9A3A18[] = { SOUND_SCREAM_3, SOUND_SCREAM_1, SOUND_SCREAM_5, SOUND_SCREAM_6, SOUND_SCREAM_7, SOUND_SCREAM_2, SOUND_SCREAM_4 }; -static const uint8 _soundParams[SOUND_MAXID][2] = { +static const uint8 _soundParams[SOUND_MAXID][2] = +{ { 1, 0 }, // SOUND_LIFT_1 { 1, 0 }, // SOUND_TRACK_FRICTION_1 { 1, 0 }, // SOUND_LIFT_2 @@ -170,7 +174,8 @@ static const uint8 _soundParams[SOUND_MAXID][2] = { { 0, 0 } // SOUND_62 }; -static const uint8 SpaceRingsTimeToSpriteMap[] = { +static const uint8 SpaceRingsTimeToSpriteMap[] = +{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, @@ -303,18 +308,142 @@ static const uint8 SpaceRingsTimeToSpriteMap[] = { 255 }; -static const sint8 SwingingTimeToSpriteMap_0[] = { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, 0, 0, -128 }; -static const sint8 SwingingTimeToSpriteMap_1[] = { 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, -1, -1, -1, -1, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1, -1, -1, -1, 0, -128 }; -static const sint8 SwingingTimeToSpriteMap_2[] = { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, -1, -1, -1, -2, -2, -2, -3, -3, -3, -3, -4, -4, -4, -4, -4, -5, -5, -5, -5, -5, -5, -6, -6, -6, -6, -6, -6, -6, -6, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -6, -6, -6, -6, -6, -6, -6, -6, -5, -5, -5, -5, -5, -5, -4, -4, -4, -4, -4, -3, -3, -3, -3, -2, -2, -2, -1, -1, -1, 0, -128 }; -static const sint8 SwingingTimeToSpriteMap_3[] = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, -1, -1, -2, -2, -3, -3, -4, -4, -4, -5, -5, -5, -5, -6, -6, -6, -6, -6, -7, -7, -7, -7, -7, -7, -8, -8, -8, -8, -8, -8, -8, -8, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -8, -8, -8, -8, -8, -8, -8, -8, -7, -7, -7, -7, -7, -7, -6, -6, -6, -6, -6, -5, -5, -5, -5, -4, -4, -4, -3, -3, -2, -2, -1, -1, 0, -128 }; -static const sint8 SwingingTimeToSpriteMap_4[] = { 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3, -4, -4, -4, -4, -4, -5, -5, -5, -5, -5, -5, -5, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, 0, 0, -128 }; -static const sint8 SwingingTimeToSpriteMap_5[] = { 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, -1, -1, -1, -1, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, -4, -4, -5, -5, -5, -5, -6, -6, -6, -6, -7, -7, -7, -7, -8, -8, -8, -8, -9, -9, -9, -9, -10, -10, -10, -10, -11, -11, -11, -11, -12, -12, -12, -12, -13, -13, -13, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -8, -7, -7, -7, -7, -6, -6, -6, -6, -5, -5, -5, -5, -4, -4, -4, -4, -3, -3, -3, -3, -2, -2, -2, -2, -1, -1, -1, -1, 0, 0, -128 }; -static const sint8 SwingingTimeToSpriteMap_6[] = { 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 23, 23, 23, 23, 22, 22, 22, 21, 21, 21, 20, 20, 20, 19, 19, 19, 18, 18, 18, 17, 17, 17, 16, 16, 16, 15, 15, 15, 14, 14, 14, 13, 13, 13, 12, 12, 12, 11, 11, 11, 10, 10, 10, 9, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, -1, -1, -1, -2, -2, -2, -3, -3, -3, -4, -4, -4, -5, -5, -5, -6, -6, -6, -7, -7, -7, -8, -8, -8, -9, -9, -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, -13, -13, -13, -14, -14, -14, -15, -15, -15, -16, -16, -16, -17, -17, -17, -18, -18, -18, -19, -19, -19, -20, -20, -20, -21, -21, -21, -22, -22, -22, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -24, -24, -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -22, -22, -22, -21, -21, -21, -20, -20, -20, -19, -19, -19, -18, -18, -18, -17, -17, -17, -16, -16, -16, -15, -15, -15, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -9, -9, -9, -8, -8, -8, -7, -7, -7, -6, -6, -6, -5, -5, -5, -4, -4, -4, -3, -3, -3, -2, -2, -2, -1, -1, -1, 0, 0, -128 }; -static const sint8 SwingingTimeToSpriteMap_7[] = { 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, 35, 36, 36, 36, -35, -35, -35, -34, -34, -34, -33, -33, -33, -32, -32, -32, -31, -31, -31, -30, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, -27, -26, -26, -26, -25, -25, -25, -24, -24, -24, -23, -23, -23, -22, -22, -22, -21, -21, -21, -20, -20, -20, -19, -19, -19, -18, -18, -18, -17, -17, -17, -16, -16, -16, -15, -15, -15, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -9, -9, -9, -8, -8, -8, -7, -7, -7, -6, -6, -6, -5, -5, -5, -4, -4, -4, -3, -3, -3, -2, -2, -2, -1, -1, -1, 0, 0, -128 }; -static const sint8 SwingingTimeToSpriteMap_8[] = { 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 27, 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 0, 0, -128 }; -static const sint8 SwingingTimeToSpriteMap_9[] = { 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 27, 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 0, 0, -128 }; -static const sint8 SwingingTimeToSpriteMap_10[] = { 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 31, 31, 31, 31, 30, 30, 30, 30, 29, 29, 29, 29, 28, 28, 28, 28, 27, 27, 27, 27, 26, 26, 26, 26, 25, 25, 25, 25, 24, 24, 24, 24, 23, 23, 23, 23, 22, 22, 22, 22, 21, 21, 21, 21, 20, 20, 20, 20, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 0, 0, -128 }; -static const sint8 SwingingTimeToSpriteMap_11[] = { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 0, -128 }; +static const sint8 SwingingTimeToSpriteMap_0[] = +{ + 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + -1, -1, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -2, + -2, -2, -1, -1, -1, -1, -1, -1, -1, 0, 0, -128 +}; +static const sint8 SwingingTimeToSpriteMap_1[] = +{ + 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 0, 0, 0, -1, -1, -1, -1, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1, -1, -1, -1, 0, -128 +}; +static const sint8 SwingingTimeToSpriteMap_2[] = +{ + 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 2, + 2, 2, 1, 1, 1, 0, 0, 0, -1, -1, -1, -2, -2, -2, -3, -3, -3, -3, -4, -4, -4, -4, -4, -5, -5, -5, -5, -5, + -5, -6, -6, -6, -6, -6, -6, -6, -6, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -6, -6, + -6, -6, -6, -6, -6, -6, -5, -5, -5, -5, -5, -5, -4, -4, -4, -4, -4, -3, -3, -3, -3, -2, -2, -2, -1, -1, + -1, 0, -128 +}; +static const sint8 SwingingTimeToSpriteMap_3[] = +{ + 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 5, 5, 5, 5, 4, + 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, -1, -1, -2, -2, -3, -3, -4, -4, -4, -5, -5, -5, -5, -6, -6, -6, -6, -6, + -7, -7, -7, -7, -7, -7, -8, -8, -8, -8, -8, -8, -8, -8, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -8, -8, -8, -8, -8, -8, -8, -8, -7, -7, -7, -7, -7, -7, -6, -6, -6, -6, -6, -5, -5, -5, -5, -4, -4, + -4, -3, -3, -2, -2, -1, -1, 0, -128 +}; +static const sint8 SwingingTimeToSpriteMap_4[] = +{ + 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 1, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3, -4, -4, -4, -4, -4, -5, + -5, -5, -5, -5, -5, -5, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1, + -1, -1, -1, -1, 0, 0, -128 +}; +static const sint8 SwingingTimeToSpriteMap_5[] = +{ + 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, + 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, + 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, + 1, 1, 1, 1, 0, 0, 0, 0, -1, -1, -1, -1, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, -4, -4, -5, -5, -5, -5, + -6, -6, -6, -6, -7, -7, -7, -7, -8, -8, -8, -8, -9, -9, -9, -9, -10, -10, -10, -10, -11, -11, -11, -11, + -12, -12, -12, -12, -13, -13, -13, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -11, + -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -8, -7, -7, -7, -7, -6, -6, -6, -6, -5, + -5, -5, -5, -4, -4, -4, -4, -3, -3, -3, -3, -2, -2, -2, -2, -1, -1, -1, -1, 0, 0, -128 +}; +static const sint8 SwingingTimeToSpriteMap_6[] = +{ + 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, + 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, + 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 23, + 23, 23, 23, 22, 22, 22, 21, 21, 21, 20, 20, 20, 19, 19, 19, 18, 18, 18, 17, 17, 17, 16, 16, 16, 15, 15, + 15, 14, 14, 14, 13, 13, 13, 12, 12, 12, 11, 11, 11, 10, 10, 10, 9, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 5, + 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, -1, -1, -1, -2, -2, -2, -3, -3, -3, -4, -4, -4, -5, + -5, -5, -6, -6, -6, -7, -7, -7, -8, -8, -8, -9, -9, -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, + -13, -13, -13, -14, -14, -14, -15, -15, -15, -16, -16, -16, -17, -17, -17, -18, -18, -18, -19, -19, -19, + -20, -20, -20, -21, -21, -21, -22, -22, -22, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -22, -22, -22, -21, -21, -21, -20, + -20, -20, -19, -19, -19, -18, -18, -18, -17, -17, -17, -16, -16, -16, -15, -15, -15, -14, -14, -14, -13, + -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -9, -9, -9, -8, -8, -8, -7, -7, -7, -6, -6, -6, + -5, -5, -5, -4, -4, -4, -3, -3, -3, -2, -2, -2, -1, -1, -1, 0, 0, -128 +}; +static const sint8 SwingingTimeToSpriteMap_7[] = +{ + 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, + 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, + 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, + 29, 29, 29, 30, 30, 30, 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, 35, 36, 36, 36, -35, + -35, -35, -34, -34, -34, -33, -33, -33, -32, -32, -32, -31, -31, -31, -30, -30, -30, -29, -29, -29, -28, + -28, -28, -27, -27, -27, -26, -26, -26, -25, -25, -25, -24, -24, -24, -23, -23, -23, -22, -22, -22, -21, + -21, -21, -20, -20, -20, -19, -19, -19, -18, -18, -18, -17, -17, -17, -16, -16, -16, -15, -15, -15, -14, + -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -9, -9, -9, -8, -8, -8, -7, -7, + -7, -6, -6, -6, -5, -5, -5, -4, -4, -4, -3, -3, -3, -2, -2, -2, -1, -1, -1, 0, 0, -128 +}; +static const sint8 SwingingTimeToSpriteMap_8[] = +{ + 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 1, 0, 0, 0, 0, 0, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 27, + 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 31, + 31, 31, 31, 31, 0, 0, -128 +}; +static const sint8 SwingingTimeToSpriteMap_9[] = +{ + 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 1, 0, 0, 0, 0, 0, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 27, + 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 31, + 31, 31, 31, 31, 0, 0, -128 +}; +static const sint8 SwingingTimeToSpriteMap_10[] = +{ + 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, + 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, + 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, + 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 31, 31, 31, 31, 30, + 30, 30, 30, 29, 29, 29, 29, 28, 28, 28, 28, 27, 27, 27, 27, 26, 26, 26, 26, 25, 25, 25, 25, 24, 24, 24, + 24, 23, 23, 23, 23, 22, 22, 22, 22, 21, 21, 21, 21, 20, 20, 20, 20, 19, 19, 19, 19, 18, 18, 18, 18, 18, + 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 19, 19, 19, + 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, + 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 0, 0, -128 +}; +static const sint8 SwingingTimeToSpriteMap_11[] = +{ + 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, + 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, + 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, + 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, + 31, 0, -128 +}; /** rct2: 0x0099F9D0 */ static const sint8 * SwingingTimeToSpriteMaps[] = { @@ -332,14 +461,16 @@ static const sint8 * SwingingTimeToSpriteMaps[] = { SwingingTimeToSpriteMap_11, }; -typedef struct { +typedef struct +{ sint16 x; sint16 y; uint32 distance; } unk_9a36c4; /** rct2: 0x009A36C4 */ -static const unk_9a36c4 Unk9A36C4[] = { +static const unk_9a36c4 Unk9A36C4[] = +{ {-1, 0, 8716}, {-1, 0, 8716}, {-1, 0, 8716}, @@ -375,7 +506,8 @@ static const unk_9a36c4 Unk9A36C4[] = { }; /** rct2: 0x009A37C4 */ -static const LocationXY16 Unk9A37C4[] = { +static const LocationXY16 Unk9A37C4[] = +{ { 0, 0}, { 0, +1}, {+1, 0}, @@ -388,7 +520,8 @@ static const LocationXY16 Unk9A37C4[] = { }; /** rct2: 0x009A37E4 */ -static const sint32 Unk9A37E4[] = { +static const sint32 Unk9A37E4[] = +{ 2147483647, 2106585154, 1985590284, @@ -452,7 +585,8 @@ static const sint32 Unk9A37E4[] = { }; /** rct2: 0x009A38D4 */ -static const sint32 Unk9A38D4[] = { +static const sint32 Unk9A38D4[] = +{ 0, 417115092, 817995863, @@ -516,7 +650,8 @@ static const sint32 Unk9A38D4[] = { }; /** rct2: 0x009A39C4 */ -static const sint32 Unk9A39C4[] = { +static const sint32 Unk9A39C4[] = +{ 2147483647, 2096579710, 1946281152, @@ -539,75 +674,32 @@ static const sint32 Unk9A39C4[] = { 1946281152, }; -static const LocationXY16 AvoidCollisionMoveOffset[] = { +static const LocationXY16 AvoidCollisionMoveOffset[] = +{ { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 }, }; -static bool vehicle_move_info_valid(sint32 cd, sint32 typeAndDirection, sint32 offset) -{ - if (cd >= countof(gTrackVehicleInfo)) { - return false; - } - sint32 size = 0; - switch (cd) { - case 0: size = 1024; break; - case 1: size = 692; break; - case 2: size = 404; break; - case 3: size = 404; break; - case 4: size = 404; break; - case 5: size = 208; break; - case 6: size = 208; break; - case 7: size = 208; break; - case 8: size = 208; break; - case 9: size = 824; break; - case 10: size = 824; break; - case 11: size = 824; break; - case 12: size = 824; break; - case 13: size = 824; break; - case 14: size = 824; break; - case 15: size = 868; break; - case 16: size = 868; break; - } - if (typeAndDirection >= size) { - return false; - } - if (offset >= gTrackVehicleInfo[cd][typeAndDirection]->size) { - return false; - } - return true; -} -const rct_vehicle_info *vehicle_get_move_info(sint32 cd, sint32 typeAndDirection, sint32 offset) +static const uint8 DoorOpenSoundIds[] = { - if (!vehicle_move_info_valid(cd, typeAndDirection, offset)) { - static const rct_vehicle_info zero = { 0 }; - return &zero; - } - return &gTrackVehicleInfo[cd][typeAndDirection]->info[offset]; -} - -uint16 vehicle_get_move_info_size(sint32 cd, sint32 typeAndDirection) -{ - if (!vehicle_move_info_valid(cd, typeAndDirection, 0)) { - return 0; - } - return gTrackVehicleInfo[cd][typeAndDirection]->size; -} - -static const uint8 DoorOpenSoundIds[] = { SOUND_DOOR_OPEN, SOUND_62 }; -static const uint8 DoorCloseSoundIds[] = { +static const uint8 DoorCloseSoundIds[] = +{ SOUND_DOOR_CLOSE, SOUND_62 }; -static const struct { sint8 x, y, z; } SteamParticleOffsets[] = { +static const struct +{ + sint8 x, y, z; +} SteamParticleOffsets[] = +{ { -11, 0, 22 }, { -10, 4, 22 }, { -8, 8, 22 }, @@ -658,73 +750,162 @@ static const struct { sint8 x, y, z; } SteamParticleOffsets[] = { { -8, -4, 17 } }; +// clang-format on + +static bool vehicle_move_info_valid(sint32 cd, sint32 typeAndDirection, sint32 offset) +{ + if (cd >= static_cast(Util::CountOf(gTrackVehicleInfo))) + { + return false; + } + sint32 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; + } + if (typeAndDirection >= size) + { + return false; + } + if (offset >= gTrackVehicleInfo[cd][typeAndDirection]->size) + { + return false; + } + return true; +} + +const rct_vehicle_info * vehicle_get_move_info(sint32 cd, sint32 typeAndDirection, sint32 offset) +{ + if (!vehicle_move_info_valid(cd, typeAndDirection, offset)) + { + static const rct_vehicle_info zero = { 0 }; + return &zero; + } + return &gTrackVehicleInfo[cd][typeAndDirection]->info[offset]; +} + +uint16 vehicle_get_move_info_size(sint32 cd, sint32 typeAndDirection) +{ + if (!vehicle_move_info_valid(cd, typeAndDirection, 0)) + { + return 0; + } + return gTrackVehicleInfo[cd][typeAndDirection]->size; +} + rct_vehicle * try_get_vehicle(uint16 spriteIndex) { rct_sprite * sprite = try_get_sprite(spriteIndex); - if (sprite == NULL) return NULL; - if (sprite->unknown.sprite_identifier != SPRITE_IDENTIFIER_VEHICLE) return NULL; + if (sprite == NULL) + return NULL; + if (sprite->unknown.sprite_identifier != SPRITE_IDENTIFIER_VEHICLE) + return NULL; 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); } /** * * 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) && (!(gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) || gS6Info.editor_step == EDITOR_STEP_ROLLERCOASTER_DESIGNER)) { - if (vehicle->sound1_id != RCT12_SOUND_ID_NULL || vehicle->sound2_id != RCT12_SOUND_ID_NULL) { - if (vehicle->sprite_left != LOCATION_NULL) { + if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && + (!(gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) || gS6Info.editor_step == EDITOR_STEP_ROLLERCOASTER_DESIGNER)) + { + if (vehicle->sound1_id != RCT12_SOUND_ID_NULL || vehicle->sound2_id != RCT12_SOUND_ID_NULL) + { + if (vehicle->sprite_left != LOCATION_NULL) + { sint16 x = g_music_tracking_viewport->view_x; sint16 y = g_music_tracking_viewport->view_y; sint16 w = g_music_tracking_viewport->view_width / 4; sint16 h = g_music_tracking_viewport->view_height / 4; - if (!gWindowAudioExclusive->classification) { + if (!gWindowAudioExclusive->classification) + { x -= w; y -= h; } - if (x < vehicle->sprite_right && y < vehicle->sprite_bottom) { + if (x < vehicle->sprite_right && y < vehicle->sprite_bottom) + { sint16 w2 = g_music_tracking_viewport->view_width + x; sint16 h2 = g_music_tracking_viewport->view_height + y; - if (!gWindowAudioExclusive->classification) { + if (!gWindowAudioExclusive->classification) + { w2 += w + w; h2 += h + h; } - if (w2 >= vehicle->sprite_left && h2 >= vehicle->sprite_top) { - uint16 v9 = sub_6BC2F3(vehicle); - rct_vehicle_sound_params* i; - for (i = &gVehicleSoundParamsList[0]; i < gVehicleSoundParamsListEnd && v9 <= i->var_A; i++); - if (i < &gVehicleSoundParamsList[countof(gVehicleSoundParamsList)]) { - if (gVehicleSoundParamsListEnd < &gVehicleSoundParamsList[countof(gVehicleSoundParamsList)]) { + if (w2 >= vehicle->sprite_left && h2 >= vehicle->sprite_top) + { + uint16 v9 = sub_6BC2F3(vehicle); + rct_vehicle_sound_params * i; + for (i = &gVehicleSoundParamsList[0]; i < gVehicleSoundParamsListEnd && v9 <= i->var_A; i++) + ; + if (i < &gVehicleSoundParamsList[Util::CountOf(gVehicleSoundParamsList)]) + { + if (gVehicleSoundParamsListEnd < &gVehicleSoundParamsList[Util::CountOf(gVehicleSoundParamsList)]) + { gVehicleSoundParamsListEnd++; } - rct_vehicle_sound_params* j = gVehicleSoundParamsListEnd - 1; - while (j > i) { + rct_vehicle_sound_params * j = gVehicleSoundParamsListEnd - 1; + while (j > i) + { j--; *(j + 1) = *j; } i->var_A = v9; - sint32 pan_x = (vehicle->sprite_left / 2) + (vehicle->sprite_right / 2) - g_music_tracking_viewport->view_x; + sint32 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; uint16 screenwidth = context_get_width(); - if (screenwidth < 64) { + if (screenwidth < 64) + { screenwidth = 64; } i->pan_x = ((((pan_x * 65536) / screenwidth) - 0x8000) >> 4); - sint32 pan_y = (vehicle->sprite_top / 2) + (vehicle->sprite_bottom / 2) - g_music_tracking_viewport->view_y; + sint32 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; uint16 screenheight = context_get_height(); - if (screenheight < 64) { + if (screenheight < 64) + { screenheight = 64; } i->pan_y = ((((pan_y * 65536) / screenheight) - 0x8000) >> 4); @@ -751,11 +932,13 @@ static void vehicle_update_sound_params(rct_vehicle* vehicle) v += 11025; v += 16 * vehicle->var_BF; i->frequency = (uint16)v; - i->id = vehicle->sprite_index; - i->volume = 0; - if (vehicle->x != LOCATION_NULL) { - rct_map_element* map_element = map_get_surface_element_at(vehicle->x >> 5, vehicle->y >> 5); - if (map_element != NULL && map_element->base_height * 8 > vehicle->z) { // vehicle underground + i->id = vehicle->sprite_index; + i->volume = 0; + if (vehicle->x != LOCATION_NULL) + { + rct_map_element * map_element = map_get_surface_element_at(vehicle->x >> 5, vehicle->y >> 5); + if (map_element != NULL && map_element->base_height * 8 > vehicle->z) + { // vehicle underground i->volume = 0x30; } } @@ -771,24 +954,29 @@ static void vehicle_update_sound_params(rct_vehicle* vehicle) * * rct2: 0x006BC2F3 */ -sint32 sub_6BC2F3(rct_vehicle* vehicle) +sint32 sub_6BC2F3(rct_vehicle * vehicle) { - sint32 result = 0; - rct_vehicle* vehicle_temp = vehicle; - do { + sint32 result = 0; + rct_vehicle * vehicle_temp = vehicle; + do + { result += vehicle_temp->friction; - } while (vehicle_temp->next_vehicle_on_train != SPRITE_INDEX_NULL && (vehicle_temp = GET_VEHICLE(vehicle_temp->next_vehicle_on_train)) != NULL); + } while (vehicle_temp->next_vehicle_on_train != SPRITE_INDEX_NULL && + (vehicle_temp = GET_VEHICLE(vehicle_temp->next_vehicle_on_train)) != NULL); sint32 v4 = vehicle->velocity; - if (v4 < 0) { + if (v4 < 0) + { v4 = -v4; } result += ((uint16)v4) >> 13; - rct_vehicle_sound* vehicle_sound = &gVehicleSoundList[0]; + rct_vehicle_sound * vehicle_sound = &gVehicleSoundList[0]; - while (vehicle_sound->id != vehicle->sprite_index) { + while (vehicle_sound->id != vehicle->sprite_index) + { vehicle_sound++; - if (vehicle_sound >= &gVehicleSoundList[countof(gVehicleSoundList)]) { + if (vehicle_sound >= &gVehicleSoundList[Util::CountOf(gVehicleSoundList)]) + { return result; } } @@ -804,196 +992,250 @@ void vehicle_sounds_update() if (gAudioCurrentDevice != -1 && !gGameSoundsOff && gConfigSound.sound_enabled && !gOpenRCT2Headless) { g_music_tracking_viewport = NULL; - rct_viewport * viewport = NULL; - rct_window * window = gWindowNextSlot; + rct_viewport * viewport = NULL; + rct_window * window = gWindowNextSlot; while (1) { window--; - if (window < g_window_list) { + if (window < g_window_list) + { break; } viewport = window->viewport; - if (viewport && viewport->flags & VIEWPORT_FLAG_SOUND_ON) { + if (viewport && viewport->flags & VIEWPORT_FLAG_SOUND_ON) + { break; } } g_music_tracking_viewport = viewport; - if (viewport != NULL) { - if (window) { + if (viewport != NULL) + { + if (window) + { gWindowAudioExclusive = window; - gVolumeAdjustZoom = 0; - if (viewport->zoom) { + gVolumeAdjustZoom = 0; + if (viewport->zoom) + { gVolumeAdjustZoom = 35; - if (viewport->zoom != 1) { + if (viewport->zoom != 1) + { gVolumeAdjustZoom = 70; } } } gVehicleSoundParamsListEnd = &gVehicleSoundParamsList[0]; - for (uint16 i = gSpriteListHead[SPRITE_LIST_TRAIN]; i != SPRITE_INDEX_NULL; i = get_sprite(i)->vehicle.next) { + for (uint16 i = gSpriteListHead[SPRITE_LIST_TRAIN]; i != SPRITE_INDEX_NULL; i = get_sprite(i)->vehicle.next) + { vehicle_update_sound_params(&get_sprite(i)->vehicle); } - for(sint32 i = 0; i < countof(gVehicleSoundList); i++){ - rct_vehicle_sound* vehicle_sound = &gVehicleSoundList[i]; - if (vehicle_sound->id != SOUND_ID_NULL) { - 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) { + for (uint32 i = 0; i < Util::CountOf(gVehicleSoundList); i++) + { + rct_vehicle_sound * vehicle_sound = &gVehicleSoundList[i]; + if (vehicle_sound->id != SOUND_ID_NULL) + { + 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) + { goto label26; } } - if (vehicle_sound->sound1_id != SOUND_ID_NULL) { + if (vehicle_sound->sound1_id != SOUND_ID_NULL) + { Mixer_Stop_Channel(vehicle_sound->sound1_channel); } - if (vehicle_sound->sound2_id != SOUND_ID_NULL) { + if (vehicle_sound->sound2_id != SOUND_ID_NULL) + { Mixer_Stop_Channel(vehicle_sound->sound2_channel); } vehicle_sound->id = SOUND_ID_NULL; } - label26: - ; + label26:; } - for (rct_vehicle_sound_params* vehicle_sound_params = &gVehicleSoundParamsList[0]; ; vehicle_sound_params++) { + for (rct_vehicle_sound_params * vehicle_sound_params = &gVehicleSoundParamsList[0];; vehicle_sound_params++) + { label28: - if (vehicle_sound_params >= gVehicleSoundParamsListEnd) { + if (vehicle_sound_params >= gVehicleSoundParamsListEnd) + { return; } - uint8 vol1 = 0xFF; - uint8 vol2 = 0xFF; + uint8 vol1 = 0xFF; + uint8 vol2 = 0xFF; sint16 pan_y = vehicle_sound_params->pan_y; - if (pan_y < 0) { + if (pan_y < 0) + { pan_y = -pan_y; } - if (pan_y > 0xFFF) { + if (pan_y > 0xFFF) + { pan_y = 0xFFF; } pan_y -= 0x800; - if (pan_y > 0) { + if (pan_y > 0) + { pan_y -= 0x400; pan_y = -pan_y; pan_y = pan_y / 4; - vol1 = LOBYTE(pan_y); - if ((sint8)HIBYTE(pan_y) != 0) { + vol1 = LOBYTE(pan_y); + if ((sint8)HIBYTE(pan_y) != 0) + { vol1 = 0xFF; - if ((sint8)HIBYTE(pan_y) < 0) { + if ((sint8)HIBYTE(pan_y) < 0) + { vol1 = 0; } } } sint16 pan_x = vehicle_sound_params->pan_x; - if (pan_x < 0) { + if (pan_x < 0) + { pan_x = -pan_x; } - if (pan_x > 0xFFF) { + if (pan_x > 0xFFF) + { pan_x = 0xFFF; } pan_x -= 0x800; - if (pan_x > 0) { + if (pan_x > 0) + { pan_x -= 0x400; pan_x = -pan_x; pan_x = pan_x / 4; - vol2 = LOBYTE(pan_x); - if ((sint8)HIBYTE(pan_x) != 0) { + vol2 = LOBYTE(pan_x); + if ((sint8)HIBYTE(pan_x) != 0) + { vol2 = 0xFF; - if ((sint8)HIBYTE(pan_x) < 0) { + if ((sint8)HIBYTE(pan_x) < 0) + { vol2 = 0; } } } - if (vol1 >= vol2) { + if (vol1 >= vol2) + { vol1 = vol2; } - if (vol1 < gVolumeAdjustZoom) { + if (vol1 < gVolumeAdjustZoom) + { vol1 = 0; - } else { + } + else + { vol1 = vol1 - gVolumeAdjustZoom; } - rct_vehicle_sound* vehicle_sound = &gVehicleSoundList[0]; - while (vehicle_sound_params->id != vehicle_sound->id) { + rct_vehicle_sound * vehicle_sound = &gVehicleSoundList[0]; + while (vehicle_sound_params->id != vehicle_sound->id) + { vehicle_sound++; - if (vehicle_sound >= &gVehicleSoundList[countof(gVehicleSoundList)]) { + if (vehicle_sound >= &gVehicleSoundList[Util::CountOf(gVehicleSoundList)]) + { vehicle_sound = &gVehicleSoundList[0]; - sint32 i = 0; - while (vehicle_sound->id != SOUND_ID_NULL) { + uint32 i = 0; + while (vehicle_sound->id != SOUND_ID_NULL) + { vehicle_sound++; i++; - if (i >= countof(gVehicleSoundList)) { - vehicle_sound_params = (rct_vehicle_sound_params*)((uintptr_t)vehicle_sound_params + 10); + if (i >= Util::CountOf(gVehicleSoundList)) + { + vehicle_sound_params = (rct_vehicle_sound_params *)((uintptr_t)vehicle_sound_params + 10); goto label28; } } - vehicle_sound->id = vehicle_sound_params->id; + vehicle_sound->id = vehicle_sound_params->id; vehicle_sound->sound1_id = SOUND_ID_NULL; vehicle_sound->sound2_id = SOUND_ID_NULL; - vehicle_sound->volume = 0x30; + vehicle_sound->volume = 0x30; break; } } sint32 tempvolume = vehicle_sound->volume; - if (tempvolume != vehicle_sound_params->volume) { - if (tempvolume < vehicle_sound_params->volume) { + if (tempvolume != vehicle_sound_params->volume) + { + if (tempvolume < vehicle_sound_params->volume) + { tempvolume += 4; - } else { + } + else + { tempvolume -= 4; } } vehicle_sound->volume = tempvolume; - if (vol1 < tempvolume) { + if (vol1 < tempvolume) + { vol1 = 0; - } else { + } + else + { vol1 = vol1 - tempvolume; } // do sound1 stuff, track noise - rct_sprite* sprite = get_sprite(vehicle_sound_params->id); - sint32 volume = sprite->vehicle.sound1_volume; + rct_sprite * sprite = get_sprite(vehicle_sound_params->id); + sint32 volume = sprite->vehicle.sound1_volume; volume *= vol1; volume = volume / 8; volume -= 0x1FFF; - if (volume < -10000) { + if (volume < -10000) + { volume = -10000; } - if (sprite->vehicle.sound1_id == RCT12_SOUND_ID_NULL) { - if (vehicle_sound->sound1_id != SOUND_ID_NULL) { + if (sprite->vehicle.sound1_id == RCT12_SOUND_ID_NULL) + { + if (vehicle_sound->sound1_id != SOUND_ID_NULL) + { vehicle_sound->sound1_id = SOUND_ID_NULL; Mixer_Stop_Channel(vehicle_sound->sound1_channel); } - } else { - if (vehicle_sound->sound1_id == SOUND_ID_NULL) { + } + else + { + if (vehicle_sound->sound1_id == SOUND_ID_NULL) + { goto label69; } - if (sprite->vehicle.sound1_id != vehicle_sound->sound1_id) { + if (sprite->vehicle.sound1_id != vehicle_sound->sound1_id) + { Mixer_Stop_Channel(vehicle_sound->sound1_channel); label69: - vehicle_sound->sound1_id = sprite->vehicle.sound1_id; - vehicle_sound->sound1_pan = vehicle_sound_params->pan_x; + vehicle_sound->sound1_id = sprite->vehicle.sound1_id; + vehicle_sound->sound1_pan = vehicle_sound_params->pan_x; vehicle_sound->sound1_volume = volume; - vehicle_sound->sound1_freq = vehicle_sound_params->frequency; - uint16 frequency = vehicle_sound_params->frequency; - if (_soundParams[sprite->vehicle.sound1_id][1] & 2) { + vehicle_sound->sound1_freq = vehicle_sound_params->frequency; + uint16 frequency = vehicle_sound_params->frequency; + if (_soundParams[sprite->vehicle.sound1_id][1] & 2) + { frequency = (frequency / 2) + 4000; } - uint8 looping = _soundParams[sprite->vehicle.sound1_id][0]; - sint32 pan = vehicle_sound_params->pan_x; - vehicle_sound->sound1_channel = Mixer_Play_Effect(sprite->vehicle.sound1_id, looping ? MIXER_LOOP_INFINITE : MIXER_LOOP_NONE, DStoMixerVolume(volume), DStoMixerPan(pan), DStoMixerRate(frequency), 0); + uint8 looping = _soundParams[sprite->vehicle.sound1_id][0]; + sint32 pan = vehicle_sound_params->pan_x; + vehicle_sound->sound1_channel = + Mixer_Play_Effect(sprite->vehicle.sound1_id, looping ? MIXER_LOOP_INFINITE : MIXER_LOOP_NONE, + DStoMixerVolume(volume), DStoMixerPan(pan), DStoMixerRate(frequency), 0); goto label87; } - if (volume != vehicle_sound->sound1_volume) { + if (volume != vehicle_sound->sound1_volume) + { vehicle_sound->sound1_volume = volume; Mixer_Channel_Volume(vehicle_sound->sound1_channel, DStoMixerVolume(volume)); } - if (vehicle_sound_params->pan_x != vehicle_sound->sound1_pan) { + if (vehicle_sound_params->pan_x != vehicle_sound->sound1_pan) + { vehicle_sound->sound1_pan = vehicle_sound_params->pan_x; Mixer_Channel_Pan(vehicle_sound->sound1_channel, DStoMixerPan(vehicle_sound_params->pan_x)); } - if (!(gCurrentTicks & 3) && vehicle_sound_params->frequency != vehicle_sound->sound1_freq) { + if (!(gCurrentTicks & 3) && vehicle_sound_params->frequency != vehicle_sound->sound1_freq) + { vehicle_sound->sound1_freq = vehicle_sound_params->frequency; - uint16 frequency = vehicle_sound_params->frequency; - if (_soundParams[sprite->vehicle.sound1_id][1] & 2) { + uint16 frequency = vehicle_sound_params->frequency; + if (_soundParams[sprite->vehicle.sound1_id][1] & 2) + { frequency = (frequency / 2) + 4000; } Mixer_Channel_Rate(vehicle_sound->sound1_channel, DStoMixerRate(frequency)); @@ -1005,59 +1247,74 @@ void vehicle_sounds_update() volume *= vol1; volume = (uint16)volume / 8; volume -= 0x1FFF; - if (volume < -10000) { + if (volume < -10000) + { volume = -10000; } - if (sprite->vehicle.sound2_id == (uint8)-1) { - if (vehicle_sound->sound2_id != SOUND_ID_NULL) { - vehicle_sound->sound2_id = -1; + if (sprite->vehicle.sound2_id == RCT12_SOUND_ID_NULL) + { + if (vehicle_sound->sound2_id != SOUND_ID_NULL) + { + vehicle_sound->sound2_id = SOUND_ID_NULL; Mixer_Stop_Channel(vehicle_sound->sound2_channel); } - } else { - if (vehicle_sound->sound2_id == SOUND_ID_NULL) { + } + else + { + if (vehicle_sound->sound2_id == SOUND_ID_NULL) + { goto label93; } - if (sprite->vehicle.sound2_id != vehicle_sound->sound2_id) { + if (sprite->vehicle.sound2_id != vehicle_sound->sound2_id) + { Mixer_Stop_Channel(vehicle_sound->sound2_channel); label93: - vehicle_sound->sound2_id = sprite->vehicle.sound2_id; - vehicle_sound->sound2_pan = vehicle_sound_params->pan_x; + vehicle_sound->sound2_id = sprite->vehicle.sound2_id; + vehicle_sound->sound2_pan = vehicle_sound_params->pan_x; vehicle_sound->sound2_volume = volume; - vehicle_sound->sound2_freq = vehicle_sound_params->frequency; - uint16 frequency = vehicle_sound_params->frequency; - if (_soundParams[sprite->vehicle.sound2_id][1] & 1) { + vehicle_sound->sound2_freq = vehicle_sound_params->frequency; + uint16 frequency = vehicle_sound_params->frequency; + if (_soundParams[sprite->vehicle.sound2_id][1] & 1) + { frequency = 12649; } frequency = (frequency * 2) - 3248; - if (frequency > 25700) { + if (frequency > 25700) + { frequency = 25700; } - uint8 looping = _soundParams[sprite->vehicle.sound2_id][0]; - sint32 pan = vehicle_sound_params->pan_x; - vehicle_sound->sound2_channel = Mixer_Play_Effect(sprite->vehicle.sound2_id, looping ? MIXER_LOOP_INFINITE : MIXER_LOOP_NONE, DStoMixerVolume(volume), DStoMixerPan(pan), DStoMixerRate(frequency), 0); + uint8 looping = _soundParams[sprite->vehicle.sound2_id][0]; + sint32 pan = vehicle_sound_params->pan_x; + vehicle_sound->sound2_channel = + Mixer_Play_Effect(sprite->vehicle.sound2_id, looping ? MIXER_LOOP_INFINITE : MIXER_LOOP_NONE, + DStoMixerVolume(volume), DStoMixerPan(pan), DStoMixerRate(frequency), 0); goto label114; } - if (volume != vehicle_sound->sound2_volume) { + if (volume != vehicle_sound->sound2_volume) + { Mixer_Channel_Volume(vehicle_sound->sound2_channel, DStoMixerVolume(volume)); vehicle_sound->sound2_volume = volume; } - if (vehicle_sound_params->pan_x != vehicle_sound->sound2_pan) { + if (vehicle_sound_params->pan_x != vehicle_sound->sound2_pan) + { vehicle_sound->sound2_pan = vehicle_sound_params->pan_x; Mixer_Channel_Pan(vehicle_sound->sound2_channel, DStoMixerPan(vehicle_sound_params->pan_x)); } - if (!(gCurrentTicks & 3) && vehicle_sound_params->frequency != vehicle_sound->sound2_freq) { + if (!(gCurrentTicks & 3) && vehicle_sound_params->frequency != vehicle_sound->sound2_freq) + { vehicle_sound->sound2_freq = vehicle_sound_params->frequency; - if (!(_soundParams[sprite->vehicle.sound2_id][1] & 1)) { + if (!(_soundParams[sprite->vehicle.sound2_id][1] & 1)) + { uint16 frequency = (vehicle_sound_params->frequency * 2) - 3248; - if (frequency > 25700) { + if (frequency > 25700) + { frequency = 25700; } Mixer_Channel_Rate(vehicle_sound->sound2_channel, DStoMixerRate(frequency)); } } } - label114: - ; + label114:; } } } @@ -1069,8 +1326,8 @@ void vehicle_sounds_update() */ void vehicle_update_all() { - uint16 sprite_index; - rct_vehicle *vehicle; + uint16 sprite_index; + rct_vehicle * vehicle; if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) return; @@ -1078,10 +1335,10 @@ void vehicle_update_all() if ((gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) && gS6Info.editor_step != EDITOR_STEP_ROLLERCOASTER_DESIGNER) return; - sprite_index = gSpriteListHead[SPRITE_LIST_TRAIN]; - while (sprite_index != SPRITE_INDEX_NULL) { - vehicle = &(get_sprite(sprite_index)->vehicle); + while (sprite_index != SPRITE_INDEX_NULL) + { + vehicle = &(get_sprite(sprite_index)->vehicle); sprite_index = vehicle->next; vehicle_update(vehicle); @@ -1093,41 +1350,42 @@ void vehicle_update_all() * rct2: 0x006D6956 * @returns 0 when all closed */ -static sint32 vehicle_close_restraints(rct_vehicle* vehicle){ - Ride* ride = get_ride(vehicle->ride); - sint32 ebp = 0; +static sint32 vehicle_close_restraints(rct_vehicle * vehicle) +{ + Ride * ride = get_ride(vehicle->ride); + sint32 ebp = 0; uint16 vehicle_id = vehicle->sprite_index; - do { + 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)){ + 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_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; } } - else{ - if (vehicle->restraints_position - 20 < 0){ + else + { + if (vehicle->restraints_position - 20 < 0) + { vehicle->restraints_position = 0; continue; } @@ -1145,34 +1403,36 @@ static sint32 vehicle_close_restraints(rct_vehicle* vehicle){ * rct2: 0x006D6A2C * @returns 0 when all open */ -static sint32 vehicle_open_restraints(rct_vehicle* vehicle){ - sint32 ebp = 0; +static sint32 vehicle_open_restraints(rct_vehicle * vehicle) +{ + sint32 ebp = 0; uint16 vehicle_id = vehicle->sprite_index; - do { + do + { vehicle = GET_VEHICLE(vehicle_id); vehicle->swinging_car_var_0 = 0; - vehicle->var_4E = 0; - vehicle->var_4A = 0; + vehicle->var_4E = 0; + vehicle->var_4A = 0; - Ride* ride = get_ride(vehicle->ride); - rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); - rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; + Ride * ride = get_ride(vehicle->ride); + 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_SPINNING) { - if (abs(vehicle->var_B6) <= 700 && - !(vehicle->var_BA & 0x30) && - ( - !(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_14) || - !(vehicle->var_BA & 0xF8)) - ){ + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING) + { + if (abs(vehicle->var_B6) <= 700 && !(vehicle->var_BA & 0x30) && + (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_14) || !(vehicle->var_BA & 0xF8))) + { vehicle->var_B6 = 0; } - else { + else + { ebp++; - if (abs(vehicle->var_B6) < 600) { + if (abs(vehicle->var_B6) < 600) + { vehicle->var_B6 = 600; } sint16 value = vehicle->var_B6 / 256; @@ -1183,50 +1443,51 @@ static sint32 vehicle_open_restraints(rct_vehicle* vehicle){ continue; } } - if (vehicleEntry->var_11 == 6 && - vehicle->var_C5 != 0){ + if (vehicleEntry->var_11 == 6 && vehicle->var_C5 != 0) + { - if (vehicle->var_C8 + 0x3333 < 0xFFFF){ + if (vehicle->var_C8 + 0x3333 < 0xFFFF) + { vehicle->var_C8 = vehicle->var_C8 + 0x3333 - 0xFFFF; vehicle->var_C5++; vehicle->var_C5 &= 7; vehicle_invalidate(vehicle); } - else{ + else + { vehicle->var_C8 += 0x3333; } ebp++; 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)){ + 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_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; } } - else{ - if (vehicle->restraints_position + 20 > 0xFF){ + else + { + if (vehicle->restraints_position + 20 > 0xFF) + { vehicle->restraints_position = 255; continue; } @@ -1243,13 +1504,14 @@ static sint32 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); - if (vehicle->status == VEHICLE_STATUS_TRAVELLING_BOAT){ + if (vehicle->status == VEHICLE_STATUS_TRAVELLING_BOAT) + { ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED; ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS; ride->lifecycle_flags &= ~RIDE_LIFECYCLE_TEST_IN_PROGRESS; @@ -1259,28 +1521,34 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) } uint8 stationId = ride->current_test_station; - if (ride->entrances[stationId].xy != RCT_XY8_UNDEFINED){ + if (ride->entrances[stationId].xy != RCT_XY8_UNDEFINED) + { uint8 test_segment = ride->current_test_segment; ride->average_speed_test_timeout++; - if (ride->average_speed_test_timeout >= 32)ride->average_speed_test_timeout = 0; + if (ride->average_speed_test_timeout >= 32) + ride->average_speed_test_timeout = 0; sint32 velocity = abs(vehicle->velocity); - if (velocity > ride->max_speed){ + if (velocity > ride->max_speed) + { ride->max_speed = velocity; } - if (ride->average_speed_test_timeout == 0 && velocity > 0x8000){ + if (ride->average_speed_test_timeout == 0 && velocity > 0x8000) + { ride->average_speed = add_clamp_sint32(ride->average_speed, velocity); ride->time[test_segment]++; } sint32 distance = abs(((vehicle->velocity + vehicle->acceleration) >> 10) * 42); - if (vehicle->var_CE == 0){ + if (vehicle->var_CE == 0) + { ride->length[test_segment] = add_clamp_sint32(ride->length[test_segment], distance); } - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_G_FORCES)){ + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_G_FORCES)) + { sint32 vertical_g, lateral_g; vehicle_get_g_forces(vehicle, &vertical_g, &lateral_g); @@ -1290,9 +1558,10 @@ 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){ + if (vertical_g <= 0) + { ride->total_air_time++; } @@ -1311,28 +1580,35 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) // If we have already evaluated this track piece skip to next section uint16 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; + 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_location.xy = map_location; if (ride->entrances[ride->current_test_station].xy == RCT_XY8_UNDEFINED) return; uint16 track_elem_type = vehicle->track_type / 4; - if (track_elem_type == TRACK_ELEM_POWERED_LIFT || (vehicle->update_flags & VEHICLE_UPDATE_FLAG_0)){ - if (!(ride->testing_flags & RIDE_TESTING_POWERED_LIFT)){ + if (track_elem_type == TRACK_ELEM_POWERED_LIFT || (vehicle->update_flags & VEHICLE_UPDATE_FLAG_0)) + { + if (!(ride->testing_flags & RIDE_TESTING_POWERED_LIFT)) + { ride->testing_flags |= RIDE_TESTING_POWERED_LIFT; - if (ride->drops + 64 < 0xFF){ + if (ride->drops + 64 < 0xFF) + { ride->drops += 64; } } } - else{ + else + { ride->testing_flags &= ~RIDE_TESTING_POWERED_LIFT; } - if (ride->type == RIDE_TYPE_WATER_COASTER){ - if (track_elem_type >= TRACK_ELEM_FLAT_COVERED && track_elem_type <= TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED){ + if (ride->type == RIDE_TYPE_WATER_COASTER) + { + if (track_elem_type >= TRACK_ELEM_FLAT_COVERED && track_elem_type <= TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED) + { ride->special_track_elements |= RIDE_ELEMENT_TUNNEL_SPLASH_OR_RAPIDS; } } @@ -1351,7 +1627,8 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) ride->special_track_elements |= RIDE_ELEMENT_WHIRLPOOL; break; case TRACK_ELEM_WATER_SPLASH: - if (vehicle->velocity >= 0xB0000){ + if (vehicle->velocity >= 0xB0000) + { ride->special_track_elements |= RIDE_ELEMENT_TUNNEL_SPLASH_OR_RAPIDS; } } @@ -1360,33 +1637,33 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) uint16 track_flags = TrackFlags[track_elem_type]; uint32 testing_flags = ride->testing_flags; - if (testing_flags & RIDE_TESTING_TURN_LEFT && - track_flags & TRACK_ELEM_FLAG_TURN_LEFT){ + if (testing_flags & RIDE_TESTING_TURN_LEFT && track_flags & TRACK_ELEM_FLAG_TURN_LEFT) + { // 0x800 as this is masked to CURRENT_TURN_COUNT_MASK ride->turn_count_default += 0x800; } - else if (testing_flags & RIDE_TESTING_TURN_RIGHT && - track_flags & TRACK_ELEM_FLAG_TURN_RIGHT){ + else if (testing_flags & RIDE_TESTING_TURN_RIGHT && track_flags & TRACK_ELEM_FLAG_TURN_RIGHT) + { // 0x800 as this is masked to CURRENT_TURN_COUNT_MASK ride->turn_count_default += 0x800; } - else if (testing_flags & RIDE_TESTING_TURN_RIGHT || - testing_flags & RIDE_TESTING_TURN_LEFT){ + 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 turn_type = 1; - if (!(testing_flags & RIDE_TESTING_TURN_BANKED)){ + if (!(testing_flags & RIDE_TESTING_TURN_BANKED)) + { turn_type = 2; - if (!(testing_flags & RIDE_TESTING_TURN_SLOPED)){ + if (!(testing_flags & RIDE_TESTING_TURN_SLOPED)) + { turn_type = 0; } } - switch (ride->turn_count_default >> 11){ + switch (ride->turn_count_default >> 11) + { case 0: increment_turn_count_1_element(ride, turn_type); break; @@ -1401,46 +1678,58 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) break; } } - else { - if (track_flags & TRACK_ELEM_FLAG_TURN_LEFT){ + else + { + if (track_flags & TRACK_ELEM_FLAG_TURN_LEFT) + { ride->testing_flags |= RIDE_TESTING_TURN_LEFT; ride->turn_count_default &= ~CURRENT_TURN_COUNT_MASK; - if (track_flags & TRACK_ELEM_FLAG_TURN_BANKED){ + if (track_flags & TRACK_ELEM_FLAG_TURN_BANKED) + { ride->testing_flags |= RIDE_TESTING_TURN_BANKED; } - if (track_flags & TRACK_ELEM_FLAG_TURN_SLOPED){ + if (track_flags & TRACK_ELEM_FLAG_TURN_SLOPED) + { ride->testing_flags |= RIDE_TESTING_TURN_SLOPED; } } - if (track_flags & TRACK_ELEM_FLAG_TURN_RIGHT){ + if (track_flags & TRACK_ELEM_FLAG_TURN_RIGHT) + { ride->testing_flags |= RIDE_TESTING_TURN_RIGHT; ride->turn_count_default &= ~CURRENT_TURN_COUNT_MASK; - if (track_flags & TRACK_ELEM_FLAG_TURN_BANKED){ + if (track_flags & TRACK_ELEM_FLAG_TURN_BANKED) + { ride->testing_flags |= RIDE_TESTING_TURN_BANKED; } - if (track_flags & TRACK_ELEM_FLAG_TURN_SLOPED){ + if (track_flags & TRACK_ELEM_FLAG_TURN_SLOPED) + { ride->testing_flags |= RIDE_TESTING_TURN_SLOPED; } } } - if (testing_flags & RIDE_TESTING_DROP_DOWN){ - if (vehicle->velocity < 0 || !(track_flags & TRACK_ELEM_FLAG_DOWN)){ + if (testing_flags & RIDE_TESTING_DROP_DOWN) + { + if (vehicle->velocity < 0 || !(track_flags & TRACK_ELEM_FLAG_DOWN)) + { ride->testing_flags &= ~RIDE_TESTING_DROP_DOWN; sint16 z = vehicle->z / 8 - ride->start_drop_height; - if (z < 0){ + if (z < 0) + { z = abs(z); - if (z > ride->highest_drop_height){ + if (z > ride->highest_drop_height) + { ride->highest_drop_height = (uint8)z; } } } } - else if (track_flags & TRACK_ELEM_FLAG_DOWN && vehicle->velocity >= 0){ + else if (track_flags & TRACK_ELEM_FLAG_DOWN && vehicle->velocity >= 0) + { ride->testing_flags &= ~RIDE_TESTING_DROP_UP; ride->testing_flags |= RIDE_TESTING_DROP_DOWN; @@ -1454,20 +1743,25 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) testing_flags &= ~RIDE_TESTING_DROP_UP; } - if (testing_flags & RIDE_TESTING_DROP_UP){ - if (vehicle->velocity > 0 || !(track_flags & TRACK_ELEM_FLAG_UP)){ + if (testing_flags & RIDE_TESTING_DROP_UP) + { + if (vehicle->velocity > 0 || !(track_flags & TRACK_ELEM_FLAG_UP)) + { ride->testing_flags &= ~RIDE_TESTING_DROP_UP; sint16 z = vehicle->z / 8 - ride->start_drop_height; - if (z < 0){ + if (z < 0) + { z = abs(z); - if (z > ride->highest_drop_height){ + if (z > ride->highest_drop_height) + { ride->highest_drop_height = (uint8)z; } } } } - else if (track_flags & TRACK_ELEM_FLAG_UP && vehicle->velocity <= 0){ + else if (track_flags & TRACK_ELEM_FLAG_UP && vehicle->velocity <= 0) + { ride->testing_flags &= ~RIDE_TESTING_DROP_DOWN; ride->testing_flags |= RIDE_TESTING_DROP_UP; @@ -1480,7 +1774,8 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) ride->start_drop_height = vehicle->z / 8; } - if (track_flags & TRACK_ELEM_FLAG_NORMAL_TO_INVERSION){ + if (track_flags & TRACK_ELEM_FLAG_NORMAL_TO_INVERSION) + { uint8 inversions = ride->inversions & 0x1F; if (inversions != 0x1F) inversions++; @@ -1489,7 +1784,8 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) ride->inversions |= inversions; } - if (track_flags & TRACK_ELEM_FLAG_HELIX){ + if (track_flags & TRACK_ELEM_FLAG_HELIX) + { uint8 helixes = ride_get_helix_sections(ride); if (helixes != 0x1F) helixes++; @@ -1497,7 +1793,6 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) ride->special_track_elements &= ~0x1F; ride->special_track_elements |= helixes; } - } if (ride->entrances[ride->current_test_station].xy == RCT_XY8_UNDEFINED) @@ -1507,22 +1802,27 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) x = vehicle->x; y = vehicle->y; - if (x == LOCATION_NULL){ + if (x == LOCATION_NULL) + { ride->testing_flags &= ~RIDE_TESTING_SHELTERED; return; } - rct_map_element* map_element = map_get_surface_element_at(x / 32, y / 32); - if (map_element->base_height * 8 <= vehicle->z){ + rct_map_element * map_element = map_get_surface_element_at(x / 32, y / 32); + if (map_element->base_height * 8 <= vehicle->z) + { bool cover_found = false; - do{ - if (map_element_get_type(map_element) == MAP_ELEMENT_TYPE_SCENERY_MULTIPLE) { + do + { + if (map_element_get_type(map_element) == MAP_ELEMENT_TYPE_SCENERY_MULTIPLE) + { cover_found = true; break; } - if (map_element_get_type(map_element) == MAP_ELEMENT_TYPE_PATH) { + if (map_element_get_type(map_element) == MAP_ELEMENT_TYPE_PATH) + { cover_found = true; break; } @@ -1530,20 +1830,23 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_SCENERY) continue; - rct_scenery_entry* scenery = get_small_scenery_entry(map_element->properties.scenery.type); - if (scenery->small_scenery.flags & SMALL_SCENERY_FLAG_FULL_TILE) { + rct_scenery_entry * scenery = get_small_scenery_entry(map_element->properties.scenery.type); + if (scenery->small_scenery.flags & SMALL_SCENERY_FLAG_FULL_TILE) + { cover_found = true; break; } } while (!map_element_is_last_for_tile(map_element++)); - if (cover_found == false) { + if (cover_found == false) + { ride->testing_flags &= ~RIDE_TESTING_SHELTERED; return; } } - if (!(ride->testing_flags & RIDE_TESTING_SHELTERED)){ + if (!(ride->testing_flags & RIDE_TESTING_SHELTERED)) + { ride->testing_flags |= RIDE_TESTING_SHELTERED; uint8 num_sheltered_sections = ride->num_sheltered_sections & 0x1F; @@ -1552,28 +1855,35 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) ride->num_sheltered_sections &= ~0x1F; ride->num_sheltered_sections |= num_sheltered_sections; - if (vehicle->vehicle_sprite_type != 0){ + if (vehicle->vehicle_sprite_type != 0) + { ride->num_sheltered_sections |= (1 << 5); } - if (vehicle->bank_rotation != 0){ + if (vehicle->bank_rotation != 0) + { ride->num_sheltered_sections |= (1 << 6); } } sint32 distance = ((vehicle->velocity + vehicle->acceleration) >> 10) * 42; - if (distance < 0)return; + if (distance < 0) + return; ride->sheltered_length = add_clamp_sint32(ride->sheltered_length, distance); } static uint16 sub_6D7AC0(sint32 currentSoundId, sint32 currentVolume, sint32 targetSoundId, sint32 targetVolume) { - if (currentSoundId != 255) { - if (currentSoundId == targetSoundId) { - currentVolume = min(currentVolume + 15, targetVolume); + if (currentSoundId != 255) + { + if (currentSoundId == targetSoundId) + { + currentVolume = Math::Min(currentVolume + 15, targetVolume); return (currentVolume << 8) | currentSoundId; - } else { + } + else + { currentVolume -= 9; if (currentVolume >= 80) return (currentVolume << 8) | currentSoundId; @@ -1582,7 +1892,7 @@ static uint16 sub_6D7AC0(sint32 currentSoundId, sint32 currentVolume, sint32 tar // Begin sound at quarter volume currentSoundId = targetSoundId; - currentVolume = targetVolume == 255 ? 255 : targetVolume / 4; + currentVolume = targetVolume == 255 ? 255 : targetVolume / 4; return (currentVolume << 8) | currentSoundId; } @@ -1591,41 +1901,42 @@ static uint16 sub_6D7AC0(sint32 currentSoundId, sint32 currentVolume, sint32 tar * * 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) { + if (vehicle->ride_subtype == RIDE_TYPE_NULL) + { cable_lift_update(vehicle); return; } 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) vehicle_update_measurements(vehicle); _vehicleBreakdown = 255; - if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN)) { + if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN)) + { _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_POWERED) && ride->breakdown_reason_pending == BREAKDOWN_SAFETY_CUT_OUT) + { if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_29) || - ( - vehicle->vehicle_sprite_type == 2 && - vehicle->velocity <= 0x20000 - ) - ) { + (vehicle->vehicle_sprite_type == 2 && vehicle->velocity <= 0x20000)) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_7; } } } - switch (vehicle->status) { + switch (vehicle->status) + { case VEHICLE_STATUS_MOVING_TO_END_OF_STATION: vehicle_update_moving_to_end_of_station(vehicle); break; @@ -1701,27 +2012,31 @@ static void vehicle_update(rct_vehicle *vehicle) * * rct2: 0x006D7BCC */ -static void vehicle_update_moving_to_end_of_station(rct_vehicle *vehicle){ - Ride* ride = get_ride(vehicle->ride); +static void vehicle_update_moving_to_end_of_station(rct_vehicle * vehicle) +{ + Ride * ride = get_ride(vehicle->ride); sint32 eax, ebx; - switch (ride->mode){ + 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){ + if (vehicle->velocity >= -131940) + { vehicle->acceleration = -3298; } - if (vehicle->velocity < -131940){ + if (vehicle->velocity < -131940) + { vehicle->velocity -= vehicle->velocity / 16; vehicle->acceleration = 0; } eax = vehicle_update_track_motion(vehicle, &ebx); - if (!(eax&(1 << 5))) + if (!(eax & (1 << 5))) break; - //Fall through to next case + // Fall through to next case case RIDE_MODE_BUMPERCAR: case RIDE_MODE_SWING: case RIDE_MODE_ROTATION: @@ -1740,23 +2055,26 @@ static void vehicle_update_moving_to_end_of_station(rct_vehicle *vehicle){ 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->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); - 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)){ - if (vehicle->velocity <= 131940){ + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED)) + { + if (vehicle->velocity <= 131940) + { vehicle->acceleration = 3298; } } - if (vehicle->velocity > 131940){ + if (vehicle->velocity > 131940) + { vehicle->velocity -= vehicle->velocity / 16; vehicle->acceleration = 0; } @@ -1764,21 +2082,24 @@ static void vehicle_update_moving_to_end_of_station(rct_vehicle *vehicle){ sint32 station; eax = vehicle_update_track_motion(vehicle, &station); - if (eax & (1 << 1)){ - vehicle->velocity = 0; + if (eax & (1 << 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; + 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){ + else + { + if (vehicle->velocity > 98955) + { vehicle->sub_state = 0; } } @@ -1787,10 +2108,10 @@ static void vehicle_update_moving_to_end_of_station(rct_vehicle *vehicle){ break; vehicle->current_station = station; - vehicle->velocity = 0; - vehicle->acceleration = 0; - vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS; - vehicle->sub_state = 0; + vehicle->velocity = 0; + vehicle->acceleration = 0; + vehicle->status = VEHICLE_STATUS_WAITING_FOR_PASSENGERS; + vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); break; } @@ -1801,37 +2122,41 @@ static void vehicle_update_moving_to_end_of_station(rct_vehicle *vehicle){ * * rct2: 0x006D7FB4 */ -static void train_ready_to_depart(rct_vehicle* vehicle, uint8 num_peeps_on_train, uint8 num_used_seats){ +static void train_ready_to_depart(rct_vehicle * vehicle, uint8 num_peeps_on_train, uint8 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; } - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)){ - // Original code did not check if the ride was a boat hire, causing empty boats to leave the platform when closing a Boat Ride with passengers on it. - if (ride->status != RIDE_STATUS_CLOSED || - (ride->num_riders != 0 && ride->type != RIDE_TYPE_BOAT_RIDE)){ + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)) + { + // Original code did not check if the ride was a boat hire, causing empty boats to leave the platform when closing a + // Boat Ride with passengers on it. + if (ride->status != RIDE_STATUS_CLOSED || (ride->num_riders != 0 && ride->type != RIDE_TYPE_BOAT_RIDE)) + { 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){ + if (ride->mode == RIDE_MODE_FORWARD_ROTATION || ride->mode == RIDE_MODE_BACKWARD_ROTATION) + { uint8 peep = ((-vehicle->vehicle_sprite_type) / 8) & 0xF; - if (vehicle->peep[peep] != SPRITE_INDEX_NULL) { + 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; } @@ -1840,7 +2165,7 @@ static void train_ready_to_depart(rct_vehicle* vehicle, uint8 num_peeps_on_train return; ride->train_at_station[vehicle->current_station] = 0xFF; - vehicle->sub_state = 2; + vehicle->sub_state = 2; return; } @@ -1848,14 +2173,14 @@ static void train_ready_to_depart(rct_vehicle* vehicle, uint8 num_peeps_on_train 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 spriteIndex) +static int ride_get_train_index_from_vehicle(Ride * ride, uint16 spriteIndex) { - int trainIndex = 0; + uint32 trainIndex = 0; while (ride->vehicles[trainIndex] != spriteIndex) { trainIndex++; @@ -1866,7 +2191,7 @@ static int ride_get_train_index_from_vehicle(Ride* ride, uint16 spriteIndex) // track type to, e.g., Crooked House break; } - else if (trainIndex >= countof(ride->vehicles)) + else if (trainIndex >= Util::CountOf(ride->vehicles)) { return VEHICLE_INVALID_ID; } @@ -1878,18 +2203,21 @@ static int ride_get_train_index_from_vehicle(Ride* ride, uint16 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){ + if (vehicle->sub_state == 0) + { if (vehicle_open_restraints(vehicle)) return; - if (ride->entrances[vehicle->current_station].xy == RCT_XY8_UNDEFINED){ + if (ride->entrances[vehicle->current_station].xy == RCT_XY8_UNDEFINED) + { ride->train_at_station[vehicle->current_station] = 0xFF; - vehicle->sub_state = 2; + vehicle->sub_state = 2; return; } @@ -1903,13 +2231,14 @@ 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; } - else if (vehicle->sub_state == 1){ + else if (vehicle->sub_state == 1) + { if (vehicle->time_waiting != 0xFFFF) vehicle->time_waiting++; @@ -1918,8 +2247,9 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle){ // 0xF64E31, 0xF64E32, 0xF64E33 uint8 num_peeps_on_train = 0, num_used_seats_on_train = 0, num_seats_on_train = 0; - for (uint16 sprite_id = vehicle->sprite_index; sprite_id != SPRITE_INDEX_NULL;) { - rct_vehicle* train_vehicle = GET_VEHICLE(sprite_id); + for (uint16 sprite_id = vehicle->sprite_index; sprite_id != SPRITE_INDEX_NULL;) + { + 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; @@ -1930,28 +2260,37 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle){ num_seats_on_train &= 0x7F; - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_TEST_MODE)){ - if (vehicle->time_waiting < 20){ + if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_TEST_MODE)) + { + if (vehicle->time_waiting < 20) + { train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); return; } } - else{ - if (num_peeps_on_train == 0){ + else + { + if (num_peeps_on_train == 0) + { train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); return; } } - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS)){ - if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH){ - if (ride->min_waiting_time * 32 > vehicle->time_waiting){ + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS)) + { + if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH) + { + if (ride->min_waiting_time * 32 > vehicle->time_waiting) + { train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); return; } } - if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MAXIMUM_LENGTH){ - if (ride->max_waiting_time * 32 < vehicle->time_waiting){ + if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MAXIMUM_LENGTH) + { + if (ride->max_waiting_time * 32 < vehicle->time_waiting) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART; train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); return; @@ -1959,9 +2298,11 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle){ } } - if (ride->depart_flags & RIDE_DEPART_LEAVE_WHEN_ANOTHER_ARRIVES){ + if (ride->depart_flags & RIDE_DEPART_LEAVE_WHEN_ANOTHER_ARRIVES) + { - for (sint32 i = 0; i < MAX_VEHICLES_PER_RIDE; ++i){ + for (sint32 i = 0; i < MAX_VEHICLES_PER_RIDE; ++i) + { uint16 train_id = ride->vehicles[i]; if (train_id == SPRITE_INDEX_NULL) continue; @@ -1969,11 +2310,13 @@ 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->current_station == vehicle->current_station){ + train->status == VEHICLE_STATUS_MOVING_TO_END_OF_STATION) + { + if (train->current_station == vehicle->current_station) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART; train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); return; @@ -1982,57 +2325,66 @@ 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 (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){ + if (num_peeps_on_train == num_seats_on_train) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART; train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); return; } uint8 load = ride->depart_flags & RIDE_DEPART_WAIT_FOR_LOAD_MASK; - if (load == 3){ + if (load == 3) + { train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); return; } uint8 three_quater_seats = (3 * num_seats_on_train) / 4; - if (three_quater_seats != 0 && num_peeps_on_train >= three_quater_seats){ + if (three_quater_seats != 0 && num_peeps_on_train >= three_quater_seats) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART; train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); return; } - if (load == 2){ + if (load == 2) + { train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); return; } - if (num_seats_on_train / 2 != 0 && num_peeps_on_train >= num_seats_on_train / 2){ + if (num_seats_on_train / 2 != 0 && num_peeps_on_train >= num_seats_on_train / 2) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART; train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); return; } - if (load == 1){ + if (load == 1) + { train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); return; } - if (num_seats_on_train / 4 != 0 && num_peeps_on_train >= num_seats_on_train / 4){ + if (num_seats_on_train / 4 != 0 && num_peeps_on_train >= num_seats_on_train / 4) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART; train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); return; } - if (load == 0){ + if (load == 0) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART; train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); return; } - if (num_peeps_on_train != 0){ + if (num_peeps_on_train != 0) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART; } train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train); @@ -2046,12 +2398,13 @@ 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; - if (ride->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS){ + if (ride->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_WAIT_ON_ADJACENT; } @@ -2062,12 +2415,14 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle){ * * rct2: 0x006D91BF */ -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); - rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; +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); + rct_ride_entry_vehicle * vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_7 && vehicle->var_C5 != 1) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_7 && vehicle->var_C5 != 1) + { vehicle->var_C5 = 1; vehicle_invalidate(vehicle); } @@ -2075,7 +2430,8 @@ static void vehicle_update_dodgems_mode(rct_vehicle *vehicle) { vehicle_update_motion_dodgems(vehicle); // Update the length of time vehicle has been in bumper mode - if (vehicle->sub_state++ == 0xFF) { + if (vehicle->sub_state++ == 0xFF) + { vehicle->var_CE++; } @@ -2084,10 +2440,10 @@ static void vehicle_update_dodgems_mode(rct_vehicle *vehicle) { vehicle->var_C5 = 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); } @@ -2095,11 +2451,14 @@ static void vehicle_update_dodgems_mode(rct_vehicle *vehicle) { * * rct2: 0x006D80BE */ -static void vehicle_update_waiting_to_depart(rct_vehicle* vehicle) { - Ride* ride = get_ride(vehicle->ride); - bool shouldBreak = false; - if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) { - switch (ride->breakdown_reason_pending) { +static void vehicle_update_waiting_to_depart(rct_vehicle * vehicle) +{ + 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: @@ -2112,32 +2471,41 @@ static void vehicle_update_waiting_to_depart(rct_vehicle* vehicle) { } bool skipCheck = false; - if (shouldBreak == true || ride->status != RIDE_STATUS_OPEN) { - if (ride->mode == RIDE_MODE_FORWARD_ROTATION || - ride->mode == RIDE_MODE_BACKWARD_ROTATION) { + if (shouldBreak == true || ride->status != RIDE_STATUS_OPEN) + { + if (ride->mode == RIDE_MODE_FORWARD_ROTATION || ride->mode == RIDE_MODE_BACKWARD_ROTATION) + { uint8 seat = ((-vehicle->vehicle_sprite_type) >> 3) & 0xF; - if (vehicle->peep[seat * 2] == SPRITE_INDEX_NULL) { - if (vehicle->num_peeps == 0) { + if (vehicle->peep[seat * 2] == SPRITE_INDEX_NULL) + { + if (vehicle->num_peeps == 0) + { skipCheck = true; } } - else { - if (ride->exits[vehicle->current_station].xy != RCT_XY8_UNDEFINED) { - vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; + else + { + if (ride->exits[vehicle->current_station].xy != RCT_XY8_UNDEFINED) + { + vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); return; } } } - else { + else + { uint16 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); - if (curVehicle->num_peeps != 0) { - if (ride->exits[vehicle->current_station].xy != RCT_XY8_UNDEFINED) { - vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; + if (curVehicle->num_peeps != 0) + { + if (ride->exits[vehicle->current_station].xy != RCT_XY8_UNDEFINED) + { + vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS; vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); return; @@ -2148,74 +2516,76 @@ static void vehicle_update_waiting_to_depart(rct_vehicle* vehicle) { } } - if (skipCheck == false) { + if (skipCheck == false) + { if (!(ride->station_depart[vehicle->current_station] & STATION_DEPART_FLAG)) return; } - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_CAN_SYNCHRONISE_ADJACENT_STATIONS)) { - if (ride->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS) { - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_WAIT_ON_ADJACENT) { - if (!vehicle_can_depart_synchronised(vehicle)) { + if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_CAN_SYNCHRONISE_ADJACENT_STATIONS)) + { + if (ride->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS) + { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_WAIT_ON_ADJACENT) + { + if (!vehicle_can_depart_synchronised(vehicle)) + { return; } } } } - vehicle->status = VEHICLE_STATUS_DEPARTING; + vehicle->status = VEHICLE_STATUS_DEPARTING; vehicle->sub_state = 0; - if (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT) { + if (ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT) + { rct_xy_element track; - sint32 z; - sint32 direction; + sint32 z; + sint32 direction; - if (track_block_get_next_from_zero( - vehicle->track_x, - vehicle->track_y, - vehicle->track_z, - vehicle->ride, - (uint8)(vehicle->track_direction & 0x3), - &track, - &z, - &direction)) { + if (track_block_get_next_from_zero(vehicle->track_x, vehicle->track_y, vehicle->track_z, vehicle->ride, + (uint8)(vehicle->track_direction & 0x3), &track, &z, &direction)) + { - if (track_element_is_cable_lift(track.element)) { + if (track_element_is_cable_lift(track.element)) + { vehicle->status = VEHICLE_STATUS_WAITING_FOR_CABLE_LIFT; } } } - switch (ride->mode) { + 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); + vehicle->var_CE = 0; + vehicle_update_dodgems_mode(vehicle); break; case RIDE_MODE_SWING: - vehicle->status = VEHICLE_STATUS_SWINGING; + vehicle->status = VEHICLE_STATUS_SWINGING; vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); - vehicle->var_CE = 0; + vehicle->var_CE = 0; vehicle->current_time = -1; vehicle_update_swinging(vehicle); break; case RIDE_MODE_ROTATION: - vehicle->status = VEHICLE_STATUS_ROTATING; + vehicle->status = VEHICLE_STATUS_ROTATING; vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); - vehicle->var_CE = 0; + 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->status = VEHICLE_STATUS_SIMULATOR_OPERATING; vehicle->sub_state = 0; if (ride->mode == RIDE_MODE_FILM_THRILL_RIDERS) vehicle->sub_state = 1; @@ -2229,7 +2599,8 @@ static void vehicle_update_waiting_to_depart(rct_vehicle* vehicle) { vehicle->status = VEHICLE_STATUS_TOP_SPIN_OPERATING; vehicle_invalidate_window(vehicle); - switch (ride->mode) { + switch (ride->mode) + { case RIDE_MODE_BEGINNERS: vehicle->sub_state = 0; break; @@ -2240,17 +2611,17 @@ static void vehicle_update_waiting_to_depart(rct_vehicle* vehicle) { vehicle->sub_state = 2; break; } - vehicle->current_time = -1; + vehicle->current_time = -1; vehicle->vehicle_sprite_type = 0; - vehicle->bank_rotation = 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->status = VEHICLE_STATUS_FERRIS_WHEEL_ROTATING; vehicle->sub_state = vehicle->vehicle_sprite_type; vehicle_invalidate_window(vehicle); - vehicle->var_CE = 0; + vehicle->var_CE = 0; vehicle->ferris_wheel_var_0 = 8; vehicle->ferris_wheel_var_1 = 8; vehicle_update_ferris_wheel_rotating(vehicle); @@ -2260,7 +2631,8 @@ static void vehicle_update_waiting_to_depart(rct_vehicle* vehicle) { case RIDE_MODE_3D_FILM_SPACE_RAIDERS: vehicle->status = VEHICLE_STATUS_SHOWING_FILM; vehicle_invalidate_window(vehicle); - switch (ride->mode) { + switch (ride->mode) + { case RIDE_MODE_3D_FILM_MOUSE_TAILS: vehicle->sub_state = 0; break; @@ -2275,34 +2647,34 @@ static void vehicle_update_waiting_to_depart(rct_vehicle* vehicle) { vehicle_update_showing_film(vehicle); break; case RIDE_MODE_CIRCUS_SHOW: - vehicle->status = VEHICLE_STATUS_DOING_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->status = VEHICLE_STATUS_SPACE_RINGS_OPERATING; vehicle->sub_state = 0; vehicle_invalidate_window(vehicle); vehicle->vehicle_sprite_type = 0; - vehicle->current_time = -1; + vehicle->current_time = -1; vehicle_update_space_rings_operating(vehicle); break; case RIDE_MODE_HAUNTED_HOUSE: - vehicle->status = VEHICLE_STATUS_HAUNTED_HOUSE_OPERATING; + 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->current_time = -1; vehicle_update_haunted_house_operating(vehicle); break; case RIDE_MODE_CROOKED_HOUSE: - vehicle->status = VEHICLE_STATUS_CROOKED_HOUSE_OPERATING; + 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->current_time = -1; vehicle_update_crooked_house_operating(vehicle); break; default: @@ -2314,9 +2686,10 @@ static void vehicle_update_waiting_to_depart(rct_vehicle* vehicle) { } #pragma pack(push, 1) -typedef struct rct_synchronised_vehicle { - uint8 ride_id; - uint8 station_id; +typedef struct rct_synchronised_vehicle +{ + uint8 ride_id; + uint8 station_id; uint16 vehicle_id; } rct_synchronised_vehicle; assert_struct_size(rct_synchronised_vehicle, 4); @@ -2327,7 +2700,7 @@ assert_struct_size(rct_synchronised_vehicle, 4); // Synchronised vehicle info static rct_synchronised_vehicle _synchronisedVehicles[SYNCHRONISED_VEHICLE_COUNT] = { 0 }; -static rct_synchronised_vehicle* _lastSynchronisedVehicle = NULL; +static rct_synchronised_vehicle * _lastSynchronisedVehicle = NULL; /** * Checks if a map position contains a synchronised ride station and adds the vehicle @@ -2336,7 +2709,7 @@ static rct_synchronised_vehicle* _lastSynchronisedVehicle = NULL; */ static bool try_add_synchronised_station(sint32 x, sint32 y, sint32 z) { - // make sure we are in map bounds + // make sure we are in map bounds if (x < 0 || y < 0 || (x >> 5) > (MAXIMUM_MAP_SIZE_TECHNICAL - 1) || (y >> 5) > (MAXIMUM_MAP_SIZE_TECHNICAL - 1)) { return false; @@ -2351,7 +2724,7 @@ static bool try_add_synchronised_station(sint32 x, sint32 y, sint32 z) } sint32 rideIndex = mapElement->properties.track.ride_index; - 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. */ @@ -2365,9 +2738,9 @@ static bool try_add_synchronised_station(sint32 x, sint32 y, sint32 z) sint32 stationIndex = map_element_get_station(mapElement); rct_synchronised_vehicle * sv = _lastSynchronisedVehicle; - sv->ride_id = rideIndex; - sv->station_id = stationIndex; - sv->vehicle_id = SPRITE_INDEX_NULL; + 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 @@ -2433,17 +2806,18 @@ static bool try_add_synchronised_station(sint32 x, sint32 y, sint32 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); - sint32 station = vehicle->current_station; + Ride * ride = get_ride(vehicle->ride); + sint32 station = vehicle->current_station; LocationXY8 location = ride->station_starts[station]; - sint32 x = location.x * 32; - sint32 y = location.y * 32; - sint32 z = ride->station_heights[station]; + sint32 x = location.x * 32; + sint32 y = location.y * 32; + sint32 z = ride->station_heights[station]; rct_map_element * mapElement = map_get_track_element_at(x, y, z); - if (mapElement == NULL){ + if (mapElement == NULL) + { return false; } @@ -2480,7 +2854,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]) { @@ -2515,7 +2889,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 rideId = 0xFF; for (; sv < _lastSynchronisedVehicle; sv++) { @@ -2565,13 +2939,13 @@ static bool vehicle_can_depart_synchronised(rct_vehicle *vehicle) sint32 numTrainsAtStation = 0; sint32 numTravelingTrains = 0; - sint32 currentStation = sv->station_id; + sint32 currentStation = sv->station_id; for (sint32 i = 0; i < sv_ride->num_vehicles; i++) { uint16 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) @@ -2593,7 +2967,7 @@ static bool vehicle_can_depart_synchronised(rct_vehicle *vehicle) sint32 totalTrains = numTrainsAtStation + numTravelingTrains; if (totalTrains != sv_ride->num_vehicles || numTravelingTrains >= sv_ride->num_vehicles / 2) { - //if (numArrivingTrains > 0 || numTravelingTrains >= sv_ride->num_vehicles / 2) { + // if (numArrivingTrains > 0 || numTravelingTrains >= sv_ride->num_vehicles / 2) { /* Sync condition: If there are trains arriving at the * station or half or more of the ride trains are * travelling, this station must be sync-ed before the @@ -2613,11 +2987,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; } } @@ -2629,13 +3003,17 @@ static bool vehicle_can_depart_synchronised(rct_vehicle *vehicle) * * rct2: 0x006D9EB0 */ -void vehicle_peep_easteregg_here_we_are(rct_vehicle* vehicle) { +void vehicle_peep_easteregg_here_we_are(rct_vehicle * vehicle) +{ uint16 spriteId = vehicle->sprite_index; - do { + do + { vehicle = GET_VEHICLE(spriteId); - for (sint32 i = 0; i < vehicle->num_peeps; ++i) { - rct_peep* peep = GET_PEEP(vehicle->peep[i]); - if (peep->peep_flags & PEEP_FLAGS_HERE_WE_ARE) { + for (sint32 i = 0; i < vehicle->num_peeps; ++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); } } @@ -2646,31 +3024,34 @@ void vehicle_peep_easteregg_here_we_are(rct_vehicle* vehicle) { * Performed when vehicle has completed a full circuit * rct2: 0x006D7338 */ -void vehicle_update_test_finish(rct_vehicle* vehicle) { - Ride* ride = get_ride(vehicle->ride); +void vehicle_update_test_finish(rct_vehicle * vehicle) +{ + 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; - for (sint32 i = ride->num_stations - 1; i >= 1; i--) { + for (sint32 i = ride->num_stations - 1; i >= 1; i--) + { if (ride->time[i - 1] != 0) continue; - uint16 oldTime = ride->time[i - 1]; + uint16 oldTime = ride->time[i - 1]; ride->time[i - 1] = ride->time[i]; - ride->time[i] = oldTime; + ride->time[i] = oldTime; - sint32 oldLength = ride->length[i - 1]; + sint32 oldLength = ride->length[i - 1]; ride->length[i - 1] = ride->length[i]; - ride->length[i] = oldLength; + ride->length[i] = oldLength; } uint32 totalTime = 0; - for (uint8 i = 0; i < ride->num_stations; ++i) { + for (uint8 i = 0; i < ride->num_stations; ++i) + { totalTime += ride->time[i]; } - totalTime = max(totalTime, 1); + totalTime = Math::Max(totalTime, 1u); ride->average_speed = ride->average_speed / totalTime; window_invalidate_by_number(WC_RIDE, vehicle->ride); @@ -2680,67 +3061,72 @@ 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) { - rct_map_element* mapElement = map_get_track_element_at_of_type( - vehicle->track_x, - vehicle->track_y, - vehicle->track_z / 8, - vehicle->track_type >> 2); +static bool vehicle_next_tower_element_is_top(rct_vehicle * vehicle) +{ + rct_map_element * mapElement = + map_get_track_element_at_of_type(vehicle->track_x, vehicle->track_y, vehicle->track_z / 8, vehicle->track_type >> 2); - if (mapElement->flags & MAP_ELEMENT_FLAG_LAST_TILE) { + if (mapElement->flags & MAP_ELEMENT_FLAG_LAST_TILE) + { return true; } - if (mapElement->clearance_height == (mapElement + 1)->base_height) { - if ((mapElement + 1)->properties.track.type == TRACK_ELEM_TOWER_SECTION) { + if (mapElement->clearance_height == (mapElement + 1)->base_height) + { + if ((mapElement + 1)->properties.track.type == TRACK_ELEM_TOWER_SECTION) + { return false; } } - if ((mapElement + 1)->flags & MAP_ELEMENT_FLAG_LAST_TILE) { + if ((mapElement + 1)->flags & MAP_ELEMENT_FLAG_LAST_TILE) + { return true; } - if (mapElement->clearance_height != (mapElement + 2)->base_height) { + if (mapElement->clearance_height != (mapElement + 2)->base_height) + { return true; } - if ((mapElement + 2)->properties.track.type == TRACK_ELEM_TOWER_SECTION) { + if ((mapElement + 2)->properties.track.type == TRACK_ELEM_TOWER_SECTION) + { return false; } return true; @@ -2750,19 +3136,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) { - vehicle->var_34 = vehicle->sprite_direction; +static void vehicle_update_travelling_boat_hire_setup(rct_vehicle * vehicle) +{ + vehicle->var_34 = vehicle->sprite_direction; vehicle->track_x = vehicle->x & 0xFFE0; vehicle->track_y = vehicle->y & 0xFFE0; - LocationXY8 location = { - .x = (vehicle->track_x + TileDirectionDelta[vehicle->sprite_direction >> 3].x) / 32, - .y = (vehicle->track_y + TileDirectionDelta[vehicle->sprite_direction >> 3].y) / 32 - }; + LocationXY8 location = { static_cast((vehicle->track_x + TileDirectionDelta[vehicle->sprite_direction >> 3].x) / 32), + static_cast((vehicle->track_y + TileDirectionDelta[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; @@ -2774,13 +3160,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 waitingTime = max(ride->min_waiting_time, 3); - waitingTime = min(waitingTime, 127); + uint8 waitingTime = Math::Max(ride->min_waiting_time, static_cast(3)); + waitingTime = Math::Min(waitingTime, static_cast(127)); ride->station_depart[vehicle->current_station] |= waitingTime; vehicle_update_travelling_boat_hire_setup(vehicle); } @@ -2789,12 +3176,15 @@ static void vehicle_update_departing_boat_hire(rct_vehicle* vehicle) { * * rct2: 0x006D845B */ -static void vehicle_update_departing(rct_vehicle* vehicle) { - Ride* ride = get_ride(vehicle->ride); - rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); +static void vehicle_update_departing(rct_vehicle * vehicle) +{ + Ride * ride = get_ride(vehicle->ride); + rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); - if (vehicle->sub_state == 0) { - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_BROKEN_TRAIN) { + if (vehicle->sub_state == 0) + { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_BROKEN_TRAIN) + { if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) return; @@ -2802,61 +3192,55 @@ static void vehicle_update_departing(rct_vehicle* vehicle) { 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_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; } vehicle->sub_state = 1; vehicle_peep_easteregg_here_we_are(vehicle); - if (rideEntry->flags & RIDE_ENTRY_FLAG_PLAY_DEPART_SOUND) { - uint8 soundId = (rideEntry->vehicles[0].sound_range == 4) ? - SOUND_TRAM : - SOUND_TRAIN_CHUGGING; + if (rideEntry->flags & RIDE_ENTRY_FLAG_PLAY_DEPART_SOUND) + { + uint8 soundId = (rideEntry->vehicles[0].sound_range == 4) ? SOUND_TRAM : SOUND_TRAIN_CHUGGING; - audio_play_sound_at_location( - soundId, - vehicle->x, - vehicle->y, - vehicle->z); + audio_play_sound_at_location(soundId, vehicle->x, vehicle->y, vehicle->z); } - if (ride->mode == RIDE_MODE_UPWARD_LAUNCH || - (ride->mode == RIDE_MODE_DOWNWARD_LAUNCH && vehicle->var_CE > 1)) { + 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 - ); + audio_play_sound_at_location(SOUND_RIDE_LAUNCH_2, vehicle->x, vehicle->y, vehicle->z); } - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) { - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_TESTING) { - if (ride->current_test_segment + 1 < ride->num_stations) { + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) + { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_TESTING) + { + if (ride->current_test_segment + 1 < ride->num_stations) + { ride->current_test_segment++; ride->current_test_station = vehicle->current_station; } - else { + else + { vehicle_update_test_finish(vehicle); } } - else if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TEST_IN_PROGRESS)) { + else if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TEST_IN_PROGRESS)) + { vehicle_test_reset(vehicle); } } } - rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; + rct_ride_entry_vehicle * vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type]; - switch (ride->mode) { + switch (ride->mode) + { case RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE: if (vehicle->velocity >= -131940) vehicle->acceleration = -3298; @@ -2866,8 +3250,10 @@ static void vehicle_update_departing(rct_vehicle* vehicle) { 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) { + if (ride->type == RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER) + { + if ((ride->launch_speed << 16) > vehicle->velocity) + { vehicle->acceleration = ride->launch_speed << 13; } break; @@ -2877,7 +3263,8 @@ static void vehicle_update_departing(rct_vehicle* vehicle) { vehicle->acceleration = ride->launch_speed << 12; break; case RIDE_MODE_DOWNWARD_LAUNCH: - if (vehicle->var_CE >= 1) { + if (vehicle->var_CE >= 1) + { if ((14 << 16) > vehicle->velocity) vehicle->acceleration = 14 << 12; break; @@ -2892,44 +3279,55 @@ static void vehicle_update_departing(rct_vehicle* vehicle) { break; if (vehicle->velocity <= 131940) - vehicle->acceleration = 3298; + vehicle->acceleration = 3298; break; } uint32 flags = vehicle_update_track_motion(vehicle, NULL); - if (flags & (1 << 8)) { - if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) { + if (flags & (1 << 8)) + { + if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) + { vehicle->velocity = -vehicle->velocity; vehicle_finish_departing(vehicle); return; } } - if (flags & ((1 << 5) | (1 << 12))) { - if (ride->mode == RIDE_MODE_BOAT_HIRE) { + if (flags & ((1 << 5) | (1 << 12))) + { + if (ride->mode == RIDE_MODE_BOAT_HIRE) + { vehicle_update_departing_boat_hire(vehicle); return; } - else if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) { + else if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) + { vehicle->velocity = -vehicle->velocity; vehicle_finish_departing(vehicle); return; } - else if (ride->mode == RIDE_MODE_SHUTTLE) { + else if (ride->mode == RIDE_MODE_SHUTTLE) + { vehicle->update_flags ^= VEHICLE_UPDATE_FLAG_3; vehicle->velocity = 0; } } - if (flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_ON_LIFT_HILL) { + if (flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_ON_LIFT_HILL) + { vehicle->var_B8 |= (1 << 1); - if (ride->mode != RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) { + if (ride->mode != RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) + { sint32 speed = ride->lift_hill_speed * 31079; - if (vehicle->velocity <= speed) { + if (vehicle->velocity <= speed) + { vehicle->acceleration = 15539; - if (vehicle->velocity != 0) { - if (_vehicleBreakdown == BREAKDOWN_SAFETY_CUT_OUT) { + if (vehicle->velocity != 0) + { + if (_vehicleBreakdown == BREAKDOWN_SAFETY_CUT_OUT) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_7; vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_1; } @@ -2938,12 +3336,16 @@ static void vehicle_update_departing(rct_vehicle* vehicle) { vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_1; } } - else { + else + { sint32 speed = ride->lift_hill_speed * -31079; - if (vehicle->velocity >= speed) { + if (vehicle->velocity >= speed) + { vehicle->acceleration = -15539; - if (vehicle->velocity != 0) { - if (_vehicleBreakdown == BREAKDOWN_SAFETY_CUT_OUT) { + if (vehicle->velocity != 0) + { + if (_vehicleBreakdown == BREAKDOWN_SAFETY_CUT_OUT) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_7; vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_1; } @@ -2954,26 +3356,30 @@ static void vehicle_update_departing(rct_vehicle* vehicle) { } } - if (ride->mode == RIDE_MODE_FREEFALL_DROP) { + if (ride->mode == RIDE_MODE_FREEFALL_DROP) + { vehicle->var_C5++; - }else{ + } + else + { bool shouldLaunch = true; - if (ride->mode == RIDE_MODE_DOWNWARD_LAUNCH) { + if (ride->mode == RIDE_MODE_DOWNWARD_LAUNCH) + { if (vehicle->var_CE < 1) shouldLaunch = false; } - if (shouldLaunch) { - if (!(flags & (1 << 3)) || _vehicleStationIndex != vehicle->current_station) { + if (shouldLaunch) + { + if (!(flags & (1 << 3)) || _vehicleStationIndex != vehicle->current_station) + { vehicle_finish_departing(vehicle); return; } if (!(flags & (1 << 5))) return; - if (ride->mode == RIDE_MODE_BOAT_HIRE || - ride->mode == RIDE_MODE_ROTATING_LIFT || - ride->mode == RIDE_MODE_SHUTTLE) + if (ride->mode == RIDE_MODE_BOAT_HIRE || ride->mode == RIDE_MODE_ROTATING_LIFT || ride->mode == RIDE_MODE_SHUTTLE) return; vehicle_update_crash_setup(vehicle); @@ -2981,7 +3387,8 @@ static void vehicle_update_departing(rct_vehicle* vehicle) { } } - if (vehicle_next_tower_element_is_top(vehicle) == false) { + if (vehicle_next_tower_element_is_top(vehicle) == false) + { if (ride->mode == RIDE_MODE_FREEFALL_DROP) vehicle_invalidate(vehicle); return; @@ -2999,40 +3406,36 @@ static void vehicle_update_departing(rct_vehicle* vehicle) { * boosters do not affect the ride. * rct2: 0x006D8858 */ -static void vehicle_finish_departing(rct_vehicle* vehicle) { - Ride* ride = get_ride(vehicle->ride); +static void vehicle_finish_departing(rct_vehicle * vehicle) +{ + Ride * ride = get_ride(vehicle->ride); - if (ride->mode == RIDE_MODE_DOWNWARD_LAUNCH ) { + if (ride->mode == RIDE_MODE_DOWNWARD_LAUNCH) + { if (vehicle->var_CE >= 1 && (14 << 16) > vehicle->velocity) return; - audio_play_sound_at_location( - SOUND_RIDE_LAUNCH_1, - vehicle->x, - vehicle->y, - vehicle->z); + audio_play_sound_at_location(SOUND_RIDE_LAUNCH_1, vehicle->x, vehicle->y, vehicle->z); } - if (ride->mode == RIDE_MODE_UPWARD_LAUNCH) { + if (ride->mode == RIDE_MODE_UPWARD_LAUNCH) + { if ((ride->launch_speed << 16) > vehicle->velocity) return; - audio_play_sound_at_location( - SOUND_RIDE_LAUNCH_1, - vehicle->x, - vehicle->y, - vehicle->z); + 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 waitingTime = 3; - if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH) { - waitingTime = max(ride->min_waiting_time, 3); - waitingTime = min(waitingTime, 127); + if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH) + { + waitingTime = Math::Max(ride->min_waiting_time, static_cast(3)); + waitingTime = Math::Min(waitingTime, static_cast(127)); } ride->station_depart[vehicle->current_station] |= waitingTime; @@ -3051,14 +3454,14 @@ static void vehicle_finish_departing(rct_vehicle* vehicle) { * * rct2: 0x006DE5CB */ -static void vehicle_check_if_missing(rct_vehicle* vehicle) { - Ride* ride = get_ride(vehicle->ride); +static void vehicle_check_if_missing(rct_vehicle * vehicle) +{ + Ride * ride = get_ride(vehicle->ride); if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED)) return; - if (ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || - ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) + if (ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) return; if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_CHECK_FOR_STALLING)) @@ -3079,7 +3482,8 @@ static void vehicle_check_if_missing(rct_vehicle* vehicle) { uint8 vehicleIndex = 0; for (; vehicleIndex < ride->num_vehicles; ++vehicleIndex) - if (ride->vehicles[vehicleIndex] == vehicle->sprite_index) break; + if (ride->vehicles[vehicleIndex] == vehicle->sprite_index) + break; vehicleIndex++; set_format_arg(2, uint16, vehicleIndex); @@ -3096,14 +3500,17 @@ 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); - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { - rct_vehicle* frontVehicle = vehicle; - while (frontVehicle->is_child != 0)frontVehicle = GET_VEHICLE(frontVehicle->prev_vehicle_on_ride); + Ride * ride = get_ride(vehicle->ride); + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) + { + rct_vehicle * frontVehicle = vehicle; + while (frontVehicle->is_child != 0) + frontVehicle = GET_VEHICLE(frontVehicle->prev_vehicle_on_ride); int trainIndex = ride_get_train_index_from_vehicle(ride, frontVehicle->sprite_index); if (trainIndex == VEHICLE_INVALID_ID) @@ -3113,7 +3520,8 @@ static void vehicle_update_collision_setup(rct_vehicle* vehicle) { ride_crash(vehicle->ride, trainIndex); - if (ride->status != RIDE_STATUS_CLOSED) { + if (ride->status != RIDE_STATUS_CLOSED) + { ride_set_status(vehicle->ride, RIDE_STATUS_CLOSED); } } @@ -3122,105 +3530,77 @@ 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 spriteId = vehicle->sprite_index; - for (rct_vehicle* train; spriteId != SPRITE_INDEX_NULL; spriteId = train->next_vehicle_on_train) { - train = GET_VEHICLE(spriteId); + rct_vehicle * lastVehicle = vehicle; + uint16 spriteId = vehicle->sprite_index; + for (rct_vehicle * train; spriteId != SPRITE_INDEX_NULL; spriteId = train->next_vehicle_on_train) + { + train = GET_VEHICLE(spriteId); lastVehicle = train; train->sub_state = 2; - audio_play_sound_at_location( - SOUND_CRASH, - train->x, - train->y, - train->z - ); + audio_play_sound_at_location(SOUND_CRASH, train->x, train->y, train->z); - sprite_misc_explosion_cloud_create( - train->x, - train->y, - train->z - ); + sprite_misc_explosion_cloud_create(train->x, train->y, train->z); - for (sint32 i = 0; i < 10; i++) { - crashed_vehicle_particle_create( - train->colours, - train->x, - train->y, - train->z - ); + for (sint32 i = 0; i < 10; i++) + { + crashed_vehicle_particle_create(train->colours, train->x, train->y, train->z); } train->flags |= SPRITE_FLAGS_IS_CRASHED_VEHICLE_SPRITE; train->var_C8 = scenario_rand(); train->var_CA = scenario_rand(); - train->var_C5 = train->var_CA & 0x7; - train->sprite_width = 13; + train->var_C5 = train->var_CA & 0x7; + 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 */ static const LocationXY16 stru_9A3AC4[] = { - { -256, 0 }, - { -236, 98 }, - { -181, 181 }, - { -98, 236 }, - { 0, 256 }, - { 98, 236 }, - { 181, 181 }, - { 236, 98 }, - { 256, 0 }, - { 236, -98 }, - { 181, -181 }, - { 98, -236 }, - { 0, -256 }, - { -98, -236 }, - { -181, -181 }, - { -236, -98 }, + { -256, 0 }, { -236, 98 }, { -181, 181 }, { -98, 236 }, { 0, 256 }, { 98, 236 }, { 181, 181 }, { 236, 98 }, + { 256, 0 }, { 236, -98 }, { 181, -181 }, { 98, -236 }, { 0, -256 }, { -98, -236 }, { -181, -181 }, { -236, -98 }, }; /** * * 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); sint32 num_peeps = vehicle_get_total_num_peeps(vehicle); - if (num_peeps != 0) { - audio_play_sound_at_location( - SOUND_HAUNTED_HOUSE_SCREAM_2, - vehicle->x, - vehicle->y, - vehicle->z - ); + if (num_peeps != 0) + { + audio_play_sound_at_location(SOUND_HAUNTED_HOUSE_SCREAM_2, vehicle->x, vehicle->y, vehicle->z); } sint32 edx = vehicle->velocity >> 10; - rct_vehicle* lastVehicle = vehicle; - uint16 spriteId = vehicle->sprite_index; - for (rct_vehicle* trainVehicle; spriteId != SPRITE_INDEX_NULL; spriteId = trainVehicle->next_vehicle_on_train) { + rct_vehicle * lastVehicle = vehicle; + uint16 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; - sint32 x = stru_9A3AC4[trainVehicle->sprite_direction / 2].x; - sint32 y = stru_9A3AC4[trainVehicle->sprite_direction / 2].y; + sint32 x = stru_9A3AC4[trainVehicle->sprite_direction / 2].x; + sint32 y = stru_9A3AC4[trainVehicle->sprite_direction / 2].y; sint32 ecx = Unk9A37E4[trainVehicle->vehicle_sprite_type] >> 15; x *= ecx; @@ -3247,35 +3627,37 @@ 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; + if (vehicle->sub_state == 2) + { + vehicle->velocity = 0; vehicle->acceleration = 0; vehicle->var_C0--; if (vehicle->var_C0 == 0) vehicle->sub_state = 0; } - if (ride->mode == RIDE_MODE_FREEFALL_DROP && - vehicle->var_C5 != 0) { + if (ride->mode == RIDE_MODE_FREEFALL_DROP && vehicle->var_C5 != 0) + { vehicle->var_C5++; - vehicle->velocity = 0; + vehicle->velocity = 0; vehicle->acceleration = 0; vehicle_invalidate(vehicle); return; @@ -3284,86 +3666,105 @@ static void vehicle_update_travelling(rct_vehicle* vehicle) { uint32 flags = vehicle_update_track_motion(vehicle, NULL); bool skipCheck = false; - if (flags & ((1 << 8) | (1 << 9)) && - ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE && - vehicle->sub_state == 0) { + if (flags & ((1 << 8) | (1 << 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) { - if (flags & (1 << 6)) { + if (!skipCheck) + { + if (flags & (1 << 6)) + { vehicle_update_crash_setup(vehicle); return; } - if (flags & (1 << 7)) { + if (flags & (1 << 7)) + { vehicle_update_collision_setup(vehicle); return; } - if (flags & ((1 << 5) | (1 << 12))) { - if (ride->mode == RIDE_MODE_ROTATING_LIFT) { - if (vehicle->sub_state <= 1) { + if (flags & ((1 << 5) | (1 << 12))) + { + if (ride->mode == RIDE_MODE_ROTATING_LIFT) + { + if (vehicle->sub_state <= 1) + { vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 1; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; return; } } - else if (ride->mode == RIDE_MODE_BOAT_HIRE) { + else if (ride->mode == RIDE_MODE_BOAT_HIRE) + { vehicle_update_travelling_boat_hire_setup(vehicle); return; } - else if (ride->mode == RIDE_MODE_SHUTTLE) { + else if (ride->mode == RIDE_MODE_SHUTTLE) + { vehicle->update_flags ^= VEHICLE_UPDATE_FLAG_3; vehicle->velocity = 0; } - else { - if (vehicle->sub_state != 0) { + else + { + if (vehicle->sub_state != 0) + { vehicle_update_crash_setup(vehicle); return; } vehicle->sub_state = 1; - vehicle->velocity = 0; + vehicle->velocity = 0; } } } - if (ride->mode == RIDE_MODE_ROTATING_LIFT && - vehicle->sub_state <= 1) { + if (ride->mode == RIDE_MODE_ROTATING_LIFT && vehicle->sub_state <= 1) + { - if (vehicle->sub_state == 0) { + if (vehicle->sub_state == 0) + { if (vehicle->velocity >= -131940) vehicle->acceleration = -3298; - vehicle->velocity = max(vehicle->velocity, -131940); + vehicle->velocity = Math::Max(vehicle->velocity, -131940); } - else { - if (vehicle_next_tower_element_is_top(vehicle) == true) { - vehicle->velocity = 0; + else + { + if (vehicle_next_tower_element_is_top(vehicle) == true) + { + vehicle->velocity = 0; vehicle->sub_state = 2; - vehicle->var_C0 = 150; + vehicle->var_C0 = 150; } - else { + else + { if (vehicle->velocity <= 131940) vehicle->acceleration = 3298; } } } - if (flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_ON_LIFT_HILL) { - if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) { - if (vehicle->sub_state == 0) { + if (flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_ON_LIFT_HILL) + { + if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) + { + if (vehicle->sub_state == 0) + { if (vehicle->velocity != 0) vehicle->var_B8 |= (1 << 1); - if (!(vehicle->update_flags & VEHICLE_UPDATE_FLAG_12)) { - if (vehicle->velocity >= ride->lift_hill_speed * -31079) { + if (!(vehicle->update_flags & VEHICLE_UPDATE_FLAG_12)) + { + if (vehicle->velocity >= ride->lift_hill_speed * -31079) + { vehicle->acceleration = -15539; - if (_vehicleBreakdown == 0) { + if (_vehicleBreakdown == 0) + { vehicle->var_B8 &= ~(1 << 1); vehicle->update_flags |= VEHICLE_UPDATE_FLAG_7; } @@ -3371,17 +3772,22 @@ static void vehicle_update_travelling(rct_vehicle* vehicle) { } } } - else { + else + { vehicle->var_B8 |= (1 << 1); - if (vehicle->velocity <= ride->lift_hill_speed * 31079) { + if (vehicle->velocity <= ride->lift_hill_speed * 31079) + { vehicle->acceleration = 15539; - if (vehicle->velocity != 0) { - if (_vehicleBreakdown == 0) { + if (vehicle->velocity != 0) + { + if (_vehicleBreakdown == 0) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_7; vehicle->var_B8 &= ~(1 << 1); } } - else { + else + { vehicle->var_B8 &= ~(1 << 1); } } @@ -3391,17 +3797,16 @@ static void vehicle_update_travelling(rct_vehicle* vehicle) { if (!(flags & (1 << 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; } - if (ride->mode == RIDE_MODE_POWERED_LAUNCH_PASSTROUGH && - vehicle->velocity < 0) + 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; @@ -3415,12 +3820,13 @@ 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 unkF64E35 = 1; - Ride* ride = get_ride(vehicle->ride); + uint8 unkF64E35 = 1; + Ride * ride = get_ride(vehicle->ride); - switch (ride->mode) { + switch (ride->mode) + { case RIDE_MODE_SWING: case RIDE_MODE_ROTATION: case RIDE_MODE_FORWARD_ROTATION: @@ -3438,32 +3844,33 @@ static void vehicle_update_arriving(rct_vehicle* vehicle) case RIDE_MODE_HAUNTED_HOUSE: case RIDE_MODE_CROOKED_HOUSE: 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); return; } - if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN && - ride->breakdown_reason_pending == BREAKDOWN_BRAKES_FAILURE && + 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 - ) { + 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) { - if (ride->mode == RIDE_MODE_RACE && - ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) { + if (vehicle->sub_state == 0) + { + if (ride->mode == RIDE_MODE_RACE && ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) + { goto loc_6D8E36; } - if (vehicle->velocity <= 131940) { + if (vehicle->velocity <= 131940) + { vehicle->acceleration = 3298; goto loc_6D8E36; } @@ -3474,25 +3881,30 @@ static void vehicle_update_arriving(rct_vehicle* vehicle) else velocity_diff /= 16; - if (unkF64E35 == 0) { + if (unkF64E35 == 0) + { goto loc_6D8E36; } - if (ride->num_circuits != 1) { - if (vehicle->num_laps + 1 < ride->num_circuits) { + if (ride->num_circuits != 1) + { + if (vehicle->num_laps + 1 < ride->num_circuits) + { goto loc_6D8E36; } } vehicle->velocity -= velocity_diff; vehicle->acceleration = 0; } - else { - if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED) && - vehicle->velocity >= -131940) { + else + { + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED) && vehicle->velocity >= -131940) + { vehicle->acceleration = -3298; } - if (vehicle->velocity >= -131940) { + if (vehicle->velocity >= -131940) + { goto loc_6D8E36; } @@ -3502,130 +3914,126 @@ static void vehicle_update_arriving(rct_vehicle* vehicle) else velocity_diff /= 16; - if (unkF64E35 == 0) { + if (unkF64E35 == 0) + { goto loc_6D8E36; } - if (vehicle->num_laps + 1 < ride->num_circuits) { + if (vehicle->num_laps + 1 < ride->num_circuits) + { goto loc_6D8E36; } - if (vehicle->num_laps + 1 != ride->num_circuits) { + if (vehicle->num_laps + 1 != ride->num_circuits) + { vehicle->velocity -= velocity_diff; vehicle->acceleration = 0; 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; } - else{ + else + { vehicle->velocity -= velocity_diff; vehicle->acceleration = 0; } } uint32 flags; - loc_6D8E36: +loc_6D8E36: flags = vehicle_update_track_motion(vehicle, NULL); - if (flags & (1 << 7) && - unkF64E35 == 0 - ) { + if (flags & (1 << 7) && unkF64E35 == 0) + { vehicle_update_collision_setup(vehicle); return; } - if (flags & (1 << 0) && - unkF64E35 == 0 - ) { - vehicle->status = VEHICLE_STATUS_DEPARTING; + if (flags & (1 << 0) && unkF64E35 == 0) + { + vehicle->status = VEHICLE_STATUS_DEPARTING; vehicle->sub_state = 1; vehicle_invalidate_window(vehicle); return; } - if (!(flags & ((1 << 0) | (1 << 1) | (1 << 5)))) { + if (!(flags & ((1 << 0) | (1 << 1) | (1 << 5)))) + { if (vehicle->velocity > 98955) vehicle->var_C0 = 0; return; } vehicle->var_C0++; - if (flags & (1 << 1) && - vehicleEntry->flags & VEHICLE_ENTRY_FLAG_30 && - vehicle->var_C0 < 40){ + if (flags & (1 << 1) && vehicleEntry->flags & VEHICLE_ENTRY_FLAG_30 && vehicle->var_C0 < 40) + { return; } - rct_map_element* mapElement = map_get_track_element_at( - vehicle->track_x, - vehicle->track_y, - vehicle->track_z / 8 - ); + rct_map_element * mapElement = map_get_track_element_at(vehicle->track_x, vehicle->track_y, vehicle->track_z / 8); - if (mapElement == NULL) { + if (mapElement == NULL) + { return; } vehicle->current_station = map_element_get_station(mapElement); vehicle->num_laps++; - if (vehicle->sub_state != 0) { - if (vehicle->num_laps < ride->num_circuits) { - vehicle->status = VEHICLE_STATUS_DEPARTING; + if (vehicle->sub_state != 0) + { + if (vehicle->num_laps < ride->num_circuits) + { + vehicle->status = VEHICLE_STATUS_DEPARTING; vehicle->sub_state = 1; vehicle_invalidate_window(vehicle); return; } - if (vehicle->num_laps == ride->num_circuits && - vehicle->update_flags & VEHICLE_UPDATE_FLAG_12) { - vehicle->status = VEHICLE_STATUS_DEPARTING; + if (vehicle->num_laps == ride->num_circuits && vehicle->update_flags & VEHICLE_UPDATE_FLAG_12) + { + vehicle->status = VEHICLE_STATUS_DEPARTING; vehicle->sub_state = 1; vehicle_invalidate_window(vehicle); return; } } - if (ride->num_circuits != 1 && - vehicle->num_laps < ride->num_circuits) { - vehicle->status = VEHICLE_STATUS_DEPARTING; + if (ride->num_circuits != 1 && vehicle->num_laps < ride->num_circuits) + { + vehicle->status = VEHICLE_STATUS_DEPARTING; vehicle->sub_state = 1; vehicle_invalidate_window(vehicle); return; } - 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; + 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->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; + if (ride->mode == RIDE_MODE_RACE && ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) + { + 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); } @@ -3633,56 +4041,62 @@ static void vehicle_update_arriving(rct_vehicle* vehicle) * * rct2: 0x006D9002 */ -static void vehicle_update_unloading_passengers(rct_vehicle* vehicle) { - if (vehicle->sub_state == 0) { - if (!vehicle_open_restraints(vehicle)) { +static void vehicle_update_unloading_passengers(rct_vehicle * vehicle) +{ + if (vehicle->sub_state == 0) + { + if (!vehicle_open_restraints(vehicle)) + { vehicle->sub_state = 1; } } - Ride* ride = get_ride(vehicle->ride); - if (ride->mode == RIDE_MODE_FORWARD_ROTATION || - ride->mode == RIDE_MODE_BACKWARD_ROTATION) { + Ride * ride = get_ride(vehicle->ride); + if (ride->mode == RIDE_MODE_FORWARD_ROTATION || ride->mode == RIDE_MODE_BACKWARD_ROTATION) + { uint8 seat = ((-vehicle->vehicle_sprite_type) >> 3) & 0xF; - if (vehicle->restraints_position == 255 && - (vehicle->peep[seat * 2] != SPRITE_INDEX_NULL)) { + if (vehicle->restraints_position == 255 && (vehicle->peep[seat * 2] != SPRITE_INDEX_NULL)) + { 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_decrement_num_riders(peep); peep->sub_state = 7; - peep->state = PEEP_STATE_LEAVING_RIDE; + peep->state = PEEP_STATE_LEAVING_RIDE; peep_window_state_update(peep); - 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_decrement_num_riders(peep); peep->sub_state = 7; - peep->state = PEEP_STATE_LEAVING_RIDE; + peep->state = PEEP_STATE_LEAVING_RIDE; peep_window_state_update(peep); } } - else { - if (ride->exits[vehicle->current_station].xy == RCT_XY8_UNDEFINED) { + else + { + if (ride->exits[vehicle->current_station].xy == RCT_XY8_UNDEFINED) + { 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 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) continue; @@ -3691,11 +4105,12 @@ static void vehicle_update_unloading_passengers(rct_vehicle* vehicle) { continue; train->next_free_seat = 0; - for (uint8 peepIndex = 0; peepIndex < train->num_peeps; peepIndex++) { - rct_peep* peep = GET_PEEP(train->peep[peepIndex]); + for (uint8 peepIndex = 0; peepIndex < train->num_peeps; peepIndex++) + { + rct_peep * peep = GET_PEEP(train->peep[peepIndex]); peep_decrement_num_riders(peep); peep->sub_state = 7; - peep->state = PEEP_STATE_LEAVING_RIDE; + peep->state = PEEP_STATE_LEAVING_RIDE; peep_window_state_update(peep); } } @@ -3705,18 +4120,19 @@ static void vehicle_update_unloading_passengers(rct_vehicle* vehicle) { return; uint16 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); } @@ -3725,16 +4141,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; } @@ -3742,55 +4158,63 @@ static void vehicle_update_waiting_for_cable_lift(rct_vehicle *vehicle) * * rct2: 0x006D9D21 */ -static void vehicle_update_travelling_cable_lift(rct_vehicle* vehicle) { - Ride* ride = get_ride(vehicle->ride); +static void vehicle_update_travelling_cable_lift(rct_vehicle * vehicle) +{ + Ride * ride = get_ride(vehicle->ride); - if (vehicle->sub_state == 0) { - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_BROKEN_TRAIN) { + if (vehicle->sub_state == 0) + { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_BROKEN_TRAIN) + { if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) return; 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_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; } vehicle->sub_state = 1; vehicle_peep_easteregg_here_we_are(vehicle); - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) { - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_TESTING) { - if (ride->current_test_segment + 1 < ride->num_stations) { + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)) + { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_TESTING) + { + if (ride->current_test_segment + 1 < ride->num_stations) + { ride->current_test_segment++; ride->current_test_station = vehicle->current_station; } - else { + else + { vehicle_update_test_finish(vehicle); } } - else if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TEST_IN_PROGRESS)) { + else if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TEST_IN_PROGRESS)) + { vehicle_test_reset(vehicle); } } } - if (vehicle->velocity <= 439800) { + if (vehicle->velocity <= 439800) + { vehicle->acceleration = 4398; } sint32 flags = vehicle_update_track_motion(vehicle, NULL); - if (flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_11) { + if (flags & VEHICLE_UPDATE_MOTION_TRACK_FLAG_11) + { vehicle->status = VEHICLE_STATUS_TRAVELLING; vehicle_invalidate_window(vehicle); - vehicle->sub_state = 1; + vehicle->sub_state = 1; vehicle->lost_time_out = 0; return; } @@ -3803,16 +4227,16 @@ static void vehicle_update_travelling_cable_lift(rct_vehicle* vehicle) { vehicle->sub_state = 2; - if (ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || - ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) + if (ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) return; // This is slightly different to the vanilla function ride->station_depart[vehicle->current_station] &= STATION_DEPART_FLAG; uint8 waitingTime = 3; - if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH) { - waitingTime = max(ride->min_waiting_time, 3); - waitingTime = min(waitingTime, 127); + if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH) + { + waitingTime = Math::Max(ride->min_waiting_time, static_cast(3)); + waitingTime = Math::Min(waitingTime, static_cast(127)); } ride->station_depart[vehicle->current_station] |= waitingTime; @@ -3822,34 +4246,29 @@ 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, sint32 x, sint32 y, sint32 bx, sint32 dx) +static void loc_6DA9F9(rct_vehicle * vehicle, sint32 x, sint32 y, sint32 bx, sint32 dx) { vehicle->remaining_distance = 0; - if (!vehicle_update_motion_collision_detection(vehicle, x, y, vehicle->z, NULL)) { + if (!vehicle_update_motion_collision_detection(vehicle, x, y, vehicle->z, NULL)) + { vehicle->track_x = bx; vehicle->track_y = dx; - rct_map_element *mapElement = map_get_track_element_at( - vehicle->track_x, - vehicle->track_y, - vehicle->track_z >> 3 - ); + rct_map_element * mapElement = map_get_track_element_at(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3); - Ride *ride = get_ride(vehicle->ride); - vehicle->track_type = - (mapElement->properties.track.type << 2) | - (ride->boat_hire_return_direction & 3); + Ride * ride = get_ride(vehicle->ride); + vehicle->track_type = (mapElement->properties.track.type << 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; } } @@ -3857,77 +4276,97 @@ static void loc_6DA9F9(rct_vehicle *vehicle, sint32 x, sint32 y, sint32 bx, sint * * 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); - if (vehicleEntry->flags & (VEHICLE_ENTRY_FLAG_23 | VEHICLE_ENTRY_FLAG_24)) { + rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + if (vehicleEntry->flags & (VEHICLE_ENTRY_FLAG_23 | VEHICLE_ENTRY_FLAG_24)) + { sub_6D63D4(vehicle); } - _vehicleUnkF64E10 = 1; + _vehicleUnkF64E10 = 1; vehicle->acceleration = 0; vehicle->remaining_distance += _vehicleVelocityF64E0C; - if (vehicle->remaining_distance >= 0x368A) { + if (vehicle->remaining_distance >= 0x368A) + { vehicle->var_B8 &= ~(1 << 1); unk_F64E20.x = vehicle->x; unk_F64E20.y = vehicle->y; unk_F64E20.z = vehicle->z; vehicle_invalidate(vehicle); - for (;;) { + for (;;) + { // loc_6DA7A5 vehicle->var_35++; sint32 x = (vehicle->boat_location.x * 32) + 16; sint32 y = (vehicle->boat_location.y * 32) + 16; sint32 z; - uint8 bl; + uint8 bl; x -= vehicle->x; - if (x >= 0) { + if (x >= 0) + { y -= vehicle->y; - if (y < 0) { + if (y < 0) + { // loc_6DA81A: - y = -y; + y = -y; bl = 24; - if (y <= x * 4) { + if (y <= x * 4) + { bl = 16; - if (x <= y * 4) { + if (x <= y * 4) + { bl = 20; } } - } else { + } + else + { bl = 8; - if (y <= x * 4) { + if (y <= x * 4) + { bl = 16; - if (x <= y * 4) { + if (x <= y * 4) + { bl = 12; } } } - } else { + } + else + { y -= vehicle->y; - if (y < 0) { + if (y < 0) + { // loc_6DA83D: - x = -x; - y = -y; + x = -x; + y = -y; bl = 24; - if (y <= x * 4) { + if (y <= x * 4) + { bl = 0; - if (x <= y * 4) { + if (x <= y * 4) + { bl = 28; } } - } else { - x = -x; + } + else + { + x = -x; bl = 8; - if (y <= x * 4) { + if (y <= x * 4) + { bl = 0; - if (x <= y * 4) { + if (x <= y * 4) + { bl = 4; } } @@ -3937,22 +4376,30 @@ static void vehicle_update_motion_boat_hire(rct_vehicle *vehicle) // loc_6DA861: vehicle->var_34 = bl; x += y; - if (x <= 12) { + if (x <= 12) + { vehicle_update_boat_location(vehicle); } - if (!(vehicle->var_35 & (1 << 0))) { + if (!(vehicle->var_35 & (1 << 0))) + { uint8 spriteDirection = vehicle->sprite_direction; - if (spriteDirection != vehicle->var_34) { + if (spriteDirection != vehicle->var_34) + { uint8 dl = (vehicle->var_34 + 16 - spriteDirection) & 0x1E; - if (dl >= 16) { + if (dl >= 16) + { spriteDirection += 2; - if (dl > 24) { + if (dl > 24) + { vehicle->var_35--; } - } else { + } + else + { spriteDirection -= 2; - if (dl < 8) { + if (dl < 8) + { vehicle->var_35--; } } @@ -3962,12 +4409,14 @@ static void vehicle_update_motion_boat_hire(rct_vehicle *vehicle) } sint32 edi = (vehicle->sprite_direction | (vehicle->var_35 & 1)) & 0x1F; - 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, NULL)) { + 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, NULL)) + { vehicle->remaining_distance = 0; - if (vehicle->sprite_direction == vehicle->var_34) { + if (vehicle->sprite_direction == vehicle->var_34) + { vehicle->sprite_direction ^= (1 << 4); vehicle_update_boat_location(vehicle); vehicle->sprite_direction ^= (1 << 4); @@ -3977,62 +4426,82 @@ static void vehicle_update_motion_boat_hire(rct_vehicle *vehicle) sint32 flooredX = floor2(x, 32); sint32 flooredY = floor2(y, 32); - if (flooredX != vehicle->track_x || flooredY != vehicle->track_y) { - if (vehicle_is_boat_on_water(vehicle, x, y)) { - // loc_6DA939: - Ride *ride = get_ride(vehicle->ride); + if (flooredX != vehicle->track_x || flooredY != vehicle->track_y) + { + if (vehicle_is_boat_on_water(vehicle, x, y)) + { + // loc_6DA939: + Ride * ride = get_ride(vehicle->ride); bool do_loc_6DAA97 = false; - if (vehicle->sub_state != 1) { + if (vehicle->sub_state != 1) + { do_loc_6DAA97 = true; - } else { - if (ride->boat_hire_return_position.x != (flooredX / 32) || ride->boat_hire_return_position.y != (flooredY / 32)) + } + else + { + if (ride->boat_hire_return_position.x != (flooredX / 32) || + ride->boat_hire_return_position.y != (flooredY / 32)) { do_loc_6DAA97 = true; } } - // loc_6DAA97: - if (do_loc_6DAA97) { + // loc_6DAA97: + if (do_loc_6DAA97) + { vehicle->remaining_distance = 0; - if (vehicle->sprite_direction == vehicle->var_34) { + if (vehicle->sprite_direction == vehicle->var_34) + { vehicle_update_boat_location(vehicle); } break; } - if (!(ride->boat_hire_return_direction & 1)) { + if (!(ride->boat_hire_return_direction & 1)) + { uint16 bp = y & 0x1F; - if (bp == 16) { + if (bp == 16) + { loc_6DA9F9(vehicle, x, y, flooredX, flooredY); break; } - if (bp <= 16) { + if (bp <= 16) + { x = unk_F64E20.x; y = unk_F64E20.y + 1; - } else { + } + else + { x = unk_F64E20.x; y = unk_F64E20.y - 1; } - } else { - // loc_6DA9A2: + } + else + { + // loc_6DA9A2: uint16 bp = x & 0x1F; - if (bp == 16) { + if (bp == 16) + { loc_6DA9F9(vehicle, x, y, flooredX, flooredY); break; } - if (bp <= 16) { + if (bp <= 16) + { x = unk_F64E20.x + 1; y = unk_F64E20.y; - } else { + } + else + { x = unk_F64E20.x - 1; y = unk_F64E20.y; } } - // loc_6DA9D1: + // loc_6DA9D1: vehicle->remaining_distance = 0; - if (!vehicle_update_motion_collision_detection(vehicle, x, y, vehicle->z, NULL)) { + if (!vehicle_update_motion_collision_detection(vehicle, x, y, vehicle->z, NULL)) + { unk_F64E20.x = x; unk_F64E20.y = y; } @@ -4045,26 +4514,23 @@ static void vehicle_update_motion_boat_hire(rct_vehicle *vehicle) vehicle->remaining_distance -= Unk9A36C4[edi].distance; unk_F64E20.x = x; unk_F64E20.y = y; - if (vehicle->remaining_distance < 0x368A) { + if (vehicle->remaining_distance < 0x368A) + { break; } _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: + // loc_6DAAC9: { sint32 edx = vehicle->velocity >> 8; - edx = (edx * edx); - if (vehicle->velocity < 0) { + edx = (edx * edx); + if (vehicle->velocity < 0) + { edx = -edx; } edx >>= 5; @@ -4074,10 +4540,12 @@ static void vehicle_update_motion_boat_hire(rct_vehicle *vehicle) sint32 eax = ((vehicle->velocity >> 1) + edx) / friction; sint32 ecx = -eax; - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED) { - eax = vehicle->speed << 14; + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED) + { + eax = vehicle->speed << 14; sint32 ebx = (vehicle->speed * friction) >> 2; - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_3) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_3) + { eax = -eax; } eax -= vehicle->velocity; @@ -4090,60 +4558,67 @@ static void vehicle_update_motion_boat_hire(rct_vehicle *vehicle) // ebx = _vehicleStationIndex; } - /** - * - * rct2: 0x006DA280 - */ -static void vehicle_update_boat_location(rct_vehicle *vehicle) +/** + * + * rct2: 0x006DA280 + */ +static void vehicle_update_boat_location(rct_vehicle * vehicle) { - Ride *ride = get_ride(vehicle->ride); - LocationXY8 returnPosition = ride->boat_hire_return_position; - uint8 returnDirection = ride->boat_hire_return_direction & 3; + Ride * ride = get_ride(vehicle->ride); + LocationXY8 returnPosition = ride->boat_hire_return_position; + uint8 returnDirection = ride->boat_hire_return_direction & 3; - LocationXY8 location = { - .x = (vehicle->x + TileDirectionDelta[returnDirection].x) / 32, - .y = (vehicle->y + TileDirectionDelta[returnDirection].y) / 32 - }; + LocationXY8 location = { static_cast((vehicle->x + TileDirectionDelta[returnDirection].x) / 32), + static_cast((vehicle->y + TileDirectionDelta[returnDirection].y) / 32) }; - if (location.xy == returnPosition.xy) { - vehicle->sub_state = 1; + if (location.xy == returnPosition.xy) + { + vehicle->sub_state = 1; vehicle->boat_location = location; return; } - vehicle->sub_state = 0; - uint8 curDirection = ((vehicle->sprite_direction + 19) >> 3) & 3; + vehicle->sub_state = 0; + uint8 curDirection = ((vehicle->sprite_direction + 19) >> 3) & 3; uint8 randDirection = scenario_rand() & 3; - rct_ride_entry *rideEntry = get_ride_entry(vehicle->ride_subtype); - if (!(rideEntry->flags & RIDE_ENTRY_FLAG_7) || vehicle->lost_time_out > 1920) { - if (scenario_rand() & 1) { + rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); + if (!(rideEntry->flags & RIDE_ENTRY_FLAG_7) || vehicle->lost_time_out > 1920) + { + if (scenario_rand() & 1) + { LocationXY16 destLocation = { - .x = returnPosition.x * 32 - TileDirectionDelta[returnDirection].x + 16, - .y = returnPosition.y * 32 - TileDirectionDelta[returnDirection].y + 16 + static_cast(returnPosition.x * 32 - TileDirectionDelta[returnDirection].x + 16), + static_cast(returnPosition.y * 32 - TileDirectionDelta[returnDirection].y + 16) }; destLocation.x -= vehicle->x; destLocation.y -= vehicle->y; - if (abs(destLocation.x) <= abs(destLocation.y)) { + if (abs(destLocation.x) <= abs(destLocation.y)) + { randDirection = destLocation.y < 0 ? 3 : 1; - } else { + } + else + { randDirection = destLocation.x < 0 ? 0 : 2; } } } static const sint8 rotations[] = { 0, 1, -1, 2 }; - for (sint32 i = 0; i < 4; i++) { - if (randDirection + rotations[i] == curDirection) { + for (sint32 i = 0; i < 4; i++) + { + if (randDirection + rotations[i] == curDirection) + { continue; } sint16 x = vehicle->track_x + TileDirectionDelta[(randDirection + rotations[i]) & 3].x; sint16 y = vehicle->track_y + TileDirectionDelta[(randDirection + rotations[i]) & 3].y; - if (vehicle_is_boat_on_water(vehicle, x, y)) { + if (vehicle_is_boat_on_water(vehicle, x, y)) + { continue; } vehicle->boat_location.x = x / 32; @@ -4151,28 +4626,34 @@ static void vehicle_update_boat_location(rct_vehicle *vehicle) return; } - sint16 x = vehicle->track_x + TileDirectionDelta[curDirection & 3].x; - sint16 y = vehicle->track_y + TileDirectionDelta[curDirection & 3].y; + sint16 x = vehicle->track_x + TileDirectionDelta[curDirection & 3].x; + sint16 y = vehicle->track_y + TileDirectionDelta[curDirection & 3].y; vehicle->boat_location.x = x / 32; vehicle->boat_location.y = y / 32; } - /** - * - * rct2: 0x006DA22A - */ -static bool vehicle_is_boat_on_water(rct_vehicle *vehicle, sint32 x, sint32 y) +/** + * + * rct2: 0x006DA22A + */ +static bool vehicle_is_boat_on_water(rct_vehicle * vehicle, sint32 x, sint32 y) { - sint32 z = vehicle->track_z >> 3; - rct_map_element *mapElement = map_get_first_element_at(x >> 5, y >> 5); - do { - if (map_element_get_type(mapElement) == MAP_ELEMENT_TYPE_SURFACE) { + sint32 z = vehicle->track_z >> 3; + rct_map_element * mapElement = map_get_first_element_at(x >> 5, y >> 5); + do + { + if (map_element_get_type(mapElement) == MAP_ELEMENT_TYPE_SURFACE) + { sint32 waterZ = map_get_water_height(mapElement) * 2; - if (z != waterZ) { + if (z != waterZ) + { return true; } - } else { - if (z > mapElement->base_height - 2 && z < mapElement->clearance_height + 2) { + } + else + { + if (z > mapElement->base_height - 2 && z < mapElement->clearance_height + 2) + { return true; } } @@ -4180,32 +4661,36 @@ static bool vehicle_is_boat_on_water(rct_vehicle *vehicle, sint32 x, sint32 y) return false; } - /** - * - * rct2: 0x006D9249 - */ -static void vehicle_update_swinging(rct_vehicle* vehicle) { - Ride* ride = get_ride(vehicle->ride); - rct_ride_entry* rideEntry = get_ride_entry(vehicle->ride_subtype); +/** + * + * rct2: 0x006D9249 + */ +static void vehicle_update_swinging(rct_vehicle * vehicle) +{ + 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 // 3 == full swing uint8 swingState = vehicle->sub_state; - if (rideEntry->flags & RIDE_ENTRY_FLAG_ALTERNATIVE_SWING_MODE_1) { + if (rideEntry->flags & RIDE_ENTRY_FLAG_ALTERNATIVE_SWING_MODE_1) + { swingState += 4; if (rideEntry->flags & RIDE_ENTRY_FLAG_ALTERNATIVE_SWING_MODE_2) swingState += 4; } - const sint8 *spriteMap = SwingingTimeToSpriteMaps[swingState]; - sint8 spriteType = spriteMap[vehicle->current_time + 1]; + const sint8 * spriteMap = SwingingTimeToSpriteMaps[swingState]; + sint8 spriteType = spriteMap[vehicle->current_time + 1]; // 0x80 indicates that a complete swing has been // completed and the next swing can start - if (spriteType != -128) { + if (spriteType != -128) + { vehicle->current_time++; - if ((uint8)spriteType != vehicle->vehicle_sprite_type) { + if ((uint8)spriteType != vehicle->vehicle_sprite_type) + { // Used to know which sprite to draw vehicle->vehicle_sprite_type = (uint8)spriteType; vehicle_invalidate(vehicle); @@ -4215,13 +4700,16 @@ static void vehicle_update_swinging(rct_vehicle* vehicle) { vehicle->current_time = -1; vehicle->var_CE++; - if (ride->status != RIDE_STATUS_CLOSED) { + if (ride->status != RIDE_STATUS_CLOSED) + { // It takes 3 swings to get into full swing // ride->rotations already takes this into account - if (vehicle->var_CE + 3 < ride->rotations) { + if (vehicle->var_CE + 3 < ride->rotations) + { // Go to the next swing state until we // are at full swing. - if (vehicle->sub_state != 3) { + if (vehicle->sub_state != 3) + { vehicle->sub_state++; } vehicle_update_swinging(vehicle); @@ -4231,11 +4719,12 @@ static void vehicle_update_swinging(rct_vehicle* vehicle) { // To get to this part of the code the // swing has to be in slowing down phase - if (vehicle->sub_state == 0) { + if (vehicle->sub_state == 0) + { 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 @@ -4247,27 +4736,31 @@ 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; sint8 ferris_wheel_var_0 = vehicle->ferris_wheel_var_0; - if (ferris_wheel_var_0 == 3) { + if (ferris_wheel_var_0 == 3) + { vehicle->ferris_wheel_var_0 = ferris_wheel_var_0; vehicle->ferris_wheel_var_1 = ferris_wheel_var_0; } - else if (ferris_wheel_var_0 < 3) { + else if (ferris_wheel_var_0 < 3) + { if (ferris_wheel_var_0 != -8) ferris_wheel_var_0--; vehicle->ferris_wheel_var_0 = ferris_wheel_var_0; vehicle->ferris_wheel_var_1 = -ferris_wheel_var_0; } - else { + else + { ferris_wheel_var_0--; vehicle->ferris_wheel_var_0 = ferris_wheel_var_0; vehicle->ferris_wheel_var_1 = ferris_wheel_var_0; @@ -4294,15 +4787,18 @@ static void vehicle_update_ferris_wheel_rotating(rct_vehicle* vehicle) { subState--; subState &= 0x7F; - if (subState == vehicle->vehicle_sprite_type) { + if (subState == vehicle->vehicle_sprite_type) + { bool shouldStop = true; - if (ride->status != RIDE_STATUS_CLOSED) { + if (ride->status != RIDE_STATUS_CLOSED) + { if (vehicle->var_CE < ride->rotations) shouldStop = false; } - if (shouldStop) { - ferris_wheel_var_0 = vehicle->ferris_wheel_var_0; + if (shouldStop) + { + 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); } @@ -4324,21 +4820,23 @@ 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; assert(vehicle->current_time >= -1); assert(vehicle->current_time < MotionSimulatorTimeToSpriteMapCount); uint8 al = MotionSimulatorTimeToSpriteMap[vehicle->current_time + 1]; - if (al != 0xFF) { + if (al != 0xFF) + { vehicle->current_time++; if (al == vehicle->vehicle_sprite_type) return; @@ -4350,39 +4848,45 @@ 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); - const uint8* timeToSpriteMap; - if (rideEntry->flags & RIDE_ENTRY_FLAG_ALTERNATIVE_ROTATION_MODE_1) { + const uint8 * timeToSpriteMap; + if (rideEntry->flags & RIDE_ENTRY_FLAG_ALTERNATIVE_ROTATION_MODE_1) + { timeToSpriteMap = Rotation1TimeToSpriteMaps[vehicle->sub_state]; } - else if (rideEntry->flags & RIDE_ENTRY_FLAG_ALTERNATIVE_ROTATION_MODE_2) { + else if (rideEntry->flags & RIDE_ENTRY_FLAG_ALTERNATIVE_ROTATION_MODE_2) + { timeToSpriteMap = Rotation2TimeToSpriteMaps[vehicle->sub_state]; } - else { + else + { timeToSpriteMap = Rotation3TimeToSpriteMaps[vehicle->sub_state]; } sint32 time = (sint16)vehicle->current_time; - if (_vehicleBreakdown == BREAKDOWN_CONTROL_FAILURE) { + if (_vehicleBreakdown == BREAKDOWN_CONTROL_FAILURE) + { time += (ride->breakdown_sound_modifier >> 6) + 1; } time++; uint8 sprite = timeToSpriteMap[(uint32)time]; - if (sprite != 0xFF) { + if (sprite != 0xFF) + { vehicle->current_time = (uint16)time; if (sprite == vehicle->vehicle_sprite_type) return; @@ -4393,9 +4897,11 @@ static void vehicle_update_rotating(rct_vehicle* vehicle) { vehicle->current_time = -1; vehicle->var_CE++; - if (_vehicleBreakdown != BREAKDOWN_CONTROL_FAILURE) { + if (_vehicleBreakdown != BREAKDOWN_CONTROL_FAILURE) + { bool shouldStop = true; - if (ride->status != RIDE_STATUS_CLOSED) { + if (ride->status != RIDE_STATUS_CLOSED) + { sprite = vehicle->var_CE + 1; if (ride->type == RIDE_TYPE_ENTERPRISE) sprite += 9; @@ -4404,12 +4910,14 @@ static void vehicle_update_rotating(rct_vehicle* vehicle) { shouldStop = false; } - if (shouldStop == true) { - if (vehicle->sub_state == 2) { + if (shouldStop == true) + { + if (vehicle->sub_state == 2) + { 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++; @@ -4418,12 +4926,12 @@ static void vehicle_update_rotating(rct_vehicle* vehicle) { } } - if (ride->type == RIDE_TYPE_ENTERPRISE && - vehicle->sub_state == 2) { + if (ride->type == RIDE_TYPE_ENTERPRISE && vehicle->sub_state == 2) + { vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; return; } @@ -4435,23 +4943,27 @@ 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; uint8 spriteType = SpaceRingsTimeToSpriteMap[vehicle->current_time + 1]; - if (spriteType != 255) { + if (spriteType != 255) + { vehicle->current_time++; - if (spriteType != vehicle->vehicle_sprite_type) { + if (spriteType != vehicle->vehicle_sprite_type) + { vehicle->vehicle_sprite_type = spriteType; vehicle_invalidate(vehicle); } - } else { + } + else + { vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; } } @@ -4459,12 +4971,15 @@ 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; - if (vehicle->vehicle_sprite_type != 0) { - if (gCurrentTicks & 1) { + if (vehicle->vehicle_sprite_type != 0) + { + if (gCurrentTicks & 1) + { vehicle->vehicle_sprite_type++; vehicle_invalidate(vehicle); @@ -4473,51 +4988,37 @@ static void vehicle_update_haunted_house_operating(rct_vehicle* vehicle) { } } - if (vehicle->current_time + 1 > 1500) { + if (vehicle->current_time + 1 > 1500) + { 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) { + switch (vehicle->current_time) + { case 45: - audio_play_sound_at_location( - SOUND_HAUNTED_HOUSE_SCARE, - vehicle->x, - vehicle->y, - vehicle->z); + 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); + 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); + 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); + audio_play_sound_at_location(SOUND_HAUNTED_HOUSE_SCREAM_2, vehicle->x, vehicle->y, vehicle->z); break; } } @@ -4526,16 +5027,18 @@ 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; // Originally used an array of size 1 at 0x009A0AC4 and passed the sub state into it. - if ((uint16)(vehicle->current_time + 1) > 600) { + if ((uint16)(vehicle->current_time + 1) > 600) + { vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; return; } @@ -4546,20 +5049,24 @@ 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 rotation = sprite_map[vehicle->current_time + 1].arm_rotation; - if (rotation != 0xFF) { + uint8 rotation = sprite_map[vehicle->current_time + 1].arm_rotation; + if (rotation != 0xFF) + { vehicle->current_time = vehicle->current_time + 1; - if (rotation != vehicle->vehicle_sprite_type) { + if (rotation != vehicle->vehicle_sprite_type) + { vehicle->vehicle_sprite_type = rotation; vehicle_invalidate(vehicle); } rotation = sprite_map[vehicle->current_time].bank_rotation; - if (rotation != vehicle->bank_rotation) { + if (rotation != vehicle->bank_rotation) + { vehicle->bank_rotation = rotation; vehicle_invalidate(vehicle); } @@ -4569,30 +5076,32 @@ 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) { sint32 currentTime, totalTime; if (_vehicleBreakdown == 0) return; - totalTime = RideFilmLength[vehicle->sub_state]; + totalTime = RideFilmLength[vehicle->sub_state]; currentTime = vehicle->current_time + 1; - if (currentTime <= totalTime) { + if (currentTime <= totalTime) + { vehicle->current_time = currentTime; } - else { + else + { vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; } } @@ -4600,19 +5109,22 @@ 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; sint32 currentTime = vehicle->current_time + 1; - if (currentTime <= 5000) { + if (currentTime <= 5000) + { vehicle->current_time = currentTime; - } else { + } + else + { vehicle->status = VEHICLE_STATUS_ARRIVING; vehicle_invalidate_window(vehicle); vehicle->sub_state = 0; - vehicle->var_C0 = 0; + vehicle->var_C0 = 0; } } @@ -4621,26 +5133,30 @@ 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_map_element* vehicle_check_collision(sint16 x, sint16 y, sint16 z) { - rct_map_element* mapElement = map_get_first_element_at(x / 32, y / 32); +static rct_map_element * vehicle_check_collision(sint16 x, sint16 y, sint16 z) +{ + rct_map_element * mapElement = map_get_first_element_at(x / 32, y / 32); if (mapElement == NULL) { return NULL; } uint8 bl; - if ((x & 0x1F) >= 16) { + if ((x & 0x1F) >= 16) + { bl = 1; if ((y & 0x1F) < 16) bl = 2; } - else { + else + { bl = 4; if ((y & 0x1F) >= 16) bl = 8; } - do { + do + { if (z / 8 < mapElement->base_height) continue; @@ -4658,37 +5174,40 @@ static rct_map_element* vehicle_check_collision(sint16 x, sint16 y, sint16 z) { * * rct2: 0x006DE6C6 */ -static void vehicle_kill_all_passengers(rct_vehicle* vehicle) { +static void vehicle_kill_all_passengers(rct_vehicle * vehicle) +{ uint16 numFatalities = 0; uint16 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, numFatalities); - uint8 crashType = numFatalities == 0 ? - RIDE_CRASH_TYPE_NO_FATALITIES : - RIDE_CRASH_TYPE_FATALITIES; + uint8 crashType = numFatalities == 0 ? RIDE_CRASH_TYPE_NO_FATALITIES : RIDE_CRASH_TYPE_FATALITIES; if (crashType >= ride->last_crash_type) ride->last_crash_type = crashType; - if (numFatalities != 0) { + if (numFatalities != 0) + { set_format_arg(2, rct_string_id, ride->name); set_format_arg(4, uint32, ride->name_arguments); news_item_add_to_queue(NEWS_ITEM_RIDE, STR_X_PEOPLE_DIED_ON_X, vehicle->ride); - if (gParkRatingCasualtyPenalty < 500) { + if (gParkRatingCasualtyPenalty < 500) + { gParkRatingCasualtyPenalty += 200; } } 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); if (curVehicle->num_peeps != curVehicle->next_free_seat) @@ -4697,31 +5216,35 @@ static void vehicle_kill_all_passengers(rct_vehicle* vehicle) { if (curVehicle->num_peeps == 0) continue; - for (uint8 i = 0; i < curVehicle->num_peeps; i++) { - rct_peep* peep = GET_PEEP(curVehicle->peep[i]); - if (peep->outside_of_park == 0) { + for (uint8 i = 0; i < curVehicle->num_peeps; i++) + { + rct_peep * peep = GET_PEEP(curVehicle->peep[i]); + if (peep->outside_of_park == 0) + { decrement_guests_in_park(); - gToolbarDirtyFlags |= - BTM_TB_DIRTY_FLAG_PEEP_COUNT; + gToolbarDirtyFlags |= BTM_TB_DIRTY_FLAG_PEEP_COUNT; } ride->num_riders--; 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); - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { + Ride * ride = get_ride(vehicle->ride); + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) + { - rct_vehicle* frontVehicle = vehicle; - while (frontVehicle->is_child != 0)frontVehicle = GET_VEHICLE(frontVehicle->prev_vehicle_on_ride); + rct_vehicle * frontVehicle = vehicle; + while (frontVehicle->is_child != 0) + frontVehicle = GET_VEHICLE(frontVehicle->prev_vehicle_on_ride); int trainIndex = ride_get_train_index_from_vehicle(ride, frontVehicle->sprite_index); if (trainIndex == VEHICLE_INVALID_ID) @@ -4731,14 +5254,16 @@ static void vehicle_crash_on_land(rct_vehicle* vehicle) { ride_crash(vehicle->ride, trainIndex); - if (ride->status != RIDE_STATUS_CLOSED) { + if (ride->status != RIDE_STATUS_CLOSED) + { ride_set_status(vehicle->ride, RIDE_STATUS_CLOSED); } } ride->lifecycle_flags |= RIDE_LIFECYCLE_CRASHED; ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST; - if (vehicle->is_child == 0) { + if (vehicle->is_child == 0) + { vehicle_kill_all_passengers(vehicle); } @@ -4748,33 +5273,36 @@ static void vehicle_crash_on_land(rct_vehicle* vehicle) { sprite_misc_explosion_cloud_create(vehicle->x, vehicle->y, vehicle->z); sprite_misc_explosion_flare_create(vehicle->x, vehicle->y, vehicle->z); - uint8 numParticles = min(vehicle->sprite_width, 7); + uint8 numParticles = Math::Min(vehicle->sprite_width, static_cast(7)); while (numParticles-- != 0) crashed_vehicle_particle_create(vehicle->colours, vehicle->x, vehicle->y, vehicle->z); vehicle->flags |= SPRITE_FLAGS_IS_CRASHED_VEHICLE_SPRITE; - vehicle->var_C5 = 0; - vehicle->var_C8 = 0; - vehicle->sprite_width = 13; + vehicle->var_C5 = 0; + 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->var_4E = 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); - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { + Ride * ride = get_ride(vehicle->ride); + if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) + { - rct_vehicle* frontVehicle = vehicle; - while (frontVehicle->is_child != 0)frontVehicle = GET_VEHICLE(frontVehicle->prev_vehicle_on_ride); + rct_vehicle * frontVehicle = vehicle; + while (frontVehicle->is_child != 0) + frontVehicle = GET_VEHICLE(frontVehicle->prev_vehicle_on_ride); int trainIndex = ride_get_train_index_from_vehicle(ride, frontVehicle->sprite_index); if (trainIndex == VEHICLE_INVALID_ID) @@ -4784,14 +5312,16 @@ static void vehicle_crash_on_water(rct_vehicle* vehicle) { ride_crash(vehicle->ride, trainIndex); - if (ride->status != RIDE_STATUS_CLOSED) { + if (ride->status != RIDE_STATUS_CLOSED) + { ride_set_status(vehicle->ride, RIDE_STATUS_CLOSED); } } ride->lifecycle_flags |= RIDE_LIFECYCLE_CRASHED; ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST; - if (vehicle->is_child == 0) { + if (vehicle->is_child == 0) + { vehicle_kill_all_passengers(vehicle); } @@ -4808,82 +5338,87 @@ static void vehicle_crash_on_water(rct_vehicle* vehicle) { crashed_vehicle_particle_create(vehicle->colours, vehicle->x - 4, vehicle->y + 8, vehicle->z); vehicle->flags |= SPRITE_FLAGS_IS_CRASHED_VEHICLE_SPRITE; - vehicle->var_C5 = 0; - vehicle->var_C8 = 0; - vehicle->sprite_width = 13; + vehicle->var_C5 = 0; + 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->var_4E = 0xFFFF; + vehicle->var_4E = 0xFFFFu; } /** * * rct2: 0x006D98CA */ -static void vehicle_update_crash(rct_vehicle *vehicle){ - uint16 spriteId = vehicle->sprite_index; - rct_vehicle* curVehicle; - do { +static void vehicle_update_crash(rct_vehicle * vehicle) +{ + uint16 spriteId = vehicle->sprite_index; + rct_vehicle * curVehicle; + do + { curVehicle = GET_VEHICLE(spriteId); - if (curVehicle->sub_state > 1) { - if (curVehicle->var_4E <= 96) { + if (curVehicle->sub_state > 1) + { + if (curVehicle->var_4E <= 96) + { curVehicle->var_4E++; - if ((scenario_rand() & 0xFFFF) <= 0x1555) { - sprite_misc_explosion_cloud_create( - curVehicle->x + ((scenario_rand() & 2) - 1), - curVehicle->y + ((scenario_rand() & 2) - 1), - curVehicle->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); } } - if (curVehicle->var_C8 + 7281 > 0xFFFF) { + if (curVehicle->var_C8 + 7281 > 0xFFFF) + { curVehicle->var_C5++; if (curVehicle->var_C5 >= 8) curVehicle->var_C5 = 0; - invalidate_sprite_2((rct_sprite*)curVehicle); + invalidate_sprite_2((rct_sprite *)curVehicle); } curVehicle->var_C8 += 7281; continue; } - rct_map_element* collideElement = vehicle_check_collision(curVehicle->x, curVehicle->y, curVehicle->z); - if (collideElement == NULL) { + rct_map_element * collideElement = vehicle_check_collision(curVehicle->x, curVehicle->y, curVehicle->z); + if (collideElement == NULL) + { curVehicle->sub_state = 1; } - else if (curVehicle->sub_state == 1){ + else if (curVehicle->sub_state == 1) + { vehicle_crash_on_land(curVehicle); continue; } - sint32 z = map_element_height(curVehicle->x, curVehicle->y); + sint32 z = map_element_height(curVehicle->x, curVehicle->y); sint16 waterHeight = (z >> 16) & 0xFFFF; - z = (sint16)(z & 0xFFFF); + z = (sint16)(z & 0xFFFF); sint16 zDiff; - if (waterHeight != 0) { + if (waterHeight != 0) + { zDiff = curVehicle->z - waterHeight; - if (zDiff <= 0 && zDiff >= -20) { + if (zDiff <= 0 && zDiff >= -20) + { vehicle_crash_on_water(curVehicle); continue; } } zDiff = curVehicle->z - z; - if ((zDiff <= 0 && zDiff >= -20) || curVehicle->z < 16){ + if ((zDiff <= 0 && zDiff >= -20) || curVehicle->z < 16) + { vehicle_crash_on_land(curVehicle); continue; } - invalidate_sprite_2((rct_sprite*)curVehicle); + invalidate_sprite_2((rct_sprite *)curVehicle); - LocationXYZ16 curPosition = { - .x = curVehicle->x, - .y = curVehicle->y, - .z = curVehicle->z - }; + LocationXYZ16 curPosition = { static_cast(curVehicle->x), static_cast(curVehicle->y), + static_cast(curVehicle->z) }; curPosition.x += (sint8)(curVehicle->var_B6 >> 8); curPosition.y += (sint8)(curVehicle->var_C0 >> 8); @@ -4892,16 +5427,17 @@ static void vehicle_update_crash(rct_vehicle *vehicle){ curVehicle->track_y = (sint16)(curVehicle->var_C0 << 8); curVehicle->track_z = (sint16)(curVehicle->var_4E << 8); - if (curPosition.x > 0x1FFF || - curPosition.y > 0x1FFF) { + if (curPosition.x > 0x1FFF || curPosition.y > 0x1FFF) + { vehicle_crash_on_land(curVehicle); 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) { + if (curVehicle->sub_state == 1) + { curVehicle->var_4E += 0xFFEC; } } while ((spriteId = curVehicle->next_vehicle_on_train) != SPRITE_INDEX_NULL); @@ -4910,17 +5446,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 frictionVolume = 255, frictionId = 255; // bh screamVolume should be set before hand - uint8 screamId = 255, screamVolume = 255; + uint8 screamId = 255, screamVolume = 255; uint16 soundIdVolume; - ride = get_ride(vehicle->ride); + ride = get_ride(vehicle->ride); rideEntry = get_ride_entry(vehicle->ride_subtype); if (rideEntry == NULL) @@ -4928,50 +5464,59 @@ 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]; sint32 ecx = abs(vehicle->velocity) - 0x10000; - if (ecx >= 0) { + if (ecx >= 0) + { frictionId = vehicleEntry->friction_sound_id; ecx >>= 15; - frictionVolume = min(208 + (ecx & 0xFF), 255); + frictionVolume = Math::Min(208 + (ecx & 0xFF), 255); } - switch (vehicleEntry->sound_range) { + switch (vehicleEntry->sound_range) + { case 3: screamId = vehicle->scream_sound_id; - if (!(gCurrentTicks & 0x7F)) { + if (!(gCurrentTicks & 0x7F)) + { if (vehicle->velocity < 0x40000 || vehicle->scream_sound_id != 255) goto loc_6D7A97; - if ((scenario_rand() & 0xFFFF) <= 0x5555) { + if ((scenario_rand() & 0xFFFF) <= 0x5555) + { vehicle->scream_sound_id = SOUND_TRAIN_WHISTLE; - screamVolume = 255; + screamVolume = 255; break; } } - if (screamId == NO_SCREAM) screamId = 255; + if (screamId == NO_SCREAM) + screamId = 255; screamVolume = 255; break; case 4: screamId = vehicle->scream_sound_id; - if (!(gCurrentTicks & 0x7F)) { + if (!(gCurrentTicks & 0x7F)) + { if (vehicle->velocity < 0x40000 || vehicle->scream_sound_id != 255) goto loc_6D7A97; - if ((scenario_rand() & 0xFFFF) <= 0x5555) { + if ((scenario_rand() & 0xFFFF) <= 0x5555) + { vehicle->scream_sound_id = SOUND_TRAM; - screamVolume = 255; + screamVolume = 255; break; } } - if (screamId == NO_SCREAM) screamId = 255; + if (screamId == NO_SCREAM) + screamId = 255; screamVolume = 255; break; default: - if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_RIDERS_SCREAM)) { + if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_RIDERS_SCREAM)) + { screamId = vehicle_update_scream_sound(vehicle); if (screamId == NO_SCREAM) screamId = 255; @@ -4982,9 +5527,10 @@ static void vehicle_update_sound(rct_vehicle *vehicle) loc_6D7A97: vehicle->scream_sound_id = 255; - if (ride->type < countof(RideLiftData)) { + if (ride->type < Util::CountOf(RideLiftData)) + { // Get lift hill sound - screamId = RideLiftData[ride->type].sound_id; + screamId = RideLiftData[ride->type].sound_id; screamVolume = 243; if (!(vehicle->var_B8 & 2)) screamId = 255; @@ -4992,19 +5538,19 @@ static void vehicle_update_sound(rct_vehicle *vehicle) } // 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; { sint32 ebx = word_9A3684[vehicle->sprite_direction]; sint32 eax = ((vehicle->velocity >> 14) * ebx) >> 14; - eax = clamp(-127, eax, 127); + eax = Math::Clamp(-127, eax, 127); vehicle->var_BF = eax & 0xFF; } @@ -5014,27 +5560,29 @@ static void vehicle_update_sound(rct_vehicle *vehicle) * * rct2: 0x006D796B */ -static sint32 vehicle_update_scream_sound(rct_vehicle *vehicle) +static sint32 vehicle_update_scream_sound(rct_vehicle * vehicle) { - uint32 r; - uint16 spriteIndex; - rct_ride_entry *rideEntry; - rct_vehicle *vehicle2; + uint32 r; + uint16 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]; sint32 totalNumPeeps = vehicle_get_total_num_peeps(vehicle); if (totalNumPeeps == 0) return 255; - if (vehicle->velocity < 0) { + if (vehicle->velocity < 0) + { if (vehicle->velocity > -0x2C000) return 255; spriteIndex = vehicle->sprite_index; - do { + do + { vehicle2 = &(get_sprite(spriteIndex)->vehicle); if (vehicle2->vehicle_sprite_type < 1) continue; @@ -5052,7 +5600,8 @@ static sint32 vehicle_update_scream_sound(rct_vehicle *vehicle) return 255; spriteIndex = vehicle->sprite_index; - do { + do + { vehicle2 = &(get_sprite(spriteIndex)->vehicle); if (vehicle2->vehicle_sprite_type < 5) continue; @@ -5066,10 +5615,13 @@ static sint32 vehicle_update_scream_sound(rct_vehicle *vehicle) return 255; produceScream: - if (vehicle->scream_sound_id == 255) { + if (vehicle->scream_sound_id == 255) + { r = scenario_rand(); - if (totalNumPeeps >= (sint32)(r % 16)) { - switch (vehicleEntry->sound_range) { + if (totalNumPeeps >= (sint32)(r % 16)) + { + switch (vehicleEntry->sound_range) + { case 0: vehicle->scream_sound_id = byte_9A3A14[r % 2]; break; @@ -5083,7 +5635,9 @@ produceScream: vehicle->scream_sound_id = NO_SCREAM; break; } - } else { + } + else + { vehicle->scream_sound_id = NO_SCREAM; } } @@ -5097,27 +5651,28 @@ produceScream: * dx: lateralG * esi: vehicle */ -void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *lateralG) +void vehicle_get_g_forces(rct_vehicle * vehicle, sint32 * verticalG, sint32 * lateralG) { - sint32 gForceVert = (((sint64)0x280000) * Unk9A37E4[vehicle->vehicle_sprite_type]) >> 32; - gForceVert = (((sint64)gForceVert) * Unk9A39C4[vehicle->bank_rotation]) >> 32; + sint32 gForceVert = (((sint64)0x280000) * Unk9A37E4[vehicle->vehicle_sprite_type]) >> 32; + gForceVert = (((sint64)gForceVert) * Unk9A39C4[vehicle->bank_rotation]) >> 32; sint32 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) { + 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_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_RIGHT_BANK_TO_FLAT: // case TRACK_ELEM_LEFT_BANK: case TRACK_ELEM_RIGHT_BANK: case TRACK_ELEM_TOWER_BASE: @@ -5176,11 +5731,11 @@ void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *later 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 + // 6d73FF // Do nothing break; - case TRACK_ELEM_FLAT_TO_25_DEG_UP:// - case TRACK_ELEM_25_DEG_DOWN_TO_FLAT:// + 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: @@ -5196,10 +5751,10 @@ void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *later case TRACK_ELEM_LEFT_BANKED_25_DEG_DOWN_TO_FLAT: case TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_FLAT: vertFactor = 103; - //6d7509 + // 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_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: @@ -5216,23 +5771,23 @@ void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *later case TRACK_ELEM_FLAT_TO_LEFT_BANKED_25_DEG_DOWN: case TRACK_ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN: vertFactor = -103; - //6d7569 + // 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: // + 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 + // 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: // + 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 + // 6d7551 break; - case TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES:// + 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: @@ -5244,9 +5799,9 @@ void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *later case TRACK_ELEM_LEFT_FLYER_TWIST_DOWN: case TRACK_ELEM_LEFT_HEARTLINE_ROLL: lateralFactor = 98; - //6d7590 + // 6d7590 break; - case TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES:// + 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: @@ -5258,40 +5813,40 @@ void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *later case TRACK_ELEM_RIGHT_FLYER_TWIST_DOWN: case TRACK_ELEM_RIGHT_HEARTLINE_ROLL: lateralFactor = -98; - //6d75B7 + // 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; + vertFactor = 200; lateralFactor = 160; - //6d75E1 + // 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; + vertFactor = 200; lateralFactor = -160; - //6d75F0 + // 6d75F0 break; case TRACK_ELEM_S_BEND_LEFT: case TRACK_ELEM_S_BEND_LEFT_COVERED: lateralFactor = (vehicle->track_progress < 48) ? 98 : -98; - //6d75FF + // 6d75FF break; case TRACK_ELEM_S_BEND_RIGHT: case TRACK_ELEM_S_BEND_RIGHT_COVERED: lateralFactor = (vehicle->track_progress < 48) ? -98 : 98; - //6d7608 + // 6d7608 break; case TRACK_ELEM_LEFT_VERTICAL_LOOP: case TRACK_ELEM_RIGHT_VERTICAL_LOOP: vertFactor = (abs(vehicle->track_progress - 155) / 2) + 28; - //6d7690 + // 6d7690 break; case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES: case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP: @@ -5299,7 +5854,7 @@ void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *later case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED: case TRACK_ELEM_LEFT_CURVED_LIFT_HILL: lateralFactor = 59; - //6d7704 + // 6d7704 break; case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES: case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP: @@ -5307,76 +5862,76 @@ void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *later case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED: case TRACK_ELEM_RIGHT_CURVED_LIFT_HILL: lateralFactor = -59; - //6d7710 + // 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; + vertFactor = 100; lateralFactor = 100; - //6d7782 + // 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; + vertFactor = 100; lateralFactor = -100; - //6d778E + // 6d778E break; case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE: lateralFactor = 45; - //6d779A + // 6d779A break; case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE: lateralFactor = -45; - //6d77A3 + // 6d77A3 break; case TRACK_ELEM_HALF_LOOP_UP: case TRACK_ELEM_FLYER_HALF_LOOP_UP: vertFactor = (((uint16)(-(vehicle->track_progress - 155))) / 2) + 28; - //6d763E + // 6d763E break; case TRACK_ELEM_HALF_LOOP_DOWN: case TRACK_ELEM_FLYER_HALF_LOOP_DOWN: vertFactor = (vehicle->track_progress / 2) + 28; - //6d7656 + // 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; + vertFactor = 52; lateralFactor = 70; - //6d76AA + // 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; + vertFactor = 52; lateralFactor = -70; - //6d76B9 + // 6d76B9 break; case TRACK_ELEM_FLAT_TO_60_DEG_UP: case TRACK_ELEM_60_DEG_DOWN_TO_FLAT: vertFactor = 56; - //6d747C + // 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 + // 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 + // 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 + // 6d7779 break; case TRACK_ELEM_WATER_SPLASH: vertFactor = -150; @@ -5392,54 +5947,54 @@ void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *later if (vehicle->track_progress < 128) break; vertFactor = -150; - //6d7408 + // 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 + // 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 + // 6d74FD break; case TRACK_ELEM_REVERSE_FREEFALL_SLOPE: case TRACK_ELEM_AIR_THRUST_VERTICAL_DOWN_TO_LEVEL: vertFactor = 120; - //6d7458 + // 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 + // 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 + // 6d7521 break; case TRACK_ELEM_LEFT_EIGHTH_TO_DIAG: case TRACK_ELEM_LEFT_EIGHTH_TO_ORTHOGONAL: lateralFactor = 137; - //6d7575 + // 6d7575 break; case TRACK_ELEM_RIGHT_EIGHTH_TO_DIAG: case TRACK_ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL: lateralFactor = -137; - //6d759C + // 6d759C break; case TRACK_ELEM_LEFT_EIGHTH_BANK_TO_DIAG: case TRACK_ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL: - vertFactor = 270; + vertFactor = 270; lateralFactor = 200; - //6d75C3 + // 6d75C3 break; case TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_DIAG: case TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL: - vertFactor = 270; + vertFactor = 270; lateralFactor = -200; - //6d75D2 + // 6d75D2 break; case TRACK_ELEM_DIAG_FLAT_TO_25_DEG_UP: case TRACK_ELEM_DIAG_25_DEG_DOWN_TO_FLAT: @@ -5448,7 +6003,7 @@ void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *later case TRACK_ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK: case TRACK_ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK: vertFactor = 113; - //6d7494 + // 6d7494 break; case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: case TRACK_ELEM_DIAG_FLAT_TO_25_DEG_DOWN: @@ -5457,69 +6012,69 @@ void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *later case TRACK_ELEM_DIAG_LEFT_BANK_TO_25_DEG_DOWN: case TRACK_ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN: vertFactor = -113; - //6d755D + // 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 + // 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 + // 6D7539 break; case TRACK_ELEM_DIAG_FLAT_TO_60_DEG_UP: case TRACK_ELEM_DIAG_60_DEG_DOWN_TO_FLAT: vertFactor = 60; - //6D7464 + // 6D7464 break; case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: case TRACK_ELEM_DIAG_FLAT_TO_60_DEG_DOWN: vertFactor = -60; - //6d7470 + // 6d7470 break; case TRACK_ELEM_LEFT_BARREL_ROLL_UP_TO_DOWN: case TRACK_ELEM_LEFT_BARREL_ROLL_DOWN_TO_UP: - vertFactor = 170; + vertFactor = 170; lateralFactor = 115; - //6d7581 + // 6d7581 break; case TRACK_ELEM_RIGHT_BARREL_ROLL_UP_TO_DOWN: case TRACK_ELEM_RIGHT_BARREL_ROLL_DOWN_TO_UP: - vertFactor = 170; + vertFactor = 170; lateralFactor = -115; - //6d75A8 + // 6d75A8 break; case TRACK_ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP: - vertFactor = -(vehicle->track_progress / 2) + 134; + vertFactor = -(vehicle->track_progress / 2) + 134; lateralFactor = 90; - //6d771C + // 6d771C break; case TRACK_ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP: - vertFactor = -(vehicle->track_progress / 2) + 134; + vertFactor = -(vehicle->track_progress / 2) + 134; lateralFactor = -90; - //6D7746 + // 6D7746 break; case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK: - vertFactor = -(vehicle->track_progress / 2) + 134; + vertFactor = -(vehicle->track_progress / 2) + 134; lateralFactor = 90; - //6D7731 identical to 6d771c + // 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; + vertFactor = -(vehicle->track_progress / 2) + 134; lateralFactor = -90; - //6D775B identical to 6d7746 + // 6D775B identical to 6d7746 break; case TRACK_ELEM_LEFT_LARGE_HALF_LOOP_UP: case TRACK_ELEM_RIGHT_LARGE_HALF_LOOP_UP: vertFactor = (((uint16)(-(vehicle->track_progress - 311))) / 4) + 46; - //6d7666 + // 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 + // 6d767F break; case TRACK_ELEM_HEARTLINE_TRANSFER_UP: vertFactor = 103; @@ -5535,7 +6090,7 @@ void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *later if (vehicle->track_progress < 128) break; vertFactor = -103; - //6d74A0 + // 6d74A0 break; case TRACK_ELEM_HEARTLINE_TRANSFER_DOWN: vertFactor = -103; @@ -5551,57 +6106,59 @@ void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *later if (vehicle->track_progress < 128) break; vertFactor = 103; - //6D74CA + // 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 + // 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)(-(vehicle->track_progress - 137))) / 4) + 55; - //6D7614 + // 6D7614 break; case TRACK_ELEM_AIR_THRUST_TOP_CAP: vertFactor = -60; - //6D744C + // 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; + vertFactor = 200; lateralFactor = 100; - //6d76C8 + // 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; + vertFactor = 200; lateralFactor = -100; - //6d76d7 + // 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; + vertFactor = 200; lateralFactor = 160; - //6D76E6 + // 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; + vertFactor = 200; lateralFactor = -160; - //6d76F5 + // 6d76F5 break; } sint32 gForceLateral = 0; - if (vertFactor != 0) { + if (vertFactor != 0) + { gForceVert += abs(vehicle->velocity) * 98 / vertFactor; } - if (lateralFactor != 0) { + if (lateralFactor != 0) + { gForceLateral += abs(vehicle->velocity) * 98 / lateralFactor; } @@ -5610,18 +6167,21 @@ void vehicle_get_g_forces(rct_vehicle *vehicle, sint32 *verticalG, sint32 *later gForceVert >>= 16; gForceLateral >>= 16; - if (verticalG != NULL) *verticalG = (sint16)(gForceVert & 0xFFFF); - if (lateralG != NULL) *lateralG = (sint16)(gForceLateral & 0xFFFF); + if (verticalG != NULL) + *verticalG = (sint16)(gForceVert & 0xFFFF); + if (lateralG != NULL) + *lateralG = (sint16)(gForceLateral & 0xFFFF); } -void vehicle_set_map_toolbar(rct_vehicle *vehicle) +void vehicle_set_map_toolbar(rct_vehicle * vehicle) { - Ride *ride; + Ride * ride; sint32 vehicleIndex; ride = get_ride(vehicle->ride); - while (vehicle->is_child) { + while (vehicle->is_child) + { vehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride); } @@ -5637,18 +6197,19 @@ void vehicle_set_map_toolbar(rct_vehicle *vehicle) set_map_tooltip_format_arg(12, uint16, vehicleIndex + 1); rct_string_id formatSecondary; - sint32 arg1; + sint32 arg1; ride_get_status(vehicle->ride, &formatSecondary, &arg1); set_map_tooltip_format_arg(14, rct_string_id, formatSecondary); // TODO: odd cast set_map_tooltip_format_arg(16, uint32, (uint16)arg1); } -rct_vehicle *vehicle_get_head(rct_vehicle *vehicle) +rct_vehicle * vehicle_get_head(rct_vehicle * vehicle) { - rct_vehicle *prevVehicle; + rct_vehicle * prevVehicle; - for (;;) { + for (;;) + { prevVehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride); if (prevVehicle->next_vehicle_on_train == SPRITE_INDEX_NULL) break; @@ -5659,17 +6220,18 @@ rct_vehicle *vehicle_get_head(rct_vehicle *vehicle) return vehicle; } -rct_vehicle *vehicle_get_tail(rct_vehicle *vehicle) +rct_vehicle * vehicle_get_tail(rct_vehicle * vehicle) { uint16 spriteIndex; - while ((spriteIndex = vehicle->next_vehicle_on_train) != SPRITE_INDEX_NULL) { + while ((spriteIndex = vehicle->next_vehicle_on_train) != SPRITE_INDEX_NULL) + { vehicle = GET_VEHICLE(spriteIndex); } return vehicle; } -sint32 vehicle_is_used_in_pairs(rct_vehicle *vehicle) +sint32 vehicle_is_used_in_pairs(rct_vehicle * vehicle) { return vehicle->num_seats & VEHICLE_SEAT_PAIR_FLAG; } @@ -5678,39 +6240,45 @@ sint32 vehicle_is_used_in_pairs(rct_vehicle *vehicle) * * rct2: 0x006DA44E */ -static sint32 vehicle_update_motion_dodgems(rct_vehicle* vehicle) { +static sint32 vehicle_update_motion_dodgems(rct_vehicle * vehicle) +{ _vehicleMotionTrackFlags = 0; - Ride* ride = get_ride(vehicle->ride); + Ride * ride = get_ride(vehicle->ride); sint32 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) { + ride->breakdown_reason_pending == BREAKDOWN_SAFETY_CUT_OUT) + { nextVelocity = 0; } vehicle->velocity = nextVelocity; _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 (gCurrentTicks & 1 && - vehicle->var_34 != 0) { + ride->breakdown_reason_pending != BREAKDOWN_SAFETY_CUT_OUT) + { + if (gCurrentTicks & 1 && vehicle->var_34 != 0) + { - if (vehicle->var_34 > 0) { + if (vehicle->var_34 > 0) + { vehicle->var_34--; vehicle->sprite_direction += 2; } - else { + else + { vehicle->var_34++; vehicle->sprite_direction -= 2; } vehicle->sprite_direction &= 0x1E; vehicle_invalidate(vehicle); } - else if ((scenario_rand() & 0xFFFF) <= 2849) { + else if ((scenario_rand() & 0xFFFF) <= 2849) + { if (vehicle->var_35 & (1 << 6)) vehicle->sprite_direction -= 2; else @@ -5722,36 +6290,30 @@ static sint32 vehicle_update_motion_dodgems(rct_vehicle* vehicle) { uint16 collideSprite = 0xFFFF; - if (vehicle->var_C4 != 0) { - uint8 oldC4 = vehicle->var_C4 & 0x1E; + if (vehicle->var_C4 != 0) + { + uint8 oldC4 = vehicle->var_C4 & 0x1E; vehicle->var_C4 = 0; - LocationXYZ16 location = { - .x = vehicle->x, - .y = vehicle->y, - .z = vehicle->z - }; + LocationXYZ16 location = { vehicle->x, vehicle->y, vehicle->z }; location.x += Unk9A36C4[oldC4].x; location.y += Unk9A36C4[oldC4].y; location.x += Unk9A36C4[oldC4 + 1].x; location.y += Unk9A36C4[oldC4 + 1].y; - if (!vehicle_update_dodgems_collision(vehicle, location.x, location.y, &collideSprite)) { + 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); } } vehicle->remaining_distance += _vehicleVelocityF64E0C; - if (vehicle->remaining_distance >= 13962) { + if (vehicle->remaining_distance >= 13962) + { vehicle->var_B8 &= ~(1 << 1); unk_F64E20.x = vehicle->x; unk_F64E20.y = vehicle->y; @@ -5759,7 +6321,8 @@ static sint32 vehicle_update_motion_dodgems(rct_vehicle* vehicle) { vehicle_invalidate(vehicle); - while (1) { + while (1) + { vehicle->var_35++; uint8 direction = vehicle->sprite_direction; direction |= vehicle->var_35 & 1; @@ -5774,42 +6337,43 @@ static sint32 vehicle_update_motion_dodgems(rct_vehicle* vehicle) { vehicle->remaining_distance -= Unk9A36C4[direction].distance; unk_F64E20.x = location.x; unk_F64E20.y = location.y; - if (vehicle->remaining_distance < 13962) { + if (vehicle->remaining_distance < 13962) + { break; } _vehicleUnkF64E10++; } - if (vehicle->remaining_distance >= 13962) { - sint32 oldVelocity = vehicle->velocity; + if (vehicle->remaining_distance >= 13962) + { + sint32 oldVelocity = vehicle->velocity; vehicle->remaining_distance = 0; - vehicle->velocity = 0; - uint8 direction = vehicle->sprite_direction | 1; + vehicle->velocity = 0; + uint8 direction = vehicle->sprite_direction | 1; - if (collideSprite != 0xFFFF) { + if (collideSprite != 0xFFFF) + { vehicle->var_34 = (scenario_rand() & 1) ? 1 : -1; - if (oldVelocity >= 131072) { - rct_vehicle* collideVehicle = GET_VEHICLE(collideSprite); - collideVehicle->var_C4 = direction; - vehicle->var_C4 = direction ^ (1 << 4); + if (oldVelocity >= 131072) + { + rct_vehicle * collideVehicle = GET_VEHICLE(collideSprite); + collideVehicle->var_C4 = direction; + vehicle->var_C4 = direction ^ (1 << 4); } } - else { + else + { vehicle->var_34 = (scenario_rand() & 1) ? 6 : -6; - if (oldVelocity >= 131072) { + if (oldVelocity >= 131072) + { vehicle->var_C4 = direction ^ (1 << 4); } } } - 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); } @@ -5821,17 +6385,19 @@ static sint32 vehicle_update_motion_dodgems(rct_vehicle* vehicle) { edx >>= 5; eax += edx; eax /= vehicle->friction; - 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)) { + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED)) + { vehicle->acceleration = -eax; return _vehicleMotionTrackFlags; } - sint32 ebx = (vehicle->speed * vehicle->friction) >> 2; + sint32 ebx = (vehicle->speed * vehicle->friction) >> 2; sint32 _eax = vehicle->speed << 14; - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_3) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_3) + { _eax = -_eax; } _eax -= vehicle->velocity; @@ -5842,43 +6408,40 @@ static sint32 vehicle_update_motion_dodgems(rct_vehicle* vehicle) { return _vehicleMotionTrackFlags; } - - /** * * rct2: 0x006DD365 */ -bool vehicle_update_dodgems_collision(rct_vehicle *vehicle, sint16 x, sint16 y, uint16 *spriteId) +bool vehicle_update_dodgems_collision(rct_vehicle * vehicle, sint16 x, sint16 y, uint16 * spriteId) { - uint16 bp = (vehicle->var_44 * 30) >> 9; + uint16 bp = (vehicle->var_44 * 30) >> 9; uint32 trackType = vehicle->track_type >> 2; - sint16 rideLeft = vehicle->track_x + DodgemsTrackSize[trackType].left; - sint16 rideRight = vehicle->track_x + DodgemsTrackSize[trackType].right; - sint16 rideTop = vehicle->track_y + DodgemsTrackSize[trackType].top; + sint16 rideLeft = vehicle->track_x + DodgemsTrackSize[trackType].left; + sint16 rideRight = vehicle->track_x + DodgemsTrackSize[trackType].right; + sint16 rideTop = vehicle->track_y + DodgemsTrackSize[trackType].top; sint16 rideBottom = vehicle->track_y + DodgemsTrackSize[trackType].bottom; - if (x - bp < rideLeft || - y - bp < rideTop || - x + bp > rideRight || - y + bp > rideBottom) { + if (x - bp < rideLeft || y - bp < rideTop || x + bp > rideRight || y + bp > rideBottom) + { if (spriteId != NULL) *spriteId = SPRITE_INDEX_NULL; return true; } - LocationXY8 location = {.x = (x / 32), .y = (y / 32)}; - + LocationXY8 location = { static_cast(x / 32), static_cast(y / 32) }; uint8 rideIndex = vehicle->ride; - for (sint32 i = 0; i < countof(Unk9A37C4); i++) { + for (uint32 i = 0; i < Util::CountOf(Unk9A37C4); i++) + { location.x += Unk9A37C4[i].x; location.y += Unk9A37C4[i].y; uint16 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; + while (spriteIdx != SPRITE_INDEX_NULL) + { + rct_vehicle * vehicle2 = GET_VEHICLE(spriteIdx); + spriteIdx = vehicle2->next_in_quadrant; if (vehicle2 == vehicle) continue; @@ -5900,7 +6463,8 @@ bool vehicle_update_dodgems_collision(rct_vehicle *vehicle, sint16 x, sint16 y, sint32 ecx = (vehicle->var_44 + vehicle2->var_44) / 2; ecx *= 30; ecx >>= 8; - if (max(distX, distY) < ecx) { + if (Math::Max(distX, distY) < ecx) + { if (spriteId != NULL) *spriteId = vehicle2->sprite_index; return true; @@ -5915,48 +6479,65 @@ bool vehicle_update_dodgems_collision(rct_vehicle *vehicle, sint16 x, sint16 y, * * 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); - sint32 verticalG, lateralG; + rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + sint32 verticalG, lateralG; // No up stops (coaster types) - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_NO_UPSTOP_WHEELS) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_NO_UPSTOP_WHEELS) + { sint32 trackType = vehicle->track_type >> 2; - if (!track_element_is_covered(trackType)) { + if (!track_element_is_covered(trackType)) + { vehicle_get_g_forces(vehicle, &verticalG, &lateralG); lateralG = abs(lateralG); - if (lateralG <= 150) { - if (dword_9A2970[vehicle->vehicle_sprite_type] < 0) { - if (verticalG > -40) { + if (lateralG <= 150) + { + if (dword_9A2970[vehicle->vehicle_sprite_type] < 0) + { + if (verticalG > -40) + { return; } - } else if (verticalG > -80) { + } + else if (verticalG > -80) + { return; } } - if (vehicle->vehicle_sprite_type != 8) { + if (vehicle->vehicle_sprite_type != 8) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_DERAILED; } } - } else if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_NO_UPSTOP_BOBSLEIGH) { + } + else if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_NO_UPSTOP_BOBSLEIGH) + { // No up stops bobsleigh type sint32 trackType = vehicle->track_type >> 2; - if (!track_element_is_covered(trackType)) { + if (!track_element_is_covered(trackType)) + { vehicle_get_g_forces(vehicle, &verticalG, &lateralG); - if (dword_9A2970[vehicle->vehicle_sprite_type] < 0) { - if (verticalG > -45) { + if (dword_9A2970[vehicle->vehicle_sprite_type] < 0) + { + if (verticalG > -45) + { return; } - } else { - if (verticalG > -80) { + } + else + { + if (verticalG > -80) + { return; } } - if (vehicle->vehicle_sprite_type != 8 && vehicle->vehicle_sprite_type != 55) { + if (vehicle->vehicle_sprite_type != 8 && vehicle->vehicle_sprite_type != 55) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_DERAILED; } } @@ -5970,14 +6551,19 @@ 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) { - if (vehicle->velocity >= 0) { +static void apply_non_stop_block_brake(rct_vehicle * vehicle, bool block_brake_closed) +{ + if (vehicle->velocity >= 0) + { // If the vehicle is below the speed limit - if (vehicle->velocity <= 0x20364) { + 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){ + } + else if (block_brake_closed) + { // Slow it down till the fixed block brake speed vehicle->velocity -= vehicle->velocity >> 4; vehicle->acceleration = 0; @@ -5989,20 +6575,26 @@ static void apply_non_stop_block_brake(rct_vehicle *vehicle, bool block_brake_cl * * 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) { + if (is_block_brake_closed) + { // Slow it down till completely stop the car _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_10; vehicle->acceleration = 0; // If the vehicle is slow enough, stop it. If not, slow it down - if (vehicle->velocity <= 0x20000) { + if (vehicle->velocity <= 0x20000) + { vehicle->velocity = 0; - } else { + } + else + { vehicle->velocity -= vehicle->velocity >> 3; } - } else { + } + else + { #ifdef NEW_BLOCK_BRAKES apply_non_stop_block_brake(vehicle, false); #else @@ -6011,40 +6603,39 @@ 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); // Is chair lift type - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_28) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_28) + { sint32 velocity = ride->speed << 16; - if (_vehicleBreakdown == 0) { + if (_vehicleBreakdown == 0) + { velocity = 0; } - vehicle->velocity = velocity; + vehicle->velocity = velocity; vehicle->acceleration = 0; } sint32 trackType = vehicle->track_type >> 2; - rct_map_element *trackElement = map_get_track_element_at_of_type( - vehicle->track_x, - vehicle->track_y, - vehicle->track_z >> 3, - trackType - ); + rct_map_element * trackElement = + map_get_track_element_at_of_type(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType); - if (trackElement == NULL) { + if (trackElement == NULL) + { return; } - switch (trackType) { + switch (trackType) + { case TRACK_ELEM_BLOCK_BRAKES: if (ride_is_block_sectioned(ride)) apply_block_brakes(vehicle, trackElement->flags & MAP_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED); @@ -6062,9 +6653,12 @@ static void check_and_apply_block_section_stop_site(rct_vehicle *vehicle) 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)) { - if (trackElement->flags & MAP_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED) { + if (ride_is_block_sectioned(ride)) + { + if (trackType == TRACK_ELEM_CABLE_LIFT_HILL || track_element_is_lift_hill(trackElement)) + { + if (trackElement->flags & MAP_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED) + { apply_block_brakes(vehicle, true); } } @@ -6077,19 +6671,23 @@ 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) { sint32 nextVelocity = vehicle->acceleration + vehicle->velocity; - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_7) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_7) + { nextVelocity = 0; } - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_ON_BREAK_FOR_DROP) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_ON_BREAK_FOR_DROP) + { vehicle->vertical_drop_countdown--; - if (vehicle->vertical_drop_countdown == -70) { + if (vehicle->vertical_drop_countdown == -70) + { vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_ON_BREAK_FOR_DROP; } - if (vehicle->vertical_drop_countdown >= 0) { - nextVelocity = 0; + if (vehicle->vertical_drop_countdown >= 0) + { + nextVelocity = 0; vehicle->acceleration = 0; } } @@ -6099,71 +6697,77 @@ static void update_velocity(rct_vehicle *vehicle) _vehicleVelocityF64E0C = (nextVelocity >> 10) * 42; } -static void vehicle_update_block_brakes_open_previous_section(rct_vehicle *vehicle, rct_map_element *mapElement) +static void vehicle_update_block_brakes_open_previous_section(rct_vehicle * vehicle, rct_map_element * mapElement) { - sint32 x = vehicle->track_x; - sint32 y = vehicle->track_y; - sint32 z = vehicle->track_z; + sint32 x = vehicle->track_x; + sint32 y = vehicle->track_y; + sint32 z = vehicle->track_z; track_begin_end trackBeginEnd, slowTrackBeginEnd; rct_map_element slowMapElement = *mapElement; - bool counter = true; - sint32 slowX = x; - sint32 slowY = y; - do { - if (!track_block_get_previous(x, y, mapElement, &trackBeginEnd)) { + bool counter = true; + sint32 slowX = x; + sint32 slowY = y; + do + { + if (!track_block_get_previous(x, y, mapElement, &trackBeginEnd)) + { return; } - if (trackBeginEnd.begin_x == vehicle->track_x && - trackBeginEnd.begin_y == vehicle->track_y && - mapElement == trackBeginEnd.begin_element) { + if (trackBeginEnd.begin_x == vehicle->track_x && trackBeginEnd.begin_y == vehicle->track_y && + mapElement == 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; mapElement = trackBeginEnd.begin_element; //#2081: prevent infinite loop counter = !counter; - if (counter) { + if (counter) + { track_block_get_previous(slowX, slowY, &slowMapElement, &slowTrackBeginEnd); - slowX = slowTrackBeginEnd.end_x; - slowY = slowTrackBeginEnd.end_y; + slowX = slowTrackBeginEnd.end_x; + slowY = slowTrackBeginEnd.end_y; slowMapElement = *(slowTrackBeginEnd.begin_element); - if (slowX == x && - slowY == y && - slowMapElement.base_height == mapElement->base_height && - slowMapElement.type == mapElement->type ) { + if (slowX == x && slowY == y && slowMapElement.base_height == mapElement->base_height && + slowMapElement.type == mapElement->type) + { return; } } } 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; mapElement = map_get_track_element_at(x, y, z >> 3); - if (mapElement == NULL) { + if (mapElement == NULL) + { return; } mapElement->flags &= ~MAP_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED; map_invalidate_element(x, y, mapElement); sint32 trackType = mapElement->properties.track.type; - if (trackType == TRACK_ELEM_BLOCK_BRAKES || trackType == TRACK_ELEM_END_STATION) { - Ride *ride = get_ride(vehicle->ride); - if (ride_is_block_sectioned(ride)) { + if (trackType == TRACK_ELEM_BLOCK_BRAKES || trackType == TRACK_ELEM_END_STATION) + { + Ride * ride = get_ride(vehicle->ride); + if (ride_is_block_sectioned(ride)) + { audio_play_sound_at_location(SOUND_48, x, y, z); } } } -static sint32 vehicle_get_swing_amount(rct_vehicle *vehicle) +static sint32 vehicle_get_swing_amount(rct_vehicle * vehicle) { sint32 trackType = vehicle->track_type >> 2; - switch (trackType) { + 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: @@ -6199,18 +6803,24 @@ static sint32 vehicle_get_swing_amount(rct_vehicle *vehicle) case TRACK_ELEM_S_BEND_LEFT: case TRACK_ELEM_S_BEND_LEFT_COVERED: // loc_6D67EF - if (vehicle->track_progress < 48) { + if (vehicle->track_progress < 48) + { return 14; - } else { + } + else + { return -15; } case TRACK_ELEM_S_BEND_RIGHT: case TRACK_ELEM_S_BEND_RIGHT_COVERED: // loc_6D67CC - if (vehicle->track_progress < 48) { + if (vehicle->track_progress < 48) + { return -14; - } else { + } + else + { return 15; } @@ -6277,34 +6887,40 @@ static sint32 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) { sint32 dword_F64E08 = _vehicleVelocityF64E08; vehicle->var_4E += (-vehicle->swinging_car_var_0) >> 6; sint32 swingAmount = vehicle_get_swing_amount(vehicle); - if (swingAmount < 0) { + if (swingAmount < 0) + { vehicle->var_4E -= dword_F64E08 >> (-swingAmount); } - else if (swingAmount > 0){ + else if (swingAmount > 0) + { vehicle->var_4E += dword_F64E08 >> swingAmount; } - rct_ride_entry_vehicle *vehicleEntry = vehicle_get_vehicle_entry(vehicle); - sint16 dx = 3185; - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_21) { + rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + sint16 dx = 3185; + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_21) + { dx = 5006; } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_25) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_25) + { dx = 1820; } sint16 cx = -dx; - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_27) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_27) + { dx = 5370; cx = -5370; sint32 trackType = vehicle->track_type >> 2; - switch (trackType) { + 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: @@ -6319,7 +6935,8 @@ static void vehicle_update_swinging_car(rct_vehicle *vehicle) break; } - switch (trackType) { + switch (trackType) + { case TRACK_ELEM_END_STATION: case TRACK_ELEM_BEGIN_STATION: case TRACK_ELEM_MIDDLE_STATION: @@ -6330,7 +6947,8 @@ static void vehicle_update_swinging_car(rct_vehicle *vehicle) break; } - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_0) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_0) + { dx = 0; cx = 0; } @@ -6339,40 +6957,54 @@ static void vehicle_update_swinging_car(rct_vehicle *vehicle) vehicle->swinging_car_var_0 += vehicle->var_4E; vehicle->var_4E -= vehicle->var_4E >> 5; sint16 ax = vehicle->swinging_car_var_0; - if (ax > dx) { - ax = dx; + if (ax > dx) + { + ax = dx; vehicle->var_4E = 0; } - if (ax < cx) { - ax = cx; + if (ax < cx) + { + ax = cx; vehicle->var_4E = 0; } vehicle->swinging_car_var_0 = ax; - uint8 bl = 11; - if (ax >= -10012) { + uint8 bl = 11; + if (ax >= -10012) + { bl = 12; - if (ax <= 10012) { + if (ax <= 10012) + { bl = 9; - if (ax >= -8191) { + if (ax >= -8191) + { bl = 10; - if (ax <= 8191) { + if (ax <= 8191) + { bl = 7; - if (ax >= -6371) { + if (ax >= -6371) + { bl = 8; - if (ax <= 6371) { + if (ax <= 6371) + { bl = 5; - if (ax >= -4550) { + if (ax >= -4550) + { bl = 6; - if (ax <= 4550) { + if (ax <= 4550) + { bl = 3; - if (ax >= -2730) { + if (ax >= -2730) + { bl = 4; - if (ax <= 2730) { + if (ax <= 2730) + { bl = 1; - if (ax >= -910) { + if (ax >= -910) + { bl = 2; - if (ax <= 910) { + if (ax <= 910) + { bl = 0; } } @@ -6386,7 +7018,8 @@ static void vehicle_update_swinging_car(rct_vehicle *vehicle) } } } - if (bl != vehicle->var_4A) { + if (bl != vehicle->var_4A) + { vehicle->var_4A = bl; vehicle_invalidate(vehicle); } @@ -6394,7 +7027,8 @@ static void vehicle_update_swinging_car(rct_vehicle *vehicle) #pragma region off_9A2E84 -enum { +enum +{ loc_6D673C, loc_6D66F0, loc_6D672B, @@ -6412,262 +7046,32 @@ enum { }; static const uint8 off_9A2E84[256] = { - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D66F0, - loc_6D672B, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D66F0, - loc_6D672B, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D66F0, - loc_6D672B, - loc_6D66F0, - loc_6D672B, - loc_6D6711, - loc_6D66D6, - loc_6D673C, - loc_6D673C, - loc_6D66C3, - loc_6D66B0, - loc_6D66C3, - loc_6D66B0, - loc_6D66C3, - loc_6D66B0, - loc_6D66C3, - loc_6D66B0, - loc_6D669A, - loc_6D6684, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D66F0, - loc_6D672B, - loc_6D6711, - loc_6D66D6, - loc_6D66C3, - loc_6D66B0, - loc_6D66C3, - loc_6D66B0, - loc_6D66C3, - loc_6D66B0, - loc_6D66F0, - loc_6D672B, - loc_6D66F0, - loc_6D672B, - loc_6D669A, - loc_6D6684, - loc_6D669A, - loc_6D6684, - loc_6D673C, - loc_6D665A, - loc_6D673C, - loc_6D66F0, - loc_6D672B, - loc_6D66F0, - loc_6D672B, - loc_6D66F0, - loc_6D672B, - loc_6D66F0, - loc_6D672B, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D6708, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D6703, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D66DD, - loc_6D6718, - loc_6D66DD, - loc_6D6718, - loc_6D66DD, - loc_6D6718, - loc_6D66DD, - loc_6D6718, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D66C3, - loc_6D66B0, - loc_6D66C3, - loc_6D66B0, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D66C3, - loc_6D66B0, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D66C3, - loc_6D66B0, - loc_6D66C3, - loc_6D66B0, - loc_6D66F0, - loc_6D672B, - loc_6D66F0, - loc_6D672B, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C, - loc_6D673C + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D66F0, loc_6D672B, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D66F0, loc_6D672B, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D66F0, loc_6D672B, loc_6D66F0, loc_6D672B, loc_6D6711, loc_6D66D6, + loc_6D673C, loc_6D673C, loc_6D66C3, loc_6D66B0, loc_6D66C3, loc_6D66B0, loc_6D66C3, loc_6D66B0, loc_6D66C3, loc_6D66B0, + loc_6D669A, loc_6D6684, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D66F0, loc_6D672B, loc_6D6711, loc_6D66D6, loc_6D66C3, loc_6D66B0, loc_6D66C3, loc_6D66B0, loc_6D66C3, + loc_6D66B0, loc_6D66F0, loc_6D672B, loc_6D66F0, loc_6D672B, loc_6D669A, loc_6D6684, loc_6D669A, loc_6D6684, loc_6D673C, + loc_6D665A, loc_6D673C, loc_6D66F0, loc_6D672B, loc_6D66F0, loc_6D672B, loc_6D66F0, loc_6D672B, loc_6D66F0, loc_6D672B, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D6708, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D6703, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D66DD, loc_6D6718, loc_6D66DD, loc_6D6718, loc_6D66DD, loc_6D6718, loc_6D66DD, + loc_6D6718, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D66C3, loc_6D66B0, + loc_6D66C3, loc_6D66B0, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D66C3, + loc_6D66B0, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D66C3, loc_6D66B0, loc_6D66C3, + loc_6D66B0, loc_6D66F0, loc_6D672B, loc_6D66F0, loc_6D672B, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, + loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C, loc_6D673C }; #pragma endregion @@ -6676,25 +7080,30 @@ static const uint8 off_9A2E84[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_13) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_13) + { vehicle->var_B6 = 0; return; } - rct_ride_entry_vehicle *vehicleEntry = vehicle_get_vehicle_entry(vehicle); - sint32 spinningInertia = vehicleEntry->spinning_inertia; - sint32 trackType = vehicle->track_type >> 2; - sint32 dword_F64E08 = _vehicleVelocityF64E08; - sint32 unk; - switch (off_9A2E84[trackType]) { + rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + sint32 spinningInertia = vehicleEntry->spinning_inertia; + sint32 trackType = vehicle->track_type >> 2; + sint32 dword_F64E08 = _vehicleVelocityF64E08; + sint32 unk; + switch (off_9A2E84[trackType]) + { case loc_6D665A: spinningInertia += 6; unk = dword_F64E08 >> spinningInertia; - if (vehicle->sprite_index & 1) { + if (vehicle->sprite_index & 1) + { vehicle->var_B6 -= unk; - } else { + } + else + { vehicle->var_B6 += unk; } break; @@ -6716,7 +7125,8 @@ static void vehicle_update_spinning_car(rct_vehicle *vehicle) vehicle->var_B6 += dword_F64E08 >> spinningInertia; break; case loc_6D66D6: - if (vehicle->track_progress < 48) { + if (vehicle->track_progress < 48) + { spinningInertia += 8; vehicle->var_B6 += dword_F64E08 >> spinningInertia; break; @@ -6730,13 +7140,15 @@ static void vehicle_update_spinning_car(rct_vehicle *vehicle) vehicle->var_B6 += dword_F64E08 >> spinningInertia; break; case loc_6D6708: - if (vehicle->track_progress > 22) { + if (vehicle->track_progress > 22) + { spinningInertia += 5; vehicle->var_B6 += dword_F64E08 >> spinningInertia; } break; case loc_6D6711: - if (vehicle->track_progress < 48) { + if (vehicle->track_progress < 48) + { spinningInertia += 8; vehicle->var_B6 += dword_F64E08 >> spinningInertia; break; @@ -6751,7 +7163,7 @@ static void vehicle_update_spinning_car(rct_vehicle *vehicle) break; } - unk = clamp(-0x600, vehicle->var_B6, 0x600); + unk = Math::Clamp(static_cast(-0x600), vehicle->var_B6, static_cast(0x600)); vehicle->var_B6 = unk; vehicle->var_BA += unk >> 8; vehicle->var_B6 -= unk >> vehicleEntry->spinning_friction; @@ -6764,20 +7176,21 @@ static void vehicle_update_spinning_car(rct_vehicle *vehicle) */ static void steam_particle_create(sint16 x, sint16 y, sint16 z) { - rct_map_element *mapElement = map_get_surface_element_at(x >> 5, y >> 5); - if (mapElement != NULL && z > mapElement->base_height * 8) { - rct_steam_particle *steam = (rct_steam_particle*)create_sprite(2); + rct_map_element * mapElement = map_get_surface_element_at(x >> 5, y >> 5); + if (mapElement != NULL && z > mapElement->base_height * 8) + { + rct_steam_particle * steam = (rct_steam_particle *)create_sprite(2); if (steam == NULL) 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->var_24 = 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->var_24 = 0; + sprite_move(x, y, z, (rct_sprite *)steam); } } @@ -6785,41 +7198,43 @@ static void steam_particle_create(sint16 x, sint16 y, sint16 z) * * rct2: 0x006D63D4 */ -static void sub_6D63D4(rct_vehicle *vehicle) +static void sub_6D63D4(rct_vehicle * vehicle) { - uint8 al, ah; + uint8 al, ah; uint32 eax; - uint32 *var_C8 = (uint32*)&vehicle->var_C8; - rct_ride_entry_vehicle *vehicleEntry = vehicle_get_vehicle_entry(vehicle); - switch (vehicleEntry->var_11) { + uint32 * var_C8 = (uint32 *)&vehicle->var_C8; + rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); + switch (vehicleEntry->var_11) + { case 1: // loc_6D652B *var_C8 += _vehicleVelocityF64E08; al = (*var_C8 >> 20) & 3; - if (vehicle->var_C5 != al) { - ah = al; - al = vehicle->var_C5; + if (vehicle->var_C5 != al) + { + ah = al; + al = vehicle->var_C5; vehicle->var_C5 = ah; al &= 0x02; ah &= 0x02; - if (al != ah) { - Ride *ride = get_ride(vehicle->ride); + 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) - ) { + (vehicle->status != VEHICLE_STATUS_MOVING_TO_END_OF_STATION && vehicle->status != VEHICLE_STATUS_ARRIVING)) + { sint32 index = vehicle->sprite_direction >> 1; - if (vehicle->vehicle_sprite_type == 2) { + if (vehicle->vehicle_sprite_type == 2) + { index += 16; } - if (vehicle->vehicle_sprite_type == 6) { + 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 - ); + steam_particle_create(vehicle->x + SteamParticleOffsets[index].x, + vehicle->y + SteamParticleOffsets[index].y, + vehicle->z + SteamParticleOffsets[index].z); } } vehicle_invalidate(vehicle); @@ -6828,7 +7243,8 @@ static void sub_6D63D4(rct_vehicle *vehicle) case 2: // loc_6D6424 *var_C8 += _vehicleVelocityF64E08; al = (*var_C8 >> 18) & 2; - if (vehicle->var_C5 != al) { + if (vehicle->var_C5 != al) + { vehicle->var_C5 = al; vehicle_invalidate(vehicle); } @@ -6836,8 +7252,9 @@ static void sub_6D63D4(rct_vehicle *vehicle) case 3: // loc_6D6482 *var_C8 += _vehicleVelocityF64E08; eax = ((*var_C8 >> 13) & 0xFF) * 6; - ah = (eax >> 8) & 0xFF; - if (vehicle->var_C5 != ah) { + ah = (eax >> 8) & 0xFF; + if (vehicle->var_C5 != ah) + { vehicle->var_C5 = ah; vehicle_invalidate(vehicle); } @@ -6845,8 +7262,9 @@ static void sub_6D63D4(rct_vehicle *vehicle) case 4: // loc_6D64F7 *var_C8 += _vehicleVelocityF64E08; eax = ((*var_C8 >> 13) & 0xFF) * 7; - ah = (eax >> 8) & 0xFF; - if (vehicle->var_C5 != ah) { + ah = (eax >> 8) & 0xFF; + if (vehicle->var_C5 != ah) + { vehicle->var_C5 = ah; vehicle_invalidate(vehicle); } @@ -6854,15 +7272,19 @@ static void sub_6D63D4(rct_vehicle *vehicle) case 5: // loc_6D6453 *var_C8 += _vehicleVelocityF64E08; al = (*var_C8 >> 19) & 1; - if (vehicle->var_C5 != al) { + if (vehicle->var_C5 != al) + { vehicle->var_C5 = al; vehicle_invalidate(vehicle); } break; case 6: // loc_6D65C3 - if (vehicle->var_C8 <= 0xCCCC) { + if (vehicle->var_C8 <= 0xCCCC) + { vehicle->var_C8 += 0x3333; - } else { + } + else + { vehicle->var_C8 += 0x3333; vehicle->var_C5 += 1; vehicle->var_C5 &= 7; @@ -6872,27 +7294,34 @@ static void sub_6D63D4(rct_vehicle *vehicle) case 7: // loc_6D63F5 *var_C8 += _vehicleVelocityF64E08; al = (*var_C8 >> 18) & 3; - if (vehicle->var_C5 != al) { + if (vehicle->var_C5 != al) + { vehicle->var_C5 = al; vehicle_invalidate(vehicle); } break; case 8: // loc_6D64B6 - if (vehicle->num_peeps != 0) { + if (vehicle->num_peeps != 0) + { *var_C8 += _vehicleVelocityF64E08; eax = ((*var_C8 >> 13) & 0xFF) << 2; - ah = (eax >> 8) & 0xFF; - if (vehicle->var_C5 != ah) { + ah = (eax >> 8) & 0xFF; + if (vehicle->var_C5 != ah) + { vehicle->var_C5 = ah; vehicle_invalidate(vehicle); } } break; case 9: // loc_6D65E1 - if (vehicle->seat_rotation != vehicle->target_seat_rotation) { - if (vehicle->var_C8 <= 0xCCCC) { + if (vehicle->seat_rotation != vehicle->target_seat_rotation) + { + if (vehicle->var_C8 <= 0xCCCC) + { vehicle->var_C8 += 0x3333; - } else { + } + else + { vehicle->var_C8 += 0x3333; if (vehicle->seat_rotation >= vehicle->target_seat_rotation) @@ -6913,13 +7342,15 @@ static void sub_6D63D4(rct_vehicle *vehicle) * * rct2: 0x006DEDB1 */ -static void vehicle_play_scenery_door_open_sound(rct_vehicle *vehicle, rct_map_element *mapElement) +static void vehicle_play_scenery_door_open_sound(rct_vehicle * vehicle, rct_map_element * mapElement) { - rct_scenery_entry *wallEntry = get_wall_entry(mapElement->properties.wall.type); - sint32 doorSoundType = (wallEntry->wall.flags2 >> 1) & 3; - if (doorSoundType != 0) { + rct_scenery_entry * wallEntry = get_wall_entry(mapElement->properties.wall.type); + sint32 doorSoundType = (wallEntry->wall.flags2 >> 1) & 3; + if (doorSoundType != 0) + { sint32 soundId = DoorOpenSoundIds[doorSoundType - 1]; - if (soundId != 255) { + if (soundId != 255) + { audio_play_sound_at_location(soundId, vehicle->x, vehicle->track_y, vehicle->track_z); } } @@ -6929,13 +7360,15 @@ static void vehicle_play_scenery_door_open_sound(rct_vehicle *vehicle, rct_map_e * * rct2: 0x006DED7A */ -static void vehicle_play_scenery_door_close_sound(rct_vehicle *vehicle, rct_map_element *mapElement) +static void vehicle_play_scenery_door_close_sound(rct_vehicle * vehicle, rct_map_element * mapElement) { - rct_scenery_entry *wallEntry = get_wall_entry(mapElement->properties.wall.type); - sint32 doorSoundType = (wallEntry->wall.flags2 >> 1) & 3; - if (doorSoundType != 0) { + rct_scenery_entry * wallEntry = get_wall_entry(mapElement->properties.wall.type); + sint32 doorSoundType = (wallEntry->wall.flags2 >> 1) & 3; + if (doorSoundType != 0) + { sint32 soundId = DoorCloseSoundIds[doorSoundType - 1]; - if (soundId != 255) { + if (soundId != 255) + { audio_play_sound_at_location(soundId, vehicle->x, vehicle->track_y, vehicle->track_z); } } @@ -6945,30 +7378,35 @@ static void vehicle_play_scenery_door_close_sound(rct_vehicle *vehicle, rct_map_ * * rct2: 0x006DEE93 */ -static void vehicle_update_scenery_door(rct_vehicle *vehicle) +static void vehicle_update_scenery_door(rct_vehicle * vehicle) { - sint32 trackType = vehicle->track_type >> 2; - const rct_preview_track *trackBlock = TrackBlocks[trackType]; - while ((trackBlock + 1)->index != 255) { + sint32 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]; - sint32 x = floor2(vehicle->x, 32); - sint32 y = floor2(vehicle->y, 32); - sint32 z = (vehicle->track_z - trackBlock->z + trackCoordinates->z_end) >> 3; - sint32 direction = (vehicle->track_direction + trackCoordinates->rotation_end) & 3; + const rct_track_coordinates * trackCoordinates = &TrackCoordinates[trackType]; + sint32 x = floor2(vehicle->x, 32); + sint32 y = floor2(vehicle->y, 32); + sint32 z = (vehicle->track_z - trackBlock->z + trackCoordinates->z_end) >> 3; + sint32 direction = (vehicle->track_direction + trackCoordinates->rotation_end) & 3; - rct_map_element *mapElement = map_get_wall_element_at(x, y, z, direction); - if (mapElement == NULL) { + rct_map_element * mapElement = map_get_wall_element_at(x, y, z, direction); + if (mapElement == NULL) + { return; } - if (vehicle->next_vehicle_on_train != SPRITE_INDEX_NULL) { + if (vehicle->next_vehicle_on_train != SPRITE_INDEX_NULL) + { mapElement->properties.wall.animation &= ~(WALL_ANIMATION_FLAG_DIRECTION_BACKWARD); wall_element_set_animation_frame(mapElement, 1); map_animation_create(MAP_ANIMATION_TYPE_WALL_DOOR, x, y, z); vehicle_play_scenery_door_open_sound(vehicle, mapElement); - } else { + } + else + { mapElement->properties.wall.animation &= ~(WALL_ANIMATION_FLAG_DIRECTION_BACKWARD); wall_element_set_animation_frame(mapElement, 6); vehicle_play_scenery_door_close_sound(vehicle, mapElement); @@ -6979,33 +7417,36 @@ static void vehicle_update_scenery_door(rct_vehicle *vehicle) * * rct2: 0x006DB38B */ -static bool loc_6DB38B(rct_vehicle *vehicle, rct_map_element *mapElement) +static bool loc_6DB38B(rct_vehicle * vehicle, rct_map_element * mapElement) { // Get bank sint32 bankStart = track_get_actual_bank_3(vehicle, mapElement); // Get vangle - sint32 trackType = mapElement->properties.track.type; + sint32 trackType = mapElement->properties.track.type; sint32 vangleStart = TrackDefinitions[trackType].vangle_start; - if (vangleStart != _vehicleVAngleEndF64E36 || - bankStart != _vehicleBankEndF64E37 - ) { + if (vangleStart != _vehicleVAngleEndF64E36 || bankStart != _vehicleBankEndF64E37) + { return false; } return true; } -static void loc_6DB481(rct_vehicle *vehicle) +static void loc_6DB481(rct_vehicle * vehicle) { uint16 probability = 0x8000; - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_6) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_6) + { vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_6; - } else { + } + else + { probability = 0x0A3D; } - if ((scenario_rand() & 0xFFFF) <= probability) { + if ((scenario_rand() & 0xFFFF) <= probability) + { vehicle->var_CD += 2; } } @@ -7014,44 +7455,43 @@ static void loc_6DB481(rct_vehicle *vehicle) * * rct2: 0x006DB545 */ -static void vehicle_trigger_on_ride_photo(rct_vehicle *vehicle, rct_map_element *mapElement) +static void vehicle_trigger_on_ride_photo(rct_vehicle * vehicle, rct_map_element * mapElement) { map_element_set_onride_photo_timeout(mapElement); - map_animation_create( - MAP_ANIMATION_TYPE_TRACK_ONRIDEPHOTO, - vehicle->track_x, - vehicle->track_y, - mapElement->base_height - ); + map_animation_create(MAP_ANIMATION_TYPE_TRACK_ONRIDEPHOTO, vehicle->track_x, vehicle->track_y, mapElement->base_height); } /** * * rct2: 0x006DEDE8 */ -static void vehicle_update_handle_scenery_door(rct_vehicle *vehicle) +static void vehicle_update_handle_scenery_door(rct_vehicle * vehicle) { - sint32 trackType = vehicle->track_type >> 2; - const rct_preview_track *trackBlock = TrackBlocks[trackType]; - const rct_track_coordinates *trackCoordinates = &TrackCoordinates[trackType]; - sint32 x = vehicle->track_x; - sint32 y = vehicle->track_y; - sint32 z = (vehicle->track_z - trackBlock->z + trackCoordinates->z_begin) >> 3; - sint32 direction = (vehicle->track_direction + trackCoordinates->rotation_begin) & 3; + sint32 trackType = vehicle->track_type >> 2; + const rct_preview_track * trackBlock = TrackBlocks[trackType]; + const rct_track_coordinates * trackCoordinates = &TrackCoordinates[trackType]; + sint32 x = vehicle->track_x; + sint32 y = vehicle->track_y; + sint32 z = (vehicle->track_z - trackBlock->z + trackCoordinates->z_begin) >> 3; + sint32 direction = (vehicle->track_direction + trackCoordinates->rotation_begin) & 3; direction ^= 2; - rct_map_element *mapElement = map_get_wall_element_at(x, y, z, direction); - if (mapElement == NULL) { + rct_map_element * mapElement = map_get_wall_element_at(x, y, z, direction); + if (mapElement == NULL) + { return; } - if (vehicle->next_vehicle_on_train != SPRITE_INDEX_NULL) { + if (vehicle->next_vehicle_on_train != SPRITE_INDEX_NULL) + { mapElement->properties.wall.animation |= WALL_ANIMATION_FLAG_DIRECTION_BACKWARD; wall_element_set_animation_frame(mapElement, 1); map_animation_create(MAP_ANIMATION_TYPE_WALL_DOOR, x, y, z); vehicle_play_scenery_door_open_sound(vehicle, mapElement); - } else { + } + else + { mapElement->properties.wall.animation &= ~(WALL_ANIMATION_FLAG_DIRECTION_BACKWARD); wall_element_set_animation_frame(mapElement, 6); vehicle_play_scenery_door_close_sound(vehicle, mapElement); @@ -7060,51 +7500,60 @@ static void vehicle_update_handle_scenery_door(rct_vehicle *vehicle) static void vehicle_update_play_water_splash_sound() { - if (_vehicleVelocityF64E08 <= 0x20364) { + if (_vehicleVelocityF64E08 <= 0x20364) + { return; } - audio_play_sound_at_location( - SOUND_WATER_SPLASH, - unk_F64E20.x, - unk_F64E20.y, - unk_F64E20.z - ); + audio_play_sound_at_location(SOUND_WATER_SPLASH, unk_F64E20.x, unk_F64E20.y, unk_F64E20.z); } /** * * 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); - sint32 trackType = vehicle->track_type >> 2; + rct_ride_entry * rideEntry = get_ride_entry(vehicle->ride_subtype); + sint32 trackType = vehicle->track_type >> 2; - if (!(rideEntry->flags & RIDE_ENTRY_FLAG_PLAY_SPLASH_SOUND)) { - if (rideEntry->flags & RIDE_ENTRY_FLAG_PLAY_SPLASH_SOUND_SLIDE) { - if (!vehicle->is_child) { - 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); - if (!track_element_is_covered(nextNextVehicle->track_type >> 2)) { - if (vehicle->track_progress == 4) { + if (!(rideEntry->flags & RIDE_ENTRY_FLAG_PLAY_SPLASH_SOUND)) + { + if (rideEntry->flags & RIDE_ENTRY_FLAG_PLAY_SPLASH_SOUND_SLIDE) + { + if (!vehicle->is_child) + { + 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); + if (!track_element_is_covered(nextNextVehicle->track_type >> 2)) + { + if (vehicle->track_progress == 4) + { vehicle_update_play_water_splash_sound(); } } } } } - } else { - if (trackType == TRACK_ELEM_25_DEG_DOWN_TO_FLAT) { - if (vehicle->track_progress == 12) { + } + else + { + if (trackType == TRACK_ELEM_25_DEG_DOWN_TO_FLAT) + { + if (vehicle->track_progress == 12) + { vehicle_update_play_water_splash_sound(); } } } - if (!vehicle->is_child) { - if (trackType == TRACK_ELEM_WATER_SPLASH) { - if (vehicle->track_progress == 48) { + if (!vehicle->is_child) + { + if (trackType == TRACK_ELEM_WATER_SPLASH) + { + if (vehicle->track_progress == 48) + { vehicle_update_play_water_splash_sound(); } } @@ -7115,17 +7564,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 - ); - sint32 x = vehicle->track_x + moveInfo->x; - sint32 y = vehicle->track_y + moveInfo->y; - sint32 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); + sint32 x = vehicle->track_x + moveInfo->x; + sint32 y = vehicle->track_y + moveInfo->y; + sint32 z = vehicle->z; + sprite_move(x, y, z, (rct_sprite *)vehicle); } extern const LocationXY16 DuckMoveOffset[4]; @@ -7139,122 +7584,150 @@ extern const LocationXY16 DuckMoveOffset[4]; * @param z (dx) * @param otherVehicleIndex (bp) */ -static bool vehicle_update_motion_collision_detection( - rct_vehicle *vehicle, sint16 x, sint16 y, sint16 z, uint16* otherVehicleIndex -) { - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_1) return false; +static bool vehicle_update_motion_collision_detection(rct_vehicle * vehicle, sint16 x, sint16 y, sint16 z, + uint16 * 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->flags & VEHICLE_ENTRY_FLAG_22)){ + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_22)) + { vehicle->var_C4 = 0; // If hacking boat hire rides you can end up here - if (otherVehicleIndex == NULL) return false; + if (otherVehicleIndex == NULL) + return false; - rct_vehicle* collideVehicle = GET_VEHICLE(*otherVehicleIndex); + rct_vehicle * collideVehicle = GET_VEHICLE(*otherVehicleIndex); - if (vehicle == collideVehicle) return false; + if (vehicle == collideVehicle) + return false; sint32 x_diff = abs(x - collideVehicle->x); - if (x_diff > 0x7FFF) return false; + if (x_diff > 0x7FFF) + return false; sint32 y_diff = abs(y - collideVehicle->y); - if (y_diff > 0x7FFF) return false; + if (y_diff > 0x7FFF) + return false; - if (x_diff + y_diff > 0xFFFF) return false; + if (x_diff + y_diff > 0xFFFF) + return false; sint32 z_diff = abs(z - collideVehicle->z); - if (x_diff + y_diff + z_diff > 0xFFFF) return false; + if (x_diff + y_diff + z_diff > 0xFFFF) + return false; - uint16 ecx = min(vehicle->var_44 + collideVehicle->var_44, 560); - ecx = ((ecx >> 1) * 30) >> 8; + uint16 ecx = Math::Min(vehicle->var_44 + collideVehicle->var_44, 560); + ecx = ((ecx >> 1) * 30) >> 8; - if (x_diff + y_diff + z_diff >= ecx) return false; + if (x_diff + y_diff + z_diff >= ecx) + return false; uint8 direction = (vehicle->sprite_direction - collideVehicle->sprite_direction + 7) & 0x1F; - if (direction >= 0xF) return false; + if (direction >= 0xF) + return false; return true; } - LocationXY8 location = {.x = (x / 32), .y = (y / 32)}; + LocationXY8 location = { static_cast(x / 32), static_cast(y / 32) }; - bool mayCollide = false; - uint16 collideId = SPRITE_INDEX_NULL; - rct_vehicle* collideVehicle = NULL; - for (sint32 i = 0; i < countof(Unk9A37C4); i++) { + bool mayCollide = false; + uint16 collideId = SPRITE_INDEX_NULL; + rct_vehicle * collideVehicle = NULL; + for (uint32 i = 0; i < Util::CountOf(Unk9A37C4); i++) + { location.x += Unk9A37C4[i].x; location.y += Unk9A37C4[i].y; collideId = sprite_get_first_in_quadrant(location.x * 32, location.y * 32); - for(; collideId != SPRITE_INDEX_NULL; collideId = collideVehicle->next_in_quadrant){ + for (; collideId != SPRITE_INDEX_NULL; collideId = collideVehicle->next_in_quadrant) + { collideVehicle = GET_VEHICLE(collideId); - if (collideVehicle == vehicle) continue; + if (collideVehicle == vehicle) + continue; - if (collideVehicle->sprite_identifier != SPRITE_IDENTIFIER_VEHICLE) continue; + if (collideVehicle->sprite_identifier != SPRITE_IDENTIFIER_VEHICLE) + continue; sint32 z_diff = abs(collideVehicle->z - z); - if (z_diff > 16) continue; + if (z_diff > 16) + continue; - if (collideVehicle->ride_subtype == RIDE_TYPE_NULL) continue; + 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->flags & VEHICLE_ENTRY_FLAG_22)) continue; + if (!(collideType->flags & VEHICLE_ENTRY_FLAG_22)) + continue; uint32 x_diff = abs(collideVehicle->x - x); - if (x_diff > 0x7FFF) continue; + if (x_diff > 0x7FFF) + continue; uint32 y_diff = abs(collideVehicle->y - y); - if (y_diff > 0x7FFF) continue; + if (y_diff > 0x7FFF) + continue; - if (x_diff + y_diff > 0xFFFF) continue; + if (x_diff + y_diff > 0xFFFF) + continue; - uint8 cl = min(vehicle->var_CD, collideVehicle->var_CD); - uint8 ch = max(vehicle->var_CD, collideVehicle->var_CD); - if (cl != ch){ - if (cl == 5 && ch == 6) continue; + uint8 cl = Math::Min(vehicle->var_CD, collideVehicle->var_CD); + uint8 ch = Math::Max(vehicle->var_CD, collideVehicle->var_CD); + if (cl != ch) + { + if (cl == 5 && ch == 6) + continue; } uint32 ecx = vehicle->var_44 + collideVehicle->var_44; - ecx = ((ecx >> 1) * 30) >> 8; + ecx = ((ecx >> 1) * 30) >> 8; - if (x_diff + y_diff >= ecx) continue; + if (x_diff + y_diff >= ecx) + continue; - if (!(collideType->flags & VEHICLE_ENTRY_FLAG_30)){ + if (!(collideType->flags & VEHICLE_ENTRY_FLAG_30)) + { mayCollide = true; break; } uint8 direction = (vehicle->sprite_direction - collideVehicle->sprite_direction - 6) & 0x1F; - if (direction < 0x14) continue; + if (direction < 0x14) + continue; uint32 offsetSpriteDirection = (vehicle->sprite_direction + 4) & 31; - uint32 offsetDirection = offsetSpriteDirection >> 3; - uint32 next_x_diff = abs(x + AvoidCollisionMoveOffset[offsetDirection].x - collideVehicle->x); - uint32 next_y_diff = abs(y + AvoidCollisionMoveOffset[offsetDirection].y - collideVehicle->y); + uint32 offsetDirection = offsetSpriteDirection >> 3; + uint32 next_x_diff = abs(x + AvoidCollisionMoveOffset[offsetDirection].x - collideVehicle->x); + uint32 next_y_diff = abs(y + AvoidCollisionMoveOffset[offsetDirection].y - collideVehicle->y); - if (next_x_diff + next_y_diff < x_diff + y_diff){ + if (next_x_diff + next_y_diff < x_diff + y_diff) + { mayCollide = true; break; } - } - if (mayCollide == true) { + if (mayCollide == true) + { break; } } - if (mayCollide == false) { + if (mayCollide == false) + { vehicle->var_C4 = 0; return false; } vehicle->var_C4++; - if (vehicle->var_C4 < 200) { + if (vehicle->var_C4 < 200) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_6; if (otherVehicleIndex != NULL) *otherVehicleIndex = collideId; @@ -7263,33 +7736,41 @@ static bool vehicle_update_motion_collision_detection( // TODO Is it possible for collideVehicle to be NULL? - if (vehicle->status == VEHICLE_STATUS_MOVING_TO_END_OF_STATION){ - if (vehicle->sprite_direction == 0) { - if (vehicle->x <= collideVehicle->x) { + if (vehicle->status == VEHICLE_STATUS_MOVING_TO_END_OF_STATION) + { + if (vehicle->sprite_direction == 0) + { + if (vehicle->x <= collideVehicle->x) + { return false; } } - else if (vehicle->sprite_direction == 8) { - if (vehicle->y >= collideVehicle->y) { + else if (vehicle->sprite_direction == 8) + { + if (vehicle->y >= collideVehicle->y) + { return false; } } - else if (vehicle->sprite_direction == 16) { - if (vehicle->x >= collideVehicle->x) { + else if (vehicle->sprite_direction == 16) + { + if (vehicle->x >= collideVehicle->x) + { return false; } } - else if (vehicle->sprite_direction == 24) { - if (vehicle->y <= collideVehicle->y) { + else if (vehicle->sprite_direction == 24) + { + if (vehicle->y <= collideVehicle->y) + { return false; } } } - 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; } @@ -7303,16 +7784,16 @@ static bool vehicle_update_motion_collision_detection( * * 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); @@ -7322,82 +7803,90 @@ 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) { + if (vehicle->var_CD == 2) + { return; } sint32 trackType = vehicle->track_type >> 2; - if (!(TrackSequenceProperties[trackType][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) { + if (!(TrackSequenceProperties[trackType][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) + { return; } _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_3; - rct_map_element *mapElement = NULL; - if (map_is_location_valid(vehicle->track_x, vehicle->track_y)) { - mapElement = map_get_track_element_at_of_type_seq( - vehicle->track_x, - vehicle->track_y, - vehicle->track_z >> 3, - trackType, - 0 - ); + rct_map_element * mapElement = NULL; + if (map_is_location_valid(vehicle->track_x, vehicle->track_y)) + { + mapElement = + map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); } - if (mapElement == NULL) { + if (mapElement == NULL) + { return; } - if (_vehicleStationIndex == 0xFF) { + if (_vehicleStationIndex == 0xFF) + { _vehicleStationIndex = map_element_get_station(mapElement); } - if (trackType == TRACK_ELEM_TOWER_BASE && - vehicle == gCurrentVehicle - ) { - if (vehicle->track_progress > 3 && !(vehicle->update_flags & VEHICLE_UPDATE_FLAG_3)) { + if (trackType == TRACK_ELEM_TOWER_BASE && vehicle == gCurrentVehicle) + { + if (vehicle->track_progress > 3 && !(vehicle->update_flags & VEHICLE_UPDATE_FLAG_3)) + { rct_xy_element input, output; - sint32 outputZ, outputDirection; + sint32 outputZ, outputDirection; - input.x = vehicle->track_x; - input.y = vehicle->track_y; + input.x = vehicle->track_x; + input.y = vehicle->track_y; input.element = mapElement; - if (!track_block_get_next(&input, &output, &outputZ, &outputDirection)) { + if (!track_block_get_next(&input, &output, &outputZ, &outputDirection)) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_12; } } - if (vehicle->track_progress <= 3) { + if (vehicle->track_progress <= 3) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_AT_STATION; } } - if (trackType != TRACK_ELEM_END_STATION || - vehicle != gCurrentVehicle - ) { + if (trackType != TRACK_ELEM_END_STATION || vehicle != gCurrentVehicle) + { return; } uint16 ax = vehicle->track_progress; - if (_vehicleVelocityF64E08 < 0) { - if (ax <= 22) { + if (_vehicleVelocityF64E08 < 0) + { + if (ax <= 22) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_AT_STATION; } - } else { + } + else + { uint16 cx = 17; - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_28) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_28) + { cx = 6; } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_30) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_30) + { cx = vehicle->var_CD == 6 ? 18 : 20; } - if (ax > cx) { + if (ax > cx) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_AT_STATION; } } @@ -7407,32 +7896,35 @@ static void sub_6DBF3E(rct_vehicle *vehicle) * * rct2: 0x006DB08C */ -static bool vehicle_update_track_motion_forwards_get_new_track(rct_vehicle *vehicle, uint16 trackType, Ride* ride, rct_ride_entry* rideEntry) { +static bool vehicle_update_track_motion_forwards_get_new_track(rct_vehicle * vehicle, uint16 trackType, Ride * ride, + rct_ride_entry * rideEntry) +{ registers regs = { 0 }; _vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_end; - _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end; - rct_map_element *mapElement = 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_map_element * mapElement = + map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); - if (mapElement == NULL) { + if (mapElement == NULL) + { return false; } - if (trackType == TRACK_ELEM_CABLE_LIFT_HILL && vehicle == gCurrentVehicle) { + if (trackType == TRACK_ELEM_CABLE_LIFT_HILL && vehicle == gCurrentVehicle) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_11; } - if (track_element_is_block_start(mapElement)) { - if (vehicle->next_vehicle_on_train == SPRITE_INDEX_NULL) { + if (track_element_is_block_start(mapElement)) + { + if (vehicle->next_vehicle_on_train == SPRITE_INDEX_NULL) + { mapElement->flags |= MAP_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED; - if (trackType == TRACK_ELEM_BLOCK_BRAKES || trackType == TRACK_ELEM_END_STATION) { - if (!(rideEntry->vehicles[0].flags & VEHICLE_ENTRY_FLAG_POWERED)) { + if (trackType == TRACK_ELEM_BLOCK_BRAKES || trackType == TRACK_ELEM_END_STATION) + { + if (!(rideEntry->vehicles[0].flags & VEHICLE_ENTRY_FLAG_POWERED)) + { audio_play_sound_at_location(SOUND_49, vehicle->track_x, vehicle->track_y, vehicle->track_z); } } @@ -7444,8 +7936,8 @@ static bool vehicle_update_track_motion_forwards_get_new_track(rct_vehicle *vehi // Change from original: this used to check if the vehicle allowed doors. vehicle_update_scenery_door(vehicle); - - switch (vehicle->var_CD) { + switch (vehicle->var_CD) + { default: goto loc_6DB358; case 2: @@ -7464,55 +7956,61 @@ static bool vehicle_update_track_motion_forwards_get_new_track(rct_vehicle *vehi } loc_6DB32A: +{ + track_begin_end trackBeginEnd; + if (!track_block_get_previous(vehicle->track_x, vehicle->track_y, mapElement, &trackBeginEnd)) { - track_begin_end trackBeginEnd; - if (!track_block_get_previous(vehicle->track_x, vehicle->track_y, mapElement, &trackBeginEnd)) { - return false; - } - regs.eax = trackBeginEnd.begin_x; - regs.ecx = trackBeginEnd.begin_y; - regs.edx = trackBeginEnd.begin_z; - regs.bl = trackBeginEnd.begin_direction; - mapElement = trackBeginEnd.begin_element; + return false; } + regs.eax = trackBeginEnd.begin_x; + regs.ecx = trackBeginEnd.begin_y; + regs.edx = trackBeginEnd.begin_z; + regs.bl = trackBeginEnd.begin_direction; + mapElement = trackBeginEnd.begin_element; +} goto loc_6DB41D; loc_6DB358: +{ + rct_xy_element xyElement; + sint32 z, direction; + xyElement.x = vehicle->track_x; + xyElement.y = vehicle->track_y; + xyElement.element = mapElement; + if (!track_block_get_next(&xyElement, &xyElement, &z, &direction)) { - rct_xy_element xyElement; - sint32 z, direction; - xyElement.x = vehicle->track_x; - xyElement.y = vehicle->track_y; - xyElement.element = mapElement; - if (!track_block_get_next(&xyElement, &xyElement, &z, &direction)) { - return false; - } - mapElement = xyElement.element; - regs.eax = xyElement.x; - regs.ecx = xyElement.y; - regs.edx = z; - regs.bl = direction; + return false; } - if (mapElement->properties.track.type == 211 || - mapElement->properties.track.type == 212 - ) { - if (!vehicle->is_child && vehicle->velocity <= 0x30000) { + mapElement = xyElement.element; + regs.eax = xyElement.x; + regs.ecx = xyElement.y; + regs.edx = z; + regs.bl = direction; +} + if (mapElement->properties.track.type == TRACK_ELEM_LEFT_REVERSER || + mapElement->properties.track.type == TRACK_ELEM_RIGHT_REVERSER) + { + if (!vehicle->is_child && vehicle->velocity <= 0x30000) + { vehicle->velocity = 0; } } - if (!loc_6DB38B(vehicle, mapElement)) { + if (!loc_6DB38B(vehicle, mapElement)) + { return false; } // Update VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES flag vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES; - sint32 rideType = get_ride(mapElement->properties.track.ride_index)->type; - if (RideData4[rideType].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) { - if (track_element_is_inverted(mapElement)) + sint32 rideType = get_ride(mapElement->properties.track.ride_index)->type; + if (RideData4[rideType].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) { - vehicle->update_flags |= VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES; + if (track_element_is_inverted(mapElement)) + { + vehicle->update_flags |= VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES; + } } } @@ -7524,29 +8022,33 @@ loc_6DB41D: // TODO check if getting the vehicle entry again is necessary rct_ride_entry_vehicle * vehicleEntry = vehicle_get_vehicle_entry(vehicle); - if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_30) && vehicle->var_CD < 7) { + if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_30) && vehicle->var_CD < 7) + { trackType = mapElement->properties.track.type; - if (trackType == TRACK_ELEM_FLAT) { + if (trackType == TRACK_ELEM_FLAT) + { loc_6DB481(vehicle); } - else if (ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) { - if (track_element_is_station(mapElement)) { + else if (ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) + { + if (track_element_is_station(mapElement)) + { loc_6DB481(vehicle); } } } - if (vehicle->var_CD != 0 && vehicle->var_CD < 5) { - LocationXY8 curLocation = { - .x = regs.ax >> 5, - .y = regs.cx >> 5 - }; + if (vehicle->var_CD != 0 && vehicle->var_CD < 5) + { + LocationXY8 curLocation = { static_cast(regs.ax >> 5), static_cast(regs.cx >> 5) }; regs.dx >>= 3; - if (curLocation.xy == ride->chairlift_bullwheel_location[1].xy && regs.dl == ride->chairlift_bullwheel_z[1]) { + if (curLocation.xy == ride->chairlift_bullwheel_location[1].xy && regs.dl == ride->chairlift_bullwheel_z[1]) + { vehicle->var_CD = 3; } - else if (curLocation.xy == ride->chairlift_bullwheel_location[0].xy && regs.dl == ride->chairlift_bullwheel_z[0]) { + else if (curLocation.xy == ride->chairlift_bullwheel_location[0].xy && regs.dl == ride->chairlift_bullwheel_z[0]) + { vehicle->var_CD = 4; } } @@ -7554,23 +8056,29 @@ loc_6DB41D: // loc_6DB500 // Update VEHICLE_UPDATE_FLAG_0 vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_0; - if (track_element_is_lift_hill(mapElement)) { + if (track_element_is_lift_hill(mapElement)) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_0; } trackType = mapElement->properties.track.type; - rideType = get_ride(mapElement->properties.track.ride_index)->type; - if (trackType != TRACK_ELEM_BRAKES) { + if (trackType != TRACK_ELEM_BRAKES) + { vehicle->target_seat_rotation = track_element_get_seat_rotation(mapElement); } vehicle->track_direction = regs.bl & 3; vehicle->track_type |= trackType << 2; vehicle->brake_speed = map_element_get_brake_booster_speed(mapElement); - if (trackType == TRACK_ELEM_ON_RIDE_PHOTO) { + if (trackType == TRACK_ELEM_ON_RIDE_PHOTO) + { vehicle_trigger_on_ride_photo(vehicle, mapElement); } - if (trackType == TRACK_ELEM_ROTATION_CONTROL_TOGGLE && rideType == RIDE_TYPE_WILD_MOUSE) { - vehicle->update_flags ^= VEHICLE_UPDATE_FLAG_13; + { + uint16 rideType = get_ride(mapElement->properties.track.ride_index)->type; + if (trackType == TRACK_ELEM_ROTATION_CONTROL_TOGGLE && rideType == RIDE_TYPE_WILD_MOUSE) + { + vehicle->update_flags ^= VEHICLE_UPDATE_FLAG_13; + } } // Change from original: this used to check if the vehicle allowed doors. vehicle_update_handle_scenery_door(vehicle); @@ -7582,61 +8090,77 @@ 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 = { 0 }; loc_6DAEB9: - regs.edi = vehicle->track_type; - regs.cx = vehicle->track_type >> 2; + regs.edi = vehicle->track_type; + regs.cx = vehicle->track_type >> 2; sint32 trackType = vehicle->track_type >> 2; - if (trackType == TRACK_ELEM_HEARTLINE_TRANSFER_UP || trackType == TRACK_ELEM_HEARTLINE_TRANSFER_DOWN) { - if (vehicle->track_progress == 80) { + if (trackType == TRACK_ELEM_HEARTLINE_TRANSFER_UP || trackType == TRACK_ELEM_HEARTLINE_TRANSFER_DOWN) + { + if (vehicle->track_progress == 80) + { vehicle->vehicle_type ^= 1; vehicleEntry = vehicle_get_vehicle_entry(vehicle); } - if (_vehicleVelocityF64E08 >= 0x40000) { + if (_vehicleVelocityF64E08 >= 0x40000) + { vehicle->acceleration = -_vehicleVelocityF64E08 * 8; } - else if (_vehicleVelocityF64E08 < 0x20000) { + else if (_vehicleVelocityF64E08 < 0x20000) + { vehicle->acceleration = 0x50000; } } - 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 - )) { + 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)) + { regs.eax = vehicle->brake_speed << 16; - if (regs.eax < _vehicleVelocityF64E08) { + if (regs.eax < _vehicleVelocityF64E08) + { vehicle->acceleration = -_vehicleVelocityF64E08 * 16; } - else if (!(gCurrentTicks & 0x0F)) { - if (_vehicleF64E2C == 0) { + else if (!(gCurrentTicks & 0x0F)) + { + if (_vehicleF64E2C == 0) + { _vehicleF64E2C++; audio_play_sound_at_location(SOUND_51, vehicle->x, vehicle->y, vehicle->z); } } } } - else if (track_element_is_booster(ride->type, trackType)) { + else if (track_element_is_booster(ride->type, trackType)) + { regs.eax = get_booster_speed(ride->type, (vehicle->brake_speed << 16)); - if (regs.eax > _vehicleVelocityF64E08) { + if (regs.eax > _vehicleVelocityF64E08) + { vehicle->acceleration = RideProperties[ride->type].booster_acceleration << 16; //_vehicleVelocityF64E08 * 1.2; } } if ((trackType == TRACK_ELEM_FLAT && ride->type == RIDE_TYPE_REVERSE_FREEFALL_COASTER) || - (trackType == TRACK_ELEM_POWERED_LIFT) - ) { + (trackType == TRACK_ELEM_POWERED_LIFT)) + { vehicle->acceleration = RideProperties[ride->type].powered_lift_acceleration << 16; } - if (trackType == TRACK_ELEM_BRAKE_FOR_DROP) { - if (!vehicle->is_child) { - if (!(vehicle->update_flags & VEHICLE_UPDATE_FLAG_ON_BREAK_FOR_DROP)) { - if (vehicle->track_progress >= 8) { + if (trackType == TRACK_ELEM_BRAKE_FOR_DROP) + { + if (!vehicle->is_child) + { + if (!(vehicle->update_flags & VEHICLE_UPDATE_FLAG_ON_BREAK_FOR_DROP)) + { + if (vehicle->track_progress >= 8) + { vehicle->acceleration = -_vehicleVelocityF64E08 * 16; - if (vehicle->track_progress >= 24) { + if (vehicle->track_progress >= 24) + { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_ON_BREAK_FOR_DROP; vehicle->vertical_drop_countdown = 90; } @@ -7644,30 +8168,32 @@ loc_6DAEB9: } } } - if (trackType == TRACK_ELEM_LOG_FLUME_REVERSER) { - if (vehicle->track_progress != 16 || vehicle->velocity < 0x40000) { - if (vehicle->track_progress == 32) { + if (trackType == TRACK_ELEM_LOG_FLUME_REVERSER) + { + if (vehicle->track_progress != 16 || vehicle->velocity < 0x40000) + { + if (vehicle->track_progress == 32) + { vehicle->vehicle_type = vehicleEntry->var_58; - vehicleEntry = vehicle_get_vehicle_entry(vehicle); + vehicleEntry = vehicle_get_vehicle_entry(vehicle); } } - else { + else + { vehicle->track_progress += 17; } } 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 trackTotalProgress = vehicle_get_move_info_size(vehicle->var_CD, vehicle->track_type); - if (regs.ax >= trackTotalProgress) { - if (!vehicle_update_track_motion_forwards_get_new_track(vehicle, trackType, ride, rideEntry)) { + if (regs.ax >= trackTotalProgress) + { + if (!vehicle_update_track_motion_forwards_get_new_track(vehicle, trackType, ride, rideEntry)) + { goto loc_6DB94A; } regs.ax = 0; @@ -7677,75 +8203,80 @@ loc_6DAEB9: vehicle_update_handle_water_splash(vehicle); // loc_6DB706 - moveInfo = vehicle_get_move_info( - vehicle->var_CD, - vehicle->track_type, - vehicle->track_progress - ); - sint16 x = vehicle->track_x + moveInfo->x; - sint16 y = vehicle->track_y + moveInfo->y; - sint16 z = vehicle->track_z + moveInfo->z + RideData5[ride->type].z_offset; - + moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, vehicle->track_progress); trackType = vehicle->track_type >> 2; - regs.ebx = 0; - if (x != unk_F64E20.x) { regs.ebx |= 1; } - if (y != unk_F64E20.y) { regs.ebx |= 2; } - if (z != unk_F64E20.z) { 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 - ) { - regs.ebx |= 8; - } + { + sint16 x = vehicle->track_x + moveInfo->x; + sint16 y = vehicle->track_y + moveInfo->y; + sint16 z = vehicle->track_z + moveInfo->z + RideData5[ride->type].z_offset; - if (vehicle->var_CD == 16 && - (trackType == TRACK_ELEM_LEFT_REVERSER || - trackType == TRACK_ELEM_RIGHT_REVERSER) && - vehicle->track_progress == 96 - ) { - vehicle_reverse_reverser_car(vehicle); + regs.ebx = 0; + if (x != unk_F64E20.x) + { + regs.ebx |= 1; + } + if (y != unk_F64E20.y) + { + regs.ebx |= 2; + } + if (z != unk_F64E20.z) + { + regs.ebx |= 4; + } - 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; - } + 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; + } - // 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; - vehicle->vehicle_sprite_type = moveInfo->vehicle_sprite_type; + if (vehicle->var_CD == 16 && (trackType == TRACK_ELEM_LEFT_REVERSER || trackType == TRACK_ELEM_RIGHT_REVERSER) && + vehicle->track_progress == 96) + { + vehicle_reverse_reverser_car(vehicle); - regs.ebx = moveInfo->vehicle_sprite_type; + 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; + } - if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_25) && moveInfo->vehicle_sprite_type != 0) { - vehicle->var_4A = 0; - vehicle->swinging_car_var_0 = 0; - vehicle->var_4E = 0; - } + // 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; + vehicle->vehicle_sprite_type = moveInfo->vehicle_sprite_type; - // vehicle == frontVehicle - if (vehicle == _vehicleFrontVehicle) { - if (_vehicleVelocityF64E08 >= 0) { - regs.bp = vehicle->prev_vehicle_on_ride; - if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16 *)®s.bp)) { - goto loc_6DB967; + regs.ebx = moveInfo->vehicle_sprite_type; + + if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_25) && moveInfo->vehicle_sprite_type != 0) + { + vehicle->var_4A = 0; + vehicle->swinging_car_var_0 = 0; + vehicle->var_4E = 0; + } + + // vehicle == frontVehicle + if (vehicle == _vehicleFrontVehicle) + { + if (_vehicleVelocityF64E08 >= 0) + { + regs.bp = vehicle->prev_vehicle_on_ride; + if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16 *)®s.bp)) + { + goto loc_6DB967; + } } } } // loc_6DB928 - if (vehicle->remaining_distance < 0x368A) { + if (vehicle->remaining_distance < 0x368A) + { return true; } @@ -7759,7 +8290,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: @@ -7768,24 +8299,29 @@ 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_18)) { - if (regs.eax > 0xE0000) { - if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_22)) { + if (!(rideEntry->flags & RIDE_ENTRY_FLAG_18)) + { + if (regs.eax > 0xE0000) + { + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_22)) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_COLLISION; } } } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_30) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_30) + { vehicle->velocity -= vehicle->velocity >> 2; } - else { + else + { sint32 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; @@ -7795,28 +8331,26 @@ loc_6DB967: * * rct2: 0x006DBAA6 */ -static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle *vehicle, uint16 trackType, Ride* ride, rct_ride_entry* rideEntry, uint16* progress) { +static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle * vehicle, uint16 trackType, Ride * ride, + rct_ride_entry * rideEntry, uint16 * progress) +{ _vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_start; - _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_start; - rct_map_element* mapElement = 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_map_element * mapElement = + map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); if (mapElement == NULL) return false; - bool nextTileBackwards = true; + bool nextTileBackwards = true; sint32 direction; -//loc_6DBB08:; + // loc_6DBB08:; sint16 x = vehicle->track_x; sint16 y = vehicle->track_y; sint16 z = 0; - switch (vehicle->var_CD) { + switch (vehicle->var_CD) + { case 3: vehicle->var_CD = 1; break; @@ -7828,33 +8362,33 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle *veh break; case 2: case 4: - vehicle->var_CD = 2; + vehicle->var_CD = 2; nextTileBackwards = false; break; } - - if (nextTileBackwards == true) { - //loc_6DBB7E:; + if (nextTileBackwards == true) + { + // loc_6DBB7E:; track_begin_end trackBeginEnd; - if (!track_block_get_previous(x, y, mapElement, &trackBeginEnd)) { + if (!track_block_get_previous(x, y, mapElement, &trackBeginEnd)) + { return false; } mapElement = trackBeginEnd.begin_element; trackType = mapElement->properties.track.type; - if (trackType == TRACK_ELEM_LEFT_REVERSER || - trackType == TRACK_ELEM_RIGHT_REVERSER) { + if (trackType == TRACK_ELEM_LEFT_REVERSER || trackType == TRACK_ELEM_RIGHT_REVERSER) + { return false; } sint32 trackColour = ((vehicle->update_flags >> 9) ^ mapElement->properties.track.colour) & 4; - sint32 bank = TrackDefinitions[trackType].bank_end; - bank = track_get_actual_bank_2(ride->type, trackColour, bank); - sint32 vAngle = TrackDefinitions[trackType].vangle_end; - if (_vehicleVAngleEndF64E36 != vAngle || - _vehicleBankEndF64E37 != bank - ) { + sint32 bank = TrackDefinitions[trackType].bank_end; + bank = track_get_actual_bank_2(ride->type, trackColour, bank); + sint32 vAngle = TrackDefinitions[trackType].vangle_end; + if (_vehicleVAngleEndF64E36 != vAngle || _vehicleBankEndF64E37 != bank) + { return false; } @@ -7868,67 +8402,74 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle *veh } } - 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:; + else + { + // loc_6DBB4F:; rct_xy_element input; rct_xy_element output; - sint32 outputZ; + sint32 outputZ; - input.x = x; - input.y = y; + input.x = x; + input.y = y; input.element = mapElement; - if (!track_block_get_next(&input, &output, &outputZ, &direction)) { + if (!track_block_get_next(&input, &output, &outputZ, &direction)) + { return false; } mapElement = output.element; - x = output.x; - y = output.y; - z = outputZ; + x = output.x; + y = output.y; + z = outputZ; } -//loc_6DBC3B: + // loc_6DBC3B: vehicle->track_x = x; vehicle->track_y = y; vehicle->track_z = z; - if (vehicle->var_CD != 0 && - vehicle->var_CD < 5) + 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) && + 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) && + 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; } } - if (track_element_is_lift_hill(mapElement)) { - if (_vehicleVelocityF64E08 < 0) { - if (vehicle->next_vehicle_on_train == SPRITE_INDEX_NULL) { + if (track_element_is_lift_hill(mapElement)) + { + if (_vehicleVelocityF64E08 < 0) + { + if (vehicle->next_vehicle_on_train == SPRITE_INDEX_NULL) + { trackType = mapElement->properties.track.type; - if (!(TrackFlags[trackType] & TRACK_ELEM_FLAG_DOWN)) { + if (!(TrackFlags[trackType] & TRACK_ELEM_FLAG_DOWN)) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_9; } } vehicle->update_flags |= VEHICLE_UPDATE_FLAG_0; } } - else { - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_0) { + else + { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_0) + { vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_0; - if (vehicle->next_vehicle_on_train == SPRITE_INDEX_NULL) { - if (_vehicleVelocityF64E08 < 0) { + if (vehicle->next_vehicle_on_train == SPRITE_INDEX_NULL) + { + if (_vehicleVelocityF64E08 < 0) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_8; } } @@ -7936,7 +8477,8 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle *veh } trackType = mapElement->properties.track.type; - if (trackType != TRACK_ELEM_BRAKES) { + if (trackType != TRACK_ELEM_BRAKES) + { vehicle->target_seat_rotation = track_element_get_seat_rotation(mapElement); } direction &= 3; @@ -7946,7 +8488,7 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle *veh // There are two bytes before the move info list uint16 trackTotalProgress = vehicle_get_move_info_size(vehicle->var_CD, vehicle->track_type); - *progress = trackTotalProgress - 1; + *progress = trackTotalProgress - 1; return true; } @@ -7954,86 +8496,108 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle *veh * * 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 = { 0 }; loc_6DBA33:; uint16 trackType = vehicle->track_type >> 2; - if (trackType == TRACK_ELEM_FLAT && ride->type == RIDE_TYPE_REVERSE_FREEFALL_COASTER) { + if (trackType == TRACK_ELEM_FLAT && ride->type == RIDE_TYPE_REVERSE_FREEFALL_COASTER) + { sint32 unkVelocity = _vehicleVelocityF64E08; - if (unkVelocity < -524288) { - unkVelocity = abs(unkVelocity); + if (unkVelocity < -524288) + { + unkVelocity = abs(unkVelocity); vehicle->acceleration = unkVelocity * 2; } } - if (trackType == TRACK_ELEM_BRAKES) { + if (trackType == TRACK_ELEM_BRAKES) + { regs.eax = -(vehicle->brake_speed << 16); - if (regs.eax > _vehicleVelocityF64E08) { - regs.eax = _vehicleVelocityF64E08 * -16; + if (regs.eax > _vehicleVelocityF64E08) + { + regs.eax = _vehicleVelocityF64E08 * -16; vehicle->acceleration = regs.eax; } } - if (track_element_is_booster(ride->type, trackType)) { + if (track_element_is_booster(ride->type, trackType)) + { regs.eax = get_booster_speed(ride->type, (vehicle->brake_speed << 16)); - if (regs.eax < _vehicleVelocityF64E08) { - regs.eax = RideProperties[ride->type].booster_acceleration << 16; + if (regs.eax < _vehicleVelocityF64E08) + { + regs.eax = RideProperties[ride->type].booster_acceleration << 16; vehicle->acceleration = regs.eax; } } regs.ax = vehicle->track_progress - 1; - if (regs.ax == -1) { - if (!vehicle_update_track_motion_backwards_get_new_track(vehicle, trackType, ride, rideEntry, (uint16 *)®s.ax)) { + if (regs.ax == -1) + { + if (!vehicle_update_track_motion_backwards_get_new_track(vehicle, trackType, ride, rideEntry, (uint16 *)®s.ax)) + { goto loc_6DBE5E; } } // 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); + sint16 x = vehicle->track_x + moveInfo->x; + sint16 y = vehicle->track_y + moveInfo->y; + sint16 z = vehicle->track_z + moveInfo->z + RideData5[ride->type].z_offset; - sint16 x = vehicle->track_x + moveInfo->x; - sint16 y = vehicle->track_y + moveInfo->y; - sint16 z = vehicle->track_z + moveInfo->z + RideData5[ride->type].z_offset; + regs.ebx = 0; + if (x != unk_F64E20.x) + { + regs.ebx |= 1; + } + if (y != unk_F64E20.y) + { + regs.ebx |= 2; + } + if (z != unk_F64E20.z) + { + regs.ebx |= 4; + } + vehicle->remaining_distance += dword_9A2930[regs.ebx]; - regs.ebx = 0; - if (x != unk_F64E20.x) { regs.ebx |= 1; } - if (y != unk_F64E20.y) { regs.ebx |= 2; } - if (z != unk_F64E20.z) { regs.ebx |= 4; } - 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; + vehicle->vehicle_sprite_type = regs.bl; - 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->var_4A = 0; + vehicle->swinging_car_var_0 = 0; + vehicle->var_4E = 0; + } - if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_25) && regs.bl != 0) { - vehicle->var_4A = 0; - vehicle->swinging_car_var_0 = 0; - vehicle->var_4E = 0; - } - - if (vehicle == _vehicleFrontVehicle) { - if (_vehicleVelocityF64E08 < 0) { - regs.bp = vehicle->next_vehicle_on_ride; - if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16*)®s.bp)) { - goto loc_6DBE7F; + if (vehicle == _vehicleFrontVehicle) + { + if (_vehicleVelocityF64E08 < 0) + { + regs.bp = vehicle->next_vehicle_on_ride; + if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16 *)®s.bp)) + { + goto loc_6DBE7F; + } } } } // loc_6DBE3F - if (vehicle->remaining_distance >= 0) { + if (vehicle->remaining_distance >= 0) + { return true; } regs.ebx = dword_9A2970[regs.ebx]; @@ -8054,26 +8618,31 @@ 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_18)) { - if (regs.eax > 0xE0000) { - if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_22)) { + if (!(rideEntry->flags & RIDE_ENTRY_FLAG_18)) + { + if (regs.eax > 0xE0000) + { + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_22)) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_COLLISION; } } } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_30) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_30) + { vehicle->velocity -= vehicle->velocity >> 2; _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_2; } - else { + else + { sint32 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; } @@ -8085,34 +8654,38 @@ loc_6DBE7F: * * */ -static sint32 vehicle_update_track_motion_mini_golf(rct_vehicle *vehicle, sint32* outStation) { +static sint32 vehicle_update_track_motion_mini_golf(rct_vehicle * vehicle, sint32 * outStation) +{ registers regs = { 0 }; - 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_map_element *mapElement = NULL; + rct_map_element * mapElement = NULL; - gCurrentVehicle = vehicle; + gCurrentVehicle = vehicle; _vehicleMotionTrackFlags = 0; vehicle->velocity += vehicle->acceleration; _vehicleVelocityF64E08 = vehicle->velocity; _vehicleVelocityF64E0C = (vehicle->velocity >> 10) * 42; - if (_vehicleVelocityF64E08 < 0) { + if (_vehicleVelocityF64E08 < 0) + { vehicle = vehicle_get_tail(vehicle); } _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) { + if (vehicle->remaining_distance < 0) + { goto loc_6DCA7A; } - if (vehicle->remaining_distance < 0x368A) { + if (vehicle->remaining_distance < 0x368A) + { goto loc_6DCE02; } vehicle->var_B8 &= ~(1 << 1); @@ -8122,61 +8695,78 @@ loc_6DC40E: vehicle_invalidate(vehicle); loc_6DC462: - if (vehicle->var_D3 == 0) { + if (vehicle->var_D3 == 0) + { goto loc_6DC476; } vehicle->var_D3--; goto loc_6DC985; loc_6DC476: - if (vehicle->mini_golf_flags & (1 << 2)) { + if (vehicle->mini_golf_flags & (1 << 2)) + { uint8 nextFrame = vehicle->var_C5 + 1; - if (nextFrame < mini_golf_peep_animation_lengths[vehicle->mini_golf_current_animation]) { + if (nextFrame < mini_golf_peep_animation_lengths[vehicle->mini_golf_current_animation]) + { vehicle->var_C5 = nextFrame; goto loc_6DC985; } vehicle->mini_golf_flags &= ~(1 << 2); } - 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); - if (!(vEDI->mini_golf_flags & (1 << 0)) || (vEDI->mini_golf_flags & (1 << 2))) { + 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); + if (!(vEDI->mini_golf_flags & (1 << 0)) || (vEDI->mini_golf_flags & (1 << 2))) + { goto loc_6DC985; } - if (vEDI->var_D3 != 0) { + if (vEDI->var_D3 != 0) + { goto loc_6DC985; } vEDI->mini_golf_flags &= ~(1 << 0); vehicle->mini_golf_flags &= ~(1 << 0); } - 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); - if (!(vEDI->mini_golf_flags & (1 << 1)) || (vEDI->mini_golf_flags & (1 << 2))) { + 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); + if (!(vEDI->mini_golf_flags & (1 << 1)) || (vEDI->mini_golf_flags & (1 << 2))) + { goto loc_6DC985; } - if (vEDI->var_D3 != 0) { + if (vEDI->var_D3 != 0) + { goto loc_6DC985; } vEDI->mini_golf_flags &= ~(1 << 1); vehicle->mini_golf_flags &= ~(1 << 1); } - if (vehicle->mini_golf_flags & (1 << 3)) { - rct_vehicle *vEDI = vehicle; + if (vehicle->mini_golf_flags & (1 << 3)) + { + rct_vehicle * vEDI = vehicle; - for (;;) { + for (;;) + { vEDI = GET_VEHICLE(vEDI->prev_vehicle_on_ride); - if (vEDI == vehicle) { + if (vEDI == vehicle) + { break; } - if (!vEDI->is_child) continue; - if (!(vEDI->mini_golf_flags & (1 << 4))) continue; - if (vEDI->track_x != vehicle->track_x) continue; - if (vEDI->track_y != vehicle->track_y) continue; - if (vEDI->track_z != vehicle->track_z) continue; + if (!vEDI->is_child) + continue; + if (!(vEDI->mini_golf_flags & (1 << 4))) + continue; + if (vEDI->track_x != vehicle->track_x) + continue; + if (vEDI->track_y != vehicle->track_y) + continue; + if (vEDI->track_z != vehicle->track_z) + continue; goto loc_6DC985; } @@ -8185,54 +8775,62 @@ loc_6DC476: } // loc_6DC5B8 - const rct_vehicle_info* moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, 0); + // Note: Line below was here as part of + // https://github.com/OpenRCT2/OpenRCT2/pull/2605/files#diff-e6c06ccf59b47239e1e220468e52497dR7736 + // but it is not used and overridden later on. + // const rct_vehicle_info* moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, 0); // There are two bytes before the move info list { uint16 unk16_v34 = vehicle->track_progress + 1; - uint16 unk16 = vehicle_get_move_info_size(vehicle->var_CD, vehicle->track_type); - if (unk16_v34 < unk16) { + uint16 unk16 = vehicle_get_move_info_size(vehicle->var_CD, vehicle->track_type); + if (unk16_v34 < unk16) + { regs.ax = unk16_v34; goto loc_6DC743; } } - uint16 trackType = vehicle->track_type >> 2; - _vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_end; - _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end; - mapElement = map_get_track_element_at_of_type_seq( - vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, - trackType, 0 - ); + { + uint16 trackType = vehicle->track_type >> 2; + _vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_end; + _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end; + mapElement = + map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); + } sint16 x, y, z; sint32 direction; { rct_xy_element input, output; - sint32 outZ, outDirection; - input.x = vehicle->track_x; - input.y = vehicle->track_y; + sint32 outZ, outDirection; + input.x = vehicle->track_x; + input.y = vehicle->track_y; input.element = mapElement; - if (!track_block_get_next(&input, &output, &outZ, &outDirection)) { + if (!track_block_get_next(&input, &output, &outZ, &outDirection)) + { goto loc_6DC9BC; } mapElement = 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, mapElement)) { + if (!loc_6DB38B(vehicle, mapElement)) + { goto loc_6DC9BC; } - sint32 rideType = get_ride(mapElement->properties.track.ride_index)->type; - vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES; - if (RideData4[rideType].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) { - if (track_element_is_inverted(mapElement)) + sint32 rideType = get_ride(mapElement->properties.track.ride_index)->type; + vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES; + if (RideData4[rideType].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) { - vehicle->update_flags |= VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES; + if (track_element_is_inverted(mapElement)) + { + vehicle->update_flags |= VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES; + } } } @@ -8240,10 +8838,12 @@ loc_6DC476: vehicle->track_y = y; vehicle->track_z = z; - if (vehicle->is_child) { - rct_vehicle *prevVehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride); - regs.al = prevVehicle->var_CD; - if (regs.al != 9) { + if (vehicle->is_child) + { + rct_vehicle * prevVehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride); + regs.al = prevVehicle->var_CD; + if (regs.al != 9) + { regs.al--; } vehicle->var_CD = regs.al; @@ -8251,34 +8851,43 @@ loc_6DC476: vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_0; vehicle->track_type = (mapElement->properties.track.type << 2) | (direction & 3); - vehicle->var_CF = map_element_get_brake_booster_speed(mapElement); - regs.ax = 0; + vehicle->var_CF = map_element_get_brake_booster_speed(mapElement); + regs.ax = 0; loc_6DC743: vehicle->track_progress = regs.ax; - if (vehicle->is_child) { + if (vehicle->is_child) + { vehicle->var_C5++; - if (vehicle->var_C5 >= 6) { + if (vehicle->var_C5 >= 6) + { vehicle->var_C5 = 0; } } - - for (;;) { + const rct_vehicle_info * moveInfo; + for (;;) + { moveInfo = vehicle_get_move_info(vehicle->var_CD, vehicle->track_type, vehicle->track_progress); - if (moveInfo->x != LOCATION_NULL) { + if (moveInfo->x != LOCATION_NULL) + { break; } - switch (moveInfo->y) { + switch (moveInfo->y) + { case 0: // loc_6DC7B4 - if (vehicle->is_child) { + if (vehicle->is_child) + { vehicle->mini_golf_flags |= (1 << 3); } - else { + else + { uint16 rand16 = scenario_rand() & 0xFFFF; - regs.bl = 14; - if (rand16 <= 0xA000) { + regs.bl = 14; + if (rand16 <= 0xA000) + { regs.bl = 12; - if (rand16 <= 0x900) { + if (rand16 <= 0x900) + { regs.bl = 10; } } @@ -8303,22 +8912,27 @@ loc_6DC743: // 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) { + 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) { + if (z == 6) + { + rct_peep * peep = GET_PEEP(vehicle->peep[0]); + if (peep->id & 7) + { z = 8; } } } vehicle->mini_golf_current_animation = (uint8)z; - vehicle->var_C5 = 0; + vehicle->var_C5 = 0; vehicle->track_progress++; break; case 5: // loc_6DC87A @@ -8344,40 +8958,48 @@ loc_6DC743: // Investigate redundant code regs.ebx = 0; - if (regs.ax != unk_F64E20.x) { + if (regs.ax != unk_F64E20.x) + { regs.ebx |= 1; } - if (regs.cx == unk_F64E20.y) { + if (regs.cx == unk_F64E20.y) + { regs.ebx |= 2; } - if (regs.dx == unk_F64E20.z) { + if (regs.dx == unk_F64E20.z) + { regs.ebx |= 4; } regs.ebx = 0x368A; vehicle->remaining_distance -= regs.ebx; - if (vehicle->remaining_distance < 0) { + if (vehicle->remaining_distance < 0) + { 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->var_4A = 0; + if (rideEntry->vehicles[0].flags & VEHICLE_ENTRY_FLAG_25) + { + if (vehicle->vehicle_sprite_type != 0) + { + vehicle->var_4A = 0; vehicle->swinging_car_var_0 = 0; - vehicle->var_4E = 0; + vehicle->var_4E = 0; } } - if (vehicle == _vehicleFrontVehicle) { - if (_vehicleVelocityF64E08 >= 0) { + if (vehicle == _vehicleFrontVehicle) + { + if (_vehicleVelocityF64E08 >= 0) + { regs.bp = vehicle->prev_vehicle_on_ride; - vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16*)®s.bp); + vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16 *)®s.bp); } } goto loc_6DC99A; @@ -8385,12 +9007,14 @@ loc_6DC743: loc_6DC985: regs.ebx = 0; vehicle->remaining_distance -= 0x368A; - if (vehicle->remaining_distance < 0) { + if (vehicle->remaining_distance < 0) + { vehicle->remaining_distance = 0; } loc_6DC99A: - if (vehicle->remaining_distance < 0x368A) { + if (vehicle->remaining_distance < 0x368A) + { goto loc_6DCDE4; } vehicle->acceleration = dword_9A2970[vehicle->vehicle_sprite_type]; @@ -8418,40 +9042,46 @@ loc_6DCA7A: loc_6DCA9A: regs.ax = vehicle->track_progress - 1; - if ((uint16)regs.ax != 0xFFFF) { + if ((uint16)regs.ax != 0xFFFF) + { goto loc_6DCC2C; } - trackType = vehicle->track_type >> 2; - _vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_end; - _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end; - mapElement = map_get_track_element_at_of_type_seq( - vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, - trackType, 0 - ); + { + uint16 trackType = vehicle->track_type >> 2; + _vehicleVAngleEndF64E36 = TrackDefinitions[trackType].vangle_end; + _vehicleBankEndF64E37 = TrackDefinitions[trackType].bank_end; + + mapElement = + map_get_track_element_at_of_type_seq(vehicle->track_x, vehicle->track_y, vehicle->track_z >> 3, trackType, 0); + } { track_begin_end trackBeginEnd; - if (!track_block_get_previous(vehicle->track_x, vehicle->track_y, mapElement, &trackBeginEnd)) { + if (!track_block_get_previous(vehicle->track_x, vehicle->track_y, mapElement, &trackBeginEnd)) + { 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; mapElement = trackBeginEnd.begin_element; } - if (!loc_6DB38B(vehicle, mapElement)) { + if (!loc_6DB38B(vehicle, mapElement)) + { goto loc_6DCD4A; } - rideType = get_ride(mapElement->properties.track.ride_index)->type; - vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES; - if (RideData4[rideType].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) { - if (track_element_is_inverted(mapElement)) + sint32 rideType = get_ride(mapElement->properties.track.ride_index)->type; + vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES; + if (RideData4[rideType].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) { - vehicle->update_flags |= VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES; + if (track_element_is_inverted(mapElement)) + { + vehicle->update_flags |= VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES; + } } } @@ -8459,17 +9089,20 @@ loc_6DCA9A: vehicle->track_y = y; vehicle->track_z = z; - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_0) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_0) + { vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_0; - if (vehicle->next_vehicle_on_train == SPRITE_INDEX_NULL) { - if (_vehicleVelocityF64E08 < 0) { + if (vehicle->next_vehicle_on_train == SPRITE_INDEX_NULL) + { + if (_vehicleVelocityF64E08 < 0) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_8; } } } vehicle->track_type = (mapElement->properties.track.type << 2) | (direction & 3); - vehicle->var_CF = (mapElement->properties.track.colour >> 4) << 1; + vehicle->var_CF = (mapElement->properties.track.colour >> 4) << 1; // There are two bytes before the move info list regs.ax = vehicle_get_move_info_size(vehicle->var_CD, vehicle->track_type); @@ -8478,53 +9111,63 @@ 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; - if (regs.ax != unk_F64E20.x) { + if (regs.ax != unk_F64E20.x) + { regs.ebx |= 1; } - if (regs.cx == unk_F64E20.y) { + if (regs.cx == unk_F64E20.y) + { regs.ebx |= 2; } - if (regs.dx == unk_F64E20.z) { + if (regs.dx == unk_F64E20.z) + { regs.ebx |= 4; } regs.ebx = 0x368A; vehicle->remaining_distance -= regs.ebx; - if (vehicle->remaining_distance < 0) { + if (vehicle->remaining_distance < 0) + { 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->var_4A = 0; + if (rideEntry->vehicles[0].flags & VEHICLE_ENTRY_FLAG_25) + { + if (vehicle->vehicle_sprite_type != 0) + { + vehicle->var_4A = 0; vehicle->swinging_car_var_0 = 0; - vehicle->var_4E = 0; + vehicle->var_4E = 0; } } - if (vehicle == _vehicleFrontVehicle) { - if (_vehicleVelocityF64E08 >= 0) { + if (vehicle == _vehicleFrontVehicle) + { + if (_vehicleVelocityF64E08 >= 0) + { regs.bp = vehicle->var_44; - if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16*)®s.bp)) { + if (vehicle_update_motion_collision_detection(vehicle, x, y, z, (uint16 *)®s.bp)) + { goto loc_6DCD6B; } } } loc_6DCD2B: - if (vehicle->remaining_distance >= 0) { + if (vehicle->remaining_distance >= 0) + { goto loc_6DCDE4; } vehicle->acceleration += dword_9A2970[vehicle->vehicle_sprite_type]; @@ -8543,51 +9186,64 @@ loc_6DCD6B: regs.eax = vehicle->remaining_distance - 0x368A; _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); - if (regs.eax > 0xE0000) { - if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_22)) { - _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_COLLISION; + { + 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_22)) + { + _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_COLLISION; + } } + vEDI->velocity = vEBP->velocity >> 1; + vEBP->velocity = vEDI->velocity >> 1; } - vEDI->velocity = vEBP->velocity >> 1; - vEBP->velocity = vEDI->velocity >> 1; _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_2; 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: vehicle->acceleration /= _vehicleUnkF64E10; - if (vehicle->var_CD == 2) { + if (vehicle->var_CD == 2) + { goto loc_6DCEB2; } - trackType = vehicle->track_type >> 2; - if (!(TrackSequenceProperties[trackType][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) { - goto loc_6DCEB2; + { + uint16 trackType = vehicle->track_type >> 2; + if (!(TrackSequenceProperties[trackType][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) + { + goto loc_6DCEB2; + } + _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_3; + if (trackType != TRACK_ELEM_END_STATION) + { + goto loc_6DCEB2; + } } - _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_3; - if (trackType != TRACK_ELEM_END_STATION) { - goto loc_6DCEB2; - } - if (vehicle != gCurrentVehicle) { + if (vehicle != gCurrentVehicle) + { goto loc_6DCEB2; } regs.ax = vehicle->track_progress; - if (_vehicleVelocityF64E08 < 0) { + if (_vehicleVelocityF64E08 < 0) + { goto loc_6DCE62; } regs.cx = 8; - if (regs.ax > regs.cx) { + if (regs.ax > regs.cx) + { goto loc_6DCE68; } goto loc_6DCEB2; loc_6DCE62: - if (regs.ax > 11) { + if (regs.ax > 11) + { goto loc_6DCEB2; } @@ -8596,49 +9252,58 @@ loc_6DCE68: regs.al = vehicle->track_x >> 5; regs.ah = vehicle->track_y >> 5; regs.dl = vehicle->track_z >> 3; - for (sint32 i = 0; i < MAX_STATIONS; i++) { - if ((uint16)regs.ax != ride->station_starts[i].xy) { + for (sint32 i = 0; i < MAX_STATIONS; i++) + { + if ((uint16)regs.ax != ride->station_starts[i].xy) + { continue; } - if ((uint16)regs.dl != ride->station_heights[i]) { + if ((uint16)regs.dl != ride->station_heights[i]) + { continue; } _vehicleStationIndex = i; } loc_6DCEB2: - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_0) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_0) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_ON_LIFT_HILL; } - if (_vehicleVelocityF64E08 >= 0) { + if (_vehicleVelocityF64E08 >= 0) + { regs.si = vehicle->next_vehicle_on_train; - if ((uint16)regs.si == SPRITE_INDEX_NULL) { + if ((uint16)regs.si == SPRITE_INDEX_NULL) + { goto loc_6DCEFF; } vehicle = GET_VEHICLE((uint16)regs.si); goto loc_6DC40E; } - if (vehicle == gCurrentVehicle) { + if (vehicle == gCurrentVehicle) + { goto loc_6DCEFF; } vehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride); 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 (;;) { + for (;;) + { regs.ebx++; regs.dx |= vehicle->update_flags; regs.bp += vehicle->friction; regs.eax += vehicle->acceleration; regs.si = vehicle->next_vehicle_on_train; - if ((uint16)regs.si == SPRITE_INDEX_NULL) { + if ((uint16)regs.si == SPRITE_INDEX_NULL) + { break; } vehicle = GET_VEHICLE((uint16)regs.si); @@ -8652,29 +9317,34 @@ loc_6DCEFF: regs.ebx = vehicle->velocity; regs.edx = vehicle->velocity >> 8; regs.edx *= regs.edx; - if (regs.ebx < 0) { + if (regs.ebx < 0) + { regs.edx = -regs.edx; } regs.edx >>= 4; regs.eax = regs.edx / regs.ebp; regs.ecx -= regs.eax; - if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED)) { + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED)) + { goto loc_6DD069; } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_0) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_0) + { regs.eax = vehicle->speed * 0x4000; - if (regs.eax < vehicle->velocity) { + if (regs.eax < vehicle->velocity) + { goto loc_6DD069; } } 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; regs.ebx >>= 2; - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_3) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_3) + { regs.eax = -regs.eax; } regs.eax -= vehicle->velocity; @@ -8683,30 +9353,38 @@ loc_6DCEFF: regs.eax *= regs.edx; regs.eax = regs.eax / regs.ebx; - if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_29)) { + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_29)) + { goto loc_6DD054; } - if (regs.eax < 0) { + if (regs.eax < 0) + { regs.eax >>= 4; } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING) { - vehicle->var_B6 = clamp(-0x200, (sint16)vehicle->var_B6, 0x200); + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING) + { + vehicle->var_B6 = Math::Clamp(static_cast(-0x200), (sint16)vehicle->var_B6, static_cast(0x200)); } - if (vehicle->vehicle_sprite_type != 0) { - regs.eax = max(0, regs.eax); - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING) { - if (vehicle->vehicle_sprite_type == 2) { + if (vehicle->vehicle_sprite_type != 0) + { + regs.eax = Math::Max(0, regs.eax); + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING) + { + if (vehicle->vehicle_sprite_type == 2) + { vehicle->var_B6 = 0; } } } - else { + else + { loc_6DD054: regs.ebx = abs(vehicle->velocity); - if (regs.ebx > 0x10000) { + if (regs.ebx > 0x10000) + { regs.ecx = 0; } } @@ -8714,10 +9392,11 @@ loc_6DCEFF: loc_6DD069: vehicle->acceleration = regs.ecx; - regs.eax = _vehicleMotionTrackFlags; - regs.ebx = _vehicleStationIndex; + regs.eax = _vehicleMotionTrackFlags; + regs.ebx = _vehicleStationIndex; - if (outStation != NULL) *outStation = regs.ebx; + if (outStation != NULL) + *outStation = regs.ebx; return regs.eax; } @@ -8725,33 +9404,35 @@ loc_6DD069: * * rct2: 0x006DAB4C */ -sint32 vehicle_update_track_motion(rct_vehicle *vehicle, sint32 *outStation) +sint32 vehicle_update_track_motion(rct_vehicle * vehicle, sint32 * outStation) { registers regs = { 0 }; - 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 == NULL) { return 0; } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_MINI_GOLF) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_MINI_GOLF) + { return vehicle_update_track_motion_mini_golf(vehicle, outStation); } - _vehicleF64E2C = 0; - gCurrentVehicle = vehicle; + _vehicleF64E2C = 0; + gCurrentVehicle = vehicle; _vehicleMotionTrackFlags = 0; - _vehicleStationIndex = 0xFF; + _vehicleStationIndex = 0xFF; vehicle_update_track_motion_up_stop_check(vehicle); check_and_apply_block_section_stop_site(vehicle); update_velocity(vehicle); - if (_vehicleVelocityF64E08 < 0) { + if (_vehicleVelocityF64E08 < 0) + { vehicle = vehicle_get_tail(vehicle); } // This will be the front vehicle even when traveling @@ -8759,42 +9440,51 @@ sint32 vehicle_update_track_motion(rct_vehicle *vehicle, sint32 *outStation) _vehicleFrontVehicle = vehicle; uint16 spriteId = vehicle->sprite_index; - while (spriteId != SPRITE_INDEX_NULL) { - rct_vehicle* car = GET_VEHICLE(spriteId); - vehicleEntry = vehicle_get_vehicle_entry(car); + while (spriteId != SPRITE_INDEX_NULL) + { + rct_vehicle * car = GET_VEHICLE(spriteId); + vehicleEntry = vehicle_get_vehicle_entry(car); // Swinging cars - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SWINGING) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SWINGING) + { vehicle_update_swinging_car(car); } // Spinning cars - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING) + { vehicle_update_spinning_car(car); } // Rider sprites?? animation?? - if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_23) || (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_24)) { + if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_23) || (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_24)) + { sub_6D63D4(car); } car->acceleration = dword_9A2970[car->vehicle_sprite_type]; _vehicleUnkF64E10 = 1; - regs.eax = _vehicleVelocityF64E0C + car->remaining_distance; + regs.eax = _vehicleVelocityF64E0C + car->remaining_distance; car->remaining_distance = regs.eax; car->var_B8 &= ~(1 << 1); 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) { - if (car->remaining_distance < 0) { + while (true) + { + if (car->remaining_distance < 0) + { // Backward loop - if (vehicle_update_track_motion_backwards(car, vehicleEntry, ride, rideEntry)) { + if (vehicle_update_track_motion_backwards(car, vehicleEntry, ride, rideEntry)) + { break; } - else { - if (car->remaining_distance < 0x368A) { + else + { + if (car->remaining_distance < 0x368A) + { break; } regs.ebx = dword_9A2970[car->vehicle_sprite_type]; @@ -8803,39 +9493,47 @@ sint32 vehicle_update_track_motion(rct_vehicle *vehicle, sint32 *outStation) continue; } } - if (car->remaining_distance < 0x368A) { + if (car->remaining_distance < 0x368A) + { // Location found goto loc_6DBF3E; } - if (vehicle_update_track_motion_forwards(car, vehicleEntry, ride, rideEntry)) { + if (vehicle_update_track_motion_forwards(car, vehicleEntry, ride, rideEntry)) + { break; } - else { - if (car->remaining_distance >= 0) { + else + { + if (car->remaining_distance >= 0) + { break; } - regs.ebx = dword_9A2970[car->vehicle_sprite_type]; + regs.ebx = dword_9A2970[car->vehicle_sprite_type]; car->acceleration = regs.ebx; _vehicleUnkF64E10++; continue; } } // 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); // loc_6DC0F7 - if (car->update_flags & VEHICLE_UPDATE_FLAG_0) { + if (car->update_flags & VEHICLE_UPDATE_FLAG_0) + { _vehicleMotionTrackFlags |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_VEHICLE_ON_LIFT_HILL; } - if (_vehicleVelocityF64E08 >= 0) { + if (_vehicleVelocityF64E08 >= 0) + { spriteId = car->next_vehicle_on_train; } - else { - if (car == gCurrentVehicle) { + else + { + if (car == gCurrentVehicle) + { break; } spriteId = car->prev_vehicle_on_ride; @@ -8845,16 +9543,17 @@ sint32 vehicle_update_track_motion(rct_vehicle *vehicle, sint32 *outStation) vehicle = gCurrentVehicle; vehicleEntry = vehicle_get_vehicle_entry(vehicle); - //eax + // eax sint32 totalAcceleration = 0; - //ebp + // ebp sint32 totalFriction = 0; - //Not used + // Not used regs.dx = 0; - //ebx + // ebx sint32 numVehicles = 0; - for (;;) { + for (;;) + { numVehicles++; // Not used? regs.dx |= vehicle->update_flags; @@ -8862,25 +9561,30 @@ sint32 vehicle_update_track_motion(rct_vehicle *vehicle, sint32 *outStation) totalAcceleration += vehicle->acceleration; uint16 spriteIndex = vehicle->next_vehicle_on_train; - if (spriteIndex == SPRITE_INDEX_NULL) { + if (spriteIndex == SPRITE_INDEX_NULL) + { break; } vehicle = GET_VEHICLE(spriteIndex); } - vehicle = gCurrentVehicle; + vehicle = gCurrentVehicle; regs.eax = (totalAcceleration / numVehicles) * 21; - if (regs.eax < 0) { + if (regs.eax < 0) + { regs.eax += 511; } regs.eax >>= 9; regs.ecx = regs.eax; regs.eax = vehicle->velocity; - if (regs.eax < 0) { + if (regs.eax < 0) + { regs.eax = -regs.eax; regs.eax >>= 12; regs.eax = -regs.eax; - } else { + } + else + { regs.eax >>= 12; } @@ -8889,36 +9593,46 @@ sint32 vehicle_update_track_motion(rct_vehicle *vehicle, sint32 *outStation) regs.ebx = regs.edx; regs.edx >>= 8; regs.edx *= regs.edx; - if (regs.ebx < 0) { + if (regs.ebx < 0) + { regs.edx = -regs.edx; } regs.edx >>= 4; regs.eax = regs.edx; // OpenRCT2: vehicles from different track types can have 0 friction. - if (totalFriction != 0) { + if (totalFriction != 0) + { regs.eax = regs.eax / totalFriction; } regs.ecx -= regs.eax; - if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED)) { + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_POWERED)) + { goto loc_6DC2FA; } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_0) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_0) + { regs.eax = vehicle->speed * 0x4000; - if (regs.eax < vehicle->velocity) { + if (regs.eax < vehicle->velocity) + { goto loc_6DC2FA; } } regs.eax = vehicle->speed; - uint16 trackType = vehicle->track_direction >> 2; - if (trackType == TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE) { - goto loc_6DC22F; - } - if (trackType != TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE) { - goto loc_6DC23A; - } - if (vehicle->var_CD == 6) { - goto loc_6DC238; + { + uint16 trackType = vehicle->track_direction >> 2; + if (trackType == TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE) + { + goto loc_6DC22F; + } + if (trackType != TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE) + { + goto loc_6DC23A; + } + if (vehicle->var_CD == 6) + { + goto loc_6DC238; + } } loc_6DC226: @@ -8927,7 +9641,8 @@ loc_6DC226: goto loc_6DC23A; loc_6DC22F: - if (vehicle->var_CD != 5) { + if (vehicle->var_CD != 5) + { goto loc_6DC226; } @@ -8939,47 +9654,59 @@ loc_6DC23A: regs.eax <<= 14; regs.ebx *= totalFriction; regs.ebx >>= 2; - if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_3) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_3) + { regs.eax = -regs.eax; } regs.eax -= vehicle->velocity; regs.edx = vehicle->powered_acceleration; regs.edx <<= 1; regs.eax *= regs.edx; - if (regs.ebx != 0) { + if (regs.ebx != 0) + { regs.eax /= regs.ebx; } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_15) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_15) + { regs.eax *= 4; } - if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_29)) { + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_29)) + { goto loc_6DC2E3; } - if (regs.eax < 0) { + if (regs.eax < 0) + { regs.eax >>= 4; } - if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING) { + if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING) + { regs.bx = vehicle->var_B6; - if (regs.bx > 512) { + if (regs.bx > 512) + { regs.bx = 512; } - if (regs.bx < -512) { + if (regs.bx < -512) + { regs.bx = -512; } vehicle->var_B6 = regs.bx; } - if (vehicle->vehicle_sprite_type != 0) { - if (regs.eax < 0) { + if (vehicle->vehicle_sprite_type != 0) + { + if (regs.eax < 0) + { regs.eax = 0; } - if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING)) { - if (vehicle->vehicle_sprite_type == 2) { + if (!(vehicleEntry->flags & VEHICLE_ENTRY_FLAG_SPINNING)) + { + if (vehicle->vehicle_sprite_type == 2) + { vehicle->var_B6 = 0; } } @@ -8988,10 +9715,12 @@ loc_6DC23A: loc_6DC2E3: regs.ebx = vehicle->velocity; - if (regs.ebx < 0) { + if (regs.ebx < 0) + { regs.ebx = -regs.ebx; } - if (regs.ebx <= 0x10000) { + if (regs.ebx <= 0x10000) + { regs.ecx = 0; } @@ -9000,9 +9729,12 @@ loc_6DC2F6: goto loc_6DC316; loc_6DC2FA: - if (regs.ecx <= 0) { - if (regs.ecx >= -500) { - if (vehicle->velocity <= 0x8000) { + if (regs.ecx <= 0) + { + if (regs.ecx >= -500) + { + if (vehicle->velocity <= 0x8000) + { regs.ecx += 400; } } @@ -9010,20 +9742,24 @@ loc_6DC2FA: loc_6DC316: regs.bx = vehicle->track_type >> 2; - if (regs.bx == TRACK_ELEM_WATER_SPLASH) { - if (vehicle->track_progress >= 48 && - vehicle->track_progress <= 128 - ) { + if (regs.bx == TRACK_ELEM_WATER_SPLASH) + { + if (vehicle->track_progress >= 48 && vehicle->track_progress <= 128) + { regs.eax = vehicle->velocity >> 6; regs.ecx -= regs.eax; } } - if (rideEntry->flags & RIDE_ENTRY_FLAG_PLAY_SPLASH_SOUND_SLIDE) { - if (!vehicle->is_child) { + if (rideEntry->flags & RIDE_ENTRY_FLAG_PLAY_SPLASH_SOUND_SLIDE) + { + if (!vehicle->is_child) + { regs.bx = vehicle->track_type >> 2; - if (track_element_is_covered(regs.bx)) { - if (vehicle->velocity > 0x20000) { + if (track_element_is_covered(regs.bx)) + { + if (vehicle->velocity > 0x20000) + { regs.eax = vehicle->velocity >> 6; regs.ecx -= regs.eax; } @@ -9037,13 +9773,14 @@ loc_6DC316: regs.ebx = _vehicleStationIndex; // hook_setreturnregisters(®s); - if (outStation != NULL) *outStation = regs.ebx; + if (outStation != NULL) + *outStation = regs.ebx; return regs.eax; } -rct_ride_entry_vehicle *vehicle_get_vehicle_entry(rct_vehicle *vehicle) +rct_ride_entry_vehicle * vehicle_get_vehicle_entry(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 == NULL) { return NULL; @@ -9051,11 +9788,12 @@ rct_ride_entry_vehicle *vehicle_get_vehicle_entry(rct_vehicle *vehicle) return &rideEntry->vehicles[vehicle->vehicle_type]; } -sint32 vehicle_get_total_num_peeps(rct_vehicle *vehicle) +sint32 vehicle_get_total_num_peeps(rct_vehicle * vehicle) { uint16 spriteIndex; sint32 numPeeps = 0; - for (;;) { + for (;;) + { numPeeps += vehicle->num_peeps; spriteIndex = vehicle->next_vehicle_on_train; if (spriteIndex == SPRITE_INDEX_NULL) @@ -9071,17 +9809,17 @@ sint32 vehicle_get_total_num_peeps(rct_vehicle *vehicle) * * rct2: 0x006DA1EC */ -void vehicle_invalidate_window(rct_vehicle *vehicle) +void vehicle_invalidate_window(rct_vehicle * vehicle) { - sint32 viewVehicleIndex; - Ride *ride; - rct_window *w; + sint32 viewVehicleIndex; + Ride * ride; + rct_window * w; w = window_find_by_number(WC_RIDE, vehicle->ride); if (w == NULL) return; - ride = get_ride(vehicle->ride); + ride = get_ride(vehicle->ride); viewVehicleIndex = w->ride.view - 1; if (viewVehicleIndex < 0 || viewVehicleIndex >= ride->num_vehicles) return; diff --git a/src/openrct2/ride/vehicle.h b/src/openrct2/ride/Vehicle.h similarity index 100% rename from src/openrct2/ride/vehicle.h rename to src/openrct2/ride/Vehicle.h diff --git a/src/openrct2/ride/cable_lift.h b/src/openrct2/ride/cable_lift.h index f174192bb8..350067acfd 100644 --- a/src/openrct2/ride/cable_lift.h +++ b/src/openrct2/ride/cable_lift.h @@ -18,10 +18,18 @@ #define _CABLE_LIFT_H_ #include "../common.h" -#include "vehicle.h" +#include "Vehicle.h" + +#ifdef __cplusplus +extern "C" { +#endif rct_vehicle *cable_lift_segment_create(sint32 rideIndex, sint32 x, sint32 y, sint32 z, sint32 direction, uint16 var_44, sint32 remaining_distance, bool head); void cable_lift_update(rct_vehicle *vehicle); sint32 cable_lift_update_track_motion(rct_vehicle *cableLift); +#ifdef __cplusplus +} +#endif + #endif diff --git a/src/openrct2/ride/ride.h b/src/openrct2/ride/ride.h index 905a81cbcc..5af2bf8d29 100644 --- a/src/openrct2/ride/ride.h +++ b/src/openrct2/ride/ride.h @@ -23,7 +23,7 @@ #include "../rct2.h" #include "../world/map.h" #include "ride_ratings.h" -#include "vehicle.h" +#include "Vehicle.h" #define MAX_RIDE_TYPES_PER_RIDE_ENTRY 3 // The max number of different types of vehicle. diff --git a/src/openrct2/ride/vehicle_data.h b/src/openrct2/ride/vehicle_data.h index 9782803dff..ff3c92e29f 100644 --- a/src/openrct2/ride/vehicle_data.h +++ b/src/openrct2/ride/vehicle_data.h @@ -19,6 +19,10 @@ #include "../common.h" +#ifdef __cplusplus +extern "C" { +#endif + extern const uint8 * Rotation1TimeToSpriteMaps[]; extern const uint8 * Rotation2TimeToSpriteMaps[]; extern const uint8 * Rotation3TimeToSpriteMaps[]; @@ -38,4 +42,8 @@ extern const sint32 dword_9A2970[]; extern const sint32 word_9A3684[]; +#ifdef __cplusplus +} +#endif + #endif diff --git a/src/openrct2/ride/vehicle_paint.h b/src/openrct2/ride/vehicle_paint.h index 5bd6f41056..8abd4c3656 100644 --- a/src/openrct2/ride/vehicle_paint.h +++ b/src/openrct2/ride/vehicle_paint.h @@ -17,7 +17,7 @@ #ifndef _VEHICLE_PAINT_H #define _VEHICLE_PAINT_H -#include "vehicle.h" +#include "Vehicle.h" #ifdef __cplusplus extern "C" { diff --git a/src/openrct2/world/sprite.h b/src/openrct2/world/sprite.h index 3a9f99647e..2ca3ddc096 100644 --- a/src/openrct2/world/sprite.h +++ b/src/openrct2/world/sprite.h @@ -19,7 +19,7 @@ #include "../common.h" #include "../peep/Peep.h" -#include "../ride/vehicle.h" +#include "../ride/Vehicle.h" #define SPRITE_INDEX_NULL 0xFFFF #define MAX_SPRITES 10000