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); }
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()); }
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); }
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); } }
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); }
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"); }