using System.IO;
namespace FF8
{
public partial class Kernel_bin
{
///
/// Devour Data
///
///
public class Devour
{
public const int count = 16;
public const int id = 28;
public const int size = 12;
public override string ToString() => Description;
public FF8String Description { get; private set; }
public float Amount { get; private set; }
///
/// True for heal, False for damage
///
public bool DMGorHEAL { get; private set; }
public Statuses1 Statuses1 { get; private set; }
public Statuses0 Statuses0 { get; private set; }
private StatFlags StatFlags { get; set; }
public byte HP { get; private set; }
public void Read(BinaryReader br, int i)
{
Description = Memory.Strings.Read(Strings.FileID.KERNEL, id, i);
br.BaseStream.Seek(2, SeekOrigin.Current);
//0x0000 2 bytes Offset to devour description
DMGorHEAL = br.ReadByte() == 0x1E ? true : false;
//0x0002 1 byte Damage or heal HP and Status
//0x1E - Cure
//0x1F - Damage
Quanity val = (Quanity)br.ReadByte();
Amount = 0f;
if ((val & Quanity._0625f) != 0) Amount += .0625f;
if ((val & Quanity._1250f) != 0) Amount += .1250f;
if ((val & Quanity._1f) != 0) Amount += 1f;
if ((val & Quanity._25f) != 0) Amount += .25f;
if ((val & Quanity._50f) != 0) Amount += .50f;
//0x0003 1 byte HP Heal / DMG Quantity Flag
//0x00 - 0 %
//0x01 - 6.25 %
//0x02 - 12.50 %
//0x04 - 25 %
//0x08 - 50 %
//0x10 - 100 %
Statuses1 = (Statuses1)br.ReadUInt32();
//0x0004 4 bytes status_1; //statuses 8-39
Statuses0 = (Statuses0)br.ReadUInt16();
//0x0008 2 bytes status_0; //statuses 0-7
StatFlags = (StatFlags)br.ReadByte();
//0x000A 1 byte Raised Stat Flag
//0x00 - None
//0x01 - STR
//0x02 - VIT
//0x04 - MAG
//0x08 - SPR
//0x10 - SPD
HP = br.ReadByte();
//0x000B 1 byte Raised Stat HP Quantity
}
public static Devour[] Read(BinaryReader br)
{
var ret = new Devour[count];
for (int i = 0; i < count; i++)
{
var tmp = new Devour();
tmp.Read(br, i);
ret[i] = tmp;
}
return ret;
}
}
}
}