From 65b5d86e6ccc5ad371a2fb826b277faf10b1303d Mon Sep 17 00:00:00 2001 From: Cory Sanin Date: Tue, 8 Jul 2025 02:18:25 -0500 Subject: [PATCH] Feature: [Plugin] Add bindings for missing cheats Added the following binds for completeness: - ignoreRidePrice - makeAllDestructible - forcedParkRating* `allowSpecialColourSchemes` was missing from the type definition file so I added that as well. \*forcedParkRating required a little more logic than the boolean cheats and I added some safeguards to prevent setting invalid values --- distribution/changelog.txt | 1 + distribution/openrct2.d.ts | 4 ++ src/openrct2/scripting/ScriptEngine.h | 2 +- .../scripting/bindings/game/ScCheats.hpp | 40 +++++++++++++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index ef26e0d34e..527a6ca0fb 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,5 +1,6 @@ 0.4.25 (in development) ------------------------------------------------------------------------ +- Feature: [#24702] [Plugin] Add bindings for missing cheats (forcedParkRating, ignoreRidePrice, makeAllDestructible). - Fix: [#24598] Cannot load .park files that use official legacy footpaths by accident. 0.4.24 (2025-07-05) diff --git a/distribution/openrct2.d.ts b/distribution/openrct2.d.ts index 332fba684c..d50582516c 100644 --- a/distribution/openrct2.d.ts +++ b/distribution/openrct2.d.ts @@ -4589,6 +4589,7 @@ declare global { interface Cheats { allowArbitraryRideTypeChanges: boolean; + allowSpecialColourSchemes: boolean; allowTrackPlaceInvalidHeights: boolean; buildInPauseMode: boolean; disableAllBreakdowns: boolean; @@ -4603,10 +4604,13 @@ declare global { enableAllDrawableTrackPieces: boolean; enableChainLiftOnAllTrack: boolean; fastLiftHill: boolean; + forcedParkRating: number; freezeWeather: boolean; ignoreResearchStatus: boolean; ignoreRideIntensity: boolean; + ignoreRidePrice: boolean; neverendingMarketing: boolean; + makeAllDestructible: boolean; sandboxMode: boolean; showAllOperatingModes: boolean; showVehiclesFromOtherTrackTypes: boolean; diff --git a/src/openrct2/scripting/ScriptEngine.h b/src/openrct2/scripting/ScriptEngine.h index fbb269f62d..e54898add0 100644 --- a/src/openrct2/scripting/ScriptEngine.h +++ b/src/openrct2/scripting/ScriptEngine.h @@ -46,7 +46,7 @@ namespace OpenRCT2 namespace OpenRCT2::Scripting { - static constexpr int32_t kPluginApiVersion = 108; + static constexpr int32_t kPluginApiVersion = 109; // Versions marking breaking changes. static constexpr int32_t kApiVersionPeepDeprecation = 33; diff --git a/src/openrct2/scripting/bindings/game/ScCheats.hpp b/src/openrct2/scripting/bindings/game/ScCheats.hpp index 27c3ea6b3d..2335157398 100644 --- a/src/openrct2/scripting/bindings/game/ScCheats.hpp +++ b/src/openrct2/scripting/bindings/game/ScCheats.hpp @@ -66,14 +66,19 @@ namespace OpenRCT2::Scripting ctx, &ScCheats::ignoreResearchStatus_get, &ScCheats::ignoreResearchStatus_set, "ignoreResearchStatus"); dukglue_register_property( ctx, &ScCheats::ignoreRideIntensity_get, &ScCheats::ignoreRideIntensity_set, "ignoreRideIntensity"); + dukglue_register_property(ctx, &ScCheats::ignoreRidePrice_get, &ScCheats::ignoreRidePrice_set, "ignoreRidePrice"); dukglue_register_property( ctx, &ScCheats::neverendingMarketing_get, &ScCheats::neverendingMarketing_set, "neverendingMarketing"); + dukglue_register_property( + ctx, &ScCheats::forcedParkRating_get, &ScCheats::forcedParkRating_set, "forcedParkRating"); dukglue_register_property(ctx, &ScCheats::sandboxMode_get, &ScCheats::sandboxMode_set, "sandboxMode"); dukglue_register_property( ctx, &ScCheats::showAllOperatingModes_get, &ScCheats::showAllOperatingModes_set, "showAllOperatingModes"); dukglue_register_property( ctx, &ScCheats::showVehiclesFromOtherTrackTypes_get, &ScCheats::showVehiclesFromOtherTrackTypes_set, "showVehiclesFromOtherTrackTypes"); + dukglue_register_property( + ctx, &ScCheats::makeAllDestructible_get, &ScCheats::makeAllDestructible_set, "makeAllDestructible"); } private: @@ -297,6 +302,17 @@ namespace OpenRCT2::Scripting getGameState().cheats.ignoreRideIntensity = value; } + bool ignoreRidePrice_get() + { + return getGameState().cheats.ignorePrice; + } + + void ignoreRidePrice_set(bool value) + { + ThrowIfGameStateNotMutable(); + getGameState().cheats.ignorePrice = value; + } + bool neverendingMarketing_get() { return getGameState().cheats.neverendingMarketing; @@ -308,6 +324,19 @@ namespace OpenRCT2::Scripting getGameState().cheats.neverendingMarketing = value; } + int32_t forcedParkRating_get() + { + return getGameState().cheats.forcedParkRating; + } + + void forcedParkRating_set(int32_t value) + { + ThrowIfGameStateNotMutable(); + int32_t adjusted = std::max(-1, std::min(value, 999)); + getGameState().cheats.forcedParkRating = adjusted; + Park::SetForcedRating(adjusted); + } + bool sandboxMode_get() { return getGameState().cheats.sandboxMode; @@ -340,6 +369,17 @@ namespace OpenRCT2::Scripting ThrowIfGameStateNotMutable(); getGameState().cheats.showVehiclesFromOtherTrackTypes = value; } + + bool makeAllDestructible_get() + { + return getGameState().cheats.makeAllDestructible; + } + + void makeAllDestructible_set(bool value) + { + ThrowIfGameStateNotMutable(); + getGameState().cheats.makeAllDestructible = value; + } }; } // namespace OpenRCT2::Scripting