aboutsummaryrefslogtreecommitdiff
path: root/engines/agi/cycle.cpp
diff options
context:
space:
mode:
authorMartin Kiewitz2016-02-13 00:10:43 +0100
committerMartin Kiewitz2016-02-13 00:10:43 +0100
commitaf9028355294ffe569e9100c2cac02eb843b1c11 (patch)
treef95f7aaeeca2d91794fa690b825bb6d01428f661 /engines/agi/cycle.cpp
parentb67cb25e22a0871ebc9135da847cd1bc5dd5a96d (diff)
downloadscummvm-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.cpp46
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) {