1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-10 09:32:29 +01:00

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
This commit is contained in:
Cory Sanin
2025-07-08 02:18:25 -05:00
committed by GitHub
parent 263796387f
commit 65b5d86e6c
4 changed files with 46 additions and 1 deletions

View File

@@ -1,5 +1,6 @@
0.4.25 (in development) 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. - Fix: [#24598] Cannot load .park files that use official legacy footpaths by accident.
0.4.24 (2025-07-05) 0.4.24 (2025-07-05)

View File

@@ -4589,6 +4589,7 @@ declare global {
interface Cheats { interface Cheats {
allowArbitraryRideTypeChanges: boolean; allowArbitraryRideTypeChanges: boolean;
allowSpecialColourSchemes: boolean;
allowTrackPlaceInvalidHeights: boolean; allowTrackPlaceInvalidHeights: boolean;
buildInPauseMode: boolean; buildInPauseMode: boolean;
disableAllBreakdowns: boolean; disableAllBreakdowns: boolean;
@@ -4603,10 +4604,13 @@ declare global {
enableAllDrawableTrackPieces: boolean; enableAllDrawableTrackPieces: boolean;
enableChainLiftOnAllTrack: boolean; enableChainLiftOnAllTrack: boolean;
fastLiftHill: boolean; fastLiftHill: boolean;
forcedParkRating: number;
freezeWeather: boolean; freezeWeather: boolean;
ignoreResearchStatus: boolean; ignoreResearchStatus: boolean;
ignoreRideIntensity: boolean; ignoreRideIntensity: boolean;
ignoreRidePrice: boolean;
neverendingMarketing: boolean; neverendingMarketing: boolean;
makeAllDestructible: boolean;
sandboxMode: boolean; sandboxMode: boolean;
showAllOperatingModes: boolean; showAllOperatingModes: boolean;
showVehiclesFromOtherTrackTypes: boolean; showVehiclesFromOtherTrackTypes: boolean;

View File

@@ -46,7 +46,7 @@ namespace OpenRCT2
namespace OpenRCT2::Scripting namespace OpenRCT2::Scripting
{ {
static constexpr int32_t kPluginApiVersion = 108; static constexpr int32_t kPluginApiVersion = 109;
// Versions marking breaking changes. // Versions marking breaking changes.
static constexpr int32_t kApiVersionPeepDeprecation = 33; static constexpr int32_t kApiVersionPeepDeprecation = 33;

View File

@@ -66,14 +66,19 @@ namespace OpenRCT2::Scripting
ctx, &ScCheats::ignoreResearchStatus_get, &ScCheats::ignoreResearchStatus_set, "ignoreResearchStatus"); ctx, &ScCheats::ignoreResearchStatus_get, &ScCheats::ignoreResearchStatus_set, "ignoreResearchStatus");
dukglue_register_property( dukglue_register_property(
ctx, &ScCheats::ignoreRideIntensity_get, &ScCheats::ignoreRideIntensity_set, "ignoreRideIntensity"); ctx, &ScCheats::ignoreRideIntensity_get, &ScCheats::ignoreRideIntensity_set, "ignoreRideIntensity");
dukglue_register_property(ctx, &ScCheats::ignoreRidePrice_get, &ScCheats::ignoreRidePrice_set, "ignoreRidePrice");
dukglue_register_property( dukglue_register_property(
ctx, &ScCheats::neverendingMarketing_get, &ScCheats::neverendingMarketing_set, "neverendingMarketing"); 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::sandboxMode_get, &ScCheats::sandboxMode_set, "sandboxMode");
dukglue_register_property( dukglue_register_property(
ctx, &ScCheats::showAllOperatingModes_get, &ScCheats::showAllOperatingModes_set, "showAllOperatingModes"); ctx, &ScCheats::showAllOperatingModes_get, &ScCheats::showAllOperatingModes_set, "showAllOperatingModes");
dukglue_register_property( dukglue_register_property(
ctx, &ScCheats::showVehiclesFromOtherTrackTypes_get, &ScCheats::showVehiclesFromOtherTrackTypes_set, ctx, &ScCheats::showVehiclesFromOtherTrackTypes_get, &ScCheats::showVehiclesFromOtherTrackTypes_set,
"showVehiclesFromOtherTrackTypes"); "showVehiclesFromOtherTrackTypes");
dukglue_register_property(
ctx, &ScCheats::makeAllDestructible_get, &ScCheats::makeAllDestructible_set, "makeAllDestructible");
} }
private: private:
@@ -297,6 +302,17 @@ namespace OpenRCT2::Scripting
getGameState().cheats.ignoreRideIntensity = value; getGameState().cheats.ignoreRideIntensity = value;
} }
bool ignoreRidePrice_get()
{
return getGameState().cheats.ignorePrice;
}
void ignoreRidePrice_set(bool value)
{
ThrowIfGameStateNotMutable();
getGameState().cheats.ignorePrice = value;
}
bool neverendingMarketing_get() bool neverendingMarketing_get()
{ {
return getGameState().cheats.neverendingMarketing; return getGameState().cheats.neverendingMarketing;
@@ -308,6 +324,19 @@ namespace OpenRCT2::Scripting
getGameState().cheats.neverendingMarketing = value; 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() bool sandboxMode_get()
{ {
return getGameState().cheats.sandboxMode; return getGameState().cheats.sandboxMode;
@@ -340,6 +369,17 @@ namespace OpenRCT2::Scripting
ThrowIfGameStateNotMutable(); ThrowIfGameStateNotMutable();
getGameState().cheats.showVehiclesFromOtherTrackTypes = value; getGameState().cheats.showVehiclesFromOtherTrackTypes = value;
} }
bool makeAllDestructible_get()
{
return getGameState().cheats.makeAllDestructible;
}
void makeAllDestructible_set(bool value)
{
ThrowIfGameStateNotMutable();
getGameState().cheats.makeAllDestructible = value;
}
}; };
} // namespace OpenRCT2::Scripting } // namespace OpenRCT2::Scripting