[Scummvm-git-logs] scummvm master -> 11adaa4f3db382451e3a87bc584d722487b41465
antoniou79
a.antoniou79 at gmail.com
Thu Feb 27 18:27:46 UTC 2020
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:
11adaa4f3d BLADERUNNER: Add engine option to disable stamina drain
Commit: 11adaa4f3db382451e3a87bc584d722487b41465
https://github.com/scummvm/scummvm/commit/11adaa4f3db382451e3a87bc584d722487b41465
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2020-02-27T20:27:29+02:00
Commit Message:
BLADERUNNER: Add engine option to disable stamina drain
Allows not having to constantly click the mouse to keep McCoy from slowing down
Even though this was a bug in the original game, having this option re-creates the original experience of McCoy running quite fast (still keeping the 30 fps limit) and not slowing down when the player stops clicking.
Changed paths:
engines/bladerunner/actor.cpp
engines/bladerunner/bladerunner.cpp
engines/bladerunner/bladerunner.h
engines/bladerunner/detection.cpp
engines/bladerunner/detection_tables.h
diff --git a/engines/bladerunner/actor.cpp b/engines/bladerunner/actor.cpp
index 2d753be415..3eb5d6f95f 100644
--- a/engines/bladerunner/actor.cpp
+++ b/engines/bladerunner/actor.cpp
@@ -226,26 +226,32 @@ void Actor::increaseFPS() {
int fps = MIN(_fps + 3, 30);
setFPS(fps);
- // Only McCoy is using the stamina timer in the game
- if (_id == kActorMcCoy) {
- if (_vm->_cutContent) {
- if (_fps > 20 && oldFps < _fps) {
- // only start the stamina timer
- // when McCoy's fps are more than 20 fps and purely increased
- // and only if the new drain interval is smaller than the previous one
- // the start drain interval is supposed to be slow
- // starting from 10 seconds and decreasing as low as 1 second
- // (It will barely come into play basically)
- int nextStaminaDrainInterval = (31 - _fps) * 1000;
- if (nextStaminaDrainInterval < timerLeft(kActorTimerRunningStaminaFPS)) {
- timerStart(kActorTimerRunningStaminaFPS, nextStaminaDrainInterval);
+ // Note: When stamina drain is disabled, McCoy returns to normal fps
+ // (which is the default for his animations ie. 15 fps)
+ // on his actor->tick() method, when he switches from running to walking animation
+ // and setFPS(-2) is called
+ if (!_vm->_disableStaminaDrain) {
+ // Only McCoy is using the stamina timer in the game
+ if (_id == kActorMcCoy) {
+ if (_vm->_cutContent) {
+ if (_fps > 20 && oldFps < _fps) {
+ // only start the stamina timer
+ // when McCOy's fps are more than 20 fps and purely increased
+ // and only if the new drain interval is smaller than the previous one
+ // the start drain interval is supposed to be slow
+ // starting from 10 seconds and decreasing as low as 1 second
+ // (It will barely come into play basically)
+ int nextStaminaDrainInterval = (31 - _fps) * 1000;
+ if (nextStaminaDrainInterval < timerLeft(kActorTimerRunningStaminaFPS)) {
+ timerStart(kActorTimerRunningStaminaFPS, nextStaminaDrainInterval);
+ }
+ }
+ } else {
+ // just prevent any rogue state for stamina timer being 0
+ // at any time when McCoy's fps get increased
+ if (timerLeft(kActorTimerRunningStaminaFPS) == 0) {
+ timerStart(kActorTimerRunningStaminaFPS, 200);
}
- }
- } else {
- // just prevent any rogue state for stamina timer being 0
- // at any time when McCoy's fps get increased
- if (timerLeft(kActorTimerRunningStaminaFPS) == 0) {
- timerStart(kActorTimerRunningStaminaFPS, 200);
}
}
}
@@ -318,30 +324,42 @@ void Actor::timerUpdate(int timerId) {
// Actor animation frame timer
break;
case kActorTimerRunningStaminaFPS:
- if (isRunning()) {
- if (_fps > 15) {
- int newFps = _fps - 2;
- if (newFps < 15) {
- newFps = 15;
+ // If stamina drain is disabled then
+ // the timer will become zero and won't get initialized again
+ // This is better than entirely skipping updating this specific timer
+ // which would include constantly checking for it in a frequently repeated loop
+ // If stamina drain is re-enabled, the timer will get initialized
+ // either:
+ // Vanilla mode: when McCoy starts running,
+ // or if starting new game
+ // or if loading a game where the timer was stored as 0
+ // Restored Content mode: when McCoy starts running fast enough
+ if (!_vm->_disableStaminaDrain) {
+ if (isRunning()) {
+ if (_fps > 15) {
+ int newFps = _fps - 2;
+ if (newFps < 15) {
+ newFps = 15;
+ }
+ setFPS(newFps);
}
- setFPS(newFps);
}
- }
#if BLADERUNNER_ORIGINAL_BUGS
- _timersLeft[kActorTimerRunningStaminaFPS] = 200;
+ _timersLeft[kActorTimerRunningStaminaFPS] = 200;
#else
- if (_vm->_cutContent) {
- if (isRunning()) {
- // drain faster if closer to max fps (30), else slower
- _timersLeft[kActorTimerRunningStaminaFPS] = (31 - _fps) * 200;
+ if (_vm->_cutContent) {
+ if (isRunning()) {
+ // drain faster if closer to max fps (30), else slower
+ _timersLeft[kActorTimerRunningStaminaFPS] = (31 - _fps) * 200;
+ } else {
+ // not running - stop the timer
+ timerReset(kActorTimerRunningStaminaFPS);
+ }
} else {
- // not running - stop the timer
- timerReset(kActorTimerRunningStaminaFPS);
+ _timersLeft[kActorTimerRunningStaminaFPS] = 200;
}
- } else {
- _timersLeft[kActorTimerRunningStaminaFPS] = 200;
- }
#endif // BLADERUNNER_ORIGINAL_BUGS
+ }
break;
default:
break;
diff --git a/engines/bladerunner/bladerunner.cpp b/engines/bladerunner/bladerunner.cpp
index 7b0867c86c..75fc74cc94 100644
--- a/engines/bladerunner/bladerunner.cpp
+++ b/engines/bladerunner/bladerunner.cpp
@@ -116,6 +116,7 @@ BladeRunnerEngine::BladeRunnerEngine(OSystem *syst, const ADGameDescription *des
_shortyMode = false;
_noDelayMillisFramelimiter = false;
_framesPerSecondMax = false;
+ _disableStaminaDrain = false;
_cutContent = Common::String(desc->gameId).contains("bladerunner-final");
_playerLosesControlCounter = 0;
@@ -476,11 +477,13 @@ bool BladeRunnerEngine::startup(bool hasSavegames) {
ConfMan.registerDefault("shorty", "false");
ConfMan.registerDefault("nodelaymillisfl", "false");
ConfMan.registerDefault("frames_per_secondfl", "false");
+ ConfMan.registerDefault("disable_stamina_drain", "false");
_sitcomMode = ConfMan.getBool("sitcom");
_shortyMode = ConfMan.getBool("shorty");
_noDelayMillisFramelimiter = ConfMan.getBool("nodelaymillisfl");
_framesPerSecondMax = ConfMan.getBool("frames_per_secondfl");
+ _disableStaminaDrain = ConfMan.getBool("disable_stamina_drain");
// These are static objects in original game
_screenEffects = new ScreenEffects(this, 0x8000);
diff --git a/engines/bladerunner/bladerunner.h b/engines/bladerunner/bladerunner.h
index 45bed4d2c6..321a2cc0ca 100644
--- a/engines/bladerunner/bladerunner.h
+++ b/engines/bladerunner/bladerunner.h
@@ -216,6 +216,7 @@ public:
bool _shortyMode;
bool _noDelayMillisFramelimiter;
bool _framesPerSecondMax;
+ bool _disableStaminaDrain;
bool _cutContent;
int _walkSoundId;
diff --git a/engines/bladerunner/detection.cpp b/engines/bladerunner/detection.cpp
index c413b2b4d6..0b182dda68 100644
--- a/engines/bladerunner/detection.cpp
+++ b/engines/bladerunner/detection.cpp
@@ -78,6 +78,15 @@ static const ADExtraGuiOptionsMap optionsList[] = {
false
}
},
+ {
+ GAMEOPTION_DISABLE_STAMINA_DRAIN,
+ {
+ _s("Disable McCoy's quick stamina drain"),
+ _s("When running, McCoy won't start slowing down as soon as the player stops clicking the mouse"),
+ "disable_stamina_drain",
+ false
+ }
+ },
AD_EXTRA_GUI_OPTIONS_TERMINATOR
};
diff --git a/engines/bladerunner/detection_tables.h b/engines/bladerunner/detection_tables.h
index 6ffce36725..8d5b7ec427 100644
--- a/engines/bladerunner/detection_tables.h
+++ b/engines/bladerunner/detection_tables.h
@@ -29,6 +29,7 @@
#define GAMEOPTION_SHORTY GUIO_GAMEOPTIONS2
#define GAMEOPTION_FRAMELIMITER_NODELAYMILLIS GUIO_GAMEOPTIONS3
#define GAMEOPTION_FRAMELIMITER_FPS GUIO_GAMEOPTIONS4
+#define GAMEOPTION_DISABLE_STAMINA_DRAIN GUIO_GAMEOPTIONS5
namespace BladeRunner {
@@ -41,7 +42,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformWindows,
ADGF_NO_FLAGS,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (German) - DEU
@@ -52,7 +53,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::DE_DEU,
Common::kPlatformWindows,
ADGF_NO_FLAGS,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (French) - FRA - Bug #9722
@@ -63,7 +64,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::FR_FRA,
Common::kPlatformWindows,
ADGF_NO_FLAGS,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (Italian) - ITA
@@ -74,7 +75,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::IT_ITA,
Common::kPlatformWindows,
ADGF_NO_FLAGS,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (Russian - Fargus Multimedia + Home Systems, Inc.) - RUS
@@ -85,7 +86,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::RU_RUS,
Common::kPlatformWindows,
ADGF_NO_FLAGS,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (Russian - Fargus Multimedia + Home Systems, Inc. + Siberian Studio, R3) - RUS
@@ -96,7 +97,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::RU_RUS,
Common::kPlatformWindows,
ADGF_NO_FLAGS,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (Russian - Fargus Multimedia + Home Systems, Inc. + Siberian Studio, R4) - RUS
@@ -107,7 +108,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::RU_RUS,
Common::kPlatformWindows,
ADGF_NO_FLAGS,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (Spanish) - ESP
@@ -118,7 +119,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::ES_ESP,
Common::kPlatformWindows,
ADGF_NO_FLAGS,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// Versions with restored content
@@ -131,7 +132,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformWindows,
ADGF_UNSTABLE,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (German) - DEU
@@ -142,7 +143,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::DE_DEU,
Common::kPlatformWindows,
ADGF_UNSTABLE,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (French) - FRA
@@ -153,7 +154,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::FR_FRA,
Common::kPlatformWindows,
ADGF_UNSTABLE,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (Italian) - ITA
@@ -164,7 +165,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::IT_ITA,
Common::kPlatformWindows,
ADGF_UNSTABLE,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (Russian - Fargus Multimedia + Home Systems, Inc.) - RUS
@@ -175,7 +176,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::RU_RUS,
Common::kPlatformWindows,
ADGF_UNSTABLE,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (Russian - Fargus Multimedia + Home Systems, Inc. + Siberian Studio, R3) - RUS
@@ -186,7 +187,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::RU_RUS,
Common::kPlatformWindows,
ADGF_UNSTABLE,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (Russian - Fargus Multimedia + Home Systems, Inc. + Siberian Studio, R4) - RUS
@@ -197,7 +198,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::RU_RUS,
Common::kPlatformWindows,
ADGF_UNSTABLE,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
// BladeRunner (Spanish) - ESP
@@ -208,7 +209,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::ES_ESP,
Common::kPlatformWindows,
ADGF_UNSTABLE,
- GUIO5(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GUIO_NOMIDI)
+ GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
},
AD_TABLE_END_MARKER
More information about the Scummvm-git-logs
mailing list