diff options
Diffstat (limited to 'engines/toltecs')
| -rw-r--r-- | engines/toltecs/menu.cpp | 76 | ||||
| -rw-r--r-- | engines/toltecs/menu.h | 84 | ||||
| -rw-r--r-- | engines/toltecs/palette.cpp | 10 | ||||
| -rw-r--r-- | engines/toltecs/render.cpp | 2 | ||||
| -rw-r--r-- | engines/toltecs/resource.cpp | 77 | ||||
| -rw-r--r-- | engines/toltecs/resource.h | 30 | ||||
| -rw-r--r-- | engines/toltecs/screen.cpp | 12 | ||||
| -rw-r--r-- | engines/toltecs/script.cpp | 6 | ||||
| -rw-r--r-- | engines/toltecs/sound.cpp | 5 | ||||
| -rw-r--r-- | engines/toltecs/sprite.cpp | 4 | ||||
| -rw-r--r-- | engines/toltecs/toltecs.cpp | 3 | 
11 files changed, 132 insertions, 177 deletions
diff --git a/engines/toltecs/menu.cpp b/engines/toltecs/menu.cpp index 9061ff5ddf..0052d50685 100644 --- a/engines/toltecs/menu.cpp +++ b/engines/toltecs/menu.cpp @@ -54,9 +54,9 @@ void Widget::redraw() {  Widget *Widget::getHoveredWidget(int mouseX, int mouseY) {  	if (_rect.contains(mouseX, mouseY)) -	    return this; +		return this;  	else -	    return NULL; +		return NULL;  }  void Widget::calcDimensions() { @@ -86,13 +86,13 @@ LabelWidget::~LabelWidget() {  }  void LabelWidget::redraw() { -    _vm->_screen->drawString(_rect.left, _rect.top, _fontColor, 14, (byte*)_caption.c_str(), -1, NULL, true); +	_vm->_screen->drawString(_rect.left, _rect.top, _fontColor, 14, (byte*)_caption.c_str(), -1, NULL, true);  }  void LabelWidget::calcDimensions() { -    Font font(_vm->_res->load(14)); -    _rect.setWidth(font.getTextWidth((byte*)_caption.c_str())); -    _rect.setHeight(font.getHeight()); +	Font font(_vm->_res->load(14)->data); +	_rect.setWidth(font.getTextWidth((byte*)_caption.c_str())); +	_rect.setHeight(font.getHeight());  }  void LabelWidget::setCaption(Common::String caption) { @@ -109,15 +109,15 @@ void LabelWidget::onMouseEnter() {  }  void LabelWidget::onMouseLeave() { -    setFontColor(kFontColorMenuDefault); +	setFontColor(kFontColorMenuDefault);  }  VolumeControlWidget::VolumeControlWidget(ToltecsEngine *vm, int x, int y, Common::String caption, uint flags) :  	Widget(_vm, x, y), _activeWidget(NULL) { -    _label = new LabelWidget(vm, x, y, caption, flags); -    _up = new LabelWidget(vm, x + 350, y + 4, "[", flags); +	_label = new LabelWidget(vm, x, y, caption, flags); +	_up = new LabelWidget(vm, x + 350, y + 4, "[", flags);  	_down = new LabelWidget(vm, x + 350 + 24, y + 4, "]", flags);  	_indicator = new LabelWidget(vm, x + 350 + 24 + 24 + 8, y, "||||||||||", flags); @@ -148,16 +148,16 @@ void VolumeControlWidget::calcDimensions() {  }  void VolumeControlWidget::onMouseEnter() { -    _label->setFontColor(kFontColorMenuActive); -    _indicator->setFontColor(kFontColorMenuActive); +	_label->setFontColor(kFontColorMenuActive); +	_indicator->setFontColor(kFontColorMenuActive);  	_activeWidget = NULL;  }  void VolumeControlWidget::onMouseLeave() { -    _label->setFontColor(kFontColorMenuDefault); -    _up->setFontColor(kFontColorMenuDefault); +	_label->setFontColor(kFontColorMenuDefault); +	_up->setFontColor(kFontColorMenuDefault);  	_down->setFontColor(kFontColorMenuDefault); -    _indicator->setFontColor(kFontColorMenuDefault); +	_indicator->setFontColor(kFontColorMenuDefault);  }  void VolumeControlWidget::onMouseMove(int mouseX, int mouseY) { @@ -166,19 +166,19 @@ void VolumeControlWidget::onMouseMove(int mouseX, int mouseY) {  	hoveredWidget = _up->getHoveredWidget(mouseX, mouseY);  	if (!hoveredWidget) -	    hoveredWidget = _down->getHoveredWidget(mouseX, mouseY); +		hoveredWidget = _down->getHoveredWidget(mouseX, mouseY);  	if (_activeWidget != hoveredWidget) { -	    _activeWidget = hoveredWidget; -	    if (!_activeWidget) { -		    _up->setFontColor(kFontColorMenuDefault); -		    _down->setFontColor(kFontColorMenuDefault); +		_activeWidget = hoveredWidget; +		if (!_activeWidget) { +			_up->setFontColor(kFontColorMenuDefault); +			_down->setFontColor(kFontColorMenuDefault);  		} else if (_activeWidget == _up) { -		    _up->setFontColor(kFontColorMenuActive); -		    _down->setFontColor(kFontColorMenuDefault); +			_up->setFontColor(kFontColorMenuActive); +			_down->setFontColor(kFontColorMenuDefault);  		} else if (_activeWidget == _down) { -		    _up->setFontColor(kFontColorMenuDefault); -		    _down->setFontColor(kFontColorMenuActive); +			_up->setFontColor(kFontColorMenuDefault); +			_down->setFontColor(kFontColorMenuActive);  		}  	} @@ -197,24 +197,24 @@ void MenuPage::addWidget(Widget *widget) {  void MenuPage::redraw() {  	for (WidgetArray::iterator iter = _widgets.begin(); iter != _widgets.end(); iter++) { -	    (*iter)->redraw(); +		(*iter)->redraw();  	}  }  Widget *MenuPage::getHoveredWidget(int mouseX, int mouseY) { -    Widget *hoveredWidget = NULL; +	Widget *hoveredWidget = NULL;  	for (WidgetArray::iterator iter = _widgets.begin(); iter != _widgets.end() && !hoveredWidget; iter++) { -	    hoveredWidget = (*iter)->getHoveredWidget(mouseX, mouseY); +		hoveredWidget = (*iter)->getHoveredWidget(mouseX, mouseY);  	}  	return hoveredWidget;  }  MenuSystem::MenuSystem(ToltecsEngine *vm) : _vm(vm), _activeWidget(NULL), _oldMouseX(-1), _oldMouseY(-1) { -    _page = new MenuPage("Welcome"); -    _page->addWidget(new LabelWidget(_vm, 10, 10, "Load game", 0)); -    _page->addWidget(new LabelWidget(_vm, 10, 35, "Save game", 0)); -    _page->addWidget(new VolumeControlWidget(_vm, 10, 60, "Master volume", 0)); -    _page->addWidget(new VolumeControlWidget(_vm, 10, 90, "Some other volume", 0)); +	_page = new MenuPage("Welcome"); +	_page->addWidget(new LabelWidget(_vm, 10, 10, "Load game", 0)); +	_page->addWidget(new LabelWidget(_vm, 10, 35, "Save game", 0)); +	_page->addWidget(new VolumeControlWidget(_vm, 10, 60, "Master volume", 0)); +	_page->addWidget(new VolumeControlWidget(_vm, 10, 90, "Some other volume", 0));  }  MenuSystem::~MenuSystem() { @@ -227,20 +227,20 @@ void MenuSystem::update() {  	if (_vm->_mouseX != _oldMouseX || _vm->_mouseY != _oldMouseY) { -	    _oldMouseX = _vm->_mouseX; -	    _oldMouseY = _vm->_mouseY; +		_oldMouseX = _vm->_mouseX; +		_oldMouseY = _vm->_mouseY;  		Widget *hoveredWidget = _page->getHoveredWidget(_vm->_mouseX, _vm->_mouseY);  		if (_activeWidget != hoveredWidget) { -		    if (_activeWidget) -		        _activeWidget->onMouseLeave(); +			if (_activeWidget) +				_activeWidget->onMouseLeave();  			if (hoveredWidget) -		    	hoveredWidget->onMouseEnter(); -	        _activeWidget = hoveredWidget; +				hoveredWidget->onMouseEnter(); +			_activeWidget = hoveredWidget;  		}  		if (_activeWidget) { -		    _activeWidget->onMouseMove(_vm->_mouseX, _vm->_mouseY); +			_activeWidget->onMouseMove(_vm->_mouseX, _vm->_mouseY);  		}  	} diff --git a/engines/toltecs/menu.h b/engines/toltecs/menu.h index 15b73b78f7..dd75d66ef4 100644 --- a/engines/toltecs/menu.h +++ b/engines/toltecs/menu.h @@ -51,35 +51,35 @@ const byte kFontColorMenuActive  = 255;  class Widget {  public: -    Widget(ToltecsEngine *vm, int x, int y); -    virtual ~Widget(); -    virtual void redraw(); -    virtual Widget *getHoveredWidget(int mouseX, int mouseY); -    virtual void calcDimensions(); -    void setRect(Common::Rect rect); -    //virtual void setHilighted(bool active); -    virtual void onMouseEnter(); -    virtual void onMouseLeave(); -    virtual void onMouseMove(int mouseX, int mouseY); +	Widget(ToltecsEngine *vm, int x, int y); +	virtual ~Widget(); +	virtual void redraw(); +	virtual Widget *getHoveredWidget(int mouseX, int mouseY); +	virtual void calcDimensions(); +	void setRect(Common::Rect rect); +	//virtual void setHilighted(bool active); +	virtual void onMouseEnter(); +	virtual void onMouseLeave(); +	virtual void onMouseMove(int mouseX, int mouseY);  protected:  	ToltecsEngine *_vm;  	Common::Rect _rect;  	//bool _hilighted;  }; -const int kLabelCentered    = 1 << 1; +const int kLabelCentered	= 1 << 1;  const int kLabelHideOnMovie = 1 << 2;  class LabelWidget : public Widget {  public: -    LabelWidget(ToltecsEngine *vm, int x, int y, Common::String caption, uint flags); -    ~LabelWidget(); -    void redraw(); +	LabelWidget(ToltecsEngine *vm, int x, int y, Common::String caption, uint flags); +	~LabelWidget(); +	void redraw();  	void calcDimensions(); -    void setCaption(Common::String caption); -    void setFontColor(byte fontColor); -    void onMouseEnter(); -    void onMouseLeave(); +	void setCaption(Common::String caption); +	void setFontColor(byte fontColor); +	void onMouseEnter(); +	void onMouseLeave();  protected:  	Common::String _caption;  	uint _flags; @@ -88,15 +88,15 @@ protected:  class VolumeControlWidget : public Widget {  public: -    VolumeControlWidget(ToltecsEngine *vm, int x, int y, Common::String caption, uint flags); -    ~VolumeControlWidget(); -    void redraw(); -    Widget *getHoveredWidget(int mouseX, int mouseY); +	VolumeControlWidget(ToltecsEngine *vm, int x, int y, Common::String caption, uint flags); +	~VolumeControlWidget(); +	void redraw(); +	Widget *getHoveredWidget(int mouseX, int mouseY);  	void calcDimensions();  	//void setHilighted(bool active); -    void onMouseEnter(); -    void onMouseLeave(); -    void onMouseMove(int mouseX, int mouseY); +	void onMouseEnter(); +	void onMouseLeave(); +	void onMouseMove(int mouseX, int mouseY);  protected:  	uint _flags;  	LabelWidget *_label, *_up, *_down, *_indicator; @@ -105,33 +105,33 @@ protected:  class MenuPage {  public: -    MenuPage(Common::String caption); -    ~MenuPage(); -    void addWidget(Widget *widget); -    void redraw(); -    Widget *getHoveredWidget(int mouseX, int mouseY); +	MenuPage(Common::String caption); +	~MenuPage(); +	void addWidget(Widget *widget); +	void redraw(); +	Widget *getHoveredWidget(int mouseX, int mouseY);  protected:  	typedef Common::Array<Widget*> WidgetArray; -    Common::String _caption; -    WidgetArray _widgets; +	Common::String _caption; +	WidgetArray _widgets;  };  class MenuSystem {  public: -    MenuSystem(ToltecsEngine *vm); -    ~MenuSystem(); -     +	MenuSystem(ToltecsEngine *vm); +	~MenuSystem(); +  	void update();  protected: -    ToltecsEngine *_vm; -     -    //LabelWidget *label1, *label2; -    MenuPage *_page; -     -    Widget *_activeWidget; -    int16 _oldMouseX, _oldMouseY; +	ToltecsEngine *_vm; + +	//LabelWidget *label1, *label2; +	MenuPage *_page; + +	Widget *_activeWidget; +	int16 _oldMouseX, _oldMouseY;  }; diff --git a/engines/toltecs/palette.cpp b/engines/toltecs/palette.cpp index 0d5faec090..52f847e8dd 100644 --- a/engines/toltecs/palette.cpp +++ b/engines/toltecs/palette.cpp @@ -102,8 +102,8 @@ void Palette::setDeltaPalette(byte *palette, byte mask, char deltaValue, int16 c  }  void Palette::loadAddPalette(uint resIndex, byte startIndex) { -	byte *data = _vm->_res->load(resIndex); -	memcpy(&_mainPalette[startIndex * 3], data, _vm->_res->getCurItemSize()); +	Resource *paletteResource = _vm->_res->load(resIndex); +	memcpy(&_mainPalette[startIndex * 3], paletteResource->data, paletteResource->size);  }  void Palette::loadAddPaletteFrom(byte *source, byte startIndex, byte count) { @@ -113,10 +113,10 @@ void Palette::loadAddPaletteFrom(byte *source, byte startIndex, byte count) {  void Palette::addFragment(uint resIndex, int16 id) {  	debug(0, "Palette::addFragment(%d, %d)", resIndex, id); -	byte *fragmentData = _vm->_res->load(resIndex); -	byte count = _vm->_res->getCurItemSize() / 3; +	Resource *fragmentResource = _vm->_res->load(resIndex); +	byte count = fragmentResource->size / 3; -	memcpy(&_mainPalette[_fragmentIndex * 3], fragmentData, count * 3); +	memcpy(&_mainPalette[_fragmentIndex * 3], fragmentResource->data, count * 3);  	PaletteFragment fragment;  	fragment.id = id; diff --git a/engines/toltecs/render.cpp b/engines/toltecs/render.cpp index 4ffb9f6664..642b299d3d 100644 --- a/engines/toltecs/render.cpp +++ b/engines/toltecs/render.cpp @@ -80,7 +80,7 @@ void RenderQueue::addSprite(SpriteDrawItem &sprite) {  void RenderQueue::addText(int16 x, int16 y, byte color, uint fontResIndex, byte *text, int len) { -	Font font(_vm->_res->load(fontResIndex)); +	Font font(_vm->_res->load(fontResIndex)->data);  	RenderQueueItem item;  	item.type = kText; diff --git a/engines/toltecs/resource.cpp b/engines/toltecs/resource.cpp index 9449fdf73b..aaff6e340c 100644 --- a/engines/toltecs/resource.cpp +++ b/engines/toltecs/resource.cpp @@ -44,11 +44,16 @@ ArchiveReader::ArchiveReader() {  }  ArchiveReader::~ArchiveReader() { +	delete[] _offsets;  }  void ArchiveReader::openArchive(const char *filename) {  	open(filename); -	for (uint i = 0; i < 10000; i++) +	uint32 firstOffs = readUint32LE(); +	uint count = firstOffs / 4; +	_offsets = new uint32[count]; +	_offsets[0] = firstOffs; +	for (uint i = 1; i < count; i++)  		_offsets[i] = readUint32LE();  } @@ -91,70 +96,30 @@ void ArchiveReader::dump(uint resIndex, const char *prefix) {  /* ResourceCache */  ResourceCache::ResourceCache(ToltecsEngine *vm) : _vm(vm) { - -	_base = new byte[kMaxCacheSize]; -	_bytesUsed = 0; - -	memset(_cache, 0, sizeof(_cache)); -	_cacheCount = 0; - -	_curItemOffset = 0; -	_curItemSize = 0; -  }  ResourceCache::~ResourceCache() { -	delete[] _base; +	// TODO: Delete resources  } -byte *ResourceCache::load(uint resIndex) { -	byte *data = NULL; -	if (existsItem(resIndex)) { +Resource *ResourceCache::load(uint resIndex) { +	ResourceMap::iterator item = _cache.find(resIndex); +	if (item != _cache.end()) {  		debug(1, "ResourceCache::load(%d) From cache", resIndex); -		data = _base + _curItemOffset; +		return (*item)._value;  	} else {  		debug(1, "ResourceCache::load(%d) From disk", resIndex); -		uint32 size = _vm->_arc->openResource(resIndex); -		data = addItem(resIndex, size); -		_vm->_arc->read(data, size); -		_vm->_arc->closeResource(); -	} -	return data; -} - -bool ResourceCache::existsItem(uint resIndex) { -	for (uint i = 0; i < _cacheCount; i++) { -		if (_cache[i].resIndex == resIndex) { -			_curItemOffset = _cache[i].offset; -			_curItemSize = _cache[i].size; -			return true; -		} -	} -	return false; -} -byte *ResourceCache::addItem(uint resIndex, uint32 size) { - -	checkCapacity(size); - -	_curItemOffset = _bytesUsed; -	_curItemSize = size; - -	_cache[_cacheCount].resIndex = resIndex; -	_cache[_cacheCount].offset = _curItemOffset; -	_cache[_cacheCount].size = _curItemSize; -	_cacheCount++; - -	_bytesUsed += size; - -	return _base + _curItemOffset; - -} - -void ResourceCache::checkCapacity(uint32 size) { -	if (_cacheCount > kMaxCacheItems || _bytesUsed + size > kMaxCacheSize) { -		_cacheCount = 0; -		_bytesUsed = 0; +		Resource *resItem = new Resource(); +		resItem->size = _vm->_arc->openResource(resIndex); +		resItem->data = new byte[resItem->size]; +		_vm->_arc->read(resItem->data, resItem->size); +		_vm->_arc->closeResource(); +		 +		_cache[resIndex] = resItem; +		 +		return resItem; +		  	}  } diff --git a/engines/toltecs/resource.h b/engines/toltecs/resource.h index ee1eb21b07..1c618aedeb 100644 --- a/engines/toltecs/resource.h +++ b/engines/toltecs/resource.h @@ -30,6 +30,7 @@  #include "common/file.h"  #include "common/savefile.h"  #include "common/system.h" +#include "common/hashmap.h"  #include "common/hash-str.h"  #include "common/events.h"  #include "common/keyboard.h" @@ -65,39 +66,28 @@ public:  	void dump(uint resIndex, const char *prefix = NULL);  protected: -	uint32 _offsets[10000]; +	uint32 *_offsets;  }; +struct Resource { +	uint32 size; +	byte *data; +}; +  class ResourceCache {  public:  	ResourceCache(ToltecsEngine *vm);  	~ResourceCache(); -	byte *load(uint resIndex); -	uint32 getCurItemSize() const { return _curItemSize; } +	Resource *load(uint resIndex);  protected: - -	struct CacheItem { -		uint resIndex; -		//int value;	// what is this? -		int32 offset;	// offset into _base -		uint32 size;	// size of the item -	}; +	typedef Common::HashMap<uint, Resource*> ResourceMap;  	ToltecsEngine *_vm; -	byte *_base; -	uint32 _bytesUsed; -	uint32 _curItemOffset, _curItemSize; -	 -	CacheItem _cache[kMaxCacheItems]; -	uint _cacheCount; -	 -	bool existsItem(uint resIndex); -	byte *addItem(uint resIndex, uint32 size); -	void checkCapacity(uint32 size); +	ResourceMap _cache;  }; diff --git a/engines/toltecs/screen.cpp b/engines/toltecs/screen.cpp index 47c852dcfc..c3487f42d2 100644 --- a/engines/toltecs/screen.cpp +++ b/engines/toltecs/screen.cpp @@ -109,7 +109,7 @@ void Screen::unpackRle(byte *source, byte *dest, uint16 width, uint16 height) {  void Screen::loadMouseCursor(uint resIndex) {  	byte mouseCursor[16 * 16], *mouseCursorP = mouseCursor; -	byte *cursorData = _vm->_res->load(resIndex); +	byte *cursorData = _vm->_res->load(resIndex)->data;  	for (int i = 0; i < 32; i++) {  		byte pixel;  		byte mask1 = *cursorData++; @@ -131,7 +131,7 @@ void Screen::loadMouseCursor(uint resIndex) {  void Screen::drawGuiImage(int16 x, int16 y, uint resIndex) { -	byte *imageData = _vm->_res->load(resIndex); +	byte *imageData = _vm->_res->load(resIndex)->data;  	int16 headerSize = READ_LE_UINT16(imageData);  	int16 width = imageData[2];  	int16 height = imageData[3]; @@ -276,7 +276,7 @@ void Screen::updateVerbLine(int16 slotIndex, int16 slotOffset) {  	debug(0, "Screen::updateVerbLine() _verbLineNum = %d; _verbLineX = %d; _verbLineY = %d; _verbLineWidth = %d; _verbLineCount = %d",  		_verbLineNum, _verbLineX, _verbLineY, _verbLineWidth, _verbLineCount); -	Font font(_vm->_res->load(_fontResIndexArray[0])); +	Font font(_vm->_res->load(_fontResIndexArray[0])->data);  	_verbLineItems[_verbLineNum].slotIndex = slotIndex;  	_verbLineItems[_verbLineNum].slotOffset = slotOffset; @@ -392,7 +392,7 @@ void Screen::updateTalkText(int16 slotIndex, int16 slotOffset) {  	item->duration = 0;  	item->lineCount = 0; -	Font font(_vm->_res->load(_fontResIndexArray[item->fontNum])); +	Font font(_vm->_res->load(_fontResIndexArray[item->fontNum])->data);  	int16 wordLength, wordWidth;  	while (*textData < 0xF0) { @@ -558,7 +558,7 @@ void Screen::drawGuiTextMulti(byte *textData) {  int16 Screen::wrapGuiText(uint fontResIndex, int maxWidth, GuiTextWrapState &wrapState) { -	Font font(_vm->_res->load(fontResIndex)); +	Font font(_vm->_res->load(fontResIndex)->data);  	int16 len = 0;  	while (*wrapState.sourceString >= 0x20 && *wrapState.sourceString < 0xF0) { @@ -594,7 +594,7 @@ int16 Screen::drawString(int16 x, int16 y, byte color, uint fontResIndex, byte *  	debug(0, "Screen::drawString(%d, %d, %d, %d)", x, y, color, fontResIndex); -	Font font(_vm->_res->load(fontResIndex)); +	Font font(_vm->_res->load(fontResIndex)->data);  	if (len == -1)  		len = strlen((char*)text); diff --git a/engines/toltecs/script.cpp b/engines/toltecs/script.cpp index 188cb82f7f..602c3f507b 100644 --- a/engines/toltecs/script.cpp +++ b/engines/toltecs/script.cpp @@ -150,10 +150,10 @@ void ScriptInterpreter::loadScript(uint resIndex, uint slotIndex) {  	delete[] _slots[slotIndex].data;   	_slots[slotIndex].resIndex = resIndex; -	byte *scriptData = _vm->_res->load(resIndex); -	_slots[slotIndex].size = _vm->_res->getCurItemSize(); +	Resource *scriptResource = _vm->_res->load(resIndex); +	_slots[slotIndex].size = scriptResource->size;   	_slots[slotIndex].data = new byte[_slots[slotIndex].size]; - 	memcpy(_slots[slotIndex].data, scriptData, _slots[slotIndex].size); + 	memcpy(_slots[slotIndex].data, scriptResource->data, _slots[slotIndex].size);  } diff --git a/engines/toltecs/sound.cpp b/engines/toltecs/sound.cpp index 08df1ceec2..b3d327f5f8 100644 --- a/engines/toltecs/sound.cpp +++ b/engines/toltecs/sound.cpp @@ -133,14 +133,13 @@ void Sound::internalPlaySound(int16 resIndex, int16 type, int16 volume, int16 pa  		// If all channels are in use no new sound will be played  		if (freeChannel >= 0) { -			byte *soundData = _vm->_res->load(resIndex); -			uint32 soundSize = _vm->_res->getCurItemSize(); +			Resource *soundResource = _vm->_res->load(resIndex);  			byte flags = Audio::Mixer::FLAG_UNSIGNED;  			// Background sounds  			if (type == kChannelTypeBackground)  				flags |= Audio::Mixer::FLAG_LOOP; -			Audio::AudioStream *stream = Audio::makeLinearInputStream(soundData, soundSize, 22050, flags, 0, 0); +			Audio::AudioStream *stream = Audio::makeLinearInputStream(soundResource->data, soundResource->size, 22050, flags, 0, 0);  			channels[freeChannel].type = type;  			channels[freeChannel].resIndex = resIndex; diff --git a/engines/toltecs/sprite.cpp b/engines/toltecs/sprite.cpp index 264216daf2..787f15c15a 100644 --- a/engines/toltecs/sprite.cpp +++ b/engines/toltecs/sprite.cpp @@ -216,7 +216,7 @@ void Screen::addDrawRequest(const DrawRequest &drawRequest) {  	sprite.resIndex = drawRequest.resIndex;  	sprite.frameNum = frameNum; -	spriteData = _vm->_res->load(drawRequest.resIndex); +	spriteData = _vm->_res->load(drawRequest.resIndex)->data;  	if (drawRequest.flags & 0x1000) {  		sprite.flags |= 4; @@ -405,7 +405,7 @@ void Screen::drawSprite(const SpriteDrawItem &sprite) {  	debug(0, "Screen::drawSprite() width = %d; height = %d; origWidth = %d; origHeight = %d",  		sprite.width, sprite.height, sprite.origWidth, sprite.origHeight); -	byte *source = _vm->_res->load(sprite.resIndex) + sprite.offset; +	byte *source = _vm->_res->load(sprite.resIndex)->data + sprite.offset;  	byte *dest = _frontScreen + sprite.x + sprite.y * 640;  	SpriteReader spriteReader(source, sprite); diff --git a/engines/toltecs/toltecs.cpp b/engines/toltecs/toltecs.cpp index 40b23881b7..80a77af994 100644 --- a/engines/toltecs/toltecs.cpp +++ b/engines/toltecs/toltecs.cpp @@ -186,7 +186,8 @@ Common::Error ToltecsEngine::run() {  void ToltecsEngine::loadScene(uint resIndex) {  	// TODO -	byte *scene = _res->load(resIndex); +	Resource *sceneResource = _res->load(resIndex); +	byte *scene = sceneResource->data;  	uint32 imageSize = READ_LE_UINT32(scene);  	_sceneResIndex = resIndex;  | 
