From 91578fa50ed631239a4c63fc3338aae741cb4e71 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 25 Sep 2016 14:09:47 +0100 Subject: [PATCH] Implement station --- src/ride/water/log_flume.c | 55 +++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/src/ride/water/log_flume.c b/src/ride/water/log_flume.c index 65405e4242..d58a3555e1 100644 --- a/src/ride/water/log_flume.c +++ b/src/ride/water/log_flume.c @@ -32,18 +32,18 @@ enum { SPR_LOG_FLUME_FLAT_FRONT_SE_NW = 21003, }; +static const uint32 LogFlumeTrackFlatImageIds[4][2] = +{ + { SPR_LOG_FLUME_FLAT_SW_NE, SPR_LOG_FLUME_FLAT_FRONT_SW_NE }, + { SPR_LOG_FLUME_FLAT_NW_SE, SPR_LOG_FLUME_FLAT_FRONT_NW_SE }, + { SPR_LOG_FLUME_FLAT_NE_SW, SPR_LOG_FLUME_FLAT_FRONT_NE_SW }, + { SPR_LOG_FLUME_FLAT_SE_NW, SPR_LOG_FLUME_FLAT_FRONT_SE_NW }, +}; + static void paint_log_flume_track_flat(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) { - static const uint32 imageIds[4][2] = - { - { SPR_LOG_FLUME_FLAT_SW_NE, SPR_LOG_FLUME_FLAT_FRONT_SW_NE }, - { SPR_LOG_FLUME_FLAT_NW_SE, SPR_LOG_FLUME_FLAT_FRONT_NW_SE }, - { SPR_LOG_FLUME_FLAT_NE_SW, SPR_LOG_FLUME_FLAT_FRONT_NE_SW }, - { SPR_LOG_FLUME_FLAT_SE_NW, SPR_LOG_FLUME_FLAT_FRONT_SE_NW }, - }; - - uint32 imageId = imageIds[direction][0] | gTrackColours[SCHEME_TRACK]; - uint32 frontImageId = imageIds[direction][1] | gTrackColours[SCHEME_TRACK]; + uint32 imageId = LogFlumeTrackFlatImageIds[direction][0] | gTrackColours[SCHEME_TRACK]; + uint32 frontImageId = LogFlumeTrackFlatImageIds[direction][1] | gTrackColours[SCHEME_TRACK]; sub_98197C_rotated(direction, imageId, 0, 0, 32, 20, 2, height, 0, 6, height); sub_98197C_rotated(direction, frontImageId, 0, 0, 32, 1, 26, height, 0, 27, height); @@ -55,11 +55,46 @@ static void paint_log_flume_track_flat(uint8 rideIndex, uint8 trackSequence, uin paint_util_set_general_support_height(height + 32, 0x20); } +static void paint_log_flume_track_station(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement) +{ + rct_ride *ride = get_ride(rideIndex); + + uint32 imageId = LogFlumeTrackFlatImageIds[direction][0] | gTrackColours[SCHEME_TRACK]; + sub_98197C_rotated(direction, imageId, 0, 0, 32, 20, 1, height, 0, 6, height + 3); + + if (direction & 1) { + imageId = SPR_STATION_BASE_B_NW_SE | gTrackColours[SCHEME_MISC]; + } else { + imageId = SPR_STATION_BASE_B_SW_NE | gTrackColours[SCHEME_MISC]; + } + sub_98196C(imageId, 0, 0, 32, 32, 1, height, get_current_rotation()); + + if (direction & 1) { + metal_a_supports_paint_setup(3, 6, 0, height, gTrackColours[SCHEME_SUPPORTS]); + metal_a_supports_paint_setup(3, 7, 0, height, gTrackColours[SCHEME_SUPPORTS]); + } else { + metal_a_supports_paint_setup(3, 5, 0, height, gTrackColours[SCHEME_SUPPORTS]); + metal_a_supports_paint_setup(3, 8, 0, height, gTrackColours[SCHEME_SUPPORTS]); + } + + track_paint_util_draw_station(rideIndex, trackSequence, direction, height + 2, 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_log_flume(int trackType, int direction) { switch (trackType) { case TRACK_ELEM_FLAT: return paint_log_flume_track_flat; + + case TRACK_ELEM_END_STATION: + case TRACK_ELEM_BEGIN_STATION: + case TRACK_ELEM_MIDDLE_STATION: + return paint_log_flume_track_station; } return NULL;