Merge vehicle_colours and vehicle_colours_extended

This commit is contained in:
Ted John 2018-12-31 13:05:44 +00:00
parent d71531fc98
commit 8e6497fc1d
20 changed files with 64 additions and 63 deletions

View File

@ -1021,8 +1021,8 @@ private:
if (_gameVersion < FILE_VERSION_RCT1_LL && dst->type == RIDE_TYPE_MERRY_GO_ROUND)
{
// The merry-go-round in pre-LL versions was always yellow with red
dst->vehicle_colours[0].body_colour = COLOUR_YELLOW;
dst->vehicle_colours[0].trim_colour = COLOUR_BRIGHT_RED;
dst->vehicle_colours[0].Body = COLOUR_YELLOW;
dst->vehicle_colours[0].Trim = COLOUR_BRIGHT_RED;
}
else
{
@ -1033,41 +1033,41 @@ private:
src->vehicle_type);
if (colourSchemeCopyDescriptor.colour1 == COPY_COLOUR_1)
{
dst->vehicle_colours[i].body_colour = RCT1::GetColour(src->vehicle_colours[i].body);
dst->vehicle_colours[i].Body = RCT1::GetColour(src->vehicle_colours[i].body);
}
else if (colourSchemeCopyDescriptor.colour1 == COPY_COLOUR_2)
{
dst->vehicle_colours[i].body_colour = RCT1::GetColour(src->vehicle_colours[i].trim);
dst->vehicle_colours[i].Body = RCT1::GetColour(src->vehicle_colours[i].trim);
}
else
{
dst->vehicle_colours[i].body_colour = colourSchemeCopyDescriptor.colour1;
dst->vehicle_colours[i].Body = colourSchemeCopyDescriptor.colour1;
}
if (colourSchemeCopyDescriptor.colour2 == COPY_COLOUR_1)
{
dst->vehicle_colours[i].trim_colour = RCT1::GetColour(src->vehicle_colours[i].body);
dst->vehicle_colours[i].Trim = RCT1::GetColour(src->vehicle_colours[i].body);
}
else if (colourSchemeCopyDescriptor.colour2 == COPY_COLOUR_2)
{
dst->vehicle_colours[i].trim_colour = RCT1::GetColour(src->vehicle_colours[i].trim);
dst->vehicle_colours[i].Trim = RCT1::GetColour(src->vehicle_colours[i].trim);
}
else
{
dst->vehicle_colours[i].trim_colour = colourSchemeCopyDescriptor.colour2;
dst->vehicle_colours[i].Trim = colourSchemeCopyDescriptor.colour2;
}
if (colourSchemeCopyDescriptor.colour3 == COPY_COLOUR_1)
{
dst->vehicle_colours_extended[i] = RCT1::GetColour(src->vehicle_colours[i].body);
dst->vehicle_colours[i].Ternary = RCT1::GetColour(src->vehicle_colours[i].body);
}
else if (colourSchemeCopyDescriptor.colour3 == COPY_COLOUR_2)
{
dst->vehicle_colours_extended[i] = RCT1::GetColour(src->vehicle_colours[i].trim);
dst->vehicle_colours[i].Ternary = RCT1::GetColour(src->vehicle_colours[i].trim);
}
else
{
dst->vehicle_colours_extended[i] = colourSchemeCopyDescriptor.colour3;
dst->vehicle_colours[i].Ternary = colourSchemeCopyDescriptor.colour3;
}
}
}

View File

@ -485,7 +485,8 @@ void S6Exporter::ExportRide(rct2_ride* dst, const Ride* src)
for (uint8_t i = 0; i < RCT2_MAX_CARS_PER_TRAIN; i++)
{
dst->vehicle_colours[i] = src->vehicle_colours[i];
dst->vehicle_colours[i].body_colour = src->vehicle_colours[i].Body;
dst->vehicle_colours[i].trim_colour = src->vehicle_colours[i].Trim;
}
// pad_046;
@ -678,7 +679,7 @@ void S6Exporter::ExportRide(rct2_ride* dst, const Ride* src)
for (uint8_t i = 0; i < RCT2_MAX_CARS_PER_TRAIN; i++)
{
dst->vehicle_colours_extended[i] = src->vehicle_colours_extended[i];
dst->vehicle_colours_extended[i] = src->vehicle_colours[i].Ternary;
}
dst->total_air_time = src->total_air_time;

View File

@ -527,7 +527,8 @@ public:
for (uint8_t i = 0; i < RCT2_MAX_CARS_PER_TRAIN; i++)
{
dst->vehicle_colours[i] = src->vehicle_colours[i];
dst->vehicle_colours[i].Body = src->vehicle_colours[i].body_colour;
dst->vehicle_colours[i].Trim = src->vehicle_colours[i].trim_colour;
}
// pad_046;
@ -734,7 +735,7 @@ public:
for (uint8_t i = 0; i < RCT2_MAX_CARS_PER_TRAIN; i++)
{
dst->vehicle_colours_extended[i] = src->vehicle_colours_extended[i];
dst->vehicle_colours[i].Ternary = src->vehicle_colours_extended[i];
}
dst->total_air_time = src->total_air_time;

View File

@ -3325,9 +3325,9 @@ vehicle_colour ride_get_vehicle_colour(Ride* ride, int32_t vehicleIndex)
vehicleIndex = 31;
}
result.main = ride->vehicle_colours[vehicleIndex].body_colour;
result.additional_1 = ride->vehicle_colours[vehicleIndex].trim_colour;
result.additional_2 = ride->vehicle_colours_extended[vehicleIndex];
result.main = ride->vehicle_colours[vehicleIndex].Body;
result.additional_1 = ride->vehicle_colours[vehicleIndex].Trim;
result.additional_2 = ride->vehicle_colours[vehicleIndex].Ternary;
return result;
}
@ -3339,7 +3339,7 @@ static bool ride_does_vehicle_colour_exist(uint8_t ride_sub_type, vehicle_colour
{
if (ride2->subtype != ride_sub_type)
continue;
if (ride2->vehicle_colours[0].body_colour != vehicleColour->main)
if (ride2->vehicle_colours[0].Body != vehicleColour->main)
continue;
return false;
}
@ -3392,9 +3392,9 @@ void ride_set_vehicle_colours_to_random_preset(Ride* ride, uint8_t preset_index)
ride->colour_scheme_type = RIDE_COLOUR_SCHEME_ALL_SAME;
vehicle_colour* preset = &presetList->list[preset_index];
ride->vehicle_colours[0].body_colour = preset->main;
ride->vehicle_colours[0].trim_colour = preset->additional_1;
ride->vehicle_colours_extended[0] = preset->additional_2;
ride->vehicle_colours[0].Body = preset->main;
ride->vehicle_colours[0].Trim = preset->additional_1;
ride->vehicle_colours[0].Ternary = preset->additional_2;
}
else
{
@ -3403,9 +3403,9 @@ void ride_set_vehicle_colours_to_random_preset(Ride* ride, uint8_t preset_index)
for (uint32_t i = 0; i < count; i++)
{
vehicle_colour* preset = &presetList->list[i];
ride->vehicle_colours[i].body_colour = preset->main;
ride->vehicle_colours[i].trim_colour = preset->additional_1;
ride->vehicle_colours_extended[i] = preset->additional_2;
ride->vehicle_colours[i].Body = preset->main;
ride->vehicle_colours[i].Trim = preset->additional_1;
ride->vehicle_colours[i].Ternary = preset->additional_2;
}
}
}
@ -6547,7 +6547,6 @@ void game_command_set_ride_appearance(
for (uint32_t i = 1; i < std::size(ride->vehicle_colours); i++)
{
ride->vehicle_colours[i] = ride->vehicle_colours[0];
ride->vehicle_colours_extended[i] = ride->vehicle_colours_extended[0];
}
ride_update_vehicle_colours(ride_id);
}
@ -6561,7 +6560,7 @@ void game_command_set_ride_appearance(
}
break;
case 7:
if (index >= std::size(ride->vehicle_colours_extended))
if (index >= std::size(ride->vehicle_colours))
{
log_warning("Invalid game command, index %d out of bounds", index);
*ebx = MONEY32_UNDEFINED;
@ -6571,7 +6570,7 @@ void game_command_set_ride_appearance(
{
if (apply)
{
ride->vehicle_colours_extended[index] = value;
ride->vehicle_colours[index].Ternary = value;
ride_update_vehicle_colours(ride_id);
}
}
@ -7492,7 +7491,7 @@ static void ride_update_vehicle_colours(int32_t rideIndex)
{
int32_t carIndex = 0;
uint16_t spriteIndex = ride->vehicles[i];
rct_vehicle_colour colours = {};
VehicleColour colours = {};
uint8_t coloursExtended = 0;
while (spriteIndex != SPRITE_INDEX_NULL)
@ -7502,19 +7501,20 @@ static void ride_update_vehicle_colours(int32_t rideIndex)
{
case RIDE_COLOUR_SCHEME_ALL_SAME:
colours = ride->vehicle_colours[0];
coloursExtended = ride->vehicle_colours_extended[0];
coloursExtended = ride->vehicle_colours[0].Ternary;
break;
case RIDE_COLOUR_SCHEME_DIFFERENT_PER_TRAIN:
colours = ride->vehicle_colours[i];
coloursExtended = ride->vehicle_colours_extended[i];
coloursExtended = ride->vehicle_colours[i].Ternary;
break;
case RIDE_COLOUR_SCHEME_DIFFERENT_PER_CAR:
colours = ride->vehicle_colours[std::min(carIndex, MAX_CARS_PER_TRAIN - 1)];
coloursExtended = ride->vehicle_colours_extended[std::min(carIndex, MAX_CARS_PER_TRAIN - 1)];
coloursExtended = ride->vehicle_colours[std::min(carIndex, MAX_CARS_PER_TRAIN - 1)].Ternary;
break;
}
vehicle->colours = colours;
vehicle->colours.body_colour = colours.Body;
vehicle->colours.trim_colour = colours.Trim;
vehicle->colours_extended = coloursExtended;
invalidate_sprite_2((rct_sprite*)vehicle);
spriteIndex = vehicle->next_vehicle_on_train;

View File

@ -150,7 +150,7 @@ struct Ride
uint8_t subtype;
uint8_t mode;
uint8_t colour_scheme_type;
rct_vehicle_colour vehicle_colours[MAX_CARS_PER_TRAIN];
VehicleColour vehicle_colours[MAX_CARS_PER_TRAIN];
// 0 = closed, 1 = open, 2 = test
uint8_t status;
rct_string_id name;
@ -333,7 +333,6 @@ struct Ride
uint8_t lift_hill_speed;
uint16_t guests_favourite;
uint32_t lifecycle_flags;
uint8_t vehicle_colours_extended[MAX_CARS_PER_TRAIN];
uint16_t total_air_time;
uint8_t current_test_station;
uint8_t num_circuits;

View File

@ -1757,8 +1757,9 @@ static bool track_design_place_preview(rct_track_td6* td6, money32* cost, uint8_
{
for (int32_t i = 0; i < RCT12_MAX_VEHICLE_COLOURS; i++)
{
ride->vehicle_colours[i] = td6->vehicle_colours[i];
ride->vehicle_colours_extended[i] = td6->vehicle_additional_colour[i];
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].Ternary = td6->vehicle_additional_colour[i];
}
}
@ -1984,9 +1985,9 @@ static money32 place_track_design(int16_t x, int16_t y, int16_t z, uint8_t flags
for (int32_t i = 0; i < MAX_VEHICLES_PER_RIDE; i++)
{
ride->vehicle_colours[i].body_colour = td6->vehicle_colours[i].body_colour;
ride->vehicle_colours[i].trim_colour = td6->vehicle_colours[i].trim_colour;
ride->vehicle_colours_extended[i] = td6->vehicle_additional_colour[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].Ternary = td6->vehicle_additional_colour[i];
}
ride_set_name(rideIndex, td6->name);

View File

@ -770,8 +770,9 @@ static rct_track_td6* track_design_save_to_td6(uint8_t rideIndex)
for (int32_t i = 0; i < RCT12_MAX_VEHICLES_PER_RIDE; i++)
{
td6->vehicle_colours[i] = ride->vehicle_colours[i];
td6->vehicle_additional_colour[i] = ride->vehicle_colours_extended[i];
td6->vehicle_colours[i].body_colour = ride->vehicle_colours[i].Body;
td6->vehicle_colours[i].trim_colour = ride->vehicle_colours[i].Trim;
td6->vehicle_additional_colour[i] = ride->vehicle_colours[i].Ternary;
}
for (int32_t i = 0; i < RCT12_NUM_COLOUR_SCHEMES; i++)

View File

@ -23,6 +23,13 @@ struct rct_vehicle_colour
uint8_t trim_colour;
};
struct VehicleColour
{
uint8_t Body;
uint8_t Trim;
uint8_t Ternary;
};
#ifdef __TESTPAINT__
# pragma pack(push, 1)
#endif // __TESTPAINT__

View File

@ -35,8 +35,7 @@ static void paint_circus_show_tent(
uint32_t imageId = rideEntry->vehicles[0].base_image_id;
if (imageColourFlags == IMAGE_TYPE_REMAP)
{
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(
ride->vehicle_colours[0].body_colour, ride->vehicle_colours[0].trim_colour);
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].Body, ride->vehicle_colours[0].Trim);
imageId += direction;
}

View File

@ -82,8 +82,7 @@ static void paint_ferris_wheel_structure(
uint32_t imageColourFlags = session->TrackColours[SCHEME_MISC];
if (imageColourFlags == IMAGE_TYPE_REMAP)
{
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(
ride->vehicle_colours[0].body_colour, ride->vehicle_colours[0].trim_colour);
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].Body, ride->vehicle_colours[0].Trim);
}
ferris_wheel_bound_box boundBox = ferris_wheel_data[direction];

View File

@ -65,8 +65,7 @@ static void paint_merry_go_round_structure(
uint32_t imageColourFlags = session->TrackColours[SCHEME_MISC];
if (imageColourFlags == IMAGE_TYPE_REMAP)
{
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(
ride->vehicle_colours[0].body_colour, ride->vehicle_colours[0].trim_colour);
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].Body, ride->vehicle_colours[0].Trim);
}
uint32_t imageId = (baseImageId + imageOffset) | imageColourFlags;

View File

@ -63,7 +63,7 @@ static void paint_space_rings_structure(paint_session* session, Ride* ride, uint
if (imageColourFlags == IMAGE_TYPE_REMAP)
{
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(
ride->vehicle_colours[vehicleIndex].body_colour, ride->vehicle_colours[vehicleIndex].trim_colour);
ride->vehicle_colours[vehicleIndex].Body, ride->vehicle_colours[vehicleIndex].Trim);
}
uint32_t imageId = (baseImageId + frameNum) | imageColourFlags;

View File

@ -39,8 +39,7 @@ static void paint_3d_cinema_structure(
uint32_t imageColourFlags = session->TrackColours[SCHEME_MISC];
if (imageColourFlags == IMAGE_TYPE_REMAP)
{
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(
ride->vehicle_colours[0].body_colour, ride->vehicle_colours[0].trim_colour);
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].Body, ride->vehicle_colours[0].Trim);
}
uint32_t imageId = (rideEntry->vehicles[0].base_image_id + direction) | imageColourFlags;

View File

@ -48,8 +48,7 @@ static void paint_enterprise_structure(
uint32_t imageColourFlags = session->TrackColours[SCHEME_MISC];
if (imageColourFlags == IMAGE_TYPE_REMAP)
{
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(
ride->vehicle_colours[0].body_colour, ride->vehicle_colours[0].trim_colour);
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].Body, ride->vehicle_colours[0].Trim);
}
uint32_t imageId = (baseImageId + imageOffset) | imageColourFlags;

View File

@ -129,8 +129,7 @@ static void paint_magic_carpet_vehicle(
uint32_t imageColourFlags = session->TrackColours[SCHEME_MISC];
if (imageColourFlags == IMAGE_TYPE_REMAP)
{
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(
ride->vehicle_colours[0].body_colour, ride->vehicle_colours[0].trim_colour);
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].Body, ride->vehicle_colours[0].Trim);
}
int8_t directionalOffset = MagicCarpetOscillationXY[swingImageId];

View File

@ -66,8 +66,7 @@ static void paint_motionsimulator_vehicle(
uint32_t imageColourFlags = session->TrackColours[SCHEME_MISC];
if (imageColourFlags == IMAGE_TYPE_REMAP)
{
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(
ride->vehicle_colours[0].body_colour, ride->vehicle_colours[0].trim_colour);
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].Body, ride->vehicle_colours[0].Trim);
}
simulatorImageId |= imageColourFlags;

View File

@ -100,8 +100,7 @@ static void paint_pirate_ship_structure(
uint32_t imageColourFlags = session->TrackColours[SCHEME_MISC];
if (imageColourFlags == IMAGE_TYPE_REMAP)
{
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(
ride->vehicle_colours[0].body_colour, ride->vehicle_colours[0].trim_colour);
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].Body, ride->vehicle_colours[0].Trim);
}
pirate_ship_bound_box bounds = pirate_ship_data[direction];

View File

@ -90,7 +90,7 @@ static void paint_swinging_inverter_ship_structure(
uint32_t colourFlags = session->TrackColours[SCHEME_MISC];
if (colourFlags == IMAGE_TYPE_REMAP)
{
colourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].body_colour, ride->vehicle_colours[0].trim_colour);
colourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].Body, ride->vehicle_colours[0].Trim);
}
swinging_inverter_ship_bound_box boundBox = swinging_inverter_ship_bounds[direction];

View File

@ -135,7 +135,7 @@ static void top_spin_paint_vehicle(
image_id = session->TrackColours[SCHEME_MISC];
if (image_id == IMAGE_TYPE_REMAP)
{
image_id = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].body_colour, ride->vehicle_colours[0].trim_colour);
image_id = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].Body, ride->vehicle_colours[0].Trim);
}
image_id += seatImageId;

View File

@ -51,8 +51,7 @@ static void paint_twist_structure(
uint32_t imageColourFlags = session->TrackColours[SCHEME_MISC];
if (imageColourFlags == IMAGE_TYPE_REMAP)
{
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(
ride->vehicle_colours[0].body_colour, ride->vehicle_colours[0].trim_colour);
imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[0].Body, ride->vehicle_colours[0].Trim);
}
uint32_t structureFrameNum = frameNum % 24;