Skip to content

Commit

Permalink
Update ENFRecord with full ENF Spec
Browse files Browse the repository at this point in the history
  • Loading branch information
Septharoth committed Mar 13, 2022
1 parent b971de3 commit 161609e
Showing 1 changed file with 46 additions and 7 deletions.
53 changes: 46 additions & 7 deletions EOLib.IO/Pub/ENFRecord.cs
@@ -1,4 +1,4 @@
using System;
using System;
using System.IO;
using System.Linq;
using System.Reflection;
Expand All @@ -19,21 +19,34 @@ public class ENFRecord : IPubRecord

public int Graphic { get; set; }

public byte UnkA { get; set; }

public short Boss { get; set; }
public short Child { get; set; }
public NPCType Type { get; set; }

public short UnkB { get; set; }

public short VendorID { get; set; }

public int HP { get; set; }
public ushort Exp { get; set; }

public short MinDam { get; set; }
public short MaxDam { get; set; }

public short Accuracy { get; set; }
public short Evade { get; set; }
public short Armor { get; set; }

public byte UnkC { get; set; }
public short UnkD { get; set; }
public short UnkE { get; set; }
public short UnkF { get; set; }
public short UnkG { get; set; }
public byte UnkH { get; set; }

public int Exp { get; set; }

public TValue Get<TValue>(PubRecordProperty type)
{
var name = Enum.GetName(type.GetType(), type) ?? "";
Expand Down Expand Up @@ -63,22 +76,30 @@ public byte[] SerializeToByteArray(INumberEncoderService numberEncoderService)

mem.Write(numberEncoderService.EncodeNumber(Graphic, 2), 0, 2);

mem.Seek(4 + Name.Length, SeekOrigin.Begin);
mem.WriteByte(numberEncoderService.EncodeNumber(UnkA, 1)[0]);

mem.Write(numberEncoderService.EncodeNumber(Boss, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber(Child, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber((short)Type, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber(VendorID, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber(HP, 3), 0, 3);

mem.Seek(17 + Name.Length, SeekOrigin.Begin);
mem.Write(numberEncoderService.EncodeNumber(UnkB, 2), 0, 2);

mem.Write(numberEncoderService.EncodeNumber(MinDam, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber(MaxDam, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber(Accuracy, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber(Evade, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber(Armor, 2), 0, 2);

mem.Seek(37 + Name.Length, SeekOrigin.Begin);
mem.Write(numberEncoderService.EncodeNumber(Exp, 2), 0, 2);
mem.WriteByte(numberEncoderService.EncodeNumber(UnkC, 1)[0]);
mem.Write(numberEncoderService.EncodeNumber(UnkD, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber(UnkE, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber(UnkF, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber(UnkG, 2), 0, 2);
mem.WriteByte(numberEncoderService.EncodeNumber(UnkH, 1)[0]);

mem.Write(numberEncoderService.EncodeNumber(Exp, 3), 0, 3);
}

return ret;
Expand All @@ -89,22 +110,40 @@ public void DeserializeFromByteArray(byte[] recordBytes, INumberEncoderService n
if (recordBytes.Length != DATA_SIZE)
throw new ArgumentOutOfRangeException(nameof(recordBytes), "Data is not properly sized for correct deserialization");

Console.Write(this.Name + " [");
for (int i = 0; i < recordBytes.Length; i++)
{
Console.Write(recordBytes[i] + "[pos:" + i + "], ");
}
Console.Write("]\n");

Graphic = numberEncoderService.DecodeNumber(recordBytes[0], recordBytes[1]);

UnkA = (byte)numberEncoderService.DecodeNumber(recordBytes[2]);

Boss = (short)numberEncoderService.DecodeNumber(recordBytes[3], recordBytes[4]);
Child = (short)numberEncoderService.DecodeNumber(recordBytes[5], recordBytes[6]);
Type = (NPCType)numberEncoderService.DecodeNumber(recordBytes[7], recordBytes[8]);
VendorID = (short)numberEncoderService.DecodeNumber(recordBytes[9], recordBytes[10]);
HP = numberEncoderService.DecodeNumber(recordBytes[11], recordBytes[12], recordBytes[13]);

UnkB = (short)numberEncoderService.DecodeNumber(recordBytes[14], recordBytes[15]);

MinDam = (short)numberEncoderService.DecodeNumber(recordBytes[16], recordBytes[17]);
MaxDam = (short)numberEncoderService.DecodeNumber(recordBytes[18], recordBytes[19]);

Accuracy = (short)numberEncoderService.DecodeNumber(recordBytes[20], recordBytes[21]);
Evade = (short)numberEncoderService.DecodeNumber(recordBytes[22], recordBytes[23]);
Armor = (short)numberEncoderService.DecodeNumber(recordBytes[24], recordBytes[25]);

Exp = (ushort)numberEncoderService.DecodeNumber(recordBytes[36], recordBytes[37]);
UnkC = (byte)numberEncoderService.DecodeNumber(recordBytes[26]);
UnkD = (short)numberEncoderService.DecodeNumber(recordBytes[27], recordBytes[28]);
UnkE = (short)numberEncoderService.DecodeNumber(recordBytes[29], recordBytes[30]);
UnkF = (short)numberEncoderService.DecodeNumber(recordBytes[31], recordBytes[32]);
UnkG = (short)numberEncoderService.DecodeNumber(recordBytes[33], recordBytes[34]);
UnkH = (byte)numberEncoderService.DecodeNumber(recordBytes[35]);

Exp = numberEncoderService.DecodeNumber(recordBytes[36], recordBytes[37], recordBytes[38]);
}
}
}

0 comments on commit 161609e

Please sign in to comment.