diff --git a/Penumbra/Interop/ResourceTree/ResolveContext.cs b/Penumbra/Interop/ResourceTree/ResolveContext.cs index a359411b..26d64afe 100644 --- a/Penumbra/Interop/ResourceTree/ResolveContext.cs +++ b/Penumbra/Interop/ResourceTree/ResolveContext.cs @@ -107,6 +107,16 @@ internal record ResolveContext(GlobalResolveContext Global, EquipSlot Slot, Char return node; } + public unsafe ResourceNode? CreateNodeFromEid(ResourceHandle* eid) + { + if (eid == null) + return null; + + var path = Utf8GamePath.Empty; // TODO + + return GetOrCreateNode(ResourceType.Eid, 0, eid, path); + } + public unsafe ResourceNode? CreateNodeFromImc(ResourceHandle* imc) { if (imc == null) diff --git a/Penumbra/Interop/ResourceTree/ResourceNode.cs b/Penumbra/Interop/ResourceTree/ResourceNode.cs index f520c83a..53dedfa0 100644 --- a/Penumbra/Interop/ResourceTree/ResourceNode.cs +++ b/Penumbra/Interop/ResourceTree/ResourceNode.cs @@ -31,7 +31,7 @@ public class ResourceNode : ICloneable } public bool Internal - => Type is ResourceType.Imc; + => Type is ResourceType.Eid or ResourceType.Imc; internal ResourceNode(ResourceType type, nint objectAddress, nint resourceHandle, ulong length, ResolveContext? resolveContext) { diff --git a/Penumbra/Interop/ResourceTree/ResourceTree.cs b/Penumbra/Interop/ResourceTree/ResourceTree.cs index 38dae6b8..687c14ec 100644 --- a/Penumbra/Interop/ResourceTree/ResourceTree.cs +++ b/Penumbra/Interop/ResourceTree/ResourceTree.cs @@ -62,6 +62,15 @@ public class ResourceTree CustomizeData = character->DrawData.CustomizeData; RaceCode = human != null ? (GenderRace)human->RaceSexId : GenderRace.Unknown; + var eid = (ResourceHandle*)model->EID; + var eidNode = globalContext.CreateContext(EquipSlot.Unknown, default).CreateNodeFromEid(eid); + if (eidNode != null) + { + if (globalContext.WithUiData) + eidNode.FallbackName = "EID"; + Nodes.Add(eidNode); + } + for (var i = 0; i < model->SlotCount; ++i) { var context = globalContext.CreateContext( @@ -113,6 +122,15 @@ public class ResourceTree weapon != null ? new CharacterArmor(weapon->ModelSetId, (byte)weapon->Variant, (byte)weapon->ModelUnknown) : default ); + var eid = (ResourceHandle*)subObject->EID; + var eidNode = subObjectContext.CreateNodeFromEid(eid); + if (eidNode != null) + { + if (globalContext.WithUiData) + eidNode.FallbackName = $"{subObjectNamePrefix} #{subObjectIndex}, EID"; + Nodes.Add(eidNode); + } + for (var i = 0; i < subObject->SlotCount; ++i) { var imc = (ResourceHandle*)subObject->IMCArray[i];