[Scummvm-git-logs] scummvm master -> 0c203f7edf855de0c75f9009cc14e6ce47e93191

antoniou79 a.antoniou79 at gmail.com
Mon Aug 2 12:41:13 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:
0c203f7edf BLADERUNNER: Don't keep bad uninitialized values on load


Commit: 0c203f7edf855de0c75f9009cc14e6ce47e93191
    https://github.com/scummvm/scummvm/commit/0c203f7edf855de0c75f9009cc14e6ce47e93191
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2021-08-02T15:41:04+03:00

Commit Message:
BLADERUNNER: Don't keep bad uninitialized values on load

For ambient sound tracks

Changed paths:
    engines/bladerunner/ambient_sounds.cpp
    engines/bladerunner/script/script.cpp


diff --git a/engines/bladerunner/ambient_sounds.cpp b/engines/bladerunner/ambient_sounds.cpp
index d4e1d82b9e..3ebd8f8f87 100644
--- a/engines/bladerunner/ambient_sounds.cpp
+++ b/engines/bladerunner/ambient_sounds.cpp
@@ -487,10 +487,8 @@ void AmbientSounds::load(SaveFileReadStream &f) {
 		f.skip(4); // track.nextPlayTime is not used after load
 		track.nextPlayTimeStart = now;
 #if BLADERUNNER_ORIGINAL_BUGS
-#else
-		sort(&(track.delayMin), &(track.delayMax));
-#endif // BLADERUNNER_ORIGINAL_BUGS
 		track.nextPlayTimeDiff  = _vm->_rnd.getRandomNumberRng(track.delayMin, track.delayMax);
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		track.volumeMin = f.readInt();
 		track.volumeMax = f.readInt();
 		track.volume = f.readInt();
@@ -498,15 +496,34 @@ void AmbientSounds::load(SaveFileReadStream &f) {
 		track.panStartMax = f.readInt();
 		track.panEndMin = f.readInt();
 		track.panEndMax = f.readInt();
-#if BLADERUNNER_ORIGINAL_BUGS
-#else
-		sort(&(track.volumeMin), &(track.volumeMax));
-		sort(&(track.panStartMin), &(track.panStartMax));
-		sort(&(track.panEndMin), &(track.panEndMax));
-#endif // BLADERUNNER_ORIGINAL_BUGS
 		track.priority = f.readInt();
 		f.skip(4); // field_45
 		track.soundType = -1;
+#if !BLADERUNNER_ORIGINAL_BUGS
+		// Since unused ambient sound track fields are unitialized
+		// don't keep garbage field values for non-active tracks
+		// This was basically an issue when calling _vm->_rnd.getRandomNumberRng()
+		// with uninitialized fields, but it's a good practice to sanitize the fields here anyway
+		if (!track.isActive) {
+			track.delayMin = 0u;
+			track.delayMax = 0u;
+			track.nextPlayTimeDiff  = 0u;
+			track.volumeMin = 0;
+			track.volumeMax = 0;
+			track.volume = 0;
+			track.panStartMin = 0;
+			track.panStartMax = 0;
+			track.panEndMin = 0;
+			track.panEndMax = 0;
+			track.priority = 0;
+		} else {
+			sort(&(track.delayMin), &(track.delayMax));
+			track.nextPlayTimeDiff  = _vm->_rnd.getRandomNumberRng(track.delayMin, track.delayMax);
+			sort(&(track.volumeMin), &(track.volumeMax));
+			sort(&(track.panStartMin), &(track.panStartMax));
+			sort(&(track.panEndMin), &(track.panEndMax));
+		}
+#endif // !BLADERUNNER_ORIGINAL_BUGS
 	}
 
 	for (int i = 0; i != kLoopingSounds; ++i) {
@@ -519,6 +536,14 @@ void AmbientSounds::load(SaveFileReadStream &f) {
 		track.volume = f.readInt();
 		track.pan = f.readInt();
 		track.soundType = -1;
+#if !BLADERUNNER_ORIGINAL_BUGS
+		// Since unused ambient sound track fields are unitialized
+		// don't keep garbage field values for non-active tracks
+		if (!track.isActive) {
+			track.volume = 0;
+			track.pan = 0;
+		}
+#endif // !BLADERUNNER_ORIGINAL_BUGS
 	}
 
 	for (int i = 0; i != kLoopingSounds; ++i) {
diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp
index eb30bd2595..8f47626010 100644
--- a/engines/bladerunner/script/script.cpp
+++ b/engines/bladerunner/script/script.cpp
@@ -1093,12 +1093,10 @@ int ScriptBase::Global_Variable_Decrement(int var, int dec) {
 
 int ScriptBase::Random_Query(int min, int max) {
 	debugC(9, kDebugScript, "Random_Query(%d, %d)", min, max);
-	if ( min == max )
-	{
+	if ( min == max ) {
 		return min;
 	}
-	if ( min > max ) // there is at least one such case
-	{
+	if ( min > max ) { // there is at least one such case
 		return _vm->_rnd.getRandomNumberRng(max, min); // swap the arguments
 	}
 	return _vm->_rnd.getRandomNumberRng(min, max);




More information about the Scummvm-git-logs mailing list