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) {
|
void Myst3Engine::loadNode(uint16 nodeID, uint32 roomID, uint32 ageID) {
|
||||||
if (_node) {
|
if (_node) {
|
||||||
for (uint i = 0; i < _movies.size(); i++) {
|
// Delete all movies
|
||||||
delete _movies[i];
|
removeMovie(0);
|
||||||
}
|
|
||||||
_movies.clear();
|
|
||||||
|
|
||||||
delete _node;
|
delete _node;
|
||||||
_node = 0;
|
_node = 0;
|
||||||
|
@ -599,6 +597,23 @@ void Myst3Engine::playSimpleMovie(uint16 id) {
|
||||||
_drawables.pop_back();
|
_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) {
|
void Myst3Engine::setMovieLooping(uint16 id, bool loop) {
|
||||||
for (uint i = 0; i < _movies.size(); i++) {
|
for (uint i = 0; i < _movies.size(); i++) {
|
||||||
if (_movies[i]->getId() == id) {
|
if (_movies[i]->getId() == id) {
|
||||||
|
|
|
@ -97,6 +97,7 @@ public:
|
||||||
|
|
||||||
void loadMovie(uint16 id, uint16 condition, bool resetCond, bool loop);
|
void loadMovie(uint16 id, uint16 condition, bool resetCond, bool loop);
|
||||||
void playSimpleMovie(uint16 id);
|
void playSimpleMovie(uint16 id);
|
||||||
|
void removeMovie(uint16 id);
|
||||||
void setMovieLooping(uint16 id, bool loop);
|
void setMovieLooping(uint16 id, bool loop);
|
||||||
|
|
||||||
void addSpotItem(uint16 id, uint16 condition, bool fade);
|
void addSpotItem(uint16 id, uint16 condition, bool fade);
|
||||||
|
|
|
@ -66,6 +66,8 @@ Script::Script(Myst3Engine *vm):
|
||||||
OP_2( 24, movieInitFrameVarPreload, kEvalValue, kVar );
|
OP_2( 24, movieInitFrameVarPreload, kEvalValue, kVar );
|
||||||
OP_4( 25, movieInitOverrridePosition, kEvalValue, kCondition, kValue, kValue );
|
OP_4( 25, movieInitOverrridePosition, kEvalValue, kCondition, kValue, kValue );
|
||||||
OP_3( 26, movieInitScriptedPosition, kEvalValue, kVar, kVar );
|
OP_3( 26, movieInitScriptedPosition, kEvalValue, kVar, kVar );
|
||||||
|
OP_1( 27, movieRemove, kEvalValue );
|
||||||
|
OP_0( 28, movieRemoveAll );
|
||||||
OP_1( 29, movieSetLooping, kValue );
|
OP_1( 29, movieSetLooping, kValue );
|
||||||
OP_1( 30, movieSetNotLooping, kValue );
|
OP_1( 30, movieSetNotLooping, kValue );
|
||||||
OP_2( 35, sunspotAdd, kValue, 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);
|
_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) {
|
void Script::movieSetLooping(Context &c, const Opcode &cmd) {
|
||||||
debugC(kDebugScript, "Opcode %d: Set movie % to loop",
|
debugC(kDebugScript, "Opcode %d: Set movie % to loop",
|
||||||
cmd.op, cmd.args[0]);
|
cmd.op, cmd.args[0]);
|
||||||
|
|
|
@ -117,6 +117,8 @@ private:
|
||||||
DECLARE_OPCODE(movieInitFrameVarPreload);
|
DECLARE_OPCODE(movieInitFrameVarPreload);
|
||||||
DECLARE_OPCODE(movieInitOverrridePosition);
|
DECLARE_OPCODE(movieInitOverrridePosition);
|
||||||
DECLARE_OPCODE(movieInitScriptedPosition);
|
DECLARE_OPCODE(movieInitScriptedPosition);
|
||||||
|
DECLARE_OPCODE(movieRemove);
|
||||||
|
DECLARE_OPCODE(movieRemoveAll);
|
||||||
DECLARE_OPCODE(movieSetLooping);
|
DECLARE_OPCODE(movieSetLooping);
|
||||||
DECLARE_OPCODE(movieSetNotLooping);
|
DECLARE_OPCODE(movieSetNotLooping);
|
||||||
DECLARE_OPCODE(sunspotAdd);
|
DECLARE_OPCODE(sunspotAdd);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue