MYST3: Implement opcodes 149 and 150 - Play fullframe movie
This commit is contained in:
parent
59eb3dd66f
commit
dd4b8abaa5
4 changed files with 41 additions and 2 deletions
|
@ -915,9 +915,10 @@ void Myst3Engine::playMovieGoToNode(uint16 movie, uint16 node) {
|
||||||
_state->setCameraSkipAnimation(0);
|
_state->setCameraSkipAnimation(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
playSimpleMovie(movie, true);
|
|
||||||
loadNode(node, room, age);
|
loadNode(node, room, age);
|
||||||
|
|
||||||
|
playSimpleMovie(movie, true);
|
||||||
|
|
||||||
_state->setLocationNextNode(0);
|
_state->setLocationNextNode(0);
|
||||||
_state->setLocationNextRoom(0);
|
_state->setLocationNextRoom(0);
|
||||||
_state->setLocationNextAge(0);
|
_state->setLocationNextAge(0);
|
||||||
|
@ -929,4 +930,21 @@ void Myst3Engine::playMovieGoToNode(uint16 movie, uint16 node) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Myst3Engine::playMovieFullFrame(uint16 movie) {
|
||||||
|
if (_state->getViewType() == kCube && !_state->getCameraSkipAnimation()) {
|
||||||
|
float startPitch, startHeading;
|
||||||
|
getMovieLookAt(movie, true, startPitch, startHeading);
|
||||||
|
animateDirectionChange(startPitch, startHeading, 0);
|
||||||
|
_state->setCameraSkipAnimation(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
playSimpleMovie(movie, true);
|
||||||
|
|
||||||
|
if (_state->getViewType() == kCube) {
|
||||||
|
float endPitch, endHeading;
|
||||||
|
getMovieLookAt(movie, false, endPitch, endHeading);
|
||||||
|
_state->lookAt(endPitch, endHeading);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // end of namespace Myst3
|
} // end of namespace Myst3
|
||||||
|
|
|
@ -106,6 +106,7 @@ public:
|
||||||
|
|
||||||
void loadMovie(uint16 id, uint16 condition, bool resetCond, bool loop);
|
void loadMovie(uint16 id, uint16 condition, bool resetCond, bool loop);
|
||||||
void playMovieGoToNode(uint16 movie, uint16 node);
|
void playMovieGoToNode(uint16 movie, uint16 node);
|
||||||
|
void playMovieFullFrame(uint16 movie);
|
||||||
void playSimpleMovie(uint16 id, bool fullframe = false);
|
void playSimpleMovie(uint16 id, bool fullframe = false);
|
||||||
void removeMovie(uint16 id);
|
void removeMovie(uint16 id);
|
||||||
void setMovieLooping(uint16 id, bool loop);
|
void setMovieLooping(uint16 id, bool loop);
|
||||||
|
|
|
@ -174,6 +174,8 @@ 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(149, moviePlayFullFrame, kEvalValue );
|
||||||
|
OP_1(150, moviePlayFullFrameTrans, kEvalValue );
|
||||||
OP_2(151, moviePlayChangeNode, kEvalValue, kEvalValue );
|
OP_2(151, moviePlayChangeNode, kEvalValue, kEvalValue );
|
||||||
OP_2(152, moviePlayChangeNodeTrans, kEvalValue, kEvalValue );
|
OP_2(152, moviePlayChangeNodeTrans, kEvalValue, kEvalValue );
|
||||||
OP_2(153, lootAt, kValue, kValue );
|
OP_2(153, lootAt, kValue, kValue );
|
||||||
|
@ -1893,6 +1895,22 @@ void Script::runScriptWhileCondEachXFrames(Context &c, const Opcode &cmd) {
|
||||||
_vm->drawFrame();
|
_vm->drawFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Script::moviePlayFullFrame(Context &c, const Opcode &cmd) {
|
||||||
|
debugC(kDebugScript, "Opcode %d: Play movie %d", cmd.op, cmd.args[0]);
|
||||||
|
|
||||||
|
uint16 movieId = _vm->_state->valueOrVarValue(cmd.args[0]);
|
||||||
|
_vm->playMovieFullFrame(movieId);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Script::moviePlayFullFrameTrans(Context &c, const Opcode &cmd) {
|
||||||
|
debugC(kDebugScript, "Opcode %d: Play movie %d with transition", cmd.op, cmd.args[0]);
|
||||||
|
|
||||||
|
uint16 movieId = _vm->_state->valueOrVarValue(cmd.args[0]);
|
||||||
|
_vm->playMovieFullFrame(movieId);
|
||||||
|
|
||||||
|
// TODO: Transition
|
||||||
|
}
|
||||||
|
|
||||||
void Script::moviePlayChangeNode(Context &c, const Opcode &cmd) {
|
void Script::moviePlayChangeNode(Context &c, const Opcode &cmd) {
|
||||||
debugC(kDebugScript, "Opcode %d: Play movie %d, go to node %d", cmd.op, cmd.args[1], cmd.args[0]);
|
debugC(kDebugScript, "Opcode %d: Play movie %d, go to node %d", cmd.op, cmd.args[1], cmd.args[0]);
|
||||||
|
|
||||||
|
|
|
@ -224,6 +224,8 @@ private:
|
||||||
DECLARE_OPCODE(zipToRoomNode);
|
DECLARE_OPCODE(zipToRoomNode);
|
||||||
DECLARE_OPCODE(moviePlay);
|
DECLARE_OPCODE(moviePlay);
|
||||||
DECLARE_OPCODE(moviePlaySynchronized);
|
DECLARE_OPCODE(moviePlaySynchronized);
|
||||||
|
DECLARE_OPCODE(moviePlayFullFrame);
|
||||||
|
DECLARE_OPCODE(moviePlayFullFrameTrans);
|
||||||
DECLARE_OPCODE(moviePlayChangeNode);
|
DECLARE_OPCODE(moviePlayChangeNode);
|
||||||
DECLARE_OPCODE(moviePlayChangeNodeTrans);
|
DECLARE_OPCODE(moviePlayChangeNodeTrans);
|
||||||
DECLARE_OPCODE(lootAt);
|
DECLARE_OPCODE(lootAt);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue