Example #1
0
        void EncodeParseSwitches(string switches,
                                 out EncodeSwitches flags)
        {
            flags = 0;
            if (switches == null)
            {
                switches = "";
            }
            const string k_switches_ctxt = "GameVariant:Encode";

            if (SwitchIsOn(switches, 0, k_switches_ctxt + ":Megalo", "Clear TU weapon tuning data"))
            {
                flags |= EncodeSwitches.ClearWeaponTuning;
            }
            if (SwitchIsOn(switches, 1, k_switches_ctxt, "Create output game file"))
            {
                flags      |= EncodeSwitches.CreateVariantFile;
                mFileOffset = 0;
            }
            if (SwitchIsOn(switches, 2, k_switches_ctxt, "Add all 8 teams"))
            {
                flags |= EncodeSwitches.AddAllTeams;
            }
        }
Example #2
0
        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);
        }