[Scummvm-git-logs] scummvm master -> 7c20b07ffb3b9260d3b9f250a7d6041769ad7b5f

antoniou79 antoniou at cti.gr
Mon Sep 16 11:03:13 CEST 2019


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:
7c20b07ffb BLADERUNNER: Add engine gui option to avoid use of delayMillis()


Commit: 7c20b07ffb3b9260d3b9f250a7d6041769ad7b5f
    https://github.com/scummvm/scummvm/commit/7c20b07ffb3b9260d3b9f250a7d6041769ad7b5f
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-09-16T12:00:25+03:00

Commit Message:
BLADERUNNER: Add engine gui option to avoid use of delayMillis()

Changed paths:
    engines/bladerunner/bladerunner.cpp
    engines/bladerunner/bladerunner.h
    engines/bladerunner/detection.cpp
    engines/bladerunner/detection_tables.h
    engines/bladerunner/framelimiter.cpp
    engines/bladerunner/ui/kia.cpp


diff --git a/engines/bladerunner/bladerunner.cpp b/engines/bladerunner/bladerunner.cpp
index b0d322f..76a95ab 100644
--- a/engines/bladerunner/bladerunner.cpp
+++ b/engines/bladerunner/bladerunner.cpp
@@ -111,9 +111,10 @@ BladeRunnerEngine::BladeRunnerEngine(OSystem *syst, const ADGameDescription *des
 
 	_subtitlesEnabled = false;
 
-	_sitcomMode       = false;
-	_shortyMode       = false;
-	_cutContent       = Common::String(desc->gameId).contains("bladerunner-final");
+	_sitcomMode                = false;
+	_shortyMode                = false;
+	_noDelayMillisFramelimiter = false;
+	_cutContent                = Common::String(desc->gameId).contains("bladerunner-final");
 
 	_playerLosesControlCounter = 0;
 
@@ -559,8 +560,13 @@ bool BladeRunnerEngine::startup(bool hasSavegames) {
 	// get value from the ScummVM configuration manager
 	syncSoundSettings();
 
-	_sitcomMode = ConfMan.getBool("sitcom");
-	_shortyMode = ConfMan.getBool("shorty");
+	_sitcomMode                = ConfMan.getBool("sitcom");
+	_shortyMode                = ConfMan.getBool("shorty");
+
+	if (!ConfMan.hasKey("nodelaymillisfl")) {
+		ConfMan.setBool("nodelaymillisfl", false);
+	}
+	_noDelayMillisFramelimiter = ConfMan.getBool("nodelaymillisfl");
 	// BLADE.INI was read here, but it was replaced by ScummVM configuration
 
 	_chapters = new Chapters(this);
diff --git a/engines/bladerunner/bladerunner.h b/engines/bladerunner/bladerunner.h
index 95b85f3..e02e4fb 100644
--- a/engines/bladerunner/bladerunner.h
+++ b/engines/bladerunner/bladerunner.h
@@ -215,6 +215,7 @@ public:
 	bool _subtitlesEnabled;  // tracks the state of whether subtitles are enabled or disabled from ScummVM GUI option or KIA checkbox (the states are synched)
 	bool _sitcomMode;
 	bool _shortyMode;
+	bool _noDelayMillisFramelimiter;
 	bool _cutContent;
 
 	int _walkSoundId;
diff --git a/engines/bladerunner/detection.cpp b/engines/bladerunner/detection.cpp
index 33c3dda..26772e2 100644
--- a/engines/bladerunner/detection.cpp
+++ b/engines/bladerunner/detection.cpp
@@ -60,6 +60,15 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			false
 		}
 	},
+	{
+		GAMEOPTION_FRAMELIMITER_NODELAYMILLIS,
+		{
+			_s("Frame limiter high performance mode"),
+			_s("This mode may result in high CPU usage! It avoids use of delayMillis() function."),
+			"nodelaymillisfl",
+			false
+		}
+	},
 	AD_EXTRA_GUI_OPTIONS_TERMINATOR
 };
 
diff --git a/engines/bladerunner/detection_tables.h b/engines/bladerunner/detection_tables.h
index 7f45c61..b077529 100644
--- a/engines/bladerunner/detection_tables.h
+++ b/engines/bladerunner/detection_tables.h
@@ -25,9 +25,9 @@
 
 #include "engines/advancedDetector.h"
 
-#define GAMEOPTION_SITCOM GUIO_GAMEOPTIONS1
-#define GAMEOPTION_SHORTY GUIO_GAMEOPTIONS2
-#define GAMEOPTION_CUT_CONTENT GUIO_GAMEOPTIONS3
+#define GAMEOPTION_SITCOM                     GUIO_GAMEOPTIONS1
+#define GAMEOPTION_SHORTY                     GUIO_GAMEOPTIONS2
+#define GAMEOPTION_FRAMELIMITER_NODELAYMILLIS GUIO_GAMEOPTIONS3
 
 namespace BladeRunner {
 
@@ -40,7 +40,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::EN_ANY,
 		Common::kPlatformWindows,
 		ADGF_TESTING,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// BladeRunner (German)
@@ -51,7 +51,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::DE_DEU,
 		Common::kPlatformWindows,
 		ADGF_TESTING,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// BladeRunner (French) - Bug #9722
@@ -62,7 +62,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::FR_FRA,
 		Common::kPlatformWindows,
 		ADGF_TESTING,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// BladeRunner (Italian)
@@ -73,7 +73,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::IT_ITA,
 		Common::kPlatformWindows,
 		ADGF_TESTING,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// BladeRunner (Russian - Fargus Multimedia + Home Systems, Inc.)
@@ -84,7 +84,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::RU_RUS,
 		Common::kPlatformWindows,
 		ADGF_TESTING,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// BladeRunner (Russian - Fargus Multimedia + Home Systems, Inc. + Siberian Studio, R3)
@@ -95,7 +95,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::RU_RUS,
 		Common::kPlatformWindows,
 		ADGF_TESTING,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// BladeRunner (Russian - Fargus Multimedia + Home Systems, Inc. + Siberian Studio, R4)
@@ -106,7 +106,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::RU_RUS,
 		Common::kPlatformWindows,
 		ADGF_TESTING,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// BladeRunner (Spanish)
@@ -117,7 +117,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::ES_ESP,
 		Common::kPlatformWindows,
 		ADGF_TESTING,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// Versions with restored content
@@ -130,7 +130,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::EN_ANY,
 		Common::kPlatformWindows,
 		ADGF_UNSTABLE,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// BladeRunner (German)
@@ -141,7 +141,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::DE_DEU,
 		Common::kPlatformWindows,
 		ADGF_UNSTABLE,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// BladeRunner (French)
@@ -152,7 +152,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::FR_FRA,
 		Common::kPlatformWindows,
 		ADGF_UNSTABLE,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// BladeRunner (Italian)
@@ -163,7 +163,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::IT_ITA,
 		Common::kPlatformWindows,
 		ADGF_UNSTABLE,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// BladeRunner (Russian - Fargus Multimedia + Home Systems, Inc.)
@@ -174,7 +174,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::RU_RUS,
 		Common::kPlatformWindows,
 		ADGF_UNSTABLE,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// BladeRunner (Russian - Fargus Multimedia + Home Systems, Inc. + Siberian Studio, R3)
@@ -185,7 +185,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::RU_RUS,
 		Common::kPlatformWindows,
 		ADGF_UNSTABLE,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	// BladeRunner (Russian - Fargus Multimedia + Home Systems, Inc. + Siberian Studio, R4)
@@ -196,7 +196,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::RU_RUS,
 		Common::kPlatformWindows,
 		ADGF_UNSTABLE,
-		GUIO2(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY)
+		GUIO3(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS)
 	},
 
 	AD_TABLE_END_MARKER
diff --git a/engines/bladerunner/framelimiter.cpp b/engines/bladerunner/framelimiter.cpp
index 5a2dee1..20f60ce 100644
--- a/engines/bladerunner/framelimiter.cpp
+++ b/engines/bladerunner/framelimiter.cpp
@@ -56,7 +56,11 @@ void Framelimiter::wait() {
 	uint32 frameDuration = timeNow - _timeFrameStart;
 	if (frameDuration < _speedLimitMs) {
 		uint32 waittime = _speedLimitMs - frameDuration;
-		_vm->_system->delayMillis(waittime);
+		if (_vm->_noDelayMillisFramelimiter) {
+			while (_vm->_time->currentSystem() - timeNow < waittime) { }
+		} else {
+			_vm->_system->delayMillis(waittime);
+		}
 		timeNow += waittime;
 	}
 	// debug("frametime %i ms", timeNow - _timeFrameStart);
diff --git a/engines/bladerunner/ui/kia.cpp b/engines/bladerunner/ui/kia.cpp
index 32704fc..65e3e84 100644
--- a/engines/bladerunner/ui/kia.cpp
+++ b/engines/bladerunner/ui/kia.cpp
@@ -666,8 +666,14 @@ void KIA::mouseDownCallback(int buttonId, void *callbackData) {
 			int endTrackId = self->_vm->_audioPlayer->playAud(self->_vm->_gameInfo->getSfxTrack(kSfxSHUTDOWN), 70, 0, 0, 50, 0);
 			if (endTrackId != -1) {
 				// wait until the full clip has played (similar to the original)
+				uint32 timeNow = self->_vm->_time->currentSystem();
+				uint32 waittime = 16;
 				while (self->_vm->_audioPlayer->isActive(endTrackId)) {
-					self->_vm->_system->delayMillis(16);
+					if (self->_vm->_noDelayMillisFramelimiter) {
+						while (self->_vm->_time->currentSystem() - timeNow < waittime) { }
+					} else {
+						self->_vm->_system->delayMillis(waittime);
+					}
 				}
 			}
 		}





More information about the Scummvm-git-logs mailing list