From a5032aebd1610ae53dd1b8c7093f862aceac7daf Mon Sep 17 00:00:00 2001 From: zsilencer Date: Mon, 9 May 2016 01:33:04 -0600 Subject: [PATCH] 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;