From 41f0b181bf0bd701f8a33fbe88cba78d62a7f81f Mon Sep 17 00:00:00 2001 From: Richard Jenkins Date: Tue, 2 Jan 2018 17:21:40 +0000 Subject: [PATCH] Display flat rides correctly in previews --- src/openrct2-ui/windows/TrackDesignPlace.cpp | 5 ++++- src/openrct2/rct12/RCT12.h | 2 ++ src/openrct2/ride/TrackDesign.cpp | 23 +++++++++++--------- src/openrct2/ride/TrackDesignSave.cpp | 6 +++-- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/openrct2-ui/windows/TrackDesignPlace.cpp b/src/openrct2-ui/windows/TrackDesignPlace.cpp index 6e8714c861..ac123499e1 100644 --- a/src/openrct2-ui/windows/TrackDesignPlace.cpp +++ b/src/openrct2-ui/windows/TrackDesignPlace.cpp @@ -515,6 +515,9 @@ static void window_track_place_draw_mini_preview_track(rct_track_td6 *td6, sint3 { uint8 rotation = (_currentTrackPieceDirection + get_current_rotation()) & 3; rct_td6_track_element *trackElement = td6->track_elements; + + const rct_preview_track * * trackBlockArray = (ride_type_has_flag(td6->type, RIDE_TYPE_FLAG_HAS_TRACK)) ? TrackBlocks : FlatRideTrackBlocks; + while (trackElement->type != 255) { sint32 trackType = trackElement->type; if (trackType == TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP) { @@ -522,7 +525,7 @@ static void window_track_place_draw_mini_preview_track(rct_track_td6 *td6, sint3 } // Follow a single track piece shape - const rct_preview_track *trackBlock = TrackBlocks[trackType]; + const rct_preview_track *trackBlock = trackBlockArray[trackType]; while (trackBlock->index != 255) { sint16 x = origin.x; sint16 y = origin.y; diff --git a/src/openrct2/rct12/RCT12.h b/src/openrct2/rct12/RCT12.h index 15a25f6df3..7197e16172 100644 --- a/src/openrct2/rct12/RCT12.h +++ b/src/openrct2/rct12/RCT12.h @@ -32,6 +32,8 @@ #define RCT12_PATROL_AREA_SIZE 128 #define RCT12_STAFF_TYPE_COUNT 4 #define RCT12_NUM_COLOUR_SCHEMES 4 +#define RCT12_MAX_VEHICLES_PER_RIDE 32 +#define RCT12_MAX_VEHICLE_COLOURS 32 #define RCT12_SOUND_ID_NULL 0xFF #define RCT12_EXPENDITURE_TABLE_MONTH_COUNT 16 diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 584f2aa2fe..0eb3006313 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -1384,15 +1384,7 @@ static sint32 track_design_place_maze(rct_track_td6 * td6, sint16 x, sint16 y, s static bool track_design_place_ride(rct_track_td6 * td6, sint16 x, sint16 y, sint16 z, uint8 rideIndex) { - const rct_preview_track ** trackBlockArray; - if (ride_type_has_flag(td6->type, RIDE_TYPE_FLAG_HAS_TRACK)) - { - trackBlockArray = TrackBlocks; - } - else - { - trackBlockArray = FlatRideTrackBlocks; - } + const rct_preview_track * * trackBlockArray = (ride_type_has_flag(td6->type, RIDE_TYPE_FLAG_HAS_TRACK)) ? TrackBlocks : FlatRideTrackBlocks; gTrackPreviewOrigin.x = x; gTrackPreviewOrigin.y = y; @@ -1803,6 +1795,17 @@ static bool track_design_place_preview(rct_track_td6 * td6, money32 * cost, uint ride->track_colour_supports[i] = td6->track_support_colour[i]; } + // Flat rides need their vehicle colours loaded for display + // in the preview window + if (!ride_type_has_flag(td6->type, RIDE_TYPE_FLAG_HAS_TRACK)) + { + for (sint32 i = 0; i < RCT12_MAX_VEHICLE_COLOURS; i++) + { + ride->vehicle_colours[i] = td6->vehicle_colours[i]; + ride->vehicle_colours_extended[i] = td6->vehicle_additional_colour[i]; + } + } + byte_9D8150 = true; uint8 backup_rotation = _currentTrackPieceDirection; uint32 backup_park_flags = gParkFlags; @@ -2018,7 +2021,7 @@ static money32 place_track_design(sint16 x, sint16 y, sint16 z, uint8 flags, uin ride->track_colour_supports[i] = td6->track_support_colour[i]; } - for (sint32 i = 0; i < 32; i++) + for (sint32 i = 0; i < MAX_VEHICLES_PER_RIDE; i++) { ride->vehicle_colours[i].body_colour = td6->vehicle_colours[i].body_colour; ride->vehicle_colours[i].trim_colour = td6->vehicle_colours[i].trim_colour; diff --git a/src/openrct2/ride/TrackDesignSave.cpp b/src/openrct2/ride/TrackDesignSave.cpp index 34be87de64..7681f3f25c 100644 --- a/src/openrct2/ride/TrackDesignSave.cpp +++ b/src/openrct2/ride/TrackDesignSave.cpp @@ -719,12 +719,14 @@ static rct_track_td6 *track_design_save_to_td6(uint8 rideIndex) (ride->colour_scheme_type & 3) | (1 << 3); // Version .TD6 - for (sint32 i = 0; i < 32; i++) { + for (sint32 i = 0; i < RCT12_MAX_VEHICLES_PER_RIDE; i++) + { td6->vehicle_colours[i] = ride->vehicle_colours[i]; td6->vehicle_additional_colour[i] = ride->vehicle_colours_extended[i]; } - for (sint32 i = 0; i < RCT12_NUM_COLOUR_SCHEMES; i++) { + for (sint32 i = 0; i < RCT12_NUM_COLOUR_SCHEMES; i++) + { td6->track_spine_colour[i] = ride->track_colour_main[i]; td6->track_rail_colour[i] = ride->track_colour_additional[i]; td6->track_support_colour[i] = ride->track_colour_supports[i];