[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