diff --git a/NHSE.Core/Structures/Item/FieldItem/FieldItem.cs b/NHSE.Core/Structures/Item/FieldItem/FieldItem.cs index dbbd8b9..eaf3d2e 100644 --- a/NHSE.Core/Structures/Item/FieldItem/FieldItem.cs +++ b/NHSE.Core/Structures/Item/FieldItem/FieldItem.cs @@ -5,7 +5,7 @@ namespace NHSE.Core { [StructLayout(LayoutKind.Explicit, Size = SIZE, Pack = 1)] - public class FieldItem + public class FieldItem : IHeldItem { public const ushort EXTENSION = 0xFFFD; public const ushort NONE = 0xFFFE; @@ -63,7 +63,7 @@ public void Delete() Count = UseCount = 0; } - public void CopyFrom(Item item) + public void CopyFrom(IHeldItem item) { ItemId = item.ItemId; Flags0 = item.Flags0; diff --git a/NHSE.Core/Structures/Item/IHeldItem.cs b/NHSE.Core/Structures/Item/IHeldItem.cs new file mode 100644 index 0000000..e8934eb --- /dev/null +++ b/NHSE.Core/Structures/Item/IHeldItem.cs @@ -0,0 +1,11 @@ +namespace NHSE.Core +{ + public interface IHeldItem + { + ushort ItemId { get; set; } + byte Flags0 { get; set; } + byte Flags1 { get; set; } + ushort Count { get; set; } + ushort UseCount { get; set; } + } +} diff --git a/NHSE.Core/Structures/Item/Item.cs b/NHSE.Core/Structures/Item/Item.cs index 15ec58f..a0696a8 100644 --- a/NHSE.Core/Structures/Item/Item.cs +++ b/NHSE.Core/Structures/Item/Item.cs @@ -3,8 +3,8 @@ namespace NHSE.Core { - [StructLayout(LayoutKind.Sequential)] - public class Item + [StructLayout(LayoutKind.Explicit, Size = SIZE, Pack = 1)] + public class Item : IHeldItem { public static readonly Item NO_ITEM = new Item {ItemId = NONE}; public const ushort NONE = 0xFFFE; @@ -16,11 +16,11 @@ public class Item 0x1E1B, 0x1E1C, 0x1E1D, 0x1E1E, 0x1E1F, 0x1E20, 0x1E21, 0x1E22 }; - public ushort ItemId; - public byte Flags0; - public byte Flags1; - public ushort Count; - public ushort UseCount; + [field: FieldOffset(0)] public ushort ItemId { get; set; } + [field: FieldOffset(2)] public byte Flags0 { get; set; } + [field: FieldOffset(3)] public byte Flags1 { get; set; } + [field: FieldOffset(4)] public ushort Count { get; set; } + [field: FieldOffset(6)] public ushort UseCount { get; set; } public ItemType Type => (ItemType) (Flags1 & 3); public int ReservedIndex => (Flags1 >> 2) & 0xF; diff --git a/NHSE.Core/Structures/Item/ItemInfo.cs b/NHSE.Core/Structures/Item/ItemInfo.cs index 3ac42f2..c12e994 100644 --- a/NHSE.Core/Structures/Item/ItemInfo.cs +++ b/NHSE.Core/Structures/Item/ItemInfo.cs @@ -4,7 +4,7 @@ public static class ItemInfo { private static readonly byte[] ItemKinds = ResourceUtil.GetBinaryResource("item_kind.bin"); - public static ItemKind GetItemKind(Item item) => GetItemKind(item.ItemId); + public static ItemKind GetItemKind(IHeldItem item) => GetItemKind(item.ItemId); public static ItemKind GetItemKind(FieldItem item) => GetItemKind(item.DisplayItemId); public static ItemKind GetItemKind(ushort id)