aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Hoops2010-09-01 23:39:25 +0000
committerMatthew Hoops2010-09-01 23:39:25 +0000
commit1475f756539e81182cb9aaa8188ddb354ea7769f (patch)
tree1c378a273e740bf73de6da223a8a17d955133546
parenta053ef7cd18400058af9ec39e53481ba88455b96 (diff)
downloadscummvm-rg350-1475f756539e81182cb9aaa8188ddb354ea7769f.tar.gz
scummvm-rg350-1475f756539e81182cb9aaa8188ddb354ea7769f.tar.bz2
scummvm-rg350-1475f756539e81182cb9aaa8188ddb354ea7769f.zip
MOHAWK: Update videos when the delay opcode is called
The fixes a couple scripts which decide to delay through a background video turning into a virtual blocking video. svn-id: r52488
-rw-r--r--engines/mohawk/riven.cpp18
-rw-r--r--engines/mohawk/riven.h12
-rw-r--r--engines/mohawk/riven_scripts.cpp2
3 files changed, 27 insertions, 5 deletions
diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp
index 18ebea20db..4c53f867d3 100644
--- a/engines/mohawk/riven.cpp
+++ b/engines/mohawk/riven.cpp
@@ -593,6 +593,24 @@ void MohawkEngine_Riven::runHotspotScript(uint16 hotspot, uint16 scriptType) {
}
}
+void MohawkEngine_Riven::delayAndUpdate(uint32 ms) {
+ uint32 startTime = _system->getMillis();
+
+ while (_system->getMillis() < startTime + ms && !shouldQuit()) {
+ bool needsUpdate = _gfx->runScheduledWaterEffects();
+ needsUpdate |= _video->updateBackgroundMovies();
+
+ Common::Event event;
+ while (_system->getEventManager()->pollEvent(event))
+ ;
+
+ if (needsUpdate)
+ _system->updateScreen();
+
+ _system->delayMillis(10); // Ease off the CPU
+ }
+}
+
void MohawkEngine_Riven::runLoadDialog() {
GUI::SaveLoadChooser slc("Load Game:", "Load");
slc.setSaveMode(false);
diff --git a/engines/mohawk/riven.h b/engines/mohawk/riven.h
index aa97250627..d65dd7db05 100644
--- a/engines/mohawk/riven.h
+++ b/engines/mohawk/riven.h
@@ -153,10 +153,7 @@ private:
bool _ignoreNextMouseUp;
public:
- Common::SeekableReadStream *getExtrasResource(uint32 tag, uint16 id);
- bool _activatedSLST;
- void runLoadDialog();
-
+ // Stack/card/script funtions
void changeToCard(uint16 dest);
void changeToStack(uint16);
void refreshCard();
@@ -169,6 +166,7 @@ public:
uint16 matchRMAPToCard(uint32);
uint32 getCurCardRMAP();
+ // Hotspot functions/variables
RivenHotspot *_hotspots;
int32 _curHotspot;
Common::Array<ZipMode> _zipModeData;
@@ -177,6 +175,7 @@ public:
int32 getCurHotspot() { return _curHotspot; }
Common::String getHotspotName(uint16 hotspot);
+ // Variable functions
void initVars();
uint32 getVarCount() { return _varCount; }
uint32 getGlobalVar(uint32 index);
@@ -185,8 +184,13 @@ public:
uint32 *matchVarToString(Common::String varName);
uint32 *matchVarToString(const char *varName);
+ // Miscellaneous
void setGameOver() { _gameOver = true; }
void ignoreNextMouseUp() { _ignoreNextMouseUp = true; }
+ Common::SeekableReadStream *getExtrasResource(uint32 tag, uint16 id);
+ bool _activatedSLST;
+ void runLoadDialog();
+ void delayAndUpdate(uint32 ms);
};
} // End of namespace Mohawk
diff --git a/engines/mohawk/riven_scripts.cpp b/engines/mohawk/riven_scripts.cpp
index 17ff0716c5..2b91dce35a 100644
--- a/engines/mohawk/riven_scripts.cpp
+++ b/engines/mohawk/riven_scripts.cpp
@@ -398,7 +398,7 @@ void RivenScript::changeCursor(uint16 op, uint16 argc, uint16 *argv) {
void RivenScript::delay(uint16 op, uint16 argc, uint16 *argv) {
debug(2, "Delay %dms", argv[0]);
if (argv[0] > 0)
- _vm->_system->delayMillis(argv[0]);
+ _vm->delayAndUpdate(argv[0]);
}
// Command 17: call external command