void DecodeSaveVariant(KBlam.RuntimeData.Variants.GameEngineVariant gev, string xmlFilename,
                               MegaloModel.MegaloScriptModelTagElementStreamFlags modelStreamFlags, bool ignoreWritePredicates)
        {
            var megalo_variant = gev.TryGetMegaloVariant();

            if (megalo_variant != null)
            {
                megalo_variant.TagElementStreamSerializeFlags =
                    KBlam.RuntimeData.Variants.GameEngineMegaloVariantTagElementStreamFlags.UseStringTableNames |
                    KBlam.RuntimeData.Variants.GameEngineMegaloVariantTagElementStreamFlags.UseUserOptionNames;
                megalo_variant.EngineDefinition.TagElementStreamSerializeFlags =
                    modelStreamFlags;
            }

            using (var xml = IO.XmlElementStream.CreateForWrite("GameVariant"))
            {
                xml.StreamMode            = FileAccess.Write;
                xml.IgnoreWritePredicates = ignoreWritePredicates;

                gev.Serialize(xml);

                using (var sw = new System.IO.StreamWriter(xmlFilename, false, System.Text.Encoding.UTF8))
                    xml.Document.Save(sw);
            }
        }
        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);
        }