diff options
author | Martin Kiewitz | 2016-02-13 00:10:43 +0100 |
---|---|---|
committer | Martin Kiewitz | 2016-02-13 00:10:43 +0100 |
commit | af9028355294ffe569e9100c2cac02eb843b1c11 (patch) | |
tree | f95f7aaeeca2d91794fa690b825bb6d01428f661 /engines/agi/cycle.cpp | |
parent | b67cb25e22a0871ebc9135da847cd1bc5dd5a96d (diff) | |
download | scummvm-rg350-af9028355294ffe569e9100c2cac02eb843b1c11.tar.gz scummvm-rg350-af9028355294ffe569e9100c2cac02eb843b1c11.tar.bz2 scummvm-rg350-af9028355294ffe569e9100c2cac02eb843b1c11.zip |
AGI: Add time delay overwrite for AppleIIgs
Should somewhat fix bug #7026
Needs testing (although AGI games need to get tested for 1.8.0 anyway)
Diffstat (limited to 'engines/agi/cycle.cpp')
-rw-r--r-- | engines/agi/cycle.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/engines/agi/cycle.cpp b/engines/agi/cycle.cpp index 52cc16005b..7f563419e7 100644 --- a/engines/agi/cycle.cpp +++ b/engines/agi/cycle.cpp @@ -30,6 +30,7 @@ #include "agi/keyboard.h" #include "agi/menu.h" #include "agi/systemui.h" +#include "agi/appleIIgs_timedelay_overwrite.h" namespace Agi { @@ -289,6 +290,8 @@ uint16 AgiEngine::processAGIEvents() { int AgiEngine::playGame() { int ec = errOK; + const AgiAppleIIgsDelayOverwriteGameEntry *appleIIgsDelayOverwrite = nullptr; + const AgiAppleIIgsDelayOverwriteRoomEntry *appleIIgsDelayRoomOverwrite = nullptr; debugC(2, kDebugLevelMain, "initializing..."); debugC(2, kDebugLevelMain, "game version = 0x%x", getVersion()); @@ -338,6 +341,16 @@ int AgiEngine::playGame() { artificialDelay_Reset(); + if (getPlatform() == Common::kPlatformApple2GS) { + // Look up, if there is a time delay overwrite table for the current game + appleIIgsDelayOverwrite = appleIIgsDelayOverwriteGameTable; + while (appleIIgsDelayOverwrite->gameId != GID_AGIDEMO) { + if (appleIIgsDelayOverwrite->gameId == getGameID()) + break; // game found + appleIIgsDelayOverwrite++; + } + } + do { processAGIEvents(); @@ -353,6 +366,39 @@ int AgiEngine::playGame() { // Normally that game runs at TIME_DELAY 1. // Maybe a script patch for this game would make sense. // TODO: needs further investigation + + int16 timeDelayOverwrite = -1; + + // Now check, if we got a time delay overwrite entry for current room + if (appleIIgsDelayOverwrite->roomTable) { + byte curRoom = getVar(VM_VAR_CURRENT_ROOM); + + appleIIgsDelayRoomOverwrite = appleIIgsDelayOverwrite->roomTable; + while (appleIIgsDelayRoomOverwrite->fromRoom >= 0) { + if ((appleIIgsDelayRoomOverwrite->fromRoom <= curRoom) && (appleIIgsDelayRoomOverwrite->toRoom >= curRoom)) { + timeDelayOverwrite = appleIIgsDelayRoomOverwrite->timeDelayOverwrite; + break; + } + appleIIgsDelayRoomOverwrite++; + } + + if (timeDelayOverwrite < 0) { + // use default time delay in case no room specific one was found + timeDelayOverwrite = appleIIgsDelayOverwrite->defaultTimeDelayOverwrite; + } + } else { + timeDelayOverwrite = appleIIgsDelayOverwrite->defaultTimeDelayOverwrite; + } + + if (timeDelayOverwrite >= 0) { + if (timeDelayOverwrite != timeDelay) { + // delayOverwrite is not the same as the delay taken from the scripts? overwrite it + warning("AppleIIgs: time delay overwrite from %d to %d", timeDelay, timeDelayOverwrite); + + setVar(VM_VAR_TIME_DELAY, timeDelayOverwrite - 1); // adjust for Apple IIgs + timeDelay = timeDelayOverwrite; + } + } } if (_passedPlayTimeCycles >= timeDelay) { |