From ae062dea69e8f862ad32e45ceff8ed9c39248b1b Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 1 Oct 2016 12:32:06 +0100 Subject: [PATCH] Fix river raft painting --- src/ride/water/river_rafts.c | 331 ++++++++++++++++++++++------------- 1 file changed, 209 insertions(+), 122 deletions(-) diff --git a/src/ride/water/river_rafts.c b/src/ride/water/river_rafts.c index 9ee4348551..462ea677f4 100644 --- a/src/ride/water/river_rafts.c +++ b/src/ride/water/river_rafts.c @@ -116,56 +116,54 @@ enum { SPR_RIVER_RAFTS_TURN_LEFT_5_TOP_NE_SE_SEQ_2 = 20946, SPR_RIVER_RAFTS_TURN_LEFT_5_TOP_NE_SE_SEQ_0 = 20947, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_NW_NE_SEQ_0 = 20948, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_NW_NE_SEQ_1 = 20949, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_NW_NE_SEQ_2 = 20950, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_NW_NE_SEQ_3 = 20951, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_NE_SE_SEQ_0 = 20952, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_NE_SE_SEQ_1 = 20953, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_NE_SE_SEQ_2 = 20954, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_NE_SE_SEQ_3 = 20955, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_SE_NE_SEQ_0 = 20956, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_SE_NE_SEQ_1 = 20957, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_SE_NE_SEQ_2 = 20958, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_SE_NE_SEQ_3 = 20959, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_SW_SE_SEQ_0 = 20960, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_SW_SE_SEQ_1 = 20961, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_SW_SE_SEQ_2 = 20962, - SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_NW_SW_SE_SEQ_3 = 20963, - - SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_SW_NE_SEQ_0 = 20964, - SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_SW_NE_SEQ_1 = 20965, - SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_SW_NE_SEQ_2 = 20966, - SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_SW_NE_SEQ_3 = 20967, - SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_NW_SE_SEQ_0 = 20968, - SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_NW_SE_SEQ_1 = 20969, - SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_NW_SE_SEQ_2 = 20970, - SPR_RIVER_RAFTS_S_BEND_LEFT_SIDE_NW_SE_SEQ_3 = 20971, - SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_SW_NE_SEQ_0 = 20972, - SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_SW_NE_SEQ_1 = 20973, - SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_SW_NE_SEQ_2 = 20974, - SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_SW_NE_SEQ_3 = 20975, - SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_NW_SE_SEQ_0 = 20976, - SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_NW_SE_SEQ_1 = 20977, - SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_NW_SE_SEQ_2 = 20978, - SPR_RIVER_RAFTS_S_BEND_RIGHT_SIDE_NW_SE_SEQ_3 = 20979, - - SPR_RIVER_RAFTS_S_BEND_LEFT_NE_SE_SW_SEQ_3 = 20980, - SPR_RIVER_RAFTS_S_BEND_LEFT_NE_SE_SW_SEQ_2 = 20981, - SPR_RIVER_RAFTS_S_BEND_LEFT_NE_SE_SW_SEQ_1 = 20982, - SPR_RIVER_RAFTS_S_BEND_LEFT_NE_SE_SW_SEQ_0 = 20983, - SPR_RIVER_RAFTS_S_BEND_LEFT_SE_SW_NW_SEQ_3 = 20984, - SPR_RIVER_RAFTS_S_BEND_LEFT_SE_SW_NW_SEQ_2 = 20985, - SPR_RIVER_RAFTS_S_BEND_LEFT_SE_SW_NW_SEQ_1 = 20986, - SPR_RIVER_RAFTS_S_BEND_LEFT_SE_SW_NW_SEQ_0 = 20987, - SPR_RIVER_RAFTS_S_BEND_LEFT_NE_NW_SW_SEQ_3 = 20988, - SPR_RIVER_RAFTS_S_BEND_LEFT_NE_NW_SW_SEQ_2 = 20989, - SPR_RIVER_RAFTS_S_BEND_LEFT_NE_NW_SW_SEQ_1 = 20990, - SPR_RIVER_RAFTS_S_BEND_LEFT_NE_NW_SW_SEQ_0 = 20991, - SPR_RIVER_RAFTS_S_BEND_LEFT_SE_NE_NW_SEQ_3 = 20992, - SPR_RIVER_RAFTS_S_BEND_LEFT_SE_NE_NW_SEQ_2 = 20993, - SPR_RIVER_RAFTS_S_BEND_LEFT_SE_NE_NW_SEQ_1 = 20994, - SPR_RIVER_RAFTS_S_BEND_LEFT_SE_NE_NW_SEQ_0 = 20995, + SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_0 = 20948, + SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_1 = 20949, + SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_2 = 20950, + SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_3 = 20951, + SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_0 = 20952, + SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_1 = 20953, + SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_2 = 20954, + SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_3 = 20955, + SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_0 = 20956, + SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_1 = 20957, + SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_2 = 20958, + SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_3 = 20959, + SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_0 = 20960, + SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_1 = 20961, + SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_2 = 20962, + SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_3 = 20963, + SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_0 = 20964, + SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_1 = 20965, + SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_2 = 20966, + SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_3 = 20967, + SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_0 = 20968, + SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_1 = 20969, + SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_2 = 20970, + SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_3 = 20971, + SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_0 = 20972, + SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_1 = 20973, + SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_2 = 20974, + SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_3 = 20975, + SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_0 = 20976, + SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_1 = 20977, + SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_2 = 20978, + SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_3 = 20979, + SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_3 = 20980, + SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_2 = 20981, + SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_1 = 20982, + SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_0 = 20983, + SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_3 = 20984, + SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_2 = 20985, + SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_1 = 20986, + SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_0 = 20987, + SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_3 = 20988, + SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_2 = 20989, + SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_1 = 20990, + SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_0 = 20991, + SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_3 = 20992, + SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_2 = 20993, + SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_1 = 20994, + SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_0 = 20995, }; static const sprite_bb RiverRaftsLeftQuarterTurn5_Top[4][5] = { @@ -342,15 +340,11 @@ static void paint_river_rafts_station(uint8 rideIndex, uint8 trackSequence, uint sub_98196C(imageId, 0, 0, 32, 32, 1, height, get_current_rotation()); } - track_paint_util_draw_station_platform(ride, direction, height, 7, mapElement); - wooden_a_supports_paint_setup((direction & 1), 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); - if (direction & 1) { - paint_util_push_tunnel_right(height, TUNNEL_6); - } else { - paint_util_push_tunnel_left(height, TUNNEL_6); - } + track_paint_util_draw_station_platform(ride, direction, height, 7, mapElement); + + paint_util_push_tunnel_rotated(direction, height, TUNNEL_6); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 32, 0x20); @@ -383,6 +377,19 @@ static void paint_river_rafts_track_left_quarter_turn_5_tiles(uint8 rideIndex, u case 6: paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); break; } + switch (trackSequence) { + case 0: + if (direction == 0 || direction == 3) { + paint_util_push_tunnel_rotated(direction, height, TUNNEL_6); + } + break; + case 6: + if (direction == 2 || direction == 3) { + paint_util_push_tunnel_rotated(direction ^ 1, height, TUNNEL_6); + } + break; + } + paint_util_set_general_support_height(height + 32, 0x20); } @@ -413,58 +420,16 @@ static void paint_river_rafts_track_right_quarter_turn_5_tiles(uint8 rideIndex, case 6: paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); break; } - paint_util_set_general_support_height(height + 32, 0x20); -} - -static void paint_river_rafts_track_s_bend(uint32 baseImageId, uint8 trackSequence, uint8 direction, int height, const uint8 supportTypes[][4], uint16 ssegs1, uint16 ssegs2) -{ - uint32 imageId = baseImageId; - imageId += (direction & 1) * 4; - imageId += (direction & 2) ? 35 : 0; - imageId += (direction & 2) ? -trackSequence : trackSequence; - imageId |= gTrackColours[SCHEME_TRACK]; - - uint32 sideImageId = imageId; - sideImageId += (direction & 2) ? -16 : 16; - - switch (direction & 1) { - case 0: - switch (trackSequence) { - case 0: sub_98197C(imageId , 0, 0, 32, 27, 2, height, 0, 2, height , get_current_rotation()); - sub_98197C(sideImageId, 0, 0, 32, 27, 0, height, 0, 2, height + 27, get_current_rotation()); break; - case 1: sub_98197C(imageId , 0, 0, 32, 26, 2, height, 0, 6, height , get_current_rotation()); - sub_98197C(sideImageId, 0, 0, 32, 26, 0, height, 0, 6, height + 27, get_current_rotation()); break; - case 2: sub_98197C(imageId , 0, 0, 32, 26, 2, height, 0, 6, height , get_current_rotation()); - sub_98197C(sideImageId, 0, 0, 32, 26, 0, height, 0, 6, height + 27, get_current_rotation()); break; - case 3: sub_98197C(imageId , 0, 0, 32, 27, 2, height, 0, 2, height , get_current_rotation()); - sub_98197C(sideImageId, 0, 0, 32, 27, 0, height, 0, 2, height + 27, get_current_rotation()); break; - } - case 1: - switch (trackSequence) { - case 0: sub_98197C(imageId , 0, 0, 27, 32, 2, height, 2, 0, height , get_current_rotation()); - sub_98197C(sideImageId, 0, 0, 27, 32, 0, height, 2, 0, height + 27, get_current_rotation()); break; - case 1: sub_98197C(imageId , 0, 0, 26, 32, 2, height, 6, 0, height , get_current_rotation()); - sub_98197C(sideImageId, 0, 0, 26, 32, 0, height, 6, 0, height + 27, get_current_rotation()); break; - case 2: sub_98197C(imageId , 0, 0, 26, 32, 2, height, 6, 0, height , get_current_rotation()); - sub_98197C(sideImageId, 0, 0, 26, 32, 0, height, 6, 0, height + 27, get_current_rotation()); break; - case 3: sub_98197C(imageId , 0, 0, 27, 32, 2, height, 2, 0, height , get_current_rotation()); - sub_98197C(sideImageId, 0, 0, 27, 32, 0, height, 2, 0, height + 27, get_current_rotation()); break; - } - } - - uint8 supportType = supportTypes[direction][trackSequence]; - wooden_a_supports_paint_setup(supportType, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); - switch (trackSequence) { case 0: - case 3: - paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + if (direction == 0 || direction == 3) { + paint_util_push_tunnel_rotated(direction, height, TUNNEL_6); + } break; - case 1: - paint_util_set_segment_support_height(paint_util_rotate_segments(ssegs1, direction), 0xFFFF, 0); - break; - case 2: - paint_util_set_segment_support_height(paint_util_rotate_segments(ssegs2, direction), 0xFFFF, 0); + case 6: + if (direction == 0 || direction == 1) { + paint_util_push_tunnel_rotated(direction ^ 1, height, TUNNEL_6); + } break; } @@ -474,29 +439,151 @@ static void paint_river_rafts_track_s_bend(uint32 baseImageId, uint8 trackSequen /** rct2: 0x0089B180 */ static void paint_river_rafts_track_s_bend_left(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { - static const uint8 supportTypes[][4] = { - { 0, 5, 3, 0 }, - { 1, 2, 4, 1 }, - { 0, 3, 5, 0 }, - { 1, 4, 2, 1 }, + static const uint32 imageIds[4][4][2] = + { + { { SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_0 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_1 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_2 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_NE_NW_NE_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_3 } }, + { { SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_0 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_1 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_2 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_NW_SW_NW_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_3 } }, + { { SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_3 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_2 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_1 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_SW_SE_SW_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_NW_NE_SEQ_0 } }, + { { SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_3 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_2 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_1 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_SE_NE_SE_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_NW_SW_NW_SEQ_0 } }, }; - paint_river_rafts_track_s_bend(SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_NW_NE_SEQ_0, trackSequence, direction, height, supportTypes, - SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4, - SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC); + + uint32 imageId = imageIds[direction][trackSequence][0] | gTrackColours[SCHEME_TRACK]; + uint32 frontImageId = imageIds[direction][trackSequence][1] | gTrackColours[SCHEME_TRACK]; + sint16 bboy; + + switch (trackSequence) { + case 0: + sub_98197C_rotated(direction, imageId, 0, 0, 32, 27, 2, height, 0, 2, height); + sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 27, 0, height, 0, 2, height + 27); + wooden_a_supports_paint_setup(direction & 1, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + break; + case 1: + bboy = (direction == 0 || direction == 1) ? 0 : 6; + sub_98197C_rotated(direction, imageId, 0, 0, 32, 26, 2, height, 0, bboy, height); + sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 26, 0, height, 0, bboy, height + 27); + + static const int supportTypes1[] = { 5, 2, 3, 4 }; + wooden_a_supports_paint_setup(supportTypes1[direction], 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); + + paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + break; + case 2: + bboy = (direction == 2 || direction == 3) ? 0 : 6; + sub_98197C_rotated(direction, imageId, 0, 0, 32, 26, 2, height, 0, bboy, height); + sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 26, 0, height, 0, bboy, height + 27); + + static const int supportTypes2[] = { 3, 4, 5, 2 }; + wooden_a_supports_paint_setup(supportTypes2[direction], 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); + + paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + break; + case 3: + sub_98197C_rotated(direction, imageId, 0, 0, 32, 27, 2, height, 0, 2, height); + sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 27, 0, height, 0, 2, height + 27); + wooden_a_supports_paint_setup(direction & 1, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + break; + } + + if (trackSequence == 0) { + if (direction == 0 || direction == 3) { + paint_util_push_tunnel_rotated(direction, height, TUNNEL_6); + } + } else if (trackSequence == 3) { + if (direction == 1 || direction == 2) { + paint_util_push_tunnel_rotated(direction, height, TUNNEL_6); + } + } + + paint_util_set_general_support_height(height + 32, 0x20); } /** rct2: 0x0089B190 */ static void paint_river_rafts_track_s_bend_right(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { - static const uint8 supportTypes[][4] = { - { 0, 4, 2, 0 }, - { 1, 5, 3, 1 }, - { 0, 2, 4, 0 }, - { 1, 3, 5, 1 }, + static const uint32 imageIds[4][4][2] = + { + { { SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_0 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_1 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_2 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_NE_SE_NE_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_3 } }, + { { SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_0 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_1 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_2 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_SE_SW_SE_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_3 } }, + { { SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_3 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_2 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_1 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_SW_NW_SW_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_NE_SE_NE_SEQ_0 } }, + { { SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_0, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_3 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_1, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_2 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_2, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_1 }, + { SPR_RIVER_RAFTS_S_BEND_TOP_NW_NE_NW_SEQ_3, SPR_RIVER_RAFTS_S_BEND_SIDE_SE_SW_SE_SEQ_0 } }, }; - paint_river_rafts_track_s_bend(SPR_RIVER_RAFTS_S_BEND_LEFT_TOP_SW_SE_NE_SEQ_0, trackSequence, direction, height, supportTypes, - SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_C0 | SEGMENT_D4 | SEGMENT_BC, - SEGMENT_D0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_B8 | SEGMENT_C8 | SEGMENT_B4); + + uint32 imageId = imageIds[direction][trackSequence][0] | gTrackColours[SCHEME_TRACK]; + uint32 frontImageId = imageIds[direction][trackSequence][1] | gTrackColours[SCHEME_TRACK]; + sint16 bboy; + + switch (trackSequence) { + case 0: + sub_98197C_rotated(direction, imageId, 0, 0, 32, 27, 2, height, 0, 2, height); + sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 27, 0, height, 0, 2, height + 27); + wooden_a_supports_paint_setup(direction & 1, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + break; + case 1: + bboy = (direction == 2 || direction == 3) ? 0 : 6; + sub_98197C_rotated(direction, imageId, 0, 0, 32, 26, 2, height, 0, bboy, height); + sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 26, 0, height, 0, bboy, height + 27); + + static const int supportTypes1[] = { 4, 5, 2, 3 }; + wooden_a_supports_paint_setup(supportTypes1[direction], 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); + + paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_BC | SEGMENT_C0 | SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0 | SEGMENT_D4, direction), 0xFFFF, 0); + break; + case 2: + bboy = (direction == 0 || direction == 1) ? 0 : 6; + sub_98197C_rotated(direction, imageId, 0, 0, 32, 26, 2, height, 0, bboy, height); + sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 26, 0, height, 0, bboy, height + 27); + + static const int supportTypes2[] = { 2, 3, 4, 5 }; + wooden_a_supports_paint_setup(supportTypes2[direction], 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); + + paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_B4 | SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + break; + case 3: + sub_98197C_rotated(direction, imageId, 0, 0, 32, 27, 2, height, 0, 2, height); + sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 27, 0, height, 0, 2, height + 27); + wooden_a_supports_paint_setup(direction & 1, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + break; + } + + if (trackSequence == 0) { + if (direction == 0 || direction == 3) { + paint_util_push_tunnel_rotated(direction, height, TUNNEL_6); + } + } else if (trackSequence == 3) { + if (direction == 1 || direction == 2) { + paint_util_push_tunnel_rotated(direction, height, TUNNEL_6); + } + } + + paint_util_set_general_support_height(height + 32, 0x20); } /**