Skip to content

Commit

Permalink
Merge branch 'master' into localization_dataencoder
Browse files Browse the repository at this point in the history
  • Loading branch information
ethanmoffat committed Mar 13, 2022
2 parents c1a7d30 + 8783687 commit 2b66e6f
Show file tree
Hide file tree
Showing 7 changed files with 257 additions and 77 deletions.
7 changes: 4 additions & 3 deletions EOLib.IO.Test/Pub/EIFRecordTest.cs
Expand Up @@ -277,7 +277,7 @@ private static byte[] GetExpectedBytesWithoutName(EIFRecord rec, INumberEncoderS
ret.AddRange(nes.EncodeNumber(rec.Accuracy, 2));
ret.AddRange(nes.EncodeNumber(rec.Evade, 2));
ret.AddRange(nes.EncodeNumber(rec.Armor, 2));
ret.AddRange(Enumerable.Repeat((byte)254, 1));
ret.AddRange(nes.EncodeNumber(rec.UnkByte19, 1));
ret.AddRange(nes.EncodeNumber(rec.Str, 1));
ret.AddRange(nes.EncodeNumber(rec.Int, 1));
ret.AddRange(nes.EncodeNumber(rec.Wis, 1));
Expand All @@ -301,9 +301,10 @@ private static byte[] GetExpectedBytesWithoutName(EIFRecord rec, INumberEncoderS
ret.AddRange(nes.EncodeNumber(rec.AgiReq, 2));
ret.AddRange(nes.EncodeNumber(rec.ConReq, 2));
ret.AddRange(nes.EncodeNumber(rec.ChaReq, 2));
ret.AddRange(Enumerable.Repeat((byte)254, 2));
ret.AddRange(nes.EncodeNumber(rec.Element, 1));
ret.AddRange(nes.EncodeNumber(rec.ElementPower, 1));
ret.AddRange(nes.EncodeNumber(rec.Weight, 1));
ret.AddRange(Enumerable.Repeat((byte)254, 1));
ret.AddRange(nes.EncodeNumber(rec.UnkByte56, 1));
ret.AddRange(nes.EncodeNumber((byte)rec.Size, 1));

return ret.ToArray();
Expand Down
14 changes: 9 additions & 5 deletions EOLib.IO.Test/Pub/ENFRecordTest.cs
Expand Up @@ -176,21 +176,25 @@ private static byte[] GetExpectedBytesWithoutName(ENFRecord rec, INumberEncoderS
var ret = new List<byte>();

ret.AddRange(nes.EncodeNumber(rec.Graphic, 2));
ret.AddRange(Enumerable.Repeat((byte)254, 1));
ret.AddRange(nes.EncodeNumber(rec.UnkByte2, 1));
ret.AddRange(nes.EncodeNumber(rec.Boss, 2));
ret.AddRange(nes.EncodeNumber(rec.Child, 2));
ret.AddRange(nes.EncodeNumber((short)rec.Type, 2));
ret.AddRange(nes.EncodeNumber(rec.VendorID, 2));
ret.AddRange(nes.EncodeNumber(rec.HP, 3));
ret.AddRange(Enumerable.Repeat((byte)254, 2));
ret.AddRange(nes.EncodeNumber(rec.UnkShort14, 2));
ret.AddRange(nes.EncodeNumber(rec.MinDam, 2));
ret.AddRange(nes.EncodeNumber(rec.MaxDam, 2));
ret.AddRange(nes.EncodeNumber(rec.Accuracy, 2));
ret.AddRange(nes.EncodeNumber(rec.Evade, 2));
ret.AddRange(nes.EncodeNumber(rec.Armor, 2));
ret.AddRange(Enumerable.Repeat((byte)254, 10));
ret.AddRange(nes.EncodeNumber(rec.Exp, 2));
ret.AddRange(Enumerable.Repeat((byte)254, 1));
ret.AddRange(nes.EncodeNumber(rec.UnkByte26, 1));
ret.AddRange(nes.EncodeNumber(rec.UnkShort27, 2));
ret.AddRange(nes.EncodeNumber(rec.UnkShort29, 2));
ret.AddRange(nes.EncodeNumber(rec.ElementWeak, 2));
ret.AddRange(nes.EncodeNumber(rec.ElementWeakPower, 2));
ret.AddRange(nes.EncodeNumber(rec.UnkByte35, 1));
ret.AddRange(nes.EncodeNumber(rec.Exp, 3));

return ret.ToArray();
}
Expand Down
25 changes: 19 additions & 6 deletions EOLib.IO.Test/Pub/ESFRecordTest.cs
Expand Up @@ -183,18 +183,31 @@ private static byte[] GetExpectedBytesWithoutNames(ESFRecord rec, INumberEncoder
ret.AddRange(nes.EncodeNumber(rec.TP, 2));
ret.AddRange(nes.EncodeNumber(rec.SP, 2));
ret.AddRange(nes.EncodeNumber(rec.CastTime, 1));
ret.AddRange(Enumerable.Repeat((byte)254, 2));
ret.AddRange(nes.EncodeNumber((byte)rec.Type, 1));
ret.AddRange(Enumerable.Repeat((byte)254, 5));
ret.AddRange(nes.EncodeNumber(rec.UnkByte9, 1));
ret.AddRange(nes.EncodeNumber(rec.UnkByte10, 1));
ret.AddRange(nes.EncodeNumber((int)rec.Type, 3));
ret.AddRange(nes.EncodeNumber(rec.UnkByte14, 1));
ret.AddRange(nes.EncodeNumber(rec.UnkShort15, 2));
ret.AddRange(nes.EncodeNumber((byte)rec.TargetRestrict, 1));
ret.AddRange(nes.EncodeNumber((byte)rec.Target, 1));
ret.AddRange(Enumerable.Repeat((byte)254, 4));
ret.AddRange(nes.EncodeNumber(rec.UnkByte19, 1));
ret.AddRange(nes.EncodeNumber(rec.UnkByte20, 1));
ret.AddRange(nes.EncodeNumber(rec.UnkShort21, 2));
ret.AddRange(nes.EncodeNumber(rec.MinDam, 2));
ret.AddRange(nes.EncodeNumber(rec.MaxDam, 2));
ret.AddRange(nes.EncodeNumber(rec.Accuracy, 2));
ret.AddRange(Enumerable.Repeat((byte)254, 5));
ret.AddRange(nes.EncodeNumber(rec.UnkShort29, 2));
ret.AddRange(nes.EncodeNumber(rec.UnkShort31, 2));
ret.AddRange(nes.EncodeNumber(rec.UnkByte33, 1));
ret.AddRange(nes.EncodeNumber(rec.HP, 2));
ret.AddRange(Enumerable.Repeat((byte)254, 15));
ret.AddRange(nes.EncodeNumber(rec.UnkShort36, 2));
ret.AddRange(nes.EncodeNumber(rec.UnkByte38, 1));
ret.AddRange(nes.EncodeNumber(rec.UnkShort39, 2));
ret.AddRange(nes.EncodeNumber(rec.UnkShort41, 2));
ret.AddRange(nes.EncodeNumber(rec.UnkShort43, 2));
ret.AddRange(nes.EncodeNumber(rec.UnkShort45, 2));
ret.AddRange(nes.EncodeNumber(rec.UnkShort47, 2));
ret.AddRange(nes.EncodeNumber(rec.UnkShort49, 2));

return ret.ToArray();
}
Expand Down
108 changes: 62 additions & 46 deletions EOLib.IO/Pub/EIFRecord.cs
Expand Up @@ -30,6 +30,8 @@ public class EIFRecord : IPubRecord
public short Evade { get; set; }
public short Armor { get; set; }

public byte UnkByte19 { get; set; }

public byte Str { get; set; }
public byte Int { get; set; }
public byte Wis { get; set; }
Expand Down Expand Up @@ -70,8 +72,13 @@ public class EIFRecord : IPubRecord
public short ConReq { get; set; }
public short ChaReq { get; set; }

public byte Element { get; set; }
public byte ElementPower { get; set; }

public byte Weight { get; set; }

public byte UnkByte56 { get; set; }

public ItemSize Size { get; set; }

public TValue Get<TValue>(PubRecordProperty type)
Expand All @@ -88,7 +95,7 @@ public TValue Get<TValue>(PubRecordProperty type)
var propertyInfo = GetType().GetProperty(name, BindingFlags.Instance | BindingFlags.Public);
var boxedValue = propertyInfo.GetValue(this);

return (TValue) boxedValue;
return (TValue)boxedValue;
}

public byte[] SerializeToByteArray(INumberEncoderService numberEncoderService)
Expand All @@ -102,9 +109,9 @@ public byte[] SerializeToByteArray(INumberEncoderService numberEncoderService)
mem.Write(name, 0, name.Length);

mem.Write(numberEncoderService.EncodeNumber(Graphic, 2), 0, 2);
mem.WriteByte(numberEncoderService.EncodeNumber((byte) Type, 1)[0]);
mem.WriteByte(numberEncoderService.EncodeNumber((byte) SubType, 1)[0]);
mem.WriteByte(numberEncoderService.EncodeNumber((byte) Special, 1)[0]);
mem.WriteByte(numberEncoderService.EncodeNumber((byte)Type, 1)[0]);
mem.WriteByte(numberEncoderService.EncodeNumber((byte)SubType, 1)[0]);
mem.WriteByte(numberEncoderService.EncodeNumber((byte)Special, 1)[0]);

mem.Write(numberEncoderService.EncodeNumber(HP, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber(TP, 2), 0, 2);
Expand All @@ -114,7 +121,8 @@ public byte[] SerializeToByteArray(INumberEncoderService numberEncoderService)
mem.Write(numberEncoderService.EncodeNumber(Evade, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber(Armor, 2), 0, 2);

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

mem.WriteByte(numberEncoderService.EncodeNumber(Str, 1)[0]);
mem.WriteByte(numberEncoderService.EncodeNumber(Int, 1)[0]);
mem.WriteByte(numberEncoderService.EncodeNumber(Wis, 1)[0]);
Expand Down Expand Up @@ -143,10 +151,12 @@ public byte[] SerializeToByteArray(INumberEncoderService numberEncoderService)
mem.Write(numberEncoderService.EncodeNumber(ConReq, 2), 0, 2);
mem.Write(numberEncoderService.EncodeNumber(ChaReq, 2), 0, 2);

mem.Seek(56 + Name.Length, SeekOrigin.Begin);
mem.WriteByte(numberEncoderService.EncodeNumber(Element, 1)[0]);
mem.WriteByte(numberEncoderService.EncodeNumber(ElementPower, 1)[0]);

mem.WriteByte(numberEncoderService.EncodeNumber(Weight, 1)[0]);
mem.Seek(58 + Name.Length, SeekOrigin.Begin);
mem.WriteByte(numberEncoderService.EncodeNumber((byte) Size, 1)[0]);
mem.WriteByte(numberEncoderService.EncodeNumber(UnkByte56, 1)[0]);
mem.WriteByte(numberEncoderService.EncodeNumber((byte)Size, 1)[0]);
}

return ret;
Expand All @@ -157,49 +167,55 @@ 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");

Graphic = (short) numberEncoderService.DecodeNumber(recordBytes[0], recordBytes[1]);
Type = (ItemType) numberEncoderService.DecodeNumber(recordBytes[2]);
SubType = (ItemSubType) numberEncoderService.DecodeNumber(recordBytes[3]);

Special = (ItemSpecial) numberEncoderService.DecodeNumber(recordBytes[4]);
HP = (short) numberEncoderService.DecodeNumber(recordBytes[5], recordBytes[6]);
TP = (short) numberEncoderService.DecodeNumber(recordBytes[7], recordBytes[8]);
MinDam = (short) numberEncoderService.DecodeNumber(recordBytes[9], recordBytes[10]);
MaxDam = (short) numberEncoderService.DecodeNumber(recordBytes[11], recordBytes[12]);
Accuracy = (short) numberEncoderService.DecodeNumber(recordBytes[13], recordBytes[14]);
Evade = (short) numberEncoderService.DecodeNumber(recordBytes[15], recordBytes[16]);
Armor = (short) numberEncoderService.DecodeNumber(recordBytes[17], recordBytes[18]);

Str = (byte) numberEncoderService.DecodeNumber(recordBytes[20]);
Int = (byte) numberEncoderService.DecodeNumber(recordBytes[21]);
Wis = (byte) numberEncoderService.DecodeNumber(recordBytes[22]);
Agi = (byte) numberEncoderService.DecodeNumber(recordBytes[23]);
Con = (byte) numberEncoderService.DecodeNumber(recordBytes[24]);
Cha = (byte) numberEncoderService.DecodeNumber(recordBytes[25]);

Light = (byte) numberEncoderService.DecodeNumber(recordBytes[26]);
Dark = (byte) numberEncoderService.DecodeNumber(recordBytes[27]);
Earth = (byte) numberEncoderService.DecodeNumber(recordBytes[28]);
Air = (byte) numberEncoderService.DecodeNumber(recordBytes[29]);
Water = (byte) numberEncoderService.DecodeNumber(recordBytes[30]);
Fire = (byte) numberEncoderService.DecodeNumber(recordBytes[31]);
Graphic = (short)numberEncoderService.DecodeNumber(recordBytes[0], recordBytes[1]);
Type = (ItemType)numberEncoderService.DecodeNumber(recordBytes[2]);
SubType = (ItemSubType)numberEncoderService.DecodeNumber(recordBytes[3]);

Special = (ItemSpecial)numberEncoderService.DecodeNumber(recordBytes[4]);
HP = (short)numberEncoderService.DecodeNumber(recordBytes[5], recordBytes[6]);
TP = (short)numberEncoderService.DecodeNumber(recordBytes[7], recordBytes[8]);
MinDam = (short)numberEncoderService.DecodeNumber(recordBytes[9], recordBytes[10]);
MaxDam = (short)numberEncoderService.DecodeNumber(recordBytes[11], recordBytes[12]);
Accuracy = (short)numberEncoderService.DecodeNumber(recordBytes[13], recordBytes[14]);
Evade = (short)numberEncoderService.DecodeNumber(recordBytes[15], recordBytes[16]);
Armor = (short)numberEncoderService.DecodeNumber(recordBytes[17], recordBytes[18]);

UnkByte19 = (byte)numberEncoderService.DecodeNumber(recordBytes[19]);

Str = (byte)numberEncoderService.DecodeNumber(recordBytes[20]);
Int = (byte)numberEncoderService.DecodeNumber(recordBytes[21]);
Wis = (byte)numberEncoderService.DecodeNumber(recordBytes[22]);
Agi = (byte)numberEncoderService.DecodeNumber(recordBytes[23]);
Con = (byte)numberEncoderService.DecodeNumber(recordBytes[24]);
Cha = (byte)numberEncoderService.DecodeNumber(recordBytes[25]);

Light = (byte)numberEncoderService.DecodeNumber(recordBytes[26]);
Dark = (byte)numberEncoderService.DecodeNumber(recordBytes[27]);
Earth = (byte)numberEncoderService.DecodeNumber(recordBytes[28]);
Air = (byte)numberEncoderService.DecodeNumber(recordBytes[29]);
Water = (byte)numberEncoderService.DecodeNumber(recordBytes[30]);
Fire = (byte)numberEncoderService.DecodeNumber(recordBytes[31]);

ScrollMap = numberEncoderService.DecodeNumber(recordBytes[32], recordBytes[33], recordBytes[34]);
ScrollX = (byte) numberEncoderService.DecodeNumber(recordBytes[35]);
ScrollY = (byte) numberEncoderService.DecodeNumber(recordBytes[36]);
ScrollX = (byte)numberEncoderService.DecodeNumber(recordBytes[35]);
ScrollY = (byte)numberEncoderService.DecodeNumber(recordBytes[36]);

LevelReq = (short)numberEncoderService.DecodeNumber(recordBytes[37], recordBytes[38]);
ClassReq = (short)numberEncoderService.DecodeNumber(recordBytes[39], recordBytes[40]);

LevelReq = (short) numberEncoderService.DecodeNumber(recordBytes[37], recordBytes[38]);
ClassReq = (short) numberEncoderService.DecodeNumber(recordBytes[39], recordBytes[40]);
StrReq = (short)numberEncoderService.DecodeNumber(recordBytes[41], recordBytes[42]);
IntReq = (short)numberEncoderService.DecodeNumber(recordBytes[43], recordBytes[44]);
WisReq = (short)numberEncoderService.DecodeNumber(recordBytes[45], recordBytes[46]);
AgiReq = (short)numberEncoderService.DecodeNumber(recordBytes[47], recordBytes[48]);
ConReq = (short)numberEncoderService.DecodeNumber(recordBytes[49], recordBytes[50]);
ChaReq = (short)numberEncoderService.DecodeNumber(recordBytes[51], recordBytes[52]);

StrReq = (short) numberEncoderService.DecodeNumber(recordBytes[41], recordBytes[42]);
IntReq = (short) numberEncoderService.DecodeNumber(recordBytes[43], recordBytes[44]);
WisReq = (short) numberEncoderService.DecodeNumber(recordBytes[45], recordBytes[46]);
AgiReq = (short) numberEncoderService.DecodeNumber(recordBytes[47], recordBytes[48]);
ConReq = (short) numberEncoderService.DecodeNumber(recordBytes[49], recordBytes[50]);
ChaReq = (short) numberEncoderService.DecodeNumber(recordBytes[51], recordBytes[52]);
Element = (byte)numberEncoderService.DecodeNumber(recordBytes[53]);
ElementPower = (byte)numberEncoderService.DecodeNumber(recordBytes[54]);

Weight = (byte) numberEncoderService.DecodeNumber(recordBytes[55]);
Size = (ItemSize) numberEncoderService.DecodeNumber(recordBytes[57]);
Weight = (byte)numberEncoderService.DecodeNumber(recordBytes[55]);
UnkByte56 = (byte)numberEncoderService.DecodeNumber(recordBytes[56]);
Size = (ItemSize)numberEncoderService.DecodeNumber(recordBytes[57]);

if (ID == 365 && Name == "Gun")
SubType = ItemSubType.Ranged;
Expand Down

0 comments on commit 2b66e6f

Please sign in to comment.