From 5af2c8f5ac3d9c854a85cd4561c59e8dbd70df7b Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Fri, 30 Oct 2026 22:55:22 +0000 Subject: [PATCH] Decompile 2 functions in Source/Contents/Skills/SkillActionDruid.cpp Batch #6398 by eAthena: 0 byte-identical, 2 confirmed by peer review. - fn_04457 CEfstAction_WEREWOLF::Slot00: logic confirmed by peer review - fn_04462 CEfstAction_WERERAPTOR::Slot00: logic confirmed by peer review Peer-reviewed-by: willerthal, superintelligence, ragnarok-clanker, OvoKore, SapitoSucio Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- Source/Contents/Skills/SkillActionDruid.cpp | 31 +++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/Source/Contents/Skills/SkillActionDruid.cpp b/Source/Contents/Skills/SkillActionDruid.cpp index 811bdd29..a0ddfb42 100644 --- a/Source/Contents/Skills/SkillActionDruid.cpp +++ b/Source/Contents/Skills/SkillActionDruid.cpp @@ -94,8 +94,17 @@ public: void Slot11(int level, CGameActor* source, CGameActor* target) override; }; -class CEfstAction_WERERAPTOR : public CEfstAction { +class CEfstAction_AnimalForm : public CEfstAction { public: + void Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) override; + void ResetAnimalForm(CRenderObject* actor); + void ApplyAnimalForm(CRenderObject* actor, int form); + void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override; +}; + +class CEfstAction_WERERAPTOR : public CEfstAction_AnimalForm { +public: + void Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) override; EfstActionMessage Slot03() override; EfstActionMessage Slot04() override; }; @@ -338,8 +347,9 @@ public: void Slot11(int level, CGameActor* source, CGameActor* target) override; }; -class CEfstAction_WEREWOLF : public CEfstAction { +class CEfstAction_WEREWOLF : public CEfstAction_AnimalForm { public: + void Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) override; EfstActionMessage Slot03() override; EfstActionMessage Slot04() override; }; @@ -1156,3 +1166,20 @@ void CSkillAction_DR_SHOOTING_FEATHER::Slot15(int level, CGameActor* source, CGa this->sub_5A4760(level, source); } +// OFFSET: 0x0061FF40 +// FUNCTION: fn_04457 +void CEfstAction_WEREWOLF::Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) { + if (actor) { + this->ApplyAnimalForm(actor, 1); + static_cast(actor)->Slot32(); + } +} + +// OFFSET: 0x006201F0 +// FUNCTION: fn_04462 +void CEfstAction_WERERAPTOR::Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) { + if (actor) { + this->ApplyAnimalForm(actor, 2); + static_cast(actor)->Slot32(); + } +}