void ResourceContext_RES::processPatches(Resource *resource, const GamePatchDescription *patchFiles) { uint16 subjectResourceType; ResourceContext *subjectContext; uint32 subjectResourceId; uint32 patchResourceId; ResourceData *subjectResourceData; ResourceData *resourceData; // Process internal patch files if (_fileType & GAME_PATCHFILE) { subjectResourceType = ~GAME_PATCHFILE & _fileType; subjectContext = resource->getContext((GameFileTypes)subjectResourceType); if (subjectContext == NULL) { error("ResourceContext::load() Subject context not found"); } ByteArray tableBuffer; resource->loadResource(this, _table.size() - 1, tableBuffer); ByteArrayReadStreamEndian readS2(tableBuffer, _isBigEndian); for (uint32 i = 0; i < tableBuffer.size() / 8; i++) { subjectResourceId = readS2.readUint32(); patchResourceId = readS2.readUint32(); subjectResourceData = subjectContext->getResourceData(subjectResourceId); resourceData = getResourceData(patchResourceId); subjectResourceData->patchData = new PatchData(&_file, _fileName); subjectResourceData->offset = resourceData->offset; subjectResourceData->size = resourceData->size; } } }
Images::Decoder *ResourceTreeItem::getImage() const { if (getResourceType() != Aurora::kResourceImage) throw Common::Exception("\"%s\" is not an image resource", getName().toStdString().c_str()); std::unique_ptr<Common::SeekableReadStream> res(getResourceData()); Images::Decoder *img = nullptr; try { img = getImage(*res, _fileType); } catch (Common::Exception &e) { e.add("Failed to get image from \"%s\"", getName().toStdString().c_str()); throw; } return img; }
Sound::AudioStream *ResourceTreeItem::getAudioStream() const { if (_resourceType != Aurora::kResourceSound) throw Common::Exception("\"%s\" is not a sound resource", _name.toStdString().c_str()); std::unique_ptr<Common::SeekableReadStream> res(getResourceData()); Sound::AudioStream *sound = nullptr; try { sound = SoundMan.makeAudioStream(res.get()); } catch (Common::Exception &e) { e.add("Failed to get audio stream from \"%s\"", _name.toStdString().c_str()); throw; } res.release(); return sound; }