From 7c61b960b7afde981796dbe7259e1f19e9ad4570 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 3 Oct 2016 18:53:41 +0100 Subject: [PATCH 01/11] Setup paint function for wooden wild mouse coaster --- src/ride/coaster/wooden_wild_mouse.c | 17 +++++++++++++++++ src/ride/track_data.c | 2 +- src/ride/track_paint.h | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/ride/coaster/wooden_wild_mouse.c b/src/ride/coaster/wooden_wild_mouse.c index 846fd9695d..32fba66998 100644 --- a/src/ride/coaster/wooden_wild_mouse.c +++ b/src/ride/coaster/wooden_wild_mouse.c @@ -13,3 +13,20 @@ * A full copy of the GNU General Public License can be found in licence.txt *****************************************************************************/ #pragma endregion + +#include "../../drawing/drawing.h" +#include "../../interface/viewport.h" +#include "../../paint/map_element/map_element.h" +#include "../../paint/paint.h" +#include "../../paint/supports.h" +#include "../../sprites.h" +#include "../../world/map.h" +#include "../../world/sprite.h" +#include "../ride_data.h" +#include "../track_data.h" +#include "../track_paint.h" + +TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, int direction) +{ + return NULL; +} diff --git a/src/ride/track_data.c b/src/ride/track_data.c index 1bad5010cd..84a4b539ea 100644 --- a/src/ride/track_data.c +++ b/src/ride/track_data.c @@ -6250,7 +6250,7 @@ const TRACK_PAINT_FUNCTION_GETTER RideTypeTrackPaintFunctions[91] = { get_track_paint_function_monorail, // RIDE_TYPE_MONORAIL 0, // RIDE_TYPE_MINI_SUSPENDED_COASTER get_track_paint_function_boat_ride, // RIDE_TYPE_BOAT_RIDE - 0, // RIDE_TYPE_WOODEN_WILD_MOUSE + get_track_paint_function_wooden_wild_mouse, // RIDE_TYPE_WOODEN_WILD_MOUSE 0, // RIDE_TYPE_STEEPLECHASE get_track_paint_function_car_ride, // RIDE_TYPE_CAR_RIDE get_track_paint_function_launched_freefall, // RIDE_TYPE_LAUNCHED_FREEFALL diff --git a/src/ride/track_paint.h b/src/ride/track_paint.h index 740c5b2f94..0274a67286 100644 --- a/src/ride/track_paint.h +++ b/src/ride/track_paint.h @@ -257,6 +257,7 @@ typedef TRACK_PAINT_FUNCTION (*TRACK_PAINT_FUNCTION_GETTER)(int trackType, int d TRACK_PAINT_FUNCTION get_track_paint_function_junior_rc(int trackType, int direction); TRACK_PAINT_FUNCTION get_track_paint_function_monorail(int trackType, int direction); TRACK_PAINT_FUNCTION get_track_paint_function_boat_ride(int trackType, int direction); +TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, int direction); TRACK_PAINT_FUNCTION get_track_paint_function_car_ride(int trackType, int direction); TRACK_PAINT_FUNCTION get_track_paint_function_launched_freefall(int trackType, int direction); TRACK_PAINT_FUNCTION get_track_paint_function_observation_tower(int trackType, int direction); From 1bb09d6c6215ff3af132905f0379ed1ed08af882 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 3 Oct 2016 18:53:53 +0100 Subject: [PATCH 02/11] Setup debug settings --- openrct2.vcxproj.user | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openrct2.vcxproj.user b/openrct2.vcxproj.user index b782b153c4..2417416108 100644 --- a/openrct2.vcxproj.user +++ b/openrct2.vcxproj.user @@ -7,8 +7,7 @@ $(TargetDir)\openrct2.exe WindowsLocalDebugger $(TargetDir) - - + "C:\Users\Ted\Documents\OpenRCT2\save\paint_wooden_wild_mouse.sv6" $(TargetDir) From 041b286c8be6ba6c87bf3768e131a383017be7e5 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 3 Oct 2016 19:26:50 +0100 Subject: [PATCH 03/11] Implement flat --- src/ride/coaster/wooden_wild_mouse.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/ride/coaster/wooden_wild_mouse.c b/src/ride/coaster/wooden_wild_mouse.c index 32fba66998..18bf8d8436 100644 --- a/src/ride/coaster/wooden_wild_mouse.c +++ b/src/ride/coaster/wooden_wild_mouse.c @@ -26,7 +26,34 @@ #include "../track_data.h" #include "../track_paint.h" +enum { + SPR_WOODEN_WILD_MOUSE_FLAT_SW_NE = 28535, + SPR_WOODEN_WILD_MOUSE_FLAT_NW_SE = 28536, +}; + +static void wooden_wild_mouse_track_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + static 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] | gTrackColours[SCHEME_TRACK]; + sub_98196C_rotated(direction, imageId, 0, 6, 32, 20, 1, height); + wooden_a_supports_paint_setup(direction & 1, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); + paint_util_push_tunnel_rotated(direction, height, TUNNEL_0); + paint_util_set_segment_support_height(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(paint_util_rotate_segments(SEGMENT_C4 | SEGMENT_CC | SEGMENT_D0, direction), 0xFFFF, 0); + paint_util_set_general_support_height(height + 32, 0x20); +} + TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, int direction) { + switch (trackType) { + case TRACK_ELEM_FLAT: + return wooden_wild_mouse_track_flat; + } return NULL; } From e18233d71e22b1017caadae703de292e80e56816 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 3 Oct 2016 19:35:26 +0100 Subject: [PATCH 04/11] Implement station --- src/ride/coaster/wooden_wild_mouse.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/ride/coaster/wooden_wild_mouse.c b/src/ride/coaster/wooden_wild_mouse.c index 18bf8d8436..34b6ce1ba3 100644 --- a/src/ride/coaster/wooden_wild_mouse.c +++ b/src/ride/coaster/wooden_wild_mouse.c @@ -49,11 +49,33 @@ static void wooden_wild_mouse_track_flat(uint8 rideIndex, uint8 trackSequence, u paint_util_set_general_support_height(height + 32, 0x20); } +static void wooden_wild_mouse_track_station(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + static 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(direction, imageIds[direction][1] | gTrackColours[SCHEME_MISC], 0, 0, 32, 28, 1, height - 2, 0, 2, height); + sub_98199C_rotated(direction, imageIds[direction][0] | gTrackColours[SCHEME_TRACK], 0, 6, 32, 20, 1, height, 0, 0, height); + wooden_a_supports_paint_setup(direction & 1, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); + track_paint_util_draw_station(rideIndex, trackSequence, direction, height, 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); +} + TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, int direction) { switch (trackType) { case TRACK_ELEM_FLAT: return wooden_wild_mouse_track_flat; + case TRACK_ELEM_END_STATION: + case TRACK_ELEM_BEGIN_STATION: + case TRACK_ELEM_MIDDLE_STATION: + return wooden_wild_mouse_track_station; } return NULL; } From fc8bd70f93eb0aecfabe11d7bd7a530d716daef8 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 3 Oct 2016 21:39:37 +0100 Subject: [PATCH 05/11] Implement 25 and 60 deg up --- src/ride/coaster/wooden_wild_mouse.c | 97 ++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/src/ride/coaster/wooden_wild_mouse.c b/src/ride/coaster/wooden_wild_mouse.c index 34b6ce1ba3..375b3d90cf 100644 --- a/src/ride/coaster/wooden_wild_mouse.c +++ b/src/ride/coaster/wooden_wild_mouse.c @@ -29,6 +29,29 @@ enum { SPR_WOODEN_WILD_MOUSE_FLAT_SW_NE = 28535, SPR_WOODEN_WILD_MOUSE_FLAT_NW_SE = 28536, + SPR_WOODEN_WILD_MOUSE_25_DEG_SW_NE = 28537, + SPR_WOODEN_WILD_MOUSE_60_DEG_SW_NE = 28538, + + SPR_WOODEN_WILD_MOUSE_25_DEG_NE_SW = 28541, + SPR_WOODEN_WILD_MOUSE_60_DEG_NE_SW = 28542, + + SPR_WOODEN_WILD_MOUSE_25_DEG_NW_SE = 28549, + SPR_WOODEN_WILD_MOUSE_60_DEG_NW_SE = 28550, + SPR_WOODEN_WILD_MOUSE_25_DEG_SE_NW = 28551, + SPR_WOODEN_WILD_MOUSE_60_DEG_SE_NW = 28552, + + SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SW_NE = 28577, + SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_SW_NE = 28578, + + SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_NE_SW = 28581, + SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_NE_SW = 28582, + + SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_NW_SE = 28589, + SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_NW_SE = 28590, + + SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_SE_NW = 28592, + + SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SE_NW = 28620, }; static void wooden_wild_mouse_track_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) @@ -67,6 +90,76 @@ static void wooden_wild_mouse_track_station(uint8 rideIndex, uint8 trackSequence paint_util_set_general_support_height(height + 32, 0x20); } +static void wooden_wild_mouse_track_25_deg_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + static const uint32 imageIds[2][4] = { + { + { SPR_WOODEN_WILD_MOUSE_25_DEG_SW_NE }, + { SPR_WOODEN_WILD_MOUSE_25_DEG_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_25_DEG_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_25_DEG_SE_NW }, + }, + { + { SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SW_NE }, + { SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SE_NW }, + }, + }; + + uint8 isChained = track_element_is_lift_hill(mapElement) ? 1 : 0; + uint32 imageId = imageIds[isChained][direction] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 2, 32, 25, 1, height, 0, 3, height); + + wooden_a_supports_paint_setup(direction & 1, 9 + direction, height, gTrackColours[SCHEME_SUPPORTS], NULL); + + if (direction == 0 || direction == 3) { + paint_util_push_tunnel_rotated(direction, height - 8, TUNNEL_1); + } else { + paint_util_push_tunnel_rotated(direction, height + 8, TUNNEL_2); + } + + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 56, 0x20); +} + +static void wooden_wild_mouse_track_60_deg_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + static const uint32 imageIds[2][4] = { + { + { SPR_WOODEN_WILD_MOUSE_60_DEG_SW_NE }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_SE_NW }, + }, + { + { SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_SW_NE }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_SE_NW }, + }, + }; + + uint8 isChained = track_element_is_lift_hill(mapElement) ? 1 : 0; + uint32 imageId = imageIds[isChained][direction] | gTrackColours[SCHEME_TRACK]; + if (direction == 0 || direction == 3) { + sub_98197C_rotated(direction, imageId, 0, 2, 32, 25, 1, height, 0, 3, height); + } else { + sub_98197C_rotated(direction, imageId, 0, 6, 2, 24, 93, height, 28, 4, height - 16); + } + + wooden_a_supports_paint_setup(direction & 1, 21 + direction, height, gTrackColours[SCHEME_SUPPORTS], NULL); + + if (direction == 0 || direction == 3) { + paint_util_push_tunnel_rotated(direction, height - 8, TUNNEL_1); + } else { + paint_util_push_tunnel_rotated(direction, height + 56, TUNNEL_2); + } + + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 104, 0x20); +} + TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, int direction) { switch (trackType) { @@ -76,6 +169,10 @@ TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, i case TRACK_ELEM_BEGIN_STATION: case TRACK_ELEM_MIDDLE_STATION: return wooden_wild_mouse_track_station; + case TRACK_ELEM_25_DEG_UP: + return wooden_wild_mouse_track_25_deg_up; + case TRACK_ELEM_60_DEG_UP: + return wooden_wild_mouse_track_60_deg_up; } return NULL; } From 3c43bb55228aa61f1b1b7e8c53816f7ecdd689f9 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 3 Oct 2016 22:35:06 +0100 Subject: [PATCH 06/11] Implement most of the slope pieces --- src/ride/coaster/wooden_wild_mouse.c | 246 ++++++++++++++++++++++++++- 1 file changed, 239 insertions(+), 7 deletions(-) diff --git a/src/ride/coaster/wooden_wild_mouse.c b/src/ride/coaster/wooden_wild_mouse.c index 375b3d90cf..2eb24b8c8a 100644 --- a/src/ride/coaster/wooden_wild_mouse.c +++ b/src/ride/coaster/wooden_wild_mouse.c @@ -31,27 +31,61 @@ enum { SPR_WOODEN_WILD_MOUSE_FLAT_NW_SE = 28536, SPR_WOODEN_WILD_MOUSE_25_DEG_SW_NE = 28537, SPR_WOODEN_WILD_MOUSE_60_DEG_SW_NE = 28538, - + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_SW_NE = 28539, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_SW_NE = 28540, SPR_WOODEN_WILD_MOUSE_25_DEG_NE_SW = 28541, SPR_WOODEN_WILD_MOUSE_60_DEG_NE_SW = 28542, - + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_NE_SW = 28543, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_FRONT_NE_SW = 28544, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_NE_SW = 28545, + SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_FRONT_NE_SW = 28546, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_SW_NE = 28547, + SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_SW_NE = 28548, SPR_WOODEN_WILD_MOUSE_25_DEG_NW_SE = 28549, SPR_WOODEN_WILD_MOUSE_60_DEG_NW_SE = 28550, SPR_WOODEN_WILD_MOUSE_25_DEG_SE_NW = 28551, SPR_WOODEN_WILD_MOUSE_60_DEG_SE_NW = 28552, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_NW_SE = 28553, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_FRONT_NW_SE = 28554, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_SE_NW = 28555, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_SE_NW = 28556, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_SE_NW = 28557, + SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_SE_NW = 28558, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_NW_SE = 28559, + SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_FRONT_NW_SE = 28560, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_NE_SW = 28561, + SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_NE_SW = 28562, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_NW_SE = 28563, + SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_NW_SE = 28564, SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SW_NE = 28577, SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_SW_NE = 28578, - + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_SW_NE = 28579, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_SW_NE = 28580, SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_NE_SW = 28581, SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_NE_SW = 28582, - + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_NE_SW = 28583, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_FRONT_NE_SW = 28584, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_NE_SW = 28585, + SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_FRONT_NE_SW = 28586, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_SW_NE = 28587, + SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_SW_NE = 28588, SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_NW_SE = 28589, SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_NW_SE = 28590, - + SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SE_NW = 28591, SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_SE_NW = 28592, - - SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SE_NW = 28620, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_NW_SE = 28593, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_FRONT_NW_SE = 28594, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_SE_NW = 28595, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_SE_NW = 28596, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_SE_NW = 28597, + SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_SE_NW = 28598, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_NW_SE = 28599, + SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_FRONT_NW_SE = 28600, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_NE_SW = 28601, + SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_NE_SW = 28602, + SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_NW_SE = 28603, + SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_NW_SE = 28604, }; static void wooden_wild_mouse_track_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) @@ -160,6 +194,184 @@ static void wooden_wild_mouse_track_60_deg_up(uint8 rideIndex, uint8 trackSequen paint_util_set_general_support_height(height + 104, 0x20); } +static void wooden_wild_mouse_track_flat_to_25_deg_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + static const uint32 imageIds[2][4] = { + { + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_SW_NE }, + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_SE_NW }, + }, + { + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_SW_NE }, + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_SE_NW }, + }, + }; + + uint8 isChained = track_element_is_lift_hill(mapElement) ? 1 : 0; + uint32 imageId = imageIds[isChained][direction] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 2, 32, 25, 1, height, 0, 3, height); + + wooden_a_supports_paint_setup(direction & 1, 1 + direction, height, gTrackColours[SCHEME_SUPPORTS], NULL); + + if (direction == 0 || direction == 3) { + paint_util_push_tunnel_rotated(direction, height, TUNNEL_0); + } else { + paint_util_push_tunnel_rotated(direction, height, TUNNEL_2); + } + + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 48, 0x20); +} + +static void wooden_wild_mouse_track_25_deg_up_to_60_deg_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + static const uint32 imageIds[2][4][2] = { + { + { SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_SW_NE, 0 }, + { SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_NW_SE, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_FRONT_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_NE_SW, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_FRONT_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_SE_NW, 0 }, + }, + { + { SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_SW_NE, 0 }, + { SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_NW_SE, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_FRONT_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_NE_SW, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_FRONT_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_SE_NW, 0 }, + }, + }; + + uint8 isChained = track_element_is_lift_hill(mapElement) ? 1 : 0; + uint32 imageId; + if (direction == 0 || direction == 3) { + imageId = imageIds[isChained][direction][0] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 2, 32, 25, 1, height, 0, 3, height); + } else { + imageId = imageIds[isChained][direction][0] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 6, 2, 24, 43, height, 28, 4, height + 2); + imageId = imageIds[isChained][direction][1] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 6, 32, 2, 43, height, 0, 4, height); + } + + wooden_a_supports_paint_setup(direction & 1, 13 + direction, height, gTrackColours[SCHEME_SUPPORTS], NULL); + + if (direction == 0 || direction == 3) { + paint_util_push_tunnel_rotated(direction, height - 8, TUNNEL_1); + } else { + paint_util_push_tunnel_rotated(direction, height + 24, TUNNEL_2); + } + + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 72, 0x20); +} + +static void wooden_wild_mouse_track_60_deg_up_to_25_deg_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + static const uint32 imageIds[2][4][2] = { + { + { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_SW_NE, 0 }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_FRONT_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_FRONT_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_SE_NW, 0 }, + }, + { + { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_SW_NE, 0 }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_FRONT_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_FRONT_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_SE_NW, 0 }, + }, + }; + + uint8 isChained = track_element_is_lift_hill(mapElement) ? 1 : 0; + uint32 imageId; + if (direction == 0 || direction == 3) { + imageId = imageIds[isChained][direction][0] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 2, 32, 25, 1, height, 0, 3, height); + } else { + imageId = imageIds[isChained][direction][0] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 6, 2, 24, 43, height, 28, 4, height + 2); + imageId = imageIds[isChained][direction][1] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 6, 32, 2, 43, height, 0, 4, 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_1); + } else { + paint_util_push_tunnel_rotated(direction, height + 24, TUNNEL_2); + } + + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 72, 0x20); +} + +static void wooden_wild_mouse_track_25_deg_up_to_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + static 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(mapElement) ? 1 : 0; + uint32 imageId = imageIds[isChained][direction] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 2, 32, 25, 1, height, 0, 3, height); + + wooden_a_supports_paint_setup(direction & 1, 5 + direction, height, gTrackColours[SCHEME_SUPPORTS], NULL); + + if (direction == 0 || direction == 3) { + paint_util_push_tunnel_rotated(direction, height - 8, TUNNEL_0); + } else { + paint_util_push_tunnel_rotated(direction, height + 8, TUNNEL_12); + } + + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 40, 0x20); +} + +static void wooden_wild_mouse_track_25_deg_down(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + wooden_wild_mouse_track_25_deg_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement); +} + +static void wooden_wild_mouse_track_60_deg_down(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + wooden_wild_mouse_track_60_deg_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement); +} + +static void wooden_wild_mouse_track_flat_to_25_deg_down(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + wooden_wild_mouse_track_25_deg_up_to_flat(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement); +} + +static void wooden_wild_mouse_track_25_deg_down_to_60_deg_down(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + wooden_wild_mouse_track_60_deg_up_to_25_deg_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement); +} + +static void wooden_wild_mouse_track_60_deg_down_to_25_deg_down(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + wooden_wild_mouse_track_25_deg_up_to_60_deg_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement); +} + +static void wooden_wild_mouse_track_25_deg_down_to_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + wooden_wild_mouse_track_flat_to_25_deg_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement); +} + TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, int direction) { switch (trackType) { @@ -173,6 +385,26 @@ TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, i return wooden_wild_mouse_track_25_deg_up; case TRACK_ELEM_60_DEG_UP: return wooden_wild_mouse_track_60_deg_up; + case TRACK_ELEM_FLAT_TO_25_DEG_UP: + return wooden_wild_mouse_track_flat_to_25_deg_up; + case TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP: + return wooden_wild_mouse_track_25_deg_up_to_60_deg_up; + case TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP: + return wooden_wild_mouse_track_60_deg_up_to_25_deg_up; + case TRACK_ELEM_25_DEG_UP_TO_FLAT: + return wooden_wild_mouse_track_25_deg_up_to_flat; + case TRACK_ELEM_25_DEG_DOWN: + return wooden_wild_mouse_track_25_deg_down; + case TRACK_ELEM_60_DEG_DOWN: + return wooden_wild_mouse_track_60_deg_down; + case TRACK_ELEM_FLAT_TO_25_DEG_DOWN: + return wooden_wild_mouse_track_flat_to_25_deg_down; + case TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN: + return wooden_wild_mouse_track_25_deg_down_to_60_deg_down; + case TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN: + return wooden_wild_mouse_track_60_deg_down_to_25_deg_down; + case TRACK_ELEM_25_DEG_DOWN_TO_FLAT: + return wooden_wild_mouse_track_25_deg_down_to_flat; } return NULL; } From 475a142bf7313defce8d371ef22bb906aa8ba549 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 3 Oct 2016 23:02:07 +0100 Subject: [PATCH 07/11] Implement steep to flat pieces --- src/ride/coaster/wooden_wild_mouse.c | 176 +++++++++++++++++++++++---- 1 file changed, 152 insertions(+), 24 deletions(-) diff --git a/src/ride/coaster/wooden_wild_mouse.c b/src/ride/coaster/wooden_wild_mouse.c index 2eb24b8c8a..5616d48b01 100644 --- a/src/ride/coaster/wooden_wild_mouse.c +++ b/src/ride/coaster/wooden_wild_mouse.c @@ -38,9 +38,9 @@ enum { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_NE_SW = 28543, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_FRONT_NE_SW = 28544, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_NE_SW = 28545, - SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_FRONT_NE_SW = 28546, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_FRONT_NE_SW = 28546, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_SW_NE = 28547, - SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_SW_NE = 28548, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_SW_NE = 28548, SPR_WOODEN_WILD_MOUSE_25_DEG_NW_SE = 28549, SPR_WOODEN_WILD_MOUSE_60_DEG_NW_SE = 28550, SPR_WOODEN_WILD_MOUSE_25_DEG_SE_NW = 28551, @@ -50,14 +50,25 @@ enum { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_SE_NW = 28555, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_SE_NW = 28556, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_SE_NW = 28557, - SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_SE_NW = 28558, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_SE_NW = 28558, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_NW_SE = 28559, - SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_FRONT_NW_SE = 28560, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_FRONT_NW_SE = 28560, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_NE_SW = 28561, - SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_NE_SW = 28562, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_NE_SW = 28562, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_NW_SE = 28563, - SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_NW_SE = 28564, - + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_NW_SE = 28564, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_SW_NE = 28565, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_NW_SE = 28566, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_NE_SW = 28567, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_SE_NW = 28568, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_FRONT_NW_SE = 28569, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_FRONT_NE_SW = 28570, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_SW_NE = 28571, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_NW_SE = 28572, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_NE_SW = 28573, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_SE_NW = 28574, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_FRONT_NW_SE = 28575, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_FRONT_NE_SW = 28576, SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SW_NE = 28577, SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_SW_NE = 28578, SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_SW_NE = 28579, @@ -67,9 +78,9 @@ enum { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_NE_SW = 28583, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_FRONT_NE_SW = 28584, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_NE_SW = 28585, - SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_FRONT_NE_SW = 28586, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_FRONT_NE_SW = 28586, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_SW_NE = 28587, - SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_SW_NE = 28588, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_SW_NE = 28588, SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_NW_SE = 28589, SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_NW_SE = 28590, SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SE_NW = 28591, @@ -79,13 +90,25 @@ enum { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_SE_NW = 28595, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_SE_NW = 28596, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_SE_NW = 28597, - SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_SE_NW = 28598, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_SE_NW = 28598, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_FLAT_CHAIN_NW_SE = 28599, - SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_FRONT_NW_SE = 28600, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_FRONT_NW_SE = 28600, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_NE_SW = 28601, - SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_NE_SW = 28602, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_NE_SW = 28602, SPR_WOODEN_WILD_MOUSE_25_DEG_TO_60_DEG_CHAIN_NW_SE = 28603, - SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_NW_SE = 28604, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_25_DEG_CHAIN_NW_SE = 28604, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_SW_NE = 28605, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_NW_SE = 28606, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_NE_SW = 28607, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_SE_NW = 28608, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_FRONT_NW_SE = 28609, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_FRONT_NE_SW = 28610, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_SW_NE = 28611, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_NW_SE = 28612, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_NE_SW = 28613, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_SE_NW = 28614, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_FRONT_NW_SE = 28615, + SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_FRONT_NE_SW = 28616, }; static void wooden_wild_mouse_track_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) @@ -268,20 +291,20 @@ static void wooden_wild_mouse_track_25_deg_up_to_60_deg_up(uint8 rideIndex, uint paint_util_set_general_support_height(height + 72, 0x20); } -static void wooden_wild_mouse_track_60_deg_up_to_25_deg_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +static void wooden_wild_mouse_track_60_DEG_TO_25_DEG_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { static const uint32 imageIds[2][4][2] = { { - { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_SW_NE, 0 }, - { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_FRONT_NW_SE }, - { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_FRONT_NE_SW }, - { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_SE_NW, 0 }, + { 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_UP_TO_25_DEG_CHAIN_SW_NE, 0 }, - { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_FRONT_NW_SE }, - { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_FRONT_NE_SW }, - { SPR_WOODEN_WILD_MOUSE_60_DEG_UP_TO_25_DEG_CHAIN_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 }, }, }; @@ -359,7 +382,7 @@ static void wooden_wild_mouse_track_flat_to_25_deg_down(uint8 rideIndex, uint8 t static void wooden_wild_mouse_track_25_deg_down_to_60_deg_down(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { - wooden_wild_mouse_track_60_deg_up_to_25_deg_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement); + wooden_wild_mouse_track_60_DEG_TO_25_DEG_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement); } static void wooden_wild_mouse_track_60_deg_down_to_25_deg_down(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) @@ -372,6 +395,98 @@ static void wooden_wild_mouse_track_25_deg_down_to_flat(uint8 rideIndex, uint8 t wooden_wild_mouse_track_flat_to_25_deg_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement); } +static void wooden_wild_mouse_track_flat_to_60_deg_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + static const uint32 imageIds[2][4][2] = { + { + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_SW_NE, 0 }, + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_NW_SE, SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_FRONT_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_NE_SW, SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_FRONT_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_SE_NW, 0 }, + }, + { + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_SW_NE, 0 }, + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_NW_SE, SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_FRONT_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_NE_SW, SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_FRONT_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_FLAT_TO_60_DEG_CHAIN_SE_NW, 0 }, + }, + }; + + uint8 isChained = track_element_is_lift_hill(mapElement) ? 1 : 0; + uint32 imageId; + if (direction == 0 || direction == 3) { + imageId = imageIds[isChained][direction][0] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 2, 32, 25, 1, height, 0, 3, height); + } else { + imageId = imageIds[isChained][direction][0] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 6, 2, 24, 43, height, 28, 4, height + 2); + imageId = imageIds[isChained][direction][1] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 6, 32, 2, 43, height, 0, 4, height); + } + + wooden_a_supports_paint_setup(direction & 1, 29 + direction, height, gTrackColours[SCHEME_SUPPORTS], NULL); + + if (direction == 0 || direction == 3) { + paint_util_push_tunnel_rotated(direction, height, TUNNEL_0); + } else { + paint_util_push_tunnel_rotated(direction, height + 24, TUNNEL_2); + } + + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 64, 0x20); +} + +static void wooden_wild_mouse_track_60_deg_up_to_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + static const uint32 imageIds[2][4][2] = { + { + { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_SW_NE, 0 }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_FRONT_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_FRONT_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_SE_NW, 0 }, + }, + { + { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_SW_NE, 0 }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_NW_SE, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_FRONT_NW_SE }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_NE_SW, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_FRONT_NE_SW }, + { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_SE_NW, 0 }, + }, + }; + + uint8 isChained = track_element_is_lift_hill(mapElement) ? 1 : 0; + uint32 imageId; + if (direction == 0 || direction == 3) { + imageId = imageIds[isChained][direction][0] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 2, 32, 25, 1, height, 0, 3, height); + } else { + imageId = imageIds[isChained][direction][0] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 6, 2, 24, 43, height, 28, 4, height + 2); + imageId = imageIds[isChained][direction][1] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 6, 32, 2, 43, height, 0, 4, height); + } + + wooden_a_supports_paint_setup(direction & 1, 33 + direction, height, gTrackColours[SCHEME_SUPPORTS], NULL); + + if (direction == 0 || direction == 3) { + paint_util_push_tunnel_rotated(direction, height - 8, TUNNEL_1); + } else { + paint_util_push_tunnel_rotated(direction, height + 24, TUNNEL_0); + } + + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 72, 0x20); +} + +static void wooden_wild_mouse_track_flat_to_60_deg_down(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + wooden_wild_mouse_track_60_deg_up_to_flat(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement); +} + +static void wooden_wild_mouse_track_60_deg_down_to_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + wooden_wild_mouse_track_flat_to_60_deg_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement); +} + TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, int direction) { switch (trackType) { @@ -390,7 +505,7 @@ TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, i case TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP: return wooden_wild_mouse_track_25_deg_up_to_60_deg_up; case TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP: - return wooden_wild_mouse_track_60_deg_up_to_25_deg_up; + return wooden_wild_mouse_track_60_DEG_TO_25_DEG_up; case TRACK_ELEM_25_DEG_UP_TO_FLAT: return wooden_wild_mouse_track_25_deg_up_to_flat; case TRACK_ELEM_25_DEG_DOWN: @@ -405,6 +520,19 @@ TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, i return wooden_wild_mouse_track_60_deg_down_to_25_deg_down; case TRACK_ELEM_25_DEG_DOWN_TO_FLAT: return wooden_wild_mouse_track_25_deg_down_to_flat; + case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES: + case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES: + case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE: + case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE: + return NULL; + case TRACK_ELEM_FLAT_TO_60_DEG_UP: + return wooden_wild_mouse_track_flat_to_60_deg_up; + case TRACK_ELEM_60_DEG_UP_TO_FLAT: + return wooden_wild_mouse_track_60_deg_up_to_flat; + case TRACK_ELEM_FLAT_TO_60_DEG_DOWN: + return wooden_wild_mouse_track_flat_to_60_deg_down; + case TRACK_ELEM_60_DEG_DOWN_TO_FLAT: + return wooden_wild_mouse_track_60_deg_down_to_flat; } return NULL; } From c6a1ecab91deb3e11f5cd5a4e66f071a201abcdb Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 3 Oct 2016 23:50:48 +0100 Subject: [PATCH 08/11] Implement quarter turn 1 --- src/ride/coaster/wooden_wild_mouse.c | 46 ++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/ride/coaster/wooden_wild_mouse.c b/src/ride/coaster/wooden_wild_mouse.c index 5616d48b01..bbf1b70f1e 100644 --- a/src/ride/coaster/wooden_wild_mouse.c +++ b/src/ride/coaster/wooden_wild_mouse.c @@ -109,6 +109,10 @@ enum { SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_SE_NW = 28614, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_FRONT_NW_SE = 28615, SPR_WOODEN_WILD_MOUSE_60_DEG_TO_FLAT_CHAIN_FRONT_NE_SW = 28616, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_1_SW_NE = 28617, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_1_NW_SE = 28618, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_1_NE_SW = 28619, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_1_SE_NW = 28620, }; static void wooden_wild_mouse_track_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) @@ -395,6 +399,42 @@ static void wooden_wild_mouse_track_25_deg_down_to_flat(uint8 rideIndex, uint8 t wooden_wild_mouse_track_flat_to_25_deg_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement); } +static void wooden_wild_mouse_track_left_quarter_turn_1(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + static const uint32 imageIds[4] = { + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_1_SW_NE, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_1_NW_SE, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_1_NE_SW, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_1_SE_NW, + }; + static uint8 supportType[] = { 5, 2, 3, 4 }; + + uint32 imageId = imageIds[direction] | gTrackColours[SCHEME_TRACK]; + switch (direction) { + case 0: + sub_98197C(imageId, 6, 0, 26, 24, 1, height, 6, 2, height, get_current_rotation()); + break; + case 1: + sub_98196C(imageId, 0, 0, 26, 26, 1, height, get_current_rotation()); + break; + case 2: + sub_98197C(imageId, 0, 6, 24, 26, 1, height, 2, 6, height, get_current_rotation()); + break; + case 3: + sub_98196C(imageId, 6, 6, 24, 24, 1, height, get_current_rotation()); + 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); + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 32, 0x20); +} + +static void wooden_wild_mouse_track_right_quarter_turn_1(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + wooden_wild_mouse_track_left_quarter_turn_1(rideIndex, trackSequence, (direction - 1) & 3, height, mapElement); +} + static void wooden_wild_mouse_track_flat_to_60_deg_up(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { static const uint32 imageIds[2][4][2] = { @@ -522,9 +562,11 @@ TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, i return wooden_wild_mouse_track_25_deg_down_to_flat; case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES: case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES: - case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE: - case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE: return NULL; + case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE: + return wooden_wild_mouse_track_left_quarter_turn_1; + case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE: + return wooden_wild_mouse_track_right_quarter_turn_1; case TRACK_ELEM_FLAT_TO_60_DEG_UP: return wooden_wild_mouse_track_flat_to_60_deg_up; case TRACK_ELEM_60_DEG_UP_TO_FLAT: From ef81919f02f76aaad41bdcd922884033dbcb8f8b Mon Sep 17 00:00:00 2001 From: Ted John Date: Tue, 4 Oct 2016 00:10:50 +0100 Subject: [PATCH 09/11] Implement quarter turn 3 --- src/ride/coaster/wooden_wild_mouse.c | 67 +++++++++++++++++++++++++++- src/ride/track_paint.c | 16 +++++++ src/ride/track_paint.h | 1 + 3 files changed, 83 insertions(+), 1 deletion(-) diff --git a/src/ride/coaster/wooden_wild_mouse.c b/src/ride/coaster/wooden_wild_mouse.c index bbf1b70f1e..f73051e77a 100644 --- a/src/ride/coaster/wooden_wild_mouse.c +++ b/src/ride/coaster/wooden_wild_mouse.c @@ -113,6 +113,18 @@ enum { SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_1_NW_SE = 28618, SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_1_NE_SW = 28619, SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_1_SE_NW = 28620, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_SW_SE_PART_0 = 28621, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_SW_SE_PART_1 = 28622, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_SW_SE_PART_2 = 28623, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_NW_SW_PART_0 = 28624, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_NW_SW_PART_1 = 28625, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_NW_SW_PART_2 = 28626, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_NE_NW_PART_0 = 28627, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_NE_NW_PART_1 = 28628, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_NE_NW_PART_2 = 28629, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_SE_NE_PART_0 = 28630, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_SE_NE_PART_1 = 28631, + SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_SE_NE_PART_2 = 28632, }; static void wooden_wild_mouse_track_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) @@ -399,6 +411,58 @@ static void wooden_wild_mouse_track_25_deg_down_to_flat(uint8 rideIndex, uint8 t wooden_wild_mouse_track_flat_to_25_deg_up(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement); } +static void wooden_wild_mouse_track_right_quarter_turn_3(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + static const sprite_bb imageIds[4][3] = { + { + { SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_SW_SE_PART_0, { 0, 6, 0 }, { 0, 0, 0 }, { 32, 20, 1 } }, + { SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_SW_SE_PART_1, { 16, 16, 0 }, { 0, 0, 0 }, { 16, 16, 1 } }, + { SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_SW_SE_PART_2, { 6, 0, 0 }, { 0, 0, 0 }, { 20, 32, 1 } }, + }, + { + { SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_NW_SW_PART_0, { 6, 0, 0 }, { 0, 0, 0 }, { 20, 32, 1 } }, + { SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_NW_SW_PART_1, { 16, 0, 0 }, { 0, 0, 0 }, { 16, 16, 1 } }, + { SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_NW_SW_PART_2, { 0, 6, 0 }, { 0, 0, 0 }, { 32, 20, 1 } }, + }, + { + { SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_NE_NW_PART_0, { 0, 6, 0 }, { 0, 0, 0 }, { 32, 20, 1 } }, + { SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_NE_NW_PART_1, { 0, 0, 0 }, { 0, 0, 0 }, { 16, 16, 1 } }, + { SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_NE_NW_PART_2, { 6, 0, 0 }, { 0, 0, 0 }, { 20, 32, 1 } }, + }, + { + { SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_SE_NE_PART_0, { 6, 0, 0 }, { 0, 0, 0 }, { 20, 32, 1 } }, + { SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_SE_NE_PART_1, { 0, 16, 0 }, { 0, 0, 0 }, { 16, 16, 1 } }, + { SPR_WOODEN_WILD_MOUSE_QUARTER_TURN_3_SE_NE_PART_2, { 0, 6, 0 }, { 0, 0, 0 }, { 32, 20, 1 } }, + } + }; + static uint8 supportType[] = { 4, 5, 2, 3 }; + + track_paint_util_right_quarter_turn_3_tiles_paint_4(height, direction, get_current_rotation(), trackSequence, gTrackColours[SCHEME_TRACK], imageIds); + track_paint_util_right_quarter_turn_3_tiles_tunnel(height, direction, trackSequence, TUNNEL_0); + + switch (trackSequence) { + case 0: + case 3: + wooden_a_supports_paint_setup(supportType[direction], 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); + break; + } + + int blockedSegments = 0; + switch (trackSequence) { + case 0: blockedSegments = SEGMENTS_ALL; break; + case 2: blockedSegments = SEGMENT_C0 | SEGMENT_C4 | SEGMENT_D0 | SEGMENT_D4; break; + case 3: blockedSegments = SEGMENTS_ALL; break; + } + paint_util_set_segment_support_height(paint_util_rotate_segments(blockedSegments, direction), 0xFFFF, 0); + paint_util_set_general_support_height(height + 32, 0x20); +} + +static void wooden_wild_mouse_track_left_quarter_turn_3(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + trackSequence = mapLeftQuarterTurn3TilesToRightQuarterTurn3Tiles[trackSequence]; + wooden_wild_mouse_track_right_quarter_turn_3(rideIndex, trackSequence, (direction + 1) % 4, height, mapElement); +} + static void wooden_wild_mouse_track_left_quarter_turn_1(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { static const uint32 imageIds[4] = { @@ -561,8 +625,9 @@ TRACK_PAINT_FUNCTION get_track_paint_function_wooden_wild_mouse(int trackType, i case TRACK_ELEM_25_DEG_DOWN_TO_FLAT: return wooden_wild_mouse_track_25_deg_down_to_flat; case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES: + return wooden_wild_mouse_track_left_quarter_turn_3; case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES: - return NULL; + return wooden_wild_mouse_track_right_quarter_turn_3; case TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE: return wooden_wild_mouse_track_left_quarter_turn_1; case TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE: diff --git a/src/ride/track_paint.c b/src/ride/track_paint.c index 726b7599db..8c9ba901ee 100644 --- a/src/ride/track_paint.c +++ b/src/ride/track_paint.c @@ -1222,6 +1222,22 @@ void track_paint_util_right_quarter_turn_3_tiles_paint_3(sint16 height, int dire sub_98197C(spriteBB->sprite_id | colourFlags, (sint8)spriteBB->offset.x, (sint8)spriteBB->offset.y, spriteBB->bb_size.x, spriteBB->bb_size.y, (sint8)spriteBB->bb_size.z, spriteBB->offset.z + height, spriteBB->bb_offset.x, spriteBB->bb_offset.y, height + spriteBB->bb_offset.z, rotation); } +void track_paint_util_right_quarter_turn_3_tiles_paint_4(sint16 height, int direction, uint8 rotation, uint8 trackSequence, uint32 colourFlags, const sprite_bb sprites[4][3]) +{ + sint8 sprite = right_quarter_turn_3_tiles_sprite_map[trackSequence]; + if (sprite < 0) { + return; + } + + const sprite_bb *spriteBB = &sprites[direction][sprite]; + uint32 imageId = spriteBB->sprite_id | colourFlags; + sub_98196C(imageId, + (sint8)spriteBB->offset.x, (sint8)spriteBB->offset.y, + spriteBB->bb_size.x, spriteBB->bb_size.y, (sint8)spriteBB->bb_size.z, + height + spriteBB->offset.z, + rotation); +} + void track_paint_util_right_quarter_turn_3_tiles_tunnel(sint16 height, uint8 direction, uint8 trackSequence, uint8 tunnelType) { if (direction == 0 && trackSequence == 0) { diff --git a/src/ride/track_paint.h b/src/ride/track_paint.h index 0274a67286..d0cb607f14 100644 --- a/src/ride/track_paint.h +++ b/src/ride/track_paint.h @@ -238,6 +238,7 @@ void track_paint_util_right_quarter_turn_3_tiles_paint(sint8 thickness, sint16 h void track_paint_util_right_quarter_turn_3_tiles_paint_2(sint8 thickness, sint16 height, int direction, uint8 trackSequence, uint32 colourFlags, const uint32 sprites[4][3], uint8 rotation); void track_paint_util_right_quarter_turn_3_tiles_paint_2_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_right_quarter_turn_3_tiles_paint_3(sint16 height, int direction, uint8 rotation, uint8 trackSequence, uint32 colourFlags, const sprite_bb sprites[4][3]); +void track_paint_util_right_quarter_turn_3_tiles_paint_4(sint16 height, int direction, uint8 rotation, uint8 trackSequence, uint32 colourFlags, const sprite_bb sprites[4][3]); void track_paint_util_right_quarter_turn_3_tiles_tunnel(sint16 height, uint8 direction, uint8 trackSequence, uint8 tunnelType); void track_paint_util_left_quarter_turn_3_tiles_paint(sint8 thickness, sint16 height, int direction, uint8 trackSequence, uint32 colourFlags, const uint32 sprites[4][3], uint8 rotation); 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); From f58cbfbb6920ce98fbc298de18df2213ef60f803 Mon Sep 17 00:00:00 2001 From: Ted John Date: Tue, 4 Oct 2016 00:11:09 +0100 Subject: [PATCH 10/11] Revert openrct2.vcxproj.user --- openrct2.vcxproj.user | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openrct2.vcxproj.user b/openrct2.vcxproj.user index 2417416108..b782b153c4 100644 --- a/openrct2.vcxproj.user +++ b/openrct2.vcxproj.user @@ -7,7 +7,8 @@ $(TargetDir)\openrct2.exe WindowsLocalDebugger $(TargetDir) - "C:\Users\Ted\Documents\OpenRCT2\save\paint_wooden_wild_mouse.sv6" + + $(TargetDir) From 973765769d41ff502d1376811481559efb5abaf7 Mon Sep 17 00:00:00 2001 From: Ted John Date: Tue, 4 Oct 2016 00:20:22 +0100 Subject: [PATCH 11/11] Remove unnecessary braces --- src/ride/coaster/wooden_wild_mouse.c | 64 ++++++++++++++-------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/ride/coaster/wooden_wild_mouse.c b/src/ride/coaster/wooden_wild_mouse.c index f73051e77a..2550e2c8bd 100644 --- a/src/ride/coaster/wooden_wild_mouse.c +++ b/src/ride/coaster/wooden_wild_mouse.c @@ -167,16 +167,16 @@ static void wooden_wild_mouse_track_25_deg_up(uint8 rideIndex, uint8 trackSequen { static const uint32 imageIds[2][4] = { { - { SPR_WOODEN_WILD_MOUSE_25_DEG_SW_NE }, - { SPR_WOODEN_WILD_MOUSE_25_DEG_NW_SE }, - { SPR_WOODEN_WILD_MOUSE_25_DEG_NE_SW }, - { SPR_WOODEN_WILD_MOUSE_25_DEG_SE_NW }, + SPR_WOODEN_WILD_MOUSE_25_DEG_SW_NE, + SPR_WOODEN_WILD_MOUSE_25_DEG_NW_SE, + SPR_WOODEN_WILD_MOUSE_25_DEG_NE_SW, + SPR_WOODEN_WILD_MOUSE_25_DEG_SE_NW, }, { - { SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SW_NE }, - { SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_NW_SE }, - { SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_NE_SW }, - { SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SE_NW }, + SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SW_NE, + SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_NW_SE, + SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_NE_SW, + SPR_WOODEN_WILD_MOUSE_25_DEG_CHAIN_SE_NW, }, }; @@ -200,16 +200,16 @@ static void wooden_wild_mouse_track_60_deg_up(uint8 rideIndex, uint8 trackSequen { static const uint32 imageIds[2][4] = { { - { SPR_WOODEN_WILD_MOUSE_60_DEG_SW_NE }, - { SPR_WOODEN_WILD_MOUSE_60_DEG_NW_SE }, - { SPR_WOODEN_WILD_MOUSE_60_DEG_NE_SW }, - { SPR_WOODEN_WILD_MOUSE_60_DEG_SE_NW }, + SPR_WOODEN_WILD_MOUSE_60_DEG_SW_NE, + SPR_WOODEN_WILD_MOUSE_60_DEG_NW_SE, + SPR_WOODEN_WILD_MOUSE_60_DEG_NE_SW, + SPR_WOODEN_WILD_MOUSE_60_DEG_SE_NW, }, { - { SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_SW_NE }, - { SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_NW_SE }, - { SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_NE_SW }, - { SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_SE_NW }, + SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_SW_NE, + SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_NW_SE, + SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_NE_SW, + SPR_WOODEN_WILD_MOUSE_60_DEG_CHAIN_SE_NW, }, }; @@ -237,16 +237,16 @@ static void wooden_wild_mouse_track_flat_to_25_deg_up(uint8 rideIndex, uint8 tra { static const uint32 imageIds[2][4] = { { - { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_SW_NE }, - { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_NW_SE }, - { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_NE_SW }, - { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_SE_NW }, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_SW_NE, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_NW_SE, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_NE_SW, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_SE_NW, }, { - { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_SW_NE }, - { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_NW_SE }, - { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_NE_SW }, - { SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_SE_NW }, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_SW_NE, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_NW_SE, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_NE_SW, + SPR_WOODEN_WILD_MOUSE_FLAT_TO_25_DEG_CHAIN_SE_NW, }, }; @@ -352,16 +352,16 @@ static void wooden_wild_mouse_track_25_deg_up_to_flat(uint8 rideIndex, uint8 tra { static 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_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 }, + 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, }, };