[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