Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private byte[] MakeFireEmblemMessageArchive(string[] lines) // Assumes Format is ExtractFireEmblemMessageArchive() generated.
- {
- var ShiftJIS = Encoding.GetEncoding(932);
- int StringCount = lines.Length - 6;
- string[] Messages = new string[StringCount];
- string[] Names = new string[StringCount];
- uint[] MPos = new uint[StringCount];
- uint[] NPos = new uint[StringCount];
- for (int i = 6; i < lines.Length; i++)
- {
- int ind = lines[i].IndexOf(": ");
- Names[i - 6] = lines[i].Substring(0, ind);
- Messages[i - 6] = lines[i].Substring(ind + 2, lines[i].Length - (ind + 2)).Replace("\\n", "\n").Replace("\\r", "\r");
- }
- byte[] Header = new byte[0x20];
- byte[] StringTable;
- byte[] MetaTable = new byte[StringCount * 8];
- byte[] NamesTable;
- using (MemoryStream st = new MemoryStream())
- {
- using (BinaryWriter bw = new BinaryWriter(st))
- {
- bw.Write(ShiftJIS.GetBytes(lines[0]));
- bw.Write((byte)0);
- while (bw.BaseStream.Position % 4 != 0)
- bw.Write((byte)0);
- for (int i = 0; i < StringCount; i++)
- {
- MPos[i] = (uint)bw.BaseStream.Position;
- bw.Write(Encoding.Unicode.GetBytes(Messages[i]));
- bw.Write((ushort)0);
- while (bw.BaseStream.Position % 4 != 0)
- bw.Write((byte)0);
- }
- }
- StringTable = st.ToArray();
- }
- using (MemoryStream nt = new MemoryStream())
- {
- using (BinaryWriter bw = new BinaryWriter(nt))
- {
- for (int i = 0; i < StringCount; i++)
- {
- NPos[i] = (uint)bw.BaseStream.Position;
- bw.Write(ShiftJIS.GetBytes(Names[i]));
- bw.Write((byte)0);
- }
- }
- NamesTable = nt.ToArray();
- }
- for (int i = 0; i < StringCount; i++)
- {
- Array.Copy(BitConverter.GetBytes(MPos[i]), 0, MetaTable, (i * 8), 4);
- Array.Copy(BitConverter.GetBytes(NPos[i]), 0, MetaTable, (i * 8) + 4, 4);
- }
- Array.Copy(BitConverter.GetBytes(Archive.Length), Header, 4);
- Array.Copy(BitConverter.GetBytes(StringTable.Length), 0, Header, 4, 4);
- Array.Copy(BitConverter.GetBytes(StringCount), 0, Header, 0xC, 4);
- byte[] Archive = new byte[Header.Length + StringTable.Length + MetaTable.Length + NamesTable.Length];
- Array.Copy(Header, Archive, Header.Length);
- Array.Copy(StringTable, 0, Archive, Header.Length, StringTable.Length);
- Array.Copy(MetaTable, 0, Archive, Header.Length + StringTable.Length, MetaTable.Length);
- Array.Copy(NamesTable, 0, Archive, Header.Length + StringTable.Length + MetaTable.Length, NamesTable.Length);
- return Archive;
- }
Advertisement
Add Comment
Please, Sign In to add comment