[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