diff options
| author | Bastien Bouclet | 2010-11-29 20:59:17 +0000 | 
|---|---|---|
| committer | Bastien Bouclet | 2010-11-29 20:59:17 +0000 | 
| commit | ed59b28d0bd8a7eb1f30357d48bbd26cb1b307ff (patch) | |
| tree | 8fa4bc87657cdb6ef4ad2799a2b8d6ee2da0c7b3 | |
| parent | fcc1dd6749ea33bf8c9fd6e15a004bfeb7b3a47e (diff) | |
| download | scummvm-rg350-ed59b28d0bd8a7eb1f30357d48bbd26cb1b307ff.tar.gz scummvm-rg350-ed59b28d0bd8a7eb1f30357d48bbd26cb1b307ff.tar.bz2 scummvm-rg350-ed59b28d0bd8a7eb1f30357d48bbd26cb1b307ff.zip | |
MOHAWK: Do not always update the screen after a card change. Necessary for "animated card changes" to work.
svn-id: r54630
| -rw-r--r-- | engines/mohawk/console.cpp | 6 | ||||
| -rw-r--r-- | engines/mohawk/myst.cpp | 18 | ||||
| -rw-r--r-- | engines/mohawk/myst.h | 2 | ||||
| -rw-r--r-- | engines/mohawk/myst_areas.cpp | 2 | ||||
| -rw-r--r-- | engines/mohawk/myst_scripts.cpp | 27 | ||||
| -rw-r--r-- | engines/mohawk/myst_scripts_myst.cpp | 20 | ||||
| -rw-r--r-- | engines/mohawk/myst_scripts_selenitic.cpp | 13 | 
7 files changed, 46 insertions, 42 deletions
| diff --git a/engines/mohawk/console.cpp b/engines/mohawk/console.cpp index 613826e895..e6eab0b495 100644 --- a/engines/mohawk/console.cpp +++ b/engines/mohawk/console.cpp @@ -69,7 +69,7 @@ bool MystConsole::Cmd_ChangeCard(int argc, const char **argv) {  	}  	_vm->_sound->stopSound(); -	_vm->changeToCard((uint16)atoi(argv[1])); +	_vm->changeToCard((uint16)atoi(argv[1]), true);  	return false;  } @@ -161,9 +161,9 @@ bool MystConsole::Cmd_ChangeStack(int argc, const char **argv) {  	_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;  } diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp index ce6b5e8bc6..275f3bf3f3 100644 --- a/engines/mohawk/myst.cpp +++ b/engines/mohawk/myst.cpp @@ -253,9 +253,9 @@ Common::Error MohawkEngine_Myst::run() {  		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 @@ void MohawkEngine_Myst::drawCardBackground() {  	_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 @@ void MohawkEngine_Myst::changeToCard(uint16 card) {  	// 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 @@ void MohawkEngine_Myst::runInitScript() {  	delete initStream;  	_scriptParser->runScript(script); -	_gfx->updateScreen();  }  void MohawkEngine_Myst::runExitScript() { @@ -772,7 +776,6 @@ void MohawkEngine_Myst::runExitScript() {  	delete exitStream;  	_scriptParser->runScript(script); -	_gfx->updateScreen();  }  void MohawkEngine_Myst::loadHelp(uint16 id) { @@ -915,9 +918,6 @@ void MohawkEngine_Myst::drawResourceImages() {  	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 @@ void MohawkEngine_Myst::runLoadDialog() {  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; diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h index 24653e6a6c..1d81a7d17c 100644 --- a/engines/mohawk/myst.h +++ b/engines/mohawk/myst.h @@ -174,7 +174,7 @@ public:  	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); diff --git a/engines/mohawk/myst_areas.cpp b/engines/mohawk/myst_areas.cpp index 37e96beb90..d04bb3a771 100644 --- a/engines/mohawk/myst_areas.cpp +++ b/engines/mohawk/myst_areas.cpp @@ -70,7 +70,7 @@ MystResource::~MystResource() {  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);  } diff --git a/engines/mohawk/myst_scripts.cpp b/engines/mohawk/myst_scripts.cpp index b1e67f6632..533bda8ba9 100644 --- a/engines/mohawk/myst_scripts.cpp +++ b/engines/mohawk/myst_scripts.cpp @@ -300,9 +300,9 @@ void MystScriptParser::o_2_changeCardSwitch(uint16 op, uint16 var, uint16 argc,  	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 @@ void MystScriptParser::o_4_redrawCard(uint16 op, uint16 var, uint16 argc, uint16  	// 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 @@ void MystScriptParser::o_16_changeCardDirectional(uint16 op, uint16 var, uint16  	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 @@ void MystScriptParser::o_17_changeCardPush(uint16 op, uint16 var, uint16 argc, u  		debugC(kDebugScript, "\tCurrent CardId: %d", _savedCardId); -		_vm->changeToCard(cardId); +		_vm->changeToCard(cardId, true);  	} else  		unknown(op, var, argc, argv);  } @@ -439,7 +439,7 @@ void MystScriptParser::o_18_changeCardPop(uint16 op, uint16 var, uint16 argc, ui  		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 @@ void MystScriptParser::o_34_changeCard(uint16 op, uint16 var, uint16 argc, uint1  	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 @@ void MystScriptParser::o_35_drawImageChangeCard(uint16 op, uint16 var, uint16 ar  		_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 @@ void MystScriptParser::o_40_changeStack(uint16 op, uint16 var, uint16 argc, uint  			// 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 @@ void MystScriptParser::o_40_changeStack(uint16 op, uint16 var, uint16 argc, uint  			// 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 @@ void MystScriptParser::o_41_changeCardPlaySoundDirectional(uint16 op, uint16 var  	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);  } diff --git a/engines/mohawk/myst_scripts_myst.cpp b/engines/mohawk/myst_scripts_myst.cpp index 4aa48535f7..33ce2f88f2 100644 --- a/engines/mohawk/myst_scripts_myst.cpp +++ b/engines/mohawk/myst_scripts_myst.cpp @@ -296,7 +296,7 @@ void MystScriptParser_Myst::opcode_100(uint16 op, uint16 var, uint16 argc, uint1  			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 @@ void MystScriptParser_Myst::opcode_100(uint16 op, uint16 var, uint16 argc, uint1  	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 @@ void MystScriptParser_Myst::opcode_102(uint16 op, uint16 var, uint16 argc, uint1  			_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 @@ void MystScriptParser_Myst::opcode_110(uint16 op, uint16 var, uint16 argc, uint1  			// 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 @@ void MystScriptParser_Myst::opcode_115(uint16 op, uint16 var, uint16 argc, uint1  			// 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 @@ void MystScriptParser_Myst::opcode_115(uint16 op, uint16 var, uint16 argc, uint1  			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 @@ void MystScriptParser_Myst::opcode_129(uint16 op, uint16 var, uint16 argc, uint1  			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 @@ void MystScriptParser_Myst::opcode_200_run() {  		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 @@ void MystScriptParser_Myst::opcode_200(uint16 op, uint16 var, uint16 argc, uint1  //				_vm->_video->playMovieCentered(_vm->wrapMovieFilename("intro", kIntroStack));  //		} -		_vm->changeToCard(_vm->getCurCard()+1); +		_vm->changeToCard(_vm->getCurCard()+1, true);  		break;  	case kSeleniticStack:  		varUnusedCheck(op, var); diff --git a/engines/mohawk/myst_scripts_selenitic.cpp b/engines/mohawk/myst_scripts_selenitic.cpp index ac46e05815..9e765b17bb 100644 --- a/engines/mohawk/myst_scripts_selenitic.cpp +++ b/engines/mohawk/myst_scripts_selenitic.cpp @@ -549,7 +549,7 @@ void MystScriptParser_Selenitic::opcode_110(uint16 op, uint16 var, uint16 argc,  		// 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 @@ void MystScriptParser_Selenitic::o_115_soundLockButton(uint16 op, uint16 var, ui  	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);  	} | 
