[Scummvm-cvs-logs] SF.net SVN: scummvm:[54677] scummvm/trunk/engines/mohawk

mthreepwood at users.sourceforge.net mthreepwood at users.sourceforge.net
Tue Nov 30 16:01:26 CET 2010


Revision: 54677
          http://scummvm.svn.sourceforge.net/scummvm/?rev=54677&view=rev
Author:   mthreepwood
Date:     2010-11-30 15:01:26 +0000 (Tue, 30 Nov 2010)

Log Message:
-----------
MOHAWK: Split Myst credits code into a separate class

Modified Paths:
--------------
    scummvm/trunk/engines/mohawk/module.mk
    scummvm/trunk/engines/mohawk/myst.cpp
    scummvm/trunk/engines/mohawk/myst_stacks/myst.cpp

Added Paths:
-----------
    scummvm/trunk/engines/mohawk/myst_stacks/credits.cpp
    scummvm/trunk/engines/mohawk/myst_stacks/credits.h

Modified: scummvm/trunk/engines/mohawk/module.mk
===================================================================
--- scummvm/trunk/engines/mohawk/module.mk	2010-11-30 14:45:31 UTC (rev 54676)
+++ scummvm/trunk/engines/mohawk/module.mk	2010-11-30 15:01:26 UTC (rev 54677)
@@ -23,6 +23,7 @@
 	riven_vars.o \
 	sound.o \
 	video.o \
+	myst_stacks/credits.o \
 	myst_stacks/myst.o \
 	myst_stacks/selenitic.o
 

Modified: scummvm/trunk/engines/mohawk/myst.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst.cpp	2010-11-30 14:45:31 UTC (rev 54676)
+++ scummvm/trunk/engines/mohawk/myst.cpp	2010-11-30 15:01:26 UTC (rev 54677)
@@ -39,6 +39,7 @@
 #include "mohawk/video.h"
 
 // The stacks
+#include "mohawk/myst_stacks/credits.h"
 #include "mohawk/myst_stacks/myst.h"
 #include "mohawk/myst_stacks/selenitic.h"
 
@@ -375,6 +376,9 @@
 	_prevStack = _scriptParser;
 
 	switch (_curStack) {
+	case kCreditsStack:
+		_scriptParser = new MystScriptParser_Credits(this);
+		break;
 	case kSeleniticStack:
 		_scriptParser = new MystScriptParser_Selenitic(this);
 		break;

Added: scummvm/trunk/engines/mohawk/myst_stacks/credits.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst_stacks/credits.cpp	                        (rev 0)
+++ scummvm/trunk/engines/mohawk/myst_stacks/credits.cpp	2010-11-30 15:01:26 UTC (rev 54677)
@@ -0,0 +1,159 @@
+/* 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.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "mohawk/myst.h"
+#include "mohawk/graphics.h"
+#include "mohawk/myst_areas.h"
+#include "mohawk/sound.h"
+#include "mohawk/video.h"
+#include "mohawk/myst_stacks/credits.h"
+
+#include "gui/message.h"
+
+namespace Mohawk {
+
+// NOTE: Credits Start Card is 10000
+
+#define OPCODE(op, x) { op, &MystScriptParser::x, #x }
+#define SPECIFIC_OPCODE(op, x) { op, (OpcodeProcMyst) &MystScriptParser_Credits::x, #x }
+
+MystScriptParser_Credits::MystScriptParser_Credits(MohawkEngine_Myst *vm) : MystScriptParser(vm) {
+	setupOpcodes();
+	_invokingResource = NULL;
+}
+
+MystScriptParser_Credits::~MystScriptParser_Credits() {
+}
+
+void MystScriptParser_Credits::setupOpcodes() {
+	// "invalid" opcodes do not exist or have not been observed
+	// "unknown" opcodes exist, but their meaning is unknown
+
+	static const MystOpcode creditsOpcodes[] = {
+		// "Standard" Opcodes
+		OPCODE(0, o_toggleVar),
+		OPCODE(1, o_setVar),
+		OPCODE(2, o_changeCardSwitch),
+		OPCODE(3, o_takePage),
+		OPCODE(4, o_redrawCard),
+		// TODO: Opcode 5 Not Present
+		OPCODE(6, o_goToDest),
+		OPCODE(7, o_goToDest),
+		OPCODE(8, o_goToDest),
+		OPCODE(9, o_triggerMovie),
+		OPCODE(10, o_toggleVarNoRedraw),
+		// TODO: Opcode 10 to 11 Not Present
+		OPCODE(12, o_changeCardSwitch),
+		OPCODE(13, o_changeCardSwitch),
+		OPCODE(14, o_drawAreaState),
+		OPCODE(15, o_redrawAreaForVar),
+		OPCODE(16, o_changeCardDirectional),
+		OPCODE(17, o_changeCardPush),
+		OPCODE(18, o_changeCardPop),
+		OPCODE(19, o_enableAreas),
+		OPCODE(20, o_disableAreas),
+		OPCODE(21, o_directionalUpdate),
+		OPCODE(22, o_goToDest),
+		OPCODE(23, o_toggleAreasActivation),
+		OPCODE(24, o_playSound),
+		// TODO: Opcode 25 Not Present
+		OPCODE(26, o_stopSoundBackground),
+		OPCODE(27, o_playSoundBlocking),
+		OPCODE(28, o_restoreDefaultRect),
+		OPCODE(29, o_blitRect),
+		OPCODE(30, o_changeSound),
+		OPCODE(31, o_soundPlaySwitch),
+		OPCODE(32, o_soundResumeBackground),
+		OPCODE(33, o_blitRect),
+		OPCODE(34, o_changeCard),
+		OPCODE(35, o_drawImageChangeCard),
+		OPCODE(36, o_changeMainCursor),
+		OPCODE(37, o_hideCursor),
+		OPCODE(38, o_showCursor),
+		OPCODE(39, o_delay),
+		OPCODE(40, o_changeStack),
+		OPCODE(41, o_changeCardPlaySoundDirectional),
+		OPCODE(42, o_directionalUpdatePlaySound),
+		OPCODE(43, o_saveMainCursor),
+		OPCODE(44, o_restoreMainCursor),
+		// TODO: Opcode 45 Not Present
+		OPCODE(46, o_soundWaitStop),
+		// TODO: Opcodes 47 to 99 Not Present
+
+		// "Stack-Specific" Opcodes
+		SPECIFIC_OPCODE(100, o_quit),
+
+		// "Init" Opcodes
+		SPECIFIC_OPCODE(200, o_runCredits),
+
+		OPCODE(0xFFFF, NOP)
+	};
+
+	_opcodes = creditsOpcodes;
+	_opcodeCount = ARRAYSIZE(creditsOpcodes);
+}
+
+void MystScriptParser_Credits::disablePersistentScripts() {
+	_creditsRunning = false;
+	_creditsVar = 0;
+	_baseImageId = 0;
+	_lastCardTime = 0;
+}
+
+void MystScriptParser_Credits::runPersistentScripts() {
+	if (!_creditsRunning)
+		return;
+
+	uint16 curImageIndex = _vm->_varStore->getVar(_creditsVar);
+
+	if (_vm->_system->getMillis() - _lastCardTime >= 7 * 1000) {
+		// After the 6th image has shown, it's time to quit
+		if (curImageIndex == 7)
+			_vm->_system->quit();
+
+		// Note: The modulus by 6 is because the 6th image is the one at imageBaseId
+		_vm->_gfx->copyImageToScreen(_baseImageId + curImageIndex % 6, Common::Rect(0, 0, 544, 333));
+		_vm->_gfx->updateScreen();
+
+		_vm->_varStore->setVar(_creditsVar, curImageIndex + 1);
+		_lastCardTime = _vm->_system->getMillis();
+	}
+}
+
+void MystScriptParser_Credits::o_quit(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
+	_vm->_system->quit();
+}
+
+void MystScriptParser_Credits::o_runCredits(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
+	// Activate the credits
+	_creditsRunning = true;
+	_creditsVar = var;
+	_baseImageId = _vm->getCurCard();
+	_lastCardTime = _vm->_system->getMillis();
+
+	_vm->_varStore->setVar(var, 1);
+}
+
+} // End of namespace Mohawk


Property changes on: scummvm/trunk/engines/mohawk/myst_stacks/credits.cpp
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/trunk/engines/mohawk/myst_stacks/credits.h
===================================================================
--- scummvm/trunk/engines/mohawk/myst_stacks/credits.h	                        (rev 0)
+++ scummvm/trunk/engines/mohawk/myst_stacks/credits.h	2010-11-30 15:01:26 UTC (rev 54677)
@@ -0,0 +1,64 @@
+/* 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.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef MYST_SCRIPTS_CREDITS_H
+#define MYST_SCRIPTS_CREDITS_H
+
+#include "common/scummsys.h"
+#include "common/util.h"
+#include "mohawk/myst_scripts.h"
+
+namespace Mohawk {
+
+#define DECLARE_OPCODE(x) void x(uint16 op, uint16 var, uint16 argc, uint16 *argv)
+
+class MohawkEngine_Myst;
+struct MystScriptEntry;
+
+class MystScriptParser_Credits : public MystScriptParser {
+public:
+	MystScriptParser_Credits(MohawkEngine_Myst *vm);
+	~MystScriptParser_Credits();
+
+	void disablePersistentScripts();
+	void runPersistentScripts();
+
+private:
+	void setupOpcodes();
+
+	DECLARE_OPCODE(o_quit);
+	DECLARE_OPCODE(o_runCredits);
+
+	bool _creditsRunning;
+	uint16 _creditsVar;
+	uint16 _baseImageId;
+	uint32 _lastCardTime;
+};
+
+} // End of namespace Mohawk
+
+#undef DECLARE_OPCODE
+
+#endif


Property changes on: scummvm/trunk/engines/mohawk/myst_stacks/credits.h
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Modified: scummvm/trunk/engines/mohawk/myst_stacks/myst.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst_stacks/myst.cpp	2010-11-30 14:45:31 UTC (rev 54676)
+++ scummvm/trunk/engines/mohawk/myst_stacks/myst.cpp	2010-11-30 15:01:26 UTC (rev 54677)
@@ -324,7 +324,6 @@
 		} else
 			unknown(op, var, argc, argv);
 		break;
-	case kCreditsStack:
 	case kMakingOfStack:
 		_vm->_system->quit();
 		break;
@@ -1836,21 +1835,6 @@
 
 			lastImageIndex = curImageIndex;
 			break;
-		case kCreditsStack:
-			curImageIndex = _vm->_varStore->getVar(g_opcode200Parameters.var);
-
-			if (_vm->_system->getMillis() - g_opcode200Parameters.lastCardTime >= 7 * 1000) {
-				// After the 6th image has shown, it's time to quit
-				if (curImageIndex == 7)
-					_vm->_system->quit();
-
-				// Note: The modulus by 6 is because the 6th image is the one at imageBaseId
-				_vm->_gfx->copyImageToScreen(g_opcode200Parameters.imageBaseId + curImageIndex % 6, Common::Rect(0, 0, 544, 333));
-
-				_vm->_varStore->setVar(g_opcode200Parameters.var, curImageIndex + 1);
-				g_opcode200Parameters.lastCardTime = _vm->_system->getMillis();
-			}
-			break;
 		case kMechanicalStack:
 			// Used on Card 6238 (Sirrus' Throne) and Card 6027 (Achenar's Throne)
 			// g_opcode200Parameters.var == 0 for Achenar
@@ -1961,18 +1945,6 @@
 			_vm->_video->playMovie(_vm->wrapMovieFilename("atrwrite", kDniStack), 215, 77);
 		}
 		break;
-	case kCreditsStack:
-		if (argc == 0) {
-			g_opcode200Parameters.var = var;
-			// TODO: Pass ImageCount, rather than hardcoded in run process?
-			g_opcode200Parameters.imageBaseId = _vm->getCurCard();
-			g_opcode200Parameters.lastCardTime = _vm->_system->getMillis();
-			g_opcode200Parameters.enabled = true;
-
-			_vm->_varStore->setVar(var, 1);
-		} else
-			unknown(op, var, argc, argv);
-		break;
 	case kDemoSlidesStack:
 		// Used on Cards...
 		if (argc == 1) {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list