Exemplo n.º 1
0
        public List <Unit_Files_List> parse_Unit_Files_List_FB(string path)
        {
            FileStream fs = File.OpenRead(path);

            List <Unit_Files_List> unit_Files_List = new List <Unit_Files_List>();

            while (fs.Position < fs.Length)
            {
                Unit_Files_List unit_files = new Unit_Files_List();
                unit_files.Unit_ID                               = readUIntBigEndian(fs);
                unit_files.dummy_PAC_hash                        = readUIntBigEndian(fs);
                unit_files.data_and_script_PAC_hash              = readUIntBigEndian(fs);
                unit_files.model_and_texture_PAC_hash            = readUIntBigEndian(fs);
                unit_files.animation_OMO_PAC_hash                = readUIntBigEndian(fs);
                unit_files.effects_EIDX_PAC_hash                 = readUIntBigEndian(fs);
                unit_files.sound_effect_PAC_hash                 = readUIntBigEndian(fs);
                unit_files.global_pilot_voices_PAC_hash          = readUIntBigEndian(fs);
                unit_files.weapon_image_DNSO_PAC_hash            = readUIntBigEndian(fs);
                unit_files.sortie_and_awakening_sprites_PAC_hash = readUIntBigEndian(fs);
                unit_files.sortie_mouth_anim_enum_KPKP_PAC_hash  = readUIntBigEndian(fs);
                unit_files.voice_file_list_PAC_hash              = readUIntBigEndian(fs);
                unit_files.local_pilot_voices_STREAM_PAC_hash    = readUIntBigEndian(fs);
                unit_Files_List.Add(unit_files);
            }

            fs.Close();

            return(unit_Files_List);
        }
Exemplo n.º 2
0
        public List <Unit_Files_List> parse_Unit_Files_List_MBON(string path)
        {
            FileStream fs = File.OpenRead(path);

            List <Unit_Files_List> unit_Files_List = new List <Unit_Files_List>();

            while (fs.Position < fs.Length)
            {
                Unit_Files_List unit_files = new Unit_Files_List();
                unit_files.Unit_ID                  = readUIntBigEndian(fs);
                unit_files.dummy_PAC_hash           = readUIntBigEndian(fs);
                unit_files.data_and_script_PAC_hash = readUIntBigEndian(fs);

                uint BABB1 = readUIntBigEndian(fs);
                uint BABB2 = readUIntBigEndian(fs);

                unit_files.model_and_texture_PAC_hash = readUIntBigEndian(fs);
                unit_files.animation_OMO_PAC_hash     = readUIntBigEndian(fs);
                unit_files.effects_EIDX_PAC_hash      = readUIntBigEndian(fs);

                uint FFFF1 = readUIntBigEndian(fs);
                if (FFFF1 != 0xFFFFFFFF)
                {
                    throw new Exception();
                }

                uint FFFF2 = readUIntBigEndian(fs);
                if (FFFF2 != 0xFFFFFFFF)
                {
                    throw new Exception();
                }

                unit_files.weapon_image_DNSO_PAC_hash = readUIntBigEndian(fs);

                uint unknownHash = readUIntBigEndian(fs);

                unit_files.sortie_mouth_anim_enum_KPKP_PAC_hash = readUIntBigEndian(fs);

                uint FFFF3 = readUIntBigEndian(fs);
                if (FFFF3 != 0xFFFFFFFF)
                {
                    throw new Exception();
                }

                uint FFFF4 = readUIntBigEndian(fs);
                if (FFFF4 != 0xFFFFFFFF)
                {
                    throw new Exception();
                }

                unit_Files_List.Add(unit_files);
            }

            fs.Close();

            return(unit_Files_List);
        }
Exemplo n.º 3
0
        public void extractNPCImages()
        {
            string        totalMBONExportFolder = @"D:\Games\PS3\EXVSFB JPN\Pkg research\FB Repacker\Repack\PAC\Input\MBON Reimport Project\Total MBON Export";
            List <string> allUnitFolders        = Directory.GetDirectories(totalMBONExportFolder, "*", SearchOption.TopDirectoryOnly).ToList();

            string json = File.OpenText(@"D:\Games\PS3\EXVSFB JPN\Pkg research\FB Repacker\Repack\PAC\Input\MBON Reimport Project\AllUnitsPACHashes.json").ReadToEnd();
            List <Unit_Files_List> unit_Files_List = JsonConvert.DeserializeObject <List <Unit_Files_List> >(json);

            json = File.OpenText(@"D:\Games\PS3\EXVSFB JPN\Pkg research\FB Repacker\Repack\PAC\Input\MBON Reimport Project\Unit List MBON.json").ReadToEnd();
            List <Unit_Info_List> unit_Info_List = JsonConvert.DeserializeObject <List <Unit_Info_List> >(json);

            List <string> allbossunitimagesfolder = Directory.GetDirectories(@"D:\Games\PS3\EXVSFB JPN\Pkg research\FB Repacker\Extract\Output\MBON\v2\All Boss Unit Image & Sound Effects", "*", SearchOption.TopDirectoryOnly).ToList();

            foreach (string unitFolder in allUnitFolders)
            {
                string unitFolderName = Path.GetFileName(unitFolder.TrimEnd(Path.DirectorySeparatorChar));

                int    unit_ID_str_index = unitFolderName.IndexOf("- ");
                string unit_ID_str       = string.Empty;
                if (unit_ID_str_index >= 0)
                {
                    unit_ID_str = unitFolderName.Substring(unit_ID_str_index + 2, unitFolderName.Length - unit_ID_str_index - 2);
                }

                uint            unit_ID    = Convert.ToUInt32(unit_ID_str);
                Unit_Files_List unit_Files = unit_Files_List.FirstOrDefault(x => x.Unit_ID == unit_ID);
                Unit_Info_List  unit_Infos = unit_Info_List.FirstOrDefault(x => x.unit_ID == unit_ID);

                if (unit_ID >= 0x13880 && unit_ID <= 0x13a00)
                {
                    if (unit_Files != null && unit_Files.MBONAdded) // Bosses
                    {
                        // Sound Effects
                        string BossFolder = allbossunitimagesfolder.FirstOrDefault(s => s.Contains(unit_ID.ToString()));

                        string arcadeUnitSpriteFolder = Directory.GetDirectories(BossFolder, "*", SearchOption.TopDirectoryOnly).FirstOrDefault(s => Path.GetFileName(s).Contains("Arcade Sprite"));
                        string arcadeUnitSprite       = arcadeUnitSpriteFolder + @"\001-MBON\002.dds";

                        string arcadePilotSpriteFolder = Directory.GetDirectories(BossFolder, "*", SearchOption.TopDirectoryOnly).FirstOrDefault(s => Path.GetFileName(s).Contains("Arcade Sprite"));
                        string arcadePilotSprite       = arcadePilotSpriteFolder + @"\001-MBON\002.dds";

                        if (!File.Exists(arcadeUnitSprite))
                        {
                            throw new Exception();
                        }

                        string extractedExportArcadeFolder = unitFolder + @"\Extracted MBON\Arcade_Sprites - " + unit_Infos.arcade_selection_sprite_costume_1_hash;
                        string extractedExportFreeBattleSelectionFolder     = unitFolder + @"\Extracted MBON\Free_Battle_Selection_Sprite_Costume_1 - " + unit_Infos.free_battle_selection_sprite_costume_1_hash;
                        string extractedExportInGameSortieFolder            = unitFolder + @"\Extracted MBON\In_Game_Sortie_and_Awakening_Sprite_Costume_1 - " + unit_Files.sortie_and_awakening_sprites_PAC_hash;
                        string extractedExportLoadingAllyFolder             = unitFolder + @"\Extracted MBON\Loading_Ally_Sprite_Costume_1 - " + unit_Infos.loading_ally_sprite_costume_1_hash;
                        string extractedExportLoadingEnemyFolder            = unitFolder + @"\Extracted MBON\Loading_Enemy_Sprite_Costume_1 - " + unit_Infos.loading_enemy_sprite_costume_1_hash;
                        string extractedExportLoadingEnemyTargetPilotFolder = unitFolder + @"\Extracted MBON\Loading_Enemy_Target_Pilot_Sprite_Costume_1 - " + unit_Infos.loading_enemy_target_pilot_sprite_costume_1_hash;
                        string extractedExportLoadingEnemyTargetUnitFolder  = unitFolder + @"\Extracted MBON\Loading_Enemy_Target_Unit_Sprite_Costume_1 - " + unit_Infos.loading_enemy_target_unit_sprite_costume_1_hash;
                        string extractedExportFigurineSpriteFolder          = unitFolder + @"\Extracted MBON\Figurine_Sprite - " + unit_Infos.figurine_sprite_hash;
                        string extractedExportResultSmallSpriteFolder       = unitFolder + @"\Extracted MBON\Result_Small_Sprite - " + unit_Infos.result_small_sprite_hash;
                        string extractedExportTargetSmallSpriteFolder       = unitFolder + @"\Extracted MBON\Target_Small_Sprite - " + unit_Infos.figurine_sprite_hash;

                        Directory.CreateDirectory(extractedExportArcadeFolder);
                        Directory.CreateDirectory(extractedExportFreeBattleSelectionFolder);
                        Directory.CreateDirectory(extractedExportInGameSortieFolder);
                        Directory.CreateDirectory(extractedExportLoadingAllyFolder);
                        Directory.CreateDirectory(extractedExportLoadingEnemyFolder);
                        Directory.CreateDirectory(extractedExportLoadingEnemyTargetPilotFolder);
                        Directory.CreateDirectory(extractedExportLoadingEnemyTargetUnitFolder);
                        Directory.CreateDirectory(extractedExportFigurineSpriteFolder);
                        Directory.CreateDirectory(extractedExportResultSmallSpriteFolder);
                        Directory.CreateDirectory(extractedExportTargetSmallSpriteFolder);

                        resize_dds_precise(arcadeUnitSprite, extractedExportArcadeFolder + @"\arcade_unit.dds", 0, true, 1280, 720);
                    }
                }
            }
        }
Exemplo n.º 4
0
        public void extractNPCSounds()
        {
            string        totalMBONExportFolder = @"D:\Games\PS3\EXVSFB JPN\Pkg research\FB Repacker\Repack\PAC\Input\MBON Reimport Project\Total MBON Export";
            List <string> allUnitFolders        = Directory.GetDirectories(totalMBONExportFolder, "*", SearchOption.TopDirectoryOnly).ToList();

            string json = File.OpenText(@"D:\Games\PS3\EXVSFB JPN\Pkg research\FB Repacker\Repack\PAC\Input\MBON Reimport Project\AllUnitsPACHashes.json").ReadToEnd();
            List <Unit_Files_List> unit_Files_List = JsonConvert.DeserializeObject <List <Unit_Files_List> >(json);

            List <string> allbossunitsoundeffectsfolder = Directory.GetDirectories(@"D:\Games\PS3\EXVSFB JPN\Pkg research\FB Repacker\Extract\Output\MBON\v2\All Boss Unit Image & Sound Effects", "*", SearchOption.TopDirectoryOnly).ToList();

            foreach (string unitFolder in allUnitFolders)
            {
                string unitFolderName = Path.GetFileName(unitFolder.TrimEnd(Path.DirectorySeparatorChar));

                int    unit_ID_str_index = unitFolderName.IndexOf("- ");
                string unit_ID_str       = string.Empty;
                if (unit_ID_str_index >= 0)
                {
                    unit_ID_str = unitFolderName.Substring(unit_ID_str_index + 2, unitFolderName.Length - unit_ID_str_index - 2);
                }

                uint            unit_ID    = Convert.ToUInt32(unit_ID_str);
                Unit_Files_List unit_Files = unit_Files_List.FirstOrDefault(x => x.Unit_ID == unit_ID);

                if (unit_ID >= 0x13880 && unit_ID <= 0x13a00)
                {
                    if (unit_Files != null && unit_Files.MBONAdded) // Bosses
                    {
                        // Sound Effects
                        string BossFolder = allbossunitsoundeffectsfolder.FirstOrDefault(s => s.Contains(unit_ID.ToString()));
                        string SEFolder   = Directory.GetDirectories(BossFolder, "*", SearchOption.TopDirectoryOnly).FirstOrDefault(s => Path.GetFileName(s).Contains("Sound Effect"));
                        string SE         = SEFolder + @"\001-MBON\002.nus3bank";

                        if (!File.Exists(SE))
                        {
                            throw new Exception();
                        }

                        string reimportSEFolder = unitFolder + @"\Extracted MBON\Sound Effects";

                        Directory.CreateDirectory(reimportSEFolder);

                        File.Copy(SE, unitFolder + @"\Extracted MBON\Sound Effect.nus3bank", true);

                        convertNUS3toWav(SE, reimportSEFolder);

                        // Local Voice Files

                        List <string> nus3AudioVoiceFiles = Directory.GetFiles(unitFolder + @"\Extracted MBON", "*.nus3audio", SearchOption.TopDirectoryOnly).ToList();
                        string        LocalVoiceFile      = nus3AudioVoiceFiles.FirstOrDefault(s => Path.GetFileName(s).Contains("Local Voice Files"));

                        if (!File.Exists(LocalVoiceFile))
                        {
                            throw new Exception();
                        }

                        string reimportLVFFolder = unitFolder + @"\Extracted MBON\Local Voice Files";

                        Directory.CreateDirectory(reimportLVFFolder);

                        convertNUS3toWav(LocalVoiceFile, reimportLVFFolder);


                        // Global Voice Files

                        string GlobalVoiceFile = nus3AudioVoiceFiles.FirstOrDefault(s => Path.GetFileName(s).Contains("Global Voice Files"));

                        if (!File.Exists(GlobalVoiceFile))
                        {
                            throw new Exception();
                        }

                        string reimportGVFFolder = unitFolder + @"\Extracted MBON\Global Voice Files";

                        Directory.CreateDirectory(reimportGVFFolder);

                        convertNUS3toWav(GlobalVoiceFile, reimportGVFFolder);
                    }
                }
            }
        }
Exemplo n.º 5
0
        public recompilescript()
        {
            List <string> allUnitFolders = Directory.GetDirectories(totalMBONExportFolder, "*", SearchOption.TopDirectoryOnly).ToList();

            string json = File.OpenText(@"D:\Games\PS3\EXVSFB JPN\Pkg research\FB Repacker\Repack\PAC\Input\MBON Reimport Project\AllUnitsPACHashes.json").ReadToEnd();
            List <Unit_Files_List> unit_Files_List = JsonConvert.DeserializeObject <List <Unit_Files_List> >(json);

            foreach (string unitFolder in allUnitFolders)
            {
                string unitFolderName = Path.GetFileName(unitFolder.TrimEnd(Path.DirectorySeparatorChar));

                string extractMBONFolder = unitFolder + @"\Extracted MBON";

                string reimportFolder = XBReimportFolder + @"\" + unitFolderName;
                string reimportConvertedfromMBONFolder = XBReimportFolder + @"\" + unitFolderName + @"\" + "Converted from MBON";
                string reimportFilestoRepack           = XBReimportFolder + @"\" + unitFolderName + @"\" + "Files to Repack";
                string reimportRepackedFiles           = XBReimportFolder + @"\" + unitFolderName + @"\" + "Repacked Files";

                Directory.CreateDirectory(reimportFolder);
                Directory.CreateDirectory(reimportConvertedfromMBONFolder);
                Directory.CreateDirectory(reimportFilestoRepack);
                Directory.CreateDirectory(reimportRepackedFiles);

                Match  unitNoMatch = Regex.Match(unitFolder, @"([0-9]{1,100}). ");
                string unitNoStr   = unitNoMatch.Groups[0].Captures[0].Value;
                uint.TryParse(unitNoStr, out uint unitNo);

                int    unit_ID_str_index = unitFolderName.IndexOf("- ");
                string unit_ID_str       = string.Empty;
                if (unit_ID_str_index >= 0)
                {
                    unit_ID_str = unitFolderName.Substring(unit_ID_str_index + 2, unitFolderName.Length - unit_ID_str_index - 2);
                }

                uint            unit_ID    = Convert.ToUInt32(unit_ID_str);
                Unit_Files_List unit_Files = unit_Files_List.FirstOrDefault(x => x.Unit_ID == unit_ID);

                if (unit_ID < 59900 && unit_Files != null && !unit_Files.MBONAdded && unit_ID == 13921)
                {
                    List <string> script1Folder = Directory.GetDirectories(extractMBONFolder, "*", SearchOption.TopDirectoryOnly).ToList();
                    script1Folder = script1Folder.Where(x => x.Contains("Script 1")).ToList();
                    if (script1Folder.Count() == 0 || script1Folder.Count() > 0x1)
                    {
                        throw new Exception();
                    }

                    List <string> dataFolder = Directory.GetDirectories(extractMBONFolder, "*", SearchOption.TopDirectoryOnly).ToList();
                    dataFolder = dataFolder.Where(x => x.Contains("Data")).ToList();
                    if (dataFolder.Count() == 0 || dataFolder.Count() > 0x1)
                    {
                        throw new Exception();
                    }

                    string script1 = script1Folder[0];

                    string data = dataFolder[0];

                    // -------------------------------------------- Script Refactor --------------------------------------------
                    Properties.Settings.Default.BABBFilePath           = script1 + @"\001-FHM\002.bin";
                    Properties.Settings.Default.outputScriptFolderPath = XBScriptFolder + @"\Refactored Script";

                    Properties.Settings.Default.scriptBigEndian  = false;
                    Properties.Settings.Default.CScriptFilePath  = XBScriptFolder + @"\Script\" + unitFolderName + @".c";
                    Properties.Settings.Default.MinScriptPointer = 100000;

                    compileMSCwithFix(unitFolderName);

                    repackData(
                        reimportRepackedFiles,
                        reimportFilestoRepack,
                        unitFolderName,
                        data,
                        reimportConvertedfromMBONFolder,
                        unit_Files
                        );
                }
            }
        }
Exemplo n.º 6
0
        public void repackData(
            string reimportRepackedFiles,
            string reimportFilestoRepack,
            string unitFolderName,
            string data,
            string reimportConvertedfromMBONFolder,
            Unit_Files_List unit_Files
            )
        {
            RepackPAC repackInstance = new RepackPAC(Properties.Settings.Default.OutputRepackPAC);

            Properties.Settings.Default.OutputRepackPAC = reimportRepackedFiles;

            string data_folder_path = reimportFilestoRepack + @"\Data - " + unit_Files.data_and_script_PAC_hash.ToString("X8");

            Directory.CreateDirectory(data_folder_path);

            /// Repack Data Folder
            DirectoryCopy(repackTemplates + @"\Data", data_folder_path, true);

            string data_001FHM_path = data_folder_path + @"\001-FHM\";

            FileStream fs002     = File.Create(data_001FHM_path + @"\002.bin");
            FileStream vardataFS = File.OpenRead(reimportConvertedfromMBONFolder + @"\Unit Variables\UnitData.bin");

            vardataFS.Seek(0, SeekOrigin.Begin);
            vardataFS.CopyTo(fs002);
            fs002.Close();
            vardataFS.Close();

            FileStream fs003     = File.Create(data_001FHM_path + @"\003.bin");
            FileStream MBON003FS = File.OpenRead(data + @"\001-FHM\003.bin");

            MBON003FS.Seek(0, SeekOrigin.Begin);
            MBON003FS.CopyTo(fs003);
            fs003.Close();
            MBON003FS.Close();

            FileStream fs005     = File.Create(data_001FHM_path + @"\005.bin");
            FileStream MBON005FS = File.OpenRead(data + @"\001-FHM\005.bin");

            MBON005FS.Seek(0, SeekOrigin.Begin);
            MBON005FS.CopyTo(fs005);
            fs005.Close();
            MBON005FS.Close();

            FileStream fs006 = File.Create(data_001FHM_path + @"\006.bin");
            FileStream mscFS = File.OpenRead(XBScriptFolder + @"\Compiled Refactored Script\" + unitFolderName + ".mscsb");

            mscFS.Seek(0, SeekOrigin.Begin);
            mscFS.CopyTo(fs006);
            fs006.Close();
            mscFS.Close();

            FileStream fs008        = File.Create(data_001FHM_path + @"\008.bin");
            FileStream voicelogicFS = File.OpenRead(reimportConvertedfromMBONFolder + @"\Voice Data\006.bin");

            voicelogicFS.Seek(0, SeekOrigin.Begin);
            voicelogicFS.CopyTo(fs008);
            fs008.Close();
            voicelogicFS.Close();

            Properties.Settings.Default.OpenRepackPath = data_folder_path;

            repackInstance.initializePACInfoFileRepack();
            repackInstance.parseInfo();
            repackInstance.repackPAC();


            // Get unit's english name
            UnitIDList unit_Infos = load_UnitID();
            string     unitName   = unit_Infos.Unit_ID.FirstOrDefault(s => s.id == unit_Files.Unit_ID).name_english.Replace(" ", "_");

            unitName = unitName.Replace(".", "_");
            unitName = unitName.Replace("∀", "Turn_A");

            string basePsarcRepackFolder = XBCombinedPsarcFolder + @"\Units\FB_Units\" + unitName;

            string[] allRepackedPACs = Directory.GetFiles(reimportRepackedFiles, "*", SearchOption.TopDirectoryOnly);


            string Data_Path = basePsarcRepackFolder + @"\Data\PATCH" + unit_Files.data_and_script_PAC_hash.ToString("X8") + ".PAC";

            FileStream dataFS = File.OpenRead(allRepackedPACs.FirstOrDefault(s => s.Contains("Data")));

            dataFS.Seek(0, SeekOrigin.Begin);

            FileStream newDataFS = File.Create(Data_Path);

            dataFS.CopyTo(newDataFS);

            dataFS.Close();

            newDataFS.Close();
        }
Exemplo n.º 7
0
        public Parse_Unit_Files_List()
        {
            List <Unit_Files_List> FB_List       = parse_Unit_Files_List_FB(@"D:\Games\PS3\EXVSFB JPN\Pkg research\FB Repacker\Repack\PAC\Input\MBON Reimport Project\list_fb.bin");
            List <Unit_Files_List> MBON_List     = parse_Unit_Files_List_MBON(@"D:\Games\PS3\EXVSFB JPN\Pkg research\FB Repacker\Repack\PAC\Input\MBON Reimport Project\big_endian_list.bin");
            List <Unit_Files_List> Combined_List = new List <Unit_Files_List>();

            UnitIDList    unitIDList   = load_UnitID();
            List <UnitID> unit_ID_List = unitIDList.Unit_ID;

            StringBuilder MBONlog = new StringBuilder();

            MBONlog.AppendLine("MBON PAC Hashes");
            foreach (var MBON in MBON_List)
            {
                if (FB_List.Any(x => x.Unit_ID == MBON.Unit_ID))
                {
                    Unit_Files_List FBUnit = FB_List.FirstOrDefault(x => x.Unit_ID == MBON.Unit_ID);
                    FBUnit.MBONAdded = false;
                    Combined_List.Add(FBUnit);
                }
                else
                {
                    if (unit_ID_List.Any(x => x.id == MBON.Unit_ID))
                    {
                        UnitID unit = unit_ID_List.FirstOrDefault(x => x.id == MBON.Unit_ID);

                        MBONlog.AppendLine(@"//----------------------- " + unit.name_english + @"-----------------------//");

                        // Manually add own made hashes to newly added MBON units
                        Crc32  crc32             = new Crc32();
                        string sound_effect_str  = unit.name_english + "_sound_effects";
                        string sound_effect_hash = crc32.Get(Encoding.UTF8.GetBytes(sound_effect_str.ToLower())).ToString("X8");

                        MBONlog.AppendLine(sound_effect_str + " - 0x" + sound_effect_hash);

                        uint.TryParse(sound_effect_hash, out uint result);
                        MBON.sound_effect_PAC_hash = result;


                        string global_pilot_voices_str  = unit.name_english + "_global_pilot_voices";
                        string global_pilot_voices_hash = crc32.Get(Encoding.UTF8.GetBytes(global_pilot_voices_str.ToLower())).ToString("X8");

                        MBONlog.AppendLine(global_pilot_voices_str + " - 0x" + global_pilot_voices_hash);

                        uint.TryParse(global_pilot_voices_hash, out result);
                        MBON.global_pilot_voices_PAC_hash = result;


                        string sortie_and_awakening_sprites_costume_1_str  = unit.name_english + "_sortie_and_awakening_sprites_costume_1";
                        string sortie_and_awakening_sprites_costume_1_hash = crc32.Get(Encoding.UTF8.GetBytes(sortie_and_awakening_sprites_costume_1_str.ToLower())).ToString("X8");

                        MBONlog.AppendLine(sortie_and_awakening_sprites_costume_1_str + " - 0x" + sortie_and_awakening_sprites_costume_1_hash);

                        uint.TryParse(sortie_and_awakening_sprites_costume_1_hash, out result);
                        MBON.sortie_and_awakening_sprites_PAC_hash = result;


                        string global_pilot_voice_file_list_str  = unit.name_english + "_global_pilot_voice_file_list";
                        string global_pilot_voice_file_list_hash = crc32.Get(Encoding.UTF8.GetBytes(global_pilot_voice_file_list_str.ToLower())).ToString("X8");

                        MBONlog.AppendLine(global_pilot_voice_file_list_str + " - 0x" + global_pilot_voice_file_list_hash);

                        uint.TryParse(global_pilot_voice_file_list_hash, out result);
                        MBON.voice_file_list_PAC_hash = result;


                        string local_pilot_voices_str  = unit.name_english + "_global_pilot_voices";
                        string local_pilot_voices_hash = crc32.Get(Encoding.UTF8.GetBytes(local_pilot_voices_str.ToLower())).ToString("X8");

                        MBONlog.AppendLine(local_pilot_voices_str + " - 0x" + local_pilot_voices_hash);

                        uint.TryParse(local_pilot_voices_hash, out result);
                        MBON.local_pilot_voices_STREAM_PAC_hash = result;

                        MBON.MBONAdded = true;

                        Combined_List.Add(MBON);
                    }
                }
            }

            StreamWriter streamWriter = File.CreateText(@"D:\Games\PS3\EXVSFB JPN\Pkg research\FB Repacker\Repack\PAC\Input\MBON Reimport Project\GeneratedMBONPACHashes.txt");

            streamWriter.Write(MBONlog.ToString());

            streamWriter.Close();

            string       json   = JsonConvert.SerializeObject(Combined_List, Formatting.Indented);
            StreamWriter jsonSW = File.CreateText(@"D:\Games\PS3\EXVSFB JPN\Pkg research\FB Repacker\Repack\PAC\Input\MBON Reimport Project\AllUnitsPACHashes.json");

            jsonSW.Write(json);
            jsonSW.Close();
        }