[Scummvm-git-logs] scummvm master -> 305aea78b1bfcaa8e479af93674a1c9895427593
Strangerke
Strangerke at scummvm.org
Sun May 30 22:00:16 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
305aea78b1 TRECISION: Fix Dissolve() with safeguards
Commit: 305aea78b1bfcaa8e479af93674a1c9895427593
https://github.com/scummvm/scummvm/commit/305aea78b1bfcaa8e479af93674a1c9895427593
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2021-05-30T23:00:08+01:00
Commit Message:
TRECISION: Fix Dissolve() with safeguards
Changed paths:
engines/trecision/graphics.cpp
diff --git a/engines/trecision/graphics.cpp b/engines/trecision/graphics.cpp
index d3b33c4080..0780aa7fe5 100644
--- a/engines/trecision/graphics.cpp
+++ b/engines/trecision/graphics.cpp
@@ -404,8 +404,6 @@ uint16 GraphicsManager::aliasing(uint32 val1, uint32 val2, uint8 num) {
}
void GraphicsManager::dissolve() {
- // FIXME: This is writing OOB. Disabled for now
-#if 0
const uint16 val = 30;
uint16 centerX = MAXX / 2;
uint16 centerY = MAXY / 2;
@@ -444,14 +442,20 @@ void GraphicsManager::dissolve() {
x += 1.0f;
int rightX = centerX + (int)x;
+ int maxY = centerY + (int)y;
+ int minY = centerY - (int)y;
if (rightX < MAXX) {
- memset(_screenBuffer.getBasePtr(rightX, centerY + (int)y), 0, (MAXX - rightX) * 2);
- memset(_screenBuffer.getBasePtr(rightX, centerY - (int)y), 0, (MAXX - rightX) * 2);
+ if (maxY < MAXY)
+ memset(_screenBuffer.getBasePtr(rightX, maxY), 0, (MAXX - rightX) * 2);
+ if (minY >= 0)
+ memset(_screenBuffer.getBasePtr(rightX, minY), 0, (MAXX - rightX) * 2);
}
int leftX = centerX - (int)x;
if (leftX > 0) {
- memset(_screenBuffer.getBasePtr(0, centerY + (int)y), 0, leftX * 2);
- memset(_screenBuffer.getBasePtr(0, centerY - (int)y), 0, leftX * 2);
+ if (maxY < MAXY)
+ memset(_screenBuffer.getBasePtr(0, maxY), 0, leftX * 2);
+ if (minY >= 0)
+ memset(_screenBuffer.getBasePtr(0, minY), 0, leftX * 2);
}
}
@@ -465,14 +469,20 @@ void GraphicsManager::dissolve() {
y -= 1.0f;
int rightX = centerX + (int)x;
+ int maxY = centerY + (int)y;
+ int minY = centerY - (int)y;
if (rightX < MAXX) {
- memset(_screenBuffer.getBasePtr(rightX, centerY + (int)y), 0, (MAXX - rightX) * 2);
- memset(_screenBuffer.getBasePtr(rightX, centerY - (int)y), 0, (MAXX - rightX) * 2);
+ if (maxY < MAXY)
+ memset(_screenBuffer.getBasePtr(rightX, maxY), 0, (MAXX - rightX) * 2);
+ if (minY >= 0)
+ memset(_screenBuffer.getBasePtr(rightX, minY), 0, (MAXX - rightX) * 2);
}
int leftX = centerX - (int)x;
if (leftX > 0) {
- memset(_screenBuffer.getBasePtr(0, centerY + (int)y), 0, leftX * 2);
- memset(_screenBuffer.getBasePtr(0, centerY - (int)y), 0, leftX * 2);
+ if (maxY < MAXY)
+ memset(_screenBuffer.getBasePtr(0, maxY), 0, leftX * 2);
+ if (minY >= 0)
+ memset(_screenBuffer.getBasePtr(0, minY), 0, leftX * 2);
}
}
@@ -480,8 +490,6 @@ void GraphicsManager::dissolve() {
cv = _vm->readTime();
}
-#endif
-
clearScreen();
}
More information about the Scummvm-git-logs
mailing list