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

bgk at users.sourceforge.net bgk at users.sourceforge.net
Mon Nov 29 21:59:17 CET 2010


Revision: 54630
          http://scummvm.svn.sourceforge.net/scummvm/?rev=54630&view=rev
Author:   bgk
Date:     2010-11-29 20:59:17 +0000 (Mon, 29 Nov 2010)

Log Message:
-----------
MOHAWK: Do not always update the screen after a card change. Necessary for "animated card changes" to work.

Modified Paths:
--------------
    scummvm/trunk/engines/mohawk/console.cpp
    scummvm/trunk/engines/mohawk/myst.cpp
    scummvm/trunk/engines/mohawk/myst.h
    scummvm/trunk/engines/mohawk/myst_areas.cpp
    scummvm/trunk/engines/mohawk/myst_scripts.cpp
    scummvm/trunk/engines/mohawk/myst_scripts_myst.cpp
    scummvm/trunk/engines/mohawk/myst_scripts_selenitic.cpp

Modified: scummvm/trunk/engines/mohawk/console.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/console.cpp	2010-11-29 20:58:58 UTC (rev 54629)
+++ scummvm/trunk/engines/mohawk/console.cpp	2010-11-29 20:59:17 UTC (rev 54630)
@@ -69,7 +69,7 @@
 	}
 
 	_vm->_sound->stopSound();
-	_vm->changeToCard((uint16)atoi(argv[1]));
+	_vm->changeToCard((uint16)atoi(argv[1]), true);
 
 	return false;
 }
@@ -161,9 +161,9 @@
 	_vm->changeToStack(stackNum - 1);
 
 	if (argc == 3)
-		_vm->changeToCard((uint16)atoi(argv[2]));
+		_vm->changeToCard((uint16)atoi(argv[2]), true);
 	else
-		_vm->changeToCard(default_start_card[stackNum - 1]);
+		_vm->changeToCard(default_start_card[stackNum - 1], true);
 
 	return false;
 }

Modified: scummvm/trunk/engines/mohawk/myst.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst.cpp	2010-11-29 20:58:58 UTC (rev 54629)
+++ scummvm/trunk/engines/mohawk/myst.cpp	2010-11-29 20:59:17 UTC (rev 54630)
@@ -253,9 +253,9 @@
 		changeToStack(kSeleniticStack);
 
 	if (getFeatures() & GF_DEMO)
-		changeToCard(2000);
+		changeToCard(2000, true);
 	else
-		changeToCard(1285);
+		changeToCard(1285, true);
 
 	// Load game from launcher/command line if requested
 	if (ConfMan.hasKey("save_slot") && !(getFeatures() & GF_DEMO)) {
@@ -416,7 +416,7 @@
 	_gfx->copyImageToScreen(getCardBackgroundId(), Common::Rect(0, 0, 544, 333));
 }
 
-void MohawkEngine_Myst::changeToCard(uint16 card) {
+void MohawkEngine_Myst::changeToCard(uint16 card, bool updateScreen) {
 	debug(2, "changeToCard(%d)", card);
 
 	_scriptParser->disableInitOpcodes();
@@ -503,6 +503,11 @@
 	// Debug: Show resource rects
 	if (_showResourceRects)
 		drawResourceRects();
+
+	// Make sure the screen is updated
+	if (updateScreen) {
+		_gfx->updateScreen();
+	}
 }
 
 void MohawkEngine_Myst::drawResourceRects() {
@@ -756,7 +761,6 @@
 	delete initStream;
 
 	_scriptParser->runScript(script);
-	_gfx->updateScreen();
 }
 
 void MohawkEngine_Myst::runExitScript() {
@@ -772,7 +776,6 @@
 	delete exitStream;
 
 	_scriptParser->runScript(script);
-	_gfx->updateScreen();
 }
 
 void MohawkEngine_Myst::loadHelp(uint16 id) {
@@ -915,9 +918,6 @@
 	for (uint16 i = 0; i < _resources.size(); i++)
 		if (_resources[i]->isDrawSubimages())
 			_resources[i]->drawDataToScreen();
-
-	// Make sure the screen is updated
-	_gfx->updateScreen();
 }
 
 void MohawkEngine_Myst::redrawResource(MystResourceType8 *_resource) {
@@ -1009,7 +1009,7 @@
 Common::Error MohawkEngine_Myst::loadGameState(int slot) {
 	if (_saveLoad->loadGame(_saveLoad->generateSaveGameList()[slot])) {
 		changeToStack(kIntroStack);
-		changeToCard(5);
+		changeToCard(5, true);
 		return Common::kNoError;
 	} else
 		return Common::kUnknownError;

Modified: scummvm/trunk/engines/mohawk/myst.h
===================================================================
--- scummvm/trunk/engines/mohawk/myst.h	2010-11-29 20:58:58 UTC (rev 54629)
+++ scummvm/trunk/engines/mohawk/myst.h	2010-11-29 20:59:17 UTC (rev 54630)
@@ -174,7 +174,7 @@
 	void runSaveDialog();
 
 	void changeToStack(uint16 stack);
-	void changeToCard(uint16 card);
+	void changeToCard(uint16 card, bool updateScreen);
 	uint16 getCurCard() { return _curCard; }
 	uint16 getCurStack() { return _curStack; }
 	void setMainCursor(uint16 cursor);

Modified: scummvm/trunk/engines/mohawk/myst_areas.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst_areas.cpp	2010-11-29 20:58:58 UTC (rev 54629)
+++ scummvm/trunk/engines/mohawk/myst_areas.cpp	2010-11-29 20:59:17 UTC (rev 54630)
@@ -70,7 +70,7 @@
 
 void MystResource::handleMouseUp(Common::Point *mouse) {
 	if (_dest != 0)
-		_vm->changeToCard(_dest);
+		_vm->changeToCard(_dest, true);
 	else
 		warning("Movement type resource with null destination at position (%d, %d), (%d, %d)", _rect.left, _rect.top, _rect.right, _rect.bottom);
 }

Modified: scummvm/trunk/engines/mohawk/myst_scripts.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst_scripts.cpp	2010-11-29 20:58:58 UTC (rev 54629)
+++ scummvm/trunk/engines/mohawk/myst_scripts.cpp	2010-11-29 20:59:17 UTC (rev 54630)
@@ -300,9 +300,9 @@
 	debugC(kDebugScript, "Opcode %d: changeCardSwitch var %d: %d", op, var, value);
 
 	if (value)
-		_vm->changeToCard(argv[value -1 ]);
+		_vm->changeToCard(argv[value -1 ], true);
 	else if (_invokingResource != NULL)
-		_vm->changeToCard(_invokingResource->getDest());
+		_vm->changeToCard(_invokingResource->getDest(), true);
 	else
 		warning("Missing invokingResource in altDest call");
 }
@@ -338,13 +338,14 @@
 	// TODO: Is redrawing the background correct ?
 	_vm->drawCardBackground();
 	_vm->drawResourceImages();
+	_vm->_gfx->updateScreen();
 }
 
 void MystScriptParser::o_6_goToDest(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
 	debugC(kDebugScript, "Opcode %d: Change To Dest of Invoking Resource", op);
 
 	if (_invokingResource != NULL)
-		_vm->changeToCard(_invokingResource->getDest());
+		_vm->changeToCard(_invokingResource->getDest(), true);
 	else
 		warning("Opcode %d: Missing invokingResource", op);
 }
@@ -395,8 +396,7 @@
 	debugC(kDebugScript, "\tcardId: %d", cardId);
 	debugC(kDebugScript, "\tdirectonal update data size: %d", directionalUpdateDataSize);
 
-	// TODO: Change to card should not update the screen
-	_vm->changeToCard(cardId);
+	_vm->changeToCard(cardId, false);
 
 	animatedUpdate(directionalUpdateDataSize, &argv[2], 0);
 }
@@ -424,7 +424,7 @@
 
 		debugC(kDebugScript, "\tCurrent CardId: %d", _savedCardId);
 
-		_vm->changeToCard(cardId);
+		_vm->changeToCard(cardId, true);
 	} else
 		unknown(op, var, argc, argv);
 }
@@ -439,7 +439,7 @@
 		uint16 u0 = argv[0];
 		debugC(kDebugScript, "\tu0: %d", u0);
 
-		_vm->changeToCard(_savedCardId);
+		_vm->changeToCard(_savedCardId, true);
 	} else
 		unknown(op, var, argc, argv);
 }
@@ -738,7 +738,7 @@
 	debugC(kDebugScript, "\tTarget Card: %d", cardId);
 	//debugC(kDebugScript, "\tu0: %d", u0); // Unused data
 
-	_vm->changeToCard(cardId);
+	_vm->changeToCard(cardId, true);
 }
 
 void MystScriptParser::o_35_drawImageChangeCard(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
@@ -758,7 +758,7 @@
 		_vm->_gfx->copyImageToScreen(imageId, Common::Rect(0, 0, 544, 333));
 		_vm->_gfx->updateScreen();
 		_vm->_system->delayMillis(delay * 100);
-		_vm->changeToCard(cardId);
+		_vm->changeToCard(cardId, true);
 	} else
 		unknown(op, var, argc, argv);
 }
@@ -826,10 +826,10 @@
 			// No need to have a table for just this data...
 			if (targetStack == 1) {
 				_vm->changeToStack(kDemoSlidesStack);
-				_vm->changeToCard(1000);
+				_vm->changeToCard(1000, true);
 			} else if (targetStack == 2) {
 				_vm->changeToStack(kDemoPreviewStack);
-				_vm->changeToCard(3000);
+				_vm->changeToCard(3000, true);
 			}
 
 			if (!_vm->_tweaksEnabled) {
@@ -844,7 +844,7 @@
 
 			// TODO: Play Flyby Entry Movie on Masterpiece Edition..? Only on Myst to Age Link?
 			_vm->changeToStack(stack_map[targetStack]);
-			_vm->changeToCard(start_card[targetStack]);
+			_vm->changeToCard(start_card[targetStack], true);
 
 			handle = _vm->_sound->playSound(soundIdLinkDst);
 			while (_vm->_mixer->isSoundHandleActive(*handle))
@@ -870,8 +870,7 @@
 	if (soundId)
 		_vm->_sound->playSound(soundId);
 
-	// TODO: Change to card should not update the screen
-	_vm->changeToCard(cardId);
+	_vm->changeToCard(cardId, false);
 
 	animatedUpdate(dataSize, &argv[4], delayBetweenSteps);
 }

Modified: scummvm/trunk/engines/mohawk/myst_scripts_myst.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst_scripts_myst.cpp	2010-11-29 20:58:58 UTC (rev 54629)
+++ scummvm/trunk/engines/mohawk/myst_scripts_myst.cpp	2010-11-29 20:59:17 UTC (rev 54630)
@@ -296,7 +296,7 @@
 
 			uint16 varValue = _vm->_varStore->getVar(var);
 			_vm->changeToStack(stack_map[varValue]);
-			_vm->changeToCard(start_card[varValue]);
+			_vm->changeToCard(start_card[varValue], true);
 
 			// TODO: No soundIdLinkDst for Opcode 100 link? Check Original.
 		}
@@ -330,7 +330,7 @@
 	case kDemoSlidesStack:
 		// TODO: Change to changeStack call?
 		_vm->changeToStack(kDemoStack);
-		_vm->changeToCard(2001);
+		_vm->changeToCard(2001, true);
 		break;
 	default:
 		unknown(op, var, argc, argv);
@@ -487,7 +487,7 @@
 
 			_vm->_gfx->copyImageToScreen(imageId, Common::Rect(0, 0, 544, 333));
 			_vm->_system->delayMillis(delay / 100);
-			_vm->changeToCard(cardId);
+			_vm->changeToCard(cardId, true);
 		} else
 			unknown(op, var, argc, argv);
 		break;
@@ -822,7 +822,7 @@
 
 			// TODO: Finish Implementing Logic...
 			// HACK: Bypass Higher Logic for now...
-			_vm->changeToCard(argv[1]);
+			_vm->changeToCard(argv[1], true);
 		} else
 			unknown(op, var, argc, argv);
 		break;
@@ -1037,7 +1037,7 @@
 
 			// TODO: Fix Logic...
 			// HACK: Bypass Door Lock For Now
-			_vm->changeToCard(cardIdOpen);
+			_vm->changeToCard(cardIdOpen, true);
 		} else
 			unknown(op, var, argc, argv);
 		break;
@@ -1069,9 +1069,9 @@
 			if ((var == 100 && !_vm->_varStore->getVar(25)) ||
 			   (var == 101 && !_vm->_varStore->getVar(24))) {
 				// TODO: Clear mainCursor back to nominal..
-				_vm->changeToCard(cardIdLose);
+				_vm->changeToCard(cardIdLose, true);
 			} else
-				_vm->changeToCard(cardIdBookCover);
+				_vm->changeToCard(cardIdBookCover, true);
 
 			// TODO: Is this logic here?
 			//       i.e. If was holding page, wait then auto open and play book...
@@ -1617,7 +1617,7 @@
 			debugC(kDebugScript, "\tcardId: %d", cardId);
 
 			// TODO: Fill in Code...
-			_vm->changeToCard(cardId);
+			_vm->changeToCard(cardId, true);
 		} else
 			unknown(op, var, argc, argv);
 		break;
@@ -2103,7 +2103,7 @@
 		case kDemoSlidesStack:
 			// Used on Cards...
 			if (_vm->_system->getMillis() - g_opcode200Parameters.lastCardTime >= 2 * 1000)
-				_vm->changeToCard(g_opcode200Parameters.cardId);
+				_vm->changeToCard(g_opcode200Parameters.cardId, true);
 			break;
 		}
 	}
@@ -2147,7 +2147,7 @@
 //				_vm->_video->playMovieCentered(_vm->wrapMovieFilename("intro", kIntroStack));
 //		}
 
-		_vm->changeToCard(_vm->getCurCard()+1);
+		_vm->changeToCard(_vm->getCurCard()+1, true);
 		break;
 	case kSeleniticStack:
 		varUnusedCheck(op, var);

Modified: scummvm/trunk/engines/mohawk/myst_scripts_selenitic.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst_scripts_selenitic.cpp	2010-11-29 20:58:58 UTC (rev 54629)
+++ scummvm/trunk/engines/mohawk/myst_scripts_selenitic.cpp	2010-11-29 20:59:17 UTC (rev 54630)
@@ -549,7 +549,7 @@
 
 		// TODO: Finish Implementing Logic...
 		// HACK: Bypass Higher Logic for now...
-		_vm->changeToCard(argv[1]);
+		_vm->changeToCard(argv[1], true);
 	} else
 		unknown(op, var, argc, argv);
 }
@@ -709,10 +709,15 @@
 	if (solved) {
 		_sound_lock_button->drawConditionalDataToScreen(2);
 
-		uint16 cardIdOpen = argv[2];
+		uint16 cardIdClosed = argv[0];
+		uint16 cardIdOpen = argv[1];
 
-		//TODO: Change card with directional update playing sound
-		_vm->changeToCard(cardIdOpen);
+		_vm->changeToCard(cardIdClosed, true);
+
+		_vm->changeToCard(cardIdOpen, false);
+		_vm->_sound->playSound(argv[2]);
+
+		animatedUpdate(argv[4], &argv[5], argv[3]);
 	} else {
 		_sound_lock_button->drawConditionalDataToScreen(0);
 	}


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