1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-21 05:53:02 +01:00

Add option to randomise train or vehicle colours (#22206)

This commit is contained in:
Arnold Zhou
2024-08-17 21:55:32 +10:00
committed by GitHub
parent 5f37ba6615
commit cbaf01658a
4 changed files with 71 additions and 0 deletions

View File

@@ -3730,6 +3730,8 @@ STR_6657 :Land Not Owned
STR_6658 :Set land to be not owned by the park, nor available for purchase
STR_6659 :Guests ignore prices
STR_6660 :Guests will ignore the price of rides and stalls.
STR_6661 :Randomise all
STR_6662 :Randomise colours for every train or vehicle.
#############
# Scenarios #

View File

@@ -3,6 +3,7 @@
- Feature: [#15750] Allow using different types of park entrance in one park.
- Feature: [#20942] Allow removing all park fences from the Cheats window.
- Feature: [#21675] Guests ignore price limit cheat.
- Feature: [#22206] Add option to randomise train or vehicle colours.
- Feature: [#22392] [Plugin] Expose ride vehicles spin to the plugin API.
- Feature: [#22414] Finance graphs can be resized.
- Change: [#21659] Increase the Hybrid Roller Coasters maximum lift speed to 17 km/h (11 mph).

View File

@@ -1478,6 +1478,8 @@ namespace OpenRCT2
STR_QUEUE_TIME_MINUTE = 1359,
STR_QUEUE_TIME_MINUTES = 1360,
STR_RANDOM_COLOUR = 6501,
STR_RANDOMISE_VEHICLE_COLOURS = 6661,
STR_RANDOMISE_VEHICLE_COLOURS_TIP = 6662,
STR_RATING_EXTREME = 2376,
STR_RATING_HIGH = 2374,
STR_RATING_LOW = 2372,

View File

@@ -194,6 +194,7 @@ enum {
WIDX_VEHICLE_TRIM_COLOUR,
WIDX_VEHICLE_TERTIARY_COLOUR,
WIDX_SELL_ITEM_RANDOM_COLOUR_CHECKBOX,
WIDX_RANDOMISE_VEHICLE_COLOURS,
WIDX_PLAY_MUSIC = 14,
WIDX_MUSIC,
@@ -338,6 +339,7 @@ static Widget _colourWidgets[] = {
MakeWidget({ 99, 190}, { 12, 12}, WindowWidgetType::ColourBtn, WindowColour::Secondary, 0xFFFFFFFF, STR_SELECT_ADDITIONAL_COLOUR_1_TIP ),
MakeWidget({119, 190}, { 12, 12}, WindowWidgetType::ColourBtn, WindowColour::Secondary, 0xFFFFFFFF, STR_SELECT_ADDITIONAL_COLOUR_2_TIP ),
MakeWidget({100, 74}, {239, 12}, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_RANDOM_COLOUR ),
MakeWidget({139, 190}, {110, 12}, WindowWidgetType::Button, WindowColour::Secondary, STR_RANDOMISE_VEHICLE_COLOURS, STR_RANDOMISE_VEHICLE_COLOURS_TIP ),
kWidgetsEnd,
};
@@ -4157,6 +4159,7 @@ static_assert(std::size(RatingNames) == 6);
ToolSet(*this, WIDX_PAINT_INDIVIDUAL_AREA, Tool::PaintDown);
break;
case WIDX_SELL_ITEM_RANDOM_COLOUR_CHECKBOX:
{
auto ride = GetRide(rideId);
if (ride != nullptr)
{
@@ -4166,6 +4169,61 @@ static_assert(std::size(RatingNames) == 6);
GameActions::Execute(&rideSetAppearanceAction);
}
break;
}
case WIDX_RANDOMISE_VEHICLE_COLOURS:
{
auto ride = GetRide(rideId);
if (ride == nullptr)
return;
auto rideEntry = ride->GetRideEntry();
if (rideEntry == nullptr)
return;
bool allowChangingTrimColour = false;
bool allowChangingTertiaryColour = false;
for (int32_t i = 0; i < ride->num_cars_per_train; i++)
{
uint8_t vehicleTypeIndex = RideEntryGetVehicleAtPosition(ride->subtype, ride->num_cars_per_train, i);
if (rideEntry->Cars[vehicleTypeIndex].flags & CAR_ENTRY_FLAG_ENABLE_TRIM_COLOUR)
{
allowChangingTrimColour = true;
}
if (rideEntry->Cars[vehicleTypeIndex].flags & CAR_ENTRY_FLAG_ENABLE_TERTIARY_COLOUR)
{
allowChangingTertiaryColour = true;
}
}
int32_t numItems = ride->NumTrains;
if (ride->vehicleColourSettings != VehicleColourSettings::perTrain)
numItems = ride->num_cars_per_train;
uint16_t i, colour;
for (i = 0; i < numItems; i++)
{
colour = UtilRand() & COLOUR_NUM_NORMAL;
auto vehicleSetBodyColourAction = RideSetAppearanceAction(
rideId, RideSetAppearanceType::VehicleColourBody, colour, i);
GameActions::Execute(&vehicleSetBodyColourAction);
if (allowChangingTrimColour)
{
colour = UtilRand() & COLOUR_NUM_NORMAL;
auto vehicleSetTrimColourAction = RideSetAppearanceAction(
rideId, RideSetAppearanceType::VehicleColourTrim, colour, i);
GameActions::Execute(&vehicleSetTrimColourAction);
if (allowChangingTertiaryColour)
{
colour = UtilRand() & COLOUR_NUM_NORMAL;
auto vehicleSetTertiaryColourAction = RideSetAppearanceAction(
rideId, RideSetAppearanceType::VehicleColourTertiary, colour, i);
GameActions::Execute(&vehicleSetTertiaryColourAction);
}
}
}
break;
}
}
}
@@ -4557,7 +4615,14 @@ static_assert(std::size(RatingNames) == 6);
&& ride->GetRideTypeDescriptor().HasFlag(RtdFlag::hasVehicleColours))
{
if (ride->vehicleColourSettings == VehicleColourSettings::same)
{
_vehicleIndex = 0;
widgets[WIDX_RANDOMISE_VEHICLE_COLOURS].type = WindowWidgetType::Empty;
}
else
{
widgets[WIDX_RANDOMISE_VEHICLE_COLOURS].type = WindowWidgetType::Button;
}
vehicleColour = RideGetVehicleColour(*ride, _vehicleIndex);
@@ -4647,6 +4712,7 @@ static_assert(std::size(RatingNames) == 6);
widgets[WIDX_VEHICLE_BODY_COLOUR].type = WindowWidgetType::Empty;
widgets[WIDX_VEHICLE_TRIM_COLOUR].type = WindowWidgetType::Empty;
widgets[WIDX_VEHICLE_TERTIARY_COLOUR].type = WindowWidgetType::Empty;
widgets[WIDX_RANDOMISE_VEHICLE_COLOURS].type = WindowWidgetType::Empty;
}
ft.Rewind();