Rework rct_vehicle_colour (#16051)

* Remove rct_vehicle_colour and replace with VehicleColour

* Update network version

* Update replay version
This commit is contained in:
Duncan 2022-08-13 20:30:30 +01:00 committed by GitHub
parent 49215a52cf
commit adc51ad9aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 88 additions and 105 deletions

View File

@ -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")

View File

@ -47,8 +47,8 @@
<TitleSequencesSha1>4ab0065e5a4d9f9c77d94718bbdfcfcd5a389da0</TitleSequencesSha1>
<ObjectsUrl>https://github.com/OpenRCT2/objects/releases/download/v1.3.3/objects.zip</ObjectsUrl>
<ObjectsSha1>ef039e27d63398bde924848e36c72e86c59431c6</ObjectsSha1>
<ReplaysUrl>https://github.com/OpenRCT2/replays/releases/download/v0.0.68/replays.zip</ReplaysUrl>
<ReplaysSha1>FC8EFE3FCA71F75D79728494ACC42DB49B18B529</ReplaysSha1>
<ReplaysUrl>https://github.com/OpenRCT2/replays/releases/download/v0.0.69/replays.zip</ReplaysUrl>
<ReplaysSha1>3EC20AA2C90FDEEB08C26B6DA6D111C9C5C9B694</ReplaysSha1>
</PropertyGroup>
<ItemGroup>

View File

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

View File

@ -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)

View File

@ -773,22 +773,24 @@ template<> struct DataSerializerTraits_t<TrackDesignSceneryElement>
}
};
template<> struct DataSerializerTraits_t<rct_vehicle_colour>
template<> struct DataSerializerTraits_t<VehicleColour>
{
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));
}
};

View File

@ -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<CrashSplashParticle>() const
*
* rct2: 0x006735A1
*/
void VehicleCrashParticle::Create(rct_vehicle_colour colours, const CoordsXYZ& vehiclePos)
void VehicleCrashParticle::Create(VehicleColour& colours, const CoordsXYZ& vehiclePos)
{
VehicleCrashParticle* sprite = CreateEntity<VehicleCrashParticle>();
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;

View File

@ -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;

View File

@ -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;

View File

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

View File

@ -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

View File

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

View File

@ -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;

View File

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

View File

@ -13,7 +13,6 @@
#include "../core/FileSystem.hpp"
#include "../rct12/RCT12.h"
#include "../ride/RideRatings.h"
#include "../ride/VehicleColour.h"
#include "Limits.h"
#include <tuple>
@ -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

View File

@ -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<RideMode>(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;

View File

@ -55,7 +55,11 @@ namespace RCT2
tempStream.WriteValue<uint32_t>(_trackDesign->flags);
tempStream.WriteValue<uint8_t>(static_cast<uint8_t>(_trackDesign->ride_mode));
tempStream.WriteValue<uint8_t>((_trackDesign->colour_scheme & 0x3) | (2 << 2));
tempStream.WriteArray(_trackDesign->vehicle_colours.data(), Limits::MaxVehicleColours);
for (auto& colour : _trackDesign->vehicle_colours)
{
tempStream.WriteValue<uint8_t>(colour.Body);
tempStream.WriteValue<uint8_t>(colour.Trim);
}
tempStream.WriteValue<uint8_t>(0);
tempStream.WriteValue<uint8_t>(_trackDesign->entrance_style);
tempStream.WriteValue<uint8_t>(_trackDesign->total_air_time);
@ -86,7 +90,10 @@ namespace RCT2
tempStream.Write(&_trackDesign->vehicle_object.Entry, sizeof(rct_object_entry));
tempStream.WriteValue<uint8_t>(_trackDesign->space_required_x);
tempStream.WriteValue<uint8_t>(_trackDesign->space_required_y);
tempStream.WriteArray(_trackDesign->vehicle_additional_colour, Limits::MaxTrainsPerRide);
for (auto& colour : _trackDesign->vehicle_colours)
{
tempStream.WriteValue<uint8_t>(colour.Tertiary);
}
tempStream.WriteValue<uint8_t>(_trackDesign->lift_hill_speed | (_trackDesign->num_circuits << 5));
if (_trackDesign->type == RIDE_TYPE_MAZE)

View File

@ -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;

View File

@ -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++;
}

View File

@ -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];
}
}

View File

@ -15,6 +15,7 @@
#include "../rct12/RCT12.h"
#include "../rct2/RCT2.h"
#include "../world/Map.h"
#include "VehicleColour.h"
#include <memory>
@ -106,7 +107,7 @@ struct TrackDesign
RideMode ride_mode;
uint8_t track_flags;
uint8_t colour_scheme;
std::array<rct_vehicle_colour, RCT2::Limits::MaxTrainsPerRide> vehicle_colours;
std::array<VehicleColour, RCT2::Limits::MaxTrainsPerRide> 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;

View File

@ -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;

View File

@ -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;

View File

@ -11,12 +11,6 @@
#include "../common.h"
struct rct_vehicle_colour
{
uint8_t body_colour;
uint8_t trim_colour;
};
struct VehicleColour
{
uint8_t Body;

View File

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

View File

@ -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;

View File

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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

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

View File

@ -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<VehicleColour>(ctx, colours);
return ToDuk<VehicleColour>(ctx, vehicle->colours);
}
return ToDuk(ctx, nullptr);
}
@ -351,10 +347,7 @@ namespace OpenRCT2::Scripting
auto vehicle = GetVehicle();
if (vehicle != nullptr)
{
auto colours = FromDuk<VehicleColour>(value);
vehicle->colours.body_colour = colours.Body;
vehicle->colours.trim_colour = colours.Trim;
vehicle->colours_extended = colours.Tertiary;
vehicle->colours = FromDuk<VehicleColour>(value);
}
}