From c77d5003945e07a6c18d38fb3d263eb003cf45df Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 17 Jun 2020 20:01:22 +0200 Subject: [PATCH 1/3] Move build menu preference to objects themselves --- src/openrct2-ui/windows/NewRide.cpp | 29 +----- src/openrct2/object/RideObject.cpp | 7 +- src/openrct2/ride/Ride.h | 2 +- src/openrct2/ride/RideGroupManager.cpp | 124 ------------------------- src/openrct2/ride/RideGroupManager.h | 3 - 5 files changed, 12 insertions(+), 153 deletions(-) diff --git a/src/openrct2-ui/windows/NewRide.cpp b/src/openrct2-ui/windows/NewRide.cpp index 7669b6a230..628c1e1826 100644 --- a/src/openrct2-ui/windows/NewRide.cpp +++ b/src/openrct2-ui/windows/NewRide.cpp @@ -347,18 +347,13 @@ static RideSelection* window_new_ride_iterate_over_ride_group( bool buttonForRideTypeCreated = false; bool allowDrawingOverLastButton = false; - char preferredVehicleName[DAT_NAME_LENGTH + 1]; - safe_strcpy(preferredVehicleName, " ", sizeof(preferredVehicleName)); + uint8_t highestVehiclePriority = 0; // For each ride entry for this ride type auto& objManager = OpenRCT2::GetContext()->GetObjectManager(); auto& rideEntries = objManager.GetAllRideEntries(rideType); for (auto rideEntryIndex : rideEntries) { - char rideEntryName[DAT_NAME_LENGTH + 1]; - std::memcpy(rideEntryName, object_entry_get_entry(OBJECT_TYPE_RIDE, rideEntryIndex)->name, 8); - rideEntryName[DAT_NAME_LENGTH] = 0; - // Skip if vehicle type is not invented yet if (!ride_entry_is_invented(rideEntryIndex) && !gCheatsIgnoreResearchStatus) continue; @@ -376,26 +371,12 @@ static RideSelection* window_new_ride_iterate_over_ride_group( } // Skip if the vehicle isn't the preferred vehicle for this generic track type - if (!RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + if (!RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY) + && highestVehiclePriority > rideEntry->BuildMenuPriority) { - if (strcmp(preferredVehicleName, " \0") == 0) - { - safe_strcpy(preferredVehicleName, rideEntryName, sizeof(preferredVehicleName)); - preferredVehicleName[DAT_NAME_LENGTH] = 0; - } - else - { - if (RideGroupManager::VehiclePreferenceCompare(rideType, preferredVehicleName, rideEntryName) == 1) - { - safe_strcpy(preferredVehicleName, rideEntryName, sizeof(preferredVehicleName)); - preferredVehicleName[DAT_NAME_LENGTH] = 0; - } - else - { - continue; - } - } + continue; } + highestVehiclePriority = rideEntry->BuildMenuPriority; // Determines how and where to draw a button for this ride type/vehicle. if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) diff --git a/src/openrct2/object/RideObject.cpp b/src/openrct2/object/RideObject.cpp index 110d33ddf3..4828f424ed 100644 --- a/src/openrct2/object/RideObject.cpp +++ b/src/openrct2/object/RideObject.cpp @@ -50,7 +50,11 @@ void RideObject::ReadLegacy(IReadObjectContext* context, IStream* stream) _legacyType.second_vehicle = stream->ReadValue(); _legacyType.rear_vehicle = stream->ReadValue(); _legacyType.third_vehicle = stream->ReadValue(); - _legacyType.pad_019 = stream->ReadValue(); + + _legacyType.BuildMenuPriority = 0; + // Skip pad_019 + stream->Seek(1, STREAM_SEEK_CURRENT); + for (auto& vehicleEntry : _legacyType.vehicles) { ReadLegacyVehicle(context, stream, &vehicleEntry); @@ -621,6 +625,7 @@ void RideObject::ReadJson(IReadObjectContext* context, const json_t* root) auto availableTrackPieces = ObjectJsonHelpers::GetJsonStringArray(json_object_get(properties, "availableTrackPieces")); } + _legacyType.BuildMenuPriority = ObjectJsonHelpers::GetInteger(properties, "buildMenuPriority", 0); _legacyType.flags |= ObjectJsonHelpers::GetFlags( properties, { diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index 05a2b0285a..aa0c1d87f1 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -117,7 +117,7 @@ struct rct_ride_entry uint8_t second_vehicle; uint8_t rear_vehicle; uint8_t third_vehicle; - uint8_t pad_019; + uint8_t BuildMenuPriority; rct_ride_entry_vehicle vehicles[RCT2_MAX_VEHICLES_PER_RIDE_ENTRY]; vehicle_colour_preset_list* vehicle_preset_list; int8_t excitement_multiplier; diff --git a/src/openrct2/ride/RideGroupManager.cpp b/src/openrct2/ride/RideGroupManager.cpp index 43c67ee5e0..57ea49d0c8 100644 --- a/src/openrct2/ride/RideGroupManager.cpp +++ b/src/openrct2/ride/RideGroupManager.cpp @@ -245,127 +245,3 @@ const RideGroup* RideGroupManager::RideGroupFind(const uint8_t rideType, const u return nullptr; } } - -const std::vector RideGroupManager::GetPreferredRideEntryOrder(const uint8_t rideType) -{ - // clang-format off - static const std::vector preferredRideEntryOrder[] = - { - { "SPDRCR " }, // RIDE_TYPE_SPIRAL_ROLLER_COASTER - { "TOGST " }, // RIDE_TYPE_STAND_UP_ROLLER_COASTER - { "ARRSW1 ", "VEKVAMP ", "ARRSW2 " }, // RIDE_TYPE_SUSPENDED_SWINGING_COASTER - { "NEMT " }, // RIDE_TYPE_INVERTED_ROLLER_COASTER - { "ZLDB ", "ZLOG ", "ZPANDA " }, // RIDE_TYPE_JUNIOR_ROLLER_COASTER - { "NRL ", "NRL2 ", "AML1 ", "TRAM1 " }, // RIDE_TYPE_MINIATURE_RAILWAY - { "MONO1 ", "MONO2 ", "MONO3 " }, // RIDE_TYPE_MONORAIL - { "BATFL ", "SKYTR "}, // RIDE_TYPE_MINI_SUSPENDED_COASTER - { "RBOAT ", "BBOAT ", "CBOAT ", "SWANS ", "TRIKE ", "JSKI " }, // RIDE_TYPE_BOAT_HIRE - { "WMOUSE ", "WMMINE "}, // RIDE_TYPE_WOODEN_WILD_MOUSE - { "STEEP1 ", "STEEP2 ", "SBOX " }, // RIDE_TYPE_STEEPLECHASE - { "SPCAR ", "RCR ", "TRUCK1 ", "VCR ", "CTCAR " }, // RIDE_TYPE_CAR_RIDE - { "SSC1 " }, // RIDE_TYPE_LAUNCHED_FREEFALL - { "BOB1 ", "INTBOB " }, // RIDE_TYPE_BOBSLEIGH_COASTER - { "OBS1 ", "OBS2 " }, // RIDE_TYPE_OBSERVATION_TOWER - { "SCHT1 " }, // RIDE_TYPE_LOOPING_ROLLER_COASTER - { "DING1 " }, // RIDE_TYPE_DINGHY_SLIDE - { "AMT1 " }, // RIDE_TYPE_MINE_TRAIN_COASTER - { "CLIFT1 ", "CLIFT2 " }, // RIDE_TYPE_CHAIRLIFT - { "ARRT1 ", "ARRT2 " }, // RIDE_TYPE_CORKSCREW_ROLLER_COASTER - { }, // RIDE_TYPE_MAZE - { }, // RIDE_TYPE_SPIRAL_SLIDE - { "KART1 " }, // RIDE_TYPE_GO_KARTS - { "LFB1 " }, // RIDE_TYPE_LOG_FLUME - { "RAPBOAT " }, // RIDE_TYPE_RIVER_RAPIDS - { }, // RIDE_TYPE_DODGEMS - { }, // RIDE_TYPE_SWINGING_SHIP - { }, // RIDE_TYPE_SWINGING_INVERTER_SHIP - { }, // RIDE_TYPE_FOOD_STALL - { }, // RIDE_TYPE_1D - { }, // RIDE_TYPE_DRINK_STALL - { }, // RIDE_TYPE_1F - { }, // RIDE_TYPE_SHOP - { }, // RIDE_TYPE_MERRY_GO_ROUND - { }, // RIDE_TYPE_22 - { }, // RIDE_TYPE_INFORMATION_KIOSK - { }, // RIDE_TYPE_TOILETS - { }, // RIDE_TYPE_FERRIS_WHEEL - { }, // RIDE_TYPE_MOTION_SIMULATOR - { }, // RIDE_TYPE_3D_CINEMA - { }, // RIDE_TYPE_TOP_SPIN - { }, // RIDE_TYPE_SPACE_RINGS - { "REVF1 " }, // RIDE_TYPE_REVERSE_FREEFALL_COASTER - { "LIFT1 " }, // RIDE_TYPE_LIFT - { "BMVD " }, // RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER - { }, // RIDE_TYPE_CASH_MACHINE - { }, // RIDE_TYPE_TWIST - { }, // RIDE_TYPE_HAUNTED_HOUSE - { }, // RIDE_TYPE_FIRST_AID - { }, // RIDE_TYPE_CIRCUS - { "GTC ", "HMCAR " }, // RIDE_TYPE_GHOST_TRAIN - { "BMSD ", "BMSU ", "BMFL ", "BMRB ", "GOLTR " }, // RIDE_TYPE_TWISTER_ROLLER_COASTER - { "PTCT1 ", "MFT ", "PTCT2 " }, // RIDE_TYPE_WOODEN_ROLLER_COASTER - { "SFRIC1 " }, // RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER - { "SMC1 ", "SMC2 ", "WMSPIN " }, // RIDE_TYPE_STEEL_WILD_MOUSE - { "ARRX " }, // RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER - { }, // RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT - { "BMAIR " }, // RIDE_TYPE_FLYING_ROLLER_COASTER - { }, // RIDE_TYPE_FLYING_ROLLER_COASTER_ALT - { "VREEL " }, // RIDE_TYPE_VIRGINIA_REEL - { "SPBOAT " }, // RIDE_TYPE_SPLASH_BOATS - { "HELICAR " }, // RIDE_TYPE_MINI_HELICOPTERS - { "VEKST " }, // RIDE_TYPE_LAY_DOWN_ROLLER_COASTER - { "SMONO " }, // RIDE_TYPE_SUSPENDED_MONORAIL - { }, // RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT - { "REVCAR " }, // RIDE_TYPE_REVERSER_ROLLER_COASTER - { "UTCAR ", "UTCARR " }, // RIDE_TYPE_HEARTLINE_TWISTER_COASTER - { }, // RIDE_TYPE_MINI_GOLF - { "INTST " }, // RIDE_TYPE_GIGA_COASTER - { "GDROP1 " }, // RIDE_TYPE_ROTO_DROP - { }, // RIDE_TYPE_FLYING_SAUCERS - { }, // RIDE_TYPE_CROOKED_HOUSE - { "MONBK " }, // RIDE_TYPE_MONORAIL_CYCLES - { "SLCT ", "SLCFO ", "VEKDV " }, // RIDE_TYPE_COMPACT_INVERTED_COASTER - { "CSTBOAT " }, // RIDE_TYPE_WATER_COASTER - { "THCAR " }, // RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER - { "IVMC1 " }, // RIDE_TYPE_INVERTED_HAIRPIN_COASTER - { }, // RIDE_TYPE_MAGIC_CARPET - { "SUBMAR " }, // RIDE_TYPE_SUBMARINE_RIDE - { "RFTBOAT " }, // RIDE_TYPE_RIVER_RAFTS - { }, // RIDE_TYPE_50 - { }, // RIDE_TYPE_ENTERPRISE - { }, // RIDE_TYPE_52 - { }, // RIDE_TYPE_53 - { }, // RIDE_TYPE_54 - { }, // RIDE_TYPE_55 - { "INTINV " }, // RIDE_TYPE_INVERTED_IMPULSE_COASTER - { "WCATC ", "RCKC ", "JSTAR1 " }, // RIDE_TYPE_MINI_ROLLER_COASTER - { "PMT1 " }, // RIDE_TYPE_MINE_RIDE - { }, // RIDE_TYPE_59 - { "PREMT1 " }, // RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER - }; - // clang-format on - return preferredRideEntryOrder[rideType]; -} - -/** - * This function keeps a list of the preferred vehicle for every generic track - * type, out of the available vehicle types in the current game. It determines - * which picture is shown on the new ride tab and which train type is selected - * by default. - */ -int32_t RideGroupManager::VehiclePreferenceCompare(const uint8_t rideType, const char* a, const char* b) -{ - std::vector rideEntryOrder = RideGroupManager::GetPreferredRideEntryOrder(rideType); - for (const char* object : rideEntryOrder) - { - if (String::Equals(object, a, true)) - { - return -1; - } - if (String::Equals(object, b, true)) - { - return 1; - } - } - return 0; -} diff --git a/src/openrct2/ride/RideGroupManager.h b/src/openrct2/ride/RideGroupManager.h index 386e756a4d..9b79cb3018 100644 --- a/src/openrct2/ride/RideGroupManager.h +++ b/src/openrct2/ride/RideGroupManager.h @@ -33,9 +33,6 @@ class RideGroupManager public: static const RideGroup* GetRideGroup(const uint8_t trackType, const rct_ride_entry* rideEntry); static const RideGroup* RideGroupFind(const uint8_t rideType, const uint8_t index); - - static const std::vector GetPreferredRideEntryOrder(const uint8_t rideType); - static int32_t VehiclePreferenceCompare(const uint8_t rideType, const char* a, const char* b); }; enum RideGroupFlags : uint8_t From d28d4f4ffd17cd916e21fc51f8b991d1c11f53b2 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 17 Jun 2020 20:03:43 +0200 Subject: [PATCH 2/3] Update objects release to v1.0.15 --- CMakeLists.txt | 4 ++-- OpenRCT2.xcodeproj/project.pbxproj | 2 +- openrct2.proj | 4 ++-- shell.nix | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d4c57bb2b9..bc9b9ea508 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,8 +26,8 @@ set(CMAKE_MACOSX_RPATH 1) set(TITLE_SEQUENCE_URL "https://github.com/OpenRCT2/title-sequences/releases/download/v0.1.2c/title-sequences.zip") set(TITLE_SEQUENCE_SHA1 "304d13a126c15bf2c86ff13b81a2f2cc1856ac8d") -set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v1.0.14/objects.zip") -set(OBJECTS_SHA1 "31a0ed0047b4bdb1428071044130192b3c0a30fa") +set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v1.0.15/objects.zip") +set(OBJECTS_SHA1 "dfd5864cf7d0449c0fb280c5c6b902a24816df6c") set(REPLAYS_URL "https://github.com/OpenRCT2/replays/releases/download/v0.0.13/replays.zip") set(REPLAYS_SHA1 "75598ff319fa18da782e38feb69b65d6d69d1458") diff --git a/OpenRCT2.xcodeproj/project.pbxproj b/OpenRCT2.xcodeproj/project.pbxproj index ec394a2f9b..be9e413636 100644 --- a/OpenRCT2.xcodeproj/project.pbxproj +++ b/OpenRCT2.xcodeproj/project.pbxproj @@ -3858,7 +3858,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "version=\"1.0.14\"\nzipname=\"objects.zip\"\nliburl=\"https://github.com/OpenRCT2/objects/releases/download/v$version/$zipname\"\n\n[[ ! -d \"${SRCROOT}/data/object\" || ! -e \"${SRCROOT}/objectsversion\" || $(head -n 1 \"${SRCROOT}/objectsversion\") != $version ]]\noutdated=$?\n\nif [[ $outdated -eq 0 ]]; then\nif [[ -d \"${SRCROOT}/data/object\" ]]; then rm -r \"${SRCROOT}/data/object\"; fi\nmkdir -p \"${SRCROOT}/data/object\"\n\ncurl -L -o \"${SRCROOT}/data/object/$zipname\" \"$liburl\"\nunzip -uaq -d \"${SRCROOT}/data/object\" \"${SRCROOT}/data/object/$zipname\"\nrm \"${SRCROOT}/data/object/$zipname\"\n\necho $version > \"${SRCROOT}/objectsversion\"\nfi"; + shellScript = "version=\"1.0.15\"\nzipname=\"objects.zip\"\nliburl=\"https://github.com/OpenRCT2/objects/releases/download/v$version/$zipname\"\n\n[[ ! -d \"${SRCROOT}/data/object\" || ! -e \"${SRCROOT}/objectsversion\" || $(head -n 1 \"${SRCROOT}/objectsversion\") != $version ]]\noutdated=$?\n\nif [[ $outdated -eq 0 ]]; then\nif [[ -d \"${SRCROOT}/data/object\" ]]; then rm -r \"${SRCROOT}/data/object\"; fi\nmkdir -p \"${SRCROOT}/data/object\"\n\ncurl -L -o \"${SRCROOT}/data/object/$zipname\" \"$liburl\"\nunzip -uaq -d \"${SRCROOT}/data/object\" \"${SRCROOT}/data/object/$zipname\"\nrm \"${SRCROOT}/data/object/$zipname\"\n\necho $version > \"${SRCROOT}/objectsversion\"\nfi"; }; C68B2D471EC790710020651C /* Download Libraries */ = { isa = PBXShellScriptBuildPhase; diff --git a/openrct2.proj b/openrct2.proj index 89e6a3f233..9eba947523 100644 --- a/openrct2.proj +++ b/openrct2.proj @@ -46,8 +46,8 @@ 058b9df80244c03f1633cb06e9f70471a29ebb8e https://github.com/OpenRCT2/title-sequences/releases/download/v0.1.2c/title-sequences.zip 304d13a126c15bf2c86ff13b81a2f2cc1856ac8d - https://github.com/OpenRCT2/objects/releases/download/v1.0.14/objects.zip - 31a0ed0047b4bdb1428071044130192b3c0a30fa + https://github.com/OpenRCT2/objects/releases/download/v1.0.15/objects.zip + dfd5864cf7d0449c0fb280c5c6b902a24816df6c https://github.com/OpenRCT2/replays/releases/download/v0.0.13/replays.zip 75598ff319fa18da782e38feb69b65d6d69d1458 diff --git a/shell.nix b/shell.nix index 4c76dc53a2..d8353f7019 100644 --- a/shell.nix +++ b/shell.nix @@ -15,8 +15,8 @@ let objects-src = pkgs.fetchFromGitHub { owner = "OpenRCT2"; repo = "objects"; - rev = "v1.0.14"; - sha256 = "574477ddcdfdd4d827ce1a0fbc4971cbb56df561dcfff7151c62a9878d3bbb54"; + rev = "v1.0.15"; + sha256 = "0171907a267c564071e587fc683bfe75f36b891a6769e0bd49a6fc46f2ae7ded"; }; title-sequences-src = pkgs.fetchFromGitHub { From 2ee21e360cd4b4012bd97823c4bb42a2d8cd171e Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 17 Jun 2020 21:46:54 +0200 Subject: [PATCH 3/3] Bump network version --- src/openrct2/network/Network.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openrct2/network/Network.cpp b/src/openrct2/network/Network.cpp index 827dc14733..fcb2aad157 100644 --- a/src/openrct2/network/Network.cpp +++ b/src/openrct2/network/Network.cpp @@ -32,7 +32,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 "18" +#define NETWORK_STREAM_VERSION "19" #define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION static Peep* _pickup_peep = nullptr;