Esempio n. 1
0
        /// <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());
        }
    }
Esempio n. 5
0
        /// <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) }
                               );
        }
Esempio n. 6
0
 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);
         }
     }
 }