using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace OpenVIII
{
namespace Kernel
{
///
/// Renzokuken Finishers Data
///
///
public class BattleItemData
{
#region Fields
public const int Count = 33;
public const int ID = 7;
#endregion Fields
#region Constructors
private BattleItemData(BinaryReader br, int i)
{
br.BaseStream.Seek(4, SeekOrigin.Current);
Name = Memory.Strings.Read(Strings.FileID.Kernel, ID, i * 2);
//0x0000 2 bytes Offset to item name
Description = Memory.Strings.Read(Strings.FileID.Kernel, ID, i * 2 + 1);
//0x0002 2 bytes Offset to item description
MagicID = (MagicID)br.ReadUInt16();
//0x0004 2 bytes Magic ID
AttackType = (AttackType)br.ReadByte();
//0x0006 1 byte Attack type
AttackPower = br.ReadByte();
//0x0007 1 byte Attack power
Unknown0 = br.ReadByte();
//0x0008 1 byte Unknown
Target = (Target)br.ReadByte();
//0x0009 1 byte Target info
Unknown1 = br.ReadByte();
//0x000A 1 byte Unknown
AttackFlags = (AttackFlags)br.ReadByte();
//0x000B 1 byte Attack flags
Unknown2 = br.ReadByte();
//0x000C 1 bytes Unknown
StatusAttack = br.ReadByte();
//0x000D 1 byte Status Attack Enabler
Statuses0 = (PersistentStatuses)br.ReadUInt16();
//0x000E 2 bytes status_0; //statuses 0-7
Statuses1 = (BattleOnlyStatuses)br.ReadUInt32();
//0x0010 4 bytes status_1; //statuses 8-39
AttackParam = br.ReadByte();
//0x0014 1 byte Attack Param
Unknown3 = br.ReadByte();
//0x0015 1 byte Unknown
HitCount = br.ReadByte();
//0x0016 1 bytes Hit Count
Element = (Element)br.ReadByte();
//0x0017 1 bytes Element
}
#endregion Constructors
#region Properties
///
/// Attack Flags
///
public AttackFlags AttackFlags { get; }
///
/// Attack Param
///
public byte AttackParam { get; }
///
/// Attack power
///
public byte AttackPower { get; }
///
/// Attack type
///
public AttackType AttackType { get; }
///
/// item description
///
public FF8String Description { get; }
///
/// Element
///
public Element Element { get; }
///
/// Hit Count
///
public byte HitCount { get; }
///
/// Magic ID
///
public MagicID MagicID { get; }
///
/// item name
///
public FF8String Name { get; }
///
/// Status Attack Enabler
///
public byte StatusAttack { get; }
///
/// statuses 0-7
///
public PersistentStatuses Statuses0 { get; }
///
/// statuses 8-39
///
public BattleOnlyStatuses Statuses1 { get; }
///
/// Target info
///
public Target Target { get; }
///
/// Unknown byte
///
public byte Unknown0 { get; }
///
/// Unknown byte
///
public byte Unknown1 { get; }
///
/// Unknown byte
///
public byte Unknown2 { get; }
///
/// Unknown byte
///
public byte Unknown3 { get; }
#endregion Properties
#region Methods
public static IReadOnlyList Read(BinaryReader br) =>
Enumerable.Range(0, Count).Select(i => CreateInstance(br, i)).ToList();
public override string ToString() => Name;
private static BattleItemData CreateInstance(BinaryReader br, int i) => new BattleItemData(br, i);
#endregion Methods
}
}
}