Esempio n. 1
0
        /// <summary>
        /// Load the STFS Container's Header
        /// </summary>
        public void LoadHeader()
        {
            _stfsHeader = new xHeader();
            _stfsStream.SeekTo(0x00);
            _stfsHeader.Magic       = _stfsStream.ReadAscii(0x04);
            _stfsHeader.PackageType = GetPackageType(_stfsHeader.Magic);

            _stfsStream.SeekTo(0x04);
            switch (_stfsHeader.PackageType)
            {
            case PackageType.CON:
                _stfsHeader.PublicKeyCertificateSize          = _stfsStream.ReadBlock(0x02);
                _stfsHeader.CertificateOwnerConsoleID         = _stfsStream.ReadBlock(0x05);
                _stfsHeader.CertificateOwnerConsolePartNumber = _stfsStream.ReadAscii(0x14).Trim();
                _stfsHeader.CertiicateOwnerConsoleType        = (CertOwnerConsoleType)_stfsStream.ReadByte();
                _stfsHeader.CertificateDateOfGeneration       = _stfsStream.ReadAscii(0x08);
                _stfsHeader.PublicExponent       = _stfsStream.ReadBlock(0x04);
                _stfsHeader.PublicModulus        = _stfsStream.ReadBlock(0x80);
                _stfsHeader.CertificateSignature = _stfsStream.ReadBlock(0x100);
                _stfsHeader.Signature            = _stfsStream.ReadBlock(0x80);
                break;

            case PackageType.PIRS:
            case PackageType.LIVE:
                _stfsHeader.PackageSignature = _stfsStream.ReadBlock(0x100);
                break;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Load the chunks in the BLF Table
        /// </summary>
        public void LoadChunkTable()
        {
            _blfChunks = new List <BLFChunk>();
            _blfStream.SeekTo(0x00);

            bool continueLoading = true;

            while (continueLoading)
            {
                if (_blfStream.Position >= _blfStream.Length)
                {
                    continueLoading = false;
                }
                else
                {
                    BLFChunk chunk = new BLFChunk();

                    chunk.ChunkMagic = _blfStream.ReadAscii(0x04);
                    _blfStream.SeekTo(_blfStream.Position - 0x04);
                    chunk.ChunkMagicIdent = _blfStream.ReadInt32();

                    chunk.ChunkLength = _blfStream.ReadInt32();

                    chunk.ChunkData = _blfStream.ReadBlock(chunk.ChunkLength - 0x08);

                    _blfChunks.Add(chunk);
                }
            }
        }
Esempio n. 3
0
        private bool isValidBLF()
        {
            _blfStream.SeekTo(0x00);
            string magic = _blfStream.ReadAscii(0x04);

            if (magic == "_blf")
            {
                return(true);
            }
            return(false);
        }
Esempio n. 4
0
        /// <summary>
        /// Load the Screenshots Header data
        /// </summary>
        public void LoadHeader()
        {
            _shotHeader = new Header();

            _shotStream.SeekTo(0x48);
            _shotHeader.ScreenshotName = _shotStream.ReadUTF16();

            _shotStream.SeekTo(0x67);
            _shotHeader.ScreenshotDescription = _shotStream.ReadUTF16();

            _shotStream.SeekTo(0xE8);
            _shotHeader.ScreenshotAuthor = _shotStream.ReadAscii();
        }
Esempio n. 5
0
        private void ProcessMapHeader()
        {
            using (IReader reader = new EndianStream(new MemoryStream(MapHeader), Endian.LittleEndian))
            {
                reader.SeekTo(MapTypeOffset);
                MapType = (CacheFileType)reader.ReadInt32();

                reader.SeekTo(MapNameOffset);
                MapName = reader.ReadAscii();

                reader.SeekTo(ScenarioNameOffset);
                ScenarioName = reader.ReadAscii();
            }
        }
Esempio n. 6
0
        public bool IsValidGPD()
        {
            _gpdStream.SeekTo(0x00);
            string magic = _gpdStream.ReadAscii(0x04);

            _gpdStream.SeekTo(0x344A);
            string gameName = _gpdStream.ReadAscii(0x0D);

            if (magic != "XDBF" && gameName != "Halo 3: ODST")
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Load the usermap's Header
        /// </summary>
        public void LoadHeader()
        {
            _forgeHeader = new Header();

            _forgeStream.SeekTo(0x42);
            _forgeHeader.CreationDate = _forgeStream.ReadInt32();
            _forgeStream.SeekTo(0x48);
            _forgeHeader.CreationVarientName = _forgeStream.ReadUTF16(0x1F);
            _forgeStream.SeekTo(0x68);
            _forgeHeader.CreationVarientDescription = _forgeStream.ReadAscii(0x80);
            _forgeStream.SeekTo(0xE8);
            _forgeHeader.CreationVarientAuthor = _forgeStream.ReadAscii(0x13);

            _forgeStream.SeekTo(0x114);
            _forgeHeader.ModificationDate = _forgeStream.ReadInt32();
            _forgeStream.SeekTo(0x150);
            _forgeHeader.VarientName = _forgeStream.ReadUTF16(0x1F);
            _forgeStream.SeekTo(0x170);
            _forgeHeader.VarientDescription = _forgeStream.ReadAscii(0x80);
            _forgeStream.SeekTo(0x1F0);
            _forgeHeader.VarientAuthor = _forgeStream.ReadAscii(0x13);

            _forgeStream.SeekTo(0x228);
            _forgeHeader.MapID = _forgeStream.ReadInt32();

            _forgeStream.SeekTo(0x246);
            _forgeHeader.SpawnedObjectCount = _forgeStream.ReadInt16();

            _forgeStream.SeekTo(0x24C);
            _forgeHeader.WorldBoundsXMin = _forgeStream.ReadFloat();
            _forgeHeader.WorldBoundsXMax = _forgeStream.ReadFloat();
            _forgeHeader.WorldBoundsYMin = _forgeStream.ReadFloat();
            _forgeHeader.WorldBoundsYMax = _forgeStream.ReadFloat();
            _forgeHeader.WorldBoundsZMin = _forgeStream.ReadFloat();
            _forgeHeader.WorldBoundsZMax = _forgeStream.ReadFloat();

            _forgeStream.SeekTo(0x268);
            _forgeHeader.MaximiumBudget = _forgeStream.ReadFloat();
            _forgeHeader.CurrentBudget  = _forgeStream.ReadFloat();
        }
        // TODO: Find a good place to store this
        public void OpenUserFile(string filePath)
        {
            var stream = new EndianStream(new FileStream(filePath, FileMode.Open), Endian.BigEndian);

            stream.SeekTo(0);
            switch (stream.ReadAscii(0x04))
            {
            case "CON ":
            case "PIRS":
            case "LIVE":
                break;

            case "_blf":
                break;

            default:
                throw new InvalidOperationException("The selected file is not a supported file type. Only try to open an Xbox 360 Container file that contains a forge varient (sandbox.map) or the pure sandbox.map extracted from a Xbox 360 Container File.");
            }
        }
Esempio n. 9
0
        public void LoadHeader()
        {
            _filmHeader = new Header();

            _filmStream.SeekTo(0x48);
            _filmHeader.FilmName = _filmStream.ReadUTF16(0x1F);
            _filmStream.SeekTo(0x67);
            _filmHeader.FilmDescription = _filmStream.ReadAscii(0x80);
            _filmStream.SeekTo(0xE7);
            _filmHeader.FilmAuthor = _filmStream.ReadAscii(0x80);

            _filmStream.SeekTo(0x15);
            _filmHeader.FilmAuthor = _filmStream.ReadAscii(0x2E);
            _filmStream.SeekTo(0x198);
            _filmHeader.FilmAuthor = _filmStream.ReadAscii(0x23);

            _filmStream.SeekTo(0x220);
            _filmHeader.FilmAuthor = _filmStream.ReadAscii(0x26);
            _filmStream.SeekTo(0x2C4);
            _filmHeader.FilmAuthor = _filmStream.ReadAscii(0x2A);
        }
Esempio n. 10
0
        /// <summary>
        /// Load the Film Header
        /// </summary>
        public void LoadHeader()
        {
            _filmHeader = new Header();

            #region Creation and Modification
            // Read Creation Date
            _filmStream.SeekTo(0x114);
            _filmHeader.CreationDate = _filmStream.ReadInt32();

            // Read Creation Author
            _filmStream.SeekTo(0xE8);
            _filmHeader.CreationAuthor = _filmStream.ReadAscii();
            #endregion
            #region Film Info
            // Read Film Name
            _filmStream.SeekTo(0x48);
            _filmHeader.FilmName = _filmStream.ReadUTF16();

            // Read Film Description
            _filmStream.SeekTo(0x67);
            _filmHeader.FilmDescription = _filmStream.ReadUTF16();

            // Read Film Engine Build String 1
            _filmStream.SeekTo(0x15C);
            _filmHeader.EngineBuildString1 = _filmStream.ReadAscii();

            // Read Film Engine Build String 2
            _filmStream.SeekTo(0x198);
            _filmHeader.EngineBuildString2 = _filmStream.ReadAscii();

            // Read Film InfoString
            _filmStream.SeekTo(0x220);
            _filmHeader.InfoString = _filmStream.ReadAscii();
            #endregion
            #region GametypeUsermapInfo
            // Read Gametype Name
            _filmStream.SeekTo(0x4DC);
            _filmHeader.GametypeName = _filmStream.ReadUTF16();

            // Read Gametype Description
            _filmStream.SeekTo(0x4FB);
            _filmHeader.GametypeDescription = _filmStream.ReadUTF16();

            // Read Gametype Author
            _filmStream.SeekTo(0x57B);
            _filmHeader.GametypeAuthor = _filmStream.ReadUTF16();

            // Read Usermap Name
            _filmStream.SeekTo(0x738);
            _filmHeader.GametypeAuthor = _filmStream.ReadUTF16();

            // Read Usermap Description
            _filmStream.SeekTo(0x757);
            _filmHeader.GametypeAuthor = _filmStream.ReadUTF16();

            // Read Usermap Author
            _filmStream.SeekTo(0x7D7);
            _filmHeader.GametypeAuthor = _filmStream.ReadUTF16();
            #endregion
            #region RawMapData
            // Read Map Name
            _filmStream.SeekTo(0x24C);
            _filmHeader.MapName = _filmStream.ReadAscii();
            #endregion
            #region Mathcmaking Playlist Info
            // Read Matchmaking Playlist Name
            _filmStream.SeekTo(0x472);
            _filmHeader.MatchmakingPlaylistName = _filmStream.ReadUTF16();
            #endregion
        }
Esempio n. 11
0
        /// <summary>
        /// Load the Film Header
        /// </summary>
        public void LoadHeader()
        {
            _filmHeader = new Header();

            #region Creation and Modification
            // Read Creation Date
            _filmStream.SeekTo(0x7C);
            _filmHeader.CreationDate = _filmStream.ReadInt32();

            // Read Creation Author
            _filmStream.SeekTo(0x88);
            _filmHeader.CreationAuthor = _filmStream.ReadAscii();

            // Read Modification Date
            _filmStream.SeekTo(0xA0);
            _filmHeader.ModifiedDate = _filmStream.ReadInt32();

            // Read Modification Author
            _filmStream.SeekTo(0xAC);
            _filmHeader.ModifiedAuthor = _filmStream.ReadAscii();
            #endregion
            #region Film Info
            // Read Film Name
            _filmStream.SeekTo(0xC0);
            _filmHeader.FilmName = _filmStream.ReadUTF16();

            // Read Film Description
            _filmStream.SeekTo(0x1C0);
            _filmHeader.FilmDescription = _filmStream.ReadUTF16();

            // Read Info String
            _filmStream.SeekTo(0x3D8);
            _filmHeader.InfoString = _filmStream.ReadAscii();
            #endregion
            #region Gametype Info
            // Read Gametype Name
            _filmStream.SeekTo(0x998);
            _filmHeader.GametypeName = _filmStream.ReadUTF16();

            // Read Gametype Description
            _filmStream.SeekTo(0xA98);
            _filmHeader.GametypeDescription = _filmStream.ReadUTF16();
            #endregion
            #region RawMapData
            // Read Map Name
            _filmStream.SeekTo(0x1011C);
            _filmHeader.MapName = _filmStream.ReadAscii();

            // Read Map Rally Point
            _filmStream.SeekTo(0x10220);
            _filmHeader.RallyPoint = _filmStream.ReadAscii();
            #endregion
            #region MatchmakingPlaylistInfo
            // Read Playlist Name
            _filmStream.SeekTo(0x10342);
            _filmHeader.MatchmakingPlaylistName = _filmStream.ReadUTF16();

            // Read Usermap Name
            _filmStream.SeekTo(0x10460);
            _filmHeader.UsermapName = _filmStream.ReadUTF16();

            // Read Usermap Description
            _filmStream.SeekTo(0x10560);
            _filmHeader.UsermapDescription = _filmStream.ReadUTF16();
            #endregion
        }