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);
}
}