Common::Array<AgeData> Database::loadAges(Common::ReadStreamEndian &s) { Common::Array<AgeData> ages; for (uint i = 0; i < 10; i++) { AgeData age; if (_vm->getPlatform() == Common::kPlatformPS2) { // Really 64-bit values age.id = s.readUint32LE(); s.readUint32LE(); age.disk = s.readUint32LE(); s.readUint32LE(); age.roomCount = s.readUint32LE(); s.readUint32LE(); age.roomsOffset = s.readUint32LE() - _executableVersion->baseOffset; s.readUint32LE(); age.labelId = s.readUint32LE(); s.readUint32LE(); } else { age.id = s.readUint32(); age.disk = s.readUint32(); age.roomCount = s.readUint32(); age.roomsOffset = s.readUint32() - _executableVersion->baseOffset; age.labelId = s.readUint32(); } ages.push_back(age); } return ages; }
RoomData Database::loadRoomDescription(Common::ReadStreamEndian &s) { RoomData room; if (_vm->getPlatform() == Common::kPlatformPS2) { room.id = s.readUint32LE(); s.readUint32LE(); s.read(&room.name, 8); room.scriptsOffset = s.readUint32LE(); s.readUint32LE(); room.ambSoundsOffset = s.readUint32LE(); s.readUint32LE(); room.unkOffset = s.readUint32LE(); // not 64-bit -- otherwise roomUnk5 is incorrect s.readUint32LE(); // The zip-bit index is computed at runtime room.roomUnk5 = s.readUint32LE(); } else { room.id = s.readUint32(); s.read(&room.name, 8); room.scriptsOffset = s.readUint32(); room.ambSoundsOffset = s.readUint32(); room.unkOffset = s.readUint32(); s.readUint32(); // The zip-bit index is computed at runtime room.roomUnk5 = s.readUint32(); } if (room.scriptsOffset != 0) room.scriptsOffset -= _executableVersion->baseOffset; if (room.ambSoundsOffset != 0) room.ambSoundsOffset -= _executableVersion->baseOffset; if (room.unkOffset != 0) room.unkOffset -= _executableVersion->baseOffset; return room; }