using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; namespace OpenVIII { namespace Kernel { /// /// Blue Magic Parameters - Four per spell for each crisis level. Higher Crisis Levels do more damage and/or have more effects. /// /// /// [StructLayout(LayoutKind.Explicit, Size = 8, Pack = 0)] public sealed class BlueMagicQuistisLimitBreakParameters { #region Fields /// /// Section Count /// 64 total but I want to add these to the Blue_Magic_Quistis_limit_break in an array /// public const int Count = 4; /// /// Section ID /// public const int ID = 20; /// /// Fixed Size of Data /// public const int Size = 8; #endregion Fields #region Properties [field: FieldOffset(6)] public byte AttackParam { get; } [field: FieldOffset(5)] public byte AttackPower { get; } [field: FieldOffset(4)] public PersistentStatuses Statuses0 { get; } [field: FieldOffset(0)] public BattleOnlyStatuses Statuses1 { get; } #endregion Properties #region Methods public static IReadOnlyList Read(BinaryReader br) => Enumerable.Range(0, Count) .Select(i => CreateInstance(br)).ToList(); private static BlueMagicQuistisLimitBreakParameters CreateInstance(BinaryReader br) => new BlueMagicQuistisLimitBreakParameters(br); private BlueMagicQuistisLimitBreakParameters(BinaryReader br) { Statuses1 = (BattleOnlyStatuses)br.ReadUInt32(); //0x0000 4 bytes Status 1 Statuses0 = (PersistentStatuses)br.ReadUInt16(); //0x0004 2 bytes Status 0 AttackPower = br.ReadByte(); //0x0006 1 bytes Attack Power AttackParam = br.ReadByte(); //0x0007 1 byte Attack Param } #endregion Methods } } }