[Scummvm-git-logs] scummvm master -> 4244c48d736796e872c6acc4fc74550b0fd3a1c5
sev-
noreply at scummvm.org
Sun Oct 12 23:52:33 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:
4244c48d73 DIRECTOR: LINGO: Stubbed the remaining D6 keywords. This completes the set
Commit: 4244c48d736796e872c6acc4fc74550b0fd3a1c5
https://github.com/scummvm/scummvm/commit/4244c48d736796e872c6acc4fc74550b0fd3a1c5
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-10-13T01:51:27+02:00
Commit Message:
DIRECTOR: LINGO: Stubbed the remaining D6 keywords. This completes the set
Changed paths:
engines/director/castmember/xtra.cpp
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-bytecode.cpp
engines/director/lingo/lingo-events.cpp
engines/director/lingo/lingo-the.cpp
engines/director/lingo/lingo-the.h
engines/director/types.h
diff --git a/engines/director/castmember/xtra.cpp b/engines/director/castmember/xtra.cpp
index 863f67755c0..7ebcee818b3 100644
--- a/engines/director/castmember/xtra.cpp
+++ b/engines/director/castmember/xtra.cpp
@@ -47,6 +47,7 @@ bool XtraCastMember::hasField(int field) {
case kTheCuePointNames: // D6
case kTheCuePointTimes: // D6
case kTheCurrentTime: // D6
+ case kTheMediaBusy: // D6, undocumented
return true;
default:
break;
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index f6bfb7c3709..c7606fbd9ed 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -96,7 +96,7 @@ static const BuiltinProto builtins[] = {
{ "getPos", LB::b_getPos, 2, 2, 400, FBLTIN_LIST }, // D4 f
{ "getProp", LB::b_getProp, 2, 2, 400, FBLTIN_LIST }, // D4 f
{ "getPropAt", LB::b_getPropAt, 2, 2, 400, FBLTIN_LIST }, // D4 f
- { "list", LB::b_list, -1, 0, 400, FBLTIN_LIST }, // D4 f
+ { "list", LB::b_list, -1,0, 400, FBLTIN_LIST }, // D4 f
{ "listP", LB::b_listP, 1, 1, 400, FBLTIN_LIST }, // D4 f
{ "max", LB::b_max, -1,0, 400, FBLTIN_LIST }, // D4 f
{ "min", LB::b_min, -1,0, 400, FBLTIN_LIST }, // D4 f
@@ -122,14 +122,14 @@ static const BuiltinProto builtins[] = {
{ "xtra", LB::b_xtra, 1, 1, 500, FBLTIN }, // D5 f
// Control
{ "abort", LB::b_abort, 0, 0, 400, CBLTIN }, // D4 c
- { "cancelIdleLoad", LB::b_cancelIdleLoad,1, 1, 500, CBLTIN }, // D5 c
- { "call", LB::b_call, -1,0, 200, CBLTIN }, // D6 c
- { "callAncestor", LB::b_callAncestor, -1,0, 200, CBLTIN }, // D6 c
+ { "cancelIdleLoad", LB::b_cancelIdleLoad,1,1, 500, CBLTIN }, // D5 c
+ { "call", LB::b_call, -1,0, 600, CBLTIN }, // D6 c
+ { "callAncestor", LB::b_callAncestor, -1,0, 600, CBLTIN }, // D6 c
{ "continue", LB::b_continue, 0, 0, 200, CBLTIN }, // D2 c
{ "dontPassEvent", LB::b_dontPassEvent,0, 0, 200, CBLTIN }, // D2 c
{ "delay", LB::b_delay, 1, 1, 200, CBLTIN }, // D2 c
{ "do", LB::b_do, 1, 1, 200, CBLTIN }, // D2 c
- { "finishIdleLoad", LB::b_finishIdleLoad,1, 1, 500, CBLTIN }, // D5 c
+ { "finishIdleLoad", LB::b_finishIdleLoad,1,1, 500, CBLTIN }, // D5 c
{ "go", LB::b_go, 1, 2, 200, CBLTIN }, // D2 c
{ "halt", LB::b_halt, 0, 0, 400, CBLTIN }, // D4 c
{ "idleLoadDone", LB::b_idleLoadDone, 1, 1, 500, FBLTIN }, // D5 f
@@ -138,7 +138,7 @@ static const BuiltinProto builtins[] = {
{ "pause", LB::b_pause, 0, 0, 200, CBLTIN }, // D2 c
{ "play", LB::b_play, 0, 2, 200, CBLTIN }, // D2 c
{ "playAccel", LB::b_playAccel, -1,0, 200, CBLTIN }, // D2
- // play done // D2
+ // play done // D2
{ "preLoad", LB::b_preLoad, -1,0, 300, CBLTIN }, // D3.1 c
{ "preLoadCast", LB::b_preLoadCast, -1,0, 300, CBLTIN }, // D3.1 c
{ "preLoadMember", LB::b_preLoadCast, -1,0, 500, CBLTIN }, // D5 c
@@ -146,13 +146,15 @@ static const BuiltinProto builtins[] = {
{ "quit", LB::b_quit, 0, 0, 200, CBLTIN }, // D2 c
{ "restart", LB::b_restart, 0, 0, 200, CBLTIN }, // D2 c
{ "return", LB::b_return, 0, 1, 200, CBLTIN }, // D2 f
+ { "send", LB::b_call, -1,0, 400, CBLTIN }, // D4 c, undocumented
+ { "sendAncestor", LB::b_callAncestor, -1,0, 400, CBLTIN }, // D4 c, undocumented
{ "shutDown", LB::b_shutDown, 0, 0, 200, CBLTIN }, // D2 c
{ "startTimer", LB::b_startTimer, 0, 0, 200, CBLTIN }, // D2 c
{ "stopEvent", LB::b_stopEvent, 0, 0, 600, CBLTIN }, // D6 c
- // when keyDown // D2
- // when mouseDown // D2
- // when mouseUp // D2
- // when timeOut // D2
+ // when keyDown // D2
+ // when mouseDown // D2
+ // when mouseUp // D2
+ // when timeOut // D2
// Types
{ "factory", LB::b_factory, 1, 1, 300, FBLTIN }, // D3
{ "floatP", LB::b_floatP, 1, 1, 300, FBLTIN }, // D3
@@ -172,31 +174,31 @@ static const BuiltinProto builtins[] = {
{ "param", LB::b_param, 1, 1, 400, FBLTIN }, // D4 f
{ "printFrom", LB::b_printFrom, -1,0, 200, CBLTIN }, // D2 c
{ "put", LB::b_put, -1,0, 200, CBLTIN }, // D2
- // set // D2
+ // set // D2
{ "setPref", LB::b_setPref, 2, 2, 600, CBLTIN }, // D6 c
{ "showGlobals", LB::b_showGlobals, 0, 0, 200, CBLTIN }, // D2 c
{ "showLocals", LB::b_showLocals, 0, 0, 200, CBLTIN }, // D2 c
// Score
{ "constrainH", LB::b_constrainH, 2, 2, 200, FBLTIN }, // D2 f
{ "constrainV", LB::b_constrainV, 2, 2, 200, FBLTIN }, // D2 f
- { "copyToClipBoard",LB::b_copyToClipBoard,1,1, 400, CBLTIN }, // D4 c
+ { "copyToClipBoard",LB::b_copyToClipBoard,1,1,400, CBLTIN }, // D4 c
{ "duplicate", LB::b_duplicate, 1, 2, 400, CBLTIN }, // D4 c
{ "editableText", LB::b_editableText, 0, 0, 200, CBLTIN }, // D2
{ "erase", LB::b_erase, 1, 1, 400, CBLTIN }, // D4 c
{ "findEmpty", LB::b_findEmpty, 1, 1, 400, FBLTIN }, // D4 f
// go // D2
- { "importFileInto", LB::b_importFileInto,2, 2, 400, CBLTIN }, // D4 c
+ { "importFileInto", LB::b_importFileInto,2,2, 400, CBLTIN }, // D4 c
{ "installMenu", LB::b_installMenu, 1, 1, 200, CBLTIN }, // D2 c
{ "label", LB::b_label, 1, 1, 200, FBLTIN }, // D2 f
{ "marker", LB::b_marker, 1, 1, 200, FBLTIN }, // D2 f
{ "move", LB::b_move, 1, 2, 400, CBLTIN }, // D4 c
- { "moveableSprite", LB::b_moveableSprite,0, 0, 200, CBLTIN },// D2, FIXME: the field in D4+
- { "pasteClipBoardInto",LB::b_pasteClipBoardInto,1,1,400,CBLTIN },// D4 c
- { "puppetPalette", LB::b_puppetPalette, -1,0, 200, CBLTIN },// D2 c
+ { "moveableSprite", LB::b_moveableSprite,0, 0, 200, CBLTIN }, // D2, FIXME: the field in D4+
+ { "pasteClipBoardInto",LB::b_pasteClipBoardInto,1,1,400,CBLTIN },// D4 c
+ { "puppetPalette", LB::b_puppetPalette, -1,0, 200, CBLTIN }, // D2 c
{ "puppetSound", LB::b_puppetSound, -1,0, 200, CBLTIN }, // D2 c
{ "puppetSprite", LB::b_puppetSprite, -1,0, 200, CBLTIN }, // D2 c
{ "puppetTempo", LB::b_puppetTempo, 1, 1, 200, CBLTIN }, // D2 c
- { "puppetTransition",LB::b_puppetTransition,-1,0,200, CBLTIN },// D2 c
+ { "puppetTransition",LB::b_puppetTransition,-1,0,200, CBLTIN }, // D2 c
{ "ramNeeded", LB::b_ramNeeded, 2, 2, 300, FBLTIN }, // D3.1 f
{ "rollOver", LB::b_rollOver, 1, 1, 200, FBLTIN }, // D2 f
{ "sendAllSprites", LB::b_sendAllSprites,-1,0,600, CBLTIN }, // D6 c
@@ -208,11 +210,11 @@ static const BuiltinProto builtins[] = {
{ "unLoadMovie", LB::b_unLoadMovie, 1, 1, 500, CBLTIN }, // D5 c
{ "updateStage", LB::b_updateStage, 0, 0, 200, CBLTIN }, // D2 c
{ "zoomBox", LB::b_zoomBox, -1,0, 200, CBLTIN }, // D2 c
- {"immediateSprite", LB::b_immediateSprite, -1, 0, 200, CBLTIN}, // D2 c
+ {"immediateSprite", LB::b_immediateSprite,-1,0,200,CBLTIN }, // D2 c
// Score recording
{ "clearFrame", LB::b_clearFrame, 0, 0, 500, CBLTIN }, // D5 c
{ "deleteFrame", LB::b_deleteFrame, 0, 0, 500, CBLTIN }, // D5 c
- { "duplicateFrame", LB::b_duplicateFrame,0, 0, 500, CBLTIN }, // D5 c
+ { "duplicateFrame", LB::b_duplicateFrame,0,0, 500, CBLTIN }, // D5 c
{ "insertFrame", LB::b_insertFrame, 0, 0, 500, CBLTIN }, // D5 c
{ "updateFrame", LB::b_updateFrame, 0, 0, 500, CBLTIN }, // D5 c
// Point
@@ -254,7 +256,7 @@ static const BuiltinProto builtins[] = {
{ "lineHeight", LB::b_lineHeight, 2, 2, 500, FBLTIN }, // D5 f
{ "linePosToLocV", LB::b_linePosToLocV,2, 2, 500, FBLTIN }, // D5 f
{ "locToCharPos", LB::b_locToCharPos, 2, 2, 500, FBLTIN }, // D5 f
- { "locVToLinePos", LB::b_locVToLinePos, 2, 2, 500, FBLTIN }, // D5 f
+ { "locVToLinePos", LB::b_locVToLinePos,2, 2, 500, FBLTIN }, // D5 f
{ "scrollByLine", LB::b_scrollByLine, 2, 2, 500, CBLTIN }, // D5 c
{ "scrollByPage", LB::b_scrollByPage, 2, 2, 500, CBLTIN }, // D5 c
// Chunk operations
@@ -264,7 +266,7 @@ static const BuiltinProto builtins[] = {
{ "numberOfWords", LB::b_numberofwords,1, 1, 300, FBLTIN }, // D3 f
// Digital video operations
{ "trackCount", LB::b_trackCount, 1, 1, 500, FBLTIN }, // D5 f
- { "trackStartTime", LB::b_trackStartTime,1, 1, 500, FBLTIN }, // D5 f
+ { "trackStartTime", LB::b_trackStartTime,1,1, 500, FBLTIN }, // D5 f
{ "trackStopTime", LB::b_trackStopTime,1, 1, 500, FBLTIN }, // D5 f
{ "trackType", LB::b_trackType, 1, 1, 500, FBLTIN }, // D5 f
@@ -290,7 +292,7 @@ static const BuiltinProto builtins[] = {
{ nullptr, nullptr, 0, 0, 0, VOIDSYM }
};
-/* These are related to Director Serrvices API, used by Xtras
+/* These are related to Director Services API, used by Xtras
to talk to Director. Unused in ScummVM. Leaving here for reference.
Media Info:
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index f1ae36a75cf..c205f23f6d2 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -1654,6 +1654,13 @@ ScriptContext *LingoCompiler::compileLingoV4(Common::SeekableReadStreamEndian &s
functionName = g_lingo->_eventHandlerTypes[kEventGeneric];
}
+ // We need to find movies with 'on cuePassed'
+ if (g_director->getVersion() >= 600) {
+ if (functionName.equalsIgnoreCase("cuePassed")) {
+ error("sev needs this movie as a sample for cuePoints, please talk to him");
+ }
+ }
+
Symbol sym;
if (!functionName.empty()) {
debugC(5, kDebugLoading, "Function %d binding: %s()", i, functionName.c_str());
diff --git a/engines/director/lingo/lingo-events.cpp b/engines/director/lingo/lingo-events.cpp
index ce8b119a45b..614d4aab008 100644
--- a/engines/director/lingo/lingo-events.cpp
+++ b/engines/director/lingo/lingo-events.cpp
@@ -75,6 +75,7 @@ struct EventHandlerType {
{ kEventMouseWithin, "mouseWithin" }, // D6, present in D5
{ kEventTimeout, "timeout" }, // D2 as when
+ { kEventCuePassed, "cuePassed" }, // D6
{ kEventStartUp, "startUp" },
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 9adc9ca53f5..7554fc8baa6 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -131,6 +131,7 @@ TheEntity entities[] = { // hasId ver. isFunction
{ kTheMovieName, "movieName", false, 400, true }, // D4 f
{ kTheMoviePath, "moviePath", false, 400, true }, // D4 f
{ kTheMultiSound, "multiSound", false, 300, true }, // D3.1 f
+ { kTheNetThrottleTicks, "netThrottleTicks", false, 600, true }, // D6 f, documented in D7
{ kTheOptionDown, "optionDown", false, 200, true }, // D2 f
{ kTheOrganizationName, "organizationName", false, 500, false },// D5 p, documented in D7
{ kTheParamCount, "paramCount", false, 400, true }, // D4 f
@@ -164,6 +165,7 @@ TheEntity entities[] = { // hasId ver. isFunction
{ kTheShiftDown, "shiftDown", false, 200, true }, // D2 f
{ kTheSoundEnabled, "soundEnabled", false, 200, false },// D2 p
{ kTheSoundEntity, "sound", true, 300, false },// D3 p
+ { kTheSoundKeepDevice, "soundKeepDevice", false, 600, false },// D6 p, documented in D7
{ kTheSoundLevel, "soundLevel", false, 200, false },// D2 p
{ kTheSprite, "sprite", true, 200, false },// D4 p
{ kTheStage, "stage", false, 400, false },// D4 p
@@ -357,8 +359,9 @@ const TheEntityField fields[] = {
{ kTheCast, "chunkSize", kTheChunkSize, 500 },// D5 p
{ kTheCast, "transitionType",kTheTransitionType,500 },// D5 p
- // XtrsaCastMember fields
+ // XtrasCastMember fields
{ kTheCast, "interface", kTheInterface, 500 },// D5 p
+ { kTheCast, "mediaBusy", kTheMediaBusy, 600 },// D6 p
// Behavior (me) fields
{ kTheCast, "spriteNum", kTheSpriteNum, 600 },// D6 p
@@ -928,6 +931,11 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
// We always support multiple sound channels!
d = 1;
break;
+ case kTheNetThrottleTicks:
+ // This is default in Mac Director.
+ // Specifies the frequency of servicing to a network
+ d = 15;
+ break;
case kTheOptionDown:
d = (movie->_keyFlags & Common::KBD_ALT) ? 1 : 0;
break;
@@ -1061,6 +1069,11 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
}
}
break;
+ case kTheSoundKeepDevice:
+ // System property; for Windows only, prevents the sound driver from unloading
+ // and reloading each time a sound needs to play. The default value is TRUE.
+ d = 1;
+ break;
case kTheSoundLevel:
// getting sound level of channel 1, maybe need to be amended in higher version
d = _vm->getCurrentWindow()->getSoundManager()->getChannelVolume(1) / 32;
@@ -1345,6 +1358,9 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
case kTheMouseUpScript:
movie->setPrimaryEventHandler(kEventMouseUp, d.asString());
break;
+ case kTheNetThrottleTicks:
+ // No op, we always smooth on network operations
+ break;
case kThePerFrameHook:
_perFrameHook = d;
break;
@@ -1415,6 +1431,9 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
}
}
break;
+ case kTheSoundKeepDevice:
+ // We do not need to unload the sound driver, so just ignore this.
+ break;
case kTheSoundLevel:
// setting all of the channel for now
_vm->getCurrentWindow()->getSoundManager()->setChannelVolume(-1, MAX(0, MIN(d.asInt() * 32, 255)));
diff --git a/engines/director/lingo/lingo-the.h b/engines/director/lingo/lingo-the.h
index e97c3a01592..e43305c60d1 100644
--- a/engines/director/lingo/lingo-the.h
+++ b/engines/director/lingo/lingo-the.h
@@ -115,6 +115,7 @@ enum TheEntityType {
kTheMovieName,
kTheMoviePath,
kTheMultiSound,
+ kTheNetThrottleTicks,
kTheOptionDown,
kTheOrganizationName,
kTheParamCount,
@@ -148,6 +149,7 @@ enum TheEntityType {
kTheShiftDown,
kTheSoundEntity,
kTheSoundEnabled,
+ kTheSoundKeepDevice,
kTheSoundLevel,
kTheSprite,
kTheSqrt,
@@ -240,6 +242,7 @@ enum TheFieldType {
kTheLoop,
kTheMargin,
kTheMedia,
+ kTheMediaBusy,
kTheMediaReady,
kTheMember,
kTheMemberNum,
diff --git a/engines/director/types.h b/engines/director/types.h
index ff089789525..80f4a19dd5b 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -240,6 +240,8 @@ enum LEvent {
kEventGetBehaviorDescription,
kEventGetPropertyDescriptionList,
kEventRunPropertyDialog,
+
+ kEventCuePassed,
};
enum TransitionType {
More information about the Scummvm-git-logs
mailing list