MYST3: Implement opcodes 164 to 166 - change node
This commit is contained in:
parent
1491a1eb6b
commit
0e247c7343
4 changed files with 37 additions and 10 deletions
|
@ -42,6 +42,9 @@ Movie::Movie(Myst3Engine *vm, uint16 id) :
|
||||||
if (!binkDesc)
|
if (!binkDesc)
|
||||||
binkDesc = _vm->getFileDescription(0, id, 0, DirectorySubEntry::kMultitrackMovie);
|
binkDesc = _vm->getFileDescription(0, id, 0, DirectorySubEntry::kMultitrackMovie);
|
||||||
|
|
||||||
|
if (!binkDesc)
|
||||||
|
binkDesc = _vm->getFileDescription(0, id, 0, DirectorySubEntry::kDialogMovie);
|
||||||
|
|
||||||
if (!binkDesc)
|
if (!binkDesc)
|
||||||
error("Movie %d does not exist", id);
|
error("Movie %d does not exist", id);
|
||||||
|
|
||||||
|
|
|
@ -345,16 +345,6 @@ void Myst3Engine::drawFrame() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Myst3Engine::goToNode(uint16 nodeID, uint transition) {
|
void Myst3Engine::goToNode(uint16 nodeID, uint transition) {
|
||||||
if (_node) {
|
|
||||||
for (uint i = 0; i < _movies.size(); i++) {
|
|
||||||
delete _movies[i];
|
|
||||||
}
|
|
||||||
_movies.clear();
|
|
||||||
|
|
||||||
delete _node;
|
|
||||||
_node = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16 node = _state->getLocationNextNode();
|
uint16 node = _state->getLocationNextNode();
|
||||||
if (node == 0)
|
if (node == 0)
|
||||||
node = nodeID;
|
node = nodeID;
|
||||||
|
@ -370,6 +360,16 @@ void Myst3Engine::goToNode(uint16 nodeID, uint transition) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Myst3Engine::loadNode(uint16 nodeID, uint32 roomID, uint32 ageID) {
|
void Myst3Engine::loadNode(uint16 nodeID, uint32 roomID, uint32 ageID) {
|
||||||
|
if (_node) {
|
||||||
|
for (uint i = 0; i < _movies.size(); i++) {
|
||||||
|
delete _movies[i];
|
||||||
|
}
|
||||||
|
_movies.clear();
|
||||||
|
|
||||||
|
delete _node;
|
||||||
|
_node = 0;
|
||||||
|
}
|
||||||
|
|
||||||
_scriptEngine->run(&_db->getNodeInitScript());
|
_scriptEngine->run(&_db->getNodeInitScript());
|
||||||
|
|
||||||
if (nodeID)
|
if (nodeID)
|
||||||
|
|
|
@ -152,6 +152,9 @@ Script::Script(Myst3Engine *vm):
|
||||||
OP_2(141, zipToRoomNode, kValue, kValue );
|
OP_2(141, zipToRoomNode, kValue, kValue );
|
||||||
OP_1(147, moviePlay, kEvalValue );
|
OP_1(147, moviePlay, kEvalValue );
|
||||||
OP_1(148, moviePlaySynchronized, kEvalValue );
|
OP_1(148, moviePlaySynchronized, kEvalValue );
|
||||||
|
OP_1(164, changeNode, kValue );
|
||||||
|
OP_2(165, changeNodeRoom, kValue, kValue );
|
||||||
|
OP_3(166, changeNodeRoomAge, kValue, kValue, kValue );
|
||||||
OP_2(174, runScriptWhileCond, kCondition, kValue );
|
OP_2(174, runScriptWhileCond, kCondition, kValue );
|
||||||
OP_3(175, runScriptWhileCondEachXFrames,kCondition, kValue, kValue );
|
OP_3(175, runScriptWhileCondEachXFrames,kCondition, kValue, kValue );
|
||||||
OP_4(176, runScriptForVar, kVar, kValue, kValue, kValue );
|
OP_4(176, runScriptForVar, kVar, kValue, kValue, kValue );
|
||||||
|
@ -1357,6 +1360,24 @@ void Script::moviePlaySynchronized(Context &c, const Opcode &cmd) {
|
||||||
_vm->playSimpleMovie(_vm->_state->valueOrVarValue(cmd.args[0]));
|
_vm->playSimpleMovie(_vm->_state->valueOrVarValue(cmd.args[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Script::changeNode(Context &c, const Opcode &cmd) {
|
||||||
|
debugC(kDebugScript, "Opcode %d: Go to node %d", cmd.op, cmd.args[0]);
|
||||||
|
|
||||||
|
_vm->loadNode(cmd.args[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Script::changeNodeRoom(Context &c, const Opcode &cmd) {
|
||||||
|
debugC(kDebugScript, "Opcode %d: Go to node %d room %d", cmd.op, cmd.args[0], cmd.args[1]);
|
||||||
|
|
||||||
|
_vm->loadNode(cmd.args[1], cmd.args[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Script::changeNodeRoomAge(Context &c, const Opcode &cmd) {
|
||||||
|
debugC(kDebugScript, "Opcode %d: Go to node %d room %d age %d", cmd.op, cmd.args[2], cmd.args[1], cmd.args[0]);
|
||||||
|
|
||||||
|
_vm->loadNode(cmd.args[2], cmd.args[1], cmd.args[0]);
|
||||||
|
}
|
||||||
|
|
||||||
void Script::runScriptWhileCond(Context &c, const Opcode &cmd) {
|
void Script::runScriptWhileCond(Context &c, const Opcode &cmd) {
|
||||||
debugC(kDebugScript, "Opcode %d: While condition %d, run script %d", cmd.op, cmd.args[0], cmd.args[1]);
|
debugC(kDebugScript, "Opcode %d: While condition %d, run script %d", cmd.op, cmd.args[0], cmd.args[1]);
|
||||||
|
|
||||||
|
|
|
@ -205,6 +205,9 @@ private:
|
||||||
DECLARE_OPCODE(zipToRoomNode);
|
DECLARE_OPCODE(zipToRoomNode);
|
||||||
DECLARE_OPCODE(moviePlay);
|
DECLARE_OPCODE(moviePlay);
|
||||||
DECLARE_OPCODE(moviePlaySynchronized);
|
DECLARE_OPCODE(moviePlaySynchronized);
|
||||||
|
DECLARE_OPCODE(changeNode);
|
||||||
|
DECLARE_OPCODE(changeNodeRoom);
|
||||||
|
DECLARE_OPCODE(changeNodeRoomAge);
|
||||||
DECLARE_OPCODE(runScriptWhileCond);
|
DECLARE_OPCODE(runScriptWhileCond);
|
||||||
DECLARE_OPCODE(runScriptWhileCondEachXFrames);
|
DECLARE_OPCODE(runScriptWhileCondEachXFrames);
|
||||||
DECLARE_OPCODE(runScriptForVar);
|
DECLARE_OPCODE(runScriptForVar);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue