[Scummvm-git-logs] scummvm master -> 0f73d606c38d8431812b4c613f0280770e7c92f0
mgerhardy
martin.gerhardy at gmail.com
Thu Dec 24 14:00:47 UTC 2020
This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
42121a9083 TWINE: increased fps for text rendering to match the original
e1f827c323 TWINE: drawSprite for SpriteData
c1b89c9878 TWINE: use SpriteData for rendering
0ab84e47ba TWINE: removed unused method parameter
0f73d606c3 TWINE: optimized drawBrickSprite
Commit: 42121a908319eefb00500773907236c4acc09285
https://github.com/scummvm/scummvm/commit/42121a908319eefb00500773907236c4acc09285
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-12-24T15:00:00+01:00
Commit Message:
TWINE: increased fps for text rendering to match the original
Changed paths:
engines/twine/text.cpp
diff --git a/engines/twine/text.cpp b/engines/twine/text.cpp
index c6fcd33d69..5ee4de4c75 100644
--- a/engines/twine/text.cpp
+++ b/engines/twine/text.cpp
@@ -616,7 +616,7 @@ bool Text::drawTextFullscreen(int32 index) {
ProgressiveTextState printedText;
for (;;) {
- ScopedFPS scopedFps;
+ ScopedFPS scopedFps(66);
_engine->readKeys();
printedText = updateProgressiveText();
playVox(currDialTextEntry);
@@ -783,7 +783,7 @@ void Text::drawAskQuestion(int32 index) {
ProgressiveTextState textStatus = ProgressiveTextState::UNK1;
do {
- ScopedFPS scopedFps;
+ ScopedFPS scopedFps(66);
_engine->readKeys();
textStatus = updateProgressiveText();
Commit: e1f827c3234161f22b603f02f1be305f56ec1222
https://github.com/scummvm/scummvm/commit/e1f827c3234161f22b603f02f1be305f56ec1222
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-12-24T15:00:00+01:00
Commit Message:
TWINE: drawSprite for SpriteData
Changed paths:
engines/twine/resources/resources.cpp
engines/twine/resources/resources.h
engines/twine/scene/grid.cpp
engines/twine/scene/grid.h
diff --git a/engines/twine/resources/resources.cpp b/engines/twine/resources/resources.cpp
index cfec2524ab..89e7e9307e 100644
--- a/engines/twine/resources/resources.cpp
+++ b/engines/twine/resources/resources.cpp
@@ -77,6 +77,9 @@ void Resources::preloadSprites() {
debug("preload %i sprites", numEntries);
for (int32 i = 0; i < numEntries; i++) {
spriteSizeTable[i] = HQR::getAllocEntry(&spriteTable[i], Resources::HQR_SPRITES_FILE, i);
+ if (!spriteData[i].loadFromBuffer(spriteTable[i], spriteSizeTable[i])) {
+ error("Failed to load sprite %i", i);
+ }
}
}
diff --git a/engines/twine/resources/resources.h b/engines/twine/resources/resources.h
index 7b61712ee4..3eb1441be1 100644
--- a/engines/twine/resources/resources.h
+++ b/engines/twine/resources/resources.h
@@ -155,6 +155,7 @@ public:
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 */
uint8 *animTable[NUM_ANIMS]{nullptr};
diff --git a/engines/twine/scene/grid.cpp b/engines/twine/scene/grid.cpp
index 3b65c4404a..bbecf2a541 100644
--- a/engines/twine/scene/grid.cpp
+++ b/engines/twine/scene/grid.cpp
@@ -474,6 +474,27 @@ void Grid::drawSprite(int32 index, int32 posX, int32 posY, const uint8 *ptr) {
drawBrickSprite(index, posX, posY, ptr, true);
}
+void Grid::drawSprite(int32 /*index*/, int32 posX, int32 posY, const SpriteData &ptr) {
+ const int32 left = posX + ptr.offsetX();
+ if (left > _engine->_interface->textWindow.right) {
+ return;
+ }
+ const int32 right = ptr.surface().w + left;
+ if (right < _engine->_interface->textWindow.left) {
+ return;
+ }
+ const int32 top = posY + ptr.offsetY();
+ if (top > _engine->_interface->textWindow.bottom) {
+ return;
+ }
+ const int32 bottom = ptr.surface().h + top;
+ if (bottom < _engine->_interface->textWindow.top) {
+ return;
+ }
+
+ _engine->frontVideoBuffer.transBlitFrom(ptr.surface(), Common::Point(left, top));
+}
+
// WARNING: Rewrite this function to have better performance
void Grid::drawBrickSprite(int32 index, int32 posX, int32 posY, const uint8 *ptr, bool isSprite) {
const int32 left = posX + *(ptr + 2);
diff --git a/engines/twine/scene/grid.h b/engines/twine/scene/grid.h
index ae7c34cbb7..eee85b7341 100644
--- a/engines/twine/scene/grid.h
+++ b/engines/twine/scene/grid.h
@@ -24,6 +24,7 @@
#define TWINE_GRID_H
#include "common/scummsys.h"
+#include "twine/parser/sprite.h"
#include "twine/shared.h"
#include "twine/twine.h"
@@ -243,6 +244,7 @@ public:
* @param ptr sprite buffer pointer to draw
*/
void drawSprite(int32 index, int32 posX, int32 posY, const uint8 *spritePtr);
+ void drawSprite(int32 index, int32 posX, int32 posY, const SpriteData &ptr);
/**
* Draw sprite or bricks in the screen according with the type
Commit: c1b89c9878f6afeff53225db745ee481b8146a64
https://github.com/scummvm/scummvm/commit/c1b89c9878f6afeff53225db745ee481b8146a64
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-12-24T15:00:00+01:00
Commit Message:
TWINE: use SpriteData for rendering
Changed paths:
engines/twine/menu/menu.cpp
engines/twine/renderer/redraw.cpp
engines/twine/resources/resources.h
diff --git a/engines/twine/menu/menu.cpp b/engines/twine/menu/menu.cpp
index bd7df2f497..06498ba841 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 513d3e3b58..2ce6126f75 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 3eb1441be1..dca46e0342 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 */
Commit: 0ab84e47ba02749be099d61b81f9fcf461cf854c
https://github.com/scummvm/scummvm/commit/0ab84e47ba02749be099d61b81f9fcf461cf854c
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-12-24T15:00:00+01:00
Commit Message:
TWINE: removed unused method parameter
Changed paths:
engines/twine/menu/menu.cpp
engines/twine/renderer/redraw.cpp
engines/twine/scene/grid.cpp
engines/twine/scene/grid.h
diff --git a/engines/twine/menu/menu.cpp b/engines/twine/menu/menu.cpp
index 06498ba841..376d3efba1 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->spriteData[SPRITEHQR_LIFEPOINTS]);
+ _engine->_grid->drawSprite(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->spriteData[SPRITEHQR_MAGICPOINTS]);
+ _engine->_grid->drawSprite(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->spriteData[SPRITEHQR_KASHES]);
+ _engine->_grid->drawSprite(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->spriteData[SPRITEHQR_KEY]);
+ _engine->_grid->drawSprite(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->spriteData[SPRITEHQR_CLOVERLEAFBOX]);
+ _engine->_grid->drawSprite(_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->spriteData[SPRITEHQR_CLOVERLEAF]);
+ _engine->_grid->drawSprite(_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 2ce6126f75..89906d02f4 100644
--- a/engines/twine/renderer/redraw.cpp
+++ b/engines/twine/renderer/redraw.cpp
@@ -438,7 +438,7 @@ void Redraw::processDrawListActorSprites(const DrawListStruct &drawCmd, bool bgR
}
if (_engine->_interface->textWindow.left <= _engine->_interface->textWindow.right && _engine->_interface->textWindow.top <= _engine->_interface->textWindow.bottom) {
- _engine->_grid->drawSprite(0, renderRect.left, renderRect.top, spritePtr);
+ _engine->_grid->drawSprite(renderRect.left, renderRect.top, spritePtr);
actor->dynamicFlags.bIsVisible = 1;
@@ -489,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, spritePtr);
+ _engine->_grid->drawSprite(renderRect.left, renderRect.top, spritePtr);
}
_engine->_interface->setClip(renderRect);
@@ -580,7 +580,7 @@ void Redraw::renderOverlays() {
renderRect.right = renderRect.left + spriteWidth;
renderRect.bottom = renderRect.top + spriteHeight;
- _engine->_grid->drawSprite(0, renderRect.left, renderRect.top, spritePtr);
+ _engine->_grid->drawSprite(renderRect.left, renderRect.top, spritePtr);
if (_engine->_interface->textWindow.left <= _engine->_interface->textWindow.right && _engine->_interface->textWindow.top <= _engine->_interface->textWindow.bottom) {
addRedrawArea(_engine->_interface->textWindow.left, _engine->_interface->textWindow.top, renderRect.right, renderRect.bottom);
@@ -793,7 +793,7 @@ void Redraw::drawBubble(int32 actorIdx) {
_engine->_interface->setClip(renderRect);
- _engine->_grid->drawSprite(0, renderRect.left, renderRect.top, spritePtr);
+ _engine->_grid->drawSprite(renderRect.left, renderRect.top, spritePtr);
if (_engine->_interface->textWindow.left <= _engine->_interface->textWindow.right && _engine->_interface->textWindow.top <= _engine->_interface->textWindow.bottom) {
_engine->copyBlockPhys(renderRect);
}
diff --git a/engines/twine/scene/grid.cpp b/engines/twine/scene/grid.cpp
index bbecf2a541..5c045662fe 100644
--- a/engines/twine/scene/grid.cpp
+++ b/engines/twine/scene/grid.cpp
@@ -474,7 +474,7 @@ void Grid::drawSprite(int32 index, int32 posX, int32 posY, const uint8 *ptr) {
drawBrickSprite(index, posX, posY, ptr, true);
}
-void Grid::drawSprite(int32 /*index*/, int32 posX, int32 posY, const SpriteData &ptr) {
+void Grid::drawSprite(int32 posX, int32 posY, const SpriteData &ptr) {
const int32 left = posX + ptr.offsetX();
if (left > _engine->_interface->textWindow.right) {
return;
diff --git a/engines/twine/scene/grid.h b/engines/twine/scene/grid.h
index eee85b7341..3619c80d5e 100644
--- a/engines/twine/scene/grid.h
+++ b/engines/twine/scene/grid.h
@@ -244,7 +244,7 @@ public:
* @param ptr sprite buffer pointer to draw
*/
void drawSprite(int32 index, int32 posX, int32 posY, const uint8 *spritePtr);
- void drawSprite(int32 index, int32 posX, int32 posY, const SpriteData &ptr);
+ void drawSprite(int32 posX, int32 posY, const SpriteData &ptr);
/**
* Draw sprite or bricks in the screen according with the type
Commit: 0f73d606c38d8431812b4c613f0280770e7c92f0
https://github.com/scummvm/scummvm/commit/0f73d606c38d8431812b4c613f0280770e7c92f0
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-12-24T15:00:08+01:00
Commit Message:
TWINE: optimized drawBrickSprite
Changed paths:
engines/twine/scene/grid.cpp
diff --git a/engines/twine/scene/grid.cpp b/engines/twine/scene/grid.cpp
index 5c045662fe..c2c92c2016 100644
--- a/engines/twine/scene/grid.cpp
+++ b/engines/twine/scene/grid.cpp
@@ -531,23 +531,36 @@ void Grid::drawBrickSprite(int32 index, int32 posX, int32 posY, const uint8 *ptr
x += iterations;
continue;
}
+ if (y < _engine->_interface->textWindow.top || x >= _engine->_interface->textWindow.right || x + iterations < _engine->_interface->textWindow.left) {
+ if (type == 1) {
+ ptr += iterations;
+ } else {
+ ++ptr;
+ }
+ x += iterations;
+ continue;
+ }
if (type == 1) {
+ uint8 *out = (uint8 *)_engine->frontVideoBuffer.getBasePtr(x, y);
for (uint8 i = 0; i < iterations; i++) {
- if (x >= _engine->_interface->textWindow.left && x < _engine->_interface->textWindow.right && y >= _engine->_interface->textWindow.top) {
- *(uint8 *)_engine->frontVideoBuffer.getBasePtr(x, y) = *ptr;
+ if (x >= _engine->_interface->textWindow.left && x < _engine->_interface->textWindow.right) {
+ *out = *ptr;
}
- x++;
- ptr++;
+ ++out;
+ ++x;
+ ++ptr;
}
} else {
const uint8 pixel = *ptr++;
+ uint8 *out = (uint8 *)_engine->frontVideoBuffer.getBasePtr(x, y);
for (uint8 i = 0; i < iterations; i++) {
- if (x >= _engine->_interface->textWindow.left && x < _engine->_interface->textWindow.right && y >= _engine->_interface->textWindow.top) {
- *(uint8 *)_engine->frontVideoBuffer.getBasePtr(x, y) = pixel;
+ if (x >= _engine->_interface->textWindow.left && x < _engine->_interface->textWindow.right) {
+ *out = pixel;
}
- x++;
+ ++out;
+ ++x;
}
}
}
More information about the Scummvm-git-logs
mailing list