diff --git a/CMakeLists.txt b/CMakeLists.txt
index 76a17f2438..95b962a9fc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -64,9 +64,9 @@ set(TITLE_SEQUENCE_VERSION "0.4.0")
set(TITLE_SEQUENCE_URL "https://github.com/OpenRCT2/title-sequences/releases/download/v${TITLE_SEQUENCE_VERSION}/title-sequences.zip")
set(TITLE_SEQUENCE_SHA1 "4ab0065e5a4d9f9c77d94718bbdfcfcd5a389da0")
-set(OBJECTS_VERSION "1.3.7")
+set(OBJECTS_VERSION "1.3.8")
set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v${OBJECTS_VERSION}/objects.zip")
-set(OBJECTS_SHA1 "82930d549e0b3c3bce29718d5390c5cd474d0f28")
+set(OBJECTS_SHA1 "2888092aab93df15bb78c4c910b13c33b1e318ef")
set(OPENSFX_VERSION "1.0.1")
set(OPENSFX_URL "https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v${OPENSFX_VERSION}/opensound.zip")
diff --git a/distribution/changelog.txt b/distribution/changelog.txt
index 33b1aa6835..f5b30ce64f 100644
--- a/distribution/changelog.txt
+++ b/distribution/changelog.txt
@@ -14,6 +14,7 @@
- Improved: [#19044] Added special thanks to RMC and Wiegand to the About page.
- Change: [#19018] Renamed actions to fit the naming scheme.
- Change: [#19091] [Plugin] Add game action information to callback arguments of custom actions.
+- Fix: [#474] Mini golf window shows more players than there actually are (original bug).
- Fix: [#18467] “Selected only” Object Selection filter is active in Track Designs Manager, and cannot be toggled.
- Fix: [#18905] Ride Construction window theme is not applied correctly.
- Fix: [#18911] Mini Golf station does not draw correctly from all angles.
diff --git a/openrct2.proj b/openrct2.proj
index 87bae6926c..7c512c6f98 100644
--- a/openrct2.proj
+++ b/openrct2.proj
@@ -45,8 +45,8 @@
f3a03c2e7b610fefa28d6962da10144f6324078d
https://github.com/OpenRCT2/title-sequences/releases/download/v0.4.0/title-sequences.zip
4ab0065e5a4d9f9c77d94718bbdfcfcd5a389da0
- https://github.com/OpenRCT2/objects/releases/download/v1.3.7/objects.zip
- 82930d549e0b3c3bce29718d5390c5cd474d0f28
+ https://github.com/OpenRCT2/objects/releases/download/v1.3.8/objects.zip
+ 2888092aab93df15bb78c4c910b13c33b1e318ef
https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v1.0.1/opensound.zip
8f04aea33f8034131c3069f6accacce0d94f80c1
https://github.com/OpenRCT2/OpenMusic/releases/download/v1.0.1/openmusic.zip
diff --git a/shell.nix b/shell.nix
index c74d360ca6..25c54be2a8 100644
--- a/shell.nix
+++ b/shell.nix
@@ -15,8 +15,8 @@ let
objects-src = pkgs.fetchFromGitHub {
owner = "OpenRCT2";
repo = "objects";
- rev = "v1.3.7";
- sha256 = "d6be9743c68f233674f5549204637b1f0304d7567a816d18e3f1576500a51d38";
+ rev = "v1.3.8";
+ sha256 = "84a95590d13a753b1d239f7f06c8d121e36fd28694b21f33646518e2012904ae";
};
title-sequences-src = pkgs.fetchFromGitHub {
diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp
index 8e0fc06d34..c8ac301c96 100644
--- a/src/openrct2-ui/windows/Ride.cpp
+++ b/src/openrct2-ui/windows/Ride.cpp
@@ -1724,6 +1724,33 @@ static void WindowRideMainResize(rct_window* w)
WindowRideInitViewport(w);
}
+static size_t GetNumPeepsInTrain(const Ride& ride, int32_t trainIndex)
+{
+ auto numPeepsInTrain = 0;
+ const auto* vehicle = TryGetVehicle(ride.vehicles[trainIndex]);
+ while (vehicle != nullptr)
+ {
+ numPeepsInTrain += vehicle->num_peeps;
+ vehicle = TryGetVehicle(vehicle->next_vehicle_on_train);
+ }
+ return numPeepsInTrain;
+}
+
+static bool TrainMustBeHidden(const Ride& ride, int32_t trainIndex)
+{
+ if (!(ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK))
+ return true;
+
+ const auto* rideEntry = ride.GetRideEntry();
+ if (rideEntry == nullptr)
+ return false;
+
+ if (!(rideEntry->flags & RIDE_ENTRY_FLAG_HIDE_EMPTY_TRAINS))
+ return false;
+
+ return GetNumPeepsInTrain(ride, trainIndex) == 0;
+}
+
/**
*
* rct2: 0x006AF825
@@ -1735,8 +1762,10 @@ static void WindowRideShowViewDropdown(rct_window* w, Widget* widget)
if (ride == nullptr)
return;
+ const auto& rtd = ride->GetRideTypeDescriptor();
+
int32_t numItems = 1;
- if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES))
+ if (!rtd.HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES))
{
numItems += ride->num_stations;
numItems += ride->NumTrains;
@@ -1751,14 +1780,16 @@ static void WindowRideShowViewDropdown(rct_window* w, Widget* widget)
gDropdownItems[0].Args = STR_OVERALL_VIEW;
int32_t currentItem = 1;
- const auto& rtd = ride->GetRideTypeDescriptor();
-
// Vehicles
int32_t name = GetRideComponentName(rtd.NameConvention.vehicle).number;
- for (int32_t i = 1; i <= ride->NumTrains; i++)
+ for (int32_t i = 0; i < ride->NumTrains; i++)
{
gDropdownItems[currentItem].Format = STR_DROPDOWN_MENU_LABEL;
gDropdownItems[currentItem].Args = name | (currentItem << 16);
+ if (TrainMustBeHidden(*ride, i))
+ {
+ Dropdown::SetDisabled(currentItem, true);
+ }
currentItem++;
}
@@ -1771,16 +1802,6 @@ static void WindowRideShowViewDropdown(rct_window* w, Widget* widget)
currentItem++;
}
- // Set highlighted item
- if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK))
- {
- for (int32_t i = 0; i < ride->NumTrains; i++)
- {
- // The +1 is to skip 'Overall view'
- Dropdown::SetDisabled(i + 1, true);
- }
- }
-
// Set checked item
Dropdown::SetChecked(w->ride.view, true);
}
diff --git a/src/openrct2/object/RideObject.cpp b/src/openrct2/object/RideObject.cpp
index ac225b265e..9f17cd30f7 100644
--- a/src/openrct2/object/RideObject.cpp
+++ b/src/openrct2/object/RideObject.cpp
@@ -561,6 +561,7 @@ void RideObject::ReadJson(IReadObjectContext* context, json_t& root)
{ "noCollisionCrashes", RIDE_ENTRY_FLAG_DISABLE_COLLISION_CRASHES },
{ "disablePainting", RIDE_ENTRY_FLAG_DISABLE_COLOUR_TAB },
{ "riderControlsSpeed", RIDE_ENTRY_FLAG_RIDER_CONTROLS_SPEED },
+ { "hideEmptyTrains", RIDE_ENTRY_FLAG_HIDE_EMPTY_TRAINS },
});
}
diff --git a/src/openrct2/rct1/Tables.cpp b/src/openrct2/rct1/Tables.cpp
index 4f572d3642..40d3400b28 100644
--- a/src/openrct2/rct1/Tables.cpp
+++ b/src/openrct2/rct1/Tables.cpp
@@ -719,10 +719,10 @@ namespace RCT1
"rct2.ride.ding1", // RCT1_RIDE_TYPE_WATER_SLIDE
"rct2.ride.amt1", // RCT1_RIDE_TYPE_MINE_TRAIN_ROLLER_COASTER
"rct2.ride.clift1", // RCT1_RIDE_TYPE_CHAIRLIFT
- "rct2.ride.arrt1", // RCT1_RIDE_TYPE_STEEL_CORKSCREW_ROLLER_COASTER
+ "rct1.ride.corkscrew_trains", // RCT1_RIDE_TYPE_STEEL_CORKSCREW_ROLLER_COASTER
"rct2.ride.hmaze", // RCT1_RIDE_TYPE_HEDGE_MAZE
"rct2.ride.hskelt", // RCT1_RIDE_TYPE_SPIRAL_SLIDE
- "rct2.ride.kart1", // RCT1_RIDE_TYPE_GO_KARTS
+ "rct1.ride.go_karts", // RCT1_RIDE_TYPE_GO_KARTS
"rct2.ride.lfb1", // RCT1_RIDE_TYPE_LOG_FLUME
"rct2.ride.rapboat", // RCT1_RIDE_TYPE_RIVER_RAPIDS
"rct2.ride.dodg1", // RCT1_RIDE_TYPE_DODGEMS
@@ -828,11 +828,11 @@ namespace RCT1
"rct2.ride.obs1", // RCT1_VEHICLE_TYPE_ROTATING_CABIN
"rct2.ride.amt1", // RCT1_VEHICLE_TYPE_MINE_TRAIN
"rct2.ride.clift1", // RCT1_VEHICLE_TYPE_CHAIRLIFT_CARS
- "rct2.ride.arrt1", // RCT1_VEHICLE_TYPE_CORKSCREW_ROLLER_COASTER_TRAIN
+ "rct1.ride.corkscrew_trains", // RCT1_VEHICLE_TYPE_CORKSCREW_ROLLER_COASTER_TRAIN
"rct2.ride.steep2", // RCT1_VEHICLE_TYPE_MOTORBIKES
"rct2.ride.rcr", // RCT1_VEHICLE_TYPE_RACING_CARS
"rct2.ride.truck1", // RCT1_VEHICLE_TYPE_TRUCKS
- "rct2.ride.kart1", // RCT1_VEHICLE_TYPE_GO_KARTS
+ "rct1.ride.go_karts", // RCT1_VEHICLE_TYPE_GO_KARTS
"rct2.ride.rapboat", // RCT1_VEHICLE_TYPE_RAPIDS_BOATS
"rct2.ride.lfb1", // RCT1_VEHICLE_TYPE_LOG_FLUME_BOATS
"rct2.ride.dodg1", // RCT1_VEHICLE_TYPE_DODGEMS
diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h
index 61fb2f8026..3e4b02b62b 100644
--- a/src/openrct2/ride/Ride.h
+++ b/src/openrct2/ride/Ride.h
@@ -485,6 +485,7 @@ enum
// Must be set with swing mode 1 as well.
RIDE_ENTRY_FLAG_ALTERNATIVE_SWING_MODE_2 = 1 << 20,
RIDE_ENTRY_FLAG_RIDER_CONTROLS_SPEED = 1 << 21,
+ RIDE_ENTRY_FLAG_HIDE_EMPTY_TRAINS = 1 << 22,
};
enum