From adc51ad9aaca6283f5dc9ee255eef98ca4a5ef69 Mon Sep 17 00:00:00 2001 From: Duncan Date: Sat, 13 Aug 2022 20:30:30 +0100 Subject: [PATCH] Rework rct_vehicle_colour (#16051) * Remove rct_vehicle_colour and replace with VehicleColour * Update network version * Update replay version --- CMakeLists.txt | 4 ++-- openrct2.proj | 4 ++-- src/openrct2/GameStateSnapshots.cpp | 1 - src/openrct2/actions/TrackDesignAction.cpp | 4 +--- src/openrct2/core/DataSerialiserTraits.h | 20 ++++++++++--------- src/openrct2/entity/Particle.cpp | 7 ++++--- src/openrct2/entity/Particle.h | 4 ++-- src/openrct2/network/NetworkBase.cpp | 2 +- src/openrct2/park/ParkFile.cpp | 6 +++--- src/openrct2/rct1/RCT1.h | 5 ++--- src/openrct2/rct1/S4Importer.cpp | 18 ++++++++--------- src/openrct2/rct1/T4Importer.cpp | 19 +++++++++--------- src/openrct2/rct12/RCT12.h | 7 +++++++ src/openrct2/rct2/RCT2.h | 7 +++---- src/openrct2/rct2/S6Importer.cpp | 5 +++-- src/openrct2/rct2/T6Exporter.cpp | 11 ++++++++-- src/openrct2/rct2/T6Importer.cpp | 5 +++-- src/openrct2/ride/Ride.cpp | 8 +------- src/openrct2/ride/TrackDesign.cpp | 9 ++------- src/openrct2/ride/TrackDesign.h | 4 ++-- src/openrct2/ride/Vehicle.cpp | 1 - src/openrct2/ride/Vehicle.h | 3 +-- src/openrct2/ride/VehicleColour.h | 6 ------ src/openrct2/ride/VehiclePaint.cpp | 2 +- src/openrct2/ride/coaster/VirginiaReel.cpp | 2 +- src/openrct2/ride/gentle/ObservationTower.cpp | 6 ++---- src/openrct2/ride/thrill/LaunchedFreefall.cpp | 2 +- src/openrct2/ride/thrill/RotoDrop.cpp | 2 +- src/openrct2/ride/water/RiverRapids.cpp | 2 +- src/openrct2/ride/water/SubmarineRide.cpp | 6 ++---- .../scripting/bindings/entity/ScVehicle.cpp | 11 ++-------- 31 files changed, 88 insertions(+), 105 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2448a9e17e..501355a178 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,9 +68,9 @@ set(OBJECTS_VERSION "1.3.3") set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v${OBJECTS_VERSION}/objects.zip") set(OBJECTS_SHA1 "ef039e27d63398bde924848e36c72e86c59431c6") -set(REPLAYS_VERSION "0.0.68") +set(REPLAYS_VERSION "0.0.69") set(REPLAYS_URL "https://github.com/OpenRCT2/replays/releases/download/v${REPLAYS_VERSION}/replays.zip") -set(REPLAYS_SHA1 "FC8EFE3FCA71F75D79728494ACC42DB49B18B529") +set(REPLAYS_SHA1 "3EC20AA2C90FDEEB08C26B6DA6D111C9C5C9B694") option(FORCE32 "Force 32-bit build. It will add `-m32` to compiler flags.") option(WITH_TESTS "Build tests") diff --git a/openrct2.proj b/openrct2.proj index 114cffb463..d0ea1c0106 100644 --- a/openrct2.proj +++ b/openrct2.proj @@ -47,8 +47,8 @@ 4ab0065e5a4d9f9c77d94718bbdfcfcd5a389da0 https://github.com/OpenRCT2/objects/releases/download/v1.3.3/objects.zip ef039e27d63398bde924848e36c72e86c59431c6 - https://github.com/OpenRCT2/replays/releases/download/v0.0.68/replays.zip - FC8EFE3FCA71F75D79728494ACC42DB49B18B529 + https://github.com/OpenRCT2/replays/releases/download/v0.0.69/replays.zip + 3EC20AA2C90FDEEB08C26B6DA6D111C9C5C9B694 diff --git a/src/openrct2/GameStateSnapshots.cpp b/src/openrct2/GameStateSnapshots.cpp index 083f34f652..0604356c83 100644 --- a/src/openrct2/GameStateSnapshots.cpp +++ b/src/openrct2/GameStateSnapshots.cpp @@ -452,7 +452,6 @@ struct GameStateSnapshots final : public IGameStateSnapshots COMPARE_FIELD(Vehicle, mini_golf_current_animation); COMPARE_FIELD(Vehicle, mini_golf_flags); COMPARE_FIELD(Vehicle, ride_subtype); - COMPARE_FIELD(Vehicle, colours_extended); COMPARE_FIELD(Vehicle, seat_rotation); COMPARE_FIELD(Vehicle, target_seat_rotation); COMPARE_FIELD(Vehicle, BoatLocation.x); diff --git a/src/openrct2/actions/TrackDesignAction.cpp b/src/openrct2/actions/TrackDesignAction.cpp index a2b9d35712..2a1730ef4a 100644 --- a/src/openrct2/actions/TrackDesignAction.cpp +++ b/src/openrct2/actions/TrackDesignAction.cpp @@ -259,9 +259,7 @@ GameActions::Result TrackDesignAction::Execute() const for (size_t i = 0; i <= OpenRCT2::Limits::MaxTrainsPerRide; i++) { auto tdIndex = i % std::size(_td.vehicle_colours); - ride->vehicle_colours[i].Body = _td.vehicle_colours[tdIndex].body_colour; - ride->vehicle_colours[i].Trim = _td.vehicle_colours[tdIndex].trim_colour; - ride->vehicle_colours[i].Tertiary = _td.vehicle_additional_colour[tdIndex]; + ride->vehicle_colours[i] = _td.vehicle_colours[tdIndex]; } for (int32_t count = 1; count == 1 || r.Error != GameActions::Status::Ok; ++count) diff --git a/src/openrct2/core/DataSerialiserTraits.h b/src/openrct2/core/DataSerialiserTraits.h index 8c360cf387..0f75058569 100644 --- a/src/openrct2/core/DataSerialiserTraits.h +++ b/src/openrct2/core/DataSerialiserTraits.h @@ -773,22 +773,24 @@ template<> struct DataSerializerTraits_t } }; -template<> struct DataSerializerTraits_t +template<> struct DataSerializerTraits_t { - static void encode(OpenRCT2::IStream* stream, const rct_vehicle_colour& val) + static void encode(OpenRCT2::IStream* stream, const VehicleColour& val) { - stream->Write(&val.body_colour); - stream->Write(&val.trim_colour); + stream->Write(&val.Body); + stream->Write(&val.Trim); + stream->Write(&val.Tertiary); } - static void decode(OpenRCT2::IStream* stream, rct_vehicle_colour& val) + static void decode(OpenRCT2::IStream* stream, VehicleColour& val) { - stream->Read(&val.body_colour); - stream->Read(&val.trim_colour); + stream->Read(&val.Body); + stream->Read(&val.Trim); + stream->Read(&val.Tertiary); } - static void log(OpenRCT2::IStream* stream, const rct_vehicle_colour& val) + static void log(OpenRCT2::IStream* stream, const VehicleColour& val) { char msg[128] = {}; - snprintf(msg, sizeof(msg), "rct_vehicle_colour(body_colour = %d, trim_colour = %d)", val.body_colour, val.trim_colour); + snprintf(msg, sizeof(msg), "VehicleColour(Body = %d, Trim = %d, Tertiary = %d)", val.Body, val.Trim, val.Tertiary); stream->Write(msg, strlen(msg)); } }; diff --git a/src/openrct2/entity/Particle.cpp b/src/openrct2/entity/Particle.cpp index 0b206afa4d..bd8f30c6cc 100644 --- a/src/openrct2/entity/Particle.cpp +++ b/src/openrct2/entity/Particle.cpp @@ -12,6 +12,7 @@ #include "../core/DataSerialiser.h" #include "../paint/Paint.h" #include "../profiling/Profiling.h" +#include "../ride/VehicleColour.h" #include "../scenario/Scenario.h" #include "EntityRegistry.h" @@ -50,13 +51,13 @@ template<> bool EntityBase::Is() const * * rct2: 0x006735A1 */ -void VehicleCrashParticle::Create(rct_vehicle_colour colours, const CoordsXYZ& vehiclePos) +void VehicleCrashParticle::Create(VehicleColour& colours, const CoordsXYZ& vehiclePos) { VehicleCrashParticle* sprite = CreateEntity(); if (sprite != nullptr) { - sprite->colour[0] = colours.body_colour; - sprite->colour[1] = colours.trim_colour; + sprite->colour[0] = colours.Body; + sprite->colour[1] = colours.Trim; sprite->sprite_width = 8; sprite->sprite_height_negative = 8; sprite->sprite_height_positive = 8; diff --git a/src/openrct2/entity/Particle.h b/src/openrct2/entity/Particle.h index 353b8fab5b..744a92d1a9 100644 --- a/src/openrct2/entity/Particle.h +++ b/src/openrct2/entity/Particle.h @@ -9,12 +9,12 @@ #pragma once -#include "../ride/VehicleColour.h" #include "EntityBase.h" class DataSerialiser; struct CoordsXYZ; struct paint_session; +struct VehicleColour; struct VehicleCrashParticle : EntityBase { @@ -29,7 +29,7 @@ struct VehicleCrashParticle : EntityBase int32_t acceleration_x; int32_t acceleration_y; int32_t acceleration_z; - static void Create(rct_vehicle_colour colours, const CoordsXYZ& vehiclePos); + static void Create(VehicleColour& colours, const CoordsXYZ& vehiclePos); void Update(); void Serialise(DataSerialiser& stream); void Paint(paint_session& session, int32_t imageDirection) const; diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index d02abd69b7..c168570b19 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -42,7 +42,7 @@ // This string specifies which version of network stream current build uses. // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -#define NETWORK_STREAM_VERSION "5" +#define NETWORK_STREAM_VERSION "6" #define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION static Peep* _pickup_peep = nullptr; diff --git a/src/openrct2/park/ParkFile.cpp b/src/openrct2/park/ParkFile.cpp index 0499dfcb3d..7813fd4ba0 100644 --- a/src/openrct2/park/ParkFile.cpp +++ b/src/openrct2/park/ParkFile.cpp @@ -1843,8 +1843,8 @@ namespace OpenRCT2 cs.ReadWrite(entity.acceleration); cs.ReadWrite(entity.ride); cs.ReadWrite(entity.vehicle_type); - cs.ReadWrite(entity.colours.body_colour); - cs.ReadWrite(entity.colours.trim_colour); + cs.ReadWrite(entity.colours.Body); + cs.ReadWrite(entity.colours.Trim); cs.ReadWrite(entity.track_progress); cs.ReadWrite(entity.BoatLocation); cs.ReadWrite(entity.TrackTypeAndDirection); @@ -1906,7 +1906,7 @@ namespace OpenRCT2 cs.ReadWrite(entity.mini_golf_current_animation); cs.ReadWrite(entity.mini_golf_flags); cs.ReadWrite(entity.ride_subtype); - cs.ReadWrite(entity.colours_extended); + cs.ReadWrite(entity.colours.Tertiary); cs.ReadWrite(entity.seat_rotation); cs.ReadWrite(entity.target_seat_rotation); cs.ReadWrite(entity.IsCrashedVehicle); diff --git a/src/openrct2/rct1/RCT1.h b/src/openrct2/rct1/RCT1.h index f8591c5b12..d1cc5457b7 100644 --- a/src/openrct2/rct1/RCT1.h +++ b/src/openrct2/rct1/RCT1.h @@ -11,7 +11,6 @@ #include "../rct12/RCT12.h" #include "../ride/RideRatings.h" -#include "../ride/VehicleColour.h" #include "Limits.h" namespace RCT1 @@ -307,7 +306,7 @@ namespace RCT1 int32_t acceleration; // 0x2C uint8_t ride; // 0x30 uint8_t CarType; // 0x31 - rct_vehicle_colour colours; // 0x32 + RCT12VehicleColour colours; // 0x32 union { uint16_t track_progress; // 0x34 @@ -797,7 +796,7 @@ namespace RCT1 uint32_t flags; // 0x02 uint8_t mode; // 0x06 uint8_t version_and_colour_scheme; // 0x07 0b0000_VVCC - rct_vehicle_colour vehicle_colours[Limits::MaxTrainsPerRide]; // 0x08 + RCT12VehicleColour vehicle_colours[Limits::MaxTrainsPerRide]; // 0x08 uint8_t track_spine_colour_v0; // 0x20 uint8_t track_rail_colour_v0; // 0x21 uint8_t track_support_colour_v0; // 0x22 diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index f87a499025..a30d6d96f3 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -1221,41 +1221,41 @@ namespace RCT1 // RCT1 had no third colour if (colourSchemeCopyDescriptor.colour1 == COPY_COLOUR_1) { - dst->colours.body_colour = RCT1::GetColour(src->colours.body_colour); + dst->colours.Body = RCT1::GetColour(src->colours.body_colour); } else if (colourSchemeCopyDescriptor.colour1 == COPY_COLOUR_2) { - dst->colours.body_colour = RCT1::GetColour(src->colours.trim_colour); + dst->colours.Body = RCT1::GetColour(src->colours.trim_colour); } else { - dst->colours.body_colour = colourSchemeCopyDescriptor.colour1; + dst->colours.Body = colourSchemeCopyDescriptor.colour1; } if (colourSchemeCopyDescriptor.colour2 == COPY_COLOUR_1) { - dst->colours.trim_colour = RCT1::GetColour(src->colours.body_colour); + dst->colours.Trim = RCT1::GetColour(src->colours.body_colour); } else if (colourSchemeCopyDescriptor.colour2 == COPY_COLOUR_2) { - dst->colours.trim_colour = RCT1::GetColour(src->colours.trim_colour); + dst->colours.Trim = RCT1::GetColour(src->colours.trim_colour); } else { - dst->colours.trim_colour = colourSchemeCopyDescriptor.colour2; + dst->colours.Trim = colourSchemeCopyDescriptor.colour2; } if (colourSchemeCopyDescriptor.colour3 == COPY_COLOUR_1) { - dst->colours_extended = RCT1::GetColour(src->colours.body_colour); + dst->colours.Tertiary = RCT1::GetColour(src->colours.body_colour); } else if (colourSchemeCopyDescriptor.colour3 == COPY_COLOUR_2) { - dst->colours_extended = RCT1::GetColour(src->colours.trim_colour); + dst->colours.Tertiary = RCT1::GetColour(src->colours.trim_colour); } else { - dst->colours_extended = colourSchemeCopyDescriptor.colour3; + dst->colours.Tertiary = colourSchemeCopyDescriptor.colour3; } } diff --git a/src/openrct2/rct1/T4Importer.cpp b/src/openrct2/rct1/T4Importer.cpp index 055f7be426..d3f5183218 100644 --- a/src/openrct2/rct1/T4Importer.cpp +++ b/src/openrct2/rct1/T4Importer.cpp @@ -168,48 +168,47 @@ namespace RCT1 td4Base.vehicle_type); if (colourSchemeCopyDescriptor.colour1 == COPY_COLOUR_1) { - td->vehicle_colours[i].body_colour = RCT1::GetColour(td4Base.vehicle_colours[i].body_colour); + td->vehicle_colours[i].Body = RCT1::GetColour(td4Base.vehicle_colours[i].body_colour); } else if (colourSchemeCopyDescriptor.colour1 == COPY_COLOUR_2) { - td->vehicle_colours[i].body_colour = RCT1::GetColour(td4Base.vehicle_colours[i].trim_colour); + td->vehicle_colours[i].Body = RCT1::GetColour(td4Base.vehicle_colours[i].trim_colour); } else { - td->vehicle_colours[i].body_colour = colourSchemeCopyDescriptor.colour1; + td->vehicle_colours[i].Body = colourSchemeCopyDescriptor.colour1; } if (colourSchemeCopyDescriptor.colour2 == COPY_COLOUR_1) { - td->vehicle_colours[i].trim_colour = RCT1::GetColour(td4Base.vehicle_colours[i].body_colour); + td->vehicle_colours[i].Trim = RCT1::GetColour(td4Base.vehicle_colours[i].body_colour); } else if (colourSchemeCopyDescriptor.colour2 == COPY_COLOUR_2) { - td->vehicle_colours[i].trim_colour = RCT1::GetColour(td4Base.vehicle_colours[i].trim_colour); + td->vehicle_colours[i].Trim = RCT1::GetColour(td4Base.vehicle_colours[i].trim_colour); } else { - td->vehicle_colours[i].trim_colour = colourSchemeCopyDescriptor.colour2; + td->vehicle_colours[i].Trim = colourSchemeCopyDescriptor.colour2; } if (colourSchemeCopyDescriptor.colour3 == COPY_COLOUR_1) { - td->vehicle_additional_colour[i] = RCT1::GetColour(td4Base.vehicle_colours[i].body_colour); + td->vehicle_colours[i].Tertiary = RCT1::GetColour(td4Base.vehicle_colours[i].body_colour); } else if (colourSchemeCopyDescriptor.colour3 == COPY_COLOUR_2) { - td->vehicle_additional_colour[i] = RCT1::GetColour(td4Base.vehicle_colours[i].trim_colour); + td->vehicle_colours[i].Tertiary = RCT1::GetColour(td4Base.vehicle_colours[i].trim_colour); } else { - td->vehicle_additional_colour[i] = colourSchemeCopyDescriptor.colour3; + td->vehicle_colours[i].Tertiary = colourSchemeCopyDescriptor.colour3; } } // Set remaining vehicles to same colour as first vehicle for (size_t i = Limits::MaxTrainsPerRide; i < std::size(td->vehicle_colours); i++) { td->vehicle_colours[i] = td->vehicle_colours[0]; - td->vehicle_additional_colour[i] = td->vehicle_additional_colour[0]; } td->depart_flags = td4Base.depart_flags; diff --git a/src/openrct2/rct12/RCT12.h b/src/openrct2/rct12/RCT12.h index bae74abc8d..a6893e817b 100644 --- a/src/openrct2/rct12/RCT12.h +++ b/src/openrct2/rct12/RCT12.h @@ -844,6 +844,13 @@ struct RCT12ResearchItem }; assert_struct_size(RCT12ResearchItem, 5); +struct RCT12VehicleColour +{ + uint8_t body_colour; + uint8_t trim_colour; +}; +assert_struct_size(RCT12VehicleColour, 2); + #pragma pack(pop) ObjectEntryIndex RCTEntryIndexToOpenRCT2EntryIndex(const RCT12ObjectEntryIndex index); diff --git a/src/openrct2/rct2/RCT2.h b/src/openrct2/rct2/RCT2.h index f16ebd04ff..fba77c10d4 100644 --- a/src/openrct2/rct2/RCT2.h +++ b/src/openrct2/rct2/RCT2.h @@ -13,7 +13,6 @@ #include "../core/FileSystem.hpp" #include "../rct12/RCT12.h" #include "../ride/RideRatings.h" -#include "../ride/VehicleColour.h" #include "Limits.h" #include @@ -77,7 +76,7 @@ namespace RCT2 uint16_t pad_002; // 0x002 uint8_t mode; // 0x004 uint8_t colour_scheme_type; // 0x005 - rct_vehicle_colour vehicle_colours[Limits::MaxTrainsPerRide]; // 0x006 + RCT12VehicleColour vehicle_colours[Limits::MaxTrainsPerRide]; // 0x006 uint8_t pad_046[0x03]; // 0x046, Used to be track colours in RCT1 without expansions // 0 = closed, 1 = open, 2 = test uint8_t status; // 0x049 @@ -338,7 +337,7 @@ namespace RCT2 uint8_t track_flags; // 0x06 }; uint8_t version_and_colour_scheme; // 0x07 0b0000_VVCC - rct_vehicle_colour vehicle_colours[Limits::MaxTrainsPerRide]; // 0x08 + RCT12VehicleColour vehicle_colours[Limits::MaxTrainsPerRide]; // 0x08 union { uint8_t pad_48; @@ -434,7 +433,7 @@ namespace RCT2 int32_t acceleration; // 0x2C uint8_t ride; // 0x30 uint8_t vehicle_type; // 0x31 - rct_vehicle_colour colours; // 0x32 + RCT12VehicleColour colours; // 0x32 union { uint16_t track_progress; // 0x34 diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index 5c165a33d8..9e38afef81 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -1872,7 +1872,9 @@ namespace RCT2 dst->acceleration = src->acceleration; dst->ride = RideId::FromUnderlying(src->ride); dst->vehicle_type = src->vehicle_type; - dst->colours = src->colours; + dst->colours.Body = src->colours.body_colour; + dst->colours.Trim = src->colours.trim_colour; + dst->colours.Tertiary = src->colours_extended; dst->track_progress = src->track_progress; dst->TrackLocation = { src->track_x, src->track_y, src->track_z }; if (src->boat_location.IsNull() || static_cast(ride.mode) != RideMode::BoatHire @@ -1959,7 +1961,6 @@ namespace RCT2 dst->mini_golf_current_animation = MiniGolfAnimation(src->mini_golf_current_animation); dst->mini_golf_flags = src->mini_golf_flags; dst->ride_subtype = RCTEntryIndexToOpenRCT2EntryIndex(src->ride_subtype); - dst->colours_extended = src->colours_extended; dst->seat_rotation = src->seat_rotation; dst->target_seat_rotation = src->target_seat_rotation; dst->IsCrashedVehicle = src->flags & RCT12_SPRITE_FLAGS_IS_CRASHED_VEHICLE_SPRITE; diff --git a/src/openrct2/rct2/T6Exporter.cpp b/src/openrct2/rct2/T6Exporter.cpp index 57014a011d..112105e9a6 100644 --- a/src/openrct2/rct2/T6Exporter.cpp +++ b/src/openrct2/rct2/T6Exporter.cpp @@ -55,7 +55,11 @@ namespace RCT2 tempStream.WriteValue(_trackDesign->flags); tempStream.WriteValue(static_cast(_trackDesign->ride_mode)); tempStream.WriteValue((_trackDesign->colour_scheme & 0x3) | (2 << 2)); - tempStream.WriteArray(_trackDesign->vehicle_colours.data(), Limits::MaxVehicleColours); + for (auto& colour : _trackDesign->vehicle_colours) + { + tempStream.WriteValue(colour.Body); + tempStream.WriteValue(colour.Trim); + } tempStream.WriteValue(0); tempStream.WriteValue(_trackDesign->entrance_style); tempStream.WriteValue(_trackDesign->total_air_time); @@ -86,7 +90,10 @@ namespace RCT2 tempStream.Write(&_trackDesign->vehicle_object.Entry, sizeof(rct_object_entry)); tempStream.WriteValue(_trackDesign->space_required_x); tempStream.WriteValue(_trackDesign->space_required_y); - tempStream.WriteArray(_trackDesign->vehicle_additional_colour, Limits::MaxTrainsPerRide); + for (auto& colour : _trackDesign->vehicle_colours) + { + tempStream.WriteValue(colour.Tertiary); + } tempStream.WriteValue(_trackDesign->lift_hill_speed | (_trackDesign->num_circuits << 5)); if (_trackDesign->type == RIDE_TYPE_MAZE) diff --git a/src/openrct2/rct2/T6Importer.cpp b/src/openrct2/rct2/T6Importer.cpp index 772f726217..9b6f51b6bd 100644 --- a/src/openrct2/rct2/T6Importer.cpp +++ b/src/openrct2/rct2/T6Importer.cpp @@ -88,8 +88,9 @@ namespace RCT2 td->colour_scheme = td6.version_and_colour_scheme & 0x3; for (auto i = 0; i < Limits::MaxTrainsPerRide; ++i) { - td->vehicle_colours[i] = td6.vehicle_colours[i]; - td->vehicle_additional_colour[i] = td6.vehicle_additional_colour[i]; + td->vehicle_colours[i].Body = td6.vehicle_colours[i].body_colour; + td->vehicle_colours[i].Trim = td6.vehicle_colours[i].body_colour; + td->vehicle_colours[i].Tertiary = td6.vehicle_additional_colour[i]; } td->entrance_style = td6.entrance_style; td->total_air_time = td6.total_air_time; diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index ece91b05e3..037fe0f914 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -4787,22 +4787,16 @@ void ride_update_vehicle_colours(Ride* ride) { case RIDE_COLOUR_SCHEME_MODE_ALL_SAME: colours = ride->vehicle_colours[0]; - colours.Tertiary = ride->vehicle_colours[0].Tertiary; break; case RIDE_COLOUR_SCHEME_MODE_DIFFERENT_PER_TRAIN: colours = ride->vehicle_colours[i]; - colours.Tertiary = ride->vehicle_colours[i].Tertiary; break; case RIDE_COLOUR_SCHEME_MODE_DIFFERENT_PER_CAR: colours = ride->vehicle_colours[std::min(carIndex, OpenRCT2::Limits::MaxCarsPerTrain - 1)]; - colours.Tertiary = ride->vehicle_colours[std::min(carIndex, OpenRCT2::Limits::MaxCarsPerTrain - 1)] - .Tertiary; break; } - vehicle->colours.body_colour = colours.Body; - vehicle->colours.trim_colour = colours.Trim; - vehicle->colours_extended = colours.Tertiary; + vehicle->colours = colours; vehicle->Invalidate(); carIndex++; } diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 00f28b76ff..e66aac9171 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -113,9 +113,7 @@ StringId TrackDesign::CreateTrackDesign(TrackDesignState& tds, const Ride& ride) for (int32_t i = 0; i < RCT2::Limits::MaxTrainsPerRide; i++) { - vehicle_colours[i].body_colour = ride.vehicle_colours[i].Body; - vehicle_colours[i].trim_colour = ride.vehicle_colours[i].Trim; - vehicle_additional_colour[i] = ride.vehicle_colours[i].Tertiary; + vehicle_colours[i] = ride.vehicle_colours[i]; } for (int32_t i = 0; i < RCT12::Limits::NumColourSchemes; i++) @@ -608,7 +606,6 @@ void TrackDesign::Serialise(DataSerialiser& stream) stream << DS_TAG(vehicle_object); stream << DS_TAG(space_required_x); stream << DS_TAG(space_required_y); - stream << DS_TAG(vehicle_additional_colour); stream << DS_TAG(lift_hill_speed); stream << DS_TAG(num_circuits); @@ -2014,9 +2011,7 @@ static bool TrackDesignPlacePreview(TrackDesignState& tds, TrackDesign* td6, mon { for (int32_t i = 0; i < RCT12::Limits::MaxVehicleColours; i++) { - ride->vehicle_colours[i].Body = td6->vehicle_colours[i].body_colour; - ride->vehicle_colours[i].Trim = td6->vehicle_colours[i].trim_colour; - ride->vehicle_colours[i].Tertiary = td6->vehicle_additional_colour[i]; + ride->vehicle_colours[i] = td6->vehicle_colours[i]; } } diff --git a/src/openrct2/ride/TrackDesign.h b/src/openrct2/ride/TrackDesign.h index 9abd568ca6..fb282e8979 100644 --- a/src/openrct2/ride/TrackDesign.h +++ b/src/openrct2/ride/TrackDesign.h @@ -15,6 +15,7 @@ #include "../rct12/RCT12.h" #include "../rct2/RCT2.h" #include "../world/Map.h" +#include "VehicleColour.h" #include @@ -106,7 +107,7 @@ struct TrackDesign RideMode ride_mode; uint8_t track_flags; uint8_t colour_scheme; - std::array vehicle_colours; + std::array vehicle_colours; uint8_t entrance_style; uint8_t total_air_time; uint8_t depart_flags; @@ -136,7 +137,6 @@ struct TrackDesign ObjectEntryDescriptor vehicle_object; uint8_t space_required_x; uint8_t space_required_y; - uint8_t vehicle_additional_colour[RCT2::Limits::MaxTrainsPerRide]; uint8_t lift_hill_speed; uint8_t num_circuits; diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 36291aeeaf..89121b4a8e 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -9389,7 +9389,6 @@ void Vehicle::Serialise(DataSerialiser& stream) stream << mini_golf_current_animation; stream << mini_golf_flags; stream << ride_subtype; - stream << colours_extended; stream << seat_rotation; stream << target_seat_rotation; stream << BoatLocation; diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index e78865de69..91bdf5fed2 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -109,7 +109,7 @@ struct Vehicle : EntityBase int32_t acceleration; RideId ride; uint8_t vehicle_type; - rct_vehicle_colour colours; + VehicleColour colours; union { uint16_t track_progress; @@ -204,7 +204,6 @@ struct Vehicle : EntityBase MiniGolfAnimation mini_golf_current_animation; uint8_t mini_golf_flags; ObjectEntryIndex ride_subtype; - uint8_t colours_extended; uint8_t seat_rotation; uint8_t target_seat_rotation; CoordsXY BoatLocation; diff --git a/src/openrct2/ride/VehicleColour.h b/src/openrct2/ride/VehicleColour.h index 9a537e34cb..075d1a1d7f 100644 --- a/src/openrct2/ride/VehicleColour.h +++ b/src/openrct2/ride/VehicleColour.h @@ -11,12 +11,6 @@ #include "../common.h" -struct rct_vehicle_colour -{ - uint8_t body_colour; - uint8_t trim_colour; -}; - struct VehicleColour { uint8_t Body; diff --git a/src/openrct2/ride/VehiclePaint.cpp b/src/openrct2/ride/VehiclePaint.cpp index cf7542d498..bfcf00c24a 100644 --- a/src/openrct2/ride/VehiclePaint.cpp +++ b/src/openrct2/ride/VehiclePaint.cpp @@ -989,7 +989,7 @@ static void vehicle_sprite_paint( baseImageId += vehicle->animation_frame; } - auto imageId = ImageId(baseImageId, vehicle->colours.body_colour, vehicle->colours.trim_colour, vehicle->colours_extended); + auto imageId = ImageId(baseImageId, vehicle->colours.Body, vehicle->colours.Trim, vehicle->colours.Tertiary); if (vehicle->IsGhost()) { imageId = ImageId(baseImageId).WithRemap(FilterPaletteID::Palette44); diff --git a/src/openrct2/ride/coaster/VirginiaReel.cpp b/src/openrct2/ride/coaster/VirginiaReel.cpp index b3278c4397..9e3c8eb38c 100644 --- a/src/openrct2/ride/coaster/VirginiaReel.cpp +++ b/src/openrct2/ride/coaster/VirginiaReel.cpp @@ -189,7 +189,7 @@ void vehicle_visual_virginia_reel( const vehicle_boundbox* bb = &_virginiaReelBoundbox[baseImage_id >> 3]; baseImage_id += carEntry->base_image_id; - int32_t image_id = baseImage_id | SPRITE_ID_PALETTE_COLOUR_2(vehicle->colours.body_colour, vehicle->colours.trim_colour); + int32_t image_id = baseImage_id | SPRITE_ID_PALETTE_COLOUR_2(vehicle->colours.Body, vehicle->colours.Trim); if (vehicle->IsGhost()) { image_id = (image_id & 0x7FFFF) | CONSTRUCTION_MARKER; diff --git a/src/openrct2/ride/gentle/ObservationTower.cpp b/src/openrct2/ride/gentle/ObservationTower.cpp index 33e60e9180..da666ae130 100644 --- a/src/openrct2/ride/gentle/ObservationTower.cpp +++ b/src/openrct2/ride/gentle/ObservationTower.cpp @@ -65,10 +65,8 @@ void vehicle_visual_observation_tower( const CarEntry* carEntry) { auto baseImageId = GetObservationTowerVehicleBaseImageId(vehicle, carEntry, imageDirection); - auto imageId0 = ImageId( - baseImageId + 0, vehicle->colours.body_colour, vehicle->colours.trim_colour, vehicle->colours_extended); - auto imageId1 = ImageId( - baseImageId + 1, vehicle->colours.body_colour, vehicle->colours.trim_colour, vehicle->colours_extended); + auto imageId0 = ImageId(baseImageId + 0, vehicle->colours.Body, vehicle->colours.Trim, vehicle->colours.Tertiary); + auto imageId1 = ImageId(baseImageId + 1, vehicle->colours.Body, vehicle->colours.Trim, vehicle->colours.Tertiary); if (vehicle->IsGhost()) { imageId0 = ImageId(baseImageId + 0).WithRemap(FilterPaletteID::Palette44); diff --git a/src/openrct2/ride/thrill/LaunchedFreefall.cpp b/src/openrct2/ride/thrill/LaunchedFreefall.cpp index 24e38aceb0..9a84aa55d2 100644 --- a/src/openrct2/ride/thrill/LaunchedFreefall.cpp +++ b/src/openrct2/ride/thrill/LaunchedFreefall.cpp @@ -33,7 +33,7 @@ void vehicle_visual_launched_freefall( paint_session& session, int32_t x, int32_t imageDirection, int32_t y, int32_t z, const Vehicle* vehicle, const CarEntry* carEntry) { - auto imageFlags = SPRITE_ID_PALETTE_COLOUR_2(vehicle->colours.body_colour, vehicle->colours.trim_colour); + auto imageFlags = SPRITE_ID_PALETTE_COLOUR_2(vehicle->colours.Body, vehicle->colours.Trim); if (vehicle->IsGhost()) { imageFlags = CONSTRUCTION_MARKER; diff --git a/src/openrct2/ride/thrill/RotoDrop.cpp b/src/openrct2/ride/thrill/RotoDrop.cpp index bcc781a206..c95cdd5595 100644 --- a/src/openrct2/ride/thrill/RotoDrop.cpp +++ b/src/openrct2/ride/thrill/RotoDrop.cpp @@ -39,7 +39,7 @@ void vehicle_visual_roto_drop( { imageDirection = OpenRCT2::Entity::Yaw::YawTo32(imageDirection); - auto imageFlags = SPRITE_ID_PALETTE_COLOUR_2(vehicle->colours.body_colour, vehicle->colours.trim_colour); + auto imageFlags = SPRITE_ID_PALETTE_COLOUR_2(vehicle->colours.Body, vehicle->colours.Trim); if (vehicle->IsGhost()) { imageFlags = CONSTRUCTION_MARKER; diff --git a/src/openrct2/ride/water/RiverRapids.cpp b/src/openrct2/ride/water/RiverRapids.cpp index b3cbb3a58a..aaaf9b49d2 100644 --- a/src/openrct2/ride/water/RiverRapids.cpp +++ b/src/openrct2/ride/water/RiverRapids.cpp @@ -224,7 +224,7 @@ void vehicle_visual_river_rapids( baseImage_id += carEntry->base_image_id; const vehicle_boundbox* bb = &_riverRapidsBoundbox[j]; - image_id = baseImage_id | SPRITE_ID_PALETTE_COLOUR_2(vehicle->colours.body_colour, vehicle->colours.trim_colour); + image_id = baseImage_id | SPRITE_ID_PALETTE_COLOUR_2(vehicle->colours.Body, vehicle->colours.Trim); if (vehicle->IsGhost()) { image_id &= 0x7FFFF; diff --git a/src/openrct2/ride/water/SubmarineRide.cpp b/src/openrct2/ride/water/SubmarineRide.cpp index 58545b6feb..adc64ca89f 100644 --- a/src/openrct2/ride/water/SubmarineRide.cpp +++ b/src/openrct2/ride/water/SubmarineRide.cpp @@ -46,10 +46,8 @@ void vehicle_visual_submarine( const CarEntry* carEntry) { auto baseImageId = SubmarineVehicleGetBaseImageId(vehicle, carEntry, imageDirection); - auto imageId0 = ImageId( - baseImageId + 0, vehicle->colours.body_colour, vehicle->colours.trim_colour, vehicle->colours_extended); - auto imageId1 = ImageId( - baseImageId + 1, vehicle->colours.body_colour, vehicle->colours.trim_colour, vehicle->colours_extended); + auto imageId0 = ImageId(baseImageId + 0, vehicle->colours.Body, vehicle->colours.Trim, vehicle->colours.Tertiary); + auto imageId1 = ImageId(baseImageId + 1, vehicle->colours.Body, vehicle->colours.Trim, vehicle->colours.Tertiary); if (vehicle->IsGhost()) { imageId0 = ImageId(baseImageId + 0).WithRemap(FilterPaletteID::Palette44); diff --git a/src/openrct2/scripting/bindings/entity/ScVehicle.cpp b/src/openrct2/scripting/bindings/entity/ScVehicle.cpp index 6e6ef17473..9e681bd386 100644 --- a/src/openrct2/scripting/bindings/entity/ScVehicle.cpp +++ b/src/openrct2/scripting/bindings/entity/ScVehicle.cpp @@ -337,11 +337,7 @@ namespace OpenRCT2::Scripting auto vehicle = GetVehicle(); if (vehicle != nullptr) { - VehicleColour colours; - colours.Body = vehicle->colours.body_colour; - colours.Trim = vehicle->colours.trim_colour; - colours.Tertiary = vehicle->colours_extended; - return ToDuk(ctx, colours); + return ToDuk(ctx, vehicle->colours); } return ToDuk(ctx, nullptr); } @@ -351,10 +347,7 @@ namespace OpenRCT2::Scripting auto vehicle = GetVehicle(); if (vehicle != nullptr) { - auto colours = FromDuk(value); - vehicle->colours.body_colour = colours.Body; - vehicle->colours.trim_colour = colours.Trim; - vehicle->colours_extended = colours.Tertiary; + vehicle->colours = FromDuk(value); } }