[Scummvm-git-logs] scummvm master -> cd2cc3e2a0dfdb56080fd4728b21b5210fa31c78
sluicebox
noreply at scummvm.org
Thu Apr 30 22:48:21 UTC 2026
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
5634cf9b27 SCI: Consolidate Narrator:startText workarounds
18086be944 TINSEL: Fix DW1 DOS image clipping
cd2cc3e2a0 TINSEL: Update DW1 Act 4 dragon script patch
Commit: 5634cf9b27326f5bbe035cdaa94f63fe94d9d1c3
https://github.com/scummvm/scummvm/commit/5634cf9b27326f5bbe035cdaa94f63fe94d9d1c3
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2026-04-30T15:47:02-07:00
Commit Message:
SCI: Consolidate Narrator:startText workarounds
Changed paths:
engines/sci/engine/workarounds.cpp
diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp
index 010a75a173d..6c7b8ae9aef 100644
--- a/engines/sci/engine/workarounds.cpp
+++ b/engines/sci/engine/workarounds.cpp
@@ -276,6 +276,7 @@ const SciWorkaroundEntry uninitializedReadForParamWorkarounds[] = {
// gameID, room,script,lvl, object-name, method-name, local-call-signature, index-range, workaround
const SciWorkaroundEntry uninitializedReadWorkarounds[] = {
{ GID_ALL, -1, 990, 0, "Restore", "doit", nullptr, 364, 364, { WORKAROUND_FAKE, 0 } }, // When pressing Restore button in original restore dialog when list is empty
+ { GID_ALL, -1, 928, -1, /*Narrator*/ nullptr, "startText", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // When text+audio is enabled in SCI1.1 games. Also occurs in Pepper non-interactive demo.
{ GID_ALL, -1, 937, -1, /*IconBar*/ nullptr, "dispatchEvent", nullptr, 58, 58, { WORKAROUND_FAKE, 64 } }, // Pressing Enter on SCI1.1 control panel while mouse isn't over a button, also affects many dialogs. Empty name for Mac. Value must have 0x40 set to claim event. Bugs #5241, #6603, #13045, #13161
{ GID_CAMELOT, 40, 40, 0, "Rm40", "handleEvent", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // when looking at the ground at the pool of Siloam - bug #6401
{ GID_CASTLEBRAIN, 280, 280, 0, "programmer", "dispatchEvent", nullptr, 0, 0, { WORKAROUND_FAKE, 0xf } }, // pressing 'q' on the computer screen in the robot room, and closing the help dialog that pops up (bug #5143). Moves the cursor to the view with the ID returned (in this case, the robot hand)
@@ -368,7 +369,6 @@ const SciWorkaroundEntry uninitializedReadWorkarounds[] = {
{ GID_KQ6, -1, 903, 0, "controlWin", "open", nullptr, 4, 4, { WORKAROUND_FAKE, 0 } }, // when opening the controls window (save, load etc)
{ GID_KQ6, -1, 907, 0, "tomato", "doVerb", nullptr, 2, 2, { WORKAROUND_FAKE, 0 } }, // when looking at the rotten tomato in the inventory - bug #5331
{ GID_KQ6, -1, 921, -1, "Print", "addEdit", nullptr, 1, 1, { WORKAROUND_FAKE, 0 } }, // when displaying the game debugger's teleport dialog
- { GID_KQ6, -1, 928, 0, nullptr, "startText", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // gets caused by Text+Audio support (see script patcher)
{ GID_KQ7, -1, 64996, 0, "User", "handleEvent", nullptr, 1, 1, { WORKAROUND_FAKE, 0 } }, // called when pushing a keyboard key
{ GID_KQ7, 2450, 2450, 0, "exBridge", "handleEvent", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // called when walking up to the throne in the cave in chapter 2
{ GID_KQ7, 2450, 2450, 0, "maliciaComes", "handleEvent", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // when malicia appears at the southeast exit of the main chamber near the end of chapter 2
@@ -381,7 +381,6 @@ const SciWorkaroundEntry uninitializedReadWorkarounds[] = {
{ GID_LAURABOW2, -1, 21, 0, "dropCluesCode", "doit", nullptr, 1, 1, { WORKAROUND_FAKE, 0x7fff } }, // when asking some questions (e.g. the reporter about the burglary, or the policeman about Ziggy). Must be big, as the game scripts perform lt on it and start deleting journal entries - bugs #4979, #5026
{ GID_LAURABOW2, -1, 90, 1, "MuseumActor", "init", nullptr, 6, 6, { WORKAROUND_FAKE, 0 } }, // Random actors in museum - bug #5197
{ GID_LAURABOW2, 240, 240, 0, "sSteveAnimates", "changeState", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // Steve Dorian's idle animation at the docks - bug #5028
- { GID_LAURABOW2, -1, 928, 0, nullptr, "startText", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // gets caused by Text+Audio support (see script patcher)
{ GID_LIGHTHOUSE, -1, 0, 0, "globalVMD", "play", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // when playing a VMD while inventory is disabled (opening a portal in room 360) - bug #14924
{ GID_LIGHTHOUSE, -1, 17, 0, nullptr, "handleEvent", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // when operating the joystick in the puzzle to lower the bridge at the entrance to the workshop, or the joystick that moves the robotic arm in the mini-sub
{ GID_LONGBOW, -1, 0, 0, "Longbow", "restart", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // When canceling a restart game - bug #5244
@@ -394,7 +393,6 @@ const SciWorkaroundEntry uninitializedReadWorkarounds[] = {
{ GID_LSL5, -1, 175, 0, "", "export 0", nullptr, 1, 1, { WORKAROUND_FAKE, 0 } }, // mac: when asking for password the procedure returns an uninitialized variable. this return value is never used.
{ GID_LSL6, 820, 82, 0, "", "export 0", nullptr, 0, 326, { WORKAROUND_FAKE, 0 } }, // when touching the electric fence (temp 193 for English release, temp 293 for French/German, temp 313 for Spanish - used for setting the loop of the death animation), it's not setting it for this death - bug #5103
{ GID_LSL6, -1, 85, 0, "washcloth", "doVerb", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // washcloth in inventory
- { GID_LSL6, -1, 928, -1, "Narrator", "startText", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // used by various objects that are even translated in foreign versions, that's why we use the base-class
{ GID_LSL6HIRES, -1, 85, 0, "LL6Inv", "init", nullptr, 0, 0, { WORKAROUND_FAKE, 1 } }, // when creating a new game. must be non-zero for correct inventory background color - bug #13497
{ GID_LSL6HIRES, -1, 85, 0, "washcloth", "doVerb", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // when interacting with the wet washcloth in the inventory - Trac#9811
{ GID_LSL6HIRES, 820, 82, 0, "", "export 0", nullptr, 3, 3, { WORKAROUND_FAKE, 0 } }, // when touching the electric fence - bug #10361
@@ -412,7 +410,6 @@ const SciWorkaroundEntry uninitializedReadWorkarounds[] = {
{ GID_MOTHERGOOSEHIRES,-1,64950, -1, "Feature", "handleEvent", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // right when clicking on a child at the start and probably also later
{ GID_MOTHERGOOSEHIRES,-1,64950, -1, "View", "handleEvent", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // see above
{ GID_PEPPER, -1, 894, 0, "Package", "doVerb", nullptr, 3, 3, { WORKAROUND_FAKE, 0 } }, // using the hand on the book in the inventory - bug #5154
- { GID_PEPPER, 150, 928, 0, "Narrator", "startText", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // happens during the non-interactive demo of Pepper
{ GID_PEPPER, 260, 260, 0, "glutton", "doVerb", nullptr, 0, 0, { WORKAROUND_FAKE, 0 } }, // using tomato on General Lee
{ GID_PHANTASMAGORIA, -1, 64921, -1, "Print", "addEdit", nullptr, 1, 1, { WORKAROUND_FAKE, 0 } }, // When trying to use the game debugger's flag setting command
{ GID_PQ4, -1, 25, 0, "iconToggle", "select", nullptr, 1, 1, { WORKAROUND_FAKE, 0 } }, // when toggling the icon bar to auto-hide or not
Commit: 18086be9446c0e8f2b3149d464ffe79743ce5f1a
https://github.com/scummvm/scummvm/commit/18086be9446c0e8f2b3149d464ffe79743ce5f1a
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2026-04-30T15:47:03-07:00
Commit Message:
TINSEL: Fix DW1 DOS image clipping
Fixes the DW1 DOS renderer drawing beyond the image height when the
height is not a multiple of four. This did not affect the screen
because the overdrawn bytes were zero, and treated as transparency.
The DW1 PSX renderer had this same bug, but it did affect the screen.
I fixed that last month, but held off on fixing the DOS renderer for
consistency until the ScummVM release cycle had completed.
See: a663f323f33723b4e20e51e726bf08324d570298
Changed paths:
engines/tinsel/graphics.cpp
diff --git a/engines/tinsel/graphics.cpp b/engines/tinsel/graphics.cpp
index a4d0388c364..30137ede12d 100644
--- a/engines/tinsel/graphics.cpp
+++ b/engines/tinsel/graphics.cpp
@@ -434,9 +434,9 @@ static void WrtNonZero(DRAWOBJECT *pObj, uint8 *srcP, uint8 *destP, bool applyCl
int width = pObj->width;
if (!applyClipping) {
- // No clipping, so so set box bounding area for drawing full 4x4 pixel blocks
+ // No clipping, so set box bounding area for drawing full 4x4 pixel blocks
boxBounds.top = 0;
- boxBounds.bottom = 3;
+ boxBounds.bottom = MIN(pObj->height - 1, 3);
boxBounds.left = 0;
} else {
// Handle any possible clipping at the top of the char block.
Commit: cd2cc3e2a0dfdb56080fd4728b21b5210fa31c78
https://github.com/scummvm/scummvm/commit/cd2cc3e2a0dfdb56080fd4728b21b5210fa31c78
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2026-04-30T15:47:03-07:00
Commit Message:
TINSEL: Update DW1 Act 4 dragon script patch
Fixes two cosmetic side effects from my dragon patch during act 4.
The dragon's visual/text state was altered in the barn and Rincewind's
room. I missed that there were other codepaths at the end of the game
that use the same actor id. Now I patch the scene's exit to prevent
altering game state outside of the intended scene, as opposed to
re-initializing game state on both entrances.
See: b01d674c28cc83b79262fa30fa2c194e299d6996
Changed paths:
engines/tinsel/pcode.cpp
diff --git a/engines/tinsel/pcode.cpp b/engines/tinsel/pcode.cpp
index 2111ffa0680..3963ae70738 100644
--- a/engines/tinsel/pcode.cpp
+++ b/engines/tinsel/pcode.cpp
@@ -301,10 +301,11 @@ const WorkaroundEntry workaroundList[] = {
// Rincewind invisible. Entrance 2 attempts to kill the dragon's polygon,
// but it uses the wrong ID, and no attempt is made to remove the actor.
// We fix this by adding a `KillActor` call and a `KillTag` call with the
- // actual polygon ID to the entrance 2 script. Entrance 1 is the finale,
- // and requires `SetActor` and `SetTag` calls to restore the dragon.
- {TINSEL_V1, false, false, Common::kPlatformUnknown, 0x0184eb36, 0, sizeof(fragment20), fragment20}, // Entrance 2
- {TINSEL_V1, false, false, Common::kPlatformUnknown, 0x0184e86c, 0, sizeof(fragment21), fragment21}, // Entrance 1
+ // actual polygon ID to the entrance 2 script. We balance this with
+ // `SetActor` and `SetTag` calls when exiting to the map to prevent
+ // altering global actor or tag state outside of the act 4 square.
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 0x0184eb36, 0, sizeof(fragment20), fragment20}, // Entrance 2
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 0x0184eccc, 54, sizeof(fragment21), fragment21}, // Polygon 1: exit to map
#if NOIR_SKIP_INTRO
// NOIR: Skip the menu and intro, and skip the first conversation.
More information about the Scummvm-git-logs
mailing list