MYST3: Implement opcodes 27 and 28 - remove movie
This commit is contained in:
parent
044fe33b1d
commit
aa1b799904
4 changed files with 39 additions and 4 deletions
|
@ -360,10 +360,8 @@ void Myst3Engine::goToNode(uint16 nodeID, uint transition) {
|
|||
|
||||
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 all movies
|
||||
removeMovie(0);
|
||||
|
||||
delete _node;
|
||||
_node = 0;
|
||||
|
@ -599,6 +597,23 @@ void Myst3Engine::playSimpleMovie(uint16 id) {
|
|||
_drawables.pop_back();
|
||||
}
|
||||
|
||||
void Myst3Engine::removeMovie(uint16 id) {
|
||||
if (id == 0) {
|
||||
for (uint i = 0; i < _movies.size(); i++)
|
||||
delete _movies[i];
|
||||
|
||||
_movies.clear();
|
||||
return;
|
||||
} else {
|
||||
for (uint i = 0; i < _movies.size(); i++)
|
||||
if (_movies[i]->getId() == id) {
|
||||
delete _movies[i];
|
||||
_movies.remove_at(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Myst3Engine::setMovieLooping(uint16 id, bool loop) {
|
||||
for (uint i = 0; i < _movies.size(); i++) {
|
||||
if (_movies[i]->getId() == id) {
|
||||
|
|
|
@ -97,6 +97,7 @@ public:
|
|||
|
||||
void loadMovie(uint16 id, uint16 condition, bool resetCond, bool loop);
|
||||
void playSimpleMovie(uint16 id);
|
||||
void removeMovie(uint16 id);
|
||||
void setMovieLooping(uint16 id, bool loop);
|
||||
|
||||
void addSpotItem(uint16 id, uint16 condition, bool fade);
|
||||
|
|
|
@ -66,6 +66,8 @@ Script::Script(Myst3Engine *vm):
|
|||
OP_2( 24, movieInitFrameVarPreload, kEvalValue, kVar );
|
||||
OP_4( 25, movieInitOverrridePosition, kEvalValue, kCondition, kValue, kValue );
|
||||
OP_3( 26, movieInitScriptedPosition, kEvalValue, kVar, kVar );
|
||||
OP_1( 27, movieRemove, kEvalValue );
|
||||
OP_0( 28, movieRemoveAll );
|
||||
OP_1( 29, movieSetLooping, kValue );
|
||||
OP_1( 30, movieSetNotLooping, kValue );
|
||||
OP_2( 35, sunspotAdd, kValue, kValue );
|
||||
|
@ -513,6 +515,21 @@ void Script::movieInitScriptedPosition(Context &c, const Opcode &cmd) {
|
|||
_vm->loadMovie(movieid, 1, false, true);
|
||||
}
|
||||
|
||||
void Script::movieRemove(Context &c, const Opcode &cmd) {
|
||||
debugC(kDebugScript, "Opcode %d: Remove movie %d ",
|
||||
cmd.op, cmd.args[0]);
|
||||
|
||||
uint16 movieid = _vm->_state->valueOrVarValue(cmd.args[0]);
|
||||
_vm->removeMovie(movieid);
|
||||
}
|
||||
|
||||
void Script::movieRemoveAll(Context &c, const Opcode &cmd) {
|
||||
debugC(kDebugScript, "Opcode %d: Remove all movies",
|
||||
cmd.op);
|
||||
|
||||
_vm->removeMovie(0);
|
||||
}
|
||||
|
||||
void Script::movieSetLooping(Context &c, const Opcode &cmd) {
|
||||
debugC(kDebugScript, "Opcode %d: Set movie % to loop",
|
||||
cmd.op, cmd.args[0]);
|
||||
|
|
|
@ -117,6 +117,8 @@ private:
|
|||
DECLARE_OPCODE(movieInitFrameVarPreload);
|
||||
DECLARE_OPCODE(movieInitOverrridePosition);
|
||||
DECLARE_OPCODE(movieInitScriptedPosition);
|
||||
DECLARE_OPCODE(movieRemove);
|
||||
DECLARE_OPCODE(movieRemoveAll);
|
||||
DECLARE_OPCODE(movieSetLooping);
|
||||
DECLARE_OPCODE(movieSetNotLooping);
|
||||
DECLARE_OPCODE(sunspotAdd);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue