[Scummvm-git-logs] scummvm master -> 5eb38c5d1c162cc894e57959882f268970353afe
sev-
sev at scummvm.org
Fri Feb 24 19:26:29 CET 2017
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
e65df86ef1 DIRECTOR: Encapsulated _nextMovie parameters into a string
99f976e3ae DIRECTOR: Lingo: Initial code for func_play()
5eb38c5d1c DIRECTOR: Lingo: Initial code for func_playdone()
Commit: e65df86ef1f22089eb9803502087daba3a29c2e2
https://github.com/scummvm/scummvm/commit/e65df86ef1f22089eb9803502087daba3a29c2e2
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-02-24T19:02:57+01:00
Commit Message:
DIRECTOR: Encapsulated _nextMovie parameters into a string
Changed paths:
engines/director/director.cpp
engines/director/director.h
engines/director/lingo/lingo-funcs.cpp
diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index bfe9a72..a1ee253 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -78,7 +78,7 @@ DirectorEngine::DirectorEngine(OSystem *syst, const DirectorGameDescription *gam
_movies = nullptr;
- _nextMovieFrameI = -1;
+ _nextMovie.frameI = -1;
_wm = nullptr;
@@ -165,21 +165,25 @@ Common::Error DirectorEngine::run() {
_currentScore->loadArchive();
// If we came in a loop, then skip as requested
- if (!_nextMovieFrameS.empty())
- _currentScore->setStartToLabel(_nextMovieFrameS);
+ if (!_nextMovie.frameS.empty()) {
+ _currentScore->setStartToLabel(_nextMovie.frameS);
+ _nextMovie.frameS.clear();
+ }
- if (_nextMovieFrameI != -1)
- _currentScore->setCurrentFrame(_nextMovieFrameI);
+ if (_nextMovie.frameI != -1) {
+ _currentScore->setCurrentFrame(_nextMovie.frameI);
+ _nextMovie.frameI = -1;
+ }
_currentScore->startLoop();
// If a loop was requested, do it
- if (!_nextMovie.empty()) {
+ if (!_nextMovie.movie.empty()) {
_lingo->restartLingo();
delete _currentScore;
- Archive *mov = openMainArchive(_nextMovie);
+ Archive *mov = openMainArchive(_nextMovie.movie);
if (!mov) {
warning("nextMovie: No score is loaded");
@@ -190,7 +194,7 @@ Common::Error DirectorEngine::run() {
_currentScore = new Score(this, mov);
debug(0, "Score name %s", _currentScore->getMacName().c_str());
- _nextMovie.clear();
+ _nextMovie.movie.clear();
loop = true;
}
}
diff --git a/engines/director/director.h b/engines/director/director.h
index fdbe8de..e6835bc 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -62,6 +62,14 @@ enum {
kDebugLingoParse = 1 << 6
};
+struct MovieReference {
+ Common::String movie;
+ Common::String frameS;
+ int frameI;
+
+ MovieReference() { frameI = -1; }
+};
+
extern byte defaultPalette[768];
class DirectorEngine : public ::Engine {
@@ -112,9 +120,7 @@ public:
bool _playbackPaused;
bool _skipFrameAdvance;
- Common::String _nextMovie;
- Common::String _nextMovieFrameS;
- int _nextMovieFrameI;
+ MovieReference _nextMovie;
protected:
virtual Common::Error run();
diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index 339ad9a..d4e24bc 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -211,23 +211,23 @@ void Lingo::func_goto(Datum &frame, Datum &movie) {
return;
}
- _vm->_nextMovie = cleanedFilename;
+ _vm->_nextMovie.movie = cleanedFilename;
_vm->getCurrentScore()->_stopPlay = true;
- _vm->_nextMovieFrameS.clear();
- _vm->_nextMovieFrameI = -1;
+ _vm->_nextMovie.frameS.clear();
+ _vm->_nextMovie.frameI = -1;
if (frame.type == VOID)
return;
if (frame.type == STRING) {
- _vm->_nextMovieFrameS = *frame.u.s;
+ _vm->_nextMovie.frameS = *frame.u.s;
return;
}
frame.toInt();
- _vm->_nextMovieFrameI = frame.u.i;
+ _vm->_nextMovie.frameI = frame.u.i;
return;
}
Commit: 99f976e3aeb2879d9fbe7efe30b1f2a9a52a535b
https://github.com/scummvm/scummvm/commit/99f976e3aeb2879d9fbe7efe30b1f2a9a52a535b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-02-24T19:11:53+01:00
Commit Message:
DIRECTOR: Lingo: Initial code for func_play()
Changed paths:
engines/director/director.h
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-funcs.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/director.h b/engines/director/director.h
index e6835bc..1c3d77f 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 3cc3d0d..d2cdfb2 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 d4e24bc..9232bd1 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 550156c..6170acf 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);
Commit: 5eb38c5d1c162cc894e57959882f268970353afe
https://github.com/scummvm/scummvm/commit/5eb38c5d1c162cc894e57959882f268970353afe
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-02-24T19:16:22+01:00
Commit Message:
DIRECTOR: Lingo: Initial code for func_playdone()
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-funcs.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index d2cdfb2..b7fc484 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1007,7 +1007,7 @@ void Lingo::c_play() {
}
void Lingo::c_playdone() {
- warning("STUB: c_playdone()");
+ g_lingo->func_playdone();
}
void Lingo::c_call() {
diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index 9232bd1..58800f2 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -286,6 +286,21 @@ void Lingo::func_play(Datum &frame, Datum &movie) {
func_goto(frame, movie);
}
+void Lingo::func_playdone() {
+ MovieReference ref = _vm->_movieStack.back();
+
+ _vm->_movieStack.pop_back();
+
+ Datum m, f;
+
+ warning("STUB: func_playdone()");
+ m.type = VOID;
+ f.type = INT;
+ f.u.i = ref.frameI;
+
+ func_goto(f, m);
+}
+
void Lingo::func_cursor(int c) {
if (_cursorOnStack) {
// pop cursor
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 6170acf..516e91c 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -499,6 +499,7 @@ public:
void func_gotonext();
void func_gotoprevious();
void func_play(Datum &frame, Datum &movie);
+ void func_playdone();
void func_cursor(int c);
int func_marker(int m);
More information about the Scummvm-git-logs
mailing list