aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk/myst_stacks/credits.cpp
diff options
context:
space:
mode:
authorMatthew Hoops2010-11-30 15:01:26 +0000
committerMatthew Hoops2010-11-30 15:01:26 +0000
commit48c209f2daa5b0e60e0abfb1c7f4e44227af4c49 (patch)
tree4acddcb94123fb4bee2372c6b7f0e5018d4e59a9 /engines/mohawk/myst_stacks/credits.cpp
parentc6a9cef9fb36fd6a0697f86fd59acc279d8b67a8 (diff)
downloadscummvm-rg350-48c209f2daa5b0e60e0abfb1c7f4e44227af4c49.tar.gz
scummvm-rg350-48c209f2daa5b0e60e0abfb1c7f4e44227af4c49.tar.bz2
scummvm-rg350-48c209f2daa5b0e60e0abfb1c7f4e44227af4c49.zip
MOHAWK: Split Myst credits code into a separate class
svn-id: r54677
Diffstat (limited to 'engines/mohawk/myst_stacks/credits.cpp')
-rw-r--r--engines/mohawk/myst_stacks/credits.cpp159
1 files changed, 159 insertions, 0 deletions
diff --git a/engines/mohawk/myst_stacks/credits.cpp b/engines/mohawk/myst_stacks/credits.cpp
new file mode 100644
index 0000000000..f508892ee4
--- /dev/null
+++ b/engines/mohawk/myst_stacks/credits.cpp
@@ -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