From b971de3410061a9039e022b272d59dbd54e68cc9 Mon Sep 17 00:00:00 2001 From: Septharoth <86432377+Septharoth@users.noreply.github.com> Date: Sun, 13 Mar 2022 10:40:40 -0400 Subject: [PATCH 1/8] Update EIFRecord with full EIF spec --- EOLib.IO/Pub/EIFRecord.cs | 118 +++++++++++++++++++++++--------------- 1 file changed, 71 insertions(+), 47 deletions(-) diff --git a/EOLib.IO/Pub/EIFRecord.cs b/EOLib.IO/Pub/EIFRecord.cs index c8a7713b9..d24f09500 100644 --- a/EOLib.IO/Pub/EIFRecord.cs +++ b/EOLib.IO/Pub/EIFRecord.cs @@ -30,6 +30,8 @@ public class EIFRecord : IPubRecord public short Evade { get; set; } public short Armor { get; set; } + public byte UnkB { get; set; } + public byte Str { get; set; } public byte Int { get; set; } public byte Wis { get; set; } @@ -70,8 +72,13 @@ public class EIFRecord : IPubRecord public short ConReq { get; set; } public short ChaReq { get; set; } + public byte UnkD { get; set; } // Element (?) + public byte UnkE { get; set; } // Element Power (?) + public byte Weight { get; set; } + public byte UnkF { get; set; } + public ItemSize Size { get; set; } public TValue Get(PubRecordProperty type) @@ -88,7 +95,7 @@ public TValue Get(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) @@ -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); @@ -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(UnkB, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber(Str, 1)[0]); mem.WriteByte(numberEncoderService.EncodeNumber(Int, 1)[0]); mem.WriteByte(numberEncoderService.EncodeNumber(Wis, 1)[0]); @@ -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(UnkD, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkE, 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(UnkF, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber((byte)Size, 1)[0]); } return ret; @@ -157,52 +167,66 @@ 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]); + + Console.Write(this.Name + " ["); + for (int i = 0; i < recordBytes.Length; i++) + { + Console.Write(recordBytes[i] + "[pos:" + i + "], "); + } + Console.Write("]\n"); + + 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]); + + UnkB = (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]); + UnkD = (byte)numberEncoderService.DecodeNumber(recordBytes[53]); + UnkE = (byte)numberEncoderService.DecodeNumber(recordBytes[54]); - Weight = (byte) numberEncoderService.DecodeNumber(recordBytes[55]); - Size = (ItemSize) numberEncoderService.DecodeNumber(recordBytes[57]); + Weight = (byte)numberEncoderService.DecodeNumber(recordBytes[55]); + UnkF = (byte)numberEncoderService.DecodeNumber(recordBytes[56]); + Size = (ItemSize)numberEncoderService.DecodeNumber(recordBytes[57]); if (ID == 365 && Name == "Gun") SubType = ItemSubType.Ranged; } } -} \ No newline at end of file +} From 161609e77cd93c2a62ebadfa845828c042568d3a Mon Sep 17 00:00:00 2001 From: Septharoth <86432377+Septharoth@users.noreply.github.com> Date: Sun, 13 Mar 2022 10:41:34 -0400 Subject: [PATCH 2/8] Update ENFRecord with full ENF Spec --- EOLib.IO/Pub/ENFRecord.cs | 53 +++++++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/EOLib.IO/Pub/ENFRecord.cs b/EOLib.IO/Pub/ENFRecord.cs index d3e8576ee..79d4c95e7 100644 --- a/EOLib.IO/Pub/ENFRecord.cs +++ b/EOLib.IO/Pub/ENFRecord.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Linq; using System.Reflection; @@ -19,14 +19,18 @@ 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; } @@ -34,6 +38,15 @@ public class ENFRecord : IPubRecord 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(PubRecordProperty type) { var name = Enum.GetName(type.GetType(), type) ?? ""; @@ -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; @@ -89,14 +110,25 @@ 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]); @@ -104,7 +136,14 @@ public void DeserializeFromByteArray(byte[] recordBytes, INumberEncoderService n 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]); } } } From b1cab3de591afa05d895c6d9bbf5c0e249343196 Mon Sep 17 00:00:00 2001 From: Septharoth <86432377+Septharoth@users.noreply.github.com> Date: Sun, 13 Mar 2022 10:42:05 -0400 Subject: [PATCH 3/8] Update ESFRecord with full ESF Spec --- EOLib.IO/Pub/ESFRecord.cs | 90 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 83 insertions(+), 7 deletions(-) diff --git a/EOLib.IO/Pub/ESFRecord.cs b/EOLib.IO/Pub/ESFRecord.cs index c607e2e85..fbd5e9fc3 100644 --- a/EOLib.IO/Pub/ESFRecord.cs +++ b/EOLib.IO/Pub/ESFRecord.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Linq; using System.Reflection; @@ -26,15 +26,40 @@ public class ESFRecord : IPubRecord public byte CastTime { get; set; } + public byte UnkA { get; set; } + public byte UnkB { get; set; } + public SpellType Type { get; set; } + + public byte UnkC { get; set; } + public short UnkD { get; set; } + public SpellTargetRestrict TargetRestrict { get; set; } public SpellTarget Target { get; set; } + public byte UnkE { get; set; } + public byte UnkF { get; set; } + public short UnkG { get; set; } + public short MinDam { get; set; } public short MaxDam { get; set; } public short Accuracy { get; set; } + + public short UnkH { get; set; } + public short UnkI { get; set; } + public byte UnkJ { get; set; } + public short HP { get; set; } + public short UnkK { get; set; } + public byte UnkL { get; set; } + public short UnkM { get; set; } + public short UnkN { get; set; } + public short UnkO { get; set; } + public short UnkP { get; set; } + public short UnkQ { get; set; } + public short UnkR { get; set; } + public TValue Get(PubRecordProperty type) { var name = Enum.GetName(type.GetType(), type) ?? ""; @@ -71,20 +96,39 @@ public byte[] SerializeToByteArray(INumberEncoderService numberEncoderService) mem.Write(numberEncoderService.EncodeNumber(SP, 2), 0, 2); mem.WriteByte(numberEncoderService.EncodeNumber(CastTime, 1)[0]); - mem.Seek(13 + Name.Length + Shout.Length, SeekOrigin.Begin); - mem.WriteByte(numberEncoderService.EncodeNumber((byte)Type, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkA, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkB, 1)[0]); + + mem.Write(numberEncoderService.EncodeNumber((byte)Type, 3), 0, 3); //This is documented as a 3 byte int. + + mem.WriteByte(numberEncoderService.EncodeNumber(UnkC, 1)[0]); + mem.Write(numberEncoderService.EncodeNumber(UnkD, 2), 0, 2); - mem.Seek(19 + Name.Length + Shout.Length, SeekOrigin.Begin); mem.WriteByte(numberEncoderService.EncodeNumber((byte)TargetRestrict, 1)[0]); mem.WriteByte(numberEncoderService.EncodeNumber((byte)Target, 1)[0]); - mem.Seek(25 + Name.Length + Shout.Length, SeekOrigin.Begin); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkE, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkF, 1)[0]); + mem.Write(numberEncoderService.EncodeNumber(UnkG, 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.Seek(36 + Name.Length + Shout.Length, SeekOrigin.Begin); + mem.Write(numberEncoderService.EncodeNumber(UnkH, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkI, 2), 0, 2); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkJ, 1)[0]); + mem.Write(numberEncoderService.EncodeNumber(HP, 2), 0, 2); + + mem.Write(numberEncoderService.EncodeNumber(UnkK, 2), 0, 2); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkL, 1)[0]); + mem.Write(numberEncoderService.EncodeNumber(UnkM, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkN, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkO, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkP, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkQ, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkR, 2), 0, 2); } return ret; @@ -95,20 +139,52 @@ 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"); + Icon = (short)numberEncoderService.DecodeNumber(recordBytes[0], recordBytes[1]); Graphic = (short)numberEncoderService.DecodeNumber(recordBytes[2], recordBytes[3]); TP = (short)numberEncoderService.DecodeNumber(recordBytes[4], recordBytes[5]); SP = (short)numberEncoderService.DecodeNumber(recordBytes[6], recordBytes[7]); CastTime = (byte)numberEncoderService.DecodeNumber(recordBytes[8]); - Type = (SpellType)numberEncoderService.DecodeNumber(recordBytes[11]); + UnkA = (byte)numberEncoderService.DecodeNumber(recordBytes[9]); + UnkB = (byte)numberEncoderService.DecodeNumber(recordBytes[10]); + + Type = (SpellType)numberEncoderService.DecodeNumber(recordBytes[11], recordBytes[12], recordBytes[13]); + + UnkC = (byte)numberEncoderService.DecodeNumber(recordBytes[14]); + UnkD = (short)numberEncoderService.DecodeNumber(recordBytes[15], recordBytes[16]); + TargetRestrict = (SpellTargetRestrict)numberEncoderService.DecodeNumber(recordBytes[17]); Target = (SpellTarget)numberEncoderService.DecodeNumber(recordBytes[18]); + UnkE = (byte)numberEncoderService.DecodeNumber(recordBytes[19]); + UnkF = (byte)numberEncoderService.DecodeNumber(recordBytes[20]); + UnkG = (short)numberEncoderService.DecodeNumber(recordBytes[21], recordBytes[22]); + MinDam = (short)numberEncoderService.DecodeNumber(recordBytes[23], recordBytes[24]); MaxDam = (short)numberEncoderService.DecodeNumber(recordBytes[25], recordBytes[26]); Accuracy = (short)numberEncoderService.DecodeNumber(recordBytes[27], recordBytes[28]); + + UnkH = (short)numberEncoderService.DecodeNumber(recordBytes[29], recordBytes[30]); + UnkI = (short)numberEncoderService.DecodeNumber(recordBytes[31], recordBytes[32]); + UnkJ = (byte)numberEncoderService.DecodeNumber(recordBytes[33]); + HP = (short)numberEncoderService.DecodeNumber(recordBytes[34], recordBytes[35]); + + UnkK = (short)numberEncoderService.DecodeNumber(recordBytes[36], recordBytes[37]); + UnkL = (byte)numberEncoderService.DecodeNumber(recordBytes[38]); + UnkM = (short)numberEncoderService.DecodeNumber(recordBytes[39], recordBytes[40]); + UnkN = (short)numberEncoderService.DecodeNumber(recordBytes[41], recordBytes[42]); + UnkO = (short)numberEncoderService.DecodeNumber(recordBytes[43], recordBytes[44]); + UnkP = (short)numberEncoderService.DecodeNumber(recordBytes[45], recordBytes[46]); + UnkQ = (short)numberEncoderService.DecodeNumber(recordBytes[47], recordBytes[48]); + UnkR = (short)numberEncoderService.DecodeNumber(recordBytes[49], recordBytes[50]); } } } From e207ae48e387231440f4e4828bfa2df3d4f3259b Mon Sep 17 00:00:00 2001 From: Septharoth <86432377+Septharoth@users.noreply.github.com> Date: Sun, 13 Mar 2022 10:47:35 -0400 Subject: [PATCH 4/8] Update PubRecordProperty with full pub spec --- EOLib.IO/PubRecordProperty.cs | 45 ++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/EOLib.IO/PubRecordProperty.cs b/EOLib.IO/PubRecordProperty.cs index 3d936e46c..d1fdeca73 100644 --- a/EOLib.IO/PubRecordProperty.cs +++ b/EOLib.IO/PubRecordProperty.cs @@ -1,4 +1,4 @@ -namespace EOLib.IO +namespace EOLib.IO { /// /// Enum representing the different properties that exist within the pub records @@ -29,6 +29,8 @@ public enum PubRecordProperty ItemEvade, ItemArmor, + ItemUnkB, + ItemStr, ItemInt, ItemWis, @@ -65,8 +67,13 @@ public enum PubRecordProperty ItemConReq, ItemChaReq, + ItemUnkD, + ItemUnkE, + ItemWeight, + ItemUnkF, + ItemSize, #endregion @@ -75,10 +82,14 @@ public enum PubRecordProperty NPCGraphic, + NPCUnkA, + NPCBoss, NPCChild, NPCType, + NPCUnkB, + NPCVendorID, NPCHP, @@ -90,6 +101,13 @@ public enum PubRecordProperty NPCEvade, NPCArmor, + NPCUnkC, + NPCUnkD, + NPCUnkE, + NPCUnkF, + NPCUnkG, + NPCUnkH, + #endregion #region Spell Specific @@ -104,15 +122,40 @@ public enum PubRecordProperty SpellCastTime, + SpellUnkA, + SpellUnkB, + SpellType, + + SpellUnkC, + SpellUnkD, + SpellTargetRestrict, SpellTarget, + SpellUnkE, + SpellUnkF, + SpellUnkG, + SpellMinDam, SpellMaxDam, SpellAccuracy, + + SpellUnkH, + SpellUnkI, + SpellUnkJ, + SpellHP, + SpellUnkK, + SpellUnkL, + SpellUnkM, + SpellUnkN, + SpellUnkO, + SpellUnkP, + SpellUnkQ, + SpellUnkR, + #endregion #region Class Specific From fc83caaa3bbdbf3753e5bcc563211f7c89b775d6 Mon Sep 17 00:00:00 2001 From: Septharoth <86432377+Septharoth@users.noreply.github.com> Date: Sun, 13 Mar 2022 10:57:48 -0400 Subject: [PATCH 5/8] cast SpellType to int when serializing --- EOLib.IO/Pub/ESFRecord.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EOLib.IO/Pub/ESFRecord.cs b/EOLib.IO/Pub/ESFRecord.cs index fbd5e9fc3..68bda4980 100644 --- a/EOLib.IO/Pub/ESFRecord.cs +++ b/EOLib.IO/Pub/ESFRecord.cs @@ -99,7 +99,7 @@ public byte[] SerializeToByteArray(INumberEncoderService numberEncoderService) mem.WriteByte(numberEncoderService.EncodeNumber(UnkA, 1)[0]); mem.WriteByte(numberEncoderService.EncodeNumber(UnkB, 1)[0]); - mem.Write(numberEncoderService.EncodeNumber((byte)Type, 3), 0, 3); //This is documented as a 3 byte int. + mem.Write(numberEncoderService.EncodeNumber((int)Type, 3), 0, 3); //This is documented as a 3 byte int. mem.WriteByte(numberEncoderService.EncodeNumber(UnkC, 1)[0]); mem.Write(numberEncoderService.EncodeNumber(UnkD, 2), 0, 2); From 2c258e82d40297d559f4502c580430e10a9d0fba Mon Sep 17 00:00:00 2001 From: Septharoth Date: Sun, 13 Mar 2022 13:11:07 -0400 Subject: [PATCH 6/8] Rename Unk values in pub records --- EOLib.IO/Pub/EIFRecord.cs | 34 ++++------ EOLib.IO/Pub/ENFRecord.cs | 59 ++++++++--------- EOLib.IO/Pub/ESFRecord.cs | 117 ++++++++++++++++------------------ EOLib.IO/PubRecordProperty.cs | 60 ++++++++--------- 4 files changed, 125 insertions(+), 145 deletions(-) diff --git a/EOLib.IO/Pub/EIFRecord.cs b/EOLib.IO/Pub/EIFRecord.cs index d24f09500..dab8a562f 100644 --- a/EOLib.IO/Pub/EIFRecord.cs +++ b/EOLib.IO/Pub/EIFRecord.cs @@ -30,7 +30,7 @@ public class EIFRecord : IPubRecord public short Evade { get; set; } public short Armor { get; set; } - public byte UnkB { get; set; } + public byte UnkByte19 { get; set; } public byte Str { get; set; } public byte Int { get; set; } @@ -72,12 +72,12 @@ public class EIFRecord : IPubRecord public short ConReq { get; set; } public short ChaReq { get; set; } - public byte UnkD { get; set; } // Element (?) - public byte UnkE { get; set; } // Element Power (?) + public byte Element { get; set; } + public byte ElementPower { get; set; } public byte Weight { get; set; } - public byte UnkF { get; set; } + public byte UnkByte56 { get; set; } public ItemSize Size { get; set; } @@ -121,7 +121,7 @@ public byte[] SerializeToByteArray(INumberEncoderService numberEncoderService) mem.Write(numberEncoderService.EncodeNumber(Evade, 2), 0, 2); mem.Write(numberEncoderService.EncodeNumber(Armor, 2), 0, 2); - mem.WriteByte(numberEncoderService.EncodeNumber(UnkB, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkByte19, 1)[0]); mem.WriteByte(numberEncoderService.EncodeNumber(Str, 1)[0]); mem.WriteByte(numberEncoderService.EncodeNumber(Int, 1)[0]); @@ -151,11 +151,11 @@ public byte[] SerializeToByteArray(INumberEncoderService numberEncoderService) mem.Write(numberEncoderService.EncodeNumber(ConReq, 2), 0, 2); mem.Write(numberEncoderService.EncodeNumber(ChaReq, 2), 0, 2); - mem.WriteByte(numberEncoderService.EncodeNumber(UnkD, 1)[0]); - mem.WriteByte(numberEncoderService.EncodeNumber(UnkE, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber(Element, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber(ElementPower, 1)[0]); mem.WriteByte(numberEncoderService.EncodeNumber(Weight, 1)[0]); - mem.WriteByte(numberEncoderService.EncodeNumber(UnkF, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkByte56, 1)[0]); mem.WriteByte(numberEncoderService.EncodeNumber((byte)Size, 1)[0]); } @@ -167,14 +167,6 @@ 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 = (short)numberEncoderService.DecodeNumber(recordBytes[0], recordBytes[1]); Type = (ItemType)numberEncoderService.DecodeNumber(recordBytes[2]); SubType = (ItemSubType)numberEncoderService.DecodeNumber(recordBytes[3]); @@ -188,7 +180,7 @@ public void DeserializeFromByteArray(byte[] recordBytes, INumberEncoderService n Evade = (short)numberEncoderService.DecodeNumber(recordBytes[15], recordBytes[16]); Armor = (short)numberEncoderService.DecodeNumber(recordBytes[17], recordBytes[18]); - UnkB = (byte)numberEncoderService.DecodeNumber(recordBytes[19]); + UnkByte19 = (byte)numberEncoderService.DecodeNumber(recordBytes[19]); Str = (byte)numberEncoderService.DecodeNumber(recordBytes[20]); Int = (byte)numberEncoderService.DecodeNumber(recordBytes[21]); @@ -218,15 +210,15 @@ public void DeserializeFromByteArray(byte[] recordBytes, INumberEncoderService n ConReq = (short)numberEncoderService.DecodeNumber(recordBytes[49], recordBytes[50]); ChaReq = (short)numberEncoderService.DecodeNumber(recordBytes[51], recordBytes[52]); - UnkD = (byte)numberEncoderService.DecodeNumber(recordBytes[53]); - UnkE = (byte)numberEncoderService.DecodeNumber(recordBytes[54]); + Element = (byte)numberEncoderService.DecodeNumber(recordBytes[53]); + ElementPower = (byte)numberEncoderService.DecodeNumber(recordBytes[54]); Weight = (byte)numberEncoderService.DecodeNumber(recordBytes[55]); - UnkF = (byte)numberEncoderService.DecodeNumber(recordBytes[56]); + UnkByte56 = (byte)numberEncoderService.DecodeNumber(recordBytes[56]); Size = (ItemSize)numberEncoderService.DecodeNumber(recordBytes[57]); if (ID == 365 && Name == "Gun") SubType = ItemSubType.Ranged; } } -} +} \ No newline at end of file diff --git a/EOLib.IO/Pub/ENFRecord.cs b/EOLib.IO/Pub/ENFRecord.cs index 79d4c95e7..0ccab1957 100644 --- a/EOLib.IO/Pub/ENFRecord.cs +++ b/EOLib.IO/Pub/ENFRecord.cs @@ -19,13 +19,13 @@ public class ENFRecord : IPubRecord public int Graphic { get; set; } - public byte UnkA { get; set; } + public byte UnkByte2 { get; set; } public short Boss { get; set; } public short Child { get; set; } public NPCType Type { get; set; } - public short UnkB { get; set; } + public short UnkShort14 { get; set; } public short VendorID { get; set; } @@ -38,12 +38,14 @@ public class ENFRecord : IPubRecord 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 byte UnkByte26 { get; set; } + public short UnkShort27 { get; set; } + public short UnkShort29 { get; set; } + + public short ElementWeak { get; set; } + public short ElementWeakPower { get; set; } + + public byte UnkByte35 { get; set; } public int Exp { get; set; } @@ -76,7 +78,7 @@ public byte[] SerializeToByteArray(INumberEncoderService numberEncoderService) mem.Write(numberEncoderService.EncodeNumber(Graphic, 2), 0, 2); - mem.WriteByte(numberEncoderService.EncodeNumber(UnkA, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkByte2, 1)[0]); mem.Write(numberEncoderService.EncodeNumber(Boss, 2), 0, 2); mem.Write(numberEncoderService.EncodeNumber(Child, 2), 0, 2); @@ -84,7 +86,7 @@ public byte[] SerializeToByteArray(INumberEncoderService numberEncoderService) mem.Write(numberEncoderService.EncodeNumber(VendorID, 2), 0, 2); mem.Write(numberEncoderService.EncodeNumber(HP, 3), 0, 3); - mem.Write(numberEncoderService.EncodeNumber(UnkB, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkShort14, 2), 0, 2); mem.Write(numberEncoderService.EncodeNumber(MinDam, 2), 0, 2); mem.Write(numberEncoderService.EncodeNumber(MaxDam, 2), 0, 2); @@ -92,12 +94,12 @@ public byte[] SerializeToByteArray(INumberEncoderService numberEncoderService) mem.Write(numberEncoderService.EncodeNumber(Evade, 2), 0, 2); mem.Write(numberEncoderService.EncodeNumber(Armor, 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.WriteByte(numberEncoderService.EncodeNumber(UnkByte26, 1)[0]); + mem.Write(numberEncoderService.EncodeNumber(UnkShort27, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkShort29, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(ElementWeak, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(ElementWeakPower, 2), 0, 2); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkByte35, 1)[0]); mem.Write(numberEncoderService.EncodeNumber(Exp, 3), 0, 3); } @@ -110,16 +112,9 @@ 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]); + UnkByte2 = (byte)numberEncoderService.DecodeNumber(recordBytes[2]); Boss = (short)numberEncoderService.DecodeNumber(recordBytes[3], recordBytes[4]); Child = (short)numberEncoderService.DecodeNumber(recordBytes[5], recordBytes[6]); @@ -127,7 +122,7 @@ public void DeserializeFromByteArray(byte[] recordBytes, INumberEncoderService n 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]); + UnkShort14 = (short)numberEncoderService.DecodeNumber(recordBytes[14], recordBytes[15]); MinDam = (short)numberEncoderService.DecodeNumber(recordBytes[16], recordBytes[17]); MaxDam = (short)numberEncoderService.DecodeNumber(recordBytes[18], recordBytes[19]); @@ -136,14 +131,14 @@ public void DeserializeFromByteArray(byte[] recordBytes, INumberEncoderService n Evade = (short)numberEncoderService.DecodeNumber(recordBytes[22], recordBytes[23]); Armor = (short)numberEncoderService.DecodeNumber(recordBytes[24], recordBytes[25]); - 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]); + UnkByte26 = (byte)numberEncoderService.DecodeNumber(recordBytes[26]); + UnkShort27 = (short)numberEncoderService.DecodeNumber(recordBytes[27], recordBytes[28]); + UnkShort29 = (short)numberEncoderService.DecodeNumber(recordBytes[29], recordBytes[30]); + ElementWeak = (short)numberEncoderService.DecodeNumber(recordBytes[31], recordBytes[32]); + ElementWeakPower = (short)numberEncoderService.DecodeNumber(recordBytes[33], recordBytes[34]); + UnkByte35 = (byte)numberEncoderService.DecodeNumber(recordBytes[35]); Exp = numberEncoderService.DecodeNumber(recordBytes[36], recordBytes[37], recordBytes[38]); } } -} +} \ No newline at end of file diff --git a/EOLib.IO/Pub/ESFRecord.cs b/EOLib.IO/Pub/ESFRecord.cs index 68bda4980..9cbca28f9 100644 --- a/EOLib.IO/Pub/ESFRecord.cs +++ b/EOLib.IO/Pub/ESFRecord.cs @@ -26,39 +26,39 @@ public class ESFRecord : IPubRecord public byte CastTime { get; set; } - public byte UnkA { get; set; } - public byte UnkB { get; set; } + public byte UnkByte9 { get; set; } + public byte UnkByte10 { get; set; } public SpellType Type { get; set; } - public byte UnkC { get; set; } - public short UnkD { get; set; } + public byte UnkByte14 { get; set; } + public short UnkShort15 { get; set; } public SpellTargetRestrict TargetRestrict { get; set; } public SpellTarget Target { get; set; } - public byte UnkE { get; set; } - public byte UnkF { get; set; } - public short UnkG { get; set; } + public byte UnkByte19 { get; set; } + public byte UnkByte20 { get; set; } + public short UnkShort21 { get; set; } public short MinDam { get; set; } public short MaxDam { get; set; } public short Accuracy { get; set; } - public short UnkH { get; set; } - public short UnkI { get; set; } - public byte UnkJ { get; set; } + public short UnkShort29 { get; set; } + public short UnkShort31 { get; set; } + public byte UnkByte33 { get; set; } public short HP { get; set; } - public short UnkK { get; set; } - public byte UnkL { get; set; } - public short UnkM { get; set; } - public short UnkN { get; set; } - public short UnkO { get; set; } - public short UnkP { get; set; } - public short UnkQ { get; set; } - public short UnkR { get; set; } + public short UnkShort36 { get; set; } + public byte UnkByte38 { get; set; } + public short UnkShort39 { get; set; } + public short UnkShort41 { get; set; } + public short UnkShort43 { get; set; } + public short UnkShort45 { get; set; } + public short UnkShort47 { get; set; } + public short UnkShort49 { get; set; } public TValue Get(PubRecordProperty type) { @@ -96,39 +96,39 @@ public byte[] SerializeToByteArray(INumberEncoderService numberEncoderService) mem.Write(numberEncoderService.EncodeNumber(SP, 2), 0, 2); mem.WriteByte(numberEncoderService.EncodeNumber(CastTime, 1)[0]); - mem.WriteByte(numberEncoderService.EncodeNumber(UnkA, 1)[0]); - mem.WriteByte(numberEncoderService.EncodeNumber(UnkB, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkByte9, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkByte10, 1)[0]); mem.Write(numberEncoderService.EncodeNumber((int)Type, 3), 0, 3); //This is documented as a 3 byte int. - mem.WriteByte(numberEncoderService.EncodeNumber(UnkC, 1)[0]); - mem.Write(numberEncoderService.EncodeNumber(UnkD, 2), 0, 2); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkByte14, 1)[0]); + mem.Write(numberEncoderService.EncodeNumber(UnkShort15, 2), 0, 2); mem.WriteByte(numberEncoderService.EncodeNumber((byte)TargetRestrict, 1)[0]); mem.WriteByte(numberEncoderService.EncodeNumber((byte)Target, 1)[0]); - mem.WriteByte(numberEncoderService.EncodeNumber(UnkE, 1)[0]); - mem.WriteByte(numberEncoderService.EncodeNumber(UnkF, 1)[0]); - mem.Write(numberEncoderService.EncodeNumber(UnkG, 2), 0, 2); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkByte19, 1)[0]); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkByte20, 1)[0]); + mem.Write(numberEncoderService.EncodeNumber(UnkShort21, 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(UnkH, 2), 0, 2); - mem.Write(numberEncoderService.EncodeNumber(UnkI, 2), 0, 2); - mem.WriteByte(numberEncoderService.EncodeNumber(UnkJ, 1)[0]); + mem.Write(numberEncoderService.EncodeNumber(UnkShort29, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkShort31, 2), 0, 2); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkByte33, 1)[0]); mem.Write(numberEncoderService.EncodeNumber(HP, 2), 0, 2); - mem.Write(numberEncoderService.EncodeNumber(UnkK, 2), 0, 2); - mem.WriteByte(numberEncoderService.EncodeNumber(UnkL, 1)[0]); - mem.Write(numberEncoderService.EncodeNumber(UnkM, 2), 0, 2); - mem.Write(numberEncoderService.EncodeNumber(UnkN, 2), 0, 2); - mem.Write(numberEncoderService.EncodeNumber(UnkO, 2), 0, 2); - mem.Write(numberEncoderService.EncodeNumber(UnkP, 2), 0, 2); - mem.Write(numberEncoderService.EncodeNumber(UnkQ, 2), 0, 2); - mem.Write(numberEncoderService.EncodeNumber(UnkR, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkShort36, 2), 0, 2); + mem.WriteByte(numberEncoderService.EncodeNumber(UnkByte38, 1)[0]); + mem.Write(numberEncoderService.EncodeNumber(UnkShort39, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkShort41, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkShort43, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkShort45, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkShort47, 2), 0, 2); + mem.Write(numberEncoderService.EncodeNumber(UnkShort49, 2), 0, 2); } return ret; @@ -139,52 +139,45 @@ 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"); - Icon = (short)numberEncoderService.DecodeNumber(recordBytes[0], recordBytes[1]); Graphic = (short)numberEncoderService.DecodeNumber(recordBytes[2], recordBytes[3]); TP = (short)numberEncoderService.DecodeNumber(recordBytes[4], recordBytes[5]); SP = (short)numberEncoderService.DecodeNumber(recordBytes[6], recordBytes[7]); CastTime = (byte)numberEncoderService.DecodeNumber(recordBytes[8]); - UnkA = (byte)numberEncoderService.DecodeNumber(recordBytes[9]); - UnkB = (byte)numberEncoderService.DecodeNumber(recordBytes[10]); + UnkByte9 = (byte)numberEncoderService.DecodeNumber(recordBytes[9]); + UnkByte10 = (byte)numberEncoderService.DecodeNumber(recordBytes[10]); Type = (SpellType)numberEncoderService.DecodeNumber(recordBytes[11], recordBytes[12], recordBytes[13]); - UnkC = (byte)numberEncoderService.DecodeNumber(recordBytes[14]); - UnkD = (short)numberEncoderService.DecodeNumber(recordBytes[15], recordBytes[16]); + UnkByte14 = (byte)numberEncoderService.DecodeNumber(recordBytes[14]); + UnkShort15 = (short)numberEncoderService.DecodeNumber(recordBytes[15], recordBytes[16]); TargetRestrict = (SpellTargetRestrict)numberEncoderService.DecodeNumber(recordBytes[17]); Target = (SpellTarget)numberEncoderService.DecodeNumber(recordBytes[18]); - UnkE = (byte)numberEncoderService.DecodeNumber(recordBytes[19]); - UnkF = (byte)numberEncoderService.DecodeNumber(recordBytes[20]); - UnkG = (short)numberEncoderService.DecodeNumber(recordBytes[21], recordBytes[22]); + UnkByte19 = (byte)numberEncoderService.DecodeNumber(recordBytes[19]); + UnkByte20 = (byte)numberEncoderService.DecodeNumber(recordBytes[20]); + UnkShort21 = (short)numberEncoderService.DecodeNumber(recordBytes[21], recordBytes[22]); MinDam = (short)numberEncoderService.DecodeNumber(recordBytes[23], recordBytes[24]); MaxDam = (short)numberEncoderService.DecodeNumber(recordBytes[25], recordBytes[26]); Accuracy = (short)numberEncoderService.DecodeNumber(recordBytes[27], recordBytes[28]); - UnkH = (short)numberEncoderService.DecodeNumber(recordBytes[29], recordBytes[30]); - UnkI = (short)numberEncoderService.DecodeNumber(recordBytes[31], recordBytes[32]); - UnkJ = (byte)numberEncoderService.DecodeNumber(recordBytes[33]); + UnkShort29 = (short)numberEncoderService.DecodeNumber(recordBytes[29], recordBytes[30]); + UnkShort31 = (short)numberEncoderService.DecodeNumber(recordBytes[31], recordBytes[32]); + UnkByte33 = (byte)numberEncoderService.DecodeNumber(recordBytes[33]); HP = (short)numberEncoderService.DecodeNumber(recordBytes[34], recordBytes[35]); - UnkK = (short)numberEncoderService.DecodeNumber(recordBytes[36], recordBytes[37]); - UnkL = (byte)numberEncoderService.DecodeNumber(recordBytes[38]); - UnkM = (short)numberEncoderService.DecodeNumber(recordBytes[39], recordBytes[40]); - UnkN = (short)numberEncoderService.DecodeNumber(recordBytes[41], recordBytes[42]); - UnkO = (short)numberEncoderService.DecodeNumber(recordBytes[43], recordBytes[44]); - UnkP = (short)numberEncoderService.DecodeNumber(recordBytes[45], recordBytes[46]); - UnkQ = (short)numberEncoderService.DecodeNumber(recordBytes[47], recordBytes[48]); - UnkR = (short)numberEncoderService.DecodeNumber(recordBytes[49], recordBytes[50]); + UnkShort36 = (short)numberEncoderService.DecodeNumber(recordBytes[36], recordBytes[37]); + UnkByte38 = (byte)numberEncoderService.DecodeNumber(recordBytes[38]); + UnkShort39 = (short)numberEncoderService.DecodeNumber(recordBytes[39], recordBytes[40]); + UnkShort41 = (short)numberEncoderService.DecodeNumber(recordBytes[41], recordBytes[42]); + UnkShort43 = (short)numberEncoderService.DecodeNumber(recordBytes[43], recordBytes[44]); + UnkShort45 = (short)numberEncoderService.DecodeNumber(recordBytes[45], recordBytes[46]); + UnkShort47 = (short)numberEncoderService.DecodeNumber(recordBytes[47], recordBytes[48]); + UnkShort49 = (short)numberEncoderService.DecodeNumber(recordBytes[49], recordBytes[50]); } } -} +} \ No newline at end of file diff --git a/EOLib.IO/PubRecordProperty.cs b/EOLib.IO/PubRecordProperty.cs index d1fdeca73..be75fe99f 100644 --- a/EOLib.IO/PubRecordProperty.cs +++ b/EOLib.IO/PubRecordProperty.cs @@ -29,7 +29,7 @@ public enum PubRecordProperty ItemEvade, ItemArmor, - ItemUnkB, + ItemUnkByte19, ItemStr, ItemInt, @@ -67,12 +67,12 @@ public enum PubRecordProperty ItemConReq, ItemChaReq, - ItemUnkD, - ItemUnkE, + ItemUnkElement, + ItemUnkElementPower, ItemWeight, - ItemUnkF, + ItemUnkByte56, ItemSize, @@ -82,13 +82,13 @@ public enum PubRecordProperty NPCGraphic, - NPCUnkA, + NPCUnkByte2, NPCBoss, NPCChild, NPCType, - NPCUnkB, + NPCUnkShort14, NPCVendorID, @@ -101,12 +101,12 @@ public enum PubRecordProperty NPCEvade, NPCArmor, - NPCUnkC, - NPCUnkD, - NPCUnkE, - NPCUnkF, - NPCUnkG, - NPCUnkH, + NPCUnkByte26, + NPCUnkShort27, + NPCUnkShort29, + NPCElementWeak, + NPCElementWeakPower, + NPCUnkByte35, #endregion @@ -122,39 +122,39 @@ public enum PubRecordProperty SpellCastTime, - SpellUnkA, - SpellUnkB, + SpellUnkByte9, + SpellUnkByte10, SpellType, - SpellUnkC, - SpellUnkD, + SpellUnkByte14, + SpellUnkShort15, SpellTargetRestrict, SpellTarget, - SpellUnkE, - SpellUnkF, - SpellUnkG, + SpellUnkByte19, + SpellUnkByte20, + SpellUnkShort21, SpellMinDam, SpellMaxDam, SpellAccuracy, - SpellUnkH, - SpellUnkI, - SpellUnkJ, + SpellUnkShort29, + SpellUnkShort31, + SpellUnkByte33, SpellHP, - SpellUnkK, - SpellUnkL, - SpellUnkM, - SpellUnkN, - SpellUnkO, - SpellUnkP, - SpellUnkQ, - SpellUnkR, + SpellUnkShort36, + SpellUnkByte38, + SpellUnkShort39, + SpellUnkShort41, + SpellUnkShort43, + SpellUnkShort45, + SpellUnkShort47, + SpellUnkShort49, #endregion From a417f787ab1c8d9e60f2db71cfd76210d68c8753 Mon Sep 17 00:00:00 2001 From: Septharoth Date: Sun, 13 Mar 2022 13:32:54 -0400 Subject: [PATCH 7/8] fix ItemElement ItemElementPower --- EOLib.IO/PubRecordProperty.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EOLib.IO/PubRecordProperty.cs b/EOLib.IO/PubRecordProperty.cs index be75fe99f..76f63a802 100644 --- a/EOLib.IO/PubRecordProperty.cs +++ b/EOLib.IO/PubRecordProperty.cs @@ -67,8 +67,8 @@ public enum PubRecordProperty ItemConReq, ItemChaReq, - ItemUnkElement, - ItemUnkElementPower, + ItemElement, + ItemElementPower, ItemWeight, From 0e94781129f366c2d8166d91f7f77024a64852fa Mon Sep 17 00:00:00 2001 From: Septharoth Date: Sun, 13 Mar 2022 13:45:48 -0400 Subject: [PATCH 8/8] Update pub record tests --- EOLib.IO.Test/Pub/EIFRecordTest.cs | 7 ++++--- EOLib.IO.Test/Pub/ENFRecordTest.cs | 14 +++++++++----- EOLib.IO.Test/Pub/ESFRecordTest.cs | 25 +++++++++++++++++++------ 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/EOLib.IO.Test/Pub/EIFRecordTest.cs b/EOLib.IO.Test/Pub/EIFRecordTest.cs index 46e6daf80..3c51d803b 100644 --- a/EOLib.IO.Test/Pub/EIFRecordTest.cs +++ b/EOLib.IO.Test/Pub/EIFRecordTest.cs @@ -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)); @@ -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(); diff --git a/EOLib.IO.Test/Pub/ENFRecordTest.cs b/EOLib.IO.Test/Pub/ENFRecordTest.cs index 98b83e321..29fdb80f7 100644 --- a/EOLib.IO.Test/Pub/ENFRecordTest.cs +++ b/EOLib.IO.Test/Pub/ENFRecordTest.cs @@ -176,21 +176,25 @@ private static byte[] GetExpectedBytesWithoutName(ENFRecord rec, INumberEncoderS var ret = new List(); 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(); } diff --git a/EOLib.IO.Test/Pub/ESFRecordTest.cs b/EOLib.IO.Test/Pub/ESFRecordTest.cs index 47fbb998f..31206d294 100644 --- a/EOLib.IO.Test/Pub/ESFRecordTest.cs +++ b/EOLib.IO.Test/Pub/ESFRecordTest.cs @@ -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(); }