diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 9d4a223b23..9c7e9fde08 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -4,6 +4,7 @@ - Feature: [#12708] Add plugin-accessible names to all game actions. - Feature: [#12712] Add TCP / socket plugin APIs. - Feature: [#12840] Add Park.entranceFee to the plugin API. +- Feature: [#12886] Make all scenery placement and remove actions available to the plugin API. - Fix: [#400] Unable to place some saved tracks flush to the ground (original bug). - Fix: [#5753] Entertainers make themselves happy instead of the guests. - Fix: [#7037] Unable to save tracks starting with a sloped turn or helix. diff --git a/src/openrct2/actions/BannerPlaceAction.hpp b/src/openrct2/actions/BannerPlaceAction.hpp index d89220e114..88e04546ef 100644 --- a/src/openrct2/actions/BannerPlaceAction.hpp +++ b/src/openrct2/actions/BannerPlaceAction.hpp @@ -33,6 +33,14 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + visitor.Visit("object", _bannerType); + visitor.Visit("primaryColour", _primaryColour); + _bannerIndex = create_new_banner(0); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/BannerRemoveAction.hpp b/src/openrct2/actions/BannerRemoveAction.hpp index 6a8b872f09..91ffd9987b 100644 --- a/src/openrct2/actions/BannerRemoveAction.hpp +++ b/src/openrct2/actions/BannerRemoveAction.hpp @@ -27,6 +27,11 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/FootpathPlaceAction.hpp b/src/openrct2/actions/FootpathPlaceAction.hpp index 7ecd112878..f328b1091d 100644 --- a/src/openrct2/actions/FootpathPlaceAction.hpp +++ b/src/openrct2/actions/FootpathPlaceAction.hpp @@ -41,6 +41,14 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + visitor.Visit("object", _type); + visitor.Visit("direction", _direction); + visitor.Visit("slope", _slope); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/FootpathRemoveAction.hpp b/src/openrct2/actions/FootpathRemoveAction.hpp index 4fd791a975..ab94731b63 100644 --- a/src/openrct2/actions/FootpathRemoveAction.hpp +++ b/src/openrct2/actions/FootpathRemoveAction.hpp @@ -34,6 +34,11 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/FootpathSceneryPlaceAction.hpp b/src/openrct2/actions/FootpathSceneryPlaceAction.hpp index bfa6602a64..80971c8d03 100644 --- a/src/openrct2/actions/FootpathSceneryPlaceAction.hpp +++ b/src/openrct2/actions/FootpathSceneryPlaceAction.hpp @@ -36,6 +36,12 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + visitor.Visit("object", _pathItemType); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/FootpathSceneryRemoveAction.hpp b/src/openrct2/actions/FootpathSceneryRemoveAction.hpp index b7e272319e..df4d56409e 100644 --- a/src/openrct2/actions/FootpathSceneryRemoveAction.hpp +++ b/src/openrct2/actions/FootpathSceneryRemoveAction.hpp @@ -33,6 +33,11 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/GameAction.h b/src/openrct2/actions/GameAction.h index 9ffd26946e..b97a204249 100644 --- a/src/openrct2/actions/GameAction.h +++ b/src/openrct2/actions/GameAction.h @@ -172,6 +172,13 @@ public: Visit("y", param.y); } + void Visit(CoordsXYZ& param) + { + Visit("x", param.x); + Visit("y", param.y); + Visit("z", param.z); + } + void Visit(CoordsXYZD& param) { Visit("x", param.x); diff --git a/src/openrct2/actions/LargeSceneryPlaceAction.hpp b/src/openrct2/actions/LargeSceneryPlaceAction.hpp index 7064ffd5a0..caaa4f6e70 100644 --- a/src/openrct2/actions/LargeSceneryPlaceAction.hpp +++ b/src/openrct2/actions/LargeSceneryPlaceAction.hpp @@ -72,6 +72,22 @@ public: } } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + visitor.Visit("object", _sceneryType); + visitor.Visit("primaryColour", _primaryColour); + visitor.Visit("secondaryColour", _secondaryColour); + rct_scenery_entry* sceneryEntry = get_large_scenery_entry(_sceneryType); + if (sceneryEntry != nullptr) + { + if (sceneryEntry->large_scenery.scrolling_mode != SCROLLING_MODE_NONE) + { + _bannerId = create_new_banner(0); + } + } + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/LargeSceneryRemoveAction.hpp b/src/openrct2/actions/LargeSceneryRemoveAction.hpp index 2454f3d2d9..4c4035b3fd 100644 --- a/src/openrct2/actions/LargeSceneryRemoveAction.hpp +++ b/src/openrct2/actions/LargeSceneryRemoveAction.hpp @@ -38,6 +38,12 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + visitor.Visit("tileIndex", _tileIndex); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/SmallSceneryRemoveAction.hpp b/src/openrct2/actions/SmallSceneryRemoveAction.hpp index 310e2476cd..de8fefd607 100644 --- a/src/openrct2/actions/SmallSceneryRemoveAction.hpp +++ b/src/openrct2/actions/SmallSceneryRemoveAction.hpp @@ -40,6 +40,13 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + visitor.Visit("object", _sceneryType); + visitor.Visit("quadrant", _quadrant); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/WallPlaceAction.hpp b/src/openrct2/actions/WallPlaceAction.hpp index bb3af4d7a6..83705cc5e2 100644 --- a/src/openrct2/actions/WallPlaceAction.hpp +++ b/src/openrct2/actions/WallPlaceAction.hpp @@ -84,6 +84,23 @@ public: } } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + visitor.Visit("object", _wallType); + visitor.Visit("edge", _edge); + visitor.Visit("primaryColour", _primaryColour); + visitor.Visit("secondaryColour", _secondaryColour); + visitor.Visit("tertiaryColour", _tertiaryColour); + rct_scenery_entry* sceneryEntry = get_large_scenery_entry(_wallType); + if (sceneryEntry != nullptr) + { + if (sceneryEntry->large_scenery.scrolling_mode != SCROLLING_MODE_NONE) + { + _bannerId = create_new_banner(0); + } + } + } uint16_t GetActionFlags() const override { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/WallRemoveAction.hpp b/src/openrct2/actions/WallRemoveAction.hpp index de3cdda9b5..70629ac311 100644 --- a/src/openrct2/actions/WallRemoveAction.hpp +++ b/src/openrct2/actions/WallRemoveAction.hpp @@ -31,6 +31,11 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + } + void Serialise(DataSerialiser & stream) override { GameAction::Serialise(stream); diff --git a/src/openrct2/scripting/ScriptEngine.cpp b/src/openrct2/scripting/ScriptEngine.cpp index f0997fe1c4..8e9180e389 100644 --- a/src/openrct2/scripting/ScriptEngine.cpp +++ b/src/openrct2/scripting/ScriptEngine.cpp @@ -42,7 +42,7 @@ using namespace OpenRCT2; using namespace OpenRCT2::Scripting; -static constexpr int32_t OPENRCT2_PLUGIN_API_VERSION = 5; +static constexpr int32_t OPENRCT2_PLUGIN_API_VERSION = 6; struct ExpressionStringifier final {