[Scummvm-cvs-logs] scummvm master -> 579a46810d52535a44b8019aa4c46b7f5b88f0d6
m-kiewitz
m_kiewitz at users.sourceforge.net
Sat Feb 13 00:11:36 CET 2016
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
af90283552 AGI: Add time delay overwrite for AppleIIgs
579a46810d Merge branch 'master' of github.com:scummvm/scummvm
Commit: af9028355294ffe569e9100c2cac02eb843b1c11
https://github.com/scummvm/scummvm/commit/af9028355294ffe569e9100c2cac02eb843b1c11
Author: Martin Kiewitz (m_kiewitz at users.sourceforge.net)
Date: 2016-02-13T00:10:43+01:00
Commit Message:
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)
Changed paths:
A engines/agi/appleIIgs_timedelay_overwrite.h
engines/agi/cycle.cpp
diff --git a/engines/agi/appleIIgs_timedelay_overwrite.h b/engines/agi/appleIIgs_timedelay_overwrite.h
new file mode 100644
index 0000000..2045841
--- /dev/null
+++ b/engines/agi/appleIIgs_timedelay_overwrite.h
@@ -0,0 +1,66 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef AGI_APPLEIIGS_DELAY_OVERWRITE_H
+#define AGI_APPLEIIGS_DELAY_OVERWRITE_H
+
+namespace Agi {
+
+struct AgiAppleIIgsDelayOverwriteRoomEntry {
+ int16 fromRoom;
+ int16 toRoom;
+ int16 timeDelayOverwrite; // time delay here is like on PC, so 0 - unlimited, 1 - 20 cycles, 2 - 10 cycles
+};
+
+struct AgiAppleIIgsDelayOverwriteGameEntry {
+ uint32 gameId;
+ int16 defaultTimeDelayOverwrite; // time delay here is like on PC, so 0 - unlimited, 1 - 20 cycles, 2 - 10 cycles
+ const AgiAppleIIgsDelayOverwriteRoomEntry *roomTable;
+};
+
+static const AgiAppleIIgsDelayOverwriteRoomEntry appleIIgsDelayOverwriteMH1[] = {
+ { 153, 153, 2 }, // Intro w/ credits
+ { 104, 104, 2 }, // Intro cutscene
+ { 117, 117, 2 }, // Intro cutscene (ego waking up)
+ // Room 124+125 are MAD rooms, those seem to work at a proper speed
+ { -1, -1, -1 }
+};
+
+static const AgiAppleIIgsDelayOverwriteGameEntry appleIIgsDelayOverwriteGameTable[] = {
+ { GID_BC, 2, nullptr }, // NEEDS TESTING
+ { GID_GOLDRUSH, 2, nullptr }, // NEEDS TESTING
+ { GID_KQ1, 2, nullptr }, // NEEDS TESTING
+ // KQ2 seems to work fine at speed given by scripts (NEEDS FURTHER TESTING)
+ { GID_KQ3, 2, nullptr }, // NEEDS TESTING
+ { GID_KQ4, 2, nullptr }, // NEEDS TESTING
+ { GID_LSL1, 2, nullptr }, // Switch Larry 1 to 10 cycles per second (that's around PC Larry 1's "normal" speed
+ { GID_MH1, -1, appleIIgsDelayOverwriteMH1 }, // NEEDS TESTING
+ { GID_MIXEDUP, 2, nullptr }, // NEEDS TESTING
+ { GID_PQ1, 2, nullptr }, // NEEDS TESTING
+ { GID_SQ1, 2, nullptr }, // NEEDS TESTING
+ { GID_SQ2, 2, nullptr }, // NEEDS TESTING
+ { GID_AGIDEMO, -1, nullptr }
+};
+
+} // End of namespace Agi
+
+#endif /* AGI_APPLEIIGS_DELAY_OVERWRITE_H */
diff --git a/engines/agi/cycle.cpp b/engines/agi/cycle.cpp
index 52cc160..7f56341 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) {
Commit: 579a46810d52535a44b8019aa4c46b7f5b88f0d6
https://github.com/scummvm/scummvm/commit/579a46810d52535a44b8019aa4c46b7f5b88f0d6
Author: Martin Kiewitz (m_kiewitz at users.sourceforge.net)
Date: 2016-02-13T00:11:05+01:00
Commit Message:
Merge branch 'master' of github.com:scummvm/scummvm
Changed paths:
engines/sci/event.cpp
More information about the Scummvm-git-logs
mailing list