[Scummvm-git-logs] scummvm master -> 96ddd761586a44545f48b7dfb384f7d7e22d9f75

sev- noreply at scummvm.org
Tue Sep 23 23:03:48 UTC 2025


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

Summary:
96ddd76158 DIRECTOR: LINGO: Simplified code for behavior script instantiation


Commit: 96ddd761586a44545f48b7dfb384f7d7e22d9f75
    https://github.com/scummvm/scummvm/commit/96ddd761586a44545f48b7dfb384f7d7e22d9f75
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-24T01:03:36+02:00

Commit Message:
DIRECTOR: LINGO: Simplified code for behavior script instantiation

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 cb9fb07b3a8..9251b496867 100644
--- a/engines/director/lingo/lingo-events.cpp
+++ b/engines/director/lingo/lingo-events.cpp
@@ -707,63 +707,69 @@ void Score::createScriptInstances(int frameNum) {
 		Channel *channel = _channels[i];
 		Sprite *sprite = channel->_sprite;
 
-		if (frameNum >= channel->_startFrame && frameNum <= channel->_endFrame) {
-			// We create scriptInstance only for new sprites
-			if (channel->_scriptInstanceList.size() == 0) {
-				if (sprite->_behaviors.size() > 0) {
-					for (uint j = 0; j < sprite->_behaviors.size(); j++) {
-
-						// Instantiate the behavior
-						g_lingo->push(_movie->getScriptContext(kScoreScript, sprite->_behaviors[j].memberID));
-						LC::call("new", 1, true);
-						Datum inst = g_lingo->pop();
-
-						if (inst.type != OBJECT) {
-							warning("Score::createScriptInstances(): Could not instantiate behavior %s for channel %d",
-								sprite->_behaviors[j].toString().c_str(), i + 1);
-							continue;
-						}
+		// The frame does not belong to the range
+		if (frameNum < channel->_startFrame || frameNum > channel->_endFrame)
+			continue;
 
-						channel->_scriptInstanceList.push_back(inst);
+		// We create scriptInstance only for new sprites
+		if (channel->_scriptInstanceList.size() != 0)
+			continue;
 
-						debugC(1, kDebugLingoExec, "Score::createScriptInstances(): Instantiated behavior %s for channel %d",
-							sprite->_behaviors[j].toString().c_str(), i + 1);
+		// No behaviors, nothing to do
+		if (sprite->_behaviors.size() == 0)
+			continue;
 
-						if (sprite->_behaviors[j].initializerIndex) {
-							// Evaluate the params
-							g_lingo->push(sprite->_behaviors[j].initializerParams);
-							LB::b_value(1);
-							g_lingo->execute();
+		for (uint j = 0; j < sprite->_behaviors.size(); j++) {
+			// Instantiate the behavior
+			g_lingo->push(_movie->getScriptContext(kScoreScript, sprite->_behaviors[j].memberID));
+			LC::call("new", 1, true);
+			Datum inst = g_lingo->pop();
 
-							if (debugChannelSet(5, kDebugLingoExec)) {
-								g_lingo->printStack("  Parsed behavior parameters: ", 0);
-							}
+			if (inst.type != OBJECT) {
+				warning("Score::createScriptInstances(): Could not instantiate behavior %s for channel %d",
+					sprite->_behaviors[j].toString().c_str(), i + 1);
+				continue;
+			}
 
-							if (g_lingo->_state->stack.size() == 0) {
-								warning("Score::createScriptInstances(): Could not evaluate initializer params '%s' for behavior %s for channel %d",
-									sprite->_behaviors[j].initializerParams.c_str(), sprite->_behaviors[j].toString().c_str(), i + 1);
-								continue;
-							}
+			channel->_scriptInstanceList.push_back(inst);
 
-							Datum proplist = _lingo->pop();
+			debugC(1, kDebugLingoExec, "Score::createScriptInstances(): Instantiated behavior %s for channel %d",
+				sprite->_behaviors[j].toString().c_str(), i + 1);
 
-							if (proplist.type != PARRAY) {
-								warning("Score::createScriptInstances(): Could not evaluate initializer params '%s' for behavior %s for channel %d",
-									sprite->_behaviors[j].initializerParams.c_str(), sprite->_behaviors[j].toString().c_str(), i + 1);
-								continue;
-							}
+			// No initializer, continue
+			if (sprite->_behaviors[j].initializerIndex == 0)
+				continue;
 
-							debugC(2, kDebugLingoExec, "   Setting %d properties", proplist.u.parr->arr.size());
+			// Evaluate the params
+			g_lingo->push(sprite->_behaviors[j].initializerParams);
+			LB::b_value(1);
+			g_lingo->execute();
 
-							for (uint k = 0; k < proplist.u.parr->arr.size(); k++) {
-								Datum key = proplist.u.parr->arr[k].p;
-								Datum val = proplist.u.parr->arr[k].v;
+			if (debugChannelSet(5, kDebugLingoExec)) {
+				g_lingo->printStack("  Parsed behavior parameters: ", 0);
+			}
 
-								channel->_scriptInstanceList[j].u.obj->setProp(key.asString(), val);
-							}
-						}
-					}
-				}
+			if (g_lingo->_state->stack.size() == 0) {
+				warning("Score::createScriptInstances(): Could not evaluate initializer params '%s' for behavior %s for channel %d",
+					sprite->_behaviors[j].initializerParams.c_str(), sprite->_behaviors[j].toString().c_str(), i + 1);
+				continue;
+			}
+
+			Datum proplist = _lingo->pop();
+
+			if (proplist.type != PARRAY) {
+				warning("Score::createScriptInstances(): Could not evaluate initializer params '%s' for behavior %s for channel %d",
+					sprite->_behaviors[j].initializerParams.c_str(), sprite->_behaviors[j].toString().c_str(), i + 1);
+				continue;
+			}
+
+			debugC(2, kDebugLingoExec, "   Setting %d properties", proplist.u.parr->arr.size());
+
+			for (uint k = 0; k < proplist.u.parr->arr.size(); k++) {
+				Datum key = proplist.u.parr->arr[k].p;
+				Datum val = proplist.u.parr->arr[k].v;
+
+				channel->_scriptInstanceList[j].u.obj->setProp(key.asString(), val);
 			}
 		}
 	}




More information about the Scummvm-git-logs mailing list