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; }
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(); }