From e2b59d2ca5f83b609a5e55d3c377424dce4997b0 Mon Sep 17 00:00:00 2001 From: Carmine Date: Fri, 2 Mar 2018 01:15:55 +0100 Subject: [PATCH] Fixed sbyte types in handler of ArrayOfBytes --- CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs | 10 +++++++++- CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs index 5560d87..8b5a07b 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs @@ -432,7 +432,6 @@ namespace CodeWalker.GameFiles switch (arrEntry.DataType) { default: - case MetaStructureEntryDataType.SignedByte: for (int n = 0; n < byteArrLen; n++) { var bidx = eoffset + n; @@ -440,6 +439,15 @@ namespace CodeWalker.GameFiles sb.Append(b.ToString("X").PadLeft(2, '0')); } break; + case MetaStructureEntryDataType.SignedByte: + for (int n = 0; n < byteArrLen; n++) + { + var bidx = eoffset + n; + sbyte b = ((bidx >= 0) && (bidx < data.Length)) ? (sbyte)data[bidx] : (sbyte)0; + sb.Append(b.ToString()); //sb.Append(b.ToString("X").PadLeft(2, '0')); to show HEX values + if (n < byteArrLen - 1) sb.Append(" "); + } + break; case MetaStructureEntryDataType.UnsignedByte: for (int n = 0; n < byteArrLen; n++) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs index c8c057b..d56b39a 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs @@ -301,12 +301,20 @@ namespace CodeWalker.GameFiles switch (arrEntry.DataType) { default: - case MetaStructureEntryDataType.SignedByte: split = Split(node.InnerText, 2); for (int j = 0; j < split.Length; j++) { byte val = Convert.ToByte(split[j], 16); data[offset] = val; + offset += sizeof(byte); + } + break; + case MetaStructureEntryDataType.SignedByte: + split = node.InnerText.Split(); //split = Split(node.InnerText, 2); to read as unsplitted HEX + for (int j = 0; j < split.Length; j++) + { + sbyte val = Convert.ToSByte(split[j], 10); + data[offset] = (byte)val; offset += sizeof(sbyte); } break;