protected override void InitializeExplicitlyForGame(Engine.BlamEngineTargetHandle gameTarget)
        {
            Data = RuntimeData.ContentHeader.Create(gameTarget.Build);

            Contract.Assert(gameTarget.Build.RevisionIndex.IsNotNone());
            mBuildMajor = (short)gameTarget.Build.Revision.Version;
        }
Exemple #2
0
        BlobObject CreateObjectImpl(Engine.BlamEngineTargetHandle gameTarget,
                                    BlobGroup blobGroup,
                                    int version, int binarySize)
        {
            BlobObject bobject;

            switch (blobGroup.KnownAs)
            {
            case WellKnownBlob.ContentHeader:
                bobject = new ContentHeaderBlob();
                break;

            case WellKnownBlob.GameVariant:
                bobject = new GameEngineVariantBlob();
                break;

            default:
                throw new KSoft.Debug.UnreachableException(blobGroup.GroupTag.Name);
            }

            Util.MarkUnusedVariable(ref binarySize);
            bobject.Initialize(this, gameTarget, blobGroup, version);

            return(bobject);
        }
Exemple #3
0
        public BlobObject CreateObject(Engine.BlamEngineTargetHandle gameTarget,
                                       BlobGroup blobGroup,
                                       int version = TypeExtensions.kNone, int binarySize = TypeExtensions.kNone)
        {
            Contract.Requires(!gameTarget.IsNone);
            Contract.Requires(blobGroup != null);
            Contract.Requires(version.IsNoneOrPositive());

            return(CreateObjectImpl(gameTarget, blobGroup, version, binarySize));
        }
Exemple #4
0
        public override int CalculateFixedBinarySize(Engine.BlamEngineTargetHandle gameTarget)
        {
            var game_build = gameTarget.Build;

            if (game_build.IsWithinSameBranch(Engine.EngineRegistry.EngineBranchHaloReach))
            {
                return(kSizeOfHaloReach);
            }

            if (game_build.IsWithinSameBranch(Engine.EngineRegistry.EngineBranchHalo4))
            {
                return(kSizeOfHalo4);
            }

            throw new KSoft.Debug.UnreachableException(game_build.ToDisplayString());
        }
Exemple #5
0
        public static long GetBlfFileLength(Engine.BlamEngineTargetHandle gameTarget)
        {
            var game_build = gameTarget.Build;

            if (game_build.IsWithinSameBranch(Engine.EngineRegistry.EngineBranchHaloReach))
            {
                return(kSizeOfBitStreamHaloReach + 0x329);
            }

            if (game_build.IsWithinSameBranch(Engine.EngineRegistry.EngineBranchHalo4))
            {
                return(kSizeOfBitStreamHalo4 + 0x329);
            }

            throw new KSoft.Debug.UnreachableException(game_build.ToDisplayString());
        }
Exemple #6
0
        internal void Initialize(BlobSystem system, Engine.BlamEngineTargetHandle gameTarget,
                                 BlobGroup blobGroup, int version)
        {
            SystemGroup = blobGroup;
            GameTarget  = gameTarget;
            Version     = version;

            BlobGroupVersionAndBuildInfo info_for_version;

            if (SystemGroup.VersionAndBuildMap.TryGetValue(Version, out info_for_version))
            {
                SystemGroupVersionInfo = info_for_version;
            }
            else
            {
                throw new KSoft.Debug.UnreachableException();
            }

            InitializeExplicitlyForGame(gameTarget);
        }
Exemple #7
0
        public BlobObject CreateObject(Engine.BlamEngineTargetHandle gameTarget,
                                       WellKnownBlob knownBlob)
        {
            if (gameTarget.IsNone)
            {
                throw new ArgumentNoneException(nameof(gameTarget));
            }
            if (!gameTarget.Build.IsFullyFormed)
            {
                throw new ArgumentException("Target build needs to be fully formed", nameof(gameTarget));
            }
            if (knownBlob == WellKnownBlob.NotWellKnown)
            {
                throw new ArgumentException(nameof(WellKnownBlob.NotWellKnown), nameof(knownBlob));
            }

            BlobGroup known_blob_group;

            if (!TryGetBlobGroup(knownBlob, out known_blob_group))
            {
                throw new InvalidOperationException(string.Format(
                                                        "No blob groups marked to be known as {0} under {1}",
                                                        knownBlob,
                                                        this.Prototype.Engine));
            }

            BlobGroupVersionAndBuildInfo known_blob_group_version_info =
                known_blob_group.FindMostRelaventVersionInfo(gameTarget.Build);

            if (known_blob_group_version_info == null)
            {
                throw new InvalidOperationException(string.Format(
                                                        "No {0} blob group versions resolved possibly for {1} under {2}",
                                                        knownBlob,
                                                        gameTarget.Build,
                                                        this.Prototype.Engine));
            }

            return(CreateObject(gameTarget, known_blob_group, known_blob_group_version_info.MajorVersion));
        }
Exemple #8
0
 protected virtual void InitializeExplicitlyForGame(Engine.BlamEngineTargetHandle gameTarget)
 {
 }
Exemple #9
0
 public abstract int CalculateFixedBinarySize(Engine.BlamEngineTargetHandle gameTarget);
Exemple #10
0
        public ICollection <BlobObject> StreamObjects <TDoc, TCursor>(IO.TagElementStream <TDoc, TCursor, string> s,
                                                                      ICollection <BlobObject> results, Engine.BlamEngineTargetHandle gameTarget)
            where TDoc : class
            where TCursor : class
        {
            Contract.Requires <ArgumentNullException>(!gameTarget.IsNone);

            if (s.IsReading)
            {
                results = new List <BlobObject>();
            }

            var ctxt = new SerializeObjectContext(this, gameTarget);

            s.StreamElements("BlobObject", results, ctxt, SerializeObject,
                             _ctxt => null);

            return(results);
        }
Exemple #11
0
 public SerializeObjectContext(BlobSystem system, Engine.BlamEngineTargetHandle gameTarget)
 {
     System     = system;
     GameTarget = gameTarget;
 }
 public override int CalculateFixedBinarySize(Engine.BlamEngineTargetHandle gameTarget)
 {
     return(kSizeOf);
 }
Exemple #13
0
 protected override void InitializeExplicitlyForGame(Engine.BlamEngineTargetHandle gameTarget)
 {
     Data = new RuntimeData.Variants.GameEngineVariant(gameTarget.Build);
 }