diff options
author | Martin Kiewitz | 2016-10-12 21:48:35 +0200 |
---|---|---|
committer | Martin Kiewitz | 2016-10-12 21:48:35 +0200 |
commit | 32ca051485d6bce0939d8fec0676a1fd5d537fc2 (patch) | |
tree | f160416cae5e7270594dc8a79be7b5d38d5831fa /engines/agi | |
parent | eef7d91fe1631e44cb5909fb6d0121f18587b637 (diff) | |
download | scummvm-rg350-32ca051485d6bce0939d8fec0676a1fd5d537fc2.tar.gz scummvm-rg350-32ca051485d6bce0939d8fec0676a1fd5d537fc2.tar.bz2 scummvm-rg350-32ca051485d6bce0939d8fec0676a1fd5d537fc2.zip |
AGI: Make TIME_DELAY 0 to set the game to 40 fps
Original AGI TIME_DELAY 0 made the game run as fast
as possible. We didn't go that far, but it still seems to run
too fast. This should hopefully fix that.
See bug #9607
Diffstat (limited to 'engines/agi')
-rw-r--r-- | engines/agi/agi.h | 2 | ||||
-rw-r--r-- | engines/agi/cycle.cpp | 20 | ||||
-rw-r--r-- | engines/agi/global.cpp | 2 |
3 files changed, 22 insertions, 2 deletions
diff --git a/engines/agi/agi.h b/engines/agi/agi.h index 79d05c4b1d..b8c30e9d5c 100644 --- a/engines/agi/agi.h +++ b/engines/agi/agi.h @@ -978,7 +978,7 @@ public: void inGameTimerUpdate(); private: - uint32 _lastUsedPlayTimeInCycles; // 20 per second + uint32 _lastUsedPlayTimeInCycles; // 40 per second uint32 _lastUsedPlayTimeInSeconds; // actual seconds uint32 _passedPlayTimeCycles; // increased by 1 every time we passed a cycle diff --git a/engines/agi/cycle.cpp b/engines/agi/cycle.cpp index 381c462ade..4148306de2 100644 --- a/engines/agi/cycle.cpp +++ b/engines/agi/cycle.cpp @@ -413,7 +413,27 @@ int AgiEngine::playGame() { } } + // Increment the delay value by one, so that we wait for at least 1 cycle + // In Original AGI 1 cycle was 50 milliseconds, so 20 frames per second + // So TIME_DELAY 1 resulted in around 20 frames per second + // 2 resulted in around 10 frames per second + // 0 however resulted in no limits at all, so the game ran as fast as possible + // We obviously do not want the game to run as fast as possible, so we will use 40 frames per second instead. + timeDelay = timeDelay * 2; + if (!timeDelay) + timeDelay = 1; + + // Our cycle counter runs at 25 milliseconds. + // So time delay has to be 1 for the originally unlimited speed - for our 40 fps + // 2 for 20 frames per second + // 4 for 10 frames per second + // and so on. + if (_passedPlayTimeCycles >= timeDelay) { + // code to check for executed cycles + // TimeDate time; + // g_system->getTimeAndDate(time); + // warning("cycle %d", time.tm_sec); inGameTimerResetPassedCycles(); interpretCycle(); diff --git a/engines/agi/global.cpp b/engines/agi/global.cpp index 6f83f02a4e..bd7e4e490f 100644 --- a/engines/agi/global.cpp +++ b/engines/agi/global.cpp @@ -247,7 +247,7 @@ void AgiEngine::setVarSecondsTrigger(byte newSeconds) { // This is also called in the main loop, because the game needs to be sync'd to 20 cycles per second void AgiEngine::inGameTimerUpdate() { uint32 curPlayTimeMilliseconds = inGameTimerGet(); - uint32 curPlayTimeCycles = curPlayTimeMilliseconds / 50; + uint32 curPlayTimeCycles = curPlayTimeMilliseconds / 25; if (curPlayTimeCycles == _lastUsedPlayTimeInCycles) { // No difference, skip updating |