From ce5831f9b416732b1b57f0ef5595e4e62cf956aa Mon Sep 17 00:00:00 2001 From: Marijn van der Werf Date: Sat, 22 Oct 2016 01:36:50 +0200 Subject: [PATCH] Fix upward single-tile turns --- src/ride/coaster/compact_inverted_coaster.c | 26 +------- src/ride/coaster/corkscrew_roller_coaster.c | 26 +------- src/ride/coaster/flying_roller_coaster.c | 63 +++---------------- src/ride/coaster/giga_coaster.c | 26 +------- src/ride/coaster/inverted_roller_coaster.c | 26 +------- src/ride/coaster/lay_down_roller_coaster.c | 63 +++---------------- src/ride/coaster/looping_roller_coaster.c | 26 +------- src/ride/coaster/mini_roller_coaster.c | 26 +------- src/ride/coaster/twister_roller_coaster.c | 26 +------- .../coaster/vertical_drop_roller_coaster.c | 26 +------- src/ride/coaster/wild_mouse.c | 2 +- src/ride/coaster/wooden_roller_coaster.c | 26 +------- src/ride/coaster/wooden_wild_mouse.c | 2 +- src/ride/gentle/car_ride.c | 2 +- src/ride/gentle/ghost_train.c | 2 +- src/ride/gentle/mini_helicopters.c | 2 +- src/ride/track_paint.c | 16 +++-- src/ride/track_paint.h | 4 +- src/ride/water/submarine_ride.c | 2 +- test/testpaint/TestTrack.cpp | 1 + 20 files changed, 53 insertions(+), 340 deletions(-) diff --git a/src/ride/coaster/compact_inverted_coaster.c b/src/ride/coaster/compact_inverted_coaster.c index df3086dbd6..fc7d489e65 100644 --- a/src/ride/coaster/compact_inverted_coaster.c +++ b/src/ride/coaster/compact_inverted_coaster.c @@ -2855,18 +2855,7 @@ static void compact_inverted_rc_track_left_quarter_turn_1_60_deg_up(uint8 rideIn sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 26905, 0, 0, 28, 28, 1, height + 5, 2, 2, height + 104); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_left(height - 8, TUNNEL_5); - break; - case 2: - paint_util_push_tunnel_right(height + 56, TUNNEL_4); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_4); - paint_util_push_tunnel_left(height + 56, TUNNEL_4); - break; - } + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_4, +56, TUNNEL_5); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } @@ -2892,18 +2881,7 @@ static void compact_inverted_rc_track_right_quarter_turn_1_60_deg_up(uint8 rideI sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 26900, 0, 0, 28, 28, 1, height + 5, 2, 2, height + 104); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_right(height + 56, TUNNEL_4); - paint_util_push_tunnel_left(height - 8, TUNNEL_4); - break; - case 1: - paint_util_push_tunnel_left(height + 56, TUNNEL_5); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_4); - break; - } + track_paint_util_right_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_4, +56, TUNNEL_5); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } diff --git a/src/ride/coaster/corkscrew_roller_coaster.c b/src/ride/coaster/corkscrew_roller_coaster.c index 4c96c1fa18..01103667a6 100644 --- a/src/ride/coaster/corkscrew_roller_coaster.c +++ b/src/ride/coaster/corkscrew_roller_coaster.c @@ -3160,18 +3160,7 @@ static void corkscrew_rc_track_left_quarter_turn_1_60_deg_up(uint8 rideIndex, ui sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 16558, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_left(height - 8, TUNNEL_2); - break; - case 2: - paint_util_push_tunnel_right(height + 56, TUNNEL_1); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_1); - paint_util_push_tunnel_left(height + 56, TUNNEL_1); - break; - } + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_1, +56, TUNNEL_2); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } @@ -3197,18 +3186,7 @@ static void corkscrew_rc_track_right_quarter_turn_1_60_deg_up(uint8 rideIndex, u sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 16553, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_right(height + 56, TUNNEL_1); - paint_util_push_tunnel_left(height - 8, TUNNEL_1); - break; - case 1: - paint_util_push_tunnel_left(height + 56, TUNNEL_2); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_1); - break; - } + track_paint_util_right_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_1, +56, TUNNEL_2); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } diff --git a/src/ride/coaster/flying_roller_coaster.c b/src/ride/coaster/flying_roller_coaster.c index 72f33831dd..b7a7bb440a 100644 --- a/src/ride/coaster/flying_roller_coaster.c +++ b/src/ride/coaster/flying_roller_coaster.c @@ -4765,20 +4765,6 @@ static void flying_rc_track_left_quarter_turn_1_60_deg_up(uint8 rideIndex, uint8 sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 17304, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_left(height - 8, TUNNEL_8); - break; - case 2: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - paint_util_push_tunnel_left(height + 56, TUNNEL_7); - break; - } - paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); - paint_util_set_general_support_height(height + 104, 0x20); } else { switch (direction) { case 0: @@ -4798,21 +4784,11 @@ static void flying_rc_track_left_quarter_turn_1_60_deg_up(uint8 rideIndex, uint8 sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 27347, 0, 0, 28, 28, 1, height - 5, 2, 2, height + 94); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_left(height - 8, TUNNEL_8); - break; - case 2: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - paint_util_push_tunnel_left(height + 56, TUNNEL_7); - break; - } - paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); - paint_util_set_general_support_height(height + 104, 0x20); } + + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_7, +56, TUNNEL_8); + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 104, 0x20); } /** rct2: 0x007C7394 */ @@ -4837,20 +4813,6 @@ static void flying_rc_track_right_quarter_turn_1_60_deg_up(uint8 rideIndex, uint sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 17299, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - paint_util_push_tunnel_left(height - 8, TUNNEL_7); - break; - case 1: - paint_util_push_tunnel_left(height + 56, TUNNEL_8); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - break; - } - paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); - paint_util_set_general_support_height(height + 104, 0x20); } else { switch (direction) { case 0: @@ -4870,21 +4832,10 @@ static void flying_rc_track_right_quarter_turn_1_60_deg_up(uint8 rideIndex, uint sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 27342, 0, 0, 28, 28, 1, height - 5, 2, 2, height + 94); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - paint_util_push_tunnel_left(height - 8, TUNNEL_7); - break; - case 1: - paint_util_push_tunnel_left(height + 56, TUNNEL_8); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - break; - } - paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); - paint_util_set_general_support_height(height + 104, 0x20); } + track_paint_util_right_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_7, +56, TUNNEL_8); + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 104, 0x20); } /** rct2: 0x007C73A4 */ diff --git a/src/ride/coaster/giga_coaster.c b/src/ride/coaster/giga_coaster.c index b64317d715..b391acca80 100644 --- a/src/ride/coaster/giga_coaster.c +++ b/src/ride/coaster/giga_coaster.c @@ -2610,18 +2610,7 @@ static void giga_rc_track_left_quarter_turn_1_60_deg_up(uint8 rideIndex, uint8 t sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 18234, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_left(height - 8, TUNNEL_8); - break; - case 2: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - paint_util_push_tunnel_left(height + 56, TUNNEL_7); - break; - } + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_7, +56, TUNNEL_8); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } @@ -2647,18 +2636,7 @@ static void giga_rc_track_right_quarter_turn_1_60_deg_up(uint8 rideIndex, uint8 sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 18229, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - paint_util_push_tunnel_left(height - 8, TUNNEL_7); - break; - case 1: - paint_util_push_tunnel_left(height + 56, TUNNEL_8); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - break; - } + track_paint_util_right_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_7, +56, TUNNEL_8); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } diff --git a/src/ride/coaster/inverted_roller_coaster.c b/src/ride/coaster/inverted_roller_coaster.c index a6236decbe..4672ebdf3b 100644 --- a/src/ride/coaster/inverted_roller_coaster.c +++ b/src/ride/coaster/inverted_roller_coaster.c @@ -2800,18 +2800,7 @@ static void inverted_rc_track_left_quarter_turn_1_60_deg_up(uint8 rideIndex, uin sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 27347, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_left(height - 8, TUNNEL_5); - break; - case 2: - paint_util_push_tunnel_right(height + 56, TUNNEL_4); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_4); - paint_util_push_tunnel_left(height + 56, TUNNEL_4); - break; - } + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_4, +56, TUNNEL_5); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } @@ -2837,18 +2826,7 @@ static void inverted_rc_track_right_quarter_turn_1_60_deg_up(uint8 rideIndex, ui sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 27342, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_right(height + 56, TUNNEL_4); - paint_util_push_tunnel_left(height - 8, TUNNEL_4); - break; - case 1: - paint_util_push_tunnel_left(height + 56, TUNNEL_5); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_4); - break; - } + track_paint_util_right_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_4, +56, TUNNEL_5); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } diff --git a/src/ride/coaster/lay_down_roller_coaster.c b/src/ride/coaster/lay_down_roller_coaster.c index 3965a9af27..4f3a2a69b8 100644 --- a/src/ride/coaster/lay_down_roller_coaster.c +++ b/src/ride/coaster/lay_down_roller_coaster.c @@ -5609,20 +5609,6 @@ static void lay_down_rc_track_left_quarter_turn_1_60_deg_up(uint8 rideIndex, uin sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 16558, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_left(height - 8, TUNNEL_2); - break; - case 2: - paint_util_push_tunnel_right(height + 56, TUNNEL_1); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_1); - paint_util_push_tunnel_left(height + 56, TUNNEL_1); - break; - } - paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); - paint_util_set_general_support_height(height + 104, 0x20); } else { switch (direction) { case 0: @@ -5642,21 +5628,10 @@ static void lay_down_rc_track_left_quarter_turn_1_60_deg_up(uint8 rideIndex, uin sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 26905, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_left(height - 8, TUNNEL_2); - break; - case 2: - paint_util_push_tunnel_right(height + 56, TUNNEL_1); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_1); - paint_util_push_tunnel_left(height + 56, TUNNEL_1); - break; - } - paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); - paint_util_set_general_support_height(height + 104, 0x20); } + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_1, +56, TUNNEL_2); + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 104, 0x20); } /** rct2: 0x00824D1C */ @@ -5681,20 +5656,6 @@ static void lay_down_rc_track_right_quarter_turn_1_60_deg_up(uint8 rideIndex, ui sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 16553, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_right(height + 56, TUNNEL_1); - paint_util_push_tunnel_left(height - 8, TUNNEL_1); - break; - case 1: - paint_util_push_tunnel_left(height + 56, TUNNEL_2); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_1); - break; - } - paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); - paint_util_set_general_support_height(height + 104, 0x20); } else { switch (direction) { case 0: @@ -5714,21 +5675,11 @@ static void lay_down_rc_track_right_quarter_turn_1_60_deg_up(uint8 rideIndex, ui sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 26900, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_right(height + 56, TUNNEL_1); - paint_util_push_tunnel_left(height - 8, TUNNEL_1); - break; - case 1: - paint_util_push_tunnel_left(height + 56, TUNNEL_2); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_1); - break; - } - paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); - paint_util_set_general_support_height(height + 104, 0x20); } + + track_paint_util_right_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_1, +56, TUNNEL_2); + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 104, 0x20); } /** rct2: 0x00824D2C */ diff --git a/src/ride/coaster/looping_roller_coaster.c b/src/ride/coaster/looping_roller_coaster.c index a7b9693367..5c62120a92 100644 --- a/src/ride/coaster/looping_roller_coaster.c +++ b/src/ride/coaster/looping_roller_coaster.c @@ -2900,18 +2900,7 @@ static void looping_rc_track_left_quarter_turn_1_60_deg_up(uint8 rideIndex, uint sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 15344, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_left(height - 8, TUNNEL_2); - break; - case 2: - paint_util_push_tunnel_right(height + 56, TUNNEL_1); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_1); - paint_util_push_tunnel_left(height + 56, TUNNEL_1); - break; - } + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_1, +56, TUNNEL_2); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } @@ -2937,18 +2926,7 @@ static void looping_rc_track_right_quarter_turn_1_60_deg_up(uint8 rideIndex, uin sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 15339, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_right(height + 56, TUNNEL_1); - paint_util_push_tunnel_left(height - 8, TUNNEL_1); - break; - case 1: - paint_util_push_tunnel_left(height + 56, TUNNEL_2); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_1); - break; - } + track_paint_util_right_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_1, +56, TUNNEL_2); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } diff --git a/src/ride/coaster/mini_roller_coaster.c b/src/ride/coaster/mini_roller_coaster.c index 8e6e6d71a4..7e3940993c 100644 --- a/src/ride/coaster/mini_roller_coaster.c +++ b/src/ride/coaster/mini_roller_coaster.c @@ -2751,18 +2751,7 @@ static void mini_rc_track_left_quarter_turn_1_60_deg_up(uint8 rideIndex, uint8 t sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 18896, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_left(height - 8, TUNNEL_8); - break; - case 2: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - paint_util_push_tunnel_left(height + 56, TUNNEL_7); - break; - } + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_7, +56, TUNNEL_8); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } @@ -2788,18 +2777,7 @@ static void mini_rc_track_right_quarter_turn_1_60_deg_up(uint8 rideIndex, uint8 sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 18891, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - paint_util_push_tunnel_left(height - 8, TUNNEL_7); - break; - case 1: - paint_util_push_tunnel_left(height + 56, TUNNEL_8); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - break; - } + track_paint_util_right_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_7, +56, TUNNEL_8); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } diff --git a/src/ride/coaster/twister_roller_coaster.c b/src/ride/coaster/twister_roller_coaster.c index 26340637a2..559fa5a57b 100644 --- a/src/ride/coaster/twister_roller_coaster.c +++ b/src/ride/coaster/twister_roller_coaster.c @@ -3169,18 +3169,7 @@ static void twister_rc_track_left_quarter_turn_1_60_deg_up(uint8 rideIndex, uint sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 17304, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_left(height - 8, TUNNEL_8); - break; - case 2: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - paint_util_push_tunnel_left(height + 56, TUNNEL_7); - break; - } + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_7, +56, TUNNEL_8); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } @@ -3206,18 +3195,7 @@ static void twister_rc_track_right_quarter_turn_1_60_deg_up(uint8 rideIndex, uin sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 17299, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - paint_util_push_tunnel_left(height - 8, TUNNEL_7); - break; - case 1: - paint_util_push_tunnel_left(height + 56, TUNNEL_8); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - break; - } + track_paint_util_right_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_7, +56, TUNNEL_8); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } diff --git a/src/ride/coaster/vertical_drop_roller_coaster.c b/src/ride/coaster/vertical_drop_roller_coaster.c index fe989b15ec..096e070d17 100644 --- a/src/ride/coaster/vertical_drop_roller_coaster.c +++ b/src/ride/coaster/vertical_drop_roller_coaster.c @@ -3020,18 +3020,7 @@ static void vertical_drop_rc_track_left_quarter_turn_1_60_deg_up(uint8 rideIndex sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 17304, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_left(height - 8, TUNNEL_8); - break; - case 2: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - paint_util_push_tunnel_left(height + 56, TUNNEL_7); - break; - } + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_7, +56, TUNNEL_8); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } @@ -3057,18 +3046,7 @@ static void vertical_drop_rc_track_right_quarter_turn_1_60_deg_up(uint8 rideInde sub_98197C_rotated(direction, gTrackColours[SCHEME_TRACK] | 17299, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - paint_util_push_tunnel_left(height - 8, TUNNEL_7); - break; - case 1: - paint_util_push_tunnel_left(height + 56, TUNNEL_8); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - break; - } + track_paint_util_right_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_7, +56, TUNNEL_8); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } diff --git a/src/ride/coaster/wild_mouse.c b/src/ride/coaster/wild_mouse.c index 1bc7b2c0b6..218e3a3b67 100644 --- a/src/ride/coaster/wild_mouse.c +++ b/src/ride/coaster/wild_mouse.c @@ -624,7 +624,7 @@ static void wild_mouse_track_left_quarter_turn_1(uint8 rideIndex, uint8 trackSeq break; } metal_a_supports_paint_setup(0, 4, -1, height, gTrackColours[SCHEME_SUPPORTS]); - track_paint_util_left_quarter_turn_1_tile_tunnel(height, direction, trackSequence); + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, 0, TUNNEL_0, 0, TUNNEL_0); paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C4 | SEGMENT_C8 | SEGMENT_D0, direction), 0xFFFF, 0); paint_util_set_general_support_height(height + 32, 0x20); } diff --git a/src/ride/coaster/wooden_roller_coaster.c b/src/ride/coaster/wooden_roller_coaster.c index 38240024a6..a951f0b6dc 100644 --- a/src/ride/coaster/wooden_roller_coaster.c +++ b/src/ride/coaster/wooden_roller_coaster.c @@ -3798,18 +3798,7 @@ static void wooden_rc_track_left_quarter_turn_1_60_deg_up(uint8 rideIndex, uint8 sub_98199C_rotated(direction, wooden_rc_get_rails_colour() | 25086, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_left(height - 8, TUNNEL_8); - break; - case 2: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - paint_util_push_tunnel_left(height + 56, TUNNEL_7); - break; - } + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_7, +56, TUNNEL_8); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } @@ -3843,18 +3832,7 @@ static void wooden_rc_track_right_quarter_turn_1_60_deg_up(uint8 rideIndex, uint sub_98199C_rotated(direction, wooden_rc_get_rails_colour() | 25090, 0, 0, 28, 28, 1, height, 2, 2, height + 99); break; } - switch (direction) { - case 0: - paint_util_push_tunnel_right(height + 56, TUNNEL_7); - paint_util_push_tunnel_left(height - 8, TUNNEL_7); - break; - case 1: - paint_util_push_tunnel_left(height + 56, TUNNEL_8); - break; - case 3: - paint_util_push_tunnel_right(height - 8, TUNNEL_7); - break; - } + track_paint_util_right_quarter_turn_1_tile_tunnel(direction, height, -8, TUNNEL_7, +56, TUNNEL_8); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 104, 0x20); } diff --git a/src/ride/coaster/wooden_wild_mouse.c b/src/ride/coaster/wooden_wild_mouse.c index f17f928ee4..1dc0abfd93 100644 --- a/src/ride/coaster/wooden_wild_mouse.c +++ b/src/ride/coaster/wooden_wild_mouse.c @@ -501,7 +501,7 @@ static void wooden_wild_mouse_track_left_quarter_turn_1(uint8 rideIndex, uint8 t break; } wooden_a_supports_paint_setup(supportType[direction], 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); - track_paint_util_left_quarter_turn_1_tile_tunnel(height, direction, trackSequence); + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, 0, TUNNEL_0, 0, TUNNEL_0); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 32, 0x20); } diff --git a/src/ride/gentle/car_ride.c b/src/ride/gentle/car_ride.c index e090ca8403..4bd39267f7 100644 --- a/src/ride/gentle/car_ride.c +++ b/src/ride/gentle/car_ride.c @@ -380,7 +380,7 @@ static void paint_car_ride_track_left_quarter_turn_1_tile(uint8 rideIndex, uint8 metal_a_supports_paint_setup(3, 4, 0, height, gTrackColours[SCHEME_SUPPORTS]); - track_paint_util_left_quarter_turn_1_tile_tunnel(height, direction, trackSequence); + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, 0, TUNNEL_0, 0, TUNNEL_0); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_set_general_support_height(height + 32, 0x20); diff --git a/src/ride/gentle/ghost_train.c b/src/ride/gentle/ghost_train.c index 1749f8fa5b..a8a46dc2b5 100644 --- a/src/ride/gentle/ghost_train.c +++ b/src/ride/gentle/ghost_train.c @@ -397,7 +397,7 @@ static void paint_ghost_train_track_left_quarter_turn_3_tiles(uint8 rideIndex, u static void paint_ghost_train_track_left_quarter_turn_1_tile(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { track_paint_util_left_quarter_turn_1_tile_paint(3, height, 0, direction, gTrackColours[SCHEME_TRACK], ghost_train_track_pieces_quarter_turn_1_tile, get_current_rotation()); - track_paint_util_left_quarter_turn_1_tile_tunnel(height, direction, trackSequence); + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, 0, TUNNEL_0, 0, TUNNEL_0); metal_a_supports_paint_setup(3, 4, 0, height, gTrackColours[SCHEME_SUPPORTS]); paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); diff --git a/src/ride/gentle/mini_helicopters.c b/src/ride/gentle/mini_helicopters.c index fcfa620635..cf55d44339 100644 --- a/src/ride/gentle/mini_helicopters.c +++ b/src/ride/gentle/mini_helicopters.c @@ -245,7 +245,7 @@ static void paint_mini_helicopters_track_right_quarter_turn_3_tiles(uint8 rideIn static void paint_mini_helicopters_track_left_quarter_turn_1_tile(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { track_paint_util_left_quarter_turn_1_tile_paint(1, height, 0, direction, gTrackColours[SCHEME_TRACK], trackSpritesSubmarineRideMiniHelicoptersQuarterTurn1Tile, get_current_rotation()); - track_paint_util_left_quarter_turn_1_tile_tunnel(height, direction, trackSequence); + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height, 0, TUNNEL_0, 0, TUNNEL_0); paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_D0, direction), 0xFFFF, 0); paint_util_set_general_support_height(height + 32, 0x20); diff --git a/src/ride/track_paint.c b/src/ride/track_paint.c index 7ce1ad7fcf..6a37742e9e 100644 --- a/src/ride/track_paint.c +++ b/src/ride/track_paint.c @@ -1576,18 +1576,24 @@ void track_paint_util_left_quarter_turn_1_tile_paint(sint8 thickness, sint16 hei } } -void track_paint_util_left_quarter_turn_1_tile_tunnel(sint16 height, uint8 direction, uint8 trackSequence) + +void track_paint_util_right_quarter_turn_1_tile_tunnel(uint8 direction, uint16 baseHeight, sint8 startOffset, uint8 startTunnel, sint8 endOffset, uint8 endTunnel) +{ + track_paint_util_left_quarter_turn_1_tile_tunnel((direction + 3) % 4, baseHeight, endOffset, endTunnel, startOffset, startTunnel); +} + +void track_paint_util_left_quarter_turn_1_tile_tunnel(uint8 direction, uint16 baseHeight, sint8 startOffset, uint8 startTunnel, sint8 endOffset, uint8 endTunnel) { switch (direction) { case 0: - paint_util_push_tunnel_left(height, TUNNEL_0); + paint_util_push_tunnel_left(baseHeight + startOffset, startTunnel); break; case 2: - paint_util_push_tunnel_right(height, TUNNEL_0); + paint_util_push_tunnel_right(baseHeight + endOffset, endTunnel); break; case 3: - paint_util_push_tunnel_right(height, TUNNEL_0); - paint_util_push_tunnel_left(height, TUNNEL_0); + paint_util_push_tunnel_right(baseHeight + startOffset, startTunnel); + paint_util_push_tunnel_left(baseHeight + endOffset, endTunnel); break; } } diff --git a/src/ride/track_paint.h b/src/ride/track_paint.h index 6bba785b19..b98b579733 100644 --- a/src/ride/track_paint.h +++ b/src/ride/track_paint.h @@ -299,7 +299,6 @@ void track_paint_util_left_quarter_turn_3_tiles_paint(sint8 thickness, sint16 he void track_paint_util_left_quarter_turn_3_tiles_paint_with_height_offset(sint8 thickness, sint16 height, int direction, uint8 trackSequence, uint32 colourFlags, const uint32 sprites[4][3], uint8 rotation, sint32 heightOffset); void track_paint_util_left_quarter_turn_3_tiles_tunnel(sint16 height, uint8 tunnelType, uint8 direction, uint8 trackSequence); void track_paint_util_left_quarter_turn_1_tile_paint(sint8 thickness, sint16 height, sint16 boundBoxZOffset, int direction, uint32 colourFlags, const uint32 * sprites, uint8 rotation); -void track_paint_util_left_quarter_turn_1_tile_tunnel(sint16 height, uint8 direction, uint8 trackSequence); void track_paint_util_spinning_tunnel_paint(sint8 thickness, sint16 height, uint8 direction, uint8 rotation); void track_paint_util_onride_photo_small_paint(uint8 direction, sint32 height, rct_map_element *mapElement); void track_paint_util_onride_photo_paint(uint8 direction, sint32 height, rct_map_element *mapElement); @@ -308,6 +307,9 @@ void track_paint_util_right_helix_up_large_quarter_tiles_paint(const sint8 thick void track_paint_util_eighth_to_diag_tiles_paint(const sint8 thickness[4][4], sint16 height, int direction, uint8 trackSequence, uint32 colourFlags, const uint32 sprites[4][4], const rct_xy16 offsets[4][4], const rct_xy16 boundsLengths[4][4], const rct_xyz16 boundsOffsets[4][4], uint8 rotation); void track_paint_util_diag_tiles_paint(sint8 thickness, sint16 height, int direction, uint8 trackSequence, uint32 colourFlags, const uint32 sprites[4], const rct_xy16 offsets[4], const rct_xy16 boundsLengths[4], const rct_xyz16 boundsOffsets[4], uint8 rotation); +void track_paint_util_left_quarter_turn_1_tile_tunnel(uint8 direction, uint16 baseHeight, sint8 startOffset, uint8 startTunnel, sint8 endOffset, uint8 endTunnel); +void track_paint_util_right_quarter_turn_1_tile_tunnel(uint8 direction, uint16 baseHeight, sint8 startOffset, uint8 startTunnel, sint8 endOffset, uint8 endTunnel); + void track_paint_util_left_corkscrew_up_supports(uint8 direction, uint16 height); typedef void (*TRACK_PAINT_FUNCTION)(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element* mapElement); diff --git a/src/ride/water/submarine_ride.c b/src/ride/water/submarine_ride.c index a1421fec27..83f9346a5c 100644 --- a/src/ride/water/submarine_ride.c +++ b/src/ride/water/submarine_ride.c @@ -150,7 +150,7 @@ static void submarine_ride_paint_track_right_quarter_turn_3_tiles(uint8 rideInde static void submarine_ride_paint_track_left_quarter_turn_1_tile(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { track_paint_util_left_quarter_turn_1_tile_paint(1, height - 16, 0, direction, gTrackColours[SCHEME_TRACK], trackSpritesSubmarineRideMiniHelicoptersQuarterTurn1Tile, get_current_rotation()); - track_paint_util_left_quarter_turn_1_tile_tunnel(height - 16, direction, trackSequence); + track_paint_util_left_quarter_turn_1_tile_tunnel(direction, height - 16, 0, TUNNEL_0, 0, TUNNEL_0); paint_util_set_segment_support_height(paint_util_rotate_segments(SEGMENT_B8 | SEGMENT_C8 | SEGMENT_C4 | SEGMENT_D0, direction), 0xFFFF, 0); paint_util_set_general_support_height(height + 16, 0x20); diff --git a/test/testpaint/TestTrack.cpp b/test/testpaint/TestTrack.cpp index 7933561ae0..d240a92b35 100644 --- a/test/testpaint/TestTrack.cpp +++ b/test/testpaint/TestTrack.cpp @@ -647,6 +647,7 @@ static uint8 TestTrackElementSideTunnels(uint8 rideType, uint8 trackType, uint8 if (!SideTunnelCall::TunnelCallsLineUp(tileTunnelCalls)) { + // TODO: Check that new pattern uses the same tunnel group (round, big round, etc.) *error += String::Format( "Original tunnel calls don\'t line up. Skipping tunnel validation [trackSequence:%d].\n", trackSequence