[Scummvm-git-logs] scummvm master -> fcb3c6253f1a9c0abb4bf6118340dc8c94037a28

rvanlaar noreply at scummvm.org
Sat Feb 22 22:51:25 UTC 2025


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:
eb6dc58b6f DIRECTOR: LINGO: XTRA: TimeXtra: implement getTime
c76ace988e JANITORIAL: remove superfluous whiteline
fcb3c6253f DIRECTOR: LINGO: b_script implement castLib query


Commit: eb6dc58b6f95e16b6951f8161d39ec6fba5aa8f1
    https://github.com/scummvm/scummvm/commit/eb6dc58b6f95e16b6951f8161d39ec6fba5aa8f1
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2025-02-22T23:50:45+01:00

Commit Message:
DIRECTOR: LINGO: XTRA: TimeXtra: implement getTime

Testing on win95 showed the following:

    Return value is hours * 3600 + minutes * 60 + seconds
    where the starting point 01:00 is 0.

Safecrackers only needs the number of seconds since the start of the game.
Since not all platforms that run ScummVM have a clock, it's implemented as
the number of seconds since the start of ScummVM.

Changed paths:
    engines/director/lingo/xtras/timextra.cpp


diff --git a/engines/director/lingo/xtras/timextra.cpp b/engines/director/lingo/xtras/timextra.cpp
index 1797d1d7e4d..75b41dc95bd 100644
--- a/engines/director/lingo/xtras/timextra.cpp
+++ b/engines/director/lingo/xtras/timextra.cpp
@@ -41,6 +41,17 @@ new object me, any
 
  */
 
+
+/**************************************************
+ Return value is hours * 3600 + minutes * 60 + seconds
+ where the starting point 01:00 is 0.
+
+ Safecrackers only needs the number of seconds since the start of the game.
+ Since not all platforms that run ScummVM have a clock, it's implemented as
+ the number of seconds since the start of ScummVM.
+ **************************************************/
+
+
 namespace Director {
 
 const char *const TimextraXtra::xlibName = "Timextra";
@@ -95,6 +106,11 @@ void TimextraXtra::m_new(int nargs) {
 	g_lingo->push(g_lingo->_state->me);
 }
 
-XOBJSTUB(TimextraXtra::m_getTime, 0)
+void TimextraXtra::m_getTime(int nargs) {
+	ARGNUMCHECK(0);
+	int32 seconds = g_system->getMillis() / 1000;
+	Datum const res(seconds);
+	g_lingo->push(res);
+}
 
 }


Commit: c76ace988e1d25c5c33150f2fa6709e53486eb2d
    https://github.com/scummvm/scummvm/commit/c76ace988e1d25c5c33150f2fa6709e53486eb2d
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2025-02-22T23:50:46+01:00

Commit Message:
JANITORIAL: remove superfluous whiteline

Changed paths:
    engines/director/lingo/xtras/timextra.cpp


diff --git a/engines/director/lingo/xtras/timextra.cpp b/engines/director/lingo/xtras/timextra.cpp
index 75b41dc95bd..a2740d1fb5b 100644
--- a/engines/director/lingo/xtras/timextra.cpp
+++ b/engines/director/lingo/xtras/timextra.cpp
@@ -97,7 +97,6 @@ void TimextraXtra::open(ObjectType type, const Common::Path &path) {
 void TimextraXtra::close(ObjectType type) {
     TimextraXtraObject::cleanupMethods();
     g_lingo->_globalvars[xlibName] = Datum();
-
 }
 
 void TimextraXtra::m_new(int nargs) {


Commit: fcb3c6253f1a9c0abb4bf6118340dc8c94037a28
    https://github.com/scummvm/scummvm/commit/fcb3c6253f1a9c0abb4bf6118340dc8c94037a28
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2025-02-22T23:50:46+01:00

Commit Message:
DIRECTOR: LINGO: b_script implement castLib query

For `script`, as it's with `member`, it's possible to specify the
castlib. When two args are given query for the member together with the castlib.

This is used in Safecracker in the following way:
    set gTimeObject to new(script "Timer Parent" of castLib "MAIN.CST")

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index c98bde49118..8eb649dd23d 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -234,7 +234,7 @@ static const BuiltinProto builtins[] = {
 	{ "cast",			LB::b_cast,			1, 1, 400, FBLTIN },	//			D4 f
 	{ "castLib",		LB::b_castLib,		1, 1, 500, FBLTIN },	//				D5 f
 	{ "member",			LB::b_member,		1, 2, 500, FBLTIN },	//				D5 f
-	{ "script",			LB::b_script,		1, 1, 400, FBLTIN },	//			D4 f
+	{ "script",			LB::b_script,		1, 2, 400, FBLTIN },	//			D4 f
 	{ "sprite",			LB::b_sprite,		1, 1, 500, FBLTIN },	//				D5 f
 	{ "window",			LB::b_window,		1, 1, 400, FBLTIN },	//			D4 f
 	{ "windowPresent",	LB::b_windowPresent,1, 1, 500, FBLTIN },	//				D5 f
@@ -3511,13 +3511,15 @@ void LB::b_member(int nargs) {
 }
 
 void LB::b_script(int nargs) {
-	Datum d = g_lingo->pop();
-	// FIXME: Check with later versions of director
-	//        The kCastText check version breaks Phibos, which loads a
-	//        non-kCastText script using this builtin.
-	//        With the kCastText version, Phibos crashes during its intro.
-	// CastMemberID memberID = d.asMemberID(kCastText);
-	CastMemberID memberID = d.asMemberID();
+	CastMemberID memberID;
+	if (nargs == 1) {
+		Datum member = g_lingo->pop();
+		memberID = member.asMemberID();
+	} else if (nargs == 2) {
+		Datum library = g_lingo->pop();
+		Datum member = g_lingo->pop();
+		memberID = g_lingo->toCastMemberID(member, library);
+	}
 	CastMember *cast = g_director->getCurrentMovie()->getCastMember(memberID);
 
 	if (cast) {
@@ -3539,7 +3541,7 @@ void LB::b_script(int nargs) {
 			return;
 		}
 	}
-	warning("b_script(): No script context found for '%s'", d.asString(true).c_str());
+	warning("b_script(): No script context found for '%s'", memberID.asString().c_str());
 	g_lingo->push(Datum());
 }
 




More information about the Scummvm-git-logs mailing list