Beispiel #1
0
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;
		}
	}
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
}