From be749d87c88fe01d0c06ab6a7cfeebeb91bc3496 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Wed, 28 Oct 2026 22:12:16 +0000 Subject: [PATCH] Decompile 3 functions in Source/Contents/Skills/SkillInfo.cpp, Source/Contents/Skills/SkillInfo.h Batch #1771 by Yommy: 3 byte-identical, 0 confirmed by peer review. - fn_08371 CSkillAction_ABC_CHASING_BREAK::Slot07: byte-identical - fn_08375 CSkillAction_ABC_CHASING_SHOT::Slot07: byte-identical - fn_08385 CSkillAction_ABC_ABYSS_FLAME_ATK::Slot03: byte-identical Merged automatically: every function is byte-identical to the original. --- Source/Contents/Skills/SkillInfo.cpp | 134 +++++++++++++++++++++++++++ Source/Contents/Skills/SkillInfo.h | 82 +++++++++++++++- 2 files changed, 214 insertions(+), 2 deletions(-) diff --git a/Source/Contents/Skills/SkillInfo.cpp b/Source/Contents/Skills/SkillInfo.cpp index e2f934c..2c0dc93 100644 --- a/Source/Contents/Skills/SkillInfo.cpp +++ b/Source/Contents/Skills/SkillInfo.cpp @@ -1,11 +1,83 @@ +#include "Client/Mode/ActiveGameMode.h" +#include "Client/Mode/CGameMode.h" +#include "Contents/Actors/GameActor.h" +#include "Contents/Configuration/ServiceOptions.h" +#include "Contents/Effects/EffectActor.h" +#include "Contents/Effects/EffectLists.h" +#include "Contents/Effects/EffectPrimitiveState.h" +#include "Contents/MessageTable.h" #include "Contents/Skills/SkillId.h" #include "Contents/Skills/SkillInfo.h" +#include "Contents/Sound/SoundMgr.h" #include "Contents/UserData/NormalItemSlots.h" +#include "Contents/World/WorldScene.h" +#include "Resource/World/TerrainResource.h" #include "Script/LuaScript.h" +#include #include #include +class CEfstAction_ChangeSize : public CEfstAction { +public: + void Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) override; + void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override; +}; + +class CEfstAction_GenderChange : public CEfstAction { +public: + void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override; +}; + +class CEfstAction_ShowEffect : public CEfstAction { +public: + void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override; +}; + +class CSkillAction_RA_UNLIMIT : public CSkillAction { +public: + void Slot08(int level, CGameActor* source) override; +}; + +class CEfstAction_UNLIMIT : public CEfstAction { +public: + void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override; +}; + +class CEfstAction_SHADOW_WEAPON : public CEfstAction { +public: + EfstActionMessage Slot03() override; + EfstActionMessage Slot04() override; +}; + +class CEfstAction_DANCING_KNIFE : public CEfstAction { +public: + void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override; +}; + +class CEfstAction_SHADOW_EXCEED : public CEfstAction { +public: + void Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) override; + void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override; + EfstActionMessage Slot03() override; + EfstActionMessage Slot04() override; +}; + +class CSkillAction_ABC_CHASING_BREAK : public CSkillAction { +public: + bool Slot07() override; +}; + +class CSkillAction_ABC_CHASING_SHOT : public CSkillAction { +public: + bool Slot07() override; +}; + +class CSkillAction_ABC_ABYSS_FLAME_ATK : public CSkillAction { +public: + bool Slot03(int argument) override; +}; + // GLOBAL: gl_24640 CSkillActionMgr* g_skillActionMgr; @@ -405,3 +477,65 @@ bool ShowsCastEffect(int skillId) { return true; } } + +// OFFSET: 0x007747B0 + +// OFFSET: 0x007747E0 + +// OFFSET: 0x00774E20 + +// OFFSET: 0x00774F30 + +// OFFSET: 0x00774FB0 + +// OFFSET: 0x007756D0 + +// OFFSET: 0x007764E0 + +// OFFSET: 0x00776510 + +// OFFSET: 0x00777910 + +// OFFSET: 0x00777E80 + +// OFFSET: 0x00777EE0 + +// OFFSET: 0x00777F00 + +// OFFSET: 0x00777F30 + +// OFFSET: 0x00778140 +// FUNCTION: fn_08371 +bool CSkillAction_ABC_CHASING_BREAK::Slot07() { + return true; +} + +// OFFSET: 0x00778580 +// FUNCTION: fn_08375 +bool CSkillAction_ABC_CHASING_SHOT::Slot07() { + return true; +} + +// OFFSET: 0x007794D0 +// FUNCTION: fn_08385 +bool CSkillAction_ABC_ABYSS_FLAME_ATK::Slot03(int argument) { + return true; +} + +// OFFSET: 0x0077ACC0 + +// OFFSET: 0x0077AD90 + +// OFFSET: 0x0077AEA0 + +// OFFSET: 0x0077AF80 + +// OFFSET: 0x0077B060 + +// OFFSET: 0x0077B210 + +// OFFSET: 0x0077B2E0 + +// OFFSET: 0x0077B3A0 + +// OFFSET: 0x0077B460 diff --git a/Source/Contents/Skills/SkillInfo.h b/Source/Contents/Skills/SkillInfo.h index 31733dd..f2b4236 100644 --- a/Source/Contents/Skills/SkillInfo.h +++ b/Source/Contents/Skills/SkillInfo.h @@ -6,16 +6,83 @@ #include #include #include +#include #include -class CEfstAction; +class CGameActor; +class CRenderObject; class CSkillObjectAction; class LuaScript; +struct EffectVector3; struct NormalItemSlot; +struct EfstActionMessage { + /* 0000 */ const char* text; + /* 0004 */ std::uint32_t color; +}; + class CSkillAction { public: - virtual bool Slot00() = 0; + virtual bool Slot00() { + return false; + } + virtual int Slot01() { + return 8; + } + virtual int Slot02() { + return 7; + } + virtual bool Slot03(int argument) { + return false; + } + virtual bool Slot04() { + return false; + } + virtual bool Slot05() { + return false; + } + virtual bool Slot06() { + return false; + } + virtual bool Slot07() { + return false; + } + virtual void Slot08(int level, CGameActor* source) { + } + virtual void Slot09(int argument1, int argument2, int argument3) { + } + virtual void Slot10(int argument1, int argument2, int argument3, int argument4, int argument5) { + } + virtual void Slot11(int level, CGameActor* source, CGameActor* target) { + } + virtual void Slot12(int argument1, int argument2, int argument3, int argument4, int argument5) { + } + virtual bool Slot13() { + return false; + } + virtual int Slot14() { + return 0; + } + virtual void Slot15(int level, CGameActor* source, CGameActor* target) { + } + virtual void Slot16(int level, CGameActor* source, CGameActor* target) { + } +}; + +class CEfstAction { +public: + virtual void Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) { + } + virtual void Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) { + } + virtual void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) { + } + virtual EfstActionMessage Slot03() { + return {nullptr, 0xFFFF00}; + } + virtual EfstActionMessage Slot04() { + return {nullptr, 0xFF}; + } }; struct SkillInfoEntry { @@ -68,6 +135,14 @@ public: static CSkillActionMgr* GetInstance(); bool IsSupportAction(int skillId); + std::pair ActionSlot01(int skillId); + std::pair ActionSlot02(int skillId); + int ActionSlot14(int skillId); + bool ActionSlot03(int skillId, int argument); + bool ActionSlot04(int skillId); + EfstActionMessage EfstSlot03(int efstId); + EfstActionMessage EfstSlot04(int efstId); + bool HasEfstAction(int efstId); }; extern CSkillActionMgr* g_skillActionMgr; @@ -85,6 +160,7 @@ bool IsOptionalSelfTargetSkill(int skillId); bool HidesUseFailureMessage(int skillId); bool IsSupportSkill(int skillId); bool ShowsCastEffect(int skillId); +EffectVector3 CellWorldPosition(int column, int row); static_assert(sizeof(SkillInfoEntry) == 8); #if defined(_WIN32) && !defined(_WIN64) static_assert(offsetof(SkillInfoEntry, unknown_0004) == 0x4); @@ -93,6 +169,8 @@ static_assert(offsetof(CSkillActionMgr, m_efstActions) == 0x0C); static_assert(offsetof(CSkillActionMgr, m_skillObjectActions) == 0x14); static_assert(sizeof(CSkillActionMgr) == 0x1C); static_assert(sizeof(CSkillAction) == 4); +static_assert(sizeof(CEfstAction) == 4); +static_assert(sizeof(EfstActionMessage) == 8); #endif #endif