aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk/riven_scripts.cpp
diff options
context:
space:
mode:
authorMatthew Hoops2011-06-14 10:35:58 -0400
committerMatthew Hoops2011-06-14 10:36:49 -0400
commit5174832e314b4c63ac2a7fd89c09f48fafc68a69 (patch)
tree89e1dce2b174c58be06f16683bac601810ebe2e0 /engines/mohawk/riven_scripts.cpp
parentde96474672cc8c18fe189dda2958c505692f9389 (diff)
downloadscummvm-rg350-5174832e314b4c63ac2a7fd89c09f48fafc68a69.tar.gz
scummvm-rg350-5174832e314b4c63ac2a7fd89c09f48fafc68a69.tar.bz2
scummvm-rg350-5174832e314b4c63ac2a7fd89c09f48fafc68a69.zip
MOHAWK: Finish implementation of Riven's storeMovieOpcode opcode
Diffstat (limited to 'engines/mohawk/riven_scripts.cpp')
-rw-r--r--engines/mohawk/riven_scripts.cpp26
1 files changed, 10 insertions, 16 deletions
diff --git a/engines/mohawk/riven_scripts.cpp b/engines/mohawk/riven_scripts.cpp
index b3d5369a84..8abce10f3b 100644
--- a/engines/mohawk/riven_scripts.cpp
+++ b/engines/mohawk/riven_scripts.cpp
@@ -536,6 +536,10 @@ void RivenScript::fadeAmbientSounds(uint16 op, uint16 argc, uint16 *argv) {
// Command 38: Store an opcode for use when playing a movie (movie id, time high, time low, opcode, arguments...)
void RivenScript::storeMovieOpcode(uint16 op, uint16 argc, uint16 *argv) {
+ // This opcode is used to delay an opcode's usage based on the elapsed
+ // time of a specified movie. However, every use in the game is for
+ // delaying an activateSLST opcode.
+
uint32 scriptSize = 6 + (argc - 4) * 2;
// Create our dummy script
@@ -557,13 +561,11 @@ void RivenScript::storeMovieOpcode(uint16 op, uint16 argc, uint16 *argv) {
// Store the script
RivenScriptManager::StoredMovieOpcode storedOp;
storedOp.script = script;
- storedOp.time = delayTime + _vm->getTotalPlayTime();
+ storedOp.time = delayTime;
storedOp.id = argv[0];
- // TODO: Actually store the movie and call it in our movie loop
- // For now, just delete the script and move on
- //_vm->_scriptMan->setStoredMovieOpcode(storedOp);
- delete script;
+ // Store the opcode for later
+ _vm->_scriptMan->setStoredMovieOpcode(storedOp);
} else {
// Run immediately if we have no delay
script->runScript();
@@ -716,18 +718,10 @@ void RivenScriptManager::setStoredMovieOpcode(const StoredMovieOpcode &op) {
_storedMovieOpcode.time = op.time;
}
-void RivenScriptManager::runStoredMovieOpcode(uint16 id) {
+void RivenScriptManager::runStoredMovieOpcode() {
if (_storedMovieOpcode.script) {
- if (_storedMovieOpcode.id == id) {
- // If we've passed the time, run our script
- if (_vm->getTotalPlayTime() >= _storedMovieOpcode.time) {
- _storedMovieOpcode.script->runScript();
- clearStoredMovieOpcode();
- }
- } else {
- // We're on a completely different video, kill off any remaining opcode
- clearStoredMovieOpcode();
- }
+ _storedMovieOpcode.script->runScript();
+ clearStoredMovieOpcode();
}
}