[Scummvm-git-logs] scummvm master -> 61d97898dac25985c63c9a5c01e8936428b2f444

mduggan mgithub at guarana.org
Sun May 2 14:50:09 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:
61d97898da ULTIMA8: Set fixed RAND_MAX to avoid platform differences


Commit: 61d97898dac25985c63c9a5c01e8936428b2f444
    https://github.com/scummvm/scummvm/commit/61d97898dac25985c63c9a5c01e8936428b2f444
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-02T23:48:41+09:00

Commit Message:
ULTIMA8: Set fixed RAND_MAX to avoid platform differences

This should fix bug #12182 which seems to be caused by a difference in the MSVC
RAND_MAX compared to posix systems.

Changed paths:
    engines/ultima/ultima8/kernel/kernel.cpp
    engines/ultima/ultima8/kernel/kernel.h
    engines/ultima/ultima8/world/actors/actor.cpp
    engines/ultima/ultima8/world/gravity_process.cpp


diff --git a/engines/ultima/ultima8/kernel/kernel.cpp b/engines/ultima/ultima8/kernel/kernel.cpp
index fd42493528..3632ca17ec 100644
--- a/engines/ultima/ultima8/kernel/kernel.cpp
+++ b/engines/ultima/ultima8/kernel/kernel.cpp
@@ -396,8 +396,10 @@ uint32 Kernel::I_resetRef(const uint8 *args, unsigned int /*argsize*/) {
 	return 0;
 }
 
+const uint U8_RAND_MAX = 0x7fffffff;
+
 uint getRandom() {
-	return Ultima8Engine::get_instance()->getRandomNumber(0x7fffffff);
+	return Ultima8Engine::get_instance()->getRandomNumber(U8_RAND_MAX);
 }
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/kernel/kernel.h b/engines/ultima/ultima8/kernel/kernel.h
index 82c6d0a2ae..658d9c6233 100644
--- a/engines/ultima/ultima8/kernel/kernel.h
+++ b/engines/ultima/ultima8/kernel/kernel.h
@@ -157,8 +157,11 @@ private:
 	static Kernel *_kernel;
 };
 
+
+extern const uint U8_RAND_MAX;
 extern uint getRandom();
 
+
 } // End of namespace Ultima8
 } // End of namespace Ultima
 
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index ba2823c557..4bc643e39c 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -177,7 +177,7 @@ bool Actor::giveTreasure() {
 
 		// check chance
 		if (ti._chance < 0.999 &&
-		        (static_cast<double>(getRandom()) / RAND_MAX) > ti._chance) {
+		        (static_cast<double>(getRandom()) / U8_RAND_MAX) > ti._chance) {
 			continue;
 		}
 
@@ -897,6 +897,8 @@ void Actor::receiveHitCru(uint16 other, Direction dir, int damage, uint16 damage
 		doAnim(Animation::teleportOutReplacement, dir_current);
 		doAnim(Animation::teleportInReplacement, dir_current);
 		_hitPoints -= damage;
+		//if (_hitPoints < 0)
+		//	_hitPoints = 0;
 		return;
 	}
 
diff --git a/engines/ultima/ultima8/world/gravity_process.cpp b/engines/ultima/ultima8/world/gravity_process.cpp
index 7e28898f55..56c69ad49d 100644
--- a/engines/ultima/ultima8/world/gravity_process.cpp
+++ b/engines/ultima/ultima8/world/gravity_process.cpp
@@ -169,7 +169,7 @@ void GravityProcess::run() {
 				// in a 180 degree pie around the orginal vector in x/y
 				double heading_r = atan2((double)_ySpeed, (double)_xSpeed);
 				double deltah_r = static_cast<double>(getRandom())
-				                  * M_PI / RAND_MAX - M_PI / 2;
+				                  * M_PI / U8_RAND_MAX - M_PI / 2;
 #ifdef BOUNCE_DIAG
 				double headingold_r = heading_r;
 #endif




More information about the Scummvm-git-logs mailing list