aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorBenjamin Haisch2009-06-18 08:22:52 +0000
committerWillem Jan Palenstijn2011-11-20 22:43:07 +0100
commitce7febcd70092ce0015e952af6dbfaae23bed22d (patch)
treea7772c9b72de65662cf094eb0dc9e2d85a7083df /engines
parentaf7e1c16833c2fb3df5c6079262d1e18d7959365 (diff)
downloadscummvm-rg350-ce7febcd70092ce0015e952af6dbfaae23bed22d.tar.gz
scummvm-rg350-ce7febcd70092ce0015e952af6dbfaae23bed22d.tar.bz2
scummvm-rg350-ce7febcd70092ce0015e952af6dbfaae23bed22d.zip
TOLTECS: Reworked the ArchiveReader and ResourceCache classes.
ResourceCache needs more work since resources are never freed (which is bad).
Diffstat (limited to 'engines')
-rw-r--r--engines/toltecs/menu.cpp76
-rw-r--r--engines/toltecs/menu.h84
-rw-r--r--engines/toltecs/palette.cpp10
-rw-r--r--engines/toltecs/render.cpp2
-rw-r--r--engines/toltecs/resource.cpp77
-rw-r--r--engines/toltecs/resource.h30
-rw-r--r--engines/toltecs/screen.cpp12
-rw-r--r--engines/toltecs/script.cpp6
-rw-r--r--engines/toltecs/sound.cpp5
-rw-r--r--engines/toltecs/sprite.cpp4
-rw-r--r--engines/toltecs/toltecs.cpp3
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;