MOHAWK: Use movie slots instead of movie ids for stored opcodes

Fixes Trac#9873.
This commit is contained in:
Bastien Bouclet 2017-07-05 19:10:41 +02:00
parent afe27c6de8
commit 31d428fd02
3 changed files with 8 additions and 8 deletions

View file

@ -47,7 +47,7 @@ RivenScriptManager::RivenScriptManager(MohawkEngine_Riven *vm) :
_stoppingAllScripts(false) { _stoppingAllScripts(false) {
_storedMovieOpcode.time = 0; _storedMovieOpcode.time = 0;
_storedMovieOpcode.id = 0; _storedMovieOpcode.slot = 0;
} }
RivenScriptManager::~RivenScriptManager() { RivenScriptManager::~RivenScriptManager() {
@ -101,7 +101,7 @@ void RivenScriptManager::stopAllScripts() {
void RivenScriptManager::setStoredMovieOpcode(const StoredMovieOpcode &op) { void RivenScriptManager::setStoredMovieOpcode(const StoredMovieOpcode &op) {
clearStoredMovieOpcode(); clearStoredMovieOpcode();
_storedMovieOpcode.script = op.script; _storedMovieOpcode.script = op.script;
_storedMovieOpcode.id = op.id; _storedMovieOpcode.slot = op.slot;
_storedMovieOpcode.time = op.time; _storedMovieOpcode.time = op.time;
} }
@ -115,7 +115,7 @@ void RivenScriptManager::runStoredMovieOpcode() {
void RivenScriptManager::clearStoredMovieOpcode() { void RivenScriptManager::clearStoredMovieOpcode() {
_storedMovieOpcode.script = RivenScriptPtr(); _storedMovieOpcode.script = RivenScriptPtr();
_storedMovieOpcode.time = 0; _storedMovieOpcode.time = 0;
_storedMovieOpcode.id = 0; _storedMovieOpcode.slot = 0;
} }
void RivenScriptManager::runScript(const RivenScriptPtr &script, bool queue) { void RivenScriptManager::runScript(const RivenScriptPtr &script, bool queue) {
@ -573,7 +573,7 @@ void RivenSimpleCommand::storeMovieOpcode(uint16 op, const ArgumentArray &args)
RivenScriptManager::StoredMovieOpcode storedOp; RivenScriptManager::StoredMovieOpcode storedOp;
storedOp.script = _vm->_scriptMan->createScriptFromData(1, args[3], 1, args[4]); storedOp.script = _vm->_scriptMan->createScriptFromData(1, args[3], 1, args[4]);
storedOp.time = delayTime; storedOp.time = delayTime;
storedOp.id = args[0]; storedOp.slot = args[0];
// Store the opcode for later // Store the opcode for later
_vm->_scriptMan->setStoredMovieOpcode(storedOp); _vm->_scriptMan->setStoredMovieOpcode(storedOp);

View file

@ -212,10 +212,10 @@ public:
struct StoredMovieOpcode { struct StoredMovieOpcode {
RivenScriptPtr script; RivenScriptPtr script;
uint32 time; uint32 time;
uint16 id; uint16 slot;
}; };
uint16 getStoredMovieOpcodeID() { return _storedMovieOpcode.id; } uint16 getStoredMovieOpcodeSlot() { return _storedMovieOpcode.slot; }
uint32 getStoredMovieOpcodeTime() { return _storedMovieOpcode.time; } uint32 getStoredMovieOpcodeTime() { return _storedMovieOpcode.time; }
void setStoredMovieOpcode(const StoredMovieOpcode &op); void setStoredMovieOpcode(const StoredMovieOpcode &op);
void runStoredMovieOpcode(); void runStoredMovieOpcode();

View file

@ -257,9 +257,9 @@ void RivenVideo::playBlocking(int32 endTime) {
} }
// Execute the stored opcode // Execute the stored opcode
uint16 storedOpcodeId = _vm->_scriptMan->getStoredMovieOpcodeID(); uint16 storedOpcodeMovieSlot = _vm->_scriptMan->getStoredMovieOpcodeSlot();
uint32 storedOpcodeTime = _vm->_scriptMan->getStoredMovieOpcodeTime(); uint32 storedOpcodeTime = _vm->_scriptMan->getStoredMovieOpcodeTime();
if (_id == storedOpcodeId && getTime() >= storedOpcodeTime) { // CHECKME: Suspicious use of time units if (_slot == storedOpcodeMovieSlot && getTime() >= storedOpcodeTime) { // CHECKME: Suspicious use of time units
_vm->_scriptMan->runStoredMovieOpcode(); _vm->_scriptMan->runStoredMovieOpcode();
} }