diff --git a/engines/twine/menu/menu.cpp b/engines/twine/menu/menu.cpp index bd7df2f4971..06498ba841a 100644 --- a/engines/twine/menu/menu.cpp +++ b/engines/twine/menu/menu.cpp @@ -806,7 +806,7 @@ void Menu::drawInfoMenu(int16 left, int16 top) { int32 newBoxLeft2 = left + 9; - _engine->_grid->drawSprite(0, newBoxLeft2, top + 13, _engine->_resources->spriteTable[SPRITEHQR_LIFEPOINTS]); + _engine->_grid->drawSprite(0, newBoxLeft2, top + 13, _engine->_resources->spriteData[SPRITEHQR_LIFEPOINTS]); int32 boxRight = left + 325; int32 newBoxLeft = left + 25; @@ -818,7 +818,7 @@ void Menu::drawInfoMenu(int16 left, int16 top) { drawBox(newBoxLeft, boxTop, left + 324, boxTop + 14); if (!_engine->_gameState->inventoryDisabled() && _engine->_gameState->hasItem(InventoryItems::kiTunic)) { - _engine->_grid->drawSprite(0, newBoxLeft2, top + 36, _engine->_resources->spriteTable[SPRITEHQR_MAGICPOINTS]); + _engine->_grid->drawSprite(0, newBoxLeft2, top + 36, _engine->_resources->spriteData[SPRITEHQR_MAGICPOINTS]); if (_engine->_gameState->magicLevelIdx > 0) { _engine->_interface->drawSplittedBox(Common::Rect(newBoxLeft, top + 35, _engine->_screens->crossDot(newBoxLeft, boxRight, 80, _engine->_gameState->inventoryMagicPoints), top + 50), 75); } @@ -828,13 +828,13 @@ void Menu::drawInfoMenu(int16 left, int16 top) { boxLeft = left + 340; /** draw coin sprite */ - _engine->_grid->drawSprite(0, boxLeft, top + 15, _engine->_resources->spriteTable[SPRITEHQR_KASHES]); + _engine->_grid->drawSprite(0, boxLeft, top + 15, _engine->_resources->spriteData[SPRITEHQR_KASHES]); _engine->_text->setFontColor(155); Common::String inventoryNumKashes = Common::String::format("%d", _engine->_gameState->inventoryNumKashes); _engine->_text->drawText(left + 370, top + 5, inventoryNumKashes.c_str()); /** draw key sprite */ - _engine->_grid->drawSprite(0, boxLeft, top + 55, _engine->_resources->spriteTable[SPRITEHQR_KEY]); + _engine->_grid->drawSprite(0, boxLeft, top + 55, _engine->_resources->spriteData[SPRITEHQR_KEY]); _engine->_text->setFontColor(155); Common::String inventoryNumKeys = Common::String::format("%d", _engine->_gameState->inventoryNumKeys); _engine->_text->drawText(left + 370, top + 40, inventoryNumKeys.c_str()); @@ -846,12 +846,12 @@ void Menu::drawInfoMenu(int16 left, int16 top) { // Clover leaf boxes for (int32 i = 0; i < _engine->_gameState->inventoryNumLeafsBox; i++) { - _engine->_grid->drawSprite(0, _engine->_screens->crossDot(left + 25, left + 325, 10, i), top + 58, _engine->_resources->spriteTable[SPRITEHQR_CLOVERLEAFBOX]); + _engine->_grid->drawSprite(0, _engine->_screens->crossDot(left + 25, left + 325, 10, i), top + 58, _engine->_resources->spriteData[SPRITEHQR_CLOVERLEAFBOX]); } // Clover leafs for (int32 i = 0; i < _engine->_gameState->inventoryNumLeafs; i++) { - _engine->_grid->drawSprite(0, _engine->_screens->crossDot(left + 25, left + 325, 10, i) + 2, top + 60, _engine->_resources->spriteTable[SPRITEHQR_CLOVERLEAF]); + _engine->_grid->drawSprite(0, _engine->_screens->crossDot(left + 25, left + 325, 10, i) + 2, top + 60, _engine->_resources->spriteData[SPRITEHQR_CLOVERLEAF]); } _engine->copyBlockPhys(left, top, left + width, top + 135); diff --git a/engines/twine/renderer/redraw.cpp b/engines/twine/renderer/redraw.cpp index 513d3e3b586..2ce6126f75c 100644 --- a/engines/twine/renderer/redraw.cpp +++ b/engines/twine/renderer/redraw.cpp @@ -415,13 +415,13 @@ void Redraw::processDrawListActors(const DrawListStruct &drawCmd, bool bgRedraw) void Redraw::processDrawListActorSprites(const DrawListStruct &drawCmd, bool bgRedraw) { int32 actorIdx = drawCmd.actorIdx; ActorStruct *actor = _engine->_scene->getActor(actorIdx); - const uint8 *spritePtr = _engine->_resources->spriteTable[actor->entity]; + const SpriteData &spritePtr = _engine->_resources->spriteData[actor->entity]; // get actor position on screen _engine->_renderer->projectPositionOnScreen(actor->x - _engine->_grid->cameraX, actor->y - _engine->_grid->cameraY, actor->z - _engine->_grid->cameraZ); - int32 spriteWidth, spriteHeight; - _engine->_grid->getSpriteSize(0, &spriteWidth, &spriteHeight, spritePtr); + const int32 spriteWidth = spritePtr.surface().w; + const int32 spriteHeight = spritePtr.surface().h; // calculate sprite position on screen const SpriteDim* dim = _engine->_resources->spriteBoundingBox.dim(actor->entity); @@ -478,8 +478,9 @@ void Redraw::processDrawListExtras(const DrawListStruct &drawCmd) { if (extra->info0 & 0x8000) { _engine->_extra->drawExtraSpecial(actorIdx, _engine->_renderer->projPosX, _engine->_renderer->projPosY); } else { - int32 spriteWidth, spriteHeight; - _engine->_grid->getSpriteSize(0, &spriteWidth, &spriteHeight, _engine->_resources->spriteTable[extra->info0]); + const SpriteData &spritePtr = _engine->_resources->spriteData[extra->info0]; + const int32 spriteWidth = spritePtr.surface().w; + const int32 spriteHeight = spritePtr.surface().h; // calculate sprite position on screen const SpriteDim* dim = _engine->_resources->spriteBoundingBox.dim(extra->info0); @@ -488,7 +489,7 @@ void Redraw::processDrawListExtras(const DrawListStruct &drawCmd) { renderRect.right = renderRect.left + spriteWidth; renderRect.bottom = renderRect.top + spriteHeight; - _engine->_grid->drawSprite(0, renderRect.left, renderRect.top, _engine->_resources->spriteTable[extra->info0]); + _engine->_grid->drawSprite(0, renderRect.left, renderRect.top, spritePtr); } _engine->_interface->setClip(renderRect); @@ -569,10 +570,9 @@ void Redraw::renderOverlays() { // process overlay type switch (overlay->type) { case OverlayType::koSprite: { - const uint8 *spritePtr = _engine->_resources->spriteTable[overlay->info0]; - - int32 spriteWidth, spriteHeight; - _engine->_grid->getSpriteSize(0, &spriteWidth, &spriteHeight, spritePtr); + const SpriteData &spritePtr = _engine->_resources->spriteData[overlay->info0]; + const int32 spriteWidth = spritePtr.surface().w; + const int32 spriteHeight = spritePtr.surface().h; const SpriteDim* dim = _engine->_resources->spriteBoundingBox.dim(overlay->info0); renderRect.left = dim->x + overlay->x; @@ -777,9 +777,9 @@ void Redraw::drawBubble(int32 actorIdx) { bubbleActor = actorIdx; } - const uint8 *spritePtr = _engine->_resources->spriteTable[bubbleSpriteIndex]; - int32 spriteWidth, spriteHeight; - _engine->_grid->getSpriteSize(0, &spriteWidth, &spriteHeight, spritePtr); + const SpriteData &spritePtr = _engine->_resources->spriteData[bubbleSpriteIndex]; + const int32 spriteWidth = spritePtr.surface().w; + const int32 spriteHeight = spritePtr.surface().h; // calculate sprite position on screen if (bubbleSpriteIndex == SPRITEHQR_DIAG_BUBBLE_RIGHT) { diff --git a/engines/twine/resources/resources.h b/engines/twine/resources/resources.h index 3eb1441be16..dca46e03421 100644 --- a/engines/twine/resources/resources.h +++ b/engines/twine/resources/resources.h @@ -142,6 +142,11 @@ private: void preloadAnimations(); void preloadSamples(); + /** Table with all loaded sprites */ + uint8 *spriteTable[NUM_SPRITES] {nullptr}; + /** Table with all loaded sprite sizes */ + uint32 spriteSizeTable[NUM_SPRITES] {0}; + public: Resources(TwinEEngine *engine) : _engine(engine) {} ~Resources(); @@ -151,10 +156,6 @@ public: /** Table with all loaded samples sizes */ uint32 inventorySizeTable[NUM_INVENTORY_ITEMS] {0}; - /** Table with all loaded sprites */ - uint8 *spriteTable[NUM_SPRITES] {nullptr}; - /** Table with all loaded sprite sizes */ - uint32 spriteSizeTable[NUM_SPRITES] {0}; SpriteData spriteData[NUM_SPRITES]; /** Table with all loaded animations */