From f5153a85dc486c181db7cd7ef75e990fd821c55e Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Sat, 31 Oct 2026 11:24:23 +0000 Subject: [PATCH] Decompile 7 functions in Source/Contents/Skills/SkillActionShinkiroShiranui.cpp Batch #7705 by secret: 0 byte-identical, 7 confirmed by peer review. - fn_08745 CSkillObjectAction_SS_SBUNSHIN::Slot01: logic confirmed by peer review - fn_08747 CSkillObjectAction_SS_KUNAITRAP::Slot01: logic confirmed by peer review - fn_08769 CSkillAction_SS_FUUMASHOUAKU_HIT::Slot15: logic confirmed by peer review - fn_08772 CSkillAction_SS_KUNAIWAIKYOKU::Slot12: logic confirmed by peer review - fn_08781 CSkillAction_SS_SEKIENHOU::Slot11: logic confirmed by peer review - fn_08794 CSkillAction_SS_KINRYUUHOU::Slot11: logic confirmed by peer review - fn_08799 CSkillAction_SS_ANTENPOU::Slot11: logic confirmed by peer review Peer-reviewed-by: eAthena, Yommy Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- .../Skills/SkillActionShinkiroShiranui.cpp | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/Source/Contents/Skills/SkillActionShinkiroShiranui.cpp b/Source/Contents/Skills/SkillActionShinkiroShiranui.cpp index 5e6a2536..d9c255b4 100644 --- a/Source/Contents/Skills/SkillActionShinkiroShiranui.cpp +++ b/Source/Contents/Skills/SkillActionShinkiroShiranui.cpp @@ -1,7 +1,11 @@ +#include "Client/Mode/CGameMode.h" +#include "Client/Mode/ModeMgr.h" #include "Contents/Actors/GameActor.h" #include "Contents/Actors/RenderObject.h" +#include "Contents/Camera/Camera.h" #include "Contents/Configuration/ServiceOptions.h" #include "Contents/EffectResourceSwitcher.h" +#include "Contents/Effects/EZ2STREffectEx.h" #include "Contents/Effects/Effect.h" #include "Contents/Effects/EffectActor.h" #include "Contents/Effects/EffectLists.h" @@ -45,6 +49,7 @@ public: int Slot01() override; int Slot02() override; void Slot08(int level, CGameActor* source) override; + void Slot11(int level, CGameActor* source, CGameActor* target) override; void Slot16(int level, CGameActor* source, CGameActor* target) override; }; @@ -53,6 +58,7 @@ public: int Slot01() override; int Slot02() override; void Slot08(int level, CGameActor* source) override; + void Slot11(int level, CGameActor* source, CGameActor* target) override; }; class CSkillAction_SS_KAGEAKUMU : public CSkillAction { @@ -160,6 +166,18 @@ void CSkillAction_SS_KINRYUUHOU::Slot08(int level, CGameActor* source) { } } +// OFFSET: 0x00795A30 +// FUNCTION: fn_08794 +void CSkillAction_SS_KINRYUUHOU::Slot11(int level, CGameActor* source, CGameActor* target) { + if (source && target) { + const float angle = ScreenAngle(&source->render.position.x, &target->render.position.x, static_cast(g_modeMgr.GetGameMode())->camera->frame.view.values); + const vector3d position = source->render.position; + if (CEffect* effect = g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId("kinryuuhou"), position.x, position.y, position.z, 0, -1, 0, 0)) { + effect->Slot17(angle); + } + } +} + // OFFSET: 0x00795BD0 // FUNCTION: fn_08795 void CSkillAction_SS_KINRYUUHOU::Slot16(int level, CGameActor* source, CGameActor* target) { @@ -188,6 +206,15 @@ void CSkillAction_SS_ANTENPOU::Slot08(int level, CGameActor* source) { } } +// OFFSET: 0x00795D90 +// FUNCTION: fn_08799 +void CSkillAction_SS_ANTENPOU::Slot11(int level, CGameActor* source, CGameActor* target) { + if (source) { + const vector3d position = source->render.position; + g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId("antenpou"), position.x, position.y, position.z, 0, -1, 0, 0); + } +} + // OFFSET: 0x00795D60 // OFFSET: 0x00795EE0 @@ -368,11 +395,13 @@ public: class CSkillObjectAction_SS_SBUNSHIN : public CSkillObjectAction { public: void Slot00(int argument, CRenderObject* object, CGameActor* source) override; + void Slot01(CRenderObject* object) override; }; class CSkillObjectAction_SS_KUNAITRAP : public CSkillObjectAction { public: void Slot00(int argument, CRenderObject* object, CGameActor* source) override; + void Slot01(CRenderObject* object) override; }; class CSkillAction_SS_TOKEDASU : public CSkillAction { @@ -430,10 +459,16 @@ public: void Slot12(vector3d position, int argument2, int argument3) override; }; +class CSkillAction_SS_FUUMASHOUAKU_HIT : public CSkillAction { +public: + void Slot15(int level, CGameActor* source, CGameActor* target) override; +}; + class CSkillAction_SS_KUNAIWAIKYOKU : public CSkillAction { public: int Slot02() override; void Slot08(int level, CGameActor* source) override; + void Slot12(vector3d position, int argument2, int argument3) override; }; class CSkillAction_SS_KUNAIKAITEN : public CSkillAction { @@ -454,6 +489,7 @@ public: int Slot01() override; int Slot02() override; void Slot08(int level, CGameActor* source) override; + void Slot11(int level, CGameActor* source, CGameActor* target) override; }; // OFFSET: 0x00792500 @@ -513,6 +549,17 @@ void CSkillObjectAction_SS_SBUNSHIN::Slot00(int argument, CRenderObject* object, } } +// OFFSET: 0x00792C60 +// FUNCTION: fn_08745 +void CSkillObjectAction_SS_SBUNSHIN::Slot01(CRenderObject* object) { + if (object) { + g_effectMgr->Retire(object->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("shinkirou_idle_start")); + g_effectMgr->Retire(object->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("shinkirou_idle_loop")); + const vector3d position = object->render.position; + g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId("shinkirou_idle_end"), position.x, position.y, position.z, 0, -1, 0, 0); + } +} + // OFFSET: 0x00792F90 // FUNCTION: fn_08746 void CSkillObjectAction_SS_KUNAITRAP::Slot00(int argument, CRenderObject* object, CGameActor* source) { @@ -522,6 +569,16 @@ void CSkillObjectAction_SS_KUNAITRAP::Slot00(int argument, CRenderObject* object } } +// OFFSET: 0x00793210 +// FUNCTION: fn_08747 +void CSkillObjectAction_SS_KUNAITRAP::Slot01(CRenderObject* object) { + if (object) { + g_effectMgr->Retire(object->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("kunaiarea_01_loop")); + const vector3d position = object->render.position; + g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId("kunaiarea_01_end"), position.x, position.y, position.z, 0, -1, 0, 0); + } +} + // OFFSET: 0x00793450 // FUNCTION: fn_08748 void CSkillAction_SS_TOKEDASU::Slot12(vector3d position, int argument2, int argument3) { @@ -670,6 +727,15 @@ void CSkillAction_SS_FUUMAKOUCHIKU::Slot12(vector3d position, int argument2, int g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId("new_fuumakouchiku"), position.x, position.y, position.z, 0, -1, 0, 0); } +// OFFSET: 0x00794350 +// FUNCTION: fn_08769 +void CSkillAction_SS_FUUMASHOUAKU_HIT::Slot15(int level, CGameActor* source, CGameActor* target) { + if (target) { + const vector3d position = target->render.position; + g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId("fuumakouchiku_blasting"), position.x, position.y, position.z, 0, -1, 0, 0); + } +} + // OFFSET: 0x007944C0 // FUNCTION: fn_08770 int CSkillAction_SS_KUNAIWAIKYOKU::Slot02() { @@ -685,6 +751,19 @@ void CSkillAction_SS_KUNAIWAIKYOKU::Slot08(int level, CGameActor* source) { } } +// OFFSET: 0x00794540 +// FUNCTION: fn_08772 +void CSkillAction_SS_KUNAIWAIKYOKU::Slot12(vector3d position, int argument2, int argument3) { + CGameActor* shadow = reinterpret_cast(argument3); + if (shadow) { + const float angle = ScreenAngle(&shadow->render.position.x, &position.x, static_cast(g_modeMgr.GetGameMode())->camera->frame.view.values); + const vector3d spot = shadow->render.position; + if (CEffect* effect = g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId("kunaiwaikyoku"), spot.x, spot.y, spot.z, 0, -1, 0, 0)) { + effect->Slot17(angle); + } + } +} + // OFFSET: 0x007946E0 // FUNCTION: fn_08773 int CSkillAction_SS_KUNAIKAITEN::Slot02() { @@ -756,6 +835,18 @@ void CSkillAction_SS_SEKIENHOU::Slot08(int level, CGameActor* source) { } } +// OFFSET: 0x00794ED0 +// FUNCTION: fn_08781 +void CSkillAction_SS_SEKIENHOU::Slot11(int level, CGameActor* source, CGameActor* target) { + if (target) { + g_effectMgr->Spawn(0, 1270, target->render.position.x, target->render.position.y, target->render.position.z, 0, -1, 0, 0); + const vector3d position = target->render.position; + if (CEffect* effect = g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId("new_sekienhou"), position.x, position.y, position.z, 0, -1, 0, 0)) { + effect->Slot17(270.0f); + } + } +} + // OFFSET: 0x00795070 // FUNCTION: fn_08782 int CSkillAction_SS_REIKETSUHOU::Slot01() {