Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void ExtractFireEmblemMessageArchive(string outname, byte[] archive)
- {
- var ShiftJIS = Encoding.GetEncoding(932);
- string ArchiveName = ShiftJIS.GetString(archive.Skip(0x20).TakeWhile(b => b != 0).ToArray()); // Archive Name.
- uint TextPartitionLen = BitConverter.ToUInt32(archive, 4);
- uint StringCount = BitConverter.ToUInt32(archive, 0xC);
- string[] MessageNames = new string[StringCount];
- string[] Messages = new string[StringCount];
- uint StringMetaOffset = 0x20 + TextPartitionLen;
- uint NamesOffset = StringMetaOffset + 0x8 * StringCount;
- for (int i = 0; i < StringCount; i++)
- {
- int MessageOffset = 0x20+BitConverter.ToInt32(archive, (int)StringMetaOffset + 0x8 * i);
- int MessageLen = 0;
- while (BitConverter.ToUInt16(archive, MessageOffset + MessageLen) != 0)
- MessageLen += 2;
- Messages[i] = Encoding.Unicode.GetString(archive.Skip(MessageOffset).Take(MessageLen).ToArray()).Replace("\n","\\n").Replace("\r","\\r");
- int NameOffset = (int)NamesOffset + BitConverter.ToInt32(archive, (int)StringMetaOffset + (0x8 * i) + 4);
- MessageNames[i] = ShiftJIS.GetString(archive.Skip(NameOffset).TakeWhile(b => b != 0).ToArray());
- }
- List<string> Lines = new List<string>();
- Lines.Add(ArchiveName);
- Lines.Add(Environment.NewLine);
- Lines.Add("Message Name: Message");
- Lines.Add(Environment.NewLine);
- for (int i = 0; i < StringCount; i++)
- Lines.Add(string.Format("{0}: {1}", MessageNames[i], Messages[i]));
- File.WriteAllLines(outname, Lines);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement