aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/director/director.h1
-rw-r--r--engines/director/lingo/lingo-code.cpp14
-rw-r--r--engines/director/lingo/lingo-funcs.cpp18
-rw-r--r--engines/director/lingo/lingo.h1
4 files changed, 17 insertions, 17 deletions
diff --git a/engines/director/director.h b/engines/director/director.h
index e6835bca3a..1c3d77fc71 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -121,6 +121,7 @@ public:
bool _skipFrameAdvance;
MovieReference _nextMovie;
+ Common::List<MovieReference> _movieStack;
protected:
virtual Common::Error run();
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 3cc3d0d540..d2cdfb2d07 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1003,19 +1003,7 @@ void Lingo::c_play() {
if (mode.u.i == 1 || mode.u.i == 3)
frame = g_lingo->pop();
- if (frame.type == VOID) {
- frame.u.s = new Common::String("<void>");
- frame.type = STRING;
- }
- frame.toString();
-
- if (movie.type == VOID) {
- movie.u.s = new Common::String("<void>");
- movie.type = STRING;
- }
- movie.toString();
-
- warning("STUB: c_play(%s, %s)", frame.u.s->c_str(), movie.u.s->c_str());
+ g_lingo->func_play(frame, movie);
}
void Lingo::c_playdone() {
diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index d4e24bcd32..9232bd1a52 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -172,7 +172,7 @@ void Lingo::func_mciwait(Common::String &s) {
}
void Lingo::func_goto(Datum &frame, Datum &movie) {
- g_director->_playbackPaused = false;
+ _vm->_playbackPaused = false;
if (!_vm->getCurrentScore())
return;
@@ -255,7 +255,7 @@ void Lingo::func_gotoloop() {
_vm->getCurrentScore()->gotoLoop();
- g_director->_skipFrameAdvance = true;
+ _vm->_skipFrameAdvance = true;
}
void Lingo::func_gotonext() {
@@ -264,7 +264,7 @@ void Lingo::func_gotonext() {
_vm->getCurrentScore()->gotoNext();
- g_director->_skipFrameAdvance = true;
+ _vm->_skipFrameAdvance = true;
}
void Lingo::func_gotoprevious() {
@@ -273,7 +273,17 @@ void Lingo::func_gotoprevious() {
_vm->getCurrentScore()->gotoPrevious();
- g_director->_skipFrameAdvance = true;
+ _vm->_skipFrameAdvance = true;
+}
+
+void Lingo::func_play(Datum &frame, Datum &movie) {
+ MovieReference ref;
+
+ ref.frameI = _vm->getCurrentScore()->getCurrentFrame();
+
+ _vm->_movieStack.push_back(ref);
+
+ func_goto(frame, movie);
}
void Lingo::func_cursor(int c) {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 550156c1c7..6170acfdaf 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -498,6 +498,7 @@ public:
void func_gotoloop();
void func_gotonext();
void func_gotoprevious();
+ void func_play(Datum &frame, Datum &movie);
void func_cursor(int c);
int func_marker(int m);