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

sev- noreply at scummvm.org
Fri Sep 26 13:42:07 UTC 2025


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

Summary:
be64027716 DIRECTOR: LINGO: Correctly pass channelId for new events
baa2ff0145 DIRECTOR: LINGO: Implement the currentSpriteNum movie property


Commit: be64027716d816538f60a75ff997154b35c46b47
    https://github.com/scummvm/scummvm/commit/be64027716d816538f60a75ff997154b35c46b47
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-26T15:25:52+02:00

Commit Message:
DIRECTOR: LINGO: Correctly pass channelId for new events

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


diff --git a/engines/director/lingo/lingo-events.cpp b/engines/director/lingo/lingo-events.cpp
index b361227230a..a5d1708610a 100644
--- a/engines/director/lingo/lingo-events.cpp
+++ b/engines/director/lingo/lingo-events.cpp
@@ -471,6 +471,9 @@ void Movie::queueEvent(Common::Queue<LingoEvent> &queue, LEvent event, int targe
 	// For mouseEnter/mouseLeave events, we want to specify exactly what sprite channel to resolve to.
 	case kEventMouseEnter:
 	case kEventMouseLeave:
+	case kEventPrepareFrame:
+	case kEventBeginSprite:
+	case kEventEndSprite:
 		if (targetId != 0) {
 			channelId = targetId;
 		}
@@ -708,6 +711,10 @@ bool Lingo::processEvent(LEvent event, ScriptType st, CastMemberID scriptId, int
 	return true;
 }
 
+/***********************
+ * Script Instances
+ ***********************/
+
 void Score::killScriptInstances(int frameNum) {
 	if (_version < kFileVer600) // No-op for early Directors
 		return;


Commit: baa2ff0145b6ea278e27dd227e15dd9018b57f6f
    https://github.com/scummvm/scummvm/commit/baa2ff0145b6ea278e27dd227e15dd9018b57f6f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-26T15:36:24+02:00

Commit Message:
DIRECTOR: LINGO: Implement the currentSpriteNum movie property

Changed paths:
    engines/director/lingo/lingo-events.cpp
    engines/director/lingo/lingo-the.cpp
    engines/director/lingo/lingo-the.h
    engines/director/movie.cpp
    engines/director/movie.h


diff --git a/engines/director/lingo/lingo-events.cpp b/engines/director/lingo/lingo-events.cpp
index a5d1708610a..fc61a55629d 100644
--- a/engines/director/lingo/lingo-events.cpp
+++ b/engines/director/lingo/lingo-events.cpp
@@ -649,6 +649,9 @@ void Lingo::processEvents(Common::Queue<LingoEvent> &queue, bool isInputEvent) {
 		movie->_lastEventId[el.event] = el.eventId;
 
 		if (_vm->getVersion() >= 600) {
+			// Reset it for further event processing
+			g_director->getCurrentMovie()->_currentSpriteNum = 0;
+
 			// We need to execute all behaviours before deciding if we pass
 			// through or not
 			if (el.scriptType == kScoreScript && el.passByDefault == true) {
@@ -680,6 +683,7 @@ bool Lingo::processEvent(LEvent event, ScriptType st, CastMemberID scriptId, int
 
 	if (g_director->getVersion() >= 600 && st == kScoreScript && obj) {
 		if (obj->getMethod(_eventHandlerTypes[event]).type != VOIDSYM) {
+			g_director->getCurrentMovie()->_currentSpriteNum = channelId;
 			push(Datum(obj));
 			LC::call(_eventHandlerTypes[event], 1, false);
 			return execute();
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index a65fbcbbf1a..667ab89472c 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -65,6 +65,7 @@ TheEntity entities[] = {					//	hasId  ver.	isFunction
 	{ kTheColorQD,			"colorQD",			false, 200, true },	// D2 f
 	{ kTheCommandDown,		"commandDown",		false, 200, true },	// D2 f
 	{ kTheControlDown,		"controlDown",		false, 200, true },	// D2 f
+	{ kTheCurrentSpriteNum,	"currentSpriteNum",	false, 600, true },	//						D6 p
 	{ kTheDate,				"date",				false, 300, true },	//		D3 f
 	{ kTheDeskTopRectList,	"deskTopRectList",	false, 500, true },	//					D5 p
 	{ kTheDigitalVideoTimeScale,"digitalVideoTimeScale",false, 500, false },//			D5 p
@@ -551,6 +552,9 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
 	case kTheControlDown:
 		d = (movie->_keyFlags & Common::KBD_CTRL) ? 1 : 0;
 		break;
+	case kTheCurrentSpriteNum:
+		d = (int)movie->_currentSpriteNum;
+		break;
 	case kTheDate:
 		d = getTheDate(field);
 		break;
diff --git a/engines/director/lingo/lingo-the.h b/engines/director/lingo/lingo-the.h
index 25f6d5647da..1d2213b365d 100644
--- a/engines/director/lingo/lingo-the.h
+++ b/engines/director/lingo/lingo-the.h
@@ -46,6 +46,7 @@ enum TheEntityType {
 	kTheColorQD,
 	kTheCommandDown,
 	kTheControlDown,
+	kTheCurrentSpriteNum,
 	kTheDate,
 	kTheDeskTopRectList,
 	kTheDigitalVideoTimeScale,
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index ce03e593849..4c5987bf146 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -50,6 +50,7 @@ Movie::Movie(Window *window) {
 
 	_currentActiveSpriteId = 0;
 	_currentMouseSpriteId = 0;
+	_currentSpriteNum = 0;
 	_currentEditableTextChannel = 0;
 	_lastEventTime = _vm->getMacTicks();
 	_lastKeyTime = _lastEventTime;
diff --git a/engines/director/movie.h b/engines/director/movie.h
index c0ca1e98055..a414523e50c 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -157,6 +157,7 @@ public:
 	Common::Rect _movieRect;
 	uint16 _currentActiveSpriteId;
 	uint16 _currentMouseSpriteId;
+	uint _currentSpriteNum;
 	CastMemberID _currentMouseDownCastID;
 	CastMemberID _currentMouseDownSpriteScriptID;
 	bool _currentMouseDownSpriteImmediate;




More information about the Scummvm-git-logs mailing list