[Scummvm-git-logs] scummvm master -> 9729ff3706f9b3bf67521e62ddd89c100527731e

bgK bastien.bouclet at gmail.com
Fri Jul 13 19:44:26 CEST 2018


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:
d91ac01419 MOHAWK: RIVEN: Queue opening and closing the main menu as scripts
9729ff3706 MOHAWk: RIVEN: Reset the mouse cursor when changing stack / unpausing


Commit: d91ac014195dea06e42daa7351c9a3844ef34aec
    https://github.com/scummvm/scummvm/commit/d91ac014195dea06e42daa7351c9a3844ef34aec
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2018-07-13T19:44:48+02:00

Commit Message:
MOHAWK: RIVEN: Queue opening and closing the main menu as scripts

This way all the other actions are blocked while the card load scripts
are executed. Expecially, it's not possible anymore to open the main
menu while the scripts for returning from the main menu are still
executing.

Fixes Trac#10628.

Changed paths:
    engines/mohawk/riven.cpp
    engines/mohawk/riven_inventory.cpp
    engines/mohawk/riven_scripts.cpp
    engines/mohawk/riven_scripts.h
    engines/mohawk/riven_stacks/aspit.cpp
    engines/mohawk/riven_stacks/ospit.cpp


diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp
index 5d02317..77d52f9 100644
--- a/engines/mohawk/riven.cpp
+++ b/engines/mohawk/riven.cpp
@@ -341,15 +341,18 @@ void MohawkEngine_Riven::goToMainMenu() {
 	_menuTumbnail.reset(new Graphics::Surface());
 	createThumbnailFromScreen(_menuTumbnail.get());
 
-	changeToStack(kStackAspit);
-	changeToCard(1);
+	RivenCommand *go = new RivenStackChangeCommand(this, kStackAspit, 1, true, true);
+	RivenScriptPtr goScript = _scriptMan->createScriptWithCommand(go);
+	_scriptMan->runScript(goScript, true);
 }
 
 void MohawkEngine_Riven::resumeFromMainMenu() {
 	assert(_menuSavedStack != -1);
 
-	changeToStack(_menuSavedStack);
-	changeToCard(_menuSavedCard);
+	RivenCommand *resume = new RivenStackChangeCommand(this, _menuSavedStack, _menuSavedCard, true, true);
+	RivenScriptPtr resumeScript = _scriptMan->createScriptWithCommand(resume);
+	_scriptMan->runScript(resumeScript, true);
+
 	_menuSavedStack = -1;
 	_menuSavedCard = -1;
 	_menuTumbnail.reset();
diff --git a/engines/mohawk/riven_inventory.cpp b/engines/mohawk/riven_inventory.cpp
index b4304ec..7479080 100644
--- a/engines/mohawk/riven_inventory.cpp
+++ b/engines/mohawk/riven_inventory.cpp
@@ -167,7 +167,7 @@ void RivenInventory::backFromItemScript() const {
 	uint32 backCardId = _vm->_vars["returncardid"];
 
 	// Return to where we were before entering the book
-	RivenCommand *back = new RivenStackChangeCommand(_vm, backStackId, backCardId, true);
+	RivenCommand *back = new RivenStackChangeCommand(_vm, backStackId, backCardId, true, false);
 	RivenScriptPtr backScript = _vm->_scriptMan->createScriptWithCommand(back);
 	_vm->_scriptMan->runScript(backScript, true);
 }
diff --git a/engines/mohawk/riven_scripts.cpp b/engines/mohawk/riven_scripts.cpp
index 3547302..a59850f 100644
--- a/engines/mohawk/riven_scripts.cpp
+++ b/engines/mohawk/riven_scripts.cpp
@@ -918,11 +918,13 @@ void RivenSwitchCommand::applyCardPatches(uint32 globalId, int scriptType, uint1
 	}
 }
 
-RivenStackChangeCommand::RivenStackChangeCommand(MohawkEngine_Riven *vm, uint16 stackId, uint32 globalCardId, bool byStackId) :
+RivenStackChangeCommand::RivenStackChangeCommand(MohawkEngine_Riven *vm, uint16 stackId, uint32 globalCardId,
+                                                 bool byStackId, bool byStackCardId) :
 		RivenCommand(vm),
 		_stackId(stackId),
 		_cardId(globalCardId),
-		_byStackId(byStackId) {
+		_byStackId(byStackId),
+		_byStackCardId(byStackCardId) {
 
 }
 
@@ -935,7 +937,7 @@ RivenStackChangeCommand *RivenStackChangeCommand::createFromStream(MohawkEngine_
 	uint16 stackId = stream->readUint16BE();
 	uint32 globalCardId = stream->readUint32BE();
 
-	return new RivenStackChangeCommand(vm, stackId, globalCardId, false);
+	return new RivenStackChangeCommand(vm, stackId, globalCardId, false, false);
 }
 
 void RivenStackChangeCommand::execute() {
@@ -954,7 +956,14 @@ void RivenStackChangeCommand::execute() {
 	}
 
 	_vm->changeToStack(stackID);
-	uint16 cardID = _vm->getStack()->getCardStackId(_cardId);
+
+	uint16 cardID;
+	if (_byStackCardId) {
+		cardID = _cardId;
+	} else {
+		cardID = _vm->getStack()->getCardStackId(_cardId);
+	}
+
 	_vm->changeToCard(cardID);
 }
 
diff --git a/engines/mohawk/riven_scripts.h b/engines/mohawk/riven_scripts.h
index 423434f..c7c4980 100644
--- a/engines/mohawk/riven_scripts.h
+++ b/engines/mohawk/riven_scripts.h
@@ -387,7 +387,8 @@ private:
  */
 class RivenStackChangeCommand : public RivenCommand {
 public:
-	RivenStackChangeCommand(MohawkEngine_Riven *vm, uint16 stackId, uint32 globalCardId, bool byStackId);
+	RivenStackChangeCommand(MohawkEngine_Riven *vm, uint16 stackId, uint32 globalCardId,
+		                        bool byStackId, bool byStackCardId);
 
 	static RivenStackChangeCommand *createFromStream(MohawkEngine_Riven *vm, Common::ReadStream *stream);
 	virtual ~RivenStackChangeCommand();
@@ -401,6 +402,7 @@ private:
 	uint16 _stackId;
 	uint32 _cardId;
 	bool _byStackId; // Otherwise by stack name id
+	bool _byStackCardId; // Otherwise by global card id
 };
 
 /**
diff --git a/engines/mohawk/riven_stacks/aspit.cpp b/engines/mohawk/riven_stacks/aspit.cpp
index a94b454..59cc3b9 100644
--- a/engines/mohawk/riven_stacks/aspit.cpp
+++ b/engines/mohawk/riven_stacks/aspit.cpp
@@ -424,7 +424,7 @@ void ASpit::xaNewGame(const ArgumentArray &args) {
 	                  kRivenCommandTransition,  1, kRivenTransitionBlend,
 	                  kRivenCommandChangeCard,  1, 2);
 
-	script->addCommand(RivenCommandPtr(new RivenStackChangeCommand(_vm, 0, 0x6E9A, false)));
+	script->addCommand(RivenCommandPtr(new RivenStackChangeCommand(_vm, 0, 0x6E9A, false, false)));
 
 	script += _vm->_scriptMan->createScriptFromData(1,
 	                  kRivenCommandStopSound,   1, 2);
diff --git a/engines/mohawk/riven_stacks/ospit.cpp b/engines/mohawk/riven_stacks/ospit.cpp
index d939bea..f44bc0d 100644
--- a/engines/mohawk/riven_stacks/ospit.cpp
+++ b/engines/mohawk/riven_stacks/ospit.cpp
@@ -51,7 +51,7 @@ void OSpit::xorollcredittime(const ArgumentArray &args) {
 	// we should be using the Tay end game sequences.
 	if (_vm->_vars["returnstackid"] == kStackRspit) {
 		RivenScriptPtr script = _vm->_scriptMan->createScriptWithCommand(
-				new RivenStackChangeCommand(_vm, kStackRspit, 0x3338, true));
+				new RivenStackChangeCommand(_vm, kStackRspit, 0x3338, true, false));
 		_vm->_scriptMan->runScript(script, false);
 		return;
 	}


Commit: 9729ff3706f9b3bf67521e62ddd89c100527731e
    https://github.com/scummvm/scummvm/commit/9729ff3706f9b3bf67521e62ddd89c100527731e
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2018-07-13T19:44:54+02:00

Commit Message:
MOHAWk: RIVEN: Reset the mouse cursor when changing stack / unpausing

Changed paths:
    engines/mohawk/riven.cpp


diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp
index 77d52f9..1f19b08 100644
--- a/engines/mohawk/riven.cpp
+++ b/engines/mohawk/riven.cpp
@@ -369,6 +369,12 @@ void MohawkEngine_Riven::pauseEngineIntern(bool pause) {
 		_video->pauseVideos();
 	} else {
 		_video->resumeVideos();
+
+		if (_stack) {
+			// The mouse may have moved while the game was paused,
+			// the mouse cursor needs to be updated.
+			_stack->onMouseMove(_eventMan->getMousePos());
+		}
 	}
 }
 
@@ -444,6 +450,10 @@ void MohawkEngine_Riven::changeToStack(uint16 stackId) {
 
 	delete _stack;
 	_stack = constructStackById(stackId);
+
+	// Set the mouse position to the correct value so the mouse
+	// cursor can be computed accurately when loading a card.
+	_stack->onMouseMove(getEventManager()->getMousePos());
 }
 
 const char **MohawkEngine_Riven::listExpectedDatafiles() const {





More information about the Scummvm-git-logs mailing list