bool ReadInternal()
        {
            bool result = true;

            if (ProgressOutput != null)
            {
                ProgressOutput.WriteLine("Trying to read source listing {0}...", mSourceFile);
            }

            if (!File.Exists(mSourceFile))
            {
                result = false;
            }
            else
            {
                mPkgFile = new CaPackageFile();

                using (var xml = new IO.XmlElementStream(mSourceFile, FileAccess.Read, this))
                {
                    xml.InitializeAtRootElement();
                    PkgDefinition.Serialize(xml);
                }
            }

            if (result == false)
            {
                if (ProgressOutput != null)
                {
                    ProgressOutput.WriteLine("\tFailed!");
                }
            }

            return(result);
        }
Exemple #2
0
        void Encode()
        {
            var metadata = KBlam.RuntimeData.ContentMiniMetadata.Create(mGameBranchHandle);

            string xml_filename = Path.Combine(mOutputPath, mMiniMetadata) + kNameExtension;

            if (!File.Exists(xml_filename))
            {
                Console.WriteLine("Error: metadata xml does not exist in source directory {0}", xml_filename);
                return;
            }

            using (var xml = new IO.XmlElementStream(xml_filename))
            {
                xml.InitializeAtRootElement();
                xml.StreamMode = FileAccess.Read;

                metadata.Serialize(xml);
            }

            if (metadata.BuildHandle != mGameBranchHandle)
            {
                Console.WriteLine("Error: {0}'s game parameter '{1}' differs from what you gave me. Weak sauce",
                                  xml_filename, metadata.BuildHandle);
                return;
            }

            Console.WriteLine("New mini metadata:");
            Console.WriteLine(metadata.Encode());
        }
Exemple #3
0
        bool ReadInternal()
        {
            bool result = true;

            if (ProgressOutput != null)
            {
                ProgressOutput.WriteLine("Trying to read source listing {0}...", mSourceFile);
            }

            if (!File.Exists(mSourceFile))
            {
                result = false;
            }
            else
            {
                mEraFile = new EraFile();
                mEraFile.BuildModeDefaultTimestamp = EraFile.GetMostRecentTimeStamp(mSourceFile);

                using (var xml = new IO.XmlElementStream(mSourceFile, FA.Read, this))
                {
                    xml.InitializeAtRootElement();
                    result &= mEraFile.ReadDefinition(xml);
                }
            }

            if (result == false)
            {
                if (ProgressOutput != null)
                {
                    ProgressOutput.WriteLine("\tFailed!");
                }
            }

            return(result);
        }
 static void SetupStream(IO.XmlElementStream s, FA mode, XML.BXmlSerializerInterface xs)
 {
     s.IgnoreCaseOnEnums        = true;
     s.ExceptionOnEnumParseFail = true;
     s.StreamMode = mode;
     s.InitializeAtRootElement();
     s.SetSerializerInterface(xs);
 }
Exemple #5
0
        public void HaloWars_AppLoadTest()
        {
            var    hw          = PhxEngine.CreateForHaloWars(kGameRoot, kUpdateRoot);
            string output_path = System.IO.Path.Combine(TestContext.TestResultsDirectory, "Serina.xml");

            Console.WriteLine("Saving to: {0}", output_path);
            using (var s = new IO.XmlElementStream(output_path, FA.Read))
            {
                s.InitializeAtRootElement();
                s.StreamMode = FA.Read;

                hw.Database.Serialize(s);
            }
        }
Exemple #6
0
        public void HaloWars_WwiseTest()
        {
            const string k_sound_table_xml = kGameRoot + @"data\soundtable.xml";
            const string k_sounds_path     = @"D:\HW\test\";
            const string k_sounds_pck      = @"C:\Mount\A\Xbox\Xbox360\Games\Halo Wars\sound\wwise_material\GeneratedSoundBanks\xbox360\sounds.pck";
//			const string k_output_file = kTestResultsPath + @"sounds_pck.xml";

            var sound_table = new Phx.BSoundTable();

            using (var s = new IO.XmlElementStream(k_sound_table_xml, FA.Read))
            {
                s.StreamMode = FA.Read;
                s.InitializeAtRootElement();
                sound_table.Serialize(s);
            }

            var pck_settings = new Wwise.FilePackage.AkFilePackageSettings()
            {
                Platform        = Shell.Platform.Xbox360,
                SdkVersion      = Wwise.AkVersion.k2009.Id,
                UseAsciiStrings = false,
            };
            var pck = new Wwise.FilePackage.AkFilePackage(pck_settings);

            using (var fs = System.IO.File.OpenRead(k_sounds_pck))
                using (var s = new IO.EndianStream(fs, Shell.EndianFormat.Big))
                {
                    s.StreamMode = FA.Read;
                    pck.Serialize(s);
                    pck.SerializeSoundBanks(s);
                }

            var extractor = new Wwise.FilePackage.AkFilePackageExtractor(k_sounds_pck, pck, sound_table.EventsMap);

            extractor.PrepareForExtraction();

#if false
            using (var s = IO.XmlElementStream.CreateForWrite("soundsPack"))
            {
                pck.Serialize(s);

                s.Document.Save(k_output_file);
            }
#endif

            using (var fs = System.IO.File.OpenRead(k_sounds_pck))
                using (var s = new IO.EndianStream(fs, Shell.EndianFormat.Big))
                    using (var towav = new System.IO.StreamWriter(k_sounds_path + "towav.bat"))
                        extractor.ExtractSounds(k_sounds_path, towav, s.Reader);
        }
        bool ReadInternal()
        {
            bool result = true;

            if (ProgressOutput != null)
            {
                ProgressOutput.WriteLine("Trying to read source listing {0}...", mSourceFile);
            }

            if (!File.Exists(mSourceFile))
            {
                result = false;
            }
            else
            {
                using (var xml = new IO.XmlElementStream(mSourceFile, FA.Read, this))
                {
                    xml.InitializeAtRootElement();
                    EcfDefinition.Serialize(xml);
                }

                EcfDefinition.CullChunksPossiblyWithoutFileData((chunkIndex, chunk) =>
                {
                    if (VerboseOutput != null)
                    {
                        VerboseOutput.WriteLine("\t\tCulling chunk #{0} since it has no associated file data",
                                                chunkIndex);
                    }
                });
            }

            if (result == false)
            {
                if (ProgressOutput != null)
                {
                    ProgressOutput.WriteLine("\tFailed!");
                }
            }

            return(result);
        }
        bool EncodeLoadVariant(string xmlFilename, out KBlam.RuntimeData.Variants.GameEngineVariant ev)
        {
            ev = new KBlam.RuntimeData.Variants.GameEngineVariant(mGameBuildAndTarget.Build);
            bool result = true;

            using (var xml = new IO.XmlElementStream(xmlFilename))
            {
                xml.InitializeAtRootElement();
                xml.StreamMode = FileAccess.Read;

                ev.Serialize(xml);
            }

            if (ev.GameBuild != mGameBuildAndTarget.Build)
            {
                Console.WriteLine("Error: {0}'s game parameter '{1}' differs from what you gave me. Weak sauce",
                                  xmlFilename, ev.GameBuild);
                result = false;
            }

            return(result);
        }
        bool EncodeVariantPreprocess(EncodeSwitches switches,
                                     KBlam.RuntimeData.Variants.GameEngineVariant gev, string filePath)
        {
            const string k_teams_xml_filename = @"Games\Halo4\Definitions\VariantGameTeams.xml";

            var mv = gev.TryGetMegaloVariant();

            #region CreateVariantFile
            if ((switches & EncodeSwitches.CreateVariantFile) != 0)
            {
                string dir = Path.GetDirectoryName(filePath);
                if (!Directory.Exists(dir))
                {
                    Console.WriteLine("Error: The directory for the game file doesn't exist or is inaccessible: {0}",
                                      dir);
                    return(false);
                }

                using (var fs = File.Create(filePath))
                {
                    fs.SetLength(KBlam.Blob.GameEngineVariantBlob.GetBlfFileLength(mGameBuildAndTarget));
                }
            }
            else if (!File.Exists(filePath))
            {
                Console.WriteLine("Error: Output game file does not exist");
                return(false);
            }
            #endregion
            #region ClearWeaponTuning
            if ((switches & EncodeSwitches.ClearWeaponTuning) != 0 && mv != null)
            {
                mv.ClearWeaponTunings();
            }
            #endregion
            #region AddAllTeams
            if ((switches & EncodeSwitches.AddAllTeams) != 0 && mGameBuildAndTarget.Build.IsWithinSameBranch(KBlam.Engine.EngineRegistry.EngineBranchHalo4))
            {
                var bv = gev.Variant.BaseVariant;

                foreach (var team in bv.TeamOptions.Teams)
                {
                    team.NameString.Clear();
                }

                if (File.Exists(k_teams_xml_filename))
                {
                    using (var xml = new IO.XmlElementStream(k_teams_xml_filename, System.IO.FileAccess.Read))
                    {
                        xml.InitializeAtRootElement();
                        xml.StreamMode = System.IO.FileAccess.Read;

                        var team_xml_game = KBlam.Engine.EngineBuildHandle.None;
                        KBlam.Engine.EngineBuildHandle.Serialize(xml, ref team_xml_game);
                        if (team_xml_game.IsWithinSameBranch(KBlam.Engine.EngineRegistry.EngineBranchHalo4))
                        {
                            bv.TeamOptions.SerializeTeams(xml);
                        }
                        else
                        {
                            Console.WriteLine("Warning: Teams xml is not for this game, not modifying variant's team data");
                        }
                    }
                }
                else
                {
                    Console.WriteLine("Warning: Teams xml not found, not modifying variant's team data");
                }
            }
            #endregion

            if (mv == null)
            {
                return(true);
            }

            #region sanity check category name
#if false
            string megalo_category_name;
            if (mv != null && mCornbread == false && mCategoryIndexToName.TryGetValue(mv.EngineCategory, out megalo_category_name))
            {
                if (mv.CategoryString.Count == 0)
                {
                    mv.CategoryString.Add(megalo_category_name);
                }
                else if (mv.CategoryString[0].English != megalo_category_name)
                {
                    mv.CategoryString[0].Set(megalo_category_name);
                }
            }
            else if (mv != null && mCornbread == false)
            {
                Console.WriteLine("Warning: Invalid Megalo category data {0}, defaulting",
                                  mv.EngineCategory);

                mv.BaseVariant.Header.EngineCategoryIndex = mv.EngineCategory = kCommunityCategoryIndex;
                if (mv.CategoryString.Count == 0)
                {
                    mv.CategoryString.Add(kCommunityCategory);
                }
                else
                {
                    mv.CategoryString[0].Set(kCommunityCategory);
                }
            }
#endif
            #endregion
            #region watermark
#if false
            if (mv != null)
            {
                var mv_h4 = mv as KBlam.Games.Halo4.RuntimeData.Variants.GameEngineMegaloVariantHalo4;

                if (mv_h4 != null)
                {
                    const string k_water_mark = "Halomods in your pods!";

                    if (mv_h4.IntroDescriptionString.Count == 0)
                    {
                        mv_h4.IntroDescriptionString.Add(k_water_mark);
                    }
                    else
                    {
                        mv_h4.IntroDescriptionString[0].Set(k_water_mark);
                    }
                }
            }
#endif
            #endregion

            return(true);
        }
Exemple #10
0
        void Extract(string banksPath, string outputPath)
        {
            if (!System.IO.File.Exists(kSoundTablePath))
            {
                Console.WriteLine("Error: Couldn't load '{0}'. I need this file to perform extraction",
                                  kSoundTablePath);
                return;
            }

            ExtractSwitches switches;

            ExtractParseSwitches(mSwitches, out switches);

            var stopwatch = mTimeOperation ? System.Diagnostics.Stopwatch.StartNew() : null;

            #region Read game's soundtable.xml
            Console.WriteLine("\t" + "Initializing...");
            var sound_table = new BPhoenix.Phx.BSoundTable();
            using (var s = new IO.XmlElementStream(kSoundTablePath, FileAccess.Read))
            {
                s.StreamMode = FileAccess.Read;
                s.InitializeAtRootElement();
                sound_table.Serialize(s);
            }

            if (mTimeOperation)
            {
                stopwatch.Stop();
                Console.WriteLine("\t\tPerf: {0}", stopwatch.Elapsed);
                stopwatch.Restart();
            }
            #endregion

            #region setup pck_settings
            var pck_settings = new KSoft.Wwise.FilePackage.AkFilePackageSettings()
            {
                Platform        = Shell.Platform.Xbox360,
                SdkVersion      = KSoft.Wwise.AkVersion.k2009.Id,
                UseAsciiStrings = false,
            };
            var pck = new KSoft.Wwise.FilePackage.AkFilePackage(pck_settings);
            #endregion

            #region Process sounds.pck
            Console.WriteLine("\t" + "Processing pck...");
            string sounds_pck_filename = Path.Combine(banksPath, "sounds.pck");

            using (var fs = File.OpenRead(sounds_pck_filename))
                using (var s = new IO.EndianStream(fs, Shell.EndianFormat.Big))
                {
                    s.StreamMode = FileAccess.Read;
                    pck.Serialize(s);
                    pck.SerializeSoundBanks(s);
                }

            if (mTimeOperation)
            {
                stopwatch.Stop();
                Console.WriteLine("\t\tPerf: {0}", stopwatch.Elapsed);
                stopwatch.Restart();
            }
            #endregion

            var pck_extractor = new Wwise.FilePackage.AkFilePackageExtractor(sounds_pck_filename, pck, sound_table.EventsMap);

            Console.WriteLine("\t" + "Postprocessing bank data...");
            pck_extractor.PrepareForExtraction();
            if (mTimeOperation)
            {
                stopwatch.Stop();
                Console.WriteLine("\t\tPerf: {0}", stopwatch.Elapsed);
                stopwatch.Restart();
            }

            #region DumpSoundPackToXml
            if ((switches & ExtractSwitches.DumpSoundPackToXml) != 0)
            {
                using (var s = IO.XmlElementStream.CreateForWrite("soundsPack"))
                {
                    Console.WriteLine("\t" + "Taking a dump...");
                    Serialize(s, pck_extractor);
                    Console.WriteLine("\t\t" + "flushing...");
                    s.Document.Save(Path.Combine(mOutputPath, kSoundsPackListingName));

                    if (mTimeOperation)
                    {
                        stopwatch.Stop();
                        Console.WriteLine("\t\tPerf: {0}", stopwatch.Elapsed);
                        stopwatch.Restart();
                    }
                }
            }
            #endregion

            #region Extract
            Console.WriteLine("\t" + "Extracting...(this normally takes a while)");

            using (var fs = File.OpenRead(sounds_pck_filename))
                using (var s = new IO.EndianStream(fs, Shell.EndianFormat.Big))
                    using (var towav = new StreamWriter(Path.Combine(mOutputPath, "HaloWars_towav.bat")))
                        pck_extractor.ExtractSounds(mOutputPath, towav, s.Reader, (switches & ExtractSwitches.OverwriteExisting) != 0);
            #endregion

            if (mTimeOperation)
            {
                stopwatch.Stop();
                Console.WriteLine("Perf: {0}", stopwatch.Elapsed);
            }

            Console.WriteLine("Done");
        }