/// <summary> /// Writes all of the equipment files to the specified directory. /// </summary> /// <param name="directory">The destination directory for the files.</param> /// <param name="equipmentData">The list of equipment.</param> /// <param name="equipmentNames">The equipment name table.</param> /// <param name="equipmentDescriptions">The equipment description MBM.</param> public static void WriteEquipmentData( string directory, List <Equipment> equipmentData, Table equipmentNames, MBM equipmentDescriptions) { // Equipment table and requirements output. string equipmentTableOutputPath = Path.Combine(directory, "equipitemtable.tbl"); string equipmentUnlockRequirementsOutputPath = Path.Combine(directory, "equipitemcompound.tbl"); using (var writer = new BinaryWriter(new FileStream(equipmentTableOutputPath, FileMode.Create))) using (var requirementsWriter = new BinaryWriter(new FileStream(equipmentUnlockRequirementsOutputPath, FileMode.Create))) { foreach (var item in equipmentData) { item.WriteToFile(writer); item.Requirements.WriteToFile(requirementsWriter); } } // Names output. string equipmentNameTableOutputPath = Path.Combine(directory, "equipitemnametable.tbl"); equipmentNames.WriteToFile(equipmentNameTableOutputPath, false); // Descriptions output. string equipmentDescriptionsOutputPath = Path.Combine(directory, "equipitemexpbattle.mbm"); equipmentDescriptions.WriteToFile(equipmentDescriptionsOutputPath); }
private void MBM_Init() { string[] FWHW_Pairs = File.ReadAllLines(".\\CodeTable\\FW-HW.txt").Where(str => str.Length == 2).ToArray(); string[] Chinese_Pairs = File.ReadAllLines(".\\CodeTable\\Shift-JIS-A.txt"); Dictionary <char, string> chineseDic = Chinese_Pairs.Where(pair => pair.Length > 0) .ToDictionary(pair => pair.Split(new string[] { "=>" }, StringSplitOptions.None)[1].ToCharArray().First(), pair => pair.Split(new string[] { "=>" }, StringSplitOptions.None)[0]); MBM.Init(FWHW_Pairs.ToDictionary(p => p[0], p => p[1]), FWHW_Pairs.ToDictionary(p => p[1], p => p[0]), chineseDic); }
public static void MBM2XML(string path) { FileInfo info = new FileInfo(path); if ((info.Attributes & FileAttributes.Directory) != 0) { foreach (var filefound in Directory.GetFiles(path, "*" + MBMExtension, SearchOption.AllDirectories)) { File.WriteAllText(filefound + XMLExtension, MBM.ByteArray2EntryList(File.ReadAllBytes(filefound)).EntryList2XElement().ToString()); } } else { File.WriteAllText(path + XMLExtension, MBM.ByteArray2EntryList(File.ReadAllBytes(path)).EntryList2XElement().ToString()); } }
public static void XML2MBM(string path) { FileInfo info = new FileInfo(path); if ((info.Attributes & FileAttributes.Directory) != 0) { foreach (var filefound in Directory.GetFiles(path, "*" + XMLExtension, SearchOption.AllDirectories)) { File.WriteAllBytes(filefound + MBMExtension, MBM.XElement2EntryList(XElement.Load(filefound)).EntryList2ByteArray()); } } else { File.WriteAllBytes(path + MBMExtension, MBM.XElement2EntryList(XElement.Load(path)).EntryList2ByteArray()); } }
/// <summary> /// Handle exporting a tbl/mbm file to JSON. /// </summary> /// <param name="inputPath">The path to the tbl/mbm file.</param> /// <param name="outputPath">Where to write the JSON to.</param> private static void HandleExport(string inputPath, string outputPath, bool longPointers) { // Check what type of file we're importing, using its extension. string extension = Path.GetExtension(inputPath).ToLower(); object importedFile = null; if (extension == ".mbm") { importedFile = new MBM(inputPath); } else if (extension == ".tbl") { importedFile = new Table(inputPath, longPointers); } // Serialize the file to JSON, and output it. File.WriteAllLines(outputPath, new string[] { importedFile.GetType().ToString(), JsonConvert.SerializeObject(importedFile, Formatting.Indented) } ); }
private static void Main() { Application.EnableVisualStyles(); // We prompt the user for where various files are is before showing a form. Once the // application's been launched once, we can cache this. If any of the files aren't loaded, // then exit. using (var openDialog = new CommonOpenFileDialog()) { openDialog.IsFolderPicker = true; openDialog.AllowNonFileSystemItems = true; openDialog.Title = "Select the equipment data files' location"; if (openDialog.ShowDialog() == CommonFileDialogResult.Ok) { Table equipmentNames = null; MBM equipmentDescriptions = null; List <Equipment> equipment = null; Table useItemNames = null; List <UseItem> useItems = new List <UseItem>(); string equipItemDescriptionsLocation = Path.Combine(openDialog.FileName, "equipitemexpbattle.mbm"); string equipItemNameTableLocation = Path.Combine(openDialog.FileName, "equipitemnametable.tbl"); string equipItemTableLocation = Path.Combine(openDialog.FileName, "equipitemtable.tbl"); string equipItemCompoundLocation = Path.Combine(openDialog.FileName, "equipitemcompound.tbl"); string useItemNameTableLocation = Path.Combine(openDialog.FileName, "useitemnametable.tbl"); try { // Load item names. equipmentNames = new Table(equipItemNameTableLocation, false); // Load item descriptions equipmentDescriptions = new MBM(equipItemDescriptionsLocation); // Load use item names. useItemNames = new Table(useItemNameTableLocation, false); // Create the use item list. for (int index = 0; index < useItemNames.Count; index += 1) { useItems.Add(new UseItem(useItemNames, index)); } // Create the equipment list. equipment = new List <Equipment>(); using (var reader = new BinaryReader(new FileStream(equipItemTableLocation, FileMode.Open))) { int itemIndex = 0; while (reader.BaseStream.Position < reader.BaseStream.Length) { equipment.Add(new Equipment(itemIndex, reader, equipmentNames, equipmentDescriptions, useItems)); itemIndex += 1; } } // Load unlock requirements. using (var reader = new BinaryReader(new FileStream(equipItemCompoundLocation, FileMode.Open))) { foreach (Equipment item in equipment) { item.Requirements.First.ItemIndex = reader.ReadUInt16(); item.Requirements.Second.ItemIndex = reader.ReadUInt16(); item.Requirements.Third.ItemIndex = reader.ReadUInt16(); item.Requirements.First.Amount = reader.ReadByte(); item.Requirements.Second.Amount = reader.ReadByte(); item.Requirements.Third.Amount = reader.ReadByte(); reader.ReadByte(); // Alignment spacer, skip. } } } catch (IOException) { MessageBox.Show("One or more of the equipment files could not be loaded.", "Fatal error", MessageBoxButtons.OK, MessageBoxIcon.Error); Environment.Exit(0); } Application.Run(new MainForm(equipment, equipmentNames, equipmentDescriptions, useItems)); } else { Environment.Exit(0); } } }