From a62277c44f2f7e6320df1ef9cb732142025c8648 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 18 Sep 2016 01:45:30 +0100 Subject: [PATCH] Implement flat --- src/ride/coaster/reverse_freefall_coaster.c | 33 +++++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/ride/coaster/reverse_freefall_coaster.c b/src/ride/coaster/reverse_freefall_coaster.c index 2f7fc71717..6b0dd83082 100644 --- a/src/ride/coaster/reverse_freefall_coaster.c +++ b/src/ride/coaster/reverse_freefall_coaster.c @@ -32,6 +32,8 @@ enum { SPR_REVERSE_FREEFALL_RC_STATION_SW_NE = 22162, SPR_REVERSE_FREEFALL_RC_STATION_NW_SE = 22163, + SPR_REVERSE_FREEFALL_RC_FLAT_SW_NE = 22164, + SPR_REVERSE_FREEFALL_RC_FLAT_NW_SE = 22165, }; static const uint32 reverse_freefall_rc_track_pieces_station[4] = { @@ -41,7 +43,30 @@ static const uint32 reverse_freefall_rc_track_pieces_station[4] = { SPR_REVERSE_FREEFALL_RC_STATION_NW_SE, }; -static void paint_reverse_freefall_rc_station_track(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element *mapElement) +static void paint_reverse_freefall_rc_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element *mapElement) +{ + uint32 imageId = 0; + bool isChained = mapElement->type & (1 << 7); + + if (direction & 1) { + imageId = SPR_REVERSE_FREEFALL_RC_FLAT_NW_SE | gTrackColours[SCHEME_TRACK]; + sub_98197C(imageId, 0, 0, 20, 32, 1, height, 6, 0, height, get_current_rotation()); + paint_util_push_tunnel_right(height, TUNNEL_0); + } else { + imageId += SPR_REVERSE_FREEFALL_RC_FLAT_SW_NE | gTrackColours[SCHEME_TRACK]; + sub_98197C(imageId, 0, 0, 32, 20, 1, height, 0, 6, height, get_current_rotation()); + paint_util_push_tunnel_left(height, TUNNEL_0); + } + + if (track_paint_util_should_paint_supports(gPaintMapPosition)) { + wooden_a_supports_paint_setup((direction & 1) ? 1 : 0, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); + } + + paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); + paint_util_set_general_support_height(height + 32, 0x20); +} + +static void paint_reverse_freefall_rc_station(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element *mapElement) { rct_ride * ride = get_ride(rideIndex); const rct_ride_entrance_definition * entranceStyle = &RideEntranceDefinitions[ride->entrance_style]; @@ -68,7 +93,7 @@ static void paint_reverse_freefall_rc_station_track(uint8 rideIndex, uint8 track sub_98199C(imageId, 0, 0, 20, 32, 1, height, 6, 0, height, get_current_rotation()); } - wooden_a_supports_paint_setup(0, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); + wooden_a_supports_paint_setup((direction & 1) ? 1 : 0, 0, height, gTrackColours[SCHEME_SUPPORTS], NULL); paint_util_push_tunnel_right(height, TUNNEL_6); track_paint_util_draw_station_platform(ride, direction, height, 5, mapElement); @@ -80,10 +105,12 @@ static void paint_reverse_freefall_rc_station_track(uint8 rideIndex, uint8 track TRACK_PAINT_FUNCTION get_track_paint_function_reverse_freefall_rc(int trackType, int direction) { switch (trackType) { + case TRACK_ELEM_FLAT: + return paint_reverse_freefall_rc_flat; case TRACK_ELEM_END_STATION: case TRACK_ELEM_BEGIN_STATION: case TRACK_ELEM_MIDDLE_STATION: - return paint_reverse_freefall_rc_station_track; + return paint_reverse_freefall_rc_station; } return NULL; }