From b5f5701a8f7762b67e48c6e3510e25ed5ac5eabb Mon Sep 17 00:00:00 2001 From: Loskh <1020612624@qq.com> Date: Sat, 27 Dec 2025 00:31:50 +0800 Subject: [PATCH 1/3] Update AtkUldManager --- .../FFXIV/Component/GUI/AtkUldManager.cs | 27 +++++++++++++++++++ ida/data.yml | 10 +++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/FFXIVClientStructs/FFXIV/Component/GUI/AtkUldManager.cs b/FFXIVClientStructs/FFXIV/Component/GUI/AtkUldManager.cs index 2daf467008..d08e60df24 100644 --- a/FFXIVClientStructs/FFXIV/Component/GUI/AtkUldManager.cs +++ b/FFXIVClientStructs/FFXIV/Component/GUI/AtkUldManager.cs @@ -52,6 +52,33 @@ public unsafe partial struct AtkUldManager { [MemberFunction("E8 ?? ?? ?? ?? 49 8B 55 ?? 0F B7 CD")] public partial AtkResNode* CreateAtkNode(uint type); + [MemberFunction("E8 ?? ?? ?? ?? F6 83 ?? ?? ?? ?? ?? 75 17")] + public partial void SetupFromULDResourceHandle(nint* resourceHandle0, nint* resourceHandle1); + + [MemberFunction("40 57 41 56 41 57 48 83 EC 30 45 8B 71 18")] + public partial void SetupTimelineFromULDResourceHandle(nint* memSpace, nint* resourceHandle0, nint* resourceHandle1, ushort timelineNum); + + [MemberFunction("E8 ?? ?? ?? ?? 49 8B 86 ?? ?? ?? ?? 48 85 C0 74 21")] + public partial void SetupComponentFromULDResourceHandle(nint* resourceHandle, uint componentId, ushort* timeline, AtkUldAsset* uldAsset, AtkUldPartsList* uldPartList, ushort assetNum, ushort partsNum, AtkResourceRendererManager* renderManager, bool a, bool b); + + [MemberFunction("48 89 6C 24 ?? 48 89 74 24 ?? 41 56 48 83 EC 30 4C 89 49")] + public partial void SetupComponentTimelineFromULDResourceHandle(nint* resourceHandle, uint componetId, AtkTimelineManager* atkTimeLineManager, AtkResNode* node); + + [MemberFunction("E8 ?? ?? ?? ?? 0F B7 47 0E")] + public partial void BindTimeline(nint* resourceHandle, AtkUldObjectInfo* objects, byte* nodeData, AtkTimelineManager* atkTimeLineManager); + + [MemberFunction("40 56 48 83 EC 20 48 8B 41 10")] + public partial void SetupText(); + + [MemberFunction("E8 ?? ?? ?? ?? 0F B6 8E ?? ?? ?? ?? 48 8B 86")] + public partial void SetupTexture(nint* memSpace,AtkResNode* node, AtkUldPartsList* parts,uint id); + + [MemberFunction("E8 ?? ?? ?? ?? 48 8B 7F 28 66 03 E8")] + public partial int GetNodeCount(AtkResNode* node); + + [MemberFunction("E8 ?? ?? ?? ?? E9 ?? ?? ?? ?? 66 83 F8 04")] + public partial void ReadAtkTextNodeData(AtkTextNode* node, byte* nodeData,bool unk); + public AtkResNode* CreateAtkNode(NodeType type) => CreateAtkNode((uint)type); diff --git a/ida/data.yml b/ida/data.yml index 5f6dd496a5..5b49312251 100644 --- a/ida/data.yml +++ b/ida/data.yml @@ -2468,7 +2468,6 @@ classes: 0x14064EC20: UpdateTextLayouts 0x140649910: PopulateTextLabels 0x140647410: SetupComponentFromULDResourceHandle - 0x140649B40: CreateTimeline 0x140649E00: ReadComponentData 0x14064AA70: ReadTPHD # PartList 0x14064AC80: ReadASHDAndLoadTextures # AssetList @@ -2490,6 +2489,14 @@ classes: 0x14064BFA0: UpdateDrawNodeList 0x14064C210: TraverseNode 0x14064DE50: Finalizer + 0x140649B40: SetupTimelineFromULDResourceHandle # CreateTimeline + 0x1406499D0: SetupComponentTimelineFromULDResourceHandle + 0x140649C80: BindTimeline + 0x140649850: SetupText + 0x14064B560: SetupTexture + 0x14064F230: GetNodeCount + 0x14064A630: ReadAtkTextNodeData + 0x14064A300: ReadAtkResNodeData Component::GUI::AtkTimeline: funcs: 0x14068F770: GetStartFrameIdxForLabelId @@ -7800,7 +7807,6 @@ classes: 0x140642AD0: SetOriginUnsafe 0x140642B40: SetOriginXUnsafe 0x140642B90: SetOriginYUnsafe - 0x14064A300: ReadNodeData 0x14064EBD0: SetComponentSize 0x14066D6E0: GetComponent_2 0x140670800: GetAsAtkComponentButton From 61be8562b215ee1a988aac71ca4fa3508702a868 Mon Sep 17 00:00:00 2001 From: Loskh <1020612624@qq.com> Date: Mon, 5 Jan 2026 19:08:20 +0800 Subject: [PATCH 2/3] fix: refine arg types and names --- .../FFXIV/Component/GUI/AtkUldManager.cs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/FFXIVClientStructs/FFXIV/Component/GUI/AtkUldManager.cs b/FFXIVClientStructs/FFXIV/Component/GUI/AtkUldManager.cs index d08e60df24..8104191d8c 100644 --- a/FFXIVClientStructs/FFXIV/Component/GUI/AtkUldManager.cs +++ b/FFXIVClientStructs/FFXIV/Component/GUI/AtkUldManager.cs @@ -1,3 +1,4 @@ +using FFXIVClientStructs.FFXIV.Client.System.Memory; using FFXIVClientStructs.FFXIV.Client.System.Resource.Handle; namespace FFXIVClientStructs.FFXIV.Component.GUI; @@ -53,31 +54,31 @@ public unsafe partial struct AtkUldManager { public partial AtkResNode* CreateAtkNode(uint type); [MemberFunction("E8 ?? ?? ?? ?? F6 83 ?? ?? ?? ?? ?? 75 17")] - public partial void SetupFromULDResourceHandle(nint* resourceHandle0, nint* resourceHandle1); + public partial void SetupFromULDResourceHandle(byte* uldResourceOffset0, byte* uldResoruceOffset1); [MemberFunction("40 57 41 56 41 57 48 83 EC 30 45 8B 71 18")] - public partial void SetupTimelineFromULDResourceHandle(nint* memSpace, nint* resourceHandle0, nint* resourceHandle1, ushort timelineNum); + public partial void SetupTimelineFromULDResourceHandle(IMemorySpace* memSpace, byte* uldResourceOffset0, byte* uldResoruceOffset1, ushort timelineNum); [MemberFunction("E8 ?? ?? ?? ?? 49 8B 86 ?? ?? ?? ?? 48 85 C0 74 21")] - public partial void SetupComponentFromULDResourceHandle(nint* resourceHandle, uint componentId, ushort* timeline, AtkUldAsset* uldAsset, AtkUldPartsList* uldPartList, ushort assetNum, ushort partsNum, AtkResourceRendererManager* renderManager, bool a, bool b); - + public partial void SetupComponentFromULDResourceHandle(byte* uldResourceOffset, uint componentId, ushort* timeline, AtkUldAsset* uldAsset, AtkUldPartsList* uldPartList, ushort assetNum, ushort partsNum, AtkResourceRendererManager* renderManager, bool unkResourceBool, bool keepHandle); + [MemberFunction("48 89 6C 24 ?? 48 89 74 24 ?? 41 56 48 83 EC 30 4C 89 49")] - public partial void SetupComponentTimelineFromULDResourceHandle(nint* resourceHandle, uint componetId, AtkTimelineManager* atkTimeLineManager, AtkResNode* node); + public partial void SetupComponentTimelineFromULDResourceHandle(byte* uldResourceOffset, uint componetId, AtkTimelineManager* atkTimeLineManager, AtkResNode* node); [MemberFunction("E8 ?? ?? ?? ?? 0F B7 47 0E")] - public partial void BindTimeline(nint* resourceHandle, AtkUldObjectInfo* objects, byte* nodeData, AtkTimelineManager* atkTimeLineManager); + public partial void BindTimeline(byte* uldResourceOffset, AtkUldObjectInfo* objects, byte* nodeData, AtkTimelineManager* atkTimeLineManager); [MemberFunction("40 56 48 83 EC 20 48 8B 41 10")] public partial void SetupText(); [MemberFunction("E8 ?? ?? ?? ?? 0F B6 8E ?? ?? ?? ?? 48 8B 86")] - public partial void SetupTexture(nint* memSpace,AtkResNode* node, AtkUldPartsList* parts,uint id); + public partial void SetupTexture(IMemorySpace* memSpace, AtkResNode* node, AtkUldPartsList** parts, uint id); [MemberFunction("E8 ?? ?? ?? ?? 48 8B 7F 28 66 03 E8")] public partial int GetNodeCount(AtkResNode* node); [MemberFunction("E8 ?? ?? ?? ?? E9 ?? ?? ?? ?? 66 83 F8 04")] - public partial void ReadAtkTextNodeData(AtkTextNode* node, byte* nodeData,bool unk); + public static partial void ReadAtkTextNodeData(AtkTextNode* node, byte* nodeData,bool unk); public AtkResNode* CreateAtkNode(NodeType type) => CreateAtkNode((uint)type); From 7504cb0cfeff24073a8159913adc78bdf6487c21 Mon Sep 17 00:00:00 2001 From: wolfcomp <4028289+wolfcomp@users.noreply.github.com> Date: Mon, 26 Jan 2026 13:25:25 +0100 Subject: [PATCH 3/3] Apply suggestion from @wolfcomp --- FFXIVClientStructs/FFXIV/Component/GUI/AtkUldManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FFXIVClientStructs/FFXIV/Component/GUI/AtkUldManager.cs b/FFXIVClientStructs/FFXIV/Component/GUI/AtkUldManager.cs index 8104191d8c..08da60966b 100644 --- a/FFXIVClientStructs/FFXIV/Component/GUI/AtkUldManager.cs +++ b/FFXIVClientStructs/FFXIV/Component/GUI/AtkUldManager.cs @@ -62,7 +62,7 @@ public unsafe partial struct AtkUldManager { [MemberFunction("E8 ?? ?? ?? ?? 49 8B 86 ?? ?? ?? ?? 48 85 C0 74 21")] public partial void SetupComponentFromULDResourceHandle(byte* uldResourceOffset, uint componentId, ushort* timeline, AtkUldAsset* uldAsset, AtkUldPartsList* uldPartList, ushort assetNum, ushort partsNum, AtkResourceRendererManager* renderManager, bool unkResourceBool, bool keepHandle); - [MemberFunction("48 89 6C 24 ?? 48 89 74 24 ?? 41 56 48 83 EC 30 4C 89 49")] + [MemberFunction("E8 ?? ?? ?? ?? 81 7F ?? ?? ?? ?? ?? 4C 8B CB")] public partial void SetupComponentTimelineFromULDResourceHandle(byte* uldResourceOffset, uint componetId, AtkTimelineManager* atkTimeLineManager, AtkResNode* node); [MemberFunction("E8 ?? ?? ?? ?? 0F B7 47 0E")]