/** rct2: 0x008B04F0 */ static void inverted_impulse_rc_track_25_deg_up_to_flat( paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, const TileElement* tileElement) { switch (direction) { case 0: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19668, 0, 0, 32, 20, 3, height + 29, 0, 6, height + 37); break; case 1: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19669, 0, 0, 32, 20, 3, height + 29, 0, 6, height + 37); break; case 2: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19670, 0, 0, 32, 20, 3, height + 29, 0, 6, height + 37); break; case 3: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19671, 0, 0, 32, 20, 3, height + 29, 0, 6, height + 37); break; } paint_util_set_segment_support_height( session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); switch (direction) { case 0: metal_a_supports_paint_setup( session, METAL_SUPPORTS_TUBES_INVERTED, 6, 0, height + 52, session->TrackColours[SCHEME_SUPPORTS]); break; case 1: metal_a_supports_paint_setup( session, METAL_SUPPORTS_TUBES_INVERTED, 8, 0, height + 52, session->TrackColours[SCHEME_SUPPORTS]); break; case 2: metal_a_supports_paint_setup( session, METAL_SUPPORTS_TUBES_INVERTED, 7, 0, height + 52, session->TrackColours[SCHEME_SUPPORTS]); break; case 3: metal_a_supports_paint_setup( session, METAL_SUPPORTS_TUBES_INVERTED, 5, 0, height + 52, session->TrackColours[SCHEME_SUPPORTS]); break; } if (direction == 0 || direction == 3) { paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_3); } else { paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_13); } paint_util_set_general_support_height(session, height + 56, 0x20); }
static void wooden_wild_mouse_track_60_deg_to_25_deg_up( paint_session * session, uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, const rct_tile_element * tileElement) { static constexpr const uint32 imageIds[2][4][2] = { { { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_SW_NE, 0 }, { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_FRONT_NW_SE }, { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_FRONT_NE_SW }, { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_SE_NW, 0 }, }, { { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_SW_NE, 0 }, { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_FRONT_NW_SE }, { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_FRONT_NE_SW }, { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_SE_NW, 0 }, }, }; uint8 isChained = track_element_is_lift_hill(tileElement) ? 1 : 0; uint32 imageId; if (direction == 0 || direction == 3) { imageId = imageIds[isChained][direction][0] | session->TrackColours[SCHEME_TRACK]; sub_98197C_rotated(session, direction, imageId, 0, 2, 32, 25, 1, height, 0, 3, height); } else { imageId = imageIds[isChained][direction][0] | session->TrackColours[SCHEME_TRACK]; session->WoodenSupportsPrependTo = sub_98197C_rotated(session, direction, imageId, 0, 6, 2, 24, 43, height, 28, 4, height + 2); imageId = imageIds[isChained][direction][1] | session->TrackColours[SCHEME_TRACK]; sub_98197C_rotated(session, direction, imageId, 0, 6, 32, 2, 43, height, 0, 4, height); } wooden_a_supports_paint_setup(session, direction & 1, 17 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); if (direction == 0 || direction == 3) { paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_1); } else { paint_util_push_tunnel_rotated(session, direction, height + 24, TUNNEL_2); } paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(session, height + 72, 0x20); }
static void wooden_wild_mouse_track_station( paint_session * session, uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, const rct_tile_element * tileElement) { static constexpr const uint32 imageIds[4][2] = { { SPR_WOODEN_WILD_MOUSE_FLAT_SW_NE, SPR_STATION_BASE_B_SW_NE }, { SPR_WOODEN_WILD_MOUSE_FLAT_NW_SE, SPR_STATION_BASE_B_NW_SE }, { SPR_WOODEN_WILD_MOUSE_FLAT_SW_NE, SPR_STATION_BASE_B_SW_NE }, { SPR_WOODEN_WILD_MOUSE_FLAT_NW_SE, SPR_STATION_BASE_B_NW_SE }, }; sub_98197C_rotated(session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_MISC], 0, 0, 32, 28, 1, height - 2, 0, 2, height); sub_98199C_rotated(session, direction, imageIds[direction][0] | session->TrackColours[SCHEME_TRACK], 0, 6, 32, 20, 1, height, 0, 0, height); wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); track_paint_util_draw_station(session, rideIndex, trackSequence, direction, height, tileElement); paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_6); paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(session, height + 32, 0x20); }
/** rct2: 0x008A5464 */ static void wooden_wild_mouse_track_flat( paint_session * session, uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, const rct_tile_element * tileElement) { static constexpr const uint32 imageIds[4] = { SPR_WOODEN_WILD_MOUSE_FLAT_SW_NE, SPR_WOODEN_WILD_MOUSE_FLAT_NW_SE, SPR_WOODEN_WILD_MOUSE_FLAT_SW_NE, SPR_WOODEN_WILD_MOUSE_FLAT_NW_SE, }; uint32 imageId = imageIds[direction] | session->TrackColours[SCHEME_TRACK]; sub_98196C_rotated(session, direction, imageId, 0, 6, 32, 20, 1, height); wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_0); paint_util_set_segment_support_height( session, paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_BC | SEGMENT_C0 | SEGMENT_C8 | SEGMENT_D4, direction), height, 0x20); paint_util_set_segment_support_height(session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); paint_util_set_general_support_height(session, height + 32, 0x20); }
/** rct2: 0x008B0470, 0x008B0480, 0x008B0490 */ static void inverted_impulse_rc_track_station( paint_session* session, ride_id_t rideIndex, [[maybe_unused]] uint8_t trackSequence, uint8_t direction, int32_t height, const TileElement* tileElement) { static constexpr const uint32_t imageIds[4][3] = { { SPR_STATION_BASE_C_SW_NE, 19662, SPR_STATION_INVERTED_BAR_B_SW_NE }, { SPR_STATION_BASE_C_NW_SE, 19663, SPR_STATION_INVERTED_BAR_B_NW_SE }, { SPR_STATION_BASE_C_SW_NE, 19662, SPR_STATION_INVERTED_BAR_B_SW_NE }, { SPR_STATION_BASE_C_NW_SE, 19663, SPR_STATION_INVERTED_BAR_B_NW_SE }, }; sub_98197C_rotated( session, direction, imageIds[direction][0] | session->TrackColours[SCHEME_MISC], 0, 0, 32, 28, 1, height, 0, 2, height); sub_98197C_rotated( session, direction, imageIds[direction][1] | session->TrackColours[SCHEME_TRACK], 0, 0, 32, 20, 3, height + 29, 0, 6, height + 29); sub_98199C_rotated( session, direction, imageIds[direction][2] | session->TrackColours[SCHEME_SUPPORTS], 0, 6, 32, 20, 3, height + 29, 0, 6, height + 29); track_paint_util_draw_station_metal_supports_2(session, direction, height, session->TrackColours[SCHEME_SUPPORTS], 11); track_paint_util_draw_station_inverted(session, rideIndex, direction, height, tileElement, STATION_VARIANT_TALL); paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_9); paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(session, height + 48, 0x20); }
/** rct2: 0x008B0460 */ static void inverted_impulse_rc_track_flat( paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, const TileElement* tileElement) { switch (direction) { case 0: case 2: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19662, 0, 0, 32, 20, 3, height + 29, 0, 6, height + 29); break; case 1: case 3: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19663, 0, 0, 32, 20, 3, height + 29, 0, 6, height + 29); break; } paint_util_set_segment_support_height( session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); if (track_paint_util_should_paint_supports(session->MapPosition)) { metal_a_supports_paint_setup( session, METAL_SUPPORTS_TUBES_INVERTED, 4, 0, height + 44, session->TrackColours[SCHEME_SUPPORTS]); } paint_util_push_tunnel_rotated(session, direction, height, TUNNEL_3); paint_util_set_general_support_height(session, height + 48, 0x20); }
/** rct2: 0x008B04E0 */ static void inverted_impulse_rc_track_60_deg_up_to_25_deg_up( paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, const TileElement* tileElement) { switch (direction) { case 0: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19682, 0, 0, 32, 20, 3, height + 29, 0, 6, height + 61); break; case 1: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19686, 0, 0, 32, 10, 49, height + 29, 0, 10, height + 11); sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19683, 0, 0, 32, 2, 49, height + 29, 0, 4, height + 11); break; case 2: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19687, 0, 0, 32, 10, 49, height + 29, 0, 10, height + 11); sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19684, 0, 0, 32, 2, 49, height + 29, 0, 4, height + 11); break; case 3: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19685, 0, 0, 32, 20, 3, height + 29, 0, 6, height + 61); break; } if (direction == 0 || direction == 3) { paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_4); } else { paint_util_push_tunnel_rotated(session, direction, height + 24, TUNNEL_5); } paint_util_set_segment_support_height( session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); paint_util_set_general_support_height(session, height + 88, 0x20); }
static void paint_splash_boats_track_60_deg_up_to_25_deg_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element *mapElement) { uint32 imageId = SplashBoats60DegUpTo25DegUpImageId[direction] | gTrackColours[SCHEME_TRACK]; uint32 frontImageId = SplashBoats60DegUpTo25DegUpFrontImageId[direction] | gTrackColours[SCHEME_TRACK]; gWoodenSupportsPrependTo = sub_98197C_rotated(direction, imageId, 0, 0, 32, 20, 2, height, 0, 6, height); sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 1, 66, height, 0, 27, height); wooden_a_supports_paint_setup((direction & 1), 17 + direction, height, gTrackColours[SCHEME_SUPPORTS], NULL); if (direction == 0 || direction == 3) { paint_util_push_tunnel_rotated(direction, height - 8, TUNNEL_7); } else { paint_util_push_tunnel_rotated(direction, height + 24, TUNNEL_8); } paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 72, 0x20); }
static void paint_splash_boats_track_25_deg_down_to_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element *mapElement) { uint32 imageId = SplashBoats25DegDownToFlatImageId[direction] | gTrackColours[SCHEME_TRACK]; uint32 frontImageId = SplashBoats25DegDownToFlatFrontImageId[direction] | gTrackColours[SCHEME_TRACK]; sub_98197C_rotated(direction, imageId, 0, 0, 32, 20, 2, height, 0, 6, height); sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 1, 42, height, 0, 27, height); static const uint8 specialSupport[] = { 3, 4, 1, 2 }; wooden_a_supports_paint_setup((direction & 1), specialSupport[direction], height, gTrackColours[SCHEME_SUPPORTS], NULL); if (direction == 0 || direction == 3) { paint_util_push_tunnel_rotated(direction, height - 8, TUNNEL_7); } else { paint_util_push_tunnel_rotated(direction, height + 24, TUNNEL_8); } paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 48, 0x20); }
/** rct2: 0x008A54C4 */ static void wooden_wild_mouse_track_25_deg_up_to_flat( paint_session * session, uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, const rct_tile_element * tileElement) { static constexpr const uint32 imageIds[2][4] = { { SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_SW_NE, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_NW_SE, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_NE_SW, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_SE_NW, }, { SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_SW_NE, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_NW_SE, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_NE_SW, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_SE_NW, }, }; uint8 isChained = track_element_is_lift_hill(tileElement) ? 1 : 0; uint32 imageId = imageIds[isChained][direction] | session->TrackColours[SCHEME_TRACK]; sub_98197C_rotated(session, direction, imageId, 0, 2, 32, 25, 1, height, 0, 3, height); wooden_a_supports_paint_setup(session, direction & 1, 5 + direction, height, session->TrackColours[SCHEME_SUPPORTS], nullptr); if (direction == 0 || direction == 3) { paint_util_push_tunnel_rotated(session, direction, height - 8, TUNNEL_0); } else { paint_util_push_tunnel_rotated(session, direction, height + 8, TUNNEL_12); } paint_util_set_segment_support_height(session, SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(session, height + 40, 0x20); }
/** rct2: 0x008B0590 */ static void inverted_impulse_rc_track_60_deg_down_to_90_deg_down( paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, const TileElement* tileElement) { switch (trackSequence) { case 0: switch (direction) { case 0: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19698, 0, 0, 32, 2, 55, height + 29, 0, 4, height + 11); break; case 1: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19699, 0, 0, 32, 20, 3, height + 29, 0, 6, height + 85); break; case 2: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19696, 0, 0, 32, 20, 3, height + 29, 0, 6, height + 85); break; case 3: sub_98197C_rotated( session, direction, session->TrackColours[SCHEME_TRACK] | 19697, 0, 0, 32, 2, 55, height + 29, 0, 4, height + 11); break; } if (direction == 0 || direction == 3) { paint_util_push_tunnel_rotated(session, direction, height + 48, TUNNEL_5); } paint_util_set_segment_support_height( session, paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); paint_util_set_general_support_height(session, height + 96, 0x20); break; case 1: break; } }