[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