[Scummvm-git-logs] scummvm master -> 5e55196ed882d80f0bd905e14acb5c9ab1140e68

fracturehill noreply at scummvm.org
Mon Jan 22 20:22:21 UTC 2024


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:
5e55196ed8 NANCY: Attempt to fix RaycastPuzzle on ARM


Commit: 5e55196ed882d80f0bd905e14acb5c9ab1140e68
    https://github.com/scummvm/scummvm/commit/5e55196ed882d80f0bd905e14acb5c9ab1140e68
Author: Kaloyan Chehlarski (strahy at outlook.com)
Date: 2024-01-22T21:22:01+01:00

Commit Message:
NANCY: Attempt to fix RaycastPuzzle on ARM

The floor and ceiling drawing in RaycastPuzzle is broken
on ARM processors. This commit attempts to fix it, based
on an assumption of precision loss in large floating point
numbers.

Changed paths:
    engines/nancy/action/puzzle/raycastpuzzle.cpp


diff --git a/engines/nancy/action/puzzle/raycastpuzzle.cpp b/engines/nancy/action/puzzle/raycastpuzzle.cpp
index 09703a353f6..5f7a5cde2b9 100644
--- a/engines/nancy/action/puzzle/raycastpuzzle.cpp
+++ b/engines/nancy/action/puzzle/raycastpuzzle.cpp
@@ -1939,7 +1939,7 @@ void RaycastPuzzle::drawMaze() {
 
 	for (int floorY = viewportCenterY + 5; floorY < viewBounds.bottom; ++floorY) {
 		int ceilingY = viewportCenterY - (floorY - viewportCenterY) + 1;
-		uint32 	floorSrcFracX, floorSrcFracY,
+		int32 	floorSrcFracX, floorSrcFracY,
 				ceilingSrcFracX, ceilingSrcFracY,
 				floorSrcIncrementX, floorSrcIncrementY,
 				ceilingSrcIncrementX, ceilingSrcIncrementY;
@@ -1961,17 +1961,17 @@ void RaycastPuzzle::drawMaze() {
 			float ceilingLeftY  =	_sinTable[leftAngle]  * -(ceilingViewAngle / _cosTable[_leftmostAngle])  + (float)_playerX;
 			float ceilingRightY =	_sinTable[rightAngle] * -(ceilingViewAngle / _cosTable[_rightmostAngle]) + (float)_playerX;
 
-			floorSrcFracX	= (uint32)(floorLeftX	* 65536.0);
-			floorSrcFracY	= (uint32)(floorLeftY	* 65536.0);
+			floorSrcFracX	= (uint32)((double)floorLeftX	* 65536.0);
+			floorSrcFracY	= (uint32)((double)floorLeftY	* 65536.0);
 
-			ceilingSrcFracX = (uint32)(ceilingLeftX * 65536.0);
-			ceilingSrcFracY = (uint32)(ceilingLeftY * 65536.0);
+			ceilingSrcFracX = (uint32)((double)ceilingLeftX * 65536.0);
+			ceilingSrcFracY = (uint32)((double)ceilingLeftY * 65536.0);
 
-			floorSrcIncrementX 		= (uint32)(((floorRightX	- floorLeftX)	/ (float)viewBounds.width()) * 65536.0);
-			floorSrcIncrementY 		= (uint32)(((floorRightY	- floorLeftY)	/ (float)viewBounds.width()) * 65536.0);
+			floorSrcIncrementX 		= (uint32)((double)((floorRightX	- floorLeftX)	/ (float)viewBounds.width()) * 65536.0);
+			floorSrcIncrementY 		= (uint32)((double)((floorRightY	- floorLeftY)	/ (float)viewBounds.width()) * 65536.0);
 
-			ceilingSrcIncrementX 	= (uint32)(((ceilingRightX	- ceilingLeftX) / (float)viewBounds.width()) * 65536.0);
-			ceilingSrcIncrementY 	= (uint32)(((ceilingRightY	- ceilingLeftY) / (float)viewBounds.width()) * 65536.0);
+			ceilingSrcIncrementX 	= (uint32)((double)((ceilingRightX	- ceilingLeftX) / (float)viewBounds.width()) * 65536.0);
+			ceilingSrcIncrementY 	= (uint32)((double)((ceilingRightY	- ceilingLeftY) / (float)viewBounds.width()) * 65536.0);
 		}
 
 		for (int x = viewBounds.left; x < viewBounds.right; ++x) {




More information about the Scummvm-git-logs mailing list