[Scummvm-git-logs] scummvm master -> ab93d1314acca00014da2b6ed8d756bafb160464
sev-
noreply at scummvm.org
Tue Jul 1 23:22:16 UTC 2025
This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
ed7019f977 DIRECTOR: LINGO: Implement b_scrollByLine
fc4c476846 DIRECTOR: Add kidstorypirate and kidstorymilly to detection table
7457efc15b DIRECTOR: Fix issue where repl broke breakpoints
7e44dd6768 DIRECTOR: XTRA: Make Rtk multi-window aware
ab93d1314a DIRECTOR: LINGO: Improve accuracy of resolving sprite event handlers
Commit: ed7019f97744db39e79b6f91b9575e6b8d6159e6
https://github.com/scummvm/scummvm/commit/ed7019f97744db39e79b6f91b9575e6b8d6159e6
Author: Scott Percival (code at moral.net.au)
Date: 2025-07-02T01:22:11+02:00
Commit Message:
DIRECTOR: LINGO: Implement b_scrollByLine
Changed paths:
engines/director/castmember/text.cpp
engines/director/castmember/text.h
engines/director/lingo/lingo-builtins.cpp
diff --git a/engines/director/castmember/text.cpp b/engines/director/castmember/text.cpp
index 4466f3f3a2d..4da9ee5eb11 100644
--- a/engines/director/castmember/text.cpp
+++ b/engines/director/castmember/text.cpp
@@ -560,6 +560,11 @@ void TextCastMember::setTextStyle(const Common::String &textStyle) {
_modified = true;
}
+void TextCastMember::scrollByLine(int count) {
+ Graphics::MacText *target = getWidget();
+ target->scroll(count);
+}
+
void TextCastMember::setTextStyle(const Common::String &textStyle, int start, int end) {
Graphics::MacText *target = getWidget();
int slant = g_director->_wm->_fontMan->parseSlantFromName(textStyle);
diff --git a/engines/director/castmember/text.h b/engines/director/castmember/text.h
index c6cd8302f61..21319deaf7a 100644
--- a/engines/director/castmember/text.h
+++ b/engines/director/castmember/text.h
@@ -85,6 +85,8 @@ public:
void setTextStyle(const Common::String &textStyle);
void setTextStyle(const Common::String &textStyle, int start, int end);
+ void scrollByLine(int count);
+
Common::String formatInfo() override;
void load() override;
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index bcae8992485..f2c1f5723cd 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -3674,8 +3674,20 @@ void LB::b_locVToLinePos(int nargs) {
}
void LB::b_scrollByLine(int nargs) {
- g_lingo->printSTUBWithArglist("b_scrollByLine", nargs);
- g_lingo->dropStack(nargs);
+ ARGNUMCHECK(2);
+ Datum count = g_lingo->pop();
+ Datum member = g_lingo->pop();
+ CastMemberID id = member.asMemberID();
+ Movie *movie = g_director->getCurrentMovie();
+ CastMember *cast = movie->getCastMember(id);
+ if (!cast) {
+ g_lingo->lingoError("b_scrollByLine: Could not resolve cast member %s", id.asString().c_str());
+ } else if (cast->_type != kCastText) {
+ g_lingo->lingoError("b_scrollByLine: Expected cast member %s to be text, got %s", id.asString().c_str(), castType2str(cast->_type));
+ } else {
+ ((TextCastMember *)cast)->scrollByLine(count.asInt());
+ }
+
}
void LB::b_scrollByPage(int nargs) {
Commit: fc4c476846be0613f38df65e9f51dd0f1fe9ad28
https://github.com/scummvm/scummvm/commit/fc4c476846be0613f38df65e9f51dd0f1fe9ad28
Author: Scott Percival (code at moral.net.au)
Date: 2025-07-02T01:22:11+02:00
Commit Message:
DIRECTOR: Add kidstorypirate and kidstorymilly to detection table
Changed paths:
engines/director/detection_tables.h
diff --git a/engines/director/detection_tables.h b/engines/director/detection_tables.h
index 99270f01974..0b345aa7397 100644
--- a/engines/director/detection_tables.h
+++ b/engines/director/detection_tables.h
@@ -294,6 +294,8 @@ static const PlainGameDescriptor directorGames[] = {
{ "kidsbiblejlife", "Interactive Bible for Kids: The Life and Ministry of Jesus" },
{ "kidsbiblemoses", "Interactive Bible for Kids: The Life of Moses" },
{ "kidsbiblepaul", "Interactive Bible for Kids: The Life of Paul" },
+ { "kidstorypirate", "The Kidstory Series: The Pirate Who Wouldn't Wash" },
+ { "kidstorymilly", "The Kidstory Series: Milly Fitzwilly's Mouse Catcher" },
{ "kingandi", "The King and I: Animated Thinking Adventure" },
{ "korkydragons", "Dragons!" },
{ "kothhoot", "King of the Hill: Hootenany" },
@@ -4882,6 +4884,11 @@ static const DirectorGameDescription gameDescriptions[] = {
WINGAME1("kidtools", "", "DEMO.EXE", "da65c64d0821c0d689f8a3ead9301a2a", 15606953, 400),
+ WINGAME2("kidstorypirate", "", "PIRATE.EXE", "t:9f557eeb3322d61feb4e11251bbf85c9", 3570593,
+ "C01.DXR", "d:3430a236538e856eca98885407063a22", 810064, 404),
+ WINGAME2("kidstorymilly", "", "MILLY.EXE", "t:9f557eeb3322d61feb4e11251bbf85c9", 3570593,
+ "D01.DXR", "d:e3467d46a301f7974c7f128617e1cbe4", 1350746, 404),
+
// Original Mac filename is Kinder-Kitâ¢
MACGAME1_l("kinderkit", "", "xn--Kinder-Kit-398e", "r:bcd3c718db258701496b3c5bcb827ef2", 483518, Common::PT_BRA, 404),
WINGAME1_l("kinderkit", "", "KKIT.EXE", "t:87ecfa89c0a78bedd277930c267dd07d", 862425, Common::PT_BRA, 404),
Commit: 7457efc15bf97f5d5c61820f3633256ba66c25fa
https://github.com/scummvm/scummvm/commit/7457efc15bf97f5d5c61820f3633256ba66c25fa
Author: Scott Percival (code at moral.net.au)
Date: 2025-07-02T01:22:11+02:00
Commit Message:
DIRECTOR: Fix issue where repl broke breakpoints
Changed paths:
engines/director/debugger.cpp
diff --git a/engines/director/debugger.cpp b/engines/director/debugger.cpp
index 0a8641a8155..134335863d5 100644
--- a/engines/director/debugger.cpp
+++ b/engines/director/debugger.cpp
@@ -1190,6 +1190,7 @@ bool Debugger::lingoEval(const char *inputOrig) {
_lingoEval = true;
LC::call(sym, 0, true);
g_lingo->execute();
+ _lingoEval = false;
debugPrintf("\n");
return true;
Commit: 7e44dd67680f767102b59b6766d1a7abf1871ff8
https://github.com/scummvm/scummvm/commit/7e44dd67680f767102b59b6766d1a7abf1871ff8
Author: Scott Percival (code at moral.net.au)
Date: 2025-07-02T01:22:11+02:00
Commit Message:
DIRECTOR: XTRA: Make Rtk multi-window aware
Fixes glitching in Cracking the Conspiracy.
Changed paths:
engines/director/lingo/xtras/rtk.cpp
diff --git a/engines/director/lingo/xtras/rtk.cpp b/engines/director/lingo/xtras/rtk.cpp
index 0e2acf1ee8c..bcb1714af88 100644
--- a/engines/director/lingo/xtras/rtk.cpp
+++ b/engines/director/lingo/xtras/rtk.cpp
@@ -119,7 +119,7 @@ class RolloverToolkitXtraState : public Object<RolloverToolkitXtraState> {
public:
RolloverToolkitXtraState() : Object<RolloverToolkitXtraState>("Rollover_Toolkit") {};
- int lastSprite = 0;
+ Common::HashMap<int, int> lastSprite;
};
RolloverToolkitXtraObject::RolloverToolkitXtraObject(ObjectType ObjectType) :Object<RolloverToolkitXtraObject>("RolloverToolkit") {
@@ -172,7 +172,8 @@ void RolloverToolkitXtra::m_CheckForRollovers(int nargs) {
// if it's new
// - check if there's an on endRollover handler, provide old sprite as arg 1
// - check if there's a on startRollover handler, provide new sprite as arg 1
- Movie *movie = g_director->getCurrentMovie();
+ Window *window = g_director->getCurrentWindow();
+ Movie *movie = window->getCurrentMovie();
Score *score = movie->getScore();
if (!score) {
@@ -188,7 +189,8 @@ void RolloverToolkitXtra::m_CheckForRollovers(int nargs) {
Common::Point pos = g_director->getCurrentWindow()->getMousePos();
- int lastSprite = state->lastSprite;
+ int lastSprite = state->lastSprite.getValOrDefault(window->getId(), 0);
+
int newSprite = score->getRollOverSpriteIDFromPos(pos);
if (newSprite != lastSprite && lastSprite != 0) {
// try and call endRollover(lastSprite)
@@ -198,7 +200,7 @@ void RolloverToolkitXtra::m_CheckForRollovers(int nargs) {
// try and call startRollover(lastSprite)
movie->queueInputEvent(kEventMouseEnter, newSprite, pos);
}
- state->lastSprite = newSprite;
+ state->lastSprite[window->getId()] = newSprite;
}
Commit: ab93d1314acca00014da2b6ed8d756bafb160464
https://github.com/scummvm/scummvm/commit/ab93d1314acca00014da2b6ed8d756bafb160464
Author: Scott Percival (code at moral.net.au)
Date: 2025-07-02T01:22:11+02:00
Commit Message:
DIRECTOR: LINGO: Improve accuracy of resolving sprite event handlers
When resolving a mouseUp event handler, the sprite that should be
checked for a handler is the one identified during the earlier mouseDown event.
Fixes the DNA safe puzzle in Cracking the Conspiracy.
Fixes the buttons in first-person navigation mode in P.A.W.S.
Changed paths:
engines/director/lingo/lingo-events.cpp
engines/director/movie.h
diff --git a/engines/director/lingo/lingo-events.cpp b/engines/director/lingo/lingo-events.cpp
index d71d8afa8db..45f75155e05 100644
--- a/engines/director/lingo/lingo-events.cpp
+++ b/engines/director/lingo/lingo-events.cpp
@@ -166,13 +166,16 @@ void Movie::resolveScriptEvent(LingoEvent &event) {
// change the cast member underneath. on mouseUp should always load the cast
// script for the original cast member, not the new one.
_currentMouseDownCastID = _score->_channels[event.channelId]->_sprite->_castId;
-
+ _currentMouseDownSpriteScriptID = _score->_channels[event.channelId]->_sprite->_scriptId;
+ _currentMouseDownSpriteImmediate = _score->_channels[event.channelId]->_sprite->_immediate;
} else {
_currentHiliteChannelId = 0;
_mouseDownWasInButton = false;
_draggingSpriteOffset = Common::Point(0, 0);
_currentDraggedChannel = nullptr;
_currentMouseDownCastID = CastMemberID();
+ _currentMouseDownSpriteScriptID = CastMemberID();
+ _currentMouseDownSpriteImmediate = false;
}
} else if ((event.event == kEventMouseUp) || (event.event == kEventRightMouseUp)) {
@@ -228,30 +231,40 @@ void Movie::resolveScriptEvent(LingoEvent &event) {
* [D4 docs] */
case kSpriteHandler:
{
- if (!event.channelId)
- return;
- Frame *currentFrame = _score->_currentFrame;
- assert(currentFrame != nullptr);
- Sprite *sprite = _score->getSpriteById(event.channelId);
+ CastMemberID scriptId;
+ bool immediate = false;
+ // mouseUp events seem to check the frame script ID from the original mouseDown event
+ if ((event.event == kEventMouseUp) || (event.event == kEventRightMouseUp)) {
+ scriptId = _currentMouseDownSpriteScriptID;
+ immediate = _currentMouseDownSpriteImmediate;
+ } else {
+ if (!event.channelId)
+ return;
+ Frame *currentFrame = _score->_currentFrame;
+ assert(currentFrame != nullptr);
+ Sprite *sprite = _score->getSpriteById(event.channelId);
+ if (!sprite || !sprite->_scriptId.member)
+ return;
+ scriptId = sprite->_scriptId;
+ immediate = sprite->_immediate;
+ }
// Sprite (score) script
- if (sprite && sprite->_scriptId.member) {
- ScriptContext *script = getScriptContext(kScoreScript, sprite->_scriptId);
- if (script) {
- if (script->_eventHandlers.contains(event.event)) {
- // D4-style event handler
+ ScriptContext *script = getScriptContext(kScoreScript, scriptId);
+ if (script) {
+ if (script->_eventHandlers.contains(event.event)) {
+ // D4-style event handler
+ event.scriptType = kScoreScript;
+ event.scriptId = scriptId;
+ } else if (script->_eventHandlers.contains(kEventGeneric)) {
+ // D3-style sprite script, not contained in a handler
+ // If sprite is immediate, its script is run on mouseDown, otherwise on mouseUp
+ if ((event.event == kEventMouseDown && immediate) || (event.event == kEventMouseUp && !immediate)) {
+ event.event = kEventGeneric;
event.scriptType = kScoreScript;
- event.scriptId = sprite->_scriptId;
- } else if (script->_eventHandlers.contains(kEventGeneric)) {
- // D3-style sprite script, not contained in a handler
- // If sprite is immediate, its script is run on mouseDown, otherwise on mouseUp
- if ((event.event == kEventMouseDown && sprite->_immediate) || (event.event == kEventMouseUp && !sprite->_immediate)) {
- event.event = kEventGeneric;
- event.scriptType = kScoreScript;
- event.scriptId = sprite->_scriptId;
- }
- return; // FIXME: Do not execute the cast script if there is a D3-style sprite script
+ event.scriptId = scriptId;
}
+ return; // FIXME: Do not execute the cast script if there is a D3-style sprite script
}
}
}
diff --git a/engines/director/movie.h b/engines/director/movie.h
index 22d9056195e..ab1c961fd48 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -151,6 +151,8 @@ public:
uint16 _currentActiveSpriteId;
uint16 _currentMouseSpriteId;
CastMemberID _currentMouseDownCastID;
+ CastMemberID _currentMouseDownSpriteScriptID;
+ bool _currentMouseDownSpriteImmediate;
uint16 _currentEditableTextChannel;
uint32 _lastEventTime;
uint32 _lastRollTime;
More information about the Scummvm-git-logs
mailing list