From 414829a2eaa0189dd881bf9a031b34610b3e298d Mon Sep 17 00:00:00 2001 From: zsilencer Date: Sun, 8 May 2016 03:10:14 -0600 Subject: [PATCH 1/6] Decompile vehicle_visual_river_rapids and vehicle_visual_splash_effect --- src/ride/coaster/virginia_reel.c | 25 ++++++--- src/ride/vehicle.h | 1 + src/ride/vehicle_paint.c | 24 ++++++++- src/ride/vehicle_paint.h | 2 + src/ride/water/river_rapids.c | 90 ++++++++++++++++++++++++++++++++ 5 files changed, 132 insertions(+), 10 deletions(-) diff --git a/src/ride/coaster/virginia_reel.c b/src/ride/coaster/virginia_reel.c index 0d93e75edd..cb12672e14 100644 --- a/src/ride/coaster/virginia_reel.c +++ b/src/ride/coaster/virginia_reel.c @@ -19,6 +19,20 @@ #include "../../interface/viewport.h" #include "../../world/sprite.h" #include "../../paint/paint.h" +#include "../vehicle_paint.h" + +// 0x009927E6: +static const vehicle_boundbox _virginiaReelBoundbox[] = { + { -11, -11, 1, 22, 22, 13 }, + { -11, -11, 1, 22, 22, 13 }, + { -11, -11, 1, 22, 22, 13 }, + { -11, -11, 1, 22, 22, 13 }, + { -11, -11, 1, 22, 22, 13 }, + { -11, -11, 1, 22, 22, 13 }, + { -11, -11, 1, 22, 22, 13 }, + { -11, -11, 1, 22, 22, 13 }, + { -11, -11, 1, 22, 22, 13 }, +}; /** * @@ -56,14 +70,9 @@ void vehicle_visual_virginia_reel(int x, int imageDirection, int y, int z, rct_v } baseImage_id += vehicleEntry->base_image_id; - sint16 bbo_x = RCT2_ADDRESS(0x009927E6, sint8)[j * 8]; - sint16 bbo_y = RCT2_ADDRESS(0x009927E7, sint8)[j * 8]; - sint16 bbo_z = RCT2_ADDRESS(0x009927E8, sint8)[j * 8] + z; - uint16 bbl_x = RCT2_ADDRESS(0x009927E9, uint8)[j * 8]; - uint16 bbl_y = RCT2_ADDRESS(0x009927EA, uint8)[j * 8]; - uint8 bbl_z = RCT2_ADDRESS(0x009927EB, uint8)[j * 8]; + vehicle_boundbox bb = _virginiaReelBoundbox[j]; image_id = baseImage_id | (vehicle->colours.body_colour << 19) | (vehicle->colours.trim_colour << 24) | 0xA0000000; - sub_98197C(image_id, 0, 0, bbl_x, bbl_y, bbl_z, z, bbo_x, bbo_y, bbo_z, get_current_rotation()); + sub_98197C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); if (RCT2_GLOBAL(0x140E9A8, rct_drawpixelinfo*)->zoom_level < 2 && vehicle->num_peeps > 0) { uint8 riding_peep_sprites[4] = {0xFF, 0xFF, 0xFF, 0xFF}; @@ -74,7 +83,7 @@ void vehicle_visual_virginia_reel(int x, int imageDirection, int y, int z, rct_v for (int i = 0; i < countof(draw_order); i++) { if (riding_peep_sprites[draw_order[i]] != 0xFF) { image_id = (baseImage_id + ((draw_order[i] + 1) * 72)) | (riding_peep_sprites[draw_order[i]] << 19) | 0x20000000; - sub_98199C(image_id, 0, 0, bbl_x, bbl_y, bbl_z, z, bbo_x, bbo_y, bbo_z, get_current_rotation()); + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); } } } diff --git a/src/ride/vehicle.h b/src/ride/vehicle.h index cd7001ac6e..d41b49e93e 100644 --- a/src/ride/vehicle.h +++ b/src/ride/vehicle.h @@ -330,6 +330,7 @@ enum { VEHICLE_VISUAL_REVERSER, VEHICLE_VISUAL_SPLASH_BOATS_OR_WATER_COASTER, VEHICLE_VISUAL_ROTO_DROP, + VEHICLE_VISUAL_SPLASH_EFFECT = 11, VEHICLE_VISUAL_VIRGINIA_REEL = 15, VEHICLE_VISUAL_SUBMARINE }; diff --git a/src/ride/vehicle_paint.c b/src/ride/vehicle_paint.c index 18f5667766..7ce611ca13 100644 --- a/src/ride/vehicle_paint.c +++ b/src/ride/vehicle_paint.c @@ -19,6 +19,7 @@ #include "../world/sprite.h" #include "../ride/ride_data.h" #include "../interface/viewport.h" +#include "../game.h" #include "vehicle_paint.h" // 0x0098E52C: @@ -886,6 +887,25 @@ const vehicle_boundbox VehicleBoundboxes[16][224] = { } }; +/** + * + * rct2: 0x006D5696 + */ +void vehicle_visual_splash_effect(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) +{ + if (vehicle->sprite_direction & 7) { + return; + } + if (vehicle->vehicle_sprite_type != 0) { + return; + } + if (vehicle->velocity <= 0x50000) { + return; + } + int image_id = 29046 + ((((vehicle->sprite_direction / 8) + get_current_rotation()) & 3) * 8) + ((gCurrentTicks / 2) & 7); + sub_98199C(image_id, 0, 0, 0, 0, 0, z, 0, 0, z, get_current_rotation()); +} + /** * * rct2: 0x006D4244 @@ -923,14 +943,14 @@ void vehicle_paint(rct_vehicle *vehicle, int imageDirection) case VEHICLE_VISUAL_DEFAULT: RCT2_CALLPROC_X(0x006D45F8, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; case VEHICLE_VISUAL_LAUNCHED_FREEFALL: vehicle_visual_launched_freefall(x, imageDirection, y, z, vehicle, vehicleEntry); break; case VEHICLE_VISUAL_OBSERVATION_TOWER: vehicle_visual_observation_tower(x, imageDirection, y, z, vehicle, vehicleEntry); break; - case VEHICLE_VISUAL_RIVER_RAPIDS: RCT2_CALLPROC_X(0x006D5889, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; + case VEHICLE_VISUAL_RIVER_RAPIDS: vehicle_visual_river_rapids(x, imageDirection, y, z, vehicle, vehicleEntry); break; case VEHICLE_VISUAL_MINI_GOLF_PLAYER: RCT2_CALLPROC_X(0x006D42F0, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; case VEHICLE_VISUAL_MINI_GOLF_BALL: RCT2_CALLPROC_X(0x006D43C6, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; case VEHICLE_VISUAL_REVERSER: RCT2_CALLPROC_X(0x006D4453, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; case VEHICLE_VISUAL_SPLASH_BOATS_OR_WATER_COASTER: RCT2_CALLPROC_X(0x006D4295, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; case VEHICLE_VISUAL_ROTO_DROP: vehicle_visual_roto_drop(x, imageDirection, y, z, vehicle, vehicleEntry); break; case 10: RCT2_CALLPROC_X(0x006D5600, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; - case 11: RCT2_CALLPROC_X(0x006D5696, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; + case VEHICLE_VISUAL_SPLASH_EFFECT: vehicle_visual_splash_effect(x, imageDirection, y, z, vehicle, vehicleEntry); break; case 12: RCT2_CALLPROC_X(0x006D57EE, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; case 13: RCT2_CALLPROC_X(0x006D5783, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; case 14: RCT2_CALLPROC_X(0x006D5701, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; diff --git a/src/ride/vehicle_paint.h b/src/ride/vehicle_paint.h index 7982600ede..2dce100bc5 100644 --- a/src/ride/vehicle_paint.h +++ b/src/ride/vehicle_paint.h @@ -34,7 +34,9 @@ void vehicle_paint(rct_vehicle *vehicle, int imageDirection); void vehicle_visual_roto_drop(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_observation_tower(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); +void vehicle_visual_river_rapids(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_launched_freefall(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); +void vehicle_visual_splash_effect(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_virginia_reel(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_submarine(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); diff --git a/src/ride/water/river_rapids.c b/src/ride/water/river_rapids.c index 846fd9695d..76647de39e 100644 --- a/src/ride/water/river_rapids.c +++ b/src/ride/water/river_rapids.c @@ -13,3 +13,93 @@ * A full copy of the GNU General Public License can be found in licence.txt *****************************************************************************/ #pragma endregion + +#include "../../addresses.h" +#include "../../config.h" +#include "../../interface/viewport.h" +#include "../../world/sprite.h" +#include "../../paint/paint.h" +#include "../vehicle_paint.h" +#include "../../game.h" + +// 0x0099279E: +static const vehicle_boundbox _riverRapidsBoundbox[] = { + { -13, -13, 1, 26, 26, 13 }, + { -13, -13, 1, 26, 26, 13 }, + { -13, -13, 1, 26, 26, 13 }, + { -13, -13, 1, 26, 26, 13 }, + { -13, -13, 1, 26, 26, 13 }, + { -13, -13, 1, 26, 26, 13 }, + { -13, -13, 1, 26, 26, 13 }, + { -13, -13, 1, 26, 26, 13 }, + { -13, -13, 1, 26, 26, 13 } +}; + +/** + * + * rct2: 0x006D5889 + */ +void vehicle_visual_river_rapids(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) +{ + int image_id; + int baseImage_id = imageDirection; + int ecx = ((vehicle->var_BA / 8) + (get_current_rotation() * 8)) & 31; + int j = 0; + if (vehicle->vehicle_sprite_type == 0) { + baseImage_id = ecx & 7; + } else { + if (vehicle->vehicle_sprite_type == 1 || vehicle->vehicle_sprite_type == 5) { + if (vehicle->vehicle_sprite_type == 5){ + baseImage_id = imageDirection ^ 16; + } + baseImage_id &= 24; + j = (baseImage_id / 8) + 1; + baseImage_id += (ecx & 7); + baseImage_id += 8; + } else + if (vehicle->vehicle_sprite_type == 2 || vehicle->vehicle_sprite_type == 6) { + if (vehicle->vehicle_sprite_type == 6){ + baseImage_id = imageDirection ^ 16; + } + baseImage_id &= 24; + j = (baseImage_id / 8) + 5; + baseImage_id += (ecx & 7); + baseImage_id += 40; + } else { + baseImage_id = ecx & 7; + } + } + baseImage_id += vehicleEntry->base_image_id; + + vehicle_boundbox bb = _riverRapidsBoundbox[j]; + image_id = baseImage_id | (vehicle->colours.body_colour << 19) | (vehicle->colours.trim_colour << 24) | 0xA0000000; + sub_98197C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + + if (RCT2_GLOBAL(0x140E9A8, rct_drawpixelinfo*)->zoom_level < 2 && vehicle->num_peeps > 0) { + // Draw peeps: (this particular vehicle doesn't sort them back to front like others so the back ones sometimes clip, but thats how the original does it...) + int peeps = ((ecx / 8) + 0) & 3; + image_id = (baseImage_id + ((peeps + 1) * 72)) | (vehicle->peep_tshirt_colours[0] << 19) | (vehicle->peep_tshirt_colours[1] << 24) | 0xA0000000; + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + if (vehicle->num_peeps > 2) { + peeps = ((ecx / 8) + 2) & 3; + image_id = (baseImage_id + ((peeps + 1) * 72)) | (vehicle->peep_tshirt_colours[2] << 19) | (vehicle->peep_tshirt_colours[3] << 24) | 0xA0000000; + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + } + if (vehicle->num_peeps > 4) { + peeps = ((ecx / 8) + 1) & 3; + image_id = (baseImage_id + ((peeps + 1) * 72)) | (vehicle->peep_tshirt_colours[4] << 19) | (vehicle->peep_tshirt_colours[5] << 24) | 0xA0000000; + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + } + if (vehicle->num_peeps > 6) { + peeps = ((ecx / 8) + 3) & 3; + image_id = (baseImage_id + ((peeps + 1) * 72)) | (vehicle->peep_tshirt_colours[6] << 19) | (vehicle->peep_tshirt_colours[7] << 24) | 0xA0000000; + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + } + } + + switch (vehicleEntry->pad_5E) { + case 1: /* nullsub */ break; + case VEHICLE_VISUAL_SPLASH_EFFECT: vehicle_visual_splash_effect(x, imageDirection, y, z, vehicle, vehicleEntry); break; + default: assert(false); break; + } +} From d199329d0fed6c461f09d1b27f9642b9ecb079a2 Mon Sep 17 00:00:00 2001 From: zsilencer Date: Sun, 8 May 2016 18:10:37 -0600 Subject: [PATCH 2/6] Decompile vehicle_visual_splash_boats_or_water_coaster --- src/ride/vehicle_paint.c | 2 +- src/ride/vehicle_paint.h | 1 + src/ride/water/splash_boats.c | 25 +++++++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/ride/vehicle_paint.c b/src/ride/vehicle_paint.c index 7ce611ca13..f8562934e7 100644 --- a/src/ride/vehicle_paint.c +++ b/src/ride/vehicle_paint.c @@ -947,7 +947,7 @@ void vehicle_paint(rct_vehicle *vehicle, int imageDirection) case VEHICLE_VISUAL_MINI_GOLF_PLAYER: RCT2_CALLPROC_X(0x006D42F0, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; case VEHICLE_VISUAL_MINI_GOLF_BALL: RCT2_CALLPROC_X(0x006D43C6, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; case VEHICLE_VISUAL_REVERSER: RCT2_CALLPROC_X(0x006D4453, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; - case VEHICLE_VISUAL_SPLASH_BOATS_OR_WATER_COASTER: RCT2_CALLPROC_X(0x006D4295, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; + case VEHICLE_VISUAL_SPLASH_BOATS_OR_WATER_COASTER: vehicle_visual_splash_boats_or_water_coaster(x, imageDirection, y, z, vehicle, vehicleEntry); break; case VEHICLE_VISUAL_ROTO_DROP: vehicle_visual_roto_drop(x, imageDirection, y, z, vehicle, vehicleEntry); break; case 10: RCT2_CALLPROC_X(0x006D5600, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; case VEHICLE_VISUAL_SPLASH_EFFECT: vehicle_visual_splash_effect(x, imageDirection, y, z, vehicle, vehicleEntry); break; diff --git a/src/ride/vehicle_paint.h b/src/ride/vehicle_paint.h index 2dce100bc5..205d3e178e 100644 --- a/src/ride/vehicle_paint.h +++ b/src/ride/vehicle_paint.h @@ -35,6 +35,7 @@ void vehicle_paint(rct_vehicle *vehicle, int imageDirection); void vehicle_visual_roto_drop(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_observation_tower(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_river_rapids(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); +void vehicle_visual_splash_boats_or_water_coaster(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_launched_freefall(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_splash_effect(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_virginia_reel(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); diff --git a/src/ride/water/splash_boats.c b/src/ride/water/splash_boats.c index 846fd9695d..3136f31bdf 100644 --- a/src/ride/water/splash_boats.c +++ b/src/ride/water/splash_boats.c @@ -13,3 +13,28 @@ * A full copy of the GNU General Public License can be found in licence.txt *****************************************************************************/ #pragma endregion + +#include "../../addresses.h" +#include "../../config.h" +#include "../../interface/viewport.h" +#include "../../world/sprite.h" +#include "../../paint/paint.h" +#include "../vehicle_paint.h" + +/** + * + * rct2: 0x006D4295 + */ +void vehicle_visual_splash_boats_or_water_coaster(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) +{ + if (vehicle->is_child) { + vehicle = &g_sprite_list[vehicle->prev_vehicle_on_ride].vehicle; + } else { + vehicle = &g_sprite_list[vehicle->next_vehicle_on_ride].vehicle; + } + RCT2_GLOBAL(0x009DE578, rct_vehicle*) = vehicle; + imageDirection = ((get_current_rotation() * 8) + vehicle->sprite_direction) & 0x1F; + RCT2_GLOBAL(0x9DE568, sint16) = vehicle->x; + RCT2_GLOBAL(0x9DE56C, sint16) = vehicle->y; + vehicle_paint(vehicle, imageDirection); +} From 871ed67a78ac8b41fa0dc94253021fe1df69e287 Mon Sep 17 00:00:00 2001 From: zsilencer Date: Sun, 8 May 2016 18:26:13 -0600 Subject: [PATCH 3/6] Decompile vehicle_visual_reverser --- src/ride/coaster/reverser_roller_coaster.c | 24 ++++++++++++++++++++++ src/ride/vehicle_paint.c | 2 +- src/ride/vehicle_paint.h | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/ride/coaster/reverser_roller_coaster.c b/src/ride/coaster/reverser_roller_coaster.c index 846fd9695d..b8c349a82f 100644 --- a/src/ride/coaster/reverser_roller_coaster.c +++ b/src/ride/coaster/reverser_roller_coaster.c @@ -13,3 +13,27 @@ * A full copy of the GNU General Public License can be found in licence.txt *****************************************************************************/ #pragma endregion + +#include "../../addresses.h" +#include "../../config.h" +#include "../../interface/viewport.h" +#include "../../world/sprite.h" +#include "../../paint/paint.h" +#include "../vehicle_paint.h" + +/** + * + * rct2: 0x006D4453 + */ +void vehicle_visual_reverser(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) +{ + rct_vehicle *v1 = &g_sprite_list[vehicle->prev_vehicle_on_ride].vehicle; + rct_vehicle *v2 = &g_sprite_list[vehicle->next_vehicle_on_ride].vehicle; + x = (v1->x + v2->x) / 2; + y = (v1->y + v2->y) / 2; + z = (v1->z + v2->z) / 2; + RCT2_GLOBAL(0x9DE568, sint16) = x; + RCT2_GLOBAL(0x9DE56C, sint16) = y; + uint32 rct2VehiclePtrFormat = ((uint32)vehicleEntry) - offsetof(rct_ride_entry, vehicles); + RCT2_CALLPROC_X(0x006D45F8, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); +} diff --git a/src/ride/vehicle_paint.c b/src/ride/vehicle_paint.c index f8562934e7..382194ec48 100644 --- a/src/ride/vehicle_paint.c +++ b/src/ride/vehicle_paint.c @@ -946,7 +946,7 @@ void vehicle_paint(rct_vehicle *vehicle, int imageDirection) case VEHICLE_VISUAL_RIVER_RAPIDS: vehicle_visual_river_rapids(x, imageDirection, y, z, vehicle, vehicleEntry); break; case VEHICLE_VISUAL_MINI_GOLF_PLAYER: RCT2_CALLPROC_X(0x006D42F0, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; case VEHICLE_VISUAL_MINI_GOLF_BALL: RCT2_CALLPROC_X(0x006D43C6, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; - case VEHICLE_VISUAL_REVERSER: RCT2_CALLPROC_X(0x006D4453, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; + case VEHICLE_VISUAL_REVERSER: vehicle_visual_reverser(x, imageDirection, y, z, vehicle, vehicleEntry); break; case VEHICLE_VISUAL_SPLASH_BOATS_OR_WATER_COASTER: vehicle_visual_splash_boats_or_water_coaster(x, imageDirection, y, z, vehicle, vehicleEntry); break; case VEHICLE_VISUAL_ROTO_DROP: vehicle_visual_roto_drop(x, imageDirection, y, z, vehicle, vehicleEntry); break; case 10: RCT2_CALLPROC_X(0x006D5600, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; diff --git a/src/ride/vehicle_paint.h b/src/ride/vehicle_paint.h index 205d3e178e..3949f053ee 100644 --- a/src/ride/vehicle_paint.h +++ b/src/ride/vehicle_paint.h @@ -35,6 +35,7 @@ void vehicle_paint(rct_vehicle *vehicle, int imageDirection); void vehicle_visual_roto_drop(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_observation_tower(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_river_rapids(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); +void vehicle_visual_reverser(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_splash_boats_or_water_coaster(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_launched_freefall(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_splash_effect(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); From a5032aebd1610ae53dd1b8c7093f862aceac7daf Mon Sep 17 00:00:00 2001 From: zsilencer Date: Mon, 9 May 2016 01:33:04 -0600 Subject: [PATCH 4/6] Decompile vehicle_visual_default --- src/ride/vehicle_paint.c | 1288 +++++++++++++++++++++++++++++++++++++- 1 file changed, 1287 insertions(+), 1 deletion(-) diff --git a/src/ride/vehicle_paint.c b/src/ride/vehicle_paint.c index 382194ec48..aa17f579a0 100644 --- a/src/ride/vehicle_paint.c +++ b/src/ride/vehicle_paint.c @@ -887,6 +887,1279 @@ const vehicle_boundbox VehicleBoundboxes[16][224] = { } }; +void vehicle_sprite_paint(rct_vehicle *vehicle, int ebx, int ecx, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D5214 +{ + int baseImage_id = ebx; + vehicle_boundbox bb = VehicleBoundboxes[vehicleEntry->draw_order][ecx]; + if (vehicleEntry->flags_a & 0x4000) { + baseImage_id += (vehicle->var_BA / 8) & 31; + } + if (vehicleEntry->flags_b & 0x80) { + baseImage_id += vehicle->var_C5; + } + int image_id = baseImage_id | (vehicle->colours.body_colour << 19) | (vehicle->colours.trim_colour << 24) | 0x80000000; + if (sub_98197C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation())) { + paint_struct* ps = RCT2_GLOBAL(0xEE7888, paint_struct*) - 1; // sub_98197C increments this but need original + ps->tertiary_colour = vehicle->colours_extended; + } + rct_drawpixelinfo* dpi = RCT2_GLOBAL(0x0140E9A8, rct_drawpixelinfo*); + if (dpi->zoom_level < 2 && vehicle->num_peeps > 0 && vehicleEntry->no_seating_rows > 0) { + baseImage_id += vehicleEntry->no_vehicle_images; + if (vehicleEntry->flags_b & 0x100) { + baseImage_id += (vehicleEntry->no_vehicle_images * vehicle->var_C5); + } + image_id = baseImage_id | (vehicle->peep_tshirt_colours[0] << 19) | (vehicle->peep_tshirt_colours[1] << 24) | 0xA0000000; + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + if (vehicle->num_peeps > 2 && vehicleEntry->no_seating_rows > 1) { + baseImage_id += vehicleEntry->no_vehicle_images; + image_id = baseImage_id | (vehicle->peep_tshirt_colours[2] << 19) | (vehicle->peep_tshirt_colours[3] << 24) | 0xA0000000; + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + } + if (vehicle->num_peeps > 4 && vehicleEntry->no_seating_rows > 2) { + baseImage_id += vehicleEntry->no_vehicle_images; + image_id = baseImage_id | (vehicle->peep_tshirt_colours[4] << 19) | (vehicle->peep_tshirt_colours[5] << 24) | 0xA0000000; + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + } + if (vehicle->num_peeps > 6 && vehicleEntry->no_seating_rows > 3) { + baseImage_id += vehicleEntry->no_vehicle_images; + image_id = baseImage_id | (vehicle->peep_tshirt_colours[6] << 19) | (vehicle->peep_tshirt_colours[7] << 24) | 0xA0000000; + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + } + if (vehicle->num_peeps > 8 && vehicleEntry->no_seating_rows > 4) { + baseImage_id += vehicleEntry->no_vehicle_images; + image_id = baseImage_id | (vehicle->peep_tshirt_colours[8] << 19) | (vehicle->peep_tshirt_colours[9] << 24) | 0xA0000000; + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + } + if (vehicle->num_peeps > 10 && vehicleEntry->no_seating_rows > 5) { + baseImage_id += vehicleEntry->no_vehicle_images; + image_id = baseImage_id | (vehicle->peep_tshirt_colours[10] << 19) | (vehicle->peep_tshirt_colours[11] << 24) | 0xA0000000; + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + } + if (vehicle->num_peeps > 12 && vehicleEntry->no_seating_rows > 6) { + baseImage_id += vehicleEntry->no_vehicle_images; + image_id = baseImage_id | (vehicle->peep_tshirt_colours[12] << 19) | (vehicle->peep_tshirt_colours[13] << 24) | 0xA0000000; + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + } + if (vehicle->num_peeps > 14 && vehicleEntry->no_seating_rows > 7) { + baseImage_id += vehicleEntry->no_vehicle_images; + image_id = baseImage_id | (vehicle->peep_tshirt_colours[14] << 19) | (vehicle->peep_tshirt_colours[15] << 24) | 0xA0000000; + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + } + } +} + +void vehicle_sprite_paint_6D520E(rct_vehicle *vehicle, int ebx, int ecx, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D520E +{ + vehicle_sprite_paint(vehicle, ebx + vehicle->var_4A, ecx, z, vehicleEntry); +} + + +void vehicle_sprite_paint_6D51EB(rct_vehicle *vehicle, int ebx, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D51EB +{ + int ecx = ebx / 2; + if (vehicleEntry->flags_a & 0x800) { + ebx = ebx / 2; + } + if (vehicleEntry->sprite_flags & 0x8000) { + ebx = ebx / 8; + } + ebx = (ebx * vehicleEntry->var_16) + vehicleEntry->base_image_id; + vehicle_sprite_paint(vehicle, ebx, ecx, z, vehicleEntry); +} + +void vehicle_sprite_paint_6D51DE(rct_vehicle *vehicle, int ebx, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D51DE +{ + if (vehicle->restraints_position < 64) { + vehicle_sprite_paint_6D51EB(vehicle, ebx, z, vehicleEntry); + return; + } + if (!(vehicleEntry->sprite_flags & 0x2000)) { + vehicle_sprite_paint_6D51EB(vehicle, ebx, z, vehicleEntry); + return; + } + if (ebx & 3) { + vehicle_sprite_paint_6D51EB(vehicle, ebx, z, vehicleEntry); + return; + } + int ecx = ebx / 2; + ebx = ebx / 8; + ebx += ((vehicle->restraints_position - 64) / 64) * 4; + ebx *= vehicleEntry->var_16; + ebx += vehicleEntry->var_1C; + vehicle_sprite_paint(vehicle, ebx, ecx, z, vehicleEntry); +} + +void vehicle_sprite_0_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D51DE +{ + vehicle_sprite_paint_6D51DE(vehicle, imageDirection, z, vehicleEntry); +} + +void vehicle_sprite_0_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4EE7 +{ + if (vehicleEntry->sprite_flags & 0x20) { + int ecx = imageDirection / 2; + int ebx = ((imageDirection / 4) * vehicleEntry->var_16) + vehicleEntry->var_30; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_paint_6D51DE(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F34 +{ + if (vehicleEntry->sprite_flags & 0x20) { + int ecx = (imageDirection / 2) + 108; + int ebx = ((imageDirection + 16) * vehicleEntry->var_16) + vehicleEntry->var_30; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_paint_6D51DE(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F0C +{ + if (vehicleEntry->sprite_flags & 0x20) { + int ecx = imageDirection / 2; + int ebx = (((imageDirection / 4) + 8) * vehicleEntry->var_16) + vehicleEntry->var_30; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_paint_6D51DE(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F5C +{ + if (vehicleEntry->sprite_flags & 0x20) { + int ecx = ((imageDirection / 2) ^ 8) + 108; + int ebx = ((imageDirection + 48) * vehicleEntry->var_16) + vehicleEntry->var_30; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_paint_6D51DE(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_5(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F84 +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = (imageDirection / 8) + 124; + int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_34; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0_2(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_6(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4FE4 +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = (imageDirection / 8) + 128; + int ebx = (((imageDirection / 8) + 8) * vehicleEntry->var_16) + vehicleEntry->var_34; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0_2(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_7(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D5055 +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = (imageDirection / 8) + 132; + int ebx = (((imageDirection / 8) + 16) * vehicleEntry->var_16) + vehicleEntry->var_34; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0_2(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_8(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D50C6 +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = (imageDirection / 8) + 136; + int ebx = (((imageDirection / 8) + 24) * vehicleEntry->var_16) + vehicleEntry->var_34; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0_2(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_9(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D5137 +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = (imageDirection / 8) + 140; + int ebx = (((imageDirection / 8) + 32) * vehicleEntry->var_16) + vehicleEntry->var_34; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0_2(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_10(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4FB1 +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = ((imageDirection / 8) ^ 2) + 124; + int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_34; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0_4(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_11(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D501B +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = ((imageDirection / 8) ^ 2) + 128; + int ebx = (((imageDirection / 8) + 12) * vehicleEntry->var_16) + vehicleEntry->var_34; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0_4(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_12(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D508C +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = ((imageDirection / 8) ^ 2) + 132; + int ebx = (((imageDirection / 8) + 20) * vehicleEntry->var_16) + vehicleEntry->var_34; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0_4(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_13(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D50FD +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = ((imageDirection / 8) ^ 2) + 136; + int ebx = (((imageDirection / 8) + 28) * vehicleEntry->var_16) + vehicleEntry->var_34; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0_4(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_14(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D516E +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = ((imageDirection / 8) ^ 2) + 140; + int ebx = (((imageDirection / 8) + 36) * vehicleEntry->var_16) + vehicleEntry->var_34; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0_2(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_16(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4EE4 +{ + vehicleEntry--; + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = imageDirection / 2; + int ebx = ((imageDirection / 4) * vehicleEntry->var_16) + vehicleEntry->var_30; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_paint_6D51DE(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_17(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F31 +{ + vehicleEntry--; + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = (imageDirection / 2) + 108; + int ebx = ((imageDirection + 16) * vehicleEntry->var_16) + vehicleEntry->var_30; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_paint_6D51DE(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_18(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F09 +{ + vehicleEntry--; + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = imageDirection / 2; + int ebx = (((imageDirection / 4) + 8) * vehicleEntry->var_16) + vehicleEntry->var_30; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_paint_6D51DE(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0_19(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F59 +{ + vehicleEntry--; + if (vehicleEntry->sprite_flags & 0x40) { + int ecx = ((imageDirection / 2) ^ 8) + 108; + int ebx = ((imageDirection + 48) * vehicleEntry->var_16) + vehicleEntry->var_30; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_paint_6D51DE(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D51D7 +{ + // 0x009A3DE4: + switch (vehicle->bank_rotation) { + case 0: vehicle_sprite_0_0(vehicle, imageDirection, z, vehicleEntry); break; + case 1: vehicle_sprite_0_1(vehicle, imageDirection, z, vehicleEntry); break; + case 2: vehicle_sprite_0_2(vehicle, imageDirection, z, vehicleEntry); break; + case 3: vehicle_sprite_0_3(vehicle, imageDirection, z, vehicleEntry); break; + case 4: vehicle_sprite_0_4(vehicle, imageDirection, z, vehicleEntry); break; + case 5: vehicle_sprite_0_5(vehicle, imageDirection, z, vehicleEntry); break; + case 6: vehicle_sprite_0_6(vehicle, imageDirection, z, vehicleEntry); break; + case 7: vehicle_sprite_0_7(vehicle, imageDirection, z, vehicleEntry); break; + case 8: vehicle_sprite_0_8(vehicle, imageDirection, z, vehicleEntry); break; + case 9: vehicle_sprite_0_9(vehicle, imageDirection, z, vehicleEntry); break; + case 10: vehicle_sprite_0_10(vehicle, imageDirection, z, vehicleEntry); break; + case 11: vehicle_sprite_0_11(vehicle, imageDirection, z, vehicleEntry); break; + case 12: vehicle_sprite_0_12(vehicle, imageDirection, z, vehicleEntry); break; + case 13: vehicle_sprite_0_13(vehicle, imageDirection, z, vehicleEntry); break; + case 14: vehicle_sprite_0_14(vehicle, imageDirection, z, vehicleEntry); break; + case 15: vehicle_sprite_0_0(vehicle, imageDirection, z, vehicleEntry); break; + case 16: vehicle_sprite_0_16(vehicle, imageDirection, z, vehicleEntry); break; + case 17: vehicle_sprite_0_17(vehicle, imageDirection, z, vehicleEntry); break; + case 18: vehicle_sprite_0_18(vehicle, imageDirection, z, vehicleEntry); break; + case 19: vehicle_sprite_0_19(vehicle, imageDirection, z, vehicleEntry); break; + } +} + +void vehicle_sprite_1_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4614 +{ + if (vehicleEntry->sprite_flags & 0x2) { + int ecx = imageDirection / 2; + int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_20; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_1_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4662 +{ + if (vehicleEntry->sprite_flags & 0x80) { + int ecx = imageDirection / 2; + int ebx = (imageDirection * vehicleEntry->var_16) + vehicleEntry->var_38; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_1_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D46DB +{ + if (vehicleEntry->sprite_flags & 0x800) { + int ecx = imageDirection / 2; + int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_48; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_1_1(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_1_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D467D +{ + if (vehicleEntry->sprite_flags & 0x80) { + int ecx = imageDirection / 2; + int ebx = ((imageDirection + 32) * vehicleEntry->var_16) + vehicleEntry->var_38; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_1_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D46FD +{ + if (vehicleEntry->sprite_flags & 0x800) { + int ecx = imageDirection / 2; + int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_48; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_1_3(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D460D +{ + // 0x009A3C04: + switch (vehicle->bank_rotation) { + case 0: vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); break; + case 1: vehicle_sprite_1_1(vehicle, imageDirection, z, vehicleEntry); break; + case 2: vehicle_sprite_1_2(vehicle, imageDirection, z, vehicleEntry); break; + case 3: vehicle_sprite_1_3(vehicle, imageDirection, z, vehicleEntry); break; + case 4: vehicle_sprite_1_4(vehicle, imageDirection, z, vehicleEntry); break; + case 5: vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); break; + case 6: vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); break; + case 7: vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); break; + case 8: vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); break; + case 9: vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); break; + case 10: vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); break; + case 11: vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); break; + case 12: vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); break; + case 13: vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); break; + case 14: vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); break; + case 15: vehicle_sprite_1_0(vehicle, imageDirection, z, vehicleEntry); break; + case 16: vehicle_sprite_1_1(vehicle, imageDirection, z, vehicleEntry); break; + case 17: vehicle_sprite_1_2(vehicle, imageDirection, z, vehicleEntry); break; + case 18: vehicle_sprite_1_3(vehicle, imageDirection, z, vehicleEntry); break; + case 19: vehicle_sprite_1_4(vehicle, imageDirection, z, vehicleEntry); break; + } +} + +void vehicle_sprite_2_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4791 +{ + if (vehicleEntry->sprite_flags & 0x2) { + if (vehicleEntry->flags_a & 0x4000) { + int ecx = (imageDirection / 2) + 16; + int ebx = (((imageDirection/ 8) + 8) * vehicleEntry->var_16) + vehicleEntry->var_20; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + int ecx = (imageDirection / 2) + 16; + int ebx = ((imageDirection + 8) * vehicleEntry->var_16) + vehicleEntry->var_20; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } + } else { + vehicle_sprite_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_2_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4833 +{ + if (vehicleEntry->sprite_flags & 0x200) { + int ecx = (imageDirection / 2) + 16; + int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_40; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_2_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D48D6 +{ + if (vehicleEntry->sprite_flags & 0x400) { + int ecx = imageDirection / 2; + if (vehicleEntry->draw_order < 5) { + ecx += 108; + int ebx = (imageDirection * vehicleEntry->var_16) + vehicleEntry->var_44; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + ecx += 16; + int ebx = (imageDirection * vehicleEntry->var_16) + vehicleEntry->var_44; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } + } else { + vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_2_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4858 +{ + if (vehicleEntry->sprite_flags & 0x200) { + int ecx = (imageDirection / 2) + 16; + int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_40; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_2_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4910 +{ + if (vehicleEntry->sprite_flags & 0x400) { + int ecx = imageDirection / 2; + if (vehicleEntry->draw_order < 5) { + ecx = (ecx ^ 8) + 108; + int ebx = ((imageDirection + 32) * vehicleEntry->var_16) + vehicleEntry->var_44; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + ecx += 16; + int ebx = ((imageDirection + 32) * vehicleEntry->var_16) + vehicleEntry->var_44; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } + } else { + vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D476C +{ + // 0x009A3CA4: + switch (vehicle->bank_rotation) { + case 0: vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); break; + case 1: vehicle_sprite_2_1(vehicle, imageDirection, z, vehicleEntry); break; + case 2: vehicle_sprite_2_2(vehicle, imageDirection, z, vehicleEntry); break; + case 3: vehicle_sprite_2_3(vehicle, imageDirection, z, vehicleEntry); break; + case 4: vehicle_sprite_2_4(vehicle, imageDirection, z, vehicleEntry); break; + case 5: vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); break; + case 6: vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); break; + case 7: vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); break; + case 8: vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); break; + case 9: vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); break; + case 10: vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); break; + case 11: vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); break; + case 12: vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); break; + case 13: vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); break; + case 14: vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); break; + case 15: vehicle_sprite_2_0(vehicle, imageDirection, z, vehicleEntry); break; + case 16: vehicle_sprite_2_1(vehicle, imageDirection, z, vehicleEntry); break; + case 17: vehicle_sprite_2_2(vehicle, imageDirection, z, vehicleEntry); break; + case 18: vehicle_sprite_2_3(vehicle, imageDirection, z, vehicleEntry); break; + case 19: vehicle_sprite_2_4(vehicle, imageDirection, z, vehicleEntry); break; + } +} + +void vehicle_sprite_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D49DC +{ + if (!(vehicleEntry->sprite_flags & 4)) { + vehicle_sprite_2(vehicle, imageDirection, z, vehicleEntry); + } + int ecx = (imageDirection / 4) + 32; + int ebx = ((imageDirection / 4) * vehicleEntry->var_16) + vehicleEntry->var_24; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); +} + +void vehicle_sprite_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4A31 +{ + if (!(vehicleEntry->sprite_flags & 4)) { + vehicle_sprite_2(vehicle, imageDirection, z, vehicleEntry); + } + int ecx = (imageDirection / 2) + 40; + int ebx = ((imageDirection + 16) * vehicleEntry->var_16) + vehicleEntry->var_24; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); +} + +void vehicle_sprite_5_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D463D +{ + if (vehicleEntry->sprite_flags & 0x2) { + int ecx = imageDirection / 2; + int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_20; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_5_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D469B +{ + if (vehicleEntry->sprite_flags & 0x80) { + int ecx = imageDirection / 2; + int ebx = ((imageDirection + 64) * vehicleEntry->var_16) + vehicleEntry->var_38; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_5_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4722 +{ + if (vehicleEntry->sprite_flags & 0x800) { + int ecx = imageDirection / 2; + int ebx = (((imageDirection / 8) + 8) * vehicleEntry->var_16) + vehicleEntry->var_48; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_5_1(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_5_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D46B9 +{ + if (vehicleEntry->sprite_flags & 0x80) { + int ecx = imageDirection / 2; + int ebx = ((imageDirection + 96) * vehicleEntry->var_16) + vehicleEntry->var_38; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_5_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4747 +{ + if (vehicleEntry->sprite_flags & 0x800) { + int ecx = imageDirection / 2; + int ebx = (((imageDirection / 8) + 12) * vehicleEntry->var_16) + vehicleEntry->var_48; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_5_3(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_5(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4636 +{ + // 0x009A3C54: + switch (vehicle->bank_rotation) { + case 0: vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); break; + case 1: vehicle_sprite_5_1(vehicle, imageDirection, z, vehicleEntry); break; + case 2: vehicle_sprite_5_2(vehicle, imageDirection, z, vehicleEntry); break; + case 3: vehicle_sprite_5_3(vehicle, imageDirection, z, vehicleEntry); break; + case 4: vehicle_sprite_5_4(vehicle, imageDirection, z, vehicleEntry); break; + case 5: vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); break; + case 6: vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); break; + case 7: vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); break; + case 8: vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); break; + case 9: vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); break; + case 10: vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); break; + case 11: vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); break; + case 12: vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); break; + case 13: vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); break; + case 14: vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); break; + case 15: vehicle_sprite_5_0(vehicle, imageDirection, z, vehicleEntry); break; + case 16: vehicle_sprite_5_1(vehicle, imageDirection, z, vehicleEntry); break; + case 17: vehicle_sprite_5_2(vehicle, imageDirection, z, vehicleEntry); break; + case 18: vehicle_sprite_5_3(vehicle, imageDirection, z, vehicleEntry); break; + case 19: vehicle_sprite_5_4(vehicle, imageDirection, z, vehicleEntry); break; + } +} + +void vehicle_sprite_6_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D47E4 +{ + if (vehicleEntry->sprite_flags & 0x2) { + if (vehicleEntry->flags_a & 0x4000) { + int ecx = ((imageDirection / 2) ^ 8) + 16; + int ebx = (((imageDirection / 8) + 12) * vehicleEntry->var_16) + vehicleEntry->var_20; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + int ecx = ((imageDirection / 2) ^ 8) + 16; + int ebx = ((imageDirection + 40) * vehicleEntry->var_16) + vehicleEntry->var_20; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } + } else { + vehicle_sprite_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_6_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4880 +{ + if (vehicleEntry->sprite_flags & 0x200) { + int ecx = ((imageDirection / 2) ^ 8) + 16; + int ebx = (((imageDirection / 8) + 8) * vehicleEntry->var_16) + vehicleEntry->var_40; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_6_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4953 +{ + if (vehicleEntry->sprite_flags & 0x400) { + int ecx = imageDirection / 2; + if (vehicleEntry->draw_order < 5) { + ecx += 108; + int ebx = ((imageDirection + 64) * vehicleEntry->var_16) + vehicleEntry->var_44; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + ecx = (ecx ^ 8) + 16; + int ebx = ((imageDirection + 64) * vehicleEntry->var_16) + vehicleEntry->var_44; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } + } else { + vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_6_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D48AB +{ + if (vehicleEntry->sprite_flags & 0x200) { + int ecx = ((imageDirection / 2) ^ 8) + 16; + int ebx = (((imageDirection / 8) + 12) * vehicleEntry->var_16) + vehicleEntry->var_40; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_6_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4996 +{ + if (vehicleEntry->sprite_flags & 0x400) { + int ecx = imageDirection / 2; + if (vehicleEntry->draw_order < 5) { + ecx = (ecx ^ 8) + 16; + int ebx = ((imageDirection + 96) * vehicleEntry->var_16) + vehicleEntry->var_44; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + ecx = (ecx ^ 8) + 108; + int ebx = ((imageDirection + 96) * vehicleEntry->var_16) + vehicleEntry->var_44; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } + } else { + vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_6(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D47DD +{ + // 0x009A3CF4: + switch (vehicle->bank_rotation) { + case 0: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 1: vehicle_sprite_6_1(vehicle, imageDirection, z, vehicleEntry); break; + case 2: vehicle_sprite_6_2(vehicle, imageDirection, z, vehicleEntry); break; + case 3: vehicle_sprite_6_3(vehicle, imageDirection, z, vehicleEntry); break; + case 4: vehicle_sprite_6_4(vehicle, imageDirection, z, vehicleEntry); break; + case 5: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 6: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 7: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 8: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 9: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 10: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 11: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 12: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 13: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 14: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 15: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 16: vehicle_sprite_6_1(vehicle, imageDirection, z, vehicleEntry); break; + case 17: vehicle_sprite_6_2(vehicle, imageDirection, z, vehicleEntry); break; + case 18: vehicle_sprite_6_3(vehicle, imageDirection, z, vehicleEntry); break; + case 19: vehicle_sprite_6_4(vehicle, imageDirection, z, vehicleEntry); break; + } +} + +void vehicle_sprite_7(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4A05 +{ + if (vehicleEntry->sprite_flags & 0x4) { + int ecx = ((imageDirection / 4) ^ 4) + 32; + int ebx = (((imageDirection / 4) + 8) * vehicleEntry->var_16) + vehicleEntry->var_24; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_6(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_8(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4A59 +{ + if (vehicleEntry->sprite_flags & 0x4) { + int ecx = ((imageDirection / 2) ^ 4) + 40; + int ebx = ((imageDirection + 48) * vehicleEntry->var_16) + vehicleEntry->var_24; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_6(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_9(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4A81 +{ + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = (imageDirection / 8) + 56; + int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_4(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_10(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4AE8 +{ + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = (imageDirection / 2) + 60; + int ebx = ((imageDirection + 8) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_4(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_11(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4B57 +{ + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = (imageDirection / 8) + 76; + int ebx = (((imageDirection / 8) + 72) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_4(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_12(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4BB7 +{ + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = (imageDirection / 8) + 80; + int ebx = (((imageDirection / 8) + 80) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_4(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_13(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4C17 +{ + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = (imageDirection / 8) + 84; + int ebx = (((imageDirection / 8) + 88) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_4(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_14(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4C77 +{ + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = (imageDirection / 8) + 88; + int ebx = (((imageDirection / 8) + 96) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_4(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_15(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4CD7 +{ + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = (imageDirection / 8) + 92; + int ebx = (((imageDirection / 8) + 104) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_4(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_16(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4D37 +{ + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = (imageDirection / 8) + 96; + int ebx = (((imageDirection / 8) + 112) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_4(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_17(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4AA3 +{ + if (vehicle->update_flags & 0x800) { + if((vehicle->track_type >> 2) != 0x81 && (vehicle->track_type >> 2) != 0x83) { + vehicleEntry--; + } + } + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = ((imageDirection / 8) ^ 2) + 56; + int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_8(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_18(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4B0D +{ + if (vehicle->update_flags & 0x800) { + if((vehicle->track_type >> 2) != 0x7F && (vehicle->track_type >> 2) != 0x81 && (vehicle->track_type >> 2) != 0x83) { + vehicleEntry--; + } + } + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = ((imageDirection / 2) ^ 8) + 60; + int ebx = ((imageDirection + 40) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_8(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_19(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4B80 +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = ((imageDirection / 8) ^ 2) + 76; + int ebx = (((imageDirection / 8) + 76) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_8(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_20(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4BE0 +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = ((imageDirection / 8) ^ 2) + 80; + int ebx = (((imageDirection / 8) + 84) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_8(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_21(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4C40 +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = ((imageDirection / 8) ^ 2) + 84; + int ebx = (((imageDirection / 8) + 92) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_8(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_22(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4CA0 +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x8) { + int ecx = ((imageDirection / 8) ^ 2) + 88; + int ebx = (((imageDirection / 8) + 100) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_8(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_23(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4D00 +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x1000) { + int ecx = ((imageDirection / 8) ^ 2) + 92; + int ebx = (((imageDirection / 8) + 108) * vehicleEntry->var_16) + vehicleEntry->var_28; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_8(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_24(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D51A5 +{ + if (vehicle->update_flags & 0x800) { + vehicleEntry--; + } + if (vehicleEntry->sprite_flags & 0x1000) { + int eax = ((vehicle->vehicle_sprite_type - 24) * 4); + int ecx = (imageDirection / 8) + eax + 144; + int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + eax + vehicleEntry->var_4C; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_paint_6D51DE(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_50_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4D67 +{ + if (vehicleEntry->sprite_flags & 0x10) { + int ecx = imageDirection / 2; + int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_2C; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_50_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4DB5 +{ + if (vehicleEntry->sprite_flags & 0x10) { + int ecx = imageDirection / 2; + int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_3C; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_50_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4DD3 +{ + if (vehicleEntry->sprite_flags & 0x100) { + int ecx = imageDirection / 2; + int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_3C; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_50(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4D60 +{ + // 0x009A3D44: + switch (vehicle->bank_rotation) { + case 0: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 1: vehicle_sprite_50_1(vehicle, imageDirection, z, vehicleEntry); break; + case 2: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 3: vehicle_sprite_50_3(vehicle, imageDirection, z, vehicleEntry); break; + case 4: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 5: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 6: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 7: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 8: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 9: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 10: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 11: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 12: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 13: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 14: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 15: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 16: vehicle_sprite_50_1(vehicle, imageDirection, z, vehicleEntry); break; + case 17: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + case 18: vehicle_sprite_50_3(vehicle, imageDirection, z, vehicleEntry); break; + case 19: vehicle_sprite_50_0(vehicle, imageDirection, z, vehicleEntry); break; + } +} + +void vehicle_sprite_51(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4E3A +{ + if (vehicleEntry->sprite_flags & 0x10) { + int ecx = (imageDirection / 8) + 100; + int ebx = (((imageDirection / 8) + 8) * vehicleEntry->var_16) + vehicleEntry->var_2C; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_52(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4E8F +{ + if (vehicleEntry->sprite_flags & 0x10) { + int ecx = (imageDirection / 8) + 104; + int ebx = (((imageDirection / 8) + 16) * vehicleEntry->var_16) + vehicleEntry->var_2C; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_53_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4D90 +{ + if (vehicleEntry->sprite_flags & 0x10) { + int ecx = imageDirection / 2; + int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_2C; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_53_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4DF4 +{ + if (vehicleEntry->sprite_flags & 0x100) { + int ecx = imageDirection / 2; + int ebx = (((imageDirection / 8) + 8) * vehicleEntry->var_16) + vehicleEntry->var_3C; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_53_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4E15 +{ + if (vehicleEntry->sprite_flags & 0x100) { + int ecx = imageDirection / 2; + int ebx = (((imageDirection / 8) + 12) * vehicleEntry->var_16) + vehicleEntry->var_3C; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_53(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4D89 +{ + // 0x009A3D94: + switch (vehicle->bank_rotation) { + case 0: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 1: vehicle_sprite_53_1(vehicle, imageDirection, z, vehicleEntry); break; + case 2: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 3: vehicle_sprite_53_3(vehicle, imageDirection, z, vehicleEntry); break; + case 4: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 5: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 6: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 7: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 8: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 9: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 10: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 11: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 12: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 13: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 14: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 15: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 16: vehicle_sprite_53_1(vehicle, imageDirection, z, vehicleEntry); break; + case 17: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + case 18: vehicle_sprite_53_3(vehicle, imageDirection, z, vehicleEntry); break; + case 19: vehicle_sprite_53_0(vehicle, imageDirection, z, vehicleEntry); break; + } +} + +void vehicle_sprite_54(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4E63 +{ + if (vehicleEntry->sprite_flags & 0x10) { + int ecx = ((imageDirection / 8) ^ 2) + 100; + int ebx = (((imageDirection / 8) + 12) * vehicleEntry->var_16) + vehicleEntry->var_2C; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_55(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4EB8 +{ + if (vehicleEntry->sprite_flags & 0x10) { + int ecx = ((imageDirection / 8) ^ 2) + 104; + int ebx = (((imageDirection / 8) + 20) * vehicleEntry->var_16) + vehicleEntry->var_2C; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_0(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_56(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D47DA +{ + vehicleEntry--; + // 0x009A3CF4: + switch (vehicle->bank_rotation) { + case 0: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 1: vehicle_sprite_6_1(vehicle, imageDirection, z, vehicleEntry); break; + case 2: vehicle_sprite_6_2(vehicle, imageDirection, z, vehicleEntry); break; + case 3: vehicle_sprite_6_3(vehicle, imageDirection, z, vehicleEntry); break; + case 4: vehicle_sprite_6_4(vehicle, imageDirection, z, vehicleEntry); break; + case 5: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 6: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 7: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 8: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 9: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 10: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 11: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 12: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 13: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 14: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 15: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; + case 16: vehicle_sprite_6_1(vehicle, imageDirection, z, vehicleEntry); break; + case 17: vehicle_sprite_6_2(vehicle, imageDirection, z, vehicleEntry); break; + case 18: vehicle_sprite_6_3(vehicle, imageDirection, z, vehicleEntry); break; + case 19: vehicle_sprite_6_4(vehicle, imageDirection, z, vehicleEntry); break; + } +} + +void vehicle_sprite_57(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4A02 +{ + vehicleEntry--; + if (vehicleEntry->sprite_flags & 0x4) { + int ecx = ((imageDirection / 4) ^ 4) + 32; + int ebx = (((imageDirection / 4) + 8) * vehicleEntry->var_16) + vehicleEntry->var_24; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_6(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_58(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4A56 +{ + vehicleEntry--; + if (vehicleEntry->sprite_flags & 0x4) { + int ecx = ((imageDirection / 2) ^ 8) + 40; + int ebx = ((imageDirection + 48) * vehicleEntry->var_16) + vehicleEntry->var_24; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_6(vehicle, imageDirection, z, vehicleEntry); + } +} + +void vehicle_sprite_59(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4773 +{ + if (vehicleEntry->sprite_flags & 0x4000) { + int ecx = (imageDirection / 2) + 16; + int ebx = (imageDirection * vehicleEntry->var_16) + vehicleEntry->var_4C; + vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); + } else { + vehicle_sprite_2(vehicle, imageDirection, z, vehicleEntry); + } +} + +// 0x009A3B14: +typedef void (*vehicle_sprite_func)(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry); +vehicle_sprite_func vehicle_sprite_funcs[] = { + vehicle_sprite_0, + vehicle_sprite_1, + vehicle_sprite_2, + vehicle_sprite_3, + vehicle_sprite_4, + vehicle_sprite_5, + vehicle_sprite_6, + vehicle_sprite_7, + vehicle_sprite_8, + vehicle_sprite_9, + vehicle_sprite_10, + vehicle_sprite_11, + vehicle_sprite_12, + vehicle_sprite_13, + vehicle_sprite_14, + vehicle_sprite_15, + vehicle_sprite_16, + vehicle_sprite_17, + vehicle_sprite_18, + vehicle_sprite_19, + vehicle_sprite_20, + vehicle_sprite_21, + vehicle_sprite_22, + vehicle_sprite_23, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_24, + vehicle_sprite_0, + vehicle_sprite_0, + vehicle_sprite_0, + vehicle_sprite_0, + vehicle_sprite_0, + vehicle_sprite_0, + vehicle_sprite_50, + vehicle_sprite_51, + vehicle_sprite_52, + vehicle_sprite_53, + vehicle_sprite_54, + vehicle_sprite_55, + vehicle_sprite_56, + vehicle_sprite_57, + vehicle_sprite_58, + vehicle_sprite_59, +}; + /** * * rct2: 0x006D5696 @@ -906,6 +2179,19 @@ void vehicle_visual_splash_effect(int x, int imageDirection, int y, int z, rct_v sub_98199C(image_id, 0, 0, 0, 0, 0, z, 0, 0, z, get_current_rotation()); } +/** + * + * rct2: 0x006D45F8 + */ +void vehicle_visual_default(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) +{ + //uint32 rct2VehiclePtrFormat = ((uint32)vehicleEntry) - offsetof(rct_ride_entry, vehicles); RCT2_CALLPROC_X(0x006D45F8, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); return; + assert(vehicle->vehicle_sprite_type < countof(vehicle_sprite_funcs)); + if (vehicle->vehicle_sprite_type < countof(vehicle_sprite_funcs)) { + vehicle_sprite_funcs[vehicle->vehicle_sprite_type](vehicle, imageDirection, z, vehicleEntry); + } +} + /** * * rct2: 0x006D4244 @@ -940,7 +2226,7 @@ void vehicle_paint(rct_vehicle *vehicle, int imageDirection) uint32 rct2VehiclePtrFormat = ((uint32)vehicleEntry) - offsetof(rct_ride_entry, vehicles); RCT2_GLOBAL(0x00F64DFC, uint32) = rct2VehiclePtrFormat; switch (vehicleEntry->car_visual) { - case VEHICLE_VISUAL_DEFAULT: RCT2_CALLPROC_X(0x006D45F8, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; + case VEHICLE_VISUAL_DEFAULT: vehicle_visual_default(x, imageDirection, y, z, vehicle, vehicleEntry); break; case VEHICLE_VISUAL_LAUNCHED_FREEFALL: vehicle_visual_launched_freefall(x, imageDirection, y, z, vehicle, vehicleEntry); break; case VEHICLE_VISUAL_OBSERVATION_TOWER: vehicle_visual_observation_tower(x, imageDirection, y, z, vehicle, vehicleEntry); break; case VEHICLE_VISUAL_RIVER_RAPIDS: vehicle_visual_river_rapids(x, imageDirection, y, z, vehicle, vehicleEntry); break; From 05213e4cfb89e88709d3d9035bf037a50f38278f Mon Sep 17 00:00:00 2001 From: zsilencer Date: Mon, 9 May 2016 09:41:12 -0600 Subject: [PATCH 5/6] Decompile remaining vehicle splash effects --- src/ride/vehicle.h | 8 ++- src/ride/vehicle_paint.c | 112 ++++++++++++++++++++++++++++++++-- src/ride/vehicle_paint.h | 2 +- src/ride/water/river_rapids.c | 6 +- src/ride/water/splash_boats.c | 4 +- 5 files changed, 116 insertions(+), 16 deletions(-) diff --git a/src/ride/vehicle.h b/src/ride/vehicle.h index d41b49e93e..5d22d34d69 100644 --- a/src/ride/vehicle.h +++ b/src/ride/vehicle.h @@ -330,8 +330,12 @@ enum { VEHICLE_VISUAL_REVERSER, VEHICLE_VISUAL_SPLASH_BOATS_OR_WATER_COASTER, VEHICLE_VISUAL_ROTO_DROP, - VEHICLE_VISUAL_SPLASH_EFFECT = 11, - VEHICLE_VISUAL_VIRGINIA_REEL = 15, + VEHICLE_VISUAL_SPLASH1_EFFECT, + VEHICLE_VISUAL_SPLASH2_EFFECT, + VEHICLE_VISUAL_SPLASH3_EFFECT, + VEHICLE_VISUAL_SPLASH4_EFFECT, + VEHICLE_VISUAL_SPLASH5_EFFECT, + VEHICLE_VISUAL_VIRGINIA_REEL, VEHICLE_VISUAL_SUBMARINE }; diff --git a/src/ride/vehicle_paint.c b/src/ride/vehicle_paint.c index aa17f579a0..4045006e82 100644 --- a/src/ride/vehicle_paint.c +++ b/src/ride/vehicle_paint.c @@ -946,6 +946,7 @@ void vehicle_sprite_paint(rct_vehicle *vehicle, int ebx, int ecx, int z, const r sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); } } + vehicle_visual_splash_effect(z, vehicle, vehicleEntry); } void vehicle_sprite_paint_6D520E(rct_vehicle *vehicle, int ebx, int ecx, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D520E @@ -2160,11 +2161,37 @@ vehicle_sprite_func vehicle_sprite_funcs[] = { vehicle_sprite_59, }; +/** + * + * rct2: 0x006D5600 + */ +void vehicle_visual_splash1_effect(int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) +{ + if ((vehicle->track_type >> 2) != 0x75) { + return; + } + if (vehicle->track_progress < 48) { + return; + } + if (vehicle->track_progress > 112) { + return; + } + rct_vehicle *vehicle2 = vehicle; + while (vehicle2->is_child) { + vehicle2 = GET_VEHICLE(vehicle2->prev_vehicle_on_ride); + } + if (vehicle2->velocity <= 0x50000) { + return; + } + int image_id = 29014 + ((((vehicle->sprite_direction / 8) + get_current_rotation()) & 3) * 8) + ((gCurrentTicks / 2) & 7); + sub_98199C(image_id, 0, 0, 0, 0, 0, z, 0, 0, z, get_current_rotation()); +} + /** * * rct2: 0x006D5696 */ -void vehicle_visual_splash_effect(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) +void vehicle_visual_splash2_effect(int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) { if (vehicle->sprite_direction & 7) { return; @@ -2179,6 +2206,84 @@ void vehicle_visual_splash_effect(int x, int imageDirection, int y, int z, rct_v sub_98199C(image_id, 0, 0, 0, 0, 0, z, 0, 0, z, get_current_rotation()); } +/** + * + * rct2: 0x006D57EE + */ +void vehicle_visual_splash3_effect(int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) +{ + if (vehicle->sprite_direction & 7) { + return; + } + if (vehicle->vehicle_sprite_type != 0) { + return; + } + if (vehicle->velocity <= 0x50000) { + return; + } + int image_id = 29014 + ((((vehicle->sprite_direction / 8) + get_current_rotation()) & 3) * 8) + ((gCurrentTicks / 2) & 7); + sub_98199C(image_id, 0, 0, 0, 0, 0, z, 0, 0, z, get_current_rotation()); +} + +/** + * + * rct2: 0x006D5783 + */ +void vehicle_visual_splash4_effect(int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) +{ + rct_vehicle *vehicle2 = GET_VEHICLE(vehicle->prev_vehicle_on_ride); + if (vehicle2->velocity <= 0x50000) { + return; + } + if (vehicle->sprite_direction & 7) { + return; + } + if (vehicle->vehicle_sprite_type != 0) { + return; + } + int image_id = 29078 + ((((vehicle->sprite_direction / 8) + get_current_rotation()) & 3) * 8) + ((gCurrentTicks / 2) & 7); + sub_98199C(image_id, 0, 0, 1, 1, 0, z, 0, 0, z, get_current_rotation()); +} + +/** + * + * rct2: 0x006D5701 + */ +void vehicle_visual_splash5_effect(int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) +{ + rct_vehicle *vehicle2 = GET_VEHICLE(vehicle->prev_vehicle_on_ride); + if (vehicle2->velocity <= 0x50000) { + return; + } + if (vehicle->sprite_direction & 7) { + return; + } + if (vehicle->vehicle_sprite_type != 0) { + return; + } + if ((vehicle->track_type >> 2) < 0x44) { + return; + } + if ((vehicle->track_type >> 2) >= 0x57) { + return; + } + int image_id = 29078 + ((((vehicle->sprite_direction / 8) + get_current_rotation()) & 3) * 8) + ((gCurrentTicks / 2) & 7); + sub_98199C(image_id, 0, 0, 1, 1, 0, z, 0, 0, z, get_current_rotation()); +} + +void vehicle_visual_splash_effect(int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) +{ + switch (vehicleEntry->pad_5E) { + case 1: /* nullsub */ break; + case VEHICLE_VISUAL_SPLASH1_EFFECT: vehicle_visual_splash1_effect(z, vehicle, vehicleEntry); break; + case VEHICLE_VISUAL_SPLASH2_EFFECT: vehicle_visual_splash2_effect(z, vehicle, vehicleEntry); break; + case VEHICLE_VISUAL_SPLASH3_EFFECT: vehicle_visual_splash3_effect(z, vehicle, vehicleEntry); break; + case VEHICLE_VISUAL_SPLASH4_EFFECT: vehicle_visual_splash4_effect(z, vehicle, vehicleEntry); break; + case VEHICLE_VISUAL_SPLASH5_EFFECT: vehicle_visual_splash5_effect(z, vehicle, vehicleEntry); break; + default: assert(false); break; + } +} + /** * * rct2: 0x006D45F8 @@ -2235,11 +2340,6 @@ void vehicle_paint(rct_vehicle *vehicle, int imageDirection) case VEHICLE_VISUAL_REVERSER: vehicle_visual_reverser(x, imageDirection, y, z, vehicle, vehicleEntry); break; case VEHICLE_VISUAL_SPLASH_BOATS_OR_WATER_COASTER: vehicle_visual_splash_boats_or_water_coaster(x, imageDirection, y, z, vehicle, vehicleEntry); break; case VEHICLE_VISUAL_ROTO_DROP: vehicle_visual_roto_drop(x, imageDirection, y, z, vehicle, vehicleEntry); break; - case 10: RCT2_CALLPROC_X(0x006D5600, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; - case VEHICLE_VISUAL_SPLASH_EFFECT: vehicle_visual_splash_effect(x, imageDirection, y, z, vehicle, vehicleEntry); break; - case 12: RCT2_CALLPROC_X(0x006D57EE, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; - case 13: RCT2_CALLPROC_X(0x006D5783, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; - case 14: RCT2_CALLPROC_X(0x006D5701, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); break; case VEHICLE_VISUAL_VIRGINIA_REEL: vehicle_visual_virginia_reel(x, imageDirection, y, z, vehicle, vehicleEntry); break; case VEHICLE_VISUAL_SUBMARINE: vehicle_visual_submarine(x, imageDirection, y, z, vehicle, vehicleEntry); break; } diff --git a/src/ride/vehicle_paint.h b/src/ride/vehicle_paint.h index 3949f053ee..9ae9dd0cd3 100644 --- a/src/ride/vehicle_paint.h +++ b/src/ride/vehicle_paint.h @@ -38,7 +38,7 @@ void vehicle_visual_river_rapids(int x, int imageDirection, int y, int z, rct_ve void vehicle_visual_reverser(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_splash_boats_or_water_coaster(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_launched_freefall(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); -void vehicle_visual_splash_effect(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); +void vehicle_visual_splash_effect(int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_virginia_reel(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_submarine(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); diff --git a/src/ride/water/river_rapids.c b/src/ride/water/river_rapids.c index 76647de39e..a4eb17e172 100644 --- a/src/ride/water/river_rapids.c +++ b/src/ride/water/river_rapids.c @@ -97,9 +97,5 @@ void vehicle_visual_river_rapids(int x, int imageDirection, int y, int z, rct_ve } } - switch (vehicleEntry->pad_5E) { - case 1: /* nullsub */ break; - case VEHICLE_VISUAL_SPLASH_EFFECT: vehicle_visual_splash_effect(x, imageDirection, y, z, vehicle, vehicleEntry); break; - default: assert(false); break; - } + vehicle_visual_splash_effect(z, vehicle, vehicleEntry); } diff --git a/src/ride/water/splash_boats.c b/src/ride/water/splash_boats.c index 3136f31bdf..260c96d05d 100644 --- a/src/ride/water/splash_boats.c +++ b/src/ride/water/splash_boats.c @@ -28,9 +28,9 @@ void vehicle_visual_splash_boats_or_water_coaster(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) { if (vehicle->is_child) { - vehicle = &g_sprite_list[vehicle->prev_vehicle_on_ride].vehicle; + vehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride); } else { - vehicle = &g_sprite_list[vehicle->next_vehicle_on_ride].vehicle; + vehicle = GET_VEHICLE(vehicle->next_vehicle_on_ride); } RCT2_GLOBAL(0x009DE578, rct_vehicle*) = vehicle; imageDirection = ((get_current_rotation() * 8) + vehicle->sprite_direction) & 0x1F; From 6761751f3f458165f1a7abbf91166b2f16ba7016 Mon Sep 17 00:00:00 2001 From: zsilencer Date: Tue, 10 May 2016 01:34:10 -0600 Subject: [PATCH 6/6] Suggested review changes --- src/ride/coaster/reverser_roller_coaster.c | 7 +- src/ride/coaster/virginia_reel.c | 8 +- src/ride/gentle/observation_tower.c | 2 +- src/ride/ride_data.c | 2 +- src/ride/thrill/launched_freefall.c | 2 +- src/ride/thrill/roto_drop.c | 5 +- src/ride/vehicle.h | 2 +- src/ride/vehicle_paint.c | 540 +++++++++++---------- src/ride/vehicle_paint.h | 1 + src/ride/water/river_rapids.c | 12 +- src/ride/water/submarine_ride.c | 2 +- 11 files changed, 305 insertions(+), 278 deletions(-) diff --git a/src/ride/coaster/reverser_roller_coaster.c b/src/ride/coaster/reverser_roller_coaster.c index b8c349a82f..2d011cbed3 100644 --- a/src/ride/coaster/reverser_roller_coaster.c +++ b/src/ride/coaster/reverser_roller_coaster.c @@ -27,13 +27,12 @@ */ void vehicle_visual_reverser(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) { - rct_vehicle *v1 = &g_sprite_list[vehicle->prev_vehicle_on_ride].vehicle; - rct_vehicle *v2 = &g_sprite_list[vehicle->next_vehicle_on_ride].vehicle; + rct_vehicle *v1 = GET_VEHICLE(vehicle->prev_vehicle_on_ride); + rct_vehicle *v2 = GET_VEHICLE(vehicle->next_vehicle_on_ride); x = (v1->x + v2->x) / 2; y = (v1->y + v2->y) / 2; z = (v1->z + v2->z) / 2; RCT2_GLOBAL(0x9DE568, sint16) = x; RCT2_GLOBAL(0x9DE56C, sint16) = y; - uint32 rct2VehiclePtrFormat = ((uint32)vehicleEntry) - offsetof(rct_ride_entry, vehicles); - RCT2_CALLPROC_X(0x006D45F8, x, imageDirection, y, z, (int)vehicle, rct2VehiclePtrFormat, 0); + vehicle_visual_default(x, imageDirection, y, z, vehicle, vehicleEntry); } diff --git a/src/ride/coaster/virginia_reel.c b/src/ride/coaster/virginia_reel.c index cb12672e14..1616731c1d 100644 --- a/src/ride/coaster/virginia_reel.c +++ b/src/ride/coaster/virginia_reel.c @@ -70,9 +70,9 @@ void vehicle_visual_virginia_reel(int x, int imageDirection, int y, int z, rct_v } baseImage_id += vehicleEntry->base_image_id; - vehicle_boundbox bb = _virginiaReelBoundbox[j]; + const vehicle_boundbox *bb = &_virginiaReelBoundbox[j]; image_id = baseImage_id | (vehicle->colours.body_colour << 19) | (vehicle->colours.trim_colour << 24) | 0xA0000000; - sub_98197C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + sub_98197C(image_id, 0, 0, bb->length_x, bb->length_y, bb->length_z, z, bb->offset_x, bb->offset_y, bb->offset_z + z, get_current_rotation()); if (RCT2_GLOBAL(0x140E9A8, rct_drawpixelinfo*)->zoom_level < 2 && vehicle->num_peeps > 0) { uint8 riding_peep_sprites[4] = {0xFF, 0xFF, 0xFF, 0xFF}; @@ -83,10 +83,10 @@ void vehicle_visual_virginia_reel(int x, int imageDirection, int y, int z, rct_v for (int i = 0; i < countof(draw_order); i++) { if (riding_peep_sprites[draw_order[i]] != 0xFF) { image_id = (baseImage_id + ((draw_order[i] + 1) * 72)) | (riding_peep_sprites[draw_order[i]] << 19) | 0x20000000; - sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + sub_98199C(image_id, 0, 0, bb->length_x, bb->length_y, bb->length_z, z, bb->offset_x, bb->offset_y, bb->offset_z + z, get_current_rotation()); } } } - assert(vehicleEntry->pad_5E == 1); + assert(vehicleEntry->effect_visual == 1); } diff --git a/src/ride/gentle/observation_tower.c b/src/ride/gentle/observation_tower.c index 02321ba689..7b0b34489a 100644 --- a/src/ride/gentle/observation_tower.c +++ b/src/ride/gentle/observation_tower.c @@ -54,5 +54,5 @@ void vehicle_visual_observation_tower(int x, int imageDirection, int y, int z, r ps->tertiary_colour = vehicle->colours_extended; } - assert(vehicleEntry->pad_5E == 1); + assert(vehicleEntry->effect_visual == 1); } diff --git a/src/ride/ride_data.c b/src/ride/ride_data.c index 74f1b6a27c..8c5bf62f3d 100644 --- a/src/ride/ride_data.c +++ b/src/ride/ride_data.c @@ -1504,7 +1504,7 @@ const rct_ride_entry_vehicle CableLiftVehicle = { .powered_acceleration = 0, .powered_max_speed = 0, .car_visual = 0, - .pad_5E = 1, + .effect_visual = 1, .draw_order = 14, .special_frames = 0, .peep_loading_positions = NULL diff --git a/src/ride/thrill/launched_freefall.c b/src/ride/thrill/launched_freefall.c index c50ed61da6..dccfadc6cb 100644 --- a/src/ride/thrill/launched_freefall.c +++ b/src/ride/thrill/launched_freefall.c @@ -61,5 +61,5 @@ void vehicle_visual_launched_freefall(int x, int imageDirection, int y, int z, r } } - assert(vehicleEntry->pad_5E == 1); + assert(vehicleEntry->effect_visual == 1); } diff --git a/src/ride/thrill/roto_drop.c b/src/ride/thrill/roto_drop.c index 201b7f598b..c990f50f99 100644 --- a/src/ride/thrill/roto_drop.c +++ b/src/ride/thrill/roto_drop.c @@ -66,7 +66,6 @@ void vehicle_visual_roto_drop(int x, int imageDirection, int y, int z, rct_vehic } }; - assert(vehicleEntry->pad_5E == 1); - // 0x5E is treated as another car_visual paint setup jump table like in viewport_vehicle_paint_setup - // in the original code right here but appears to only ever be 1 which goes to a nullsub so it was taken out. + assert(vehicleEntry->effect_visual == 1); + // Although called in original code, effect_visual (splash effects) are not used for many rides and does not make sense so it was taken out } diff --git a/src/ride/vehicle.h b/src/ride/vehicle.h index 5d22d34d69..3ff22315aa 100644 --- a/src/ride/vehicle.h +++ b/src/ride/vehicle.h @@ -70,7 +70,7 @@ typedef struct { uint8 powered_acceleration; // 0x5B , 0x75 uint8 powered_max_speed; // 0x5C , 0x76 uint8 car_visual; // 0x5D , 0x77 - uint8 pad_5E; + uint8 effect_visual; uint8 draw_order; uint8 special_frames; // 0x60 , 0x7A sint8* peep_loading_positions; // 0x61 , 0x7B diff --git a/src/ride/vehicle_paint.c b/src/ride/vehicle_paint.c index 4045006e82..3c7a7204f5 100644 --- a/src/ride/vehicle_paint.c +++ b/src/ride/vehicle_paint.c @@ -18,6 +18,7 @@ #include "../drawing/drawing.h" #include "../world/sprite.h" #include "../ride/ride_data.h" +#include "../ride/track.h" #include "../interface/viewport.h" #include "../game.h" #include "vehicle_paint.h" @@ -887,7 +888,8 @@ const vehicle_boundbox VehicleBoundboxes[16][224] = { } }; -void vehicle_sprite_paint(rct_vehicle *vehicle, int ebx, int ecx, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D5214 +// 6D5214 +void vehicle_sprite_paint(rct_vehicle *vehicle, int ebx, int ecx, int z, const rct_ride_entry_vehicle *vehicleEntry) { int baseImage_id = ebx; vehicle_boundbox bb = VehicleBoundboxes[vehicleEntry->draw_order][ecx]; @@ -905,76 +907,48 @@ void vehicle_sprite_paint(rct_vehicle *vehicle, int ebx, int ecx, int z, const r rct_drawpixelinfo* dpi = RCT2_GLOBAL(0x0140E9A8, rct_drawpixelinfo*); if (dpi->zoom_level < 2 && vehicle->num_peeps > 0 && vehicleEntry->no_seating_rows > 0) { baseImage_id += vehicleEntry->no_vehicle_images; - if (vehicleEntry->flags_b & 0x100) { - baseImage_id += (vehicleEntry->no_vehicle_images * vehicle->var_C5); - } - image_id = baseImage_id | (vehicle->peep_tshirt_colours[0] << 19) | (vehicle->peep_tshirt_colours[1] << 24) | 0xA0000000; - sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); - if (vehicle->num_peeps > 2 && vehicleEntry->no_seating_rows > 1) { - baseImage_id += vehicleEntry->no_vehicle_images; - image_id = baseImage_id | (vehicle->peep_tshirt_colours[2] << 19) | (vehicle->peep_tshirt_colours[3] << 24) | 0xA0000000; - sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); - } - if (vehicle->num_peeps > 4 && vehicleEntry->no_seating_rows > 2) { - baseImage_id += vehicleEntry->no_vehicle_images; - image_id = baseImage_id | (vehicle->peep_tshirt_colours[4] << 19) | (vehicle->peep_tshirt_colours[5] << 24) | 0xA0000000; - sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); - } - if (vehicle->num_peeps > 6 && vehicleEntry->no_seating_rows > 3) { - baseImage_id += vehicleEntry->no_vehicle_images; - image_id = baseImage_id | (vehicle->peep_tshirt_colours[6] << 19) | (vehicle->peep_tshirt_colours[7] << 24) | 0xA0000000; - sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); - } - if (vehicle->num_peeps > 8 && vehicleEntry->no_seating_rows > 4) { - baseImage_id += vehicleEntry->no_vehicle_images; - image_id = baseImage_id | (vehicle->peep_tshirt_colours[8] << 19) | (vehicle->peep_tshirt_colours[9] << 24) | 0xA0000000; - sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); - } - if (vehicle->num_peeps > 10 && vehicleEntry->no_seating_rows > 5) { - baseImage_id += vehicleEntry->no_vehicle_images; - image_id = baseImage_id | (vehicle->peep_tshirt_colours[10] << 19) | (vehicle->peep_tshirt_colours[11] << 24) | 0xA0000000; - sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); - } - if (vehicle->num_peeps > 12 && vehicleEntry->no_seating_rows > 6) { - baseImage_id += vehicleEntry->no_vehicle_images; - image_id = baseImage_id | (vehicle->peep_tshirt_colours[12] << 19) | (vehicle->peep_tshirt_colours[13] << 24) | 0xA0000000; - sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); - } - if (vehicle->num_peeps > 14 && vehicleEntry->no_seating_rows > 7) { - baseImage_id += vehicleEntry->no_vehicle_images; - image_id = baseImage_id | (vehicle->peep_tshirt_colours[14] << 19) | (vehicle->peep_tshirt_colours[15] << 24) | 0xA0000000; - sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + for (int i = 0; i < 8; i++){ + if (vehicle->num_peeps > (i * 2) && vehicleEntry->no_seating_rows > i) { + image_id = baseImage_id | (vehicle->peep_tshirt_colours[i * 2] << 19) | (vehicle->peep_tshirt_colours[(i * 2) + 1] << 24) | 0xA0000000; + if (i == 0 && vehicleEntry->flags_b & 0x100) { + image_id += (vehicleEntry->no_vehicle_images * vehicle->var_C5); + } + sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + baseImage_id += vehicleEntry->no_vehicle_images; + } } } vehicle_visual_splash_effect(z, vehicle, vehicleEntry); } -void vehicle_sprite_paint_6D520E(rct_vehicle *vehicle, int ebx, int ecx, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D520E +// 6D520E +void vehicle_sprite_paint_6D520E(rct_vehicle *vehicle, int ebx, int ecx, int z, const rct_ride_entry_vehicle *vehicleEntry) { vehicle_sprite_paint(vehicle, ebx + vehicle->var_4A, ecx, z, vehicleEntry); } - -void vehicle_sprite_paint_6D51EB(rct_vehicle *vehicle, int ebx, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D51EB +// 6D51EB +void vehicle_sprite_paint_6D51EB(rct_vehicle *vehicle, int ebx, int z, const rct_ride_entry_vehicle *vehicleEntry) { int ecx = ebx / 2; if (vehicleEntry->flags_a & 0x800) { ebx = ebx / 2; } - if (vehicleEntry->sprite_flags & 0x8000) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_15) { ebx = ebx / 8; } ebx = (ebx * vehicleEntry->var_16) + vehicleEntry->base_image_id; vehicle_sprite_paint(vehicle, ebx, ecx, z, vehicleEntry); } -void vehicle_sprite_paint_6D51DE(rct_vehicle *vehicle, int ebx, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D51DE +// 6D51DE +void vehicle_sprite_paint_6D51DE(rct_vehicle *vehicle, int ebx, int z, const rct_ride_entry_vehicle *vehicleEntry) { if (vehicle->restraints_position < 64) { vehicle_sprite_paint_6D51EB(vehicle, ebx, z, vehicleEntry); return; } - if (!(vehicleEntry->sprite_flags & 0x2000)) { + if (!(vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_RESTRAINT_ANIMATION)) { vehicle_sprite_paint_6D51EB(vehicle, ebx, z, vehicleEntry); return; } @@ -990,14 +964,16 @@ void vehicle_sprite_paint_6D51DE(rct_vehicle *vehicle, int ebx, int z, const rct vehicle_sprite_paint(vehicle, ebx, ecx, z, vehicleEntry); } -void vehicle_sprite_0_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D51DE +// 6D51DE +void vehicle_sprite_0_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { vehicle_sprite_paint_6D51DE(vehicle, imageDirection, z, vehicleEntry); } -void vehicle_sprite_0_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4EE7 +// 6D4EE7 +void vehicle_sprite_0_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x20) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) { int ecx = imageDirection / 2; int ebx = ((imageDirection / 4) * vehicleEntry->var_16) + vehicleEntry->var_30; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1006,9 +982,10 @@ void vehicle_sprite_0_1(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_0_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F34 +// 6D4F34 +void vehicle_sprite_0_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x20) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) { int ecx = (imageDirection / 2) + 108; int ebx = ((imageDirection + 16) * vehicleEntry->var_16) + vehicleEntry->var_30; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1017,9 +994,10 @@ void vehicle_sprite_0_2(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_0_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F0C +// 6D4F0C +void vehicle_sprite_0_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x20) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) { int ecx = imageDirection / 2; int ebx = (((imageDirection / 4) + 8) * vehicleEntry->var_16) + vehicleEntry->var_30; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1028,9 +1006,10 @@ void vehicle_sprite_0_3(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_0_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F5C +// 6D4F5C +void vehicle_sprite_0_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x20) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) { int ecx = ((imageDirection / 2) ^ 8) + 108; int ebx = ((imageDirection + 48) * vehicleEntry->var_16) + vehicleEntry->var_30; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1039,12 +1018,13 @@ void vehicle_sprite_0_4(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_0_5(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F84 +// 6D4F84 +void vehicle_sprite_0_5(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_INLINE_TWISTS) { int ecx = (imageDirection / 8) + 124; int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_34; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1053,12 +1033,13 @@ void vehicle_sprite_0_5(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_0_6(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4FE4 +// 6D4FE4 +void vehicle_sprite_0_6(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_INLINE_TWISTS) { int ecx = (imageDirection / 8) + 128; int ebx = (((imageDirection / 8) + 8) * vehicleEntry->var_16) + vehicleEntry->var_34; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1067,12 +1048,13 @@ void vehicle_sprite_0_6(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_0_7(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D5055 +// 6D5055 +void vehicle_sprite_0_7(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_INLINE_TWISTS) { int ecx = (imageDirection / 8) + 132; int ebx = (((imageDirection / 8) + 16) * vehicleEntry->var_16) + vehicleEntry->var_34; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1081,12 +1063,13 @@ void vehicle_sprite_0_7(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_0_8(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D50C6 +// 6D50C6 +void vehicle_sprite_0_8(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_INLINE_TWISTS) { int ecx = (imageDirection / 8) + 136; int ebx = (((imageDirection / 8) + 24) * vehicleEntry->var_16) + vehicleEntry->var_34; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1095,12 +1078,13 @@ void vehicle_sprite_0_8(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_0_9(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D5137 +// 6D5137 +void vehicle_sprite_0_9(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_INLINE_TWISTS) { int ecx = (imageDirection / 8) + 140; int ebx = (((imageDirection / 8) + 32) * vehicleEntry->var_16) + vehicleEntry->var_34; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1109,12 +1093,13 @@ void vehicle_sprite_0_9(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_0_10(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4FB1 +// 6D4FB1 +void vehicle_sprite_0_10(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_INLINE_TWISTS) { int ecx = ((imageDirection / 8) ^ 2) + 124; int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_34; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1123,12 +1108,13 @@ void vehicle_sprite_0_10(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_0_11(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D501B +// 6D501B +void vehicle_sprite_0_11(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_INLINE_TWISTS) { int ecx = ((imageDirection / 8) ^ 2) + 128; int ebx = (((imageDirection / 8) + 12) * vehicleEntry->var_16) + vehicleEntry->var_34; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1137,12 +1123,13 @@ void vehicle_sprite_0_11(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_0_12(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D508C +// 6D508C +void vehicle_sprite_0_12(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_INLINE_TWISTS) { int ecx = ((imageDirection / 8) ^ 2) + 132; int ebx = (((imageDirection / 8) + 20) * vehicleEntry->var_16) + vehicleEntry->var_34; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1151,12 +1138,13 @@ void vehicle_sprite_0_12(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_0_13(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D50FD +// 6D50FD +void vehicle_sprite_0_13(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_INLINE_TWISTS) { int ecx = ((imageDirection / 8) ^ 2) + 136; int ebx = (((imageDirection / 8) + 28) * vehicleEntry->var_16) + vehicleEntry->var_34; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1165,12 +1153,13 @@ void vehicle_sprite_0_13(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_0_14(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D516E +// 6D516E +void vehicle_sprite_0_14(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_INLINE_TWISTS) { int ecx = ((imageDirection / 8) ^ 2) + 140; int ebx = (((imageDirection / 8) + 36) * vehicleEntry->var_16) + vehicleEntry->var_34; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1179,10 +1168,11 @@ void vehicle_sprite_0_14(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_0_16(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4EE4 +// 6D4EE4 +void vehicle_sprite_0_16(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { vehicleEntry--; - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) { int ecx = imageDirection / 2; int ebx = ((imageDirection / 4) * vehicleEntry->var_16) + vehicleEntry->var_30; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1191,10 +1181,11 @@ void vehicle_sprite_0_16(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_0_17(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F31 +// 6D4F31 +void vehicle_sprite_0_17(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { vehicleEntry--; - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) { int ecx = (imageDirection / 2) + 108; int ebx = ((imageDirection + 16) * vehicleEntry->var_16) + vehicleEntry->var_30; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1203,10 +1194,11 @@ void vehicle_sprite_0_17(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_0_18(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F09 +// 6D4F09 +void vehicle_sprite_0_18(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { vehicleEntry--; - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) { int ecx = imageDirection / 2; int ebx = (((imageDirection / 4) + 8) * vehicleEntry->var_16) + vehicleEntry->var_30; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1215,10 +1207,11 @@ void vehicle_sprite_0_18(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_0_19(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4F59 +// 6D4F59 +void vehicle_sprite_0_19(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { vehicleEntry--; - if (vehicleEntry->sprite_flags & 0x40) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_BANKED) { int ecx = ((imageDirection / 2) ^ 8) + 108; int ebx = ((imageDirection + 48) * vehicleEntry->var_16) + vehicleEntry->var_30; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1227,7 +1220,8 @@ void vehicle_sprite_0_19(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D51D7 +// 6D51D7 +void vehicle_sprite_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { // 0x009A3DE4: switch (vehicle->bank_rotation) { @@ -1254,9 +1248,10 @@ void vehicle_sprite_0(rct_vehicle *vehicle, int imageDirection, int z, const rct } } -void vehicle_sprite_1_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4614 +// 6D4614 +void vehicle_sprite_1_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x2) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPES) { int ecx = imageDirection / 2; int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_20; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1265,9 +1260,10 @@ void vehicle_sprite_1_0(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_1_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4662 +// 6D4662 +void vehicle_sprite_1_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x80) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_BANKED_TRANSITIONS) { int ecx = imageDirection / 2; int ebx = (imageDirection * vehicleEntry->var_16) + vehicleEntry->var_38; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1276,9 +1272,10 @@ void vehicle_sprite_1_1(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_1_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D46DB +// 6D46DB +void vehicle_sprite_1_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x800) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_WHILE_BANKED_TRANSITIONS) { int ecx = imageDirection / 2; int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_48; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1287,9 +1284,10 @@ void vehicle_sprite_1_2(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_1_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D467D +// 6D467D +void vehicle_sprite_1_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x80) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_BANKED_TRANSITIONS) { int ecx = imageDirection / 2; int ebx = ((imageDirection + 32) * vehicleEntry->var_16) + vehicleEntry->var_38; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1298,9 +1296,10 @@ void vehicle_sprite_1_3(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_1_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D46FD +// 6D46FD +void vehicle_sprite_1_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x800) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_WHILE_BANKED_TRANSITIONS) { int ecx = imageDirection / 2; int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_48; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1309,7 +1308,8 @@ void vehicle_sprite_1_4(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D460D +// 6D460D +void vehicle_sprite_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { // 0x009A3C04: switch (vehicle->bank_rotation) { @@ -1336,9 +1336,10 @@ void vehicle_sprite_1(rct_vehicle *vehicle, int imageDirection, int z, const rct } } -void vehicle_sprite_2_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4791 +// 6D4791 +void vehicle_sprite_2_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x2) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPES) { if (vehicleEntry->flags_a & 0x4000) { int ecx = (imageDirection / 2) + 16; int ebx = (((imageDirection/ 8) + 8) * vehicleEntry->var_16) + vehicleEntry->var_20; @@ -1353,9 +1354,10 @@ void vehicle_sprite_2_0(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_2_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4833 +// 6D4833 +void vehicle_sprite_2_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x200) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TRANSITIONS) { int ecx = (imageDirection / 2) + 16; int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_40; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1364,9 +1366,10 @@ void vehicle_sprite_2_1(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_2_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D48D6 +// 6D48D6 +void vehicle_sprite_2_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x400) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TURNS) { int ecx = imageDirection / 2; if (vehicleEntry->draw_order < 5) { ecx += 108; @@ -1382,9 +1385,10 @@ void vehicle_sprite_2_2(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_2_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4858 +// 6D4858 +void vehicle_sprite_2_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x200) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TRANSITIONS) { int ecx = (imageDirection / 2) + 16; int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_40; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1393,9 +1397,10 @@ void vehicle_sprite_2_3(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_2_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4910 +// 6D4910 +void vehicle_sprite_2_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x400) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TURNS) { int ecx = imageDirection / 2; if (vehicleEntry->draw_order < 5) { ecx = (ecx ^ 8) + 108; @@ -1411,7 +1416,8 @@ void vehicle_sprite_2_4(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D476C +// 6D476C +void vehicle_sprite_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { // 0x009A3CA4: switch (vehicle->bank_rotation) { @@ -1438,9 +1444,10 @@ void vehicle_sprite_2(rct_vehicle *vehicle, int imageDirection, int z, const rct } } -void vehicle_sprite_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D49DC +// 6D49DC +void vehicle_sprite_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (!(vehicleEntry->sprite_flags & 4)) { + if (!(vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_STEEP_SLOPES)) { vehicle_sprite_2(vehicle, imageDirection, z, vehicleEntry); } int ecx = (imageDirection / 4) + 32; @@ -1448,9 +1455,10 @@ void vehicle_sprite_3(rct_vehicle *vehicle, int imageDirection, int z, const rct vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); } -void vehicle_sprite_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4A31 +// 6D4A31 +void vehicle_sprite_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (!(vehicleEntry->sprite_flags & 4)) { + if (!(vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_STEEP_SLOPES)) { vehicle_sprite_2(vehicle, imageDirection, z, vehicleEntry); } int ecx = (imageDirection / 2) + 40; @@ -1458,9 +1466,10 @@ void vehicle_sprite_4(rct_vehicle *vehicle, int imageDirection, int z, const rct vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); } -void vehicle_sprite_5_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D463D +// 6D463D +void vehicle_sprite_5_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x2) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPES) { int ecx = imageDirection / 2; int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_20; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1469,9 +1478,10 @@ void vehicle_sprite_5_0(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_5_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D469B +// 6D469B +void vehicle_sprite_5_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x80) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_BANKED_TRANSITIONS) { int ecx = imageDirection / 2; int ebx = ((imageDirection + 64) * vehicleEntry->var_16) + vehicleEntry->var_38; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1480,9 +1490,10 @@ void vehicle_sprite_5_1(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_5_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4722 +// 6D4722 +void vehicle_sprite_5_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x800) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_WHILE_BANKED_TRANSITIONS) { int ecx = imageDirection / 2; int ebx = (((imageDirection / 8) + 8) * vehicleEntry->var_16) + vehicleEntry->var_48; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1491,9 +1502,10 @@ void vehicle_sprite_5_2(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_5_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D46B9 +// 6D46B9 +void vehicle_sprite_5_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x80) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_BANKED_TRANSITIONS) { int ecx = imageDirection / 2; int ebx = ((imageDirection + 96) * vehicleEntry->var_16) + vehicleEntry->var_38; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1502,9 +1514,10 @@ void vehicle_sprite_5_3(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_5_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4747 +// 6D4747 +void vehicle_sprite_5_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x800) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_WHILE_BANKED_TRANSITIONS) { int ecx = imageDirection / 2; int ebx = (((imageDirection / 8) + 12) * vehicleEntry->var_16) + vehicleEntry->var_48; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1513,7 +1526,8 @@ void vehicle_sprite_5_4(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_5(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4636 +// 6D4636 +void vehicle_sprite_5(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { // 0x009A3C54: switch (vehicle->bank_rotation) { @@ -1540,9 +1554,10 @@ void vehicle_sprite_5(rct_vehicle *vehicle, int imageDirection, int z, const rct } } -void vehicle_sprite_6_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D47E4 +// 6D47E4 +void vehicle_sprite_6_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x2) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPES) { if (vehicleEntry->flags_a & 0x4000) { int ecx = ((imageDirection / 2) ^ 8) + 16; int ebx = (((imageDirection / 8) + 12) * vehicleEntry->var_16) + vehicleEntry->var_20; @@ -1557,9 +1572,10 @@ void vehicle_sprite_6_0(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_6_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4880 +// 6D4880 +void vehicle_sprite_6_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x200) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TRANSITIONS) { int ecx = ((imageDirection / 2) ^ 8) + 16; int ebx = (((imageDirection / 8) + 8) * vehicleEntry->var_16) + vehicleEntry->var_40; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1568,9 +1584,10 @@ void vehicle_sprite_6_1(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_6_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4953 +// 6D4953 +void vehicle_sprite_6_2(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x400) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TURNS) { int ecx = imageDirection / 2; if (vehicleEntry->draw_order < 5) { ecx += 108; @@ -1586,9 +1603,10 @@ void vehicle_sprite_6_2(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_6_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D48AB +// 6D48AB +void vehicle_sprite_6_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x200) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TRANSITIONS) { int ecx = ((imageDirection / 2) ^ 8) + 16; int ebx = (((imageDirection / 8) + 12) * vehicleEntry->var_16) + vehicleEntry->var_40; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1597,16 +1615,17 @@ void vehicle_sprite_6_3(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_6_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4996 +// 6D4996 +void vehicle_sprite_6_4(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x400) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TURNS) { int ecx = imageDirection / 2; if (vehicleEntry->draw_order < 5) { - ecx = (ecx ^ 8) + 16; + ecx = (ecx ^ 8) + 108; int ebx = ((imageDirection + 96) * vehicleEntry->var_16) + vehicleEntry->var_44; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); } else { - ecx = (ecx ^ 8) + 108; + ecx = (ecx ^ 8) + 16; int ebx = ((imageDirection + 96) * vehicleEntry->var_16) + vehicleEntry->var_44; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); } @@ -1615,7 +1634,8 @@ void vehicle_sprite_6_4(rct_vehicle *vehicle, int imageDirection, int z, const r } } -void vehicle_sprite_6(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D47DD +// 6D47DD +void vehicle_sprite_6(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { // 0x009A3CF4: switch (vehicle->bank_rotation) { @@ -1642,9 +1662,10 @@ void vehicle_sprite_6(rct_vehicle *vehicle, int imageDirection, int z, const rct } } -void vehicle_sprite_7(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4A05 +// 6D4A05 +void vehicle_sprite_7(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x4) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_STEEP_SLOPES) { int ecx = ((imageDirection / 4) ^ 4) + 32; int ebx = (((imageDirection / 4) + 8) * vehicleEntry->var_16) + vehicleEntry->var_24; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1653,10 +1674,11 @@ void vehicle_sprite_7(rct_vehicle *vehicle, int imageDirection, int z, const rct } } -void vehicle_sprite_8(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4A59 +// 6D4A59 +void vehicle_sprite_8(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x4) { - int ecx = ((imageDirection / 2) ^ 4) + 40; + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_STEEP_SLOPES) { + int ecx = ((imageDirection / 2) ^ 8) + 40; int ebx = ((imageDirection + 48) * vehicleEntry->var_16) + vehicleEntry->var_24; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); } else { @@ -1664,9 +1686,10 @@ void vehicle_sprite_8(rct_vehicle *vehicle, int imageDirection, int z, const rct } } -void vehicle_sprite_9(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4A81 +// 6D4A81 +void vehicle_sprite_9(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = (imageDirection / 8) + 56; int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1675,9 +1698,10 @@ void vehicle_sprite_9(rct_vehicle *vehicle, int imageDirection, int z, const rct } } -void vehicle_sprite_10(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4AE8 +// 6D4AE8 +void vehicle_sprite_10(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = (imageDirection / 2) + 60; int ebx = ((imageDirection + 8) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1686,9 +1710,10 @@ void vehicle_sprite_10(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_11(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4B57 +// 6D4B57 +void vehicle_sprite_11(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = (imageDirection / 8) + 76; int ebx = (((imageDirection / 8) + 72) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1697,9 +1722,10 @@ void vehicle_sprite_11(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_12(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4BB7 +// 6D4BB7 +void vehicle_sprite_12(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = (imageDirection / 8) + 80; int ebx = (((imageDirection / 8) + 80) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1708,9 +1734,10 @@ void vehicle_sprite_12(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_13(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4C17 +// 6D4C17 +void vehicle_sprite_13(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = (imageDirection / 8) + 84; int ebx = (((imageDirection / 8) + 88) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1719,9 +1746,10 @@ void vehicle_sprite_13(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_14(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4C77 +// 6D4C77 +void vehicle_sprite_14(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = (imageDirection / 8) + 88; int ebx = (((imageDirection / 8) + 96) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1730,9 +1758,10 @@ void vehicle_sprite_14(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_15(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4CD7 +// 6D4CD7 +void vehicle_sprite_15(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = (imageDirection / 8) + 92; int ebx = (((imageDirection / 8) + 104) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1741,9 +1770,10 @@ void vehicle_sprite_15(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_16(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4D37 +// 6D4D37 +void vehicle_sprite_16(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = (imageDirection / 8) + 96; int ebx = (((imageDirection / 8) + 112) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1752,14 +1782,16 @@ void vehicle_sprite_16(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_17(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4AA3 +// 6D4AA3 +void vehicle_sprite_17(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { - if((vehicle->track_type >> 2) != 0x81 && (vehicle->track_type >> 2) != 0x83) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { + if( (vehicle->track_type >> 2) != TRACK_ELEM_90_DEG_DOWN_TO_60_DEG_DOWN && + (vehicle->track_type >> 2) != TRACK_ELEM_60_DEG_DOWN_TO_90_DEG_DOWN) { vehicleEntry--; } } - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = ((imageDirection / 8) ^ 2) + 56; int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1768,14 +1800,17 @@ void vehicle_sprite_17(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_18(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4B0D +// 6D4B0D +void vehicle_sprite_18(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { - if((vehicle->track_type >> 2) != 0x7F && (vehicle->track_type >> 2) != 0x81 && (vehicle->track_type >> 2) != 0x83) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { + if( (vehicle->track_type >> 2) != TRACK_ELEM_90_DEG_DOWN && + (vehicle->track_type >> 2) != TRACK_ELEM_90_DEG_DOWN_TO_60_DEG_DOWN && + (vehicle->track_type >> 2) != TRACK_ELEM_60_DEG_DOWN_TO_90_DEG_DOWN) { vehicleEntry--; } } - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = ((imageDirection / 2) ^ 8) + 60; int ebx = ((imageDirection + 40) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1784,12 +1819,13 @@ void vehicle_sprite_18(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_19(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4B80 +// 6D4B80 +void vehicle_sprite_19(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = ((imageDirection / 8) ^ 2) + 76; int ebx = (((imageDirection / 8) + 76) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1798,12 +1834,13 @@ void vehicle_sprite_19(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_20(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4BE0 +// 6D4BE0 +void vehicle_sprite_20(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = ((imageDirection / 8) ^ 2) + 80; int ebx = (((imageDirection / 8) + 84) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1812,12 +1849,13 @@ void vehicle_sprite_20(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_21(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4C40 +// 6D4C40 +void vehicle_sprite_21(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = ((imageDirection / 8) ^ 2) + 84; int ebx = (((imageDirection / 8) + 92) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1826,12 +1864,13 @@ void vehicle_sprite_21(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_22(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4CA0 +// 6D4CA0 +void vehicle_sprite_22(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x8) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = ((imageDirection / 8) ^ 2) + 88; int ebx = (((imageDirection / 8) + 100) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1840,12 +1879,13 @@ void vehicle_sprite_22(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_23(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4D00 +// 6D4D00 +void vehicle_sprite_23(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x1000) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES) { int ecx = ((imageDirection / 8) ^ 2) + 92; int ebx = (((imageDirection / 8) + 108) * vehicleEntry->var_16) + vehicleEntry->var_28; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1854,24 +1894,26 @@ void vehicle_sprite_23(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_24(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D51A5 +// 6D51A5 +void vehicle_sprite_24(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicle->update_flags & 0x800) { + if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_11) { vehicleEntry--; } - if (vehicleEntry->sprite_flags & 0x1000) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_CORKSCREWS) { int eax = ((vehicle->vehicle_sprite_type - 24) * 4); int ecx = (imageDirection / 8) + eax + 144; - int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + eax + vehicleEntry->var_4C; + int ebx = (((imageDirection / 8) + eax) * vehicleEntry->var_16) + vehicleEntry->var_4C; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); } else { vehicle_sprite_paint_6D51DE(vehicle, imageDirection, z, vehicleEntry); } } -void vehicle_sprite_50_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4D67 +// 6D4D67 +void vehicle_sprite_50_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x10) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES) { int ecx = imageDirection / 2; int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_2C; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1880,9 +1922,10 @@ void vehicle_sprite_50_0(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_50_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4DB5 +// 6D4DB5 +void vehicle_sprite_50_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x10) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_GENTLE_SLOPE_BANKED_TRANSITIONS) { int ecx = imageDirection / 2; int ebx = ((imageDirection / 8) * vehicleEntry->var_16) + vehicleEntry->var_3C; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1891,9 +1934,10 @@ void vehicle_sprite_50_1(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_50_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4DD3 +// 6D4DD3 +void vehicle_sprite_50_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x100) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_GENTLE_SLOPE_BANKED_TRANSITIONS) { int ecx = imageDirection / 2; int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_3C; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1902,7 +1946,8 @@ void vehicle_sprite_50_3(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_50(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4D60 +// 6D4D60 +void vehicle_sprite_50(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { // 0x009A3D44: switch (vehicle->bank_rotation) { @@ -1929,9 +1974,10 @@ void vehicle_sprite_50(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_51(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4E3A +// 6D4E3A +void vehicle_sprite_51(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x10) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES) { int ecx = (imageDirection / 8) + 100; int ebx = (((imageDirection / 8) + 8) * vehicleEntry->var_16) + vehicleEntry->var_2C; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1940,9 +1986,10 @@ void vehicle_sprite_51(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_52(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4E8F +// 6D4E8F +void vehicle_sprite_52(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x10) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES) { int ecx = (imageDirection / 8) + 104; int ebx = (((imageDirection / 8) + 16) * vehicleEntry->var_16) + vehicleEntry->var_2C; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1951,9 +1998,10 @@ void vehicle_sprite_52(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_53_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4D90 +// 6D4D90 +void vehicle_sprite_53_0(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x10) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES) { int ecx = imageDirection / 2; int ebx = (((imageDirection / 8) + 4) * vehicleEntry->var_16) + vehicleEntry->var_2C; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1962,9 +2010,10 @@ void vehicle_sprite_53_0(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_53_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4DF4 +// 6D4DF4 +void vehicle_sprite_53_1(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x100) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_GENTLE_SLOPE_BANKED_TRANSITIONS) { int ecx = imageDirection / 2; int ebx = (((imageDirection / 8) + 8) * vehicleEntry->var_16) + vehicleEntry->var_3C; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1973,9 +2022,10 @@ void vehicle_sprite_53_1(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_53_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4E15 +// 6D4E15 +void vehicle_sprite_53_3(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x100) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_GENTLE_SLOPE_BANKED_TRANSITIONS) { int ecx = imageDirection / 2; int ebx = (((imageDirection / 8) + 12) * vehicleEntry->var_16) + vehicleEntry->var_3C; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -1984,7 +2034,8 @@ void vehicle_sprite_53_3(rct_vehicle *vehicle, int imageDirection, int z, const } } -void vehicle_sprite_53(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4D89 +// 6D4D89 +void vehicle_sprite_53(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { // 0x009A3D94: switch (vehicle->bank_rotation) { @@ -2011,9 +2062,10 @@ void vehicle_sprite_53(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_54(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4E63 +// 6D4E63 +void vehicle_sprite_54(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x10) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES) { int ecx = ((imageDirection / 8) ^ 2) + 100; int ebx = (((imageDirection / 8) + 12) * vehicleEntry->var_16) + vehicleEntry->var_2C; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -2022,9 +2074,10 @@ void vehicle_sprite_54(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_55(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4EB8 +// 6D4EB8 +void vehicle_sprite_55(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x10) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES) { int ecx = ((imageDirection / 8) ^ 2) + 104; int ebx = (((imageDirection / 8) + 20) * vehicleEntry->var_16) + vehicleEntry->var_2C; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -2033,38 +2086,18 @@ void vehicle_sprite_55(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_56(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D47DA +// 6D47DA +void vehicle_sprite_56(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { vehicleEntry--; - // 0x009A3CF4: - switch (vehicle->bank_rotation) { - case 0: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; - case 1: vehicle_sprite_6_1(vehicle, imageDirection, z, vehicleEntry); break; - case 2: vehicle_sprite_6_2(vehicle, imageDirection, z, vehicleEntry); break; - case 3: vehicle_sprite_6_3(vehicle, imageDirection, z, vehicleEntry); break; - case 4: vehicle_sprite_6_4(vehicle, imageDirection, z, vehicleEntry); break; - case 5: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; - case 6: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; - case 7: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; - case 8: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; - case 9: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; - case 10: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; - case 11: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; - case 12: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; - case 13: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; - case 14: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; - case 15: vehicle_sprite_6_0(vehicle, imageDirection, z, vehicleEntry); break; - case 16: vehicle_sprite_6_1(vehicle, imageDirection, z, vehicleEntry); break; - case 17: vehicle_sprite_6_2(vehicle, imageDirection, z, vehicleEntry); break; - case 18: vehicle_sprite_6_3(vehicle, imageDirection, z, vehicleEntry); break; - case 19: vehicle_sprite_6_4(vehicle, imageDirection, z, vehicleEntry); break; - } + vehicle_sprite_6(vehicle, imageDirection, z, vehicleEntry); } -void vehicle_sprite_57(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4A02 +// 6D4A02 +void vehicle_sprite_57(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { vehicleEntry--; - if (vehicleEntry->sprite_flags & 0x4) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_STEEP_SLOPES) { int ecx = ((imageDirection / 4) ^ 4) + 32; int ebx = (((imageDirection / 4) + 8) * vehicleEntry->var_16) + vehicleEntry->var_24; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -2073,10 +2106,11 @@ void vehicle_sprite_57(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_58(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4A56 +// 6D4A56 +void vehicle_sprite_58(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { vehicleEntry--; - if (vehicleEntry->sprite_flags & 0x4) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_STEEP_SLOPES) { int ecx = ((imageDirection / 2) ^ 8) + 40; int ebx = ((imageDirection + 48) * vehicleEntry->var_16) + vehicleEntry->var_24; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -2085,9 +2119,10 @@ void vehicle_sprite_58(rct_vehicle *vehicle, int imageDirection, int z, const rc } } -void vehicle_sprite_59(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) //6D4773 +// 6D4773 +void vehicle_sprite_59(rct_vehicle *vehicle, int imageDirection, int z, const rct_ride_entry_vehicle *vehicleEntry) { - if (vehicleEntry->sprite_flags & 0x4000) { + if (vehicleEntry->sprite_flags & VEHICLE_SPRITE_FLAG_14) { int ecx = (imageDirection / 2) + 16; int ebx = (imageDirection * vehicleEntry->var_16) + vehicleEntry->var_4C; vehicle_sprite_paint_6D520E(vehicle, ebx, ecx, z, vehicleEntry); @@ -2167,20 +2202,16 @@ vehicle_sprite_func vehicle_sprite_funcs[] = { */ void vehicle_visual_splash1_effect(int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) { - if ((vehicle->track_type >> 2) != 0x75) { + if ((vehicle->track_type >> 2) != TRACK_ELEM_WATER_SPLASH) { return; } if (vehicle->track_progress < 48) { return; } - if (vehicle->track_progress > 112) { + if (vehicle->track_progress >= 112) { return; } - rct_vehicle *vehicle2 = vehicle; - while (vehicle2->is_child) { - vehicle2 = GET_VEHICLE(vehicle2->prev_vehicle_on_ride); - } - if (vehicle2->velocity <= 0x50000) { + if (vehicle_get_head(vehicle)->velocity <= 0x50000) { return; } int image_id = 29014 + ((((vehicle->sprite_direction / 8) + get_current_rotation()) & 3) * 8) + ((gCurrentTicks / 2) & 7); @@ -2261,10 +2292,7 @@ void vehicle_visual_splash5_effect(int z, rct_vehicle *vehicle, const rct_ride_e if (vehicle->vehicle_sprite_type != 0) { return; } - if ((vehicle->track_type >> 2) < 0x44) { - return; - } - if ((vehicle->track_type >> 2) >= 0x57) { + if (!track_element_is_covered(vehicle->track_type >> 2)) { return; } int image_id = 29078 + ((((vehicle->sprite_direction / 8) + get_current_rotation()) & 3) * 8) + ((gCurrentTicks / 2) & 7); @@ -2273,7 +2301,7 @@ void vehicle_visual_splash5_effect(int z, rct_vehicle *vehicle, const rct_ride_e void vehicle_visual_splash_effect(int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) { - switch (vehicleEntry->pad_5E) { + switch (vehicleEntry->effect_visual) { case 1: /* nullsub */ break; case VEHICLE_VISUAL_SPLASH1_EFFECT: vehicle_visual_splash1_effect(z, vehicle, vehicleEntry); break; case VEHICLE_VISUAL_SPLASH2_EFFECT: vehicle_visual_splash2_effect(z, vehicle, vehicleEntry); break; diff --git a/src/ride/vehicle_paint.h b/src/ride/vehicle_paint.h index 9ae9dd0cd3..01ce7088ea 100644 --- a/src/ride/vehicle_paint.h +++ b/src/ride/vehicle_paint.h @@ -32,6 +32,7 @@ extern const vehicle_boundbox VehicleBoundboxes[16][224]; void vehicle_paint(rct_vehicle *vehicle, int imageDirection); +void vehicle_visual_default(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_roto_drop(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_observation_tower(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); void vehicle_visual_river_rapids(int x, int imageDirection, int y, int z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry); diff --git a/src/ride/water/river_rapids.c b/src/ride/water/river_rapids.c index a4eb17e172..7fdd6e9a75 100644 --- a/src/ride/water/river_rapids.c +++ b/src/ride/water/river_rapids.c @@ -71,29 +71,29 @@ void vehicle_visual_river_rapids(int x, int imageDirection, int y, int z, rct_ve } baseImage_id += vehicleEntry->base_image_id; - vehicle_boundbox bb = _riverRapidsBoundbox[j]; + const vehicle_boundbox *bb = &_riverRapidsBoundbox[j]; image_id = baseImage_id | (vehicle->colours.body_colour << 19) | (vehicle->colours.trim_colour << 24) | 0xA0000000; - sub_98197C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + sub_98197C(image_id, 0, 0, bb->length_x, bb->length_y, bb->length_z, z, bb->offset_x, bb->offset_y, bb->offset_z + z, get_current_rotation()); if (RCT2_GLOBAL(0x140E9A8, rct_drawpixelinfo*)->zoom_level < 2 && vehicle->num_peeps > 0) { // Draw peeps: (this particular vehicle doesn't sort them back to front like others so the back ones sometimes clip, but thats how the original does it...) int peeps = ((ecx / 8) + 0) & 3; image_id = (baseImage_id + ((peeps + 1) * 72)) | (vehicle->peep_tshirt_colours[0] << 19) | (vehicle->peep_tshirt_colours[1] << 24) | 0xA0000000; - sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + sub_98199C(image_id, 0, 0, bb->length_x, bb->length_y, bb->length_z, z, bb->offset_x, bb->offset_y, bb->offset_z + z, get_current_rotation()); if (vehicle->num_peeps > 2) { peeps = ((ecx / 8) + 2) & 3; image_id = (baseImage_id + ((peeps + 1) * 72)) | (vehicle->peep_tshirt_colours[2] << 19) | (vehicle->peep_tshirt_colours[3] << 24) | 0xA0000000; - sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + sub_98199C(image_id, 0, 0, bb->length_x, bb->length_y, bb->length_z, z, bb->offset_x, bb->offset_y, bb->offset_z + z, get_current_rotation()); } if (vehicle->num_peeps > 4) { peeps = ((ecx / 8) + 1) & 3; image_id = (baseImage_id + ((peeps + 1) * 72)) | (vehicle->peep_tshirt_colours[4] << 19) | (vehicle->peep_tshirt_colours[5] << 24) | 0xA0000000; - sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + sub_98199C(image_id, 0, 0, bb->length_x, bb->length_y, bb->length_z, z, bb->offset_x, bb->offset_y, bb->offset_z + z, get_current_rotation()); } if (vehicle->num_peeps > 6) { peeps = ((ecx / 8) + 3) & 3; image_id = (baseImage_id + ((peeps + 1) * 72)) | (vehicle->peep_tshirt_colours[6] << 19) | (vehicle->peep_tshirt_colours[7] << 24) | 0xA0000000; - sub_98199C(image_id, 0, 0, bb.length_x, bb.length_y, bb.length_z, z, bb.offset_x, bb.offset_y, bb.offset_z + z, get_current_rotation()); + sub_98199C(image_id, 0, 0, bb->length_x, bb->length_y, bb->length_z, z, bb->offset_x, bb->offset_y, bb->offset_z + z, get_current_rotation()); } } diff --git a/src/ride/water/submarine_ride.c b/src/ride/water/submarine_ride.c index 5834a379c4..7a22b05780 100644 --- a/src/ride/water/submarine_ride.c +++ b/src/ride/water/submarine_ride.c @@ -62,5 +62,5 @@ void vehicle_visual_submarine(int x, int imageDirection, int y, int z, rct_vehic ps->tertiary_colour = vehicle->colours_extended; } - assert(vehicleEntry->pad_5E == 1); + assert(vehicleEntry->effect_visual == 1); }