using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; namespace OpenVIII { namespace Kernel { /// /// Zell Limit Break Parameters /// /// [StructLayout(LayoutKind.Explicit, Size = Size, Pack = 0)] public sealed class ZellLimitBreakParameters { private static ZellLimitBreakParameters CreateInstance(BinaryReader br) => new ZellLimitBreakParameters(br); public const int Count = 24; public const int ID = 23; public const int Size = 4; [field: FieldOffset(0x0)] [field: MarshalAs(UnmanagedType.ByValArray, SizeConst = Size)] public IReadOnlyList Moves { get; } private ZellLimitBreakParameters(BinaryReader br) => Moves = br.ReadBytes(Size); public static IReadOnlyList Read(BinaryReader br) => Enumerable.Range(0, Count).Select(_ => CreateInstance(br)).ToList(); } } }