aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek/graphics.cpp
diff options
context:
space:
mode:
authorMatthew Stewart2018-02-25 02:18:02 -0500
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commit060d10c463f10077d733a41ad0a827b678e8b15d (patch)
treef69a7850160a07225bf264d4ef3e527e0ce67edc /engines/startrek/graphics.cpp
parenta69f025818224c9bfeb52be11f31a2b6387bb76f (diff)
downloadscummvm-rg350-060d10c463f10077d733a41ad0a827b678e8b15d.tar.gz
scummvm-rg350-060d10c463f10077d733a41ad0a827b678e8b15d.tar.bz2
scummvm-rg350-060d10c463f10077d733a41ad0a827b678e8b15d.zip
STARTREK: Fix off-by-1 bug in drawSprite
Diffstat (limited to 'engines/startrek/graphics.cpp')
-rwxr-xr-xengines/startrek/graphics.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/engines/startrek/graphics.cpp b/engines/startrek/graphics.cpp
index 467d1f5605..a717ec70a7 100755
--- a/engines/startrek/graphics.cpp
+++ b/engines/startrek/graphics.cpp
@@ -165,8 +165,8 @@ void Graphics::drawSprite(const Sprite &sprite, const Common::Rect &rect) {
int priOffset = rect.top*SCREEN_WIDTH + rect.left;
- for (int y=rect.top; y<rect.bottom; y++) {
- for (int x=rect.left; x<rect.right; x++) {
+ for (int y=rect.top; y<=rect.bottom; y++) {
+ for (int x=rect.left; x<=rect.right; x++) {
byte priByte = _priData[priOffset/2];
byte bgPriority;
if ((priOffset%2) == 1)
@@ -183,9 +183,9 @@ void Graphics::drawSprite(const Sprite &sprite, const Common::Rect &rect) {
*dest++ = b;
}
- src += sprite.bitmap->width - rect.width();
- dest += SCREEN_WIDTH - rect.width();
- priOffset += SCREEN_WIDTH - rect.width();
+ src += sprite.bitmap->width - rect.width() - 1;
+ dest += SCREEN_WIDTH - rect.width() - 1;
+ priOffset += SCREEN_WIDTH - rect.width() - 1;
}
break;
}
@@ -197,8 +197,8 @@ void Graphics::drawSprite(const Sprite &sprite, const Common::Rect &rect) {
byte *src = sprite.bitmap->pixels + (rect.left - sprite.drawX)
+ (rect.top - sprite.drawY) * sprite.bitmap->width;
- for (int y=rect.top; y<rect.bottom; y++) {
- for (int x=rect.left; x<rect.right; x++) {
+ for (int y=rect.top; y<=rect.bottom; y++) {
+ for (int x=rect.left; x<=rect.right; x++) {
byte b = *src;
if (b == 0) // Transparent (darken the pixel)
@@ -210,8 +210,8 @@ void Graphics::drawSprite(const Sprite &sprite, const Common::Rect &rect) {
dest++;
}
- src += sprite.bitmap->width - rect.width();
- dest += SCREEN_WIDTH - rect.width();
+ src += sprite.bitmap->width - rect.width() - 1;
+ dest += SCREEN_WIDTH - rect.width() - 1;
}
break;