aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorBastien Bouclet2017-11-19 16:40:49 +0100
committerBastien Bouclet2017-11-26 15:11:12 +0100
commit83b27d263e1433a134b53b66919566c3192ca116 (patch)
tree6ed3a0b242e519d7e6ad950cbf64fa4afbb89fbd /engines
parent81defa74966c59a1463ba791bf8c6f7e87c80f0c (diff)
downloadscummvm-rg350-83b27d263e1433a134b53b66919566c3192ca116.tar.gz
scummvm-rg350-83b27d263e1433a134b53b66919566c3192ca116.tar.bz2
scummvm-rg350-83b27d263e1433a134b53b66919566c3192ca116.zip
MOHAWK: RIVEN: Allow turning book pages more quickly
Fixes #10075
Diffstat (limited to 'engines')
-rw-r--r--engines/mohawk/riven.cpp5
-rw-r--r--engines/mohawk/riven_stack.cpp22
-rw-r--r--engines/mohawk/riven_stack.h6
-rw-r--r--engines/mohawk/riven_stacks/aspit.cpp47
-rw-r--r--engines/mohawk/riven_stacks/aspit.h1
-rw-r--r--engines/mohawk/riven_stacks/bspit.cpp22
-rw-r--r--engines/mohawk/riven_stacks/ospit.cpp22
7 files changed, 53 insertions, 72 deletions
diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp
index ea3e2ce7ec..0cd6b4f62e 100644
--- a/engines/mohawk/riven.cpp
+++ b/engines/mohawk/riven.cpp
@@ -203,8 +203,11 @@ void MohawkEngine_Riven::doFrame() {
_sound->updateSLST();
_video->updateMovies();
- Common::Event event;
+ if (!_scriptMan->hasQueuedScripts()) {
+ _stack->keyResetAction();
+ }
+ Common::Event event;
while (_eventMan->pollEvent(event)) {
switch (event.type) {
case Common::EVENT_MOUSEMOVE:
diff --git a/engines/mohawk/riven_stack.cpp b/engines/mohawk/riven_stack.cpp
index c90642adf1..7d3d1057a3 100644
--- a/engines/mohawk/riven_stack.cpp
+++ b/engines/mohawk/riven_stack.cpp
@@ -321,7 +321,6 @@ void RivenStack::onKeyPressed(const Common::KeyState &keyState) {
if (!script->empty()) {
_vm->_scriptMan->runScript(script, true);
- keyResetAction();
}
}
}
@@ -414,16 +413,7 @@ void RivenStack::removeTimer() {
_timerTime = 0;
}
-bool RivenStack::pageTurn(RivenTransition transition) {
- // Wait until the previous page turn sound completes
- while (_vm->_sound->isEffectPlaying() && !_vm->hasGameEnded()) {
- if (!mouseIsDown()) {
- return false;
- }
-
- _vm->doFrame();
- }
-
+void RivenStack::pageTurn(RivenTransition transition) {
// Play the page turning sound
const char *soundName = nullptr;
if (_vm->_rnd->getRandomBit())
@@ -435,8 +425,16 @@ bool RivenStack::pageTurn(RivenTransition transition) {
// Now update the screen :)
_vm->_gfx->scheduleTransition(transition);
+}
+
+bool RivenStack::keepTurningPages() {
+ return (mouseIsDown() || keyGetAction() != kKeyActionNone) && !_vm->shouldQuit();
+}
- return true;
+void RivenStack::waitForPageTurnSound() {
+ while (_vm->_sound->isEffectPlaying() && keepTurningPages()) {
+ _vm->doFrame();
+ }
}
RivenNameList::RivenNameList() {
diff --git a/engines/mohawk/riven_stack.h b/engines/mohawk/riven_stack.h
index ce7d2e203d..2af63b2838 100644
--- a/engines/mohawk/riven_stack.h
+++ b/engines/mohawk/riven_stack.h
@@ -30,6 +30,7 @@
#include "common/str-array.h"
#include "mohawk/riven_graphics.h"
+#include "mohawk/riven_stack.h"
namespace Mohawk {
@@ -182,7 +183,10 @@ public:
void runDemoBoundaryDialog();
void runEndGame(uint16 videoCode, uint32 delay);
void runCredits(uint16 video, uint32 delay);
- bool pageTurn(RivenTransition transition);
+
+ void pageTurn(RivenTransition transition);
+ bool keepTurningPages();
+ void waitForPageTurnSound();
protected:
typedef Common::Functor1<const ArgumentArray &, void> ExternalCommand;
diff --git a/engines/mohawk/riven_stacks/aspit.cpp b/engines/mohawk/riven_stacks/aspit.cpp
index a31aa902ec..67b416c9ca 100644
--- a/engines/mohawk/riven_stacks/aspit.cpp
+++ b/engines/mohawk/riven_stacks/aspit.cpp
@@ -106,22 +106,19 @@ void ASpit::xaatrusbookprevpage(const ArgumentArray &args) {
uint32 &page = _vm->_vars["aatrusbook"];
// Keep turning pages while the mouse is pressed
- bool firstPageTurn = true;
- while (mouseIsDown() || firstPageTurn) {
+ while (keepTurningPages()) {
// Check for the first page
if (page == 1)
return;
- if (!pageTurn(kRivenTransitionWipeRight)) {
- return;
- }
-
// Update the page number
page--;
- firstPageTurn = false;
+ pageTurn(kRivenTransitionWipeRight);
_vm->getCard()->drawPicture(page);
_vm->doFrame();
+
+ waitForPageTurnSound();
}
}
@@ -130,22 +127,20 @@ void ASpit::xaatrusbooknextpage(const ArgumentArray &args) {
uint32 &page = _vm->_vars["aatrusbook"];
// Keep turning pages while the mouse is pressed
- bool firstPageTurn = true;
- while ((mouseIsDown() || firstPageTurn) && !_vm->hasGameEnded()) {
+ while (keepTurningPages()) {
// Check for the last page
if (((_vm->getFeatures() & GF_DEMO) && page == 6) || page == 10)
return;
- if (!pageTurn(kRivenTransitionWipeLeft)) {
- return;
- }
-
// Update the page number
page++;
- firstPageTurn = false;
+ pageTurn(kRivenTransitionWipeLeft);
_vm->getCard()->drawPicture(page);
_vm->doFrame();
+
+ // Wait until the previous page turn sound completes
+ waitForPageTurnSound();
}
}
@@ -210,23 +205,19 @@ void ASpit::xacathbookprevpage(const ArgumentArray &args) {
uint32 &page = _vm->_vars["acathbook"];
// Keep turning pages while the mouse is pressed
- bool firstPageTurn = true;
- while (mouseIsDown() || firstPageTurn) {
+ while (keepTurningPages()) {
// Check for the first page
if (page == 1)
return;
- if (!pageTurn(kRivenTransitionWipeDown)) {
- return;
- }
-
// Update the page number
page--;
- firstPageTurn = false;
+ pageTurn(kRivenTransitionWipeDown);
cathBookDrawPage(page);
-
_vm->doFrame();
+
+ waitForPageTurnSound();
}
}
@@ -235,23 +226,19 @@ void ASpit::xacathbooknextpage(const ArgumentArray &args) {
uint32 &page = _vm->_vars["acathbook"];
// Keep turning pages while the mouse is pressed
- bool firstPageTurn = true;
- while ((mouseIsDown() || firstPageTurn) && !_vm->hasGameEnded()) {
+ while (keepTurningPages()) {
// Check for the last page
if (page == 49)
return;
- if (!pageTurn(kRivenTransitionWipeUp)) {
- return;
- }
-
// Update the page number
page++;
- firstPageTurn = false;
+ pageTurn(kRivenTransitionWipeUp);
cathBookDrawPage(page);
-
_vm->doFrame();
+
+ waitForPageTurnSound();
}
}
diff --git a/engines/mohawk/riven_stacks/aspit.h b/engines/mohawk/riven_stacks/aspit.h
index 5321db0ff6..b2e5301dad 100644
--- a/engines/mohawk/riven_stacks/aspit.h
+++ b/engines/mohawk/riven_stacks/aspit.h
@@ -72,6 +72,7 @@ private:
void cathBookDrawTelescopeCombination();
void cathBookDrawPage(uint32 page);
+
};
} // End of namespace RivenStacks
diff --git a/engines/mohawk/riven_stacks/bspit.cpp b/engines/mohawk/riven_stacks/bspit.cpp
index 824269a989..7a7c36ec30 100644
--- a/engines/mohawk/riven_stacks/bspit.cpp
+++ b/engines/mohawk/riven_stacks/bspit.cpp
@@ -96,20 +96,15 @@ void BSpit::xblabbookprevpage(const ArgumentArray &args) {
uint32 &page = _vm->_vars["blabpage"];
// Keep turning pages while the mouse is pressed
- bool firstPageTurn = true;
- while (mouseIsDown() || firstPageTurn) {
+ while (keepTurningPages()) {
// Check for the first page
if (page == 1)
return;
- if (!pageTurn(kRivenTransitionWipeRight)) {
- return;
- }
-
// Update the page number
page--;
- firstPageTurn = false;
+ pageTurn(kRivenTransitionWipeRight);
_vm->getCard()->drawPicture(page);
if (page == 14) {
@@ -117,6 +112,8 @@ void BSpit::xblabbookprevpage(const ArgumentArray &args) {
}
_vm->doFrame();
+
+ waitForPageTurnSound();
}
}
@@ -125,20 +122,15 @@ void BSpit::xblabbooknextpage(const ArgumentArray &args) {
uint32 &page = _vm->_vars["blabpage"];
// Keep turning pages while the mouse is pressed
- bool firstPageTurn = true;
- while ((mouseIsDown() || firstPageTurn) && !_vm->hasGameEnded()) {
+ while (keepTurningPages()) {
// Check for the last page
if (page == 22)
return;
- if (!pageTurn(kRivenTransitionWipeLeft)) {
- return;
- }
-
// Update the page number
page++;
- firstPageTurn = false;
+ pageTurn(kRivenTransitionWipeLeft);
_vm->getCard()->drawPicture(page);
if (page == 14) {
@@ -146,6 +138,8 @@ void BSpit::xblabbooknextpage(const ArgumentArray &args) {
}
_vm->doFrame();
+
+ waitForPageTurnSound();
}
}
diff --git a/engines/mohawk/riven_stacks/ospit.cpp b/engines/mohawk/riven_stacks/ospit.cpp
index 8da1698ad3..beecc05ab9 100644
--- a/engines/mohawk/riven_stacks/ospit.cpp
+++ b/engines/mohawk/riven_stacks/ospit.cpp
@@ -193,22 +193,19 @@ void OSpit::xogehnbookprevpage(const ArgumentArray &args) {
uint32 &page = _vm->_vars["ogehnpage"];
// Keep turning pages while the mouse is pressed
- bool firstPageTurn = true;
- while (mouseIsDown() || firstPageTurn) {
+ while (keepTurningPages()) {
// Check for the first page
if (page == 1)
return;
- if (!pageTurn(kRivenTransitionWipeRight)) {
- return;
- }
-
// Update the page number
page--;
- firstPageTurn = false;
+ pageTurn(kRivenTransitionWipeRight);
_vm->getCard()->drawPicture(page);
_vm->doFrame();
+
+ waitForPageTurnSound();
}
}
@@ -217,22 +214,19 @@ void OSpit::xogehnbooknextpage(const ArgumentArray &args) {
uint32 &page = _vm->_vars["ogehnpage"];
// Keep turning pages while the mouse is pressed
- bool firstPageTurn = true;
- while ((mouseIsDown() || firstPageTurn) && !_vm->hasGameEnded()) {
+ while (keepTurningPages()) {
// Check for the last page
if (page == 13)
return;
- if (!pageTurn(kRivenTransitionWipeLeft)) {
- return;
- }
-
// Update the page number
page++;
- firstPageTurn = false;
+ pageTurn(kRivenTransitionWipeLeft);
_vm->getCard()->drawPicture(page);
_vm->doFrame();
+
+ waitForPageTurnSound();
}
}