diff --git a/BMGEditor/BMG.cs b/BMGEditor/BMG.cs index f40fa28..b7fd4f0 100644 --- a/BMGEditor/BMG.cs +++ b/BMGEditor/BMG.cs @@ -1,12 +1,11 @@ using System; using System.Collections.Generic; -using System.Linq; +using System.Globalization; using System.Text; -using System.Threading.Tasks; namespace BMGEditor { - public class BMG + public class BMG { private FileBase m_File; private Bcsv m_File_Tbl; @@ -1248,6 +1247,7 @@ namespace BMGEditor ret.Add(0x00); ret.Add(0x1A); ret.Add(escSeq.length); + ret.Add(escSeq.unk1); switch (escSeq.length) { @@ -1296,7 +1296,6 @@ namespace BMGEditor { ret += String.Format("{0:X2}", m_File.Reader.ReadByte()); } - ret += "*"; } else ret += c; @@ -1382,14 +1381,52 @@ namespace BMGEditor { if (strToWrite[i].Equals('*')) { - /*EscapeSequence escSeq = new EscapeSequence(); - string strEscSeqLen = String.Concat(strToWrite[i+1], strToWrite[i+2]); - escSeq.length = Byte.Parse(strEscSeqLen, System.Globalization.NumberStyles.HexNumber); - Console.WriteLine(String.Format("{0:X2}", escSeq.length)); - Console.WriteLine("strtowrite i " + strToWrite[i]); - Console.WriteLine("strtowrite i+1 " + strToWrite[i+1]);*/ + //if (i + 2 > strToWrite.Count) + //break; + //else + { + EscapeSequence escSeq = new EscapeSequence(); + string strEscSeqLen = String.Concat(strToWrite[i+1], strToWrite[i+2]); + escSeq.length = Byte.Parse(strEscSeqLen, NumberStyles.HexNumber); + escSeq.unk1 = Byte.Parse(String.Concat(strToWrite[i + 3], strToWrite[i + 4]), NumberStyles.HexNumber); - m_File.Writer.Write(strToWrite[i]); + switch (escSeq.length) + { + case 0x06: + escSeq.binValue1 = UInt16.Parse(String.Concat(strToWrite[i + 5], strToWrite[i + 6], strToWrite[i + 7], strToWrite[i + 8]), NumberStyles.HexNumber); + break; + + case 0x08: + escSeq.binValue1 = UInt16.Parse(String.Concat(strToWrite[i + 5], strToWrite[i + 6], strToWrite[i + 7], strToWrite[i + 8]), NumberStyles.HexNumber); + escSeq.binValue2 = UInt16.Parse(String.Concat(strToWrite[i + 9], strToWrite[i + 10], strToWrite[i + 11], strToWrite[i + 12]), NumberStyles.HexNumber); + + break; + + case 0x0E: + escSeq.binValue1 = UInt16.Parse(String.Concat(strToWrite[i + 5], strToWrite[i + 6], strToWrite[i + 7], strToWrite[i + 8]), NumberStyles.HexNumber); + escSeq.binValue2 = UInt16.Parse(String.Concat(strToWrite[i + 9], strToWrite[i + 10], strToWrite[i + 11], strToWrite[i + 12]), NumberStyles.HexNumber); + escSeq.binValue3 = UInt16.Parse(String.Concat(strToWrite[i + 13], strToWrite[i + 14], strToWrite[i + 15], strToWrite[i + 16]), NumberStyles.HexNumber); + escSeq.binValue4 = UInt16.Parse(String.Concat(strToWrite[i + 17], strToWrite[i + 18], strToWrite[i + 19], strToWrite[i + 20]), NumberStyles.HexNumber); + escSeq.binValue5 = UInt16.Parse(String.Concat(strToWrite[i + 21], strToWrite[i + 22], strToWrite[i + 23], strToWrite[i + 24]), NumberStyles.HexNumber); + break; + + default: + System.Windows.Forms.MessageBox.Show("Error, please report this issue to Bussun#0586 on Discord. What went wrong: Unknown escape sequence"); + break; + } + + List escSeqToWrite = BytesFromEscapeSequence(escSeq); + foreach (Byte b in escSeqToWrite) + { + m_File.Writer.Write(b); + } + i += escSeq.length * 2 + 1; + /*Console.WriteLine(String.Format("{0:X2}", escSeq.length)); + Console.WriteLine("strtowrite i " + strToWrite[i]); + Console.WriteLine("strtowrite i+1 " + strToWrite[i+1]);*/ + + //m_File.Writer.Write(strToWrite[i]); + } } else m_File.Writer.Write(strToWrite[i]); diff --git a/BMGEditor/Program.cs b/BMGEditor/Program.cs index 8b0ad4b..7e7dbd6 100644 --- a/BMGEditor/Program.cs +++ b/BMGEditor/Program.cs @@ -32,6 +32,7 @@ namespace BMGEditor string str = "FF"; Byte octet = Byte.Parse(str, NumberStyles.HexNumber); Console.WriteLine(octet); + //BitConverter.ToUInt16() } }