diff --git a/distribution/openrct2.d.ts b/distribution/openrct2.d.ts index 6c04404802..d8f8380026 100644 --- a/distribution/openrct2.d.ts +++ b/distribution/openrct2.d.ts @@ -21,6 +21,8 @@ declare global { /** * Global context for accessing all other APIs. */ + /** APIs for cheats. */ + var cheats: Cheats; /** APIs for interacting with the stdout console. */ var console: Console; /** Core APIs for plugins. */ @@ -899,6 +901,31 @@ declare global { postMessage(message: ParkMessage): void; } + interface Cheats { + allowArbitraryRideTypeChanges: boolean; + allowTrackPlaceInvalidHeights: boolean; + buildInPauseMode: boolean; + disableAllBreakdowns: boolean; + disableBrakesFailure: boolean; + disableClearanceChecks: boolean; + disableLittering: boolean; + disablePlantAging: boolean; + disableRideValueAging: boolean; + disableSupportLimits: boolean; + disableTrainLengthLimit: boolean; + disableVandalism: boolean; + enableAllDrawableTrackPieces: boolean; + enableChainLiftOnAllTrack: boolean; + fastLiftHill: boolean; + freezeWeather: boolean; + ignoreResearchStatus: boolean; + ignoreRideIntensity: boolean; + neverendingMarketing: boolean; + sandboxMode: boolean; + showAllOperatingModes: boolean; + showVehiclesFromOtherTrackTypes: boolean; + } + /** * User Interface APIs * These will only be available to servers and clients that are not running headless mode. diff --git a/src/openrct2/actions/SetCheatAction.hpp b/src/openrct2/actions/SetCheatAction.hpp index c01b8fef89..40f858a4b5 100644 --- a/src/openrct2/actions/SetCheatAction.hpp +++ b/src/openrct2/actions/SetCheatAction.hpp @@ -54,6 +54,13 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit("type", _cheatType); + visitor.Visit("param1", _param1); + visitor.Visit("param2", _param2); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags() | GA_FLAGS::ALLOW_WHILE_PAUSED; diff --git a/src/openrct2/scripting/ScCheats.hpp b/src/openrct2/scripting/ScCheats.hpp new file mode 100644 index 0000000000..f82b551c5e --- /dev/null +++ b/src/openrct2/scripting/ScCheats.hpp @@ -0,0 +1,318 @@ +/***************************************************************************** + * Copyright (c) 2014-2020 OpenRCT2 developers + * + * For a complete list of all authors, please refer to contributors.md + * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is licensed under the GNU General Public License version 3. + *****************************************************************************/ + +#pragma once + +#ifdef ENABLE_SCRIPTING + +# include "../Cheats.h" +# include "Duktape.hpp" +# include "ScriptEngine.h" + +namespace OpenRCT2::Scripting +{ + class ScCheats + { + public: + static void Register(duk_context* ctx) + { + dukglue_register_property( + ctx, &ScCheats::allowArbitraryRideTypeChanges_get, &ScCheats::allowArbitraryRideTypeChanges_set, + "allowArbitraryRideTypeChanges"); + dukglue_register_property( + ctx, &ScCheats::allowTrackPlaceInvalidHeights_get, &ScCheats::allowTrackPlaceInvalidHeights_set, + "allowTrackPlaceInvalidHeights"); + dukglue_register_property( + ctx, &ScCheats::buildInPauseMode_get, &ScCheats::buildInPauseMode_set, "buildInPauseMode"); + dukglue_register_property( + ctx, &ScCheats::disableAllBreakdowns_get, &ScCheats::disableAllBreakdowns_set, "disableAllBreakdowns"); + dukglue_register_property( + ctx, &ScCheats::disableBrakesFailure_get, &ScCheats::disableBrakesFailure_set, "disableBrakesFailure"); + dukglue_register_property( + ctx, &ScCheats::disableClearanceChecks_get, &ScCheats::disableClearanceChecks_set, "disableClearanceChecks"); + dukglue_register_property( + ctx, &ScCheats::disableLittering_get, &ScCheats::disableLittering_set, "disableLittering"); + dukglue_register_property( + ctx, &ScCheats::disablePlantAging_get, &ScCheats::disablePlantAging_set, "disablePlantAging"); + dukglue_register_property( + ctx, &ScCheats::disableRideValueAging_get, &ScCheats::disableRideValueAging_set, "disableRideValueAging"); + dukglue_register_property( + ctx, &ScCheats::disableSupportLimits_get, &ScCheats::disableSupportLimits_set, "disableSupportLimits"); + dukglue_register_property( + ctx, &ScCheats::disableTrainLengthLimit_get, &ScCheats::disableTrainLengthLimit_set, "disableTrainLengthLimit"); + dukglue_register_property( + ctx, &ScCheats::disableVandalism_get, &ScCheats::disableVandalism_set, "disableVandalism"); + dukglue_register_property( + ctx, &ScCheats::enableAllDrawableTrackPieces_get, &ScCheats::enableAllDrawableTrackPieces_set, + "enableAllDrawableTrackPieces"); + dukglue_register_property( + ctx, &ScCheats::enableChainLiftOnAllTrack_get, &ScCheats::enableChainLiftOnAllTrack_set, + "enableChainLiftOnAllTrack"); + dukglue_register_property(ctx, &ScCheats::fastLiftHill_get, &ScCheats::fastLiftHill_set, "fastLiftHill"); + dukglue_register_property(ctx, &ScCheats::freezeWeather_get, &ScCheats::freezeWeather_set, "freezeWeather"); + dukglue_register_property( + ctx, &ScCheats::ignoreResearchStatus_get, &ScCheats::ignoreResearchStatus_set, "ignoreResearchStatus"); + dukglue_register_property( + ctx, &ScCheats::ignoreRideIntensity_get, &ScCheats::ignoreRideIntensity_set, "ignoreRideIntensity"); + dukglue_register_property( + ctx, &ScCheats::neverendingMarketing_get, &ScCheats::neverendingMarketing_set, "neverendingMarketing"); + 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"); + } + + private: + bool allowArbitraryRideTypeChanges_get() + { + return gCheatsAllowArbitraryRideTypeChanges; + } + + void allowArbitraryRideTypeChanges_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsAllowArbitraryRideTypeChanges = value; + } + + bool allowTrackPlaceInvalidHeights_get() + { + return gCheatsAllowTrackPlaceInvalidHeights; + } + + void allowTrackPlaceInvalidHeights_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsAllowTrackPlaceInvalidHeights = value; + } + + bool buildInPauseMode_get() + { + return gCheatsBuildInPauseMode; + } + + void buildInPauseMode_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsBuildInPauseMode = value; + } + + bool disableAllBreakdowns_get() + { + return gCheatsDisableAllBreakdowns; + } + + void disableAllBreakdowns_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsDisableAllBreakdowns = value; + } + + bool disableBrakesFailure_get() + { + return gCheatsDisableBrakesFailure; + } + + void disableBrakesFailure_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsDisableBrakesFailure = value; + } + + bool disableClearanceChecks_get() + { + return gCheatsDisableClearanceChecks; + } + + void disableClearanceChecks_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsDisableClearanceChecks = value; + } + + bool disableLittering_get() + { + return gCheatsDisableLittering; + } + + void disableLittering_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsDisableLittering = value; + } + + bool disablePlantAging_get() + { + return gCheatsDisablePlantAging; + } + + void disablePlantAging_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsDisablePlantAging = value; + } + + bool disableRideValueAging_get() + { + return gCheatsDisableRideValueAging; + } + + void disableRideValueAging_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsDisableRideValueAging = value; + } + + bool disableSupportLimits_get() + { + return gCheatsDisableSupportLimits; + } + + void disableSupportLimits_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsDisableSupportLimits = value; + } + + bool disableTrainLengthLimit_get() + { + return gCheatsDisableTrainLengthLimit; + } + + void disableTrainLengthLimit_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsDisableTrainLengthLimit = value; + } + + bool disableVandalism_get() + { + return gCheatsDisableVandalism; + } + + void disableVandalism_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsDisableVandalism = value; + } + + bool enableAllDrawableTrackPieces_get() + { + return gCheatsEnableAllDrawableTrackPieces; + } + + void enableAllDrawableTrackPieces_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsEnableAllDrawableTrackPieces = value; + } + + bool enableChainLiftOnAllTrack_get() + { + return gCheatsEnableChainLiftOnAllTrack; + } + + void enableChainLiftOnAllTrack_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsEnableChainLiftOnAllTrack = value; + } + + bool fastLiftHill_get() + { + return gCheatsFastLiftHill; + } + + void fastLiftHill_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsFastLiftHill = value; + } + + bool freezeWeather_get() + { + return gCheatsFreezeWeather; + } + + void freezeWeather_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsFreezeWeather = value; + } + + bool ignoreResearchStatus_get() + { + return gCheatsIgnoreResearchStatus; + } + + void ignoreResearchStatus_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsIgnoreResearchStatus = value; + } + + bool ignoreRideIntensity_get() + { + return gCheatsIgnoreRideIntensity; + } + + void ignoreRideIntensity_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsIgnoreRideIntensity = value; + } + + bool neverendingMarketing_get() + { + return gCheatsNeverendingMarketing; + } + + void neverendingMarketing_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsNeverendingMarketing = value; + } + + bool sandboxMode_get() + { + return gCheatsSandboxMode; + } + + void sandboxMode_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsSandboxMode = value; + } + + bool showAllOperatingModes_get() + { + return gCheatsShowAllOperatingModes; + } + + void showAllOperatingModes_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsShowAllOperatingModes = value; + } + + bool showVehiclesFromOtherTrackTypes_get() + { + return gCheatsShowVehiclesFromOtherTrackTypes; + } + + void showVehiclesFromOtherTrackTypes_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsShowVehiclesFromOtherTrackTypes = value; + } + }; +} // namespace OpenRCT2::Scripting + +#endif diff --git a/src/openrct2/scripting/ScriptEngine.cpp b/src/openrct2/scripting/ScriptEngine.cpp index fdb7f3dbec..420ec44932 100644 --- a/src/openrct2/scripting/ScriptEngine.cpp +++ b/src/openrct2/scripting/ScriptEngine.cpp @@ -22,6 +22,7 @@ # include "../interface/InteractiveConsole.h" # include "../platform/Platform2.h" # include "Duktape.hpp" +# include "ScCheats.hpp" # include "ScConsole.hpp" # include "ScContext.hpp" # include "ScDate.hpp" @@ -368,6 +369,7 @@ ScriptEngine::ScriptEngine(InteractiveConsole& console, IPlatformEnvironment& en void ScriptEngine::Initialise() { auto ctx = (duk_context*)_context; + ScCheats::Register(ctx); ScConfiguration::Register(ctx); ScConsole::Register(ctx); ScContext::Register(ctx); @@ -388,6 +390,7 @@ void ScriptEngine::Initialise() ScEntity::Register(ctx); ScPeep::Register(ctx); + dukglue_register_global(ctx, std::make_shared(), "cheats"); dukglue_register_global(ctx, std::make_shared(_console), "console"); dukglue_register_global(ctx, std::make_shared(_execInfo, _hookEngine), "context"); dukglue_register_global(ctx, std::make_shared(), "date"); @@ -960,6 +963,7 @@ const static std::unordered_map ActionNameToType = { { "ridesetsetting", GAME_COMMAND_SET_RIDE_SETTING }, { "ridesetstatus", GAME_COMMAND_SET_RIDE_STATUS }, { "ridesetvehicles", GAME_COMMAND_SET_RIDE_VEHICLES }, + { "setcheataction", GAME_COMMAND_CHEAT }, { "smallsceneryplace", GAME_COMMAND_PLACE_SCENERY }, { "trackdesign", GAME_COMMAND_PLACE_TRACK_DESIGN }, { "trackplace", GAME_COMMAND_PLACE_TRACK },