From 0147515ffb4d60b837c2c5b54588de90f809b8f9 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sun, 16 Feb 2020 15:21:58 +0100 Subject: [PATCH] Implement AngelScript support for effect chance changes. --- conanfile.py | 2 +- .../AngelScript/AngelScriptScript.hpp | 17 +++++++++++++++++ .../AngelScript/AngelScriptTypeInfo.hpp | 4 ++++ .../TypeRegistry/BasicScriptClass.cpp | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index 21fe1fe..fdc1010 100644 --- a/conanfile.py +++ b/conanfile.py @@ -44,7 +44,7 @@ class PkmnLibConan(ConanFile): self.options["AngelScript"].link_std_statically = True def requirements(self): - self.requires("CreatureLib/579ee82f02d6eedb5d924c8b4b056bfdb561ef53@creaturelib/master") + self.requires("CreatureLib/54e366fc1b3a44b200de41421707bfe4802aaecb@creaturelib/master") if self.options.script_handler == "angelscript": self.requires("AngelScript/2.34@AngelScript/Deukhoofd") else: diff --git a/src/ScriptResolving/AngelScript/AngelScriptScript.hpp b/src/ScriptResolving/AngelScript/AngelScriptScript.hpp index 4d8a9bf..3bf42d9 100644 --- a/src/ScriptResolving/AngelScript/AngelScriptScript.hpp +++ b/src/ScriptResolving/AngelScript/AngelScriptScript.hpp @@ -170,6 +170,23 @@ public: void PreventSelfSwitch(const CreatureLib::Battling::SwitchTurnChoice* choice, bool* outResult) override { throw NotImplementedException(); // TODO } + + void ModifyEffectChance(const CreatureLib::Battling::ExecutingAttack* attack, + CreatureLib::Battling::Creature* target, float* chance) override { + CALL_HOOK(ModifyEffectChance, { + ctx->SetArgObject(0, (void*)attack); + ctx->SetArgObject(1, (void*)target); + ctx->SetArgAddress(2, chance); + }) + } + void ModifyIncomingEffectChance(const CreatureLib::Battling::ExecutingAttack* attack, + CreatureLib::Battling::Creature* target, float* chance) override { + CALL_HOOK(ModifyIncomingEffectChance, { + ctx->SetArgObject(0, (void*)attack); + ctx->SetArgObject(1, (void*)target); + ctx->SetArgAddress(2, chance); + }) + } }; #undef CALL_HOOK diff --git a/src/ScriptResolving/AngelScript/AngelScriptTypeInfo.hpp b/src/ScriptResolving/AngelScript/AngelScriptTypeInfo.hpp index fac0040..bf6e90d 100644 --- a/src/ScriptResolving/AngelScript/AngelScriptTypeInfo.hpp +++ b/src/ScriptResolving/AngelScript/AngelScriptTypeInfo.hpp @@ -88,6 +88,10 @@ public: SCRIPT_HOOK_FUNCTION(OnSecondaryEffect, "void OnSecondaryEffect(ExecutingMove@ attack, Pokemon@ target, uint8 hit)"); SCRIPT_HOOK_FUNCTION(OnAfterHits, "void OnAfterHits(ExecutingMove@ attack, Pokemon@ target)"); + SCRIPT_HOOK_FUNCTION(ModifyEffectChance, + "void ModifyEffectChance(ExecutingMove@ attack, Pokemon@ target, uint16& chance)"); + SCRIPT_HOOK_FUNCTION(ModifyIncomingEffectChance, + "void ModifyIncomingEffectChance(ExecutingMove@ attack, Pokemon@ target, uint16& chance)"); }; #undef SCRIPT_HOOK_FUNCTION diff --git a/src/ScriptResolving/AngelScript/TypeRegistry/BasicScriptClass.cpp b/src/ScriptResolving/AngelScript/TypeRegistry/BasicScriptClass.cpp index f6b16b2..5c82759 100644 --- a/src/ScriptResolving/AngelScript/TypeRegistry/BasicScriptClass.cpp +++ b/src/ScriptResolving/AngelScript/TypeRegistry/BasicScriptClass.cpp @@ -21,6 +21,7 @@ shared abstract class PkmnScript { void OnSecondaryEffect(ExecutingMove@ attack, Pokemon@ target, uint8 hit){}; void OnAfterHits(ExecutingMove@ attack, Pokemon@ target){}; + void ModifyEffectChance(ExecutingMove@ attack, Pokemon@ target, uint16& chance){}; } )"); assert(r >= 0);