[Scummvm-git-logs] scummvm master -> 2b40cedad7af02625206dd73eb9c6d1acc8e3e7d

moralrecordings code at moral.net.au
Mon May 25 15:46:48 UTC 2020


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
2b40cedad7 DIRECTOR: Add builtin b_play


Commit: 2b40cedad7af02625206dd73eb9c6d1acc8e3e7d
    https://github.com/scummvm/scummvm/commit/2b40cedad7af02625206dd73eb9c6d1acc8e3e7d
Author: Scott Percival (code at moral.net.au)
Date: 2020-05-25T23:46:01+08:00

Commit Message:
DIRECTOR: Add builtin b_play

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-builtins.h
    engines/director/lingo/lingo-funcs.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 8b6751342a..0bd24925b6 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -147,7 +147,7 @@ static struct BuiltinProto {
 	{ "nothing",		LB::b_nothing,		0, 0, false, 2, BLTIN },	// D2 c
 	{ "pass",			LB::b_pass,			0, 0, false, 4, BLTIN },	//			D4 c
 	{ "pause",			LB::b_pause,		0, 0, false, 2, BLTIN },	// D2 c
-		// play															// D2 c
+	{ "play",			LB::b_play,			1, 2, false, 2, BLTIN },	// D2 c
 	{ "playAccel",		LB::b_playAccel,	-1,0, false, 2, BLTIN },	// D2
 		// play done													// D2
 	{ "preLoad",		LB::b_preLoad,		-1,0, false, 3, BLTIN },	//		D3.1 c
@@ -1203,6 +1203,38 @@ void LB::b_pause(int nargs) {
 	g_director->_playbackPaused = true;
 }
 
+void LB::b_play(int nargs) {
+	// Builtin function for play as used by the Director bytecode engine.
+	//
+	// Accepted arguments:
+	// 0  									# "play done"
+	// (STRING|INT) frame
+	// STRING movie, (STRING|INT) frame
+
+	if (nargs >= 1 && nargs <= 2) {
+		Datum movie;
+		Datum frame;
+
+		Datum firstArg = g_lingo->pop();
+		if (nargs == 2) {
+			movie = firstArg;
+			frame = g_lingo->pop();
+		} else {
+			if (firstArg.asInt() == 0) {
+				frame.type = SYMBOL;
+				frame.u.s = new Common::String("done");
+			} else {
+				frame = firstArg;
+			}
+		}
+
+		g_lingo->func_play(frame, movie);
+	} else {
+		warning("b_play: expected 1 or 2 args, not %d", nargs);
+		g_lingo->dropStack(nargs);
+	}
+}
+
 void LB::b_playAccel(int nargs) {
 	g_lingo->printSTUBWithArglist("b_playAccel", nargs);
 
diff --git a/engines/director/lingo/lingo-builtins.h b/engines/director/lingo/lingo-builtins.h
index 26213e5eef..bd4e58278e 100644
--- a/engines/director/lingo/lingo-builtins.h
+++ b/engines/director/lingo/lingo-builtins.h
@@ -135,6 +135,7 @@ namespace LB {
 	void b_nothing(int nargs);
 	void b_pass(int nargs);
 	void b_pause(int nargs);
+	void b_play(int nargs);
 	void b_playAccel(int nargs);
 	void b_preLoad(int nargs);
 	void b_preLoadCast(int nargs);
diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index e9f2e8f232..63f6d9e975 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -285,12 +285,6 @@ void Lingo::func_gotoprevious() {
 void Lingo::func_play(Datum &frame, Datum &movie) {
 	MovieReference ref;
 
-	if (movie.type != VOID) {
-		warning("STUB: func_play()");
-
-		return;
-	}
-
 	// play #done
 	if (frame.type == SYMBOL) {
 		if (!frame.u.s->equals("done")) {




More information about the Scummvm-git-logs mailing list