From 52ee9ed14be70b58bb8af7ba90a653cc5e1bcc0c Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Sat, 31 Oct 2026 12:12:41 +0000 Subject: [PATCH] Decompile fn_08959 (CSkillAction_SH_HYUN_ROK_CANNON::Slot11) Batch #7816 by eAthena: 0 byte-identical, 1 confirmed by peer review. - fn_08959 CSkillAction_SH_HYUN_ROK_CANNON::Slot11: logic confirmed by peer review Peer-reviewed-by: secret, Snow, Tanke Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- .../Skills/SkillActionSpiritHandler.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Source/Contents/Skills/SkillActionSpiritHandler.cpp b/Source/Contents/Skills/SkillActionSpiritHandler.cpp index 458551ed6..3e59ffe6b 100644 --- a/Source/Contents/Skills/SkillActionSpiritHandler.cpp +++ b/Source/Contents/Skills/SkillActionSpiritHandler.cpp @@ -91,6 +91,7 @@ public: class CSkillAction_SH_HYUN_ROK_CANNON : public CSkillAction { public: void Slot08(int level, CGameActor* source) override; + void Slot11(int level, CGameActor* source, CGameActor* target) override; }; class CSkillObjectAction_SH_HYUN_ROKS_BREEZE : public CSkillObjectAction { @@ -384,6 +385,23 @@ void CSkillAction_SH_HYUN_ROK_CANNON::Slot08(int level, CGameActor* source) { } } +// OFFSET: 0x007A07A0 +// FUNCTION: fn_08959 +void CSkillAction_SH_HYUN_ROK_CANNON::Slot11(int level, CGameActor* source, CGameActor* target) { + if (!source || !target) { + return; + } + + 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("hyun_rok_cannon"), position.x, position.y, position.z, 0, -1, 0, 0)) { + effect->Slot17(angle); + } +} + // OFFSET: 0x007A0950 // FUNCTION: fn_08960 void CSkillAction_SH_TEMPORARY_COMMUNION::Slot08(int level, CGameActor* source) {