Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 21 additions & 13 deletions CompatChecker/Parse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,25 +22,31 @@ namespace CompatChecker;
CP0002: Member 'System.ReadOnlySpan<byte> FFXIVClientStructs.STD.StdString.AsSpan()' exists on ida/cs-main/FFXIVClientStructs.dll but not on ida/cs-pr/FFXIVClientStructs.dll
CP0002: Member 'FFXIVClientStructs.FFXIV.Client.Game.HouseId.implicit operator long(FFXIVClientStructs.FFXIV.Client.Game.HouseId)' exists on ida/cs-main/FFXIVClientStructs.dll but not on ida/cs-pr/FFXIVClientStructs.dll
CP0007: Type 'FFXIVClientStructs.FFXIV.Component.SteamApi.SteamTypes' does not inherit from base type 'System.Object' on D:\source\repos\dotnet-compat-checker\test_files\fail\FFXIVClientStructs-pr.dll but it does on D:\source\repos\dotnet-compat-checker\test_files\fail\FFXIVClientStructs-main.dll
CP0021: Cannot add constraint 'T:FFXIVClientStructs.FFXIV.Client.System.Memory.ICreatable{``0}' on type parameter 'T' of 'FFXIVClientStructs.FFXIV.Client.System.Memory.IMemorySpace.Create<T>()'.
*/
internal class Parse {
public static ChangeType? ParseBreakingChange(string line) {
if (line.Contains("e__FixedBuffer")) return null;
var parts = line.Split(": ");
var code = Enum.Parse<Code>(parts[0]);
var type = Enum.Parse<Type>(parts[1].Split(' ')[0]);
var message = parts[1][parts[1].IndexOf(' ')..].Trim();
var change = message[..message.IndexOf(" on", StringComparison.Ordinal)];
message = message[change.Length..].Trim();
change = change.Replace("'", "").Replace("exists", "").Replace(", ", ",").Trim();

return code switch {
Code.CP0002 => ParseMember(code, type, change, message),
Code.CP0007 => ParseNotInherit(code, type, change, message),
Code.CP0001 => new ChangeType(code, type, new Change(null, GetLocation(change)), message),
_ => new ChangeType(code, type, new Change(change), message)
};
string? message, change;
if (code != Code.CP0021) {
var type = Enum.Parse<Type>(parts[1].Split(' ')[0]);
message = parts[1][parts[1].IndexOf(' ')..].Trim();
change = message[..message.IndexOf(" on", StringComparison.InvariantCulture)];
message = message[change.Length..].Trim();
change = change.Replace("'", "").Replace("exists", "").Replace(", ", ",").Trim();

return code switch {
Code.CP0002 => ParseMember(code, type, change, message),
Code.CP0007 => ParseNotInherit(code, type, change, message),
Code.CP0001 => new ChangeType(code, type, new Change(null, GetLocation(change)), message),
_ => new ChangeType(code, type, new Change(change), message)
};
}
message = parts[1].Trim();
change = message[(message.IndexOf("of ", StringComparison.InvariantCulture) + 3)..].Replace("'", "").Trim().Trim('.');
return new ChangeType(code, Type.Type, new Change(null, GetLocation(change)), message);
}

public static Location GetLocation(string location) {
Expand Down Expand Up @@ -121,7 +127,9 @@ public enum Code {
CP0017,
CP0018,
CP0019,
CP0020
CP0020,
[Description("Constraint type changed")]
CP0021
}

public enum Type {
Expand Down
4 changes: 2 additions & 2 deletions FFXIVClientStructs/FFXIV/Client/Game/InventoryItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace FFXIVClientStructs.FFXIV.Client.Game;
[GenerateInterop(isInherited: true)]
[VirtualTable("66 89 51 0C 48 8D 05", 7)]
[StructLayout(LayoutKind.Explicit, Size = 0x48)]
public unsafe partial struct InventoryItem : ICreatable {
public unsafe partial struct InventoryItem : ICreatable<InventoryItem> {
[FieldOffset(0x08)] public InventoryType Container;
[FieldOffset(0x0C)] public short Slot;
/// <summary>
Expand Down Expand Up @@ -42,7 +42,7 @@ public enum ItemFlags : byte {
}

[MemberFunction("E8 ?? ?? ?? ?? 33 C0 48 8D 4B 58")]
public partial void Ctor();
public partial InventoryItem* Ctor();

[VirtualFunction(0)]
public partial void Dtor(byte freeFlags);
Expand Down
4 changes: 2 additions & 2 deletions FFXIVClientStructs/FFXIV/Client/Game/UI/InstanceContent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public unsafe partial struct InstanceContent {

[GenerateInterop]
[StructLayout(LayoutKind.Explicit, Size = 0x80)]
public partial struct ContentUI : ICreatable {
public partial struct ContentUI : ICreatable<ContentUI> {
[FieldOffset(0x08)] public ContentLookupInfo LookupInfo;
[FieldOffset(0x10)] public InstanceContentExcelWrapper InstanceContent;
[FieldOffset(0x28)] public ContentRoulette ContentRoulette;
Expand All @@ -38,7 +38,7 @@ public partial struct ContentUI : ICreatable {
[FieldOffset(0x68)] public GoldSaucerContent GoldSaucerContent;

[MemberFunction("45 33 C0 C6 41 08 00")]
public partial void Ctor();
public partial ContentUI* Ctor();

[MemberFunction("E8 ?? ?? ?? ?? 84 C0 74 ?? 48 8D 4E ?? 48 8B 5C 24")]
public partial bool LoadByContentLookupInfo(ContentLookupInfo* lookupInfo);
Expand Down
6 changes: 3 additions & 3 deletions FFXIVClientStructs/FFXIV/Client/System/Memory/IMemorySpace.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
namespace FFXIVClientStructs.FFXIV.Client.System.Memory;

public interface ICreatable {
public void Ctor();
public unsafe interface ICreatable<T> where T : unmanaged {
public T* Ctor();
}

// Client::System::Memory::IMemorySpace
[GenerateInterop(true)]
[StructLayout(LayoutKind.Explicit, Size = 8)]
public unsafe partial struct IMemorySpace {
public T* Create<T>() where T : unmanaged, ICreatable {
public T* Create<T>() where T : unmanaged, ICreatable<T> {
var memory = (T*)Malloc<T>();
if (memory is null) return null;
Memset(memory, 0, (ulong)sizeof(T));
Expand Down
4 changes: 2 additions & 2 deletions FFXIVClientStructs/FFXIV/Client/System/String/Utf8String.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace FFXIVClientStructs.FFXIV.Client.System.String;
// Client::System::String::Utf8String
[GenerateInterop]
[StructLayout(LayoutKind.Explicit, Size = 0x68)]
public unsafe partial struct Utf8String : ICreatable, IDisposable, IStaticNativeObjectOperation<Utf8String> {
public unsafe partial struct Utf8String : ICreatable<Utf8String>, IDisposable, IStaticNativeObjectOperation<Utf8String> {
[FieldOffset(0x0)] public CStringPointer StringPtr;
[FieldOffset(0x8)] public long BufSize; // default buffer = 0x40
/// <remarks>String length including null terminator.</remarks>
Expand Down Expand Up @@ -102,7 +102,7 @@ public int ToInteger(int fromBase = 0) {
public static partial int ToInteger(Utf8String* value, int fromBase = 0); // base 0 = detect format (0x hex, 0b bin, 0o oct)

[MemberFunction("E8 ?? ?? ?? ?? F7 C3")]
public partial void Ctor();
public partial Utf8String* Ctor();

[MemberFunction("E8 ?? ?? ?? ?? 41 8B CF EB 15")]
public partial Utf8String* Ctor_FromSequence(byte* str, nuint length);
Expand Down
2 changes: 1 addition & 1 deletion FFXIVClientStructs/FFXIV/Client/UI/Agent/AgentModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public unsafe partial struct AgentModule {
[FieldOffset(0xF70)] public AgentHelpers AgentHelpers;

[MemberFunction("E8 ?? ?? ?? ?? 48 8B 85 ?? ?? ?? ?? 48 8B CE")]
public partial void Ctor(UIModule* uiModule);
public partial AgentModule* Ctor(UIModule* uiModule);

[MemberFunction("E8 ?? ?? ?? ?? 83 7B 48 00")]
public partial AgentInterface* GetAgentByInternalId(AgentId agentId);
Expand Down
4 changes: 2 additions & 2 deletions FFXIVClientStructs/FFXIV/Client/UI/ListPanel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace FFXIVClientStructs.FFXIV.Client.UI;
// ctor "E8 ?? ?? ?? ?? 80 8F ?? ?? ?? ?? ?? 33 F6"
[GenerateInterop]
[StructLayout(LayoutKind.Explicit, Size = 0x28)]
public unsafe partial struct ListPanel : ICreatable {
public unsafe partial struct ListPanel : ICreatable<ListPanel> {
[FieldOffset(0x8)] public StdVector<ListPanelEntry> Entries;

// Width is the width of the container- used when aligning the entries
Expand All @@ -19,7 +19,7 @@ public unsafe partial struct ListPanel : ICreatable {
public partial ListPanel* Dtor(byte freeFlags);

[MemberFunction("E8 ?? ?? ?? ?? 80 8F ?? ?? ?? ?? ?? 33 F6")]
public partial void Ctor();
public partial ListPanel* Ctor();

[MemberFunction("48 8B 41 08 48 89 41 10 33 C0")]
public partial void Clear();
Expand Down
8 changes: 4 additions & 4 deletions FFXIVClientStructs/FFXIV/Client/UI/Misc/CharaView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace FFXIVClientStructs.FFXIV.Client.UI.Misc;
//
[GenerateInterop(isInherited: true)]
[StructLayout(LayoutKind.Explicit, Size = 0x318)]
public unsafe partial struct CharaView : ICreatable {
public unsafe partial struct CharaView : ICreatable<CharaView> {
[FieldOffset(0x8)] public uint State; // initialization state of KernelTexture, Camera etc. that happens in Render(), 6 = ready for use
[FieldOffset(0xC)] public uint ClientObjectId; // ID of object in ClientObjectManager, basically ClientObjectIndex + 40
[FieldOffset(0x10)] public uint ClientObjectIndex;
Expand Down Expand Up @@ -47,7 +47,7 @@ public unsafe partial struct CharaView : ICreatable {
=> IMemorySpace.GetUISpace()->Create<CharaView>();

[MemberFunction("E8 ?? ?? ?? ?? 33 ED C6 86 ?? ?? ?? ?? ?? 48 8D 05")]
public partial void Ctor();
public partial CharaView* Ctor();

[VirtualFunction(0)]
public partial void Dtor(byte freeFlags);
Expand Down Expand Up @@ -114,7 +114,7 @@ public unsafe partial struct CharaViewModelData {

[GenerateInterop]
[StructLayout(LayoutKind.Explicit, Size = 0x7C)]
public unsafe partial struct CharaViewCharacterData : ICreatable {
public unsafe partial struct CharaViewCharacterData : ICreatable<CharaViewCharacterData> {
[FieldOffset(0)] public CustomizeData CustomizeData;
// Unk 2 bytes
[FieldOffset(0x1C), FixedSizeArray] internal FixedSizeArray14<uint> _itemIds;
Expand All @@ -137,7 +137,7 @@ public unsafe partial struct CharaViewCharacterData : ICreatable {
}

[MemberFunction("E8 ?? ?? ?? ?? 4D 8D 4E 30 49 8B D6")]
public partial void Ctor();
public partial CharaViewCharacterData* Ctor();

[MemberFunction("E8 ?? ?? ?? ?? 48 8B 57 28 45 33 F6")]
public partial void ImportLocalPlayerEquipment();
Expand Down
2 changes: 1 addition & 1 deletion FFXIVClientStructs/FFXIV/Client/UI/PreviewController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public unsafe partial struct PreviewController {
[FieldOffset(0x50)] public Utf8String CharacterDisplayModeTooltipText;

[MemberFunction("E8 ?? ?? ?? ?? 80 A6 ?? ?? ?? ?? ?? B8")]
public partial void Ctor(AtkStage* atkStage);
public partial PreviewController* Ctor(AtkStage* atkStage);

[MemberFunction("E8 ?? ?? ?? ?? 48 8B CD E8 ?? ?? ?? ?? 48 8B F0")]
public partial void Detach();
Expand Down
4 changes: 2 additions & 2 deletions FFXIVClientStructs/FFXIV/Component/Completion/CategoryData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ namespace FFXIVClientStructs.FFXIV.Component.Completion;
// Component::Completion::CategoryData
[GenerateInterop]
[StructLayout(LayoutKind.Explicit, Size = 0xC0)]
public partial struct CategoryData {
public unsafe partial struct CategoryData {
[FieldOffset(0x08)] public StdVector<CStringPointer> CompletionTexts;
[FieldOffset(0x20)] public StdVector<CompletionDataStruct> CompletionData;
// [FieldOffset(0x38)] private StdVector<{ 4 bytes }> Unk38;
Expand All @@ -15,7 +15,7 @@ public partial struct CategoryData {
[FieldOffset(0xBA)] private short UnkBA;

[MemberFunction("48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 48 8D 05 ?? ?? ?? ?? 48 8B F1 48 89 01 41 0F B6 F8")]
public partial void Ctor(byte group, byte sheetNameIndex);
public partial CategoryData* Ctor(byte group, byte sheetNameIndex);

[MemberFunction("40 57 48 8B 79 28")]
public partial void SortEntries();
Expand Down
7 changes: 4 additions & 3 deletions FFXIVClientStructs/FFXIV/Component/GUI/AtkClippingMaskNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,14 @@ namespace FFXIVClientStructs.FFXIV.Component.GUI;
[Inherits<AtkResNode>]
[StructLayout(LayoutKind.Explicit, Size = 0xD0)]
[VirtualTable("E8 ?? ?? ?? ?? 49 8B 55 ?? 0F B7 CD", [1, 396])]
public unsafe partial struct AtkClippingMaskNode : ICreatable {
public unsafe partial struct AtkClippingMaskNode : ICreatable<AtkClippingMaskNode> {
[FieldOffset(0xC0)] public AtkUldPartsList* PartsList;
[FieldOffset(0xC8)] public ushort PartId;

// 7.0 inlines this ctor
public void Ctor() {
AtkResNode.Ctor();
public AtkClippingMaskNode* Ctor() {
var ret = AtkResNode.Ctor();
VirtualTable = StaticVirtualTablePointer;
return (AtkClippingMaskNode*)ret;
}
}
7 changes: 4 additions & 3 deletions FFXIVClientStructs/FFXIV/Component/GUI/AtkCollisionNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,16 @@ namespace FFXIVClientStructs.FFXIV.Component.GUI;
[Inherits<AtkResNode>]
[StructLayout(LayoutKind.Explicit, Size = 0xD0)]
[VirtualTable("E8 ?? ?? ?? ?? 49 8B 55 ?? 0F B7 CD", [1, 339])]
public unsafe partial struct AtkCollisionNode : ICreatable {
public unsafe partial struct AtkCollisionNode : ICreatable<AtkCollisionNode> {
[FieldOffset(0xC0)] public CollisionType CollisionType;
[FieldOffset(0xC2)] public ushort Uses;
[FieldOffset(0xC8)] public AtkComponentBase* LinkedComponent;

// 7.0 inlines this ctor
public void Ctor() {
AtkResNode.Ctor();
public AtkCollisionNode* Ctor() {
var ret = AtkResNode.Ctor();
VirtualTable = StaticVirtualTablePointer;
return (AtkCollisionNode*)ret;
}
}

Expand Down
4 changes: 2 additions & 2 deletions FFXIVClientStructs/FFXIV/Component/GUI/AtkComponentBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace FFXIVClientStructs.FFXIV.Component.GUI;
[GenerateInterop(isInherited: true)]
[Inherits<AtkEventListener>]
[StructLayout(LayoutKind.Explicit, Size = 0xC0)]
public unsafe partial struct AtkComponentBase : ICreatable {
public unsafe partial struct AtkComponentBase : ICreatable<AtkComponentBase> {
[FieldOffset(0x08)] public AtkUldManager UldManager;
[FieldOffset(0x98)] public uint ComponentFlags; // & 1 = UldLoaded, & 2 = Interactable/Enabled?
[FieldOffset(0xA0)] public AtkResNode* AtkResNode;
Expand All @@ -19,7 +19,7 @@ public unsafe partial struct AtkComponentBase : ICreatable {
[FieldOffset(0xB4)] public AtkCursorNavigationInfo CursorNavigationInfo;

[MemberFunction("48 8D 05 ?? ?? ?? ?? C7 81 ?? ?? ?? ?? ?? ?? ?? ?? 48 89 01 33 C0 48 89 41 08")]
public partial void Ctor();
public partial AtkComponentBase* Ctor();

[MemberFunction("E8 ?? ?? ?? ?? 83 F8 0E 75 2B")]
public partial ComponentType GetComponentType();
Expand Down
4 changes: 2 additions & 2 deletions FFXIVClientStructs/FFXIV/Component/GUI/AtkComponentButton.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace FFXIVClientStructs.FFXIV.Component.GUI;
[GenerateInterop(isInherited: true)]
[Inherits<AtkComponentBase>]
[StructLayout(LayoutKind.Explicit, Size = 0xF0)]
public unsafe partial struct AtkComponentButton : ICreatable {
public unsafe partial struct AtkComponentButton : ICreatable<AtkComponentButton> {
// based on the text size
[FieldOffset(0xC0)] public short Left;
[FieldOffset(0xC2)] public short Top;
Expand All @@ -30,7 +30,7 @@ public bool IsChecked {
}

[MemberFunction("E8 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 88 9F ?? ?? ?? ??")]
public partial void Ctor();
public partial AtkComponentButton* Ctor();

/// <summary>
/// Set the text of the component button node.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ namespace FFXIVClientStructs.FFXIV.Component.GUI;
[Inherits<AtkComponentButton>]
[StructLayout(LayoutKind.Explicit, Size = 0x110)]
[VirtualTable("E8 ?? ?? ?? ?? 4C 8B F0 48 85 C0 0F 84 ?? ?? ?? ?? 49 8B 4D 08", [1, 407])]
public unsafe partial struct AtkComponentCheckBox : ICreatable {
public void Ctor() {
AtkComponentButton.Ctor();
public unsafe partial struct AtkComponentCheckBox : ICreatable<AtkComponentCheckBox> {
public AtkComponentCheckBox* Ctor() {
var ret = AtkComponentButton.Ctor();
VirtualTable = StaticVirtualTablePointer;
return (AtkComponentCheckBox*)ret;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace FFXIVClientStructs.FFXIV.Component.GUI;
[GenerateInterop]
[Inherits<AtkComponentBase>]
[StructLayout(LayoutKind.Explicit, Size = 0x110)]
public unsafe partial struct AtkComponentDragDrop : ICreatable {
public unsafe partial struct AtkComponentDragDrop : ICreatable<AtkComponentDragDrop> {
[FieldOffset(0xC0)] public AtkDragDropInterface AtkDragDropInterface;
[FieldOffset(0xF0)] public DragDropType AcceptedType;
[FieldOffset(0xF8)] public AtkComponentIcon* AtkComponentIcon;
Expand All @@ -21,7 +21,7 @@ public unsafe partial struct AtkComponentDragDrop : ICreatable {
[FieldOffset(0x10A)] public DragDropFlag Flags;

[MemberFunction("33 D2 C7 81 ?? ?? ?? ?? ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 51 08 48 89 01 48 8D 05 ?? ?? ?? ??")]
public partial void Ctor();
public partial AtkComponentDragDrop* Ctor();

[MemberFunction("E8 ?? ?? ?? ?? 83 F8 FF 74 40")]
public partial int GetIconId();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace FFXIVClientStructs.FFXIV.Component.GUI;
[Inherits<AtkComponentBase>]
[StructLayout(LayoutKind.Explicit, Size = 0xE0)]
[VirtualTable("E8 ?? ?? ?? ?? 4C 8B F0 48 85 C0 0F 84 ?? ?? ?? ?? 49 8B 4D 08", [1, 1345])]
public unsafe partial struct AtkComponentDropDownList : ICreatable {
public unsafe partial struct AtkComponentDropDownList : ICreatable<AtkComponentDropDownList> {
[FieldOffset(0xC0)] public AtkComponentCheckBox* Checkbox;
[FieldOffset(0xC8)] public AtkComponentList* List;

Expand All @@ -26,9 +26,10 @@ public unsafe partial struct AtkComponentDropDownList : ICreatable {
[MemberFunction("E8 ?? ?? ?? ?? 83 C0 41")]
public partial int GetSelectedItemIndex();

public void Ctor() {
AtkComponentBase.Ctor();
public AtkComponentDropDownList* Ctor() {
var ret = AtkComponentBase.Ctor();
VirtualTable = StaticVirtualTablePointer;
ShowPreview = true;
return (AtkComponentDropDownList*)ret;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace FFXIVClientStructs.FFXIV.Component.GUI;
[GenerateInterop]
[Inherits<AtkComponentBase>]
[StructLayout(LayoutKind.Explicit, Size = 0x1A8)]
public unsafe partial struct AtkComponentGaugeBar : ICreatable {
public unsafe partial struct AtkComponentGaugeBar : ICreatable<AtkComponentGaugeBar> {
/// <summary>
/// Data describing a value transition. Informs the fields in <see cref="GaugeValue"/>. These fields aren't overwritten until the next transition of the same type occurs.
/// </summary>
Expand Down Expand Up @@ -80,7 +80,7 @@ public struct GaugeFill {
[FieldOffset(0x1A2)] public short MaxFillPositionX;

[MemberFunction("E8 ?? ?? ?? ?? E9 ?? ?? ?? ?? 45 33 C9 33 D2 B9 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 85 C0 0F 84 ?? ?? ?? ?? 48 8D 0D ?? ?? ?? ?? 48 89 98 ?? ?? ?? ??")]
public partial void Ctor();
public partial AtkComponentGaugeBar* Ctor();

/// <summary>
/// Sets the value of the gauge, prompting its visual elements to update.<br/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace FFXIVClientStructs.FFXIV.Component.GUI;
[GenerateInterop]
[Inherits<AtkComponentBase>]
[StructLayout(LayoutKind.Explicit, Size = 0xF0)]
public partial struct AtkComponentGuildLeveCard : ICreatable {
public unsafe partial struct AtkComponentGuildLeveCard : ICreatable<AtkComponentGuildLeveCard> {
[MemberFunction("33 D2 C7 81 ?? ?? ?? ?? ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 51 08 48 89 01 48 8B C1 48 89 51 10 48 89 51 18 48 89 51 20 48 89 51 28 48 89 51 30 48 89 51 38 48 89 51 40 89 51 48 48 89 51 50 48 89 51 58 48 89 51 60 48 89 51 68 89 51 70 48 89 51 78 48 89 91 ?? ?? ?? ?? 48 89 91 ?? ?? ?? ?? 66 89 91 ?? ?? ?? ?? 89 91 ?? ?? ?? ?? 48 89 91 ?? ?? ?? ?? 48 89 91 ?? ?? ?? ?? 48 89 91 ?? ?? ?? ?? 88 91 ?? ?? ?? ?? 48 89 91 ?? ?? ?? ?? 48 89 91 ?? ?? ?? ?? 48 89 91 ?? ?? ?? ?? 48 89 91 ?? ?? ?? ?? 48 89 91 ?? ?? ?? ?? 48 89 91 ?? ?? ?? ?? C3")]
public partial void Ctor();
public partial AtkComponentGuildLeveCard* Ctor();
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ namespace FFXIVClientStructs.FFXIV.Component.GUI;
[GenerateInterop]
[Inherits<AtkComponentButton>]
[StructLayout(LayoutKind.Explicit, Size = 0x120)]
public unsafe partial struct AtkComponentHoldButton : ICreatable {
public unsafe partial struct AtkComponentHoldButton : ICreatable<AtkComponentHoldButton> {
[FieldOffset(0xF0)] public AtkResNode* ProgressResNode;
[FieldOffset(0xF8)] public AtkImageNode* ProgressImageNode;
[FieldOffset(0x100)] public bool IsTargetReached;
Expand All @@ -24,7 +24,7 @@ public unsafe partial struct AtkComponentHoldButton : ICreatable {
[FieldOffset(0x10C)] public ProgressState Progress;

[MemberFunction("40 53 48 83 EC 20 48 8B D9 E8 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? C7 83 ?? ?? ?? ?? ?? ?? ?? ?? 48 89 03 33 C0 48 89 83 ?? ?? ?? ?? 48 89 83 ?? ?? ?? ?? 66 89 83 ?? ?? ?? ?? 48 89 83 ?? ?? ?? ??")]
public partial void Ctor();
public partial AtkComponentHoldButton* Ctor();

[GenerateInterop]
[StructLayout(LayoutKind.Explicit, Size = 0x10)]
Expand Down
Loading
Loading