mirror of https://github.com/OpenRCT2/OpenRCT2.git
Rework rct_vehicle_colour (#16051)
* Remove rct_vehicle_colour and replace with VehicleColour * Update network version * Update replay version
This commit is contained in:
parent
49215a52cf
commit
adc51ad9aa
|
@ -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")
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -11,12 +11,6 @@
|
|||
|
||||
#include "../common.h"
|
||||
|
||||
struct rct_vehicle_colour
|
||||
{
|
||||
uint8_t body_colour;
|
||||
uint8_t trim_colour;
|
||||
};
|
||||
|
||||
struct VehicleColour
|
||||
{
|
||||
uint8_t Body;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue