示例#1
0
        private void ReadSetting(XDBFEntry entry, BigEndianStream stream)
        {
            const long TypeOffset = 0x8;
            const long SettingHeaderSize = 0x10;

            stream.Position = entry.FileOffset;
            uint id = stream.ReadUInt32();
            stream.Position = entry.FileOffset + TypeOffset;
            GPDSettingType type = (GPDSettingType)stream.ReadByte();
            stream.Position = entry.FileOffset + SettingHeaderSize;

            GPDSetting setting;
            switch (type)
            {
                case GPDSettingType.Binary:
                    setting = new GPDBinarySetting(stream, id, type);
                    break;

                default:
                    setting = new GPDSetting(stream, id, type);
                    break;
            }
            _settings[id] = setting;
        }
示例#2
0
        private void ReadSettings()
        {
            if (TitleName != "Halo: Reach")
                throw new ArgumentException("Not a valid Reach GPD");

            // Title-specific data 1
            _titleSpecific1 = FindSetting(TitleSpecific1ID) as GPDBinarySetting;
            if (_titleSpecific1 == null || _titleSpecific1.Size != TitleSpecific1Size)
                throw new ArgumentException("Not a valid Reach GPD - missing or invalid TitleSpecific1");

            // Title-specific data 2
            _titleSpecific2 = FindSetting(TitleSpecific2ID) as GPDBinarySetting;
            if (_titleSpecific2 == null || _titleSpecific2.Size != TitleSpecific2Size)
                throw new ArgumentException("Not a valid Reach GPD - missing or invalid TitleSpecific2");

            // Title-specific data 3
            _titleSpecific3 = FindSetting(TitleSpecific3ID) as GPDBinarySetting;
            if (_titleSpecific3 == null || _titleSpecific3.Size != TitleSpecific3Size)
                throw new ArgumentException("Not a valid Reach GPD - missing or invalid TitleSpecific3");

            ReadHash();
        }