static void DecompileM12() { // Pull all string refs from the ROM var allRefs = new List <Tuple <string, MainStringRef[]> >(); var tptTuple = M12TextTables.ReadTptRefs(m12Rom); allRefs.Add(Tuple.Create("m12-tpt-primary", tptTuple.Item1)); allRefs.Add(Tuple.Create("m12-tpt-secondary", tptTuple.Item2)); allRefs.Add(Tuple.Create("m12-psi-help", M12TextTables.ReadPsiHelpRefs(m12Rom))); allRefs.Add(Tuple.Create("m12-battle-actions", M12TextTables.ReadBattleActionRefs(m12Rom))); allRefs.Add(Tuple.Create("m12-item-help", M12TextTables.ReadItemHelpRefs(m12Rom))); allRefs.Add(Tuple.Create("m12-movements", M12TextTables.ReadMovementRefs(m12Rom))); allRefs.Add(Tuple.Create("m12-objects", M12TextTables.ReadObjectRefs(m12Rom))); allRefs.Add(Tuple.Create("m12-phone-list", M12TextTables.ReadPhoneRefs(m12Rom))); allRefs.Add(Tuple.Create("m12-unknown", M12TextTables.ReadUnknownRefs(m12Rom))); allRefs.Add(Tuple.Create("m12-enemy-encounters", M12TextTables.ReadEnemyEncounters(m12Rom))); allRefs.Add(Tuple.Create("m12-enemy-deaths", M12TextTables.ReadEnemyDeaths(m12Rom))); allRefs.Add(Tuple.Create("m12-prayers", M12TextTables.ReadPrayerRefs(m12Rom))); allRefs.Add(Tuple.Create("m12-asmrefs", M12TextTables.ReadAsmRefs(m12Rom))); // Decompile var allPointers = allRefs.SelectMany(rl => rl.Item2).Select(r => r.OldPointer); m12Decompiler.LabelMap.AddRange(allPointers); var strings = new List <string>(); m12Decompiler.ScanRange(m12Rom, 0x3697F, 0x8C4B0); strings.Add(m12Decompiler.DecompileRange(m12Rom, 0x3697F, 0x8C4B0, true)); // Update labels for all refs foreach (var refList in allRefs) { foreach (var stringRef in refList.Item2) { stringRef.Label = m12Decompiler.LabelMap.Labels[stringRef.OldPointer]; } } // Write to JSON foreach (var refList in allRefs) { File.WriteAllText(Path.Combine(options.WorkingDirectory, refList.Item1 + ".json"), JsonConvert.SerializeObject(refList.Item2, Formatting.Indented)); } // Write the strings File.WriteAllText(Path.Combine(options.WorkingDirectory, "m12-strings.txt"), String.Join(Environment.NewLine, strings)); }
static void DecompileM12Misc() { // Item names var itemNames = M12TextTables.ReadItemNames(m12Rom); DecompileM12MiscStringCollection("m12-itemnames", itemNames); // Menu choices var menuChoices = M12TextTables.ReadMenuChoices(m12Rom); DecompileM12MiscStringCollection("m12-menuchoices", menuChoices); // Misc text var miscText = M12TextTables.ReadMiscText(m12Rom); DecompileM12MiscStringCollection("m12-misctext", miscText); // Dad var dadText = M12TextTables.ReadDadText(m12Rom); DecompileM12MiscStringCollection("m12-dadtext", dadText); // PSI text var psiText = M12TextTables.ReadPsiText(m12Rom); DecompileM12MiscStringCollection("m12-psitext", psiText); // Enemy names var enemyNames = M12TextTables.ReadEnemyNames(m12Rom); DecompileM12MiscStringCollection("m12-enemynames", enemyNames); // PSI names var psiNames = M12TextTables.ReadPsiNames(m12Rom); DecompileFixedStringCollection(m12Decompiler, m12Rom, "m12-psinames", psiNames); // PSI targets var miscText2 = M12TextTables.ReadPsiTargets(m12Rom); DecompileFixedStringCollection(m12Decompiler, m12Rom, "m12-psitargets", miscText2); }
static void DecompileM12Misc() { // Item names var itemNames = M12TextTables.ReadItemNames(m12Rom); DecompileM12MiscStringCollection("m12-itemnames", itemNames); // Menu choices var menuChoices = M12TextTables.ReadMenuChoices(m12Rom); DecompileM12MiscStringCollection("m12-menuchoices", menuChoices); // Misc text var miscText = M12TextTables.ReadMiscText(m12Rom); DecompileM12MiscStringCollection("m12-misctext", miscText); // Dad var dadText = M12TextTables.ReadDadText(m12Rom); DecompileM12MiscStringCollection("m12-dadtext", dadText); // PSI text var psiText = M12TextTables.ReadPsiText(m12Rom); DecompileM12MiscStringCollection("m12-psitext", psiText); // Enemy names var enemyNames = M12TextTables.ReadEnemyNames(m12Rom); DecompileM12MiscStringCollection("m12-enemynames", enemyNames); // PSI names var psiNames = M12TextTables.ReadPsiNames(m12Rom); DecompileFixedStringCollection(m12Decompiler, m12Rom, "m12-psinames", psiNames); // PSI targets var miscText2 = M12TextTables.ReadPsiTargets(m12Rom); DecompileFixedStringCollection(m12Decompiler, m12Rom, "m12-psitargets", miscText2); // Other DecompileHardcodedStringCollection(m12Decompiler, m12Rom, "m12-other", 0xB1B492, 0xB1B497, 0xB1B49C, 0xB1B4A1, 0xB1B4A6, 0xB1BA00, 0xB1BA05, 0xB1BA0A, 0xB1BA0F, 0xB1BA14, 0xB1BA1A, 0xB1BA20, 0xB1BA26, 0xB1BA2C, 0xB1BA36, 0xB1BA40, 0xB1BA4A, 0xB1BA54, 0xB1BA61, 0xB1BA6E, 0xB1BA7B); // Teleport destinations var teleportNames = M12TextTables.ReadTeleportNames(m12Rom); DecompileFixedStringCollection(m12Decompiler, m12Rom, "m12-teleport-names", teleportNames); }