[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