[Scummvm-git-logs] scummvm master -> b01d674c28cc83b79262fa30fa2c194e299d6996
bluegr
noreply at scummvm.org
Mon Mar 9 20:24:51 UTC 2026
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:
b01d674c28 TINSEL: Fix DW1 Act 4 dragon appearing before finale
Commit: b01d674c28cc83b79262fa30fa2c194e299d6996
https://github.com/scummvm/scummvm/commit/b01d674c28cc83b79262fa30fa2c194e299d6996
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2026-03-09T22:24:48+02:00
Commit Message:
TINSEL: Fix DW1 Act 4 dragon appearing before finale
Fixes a script bug in .GRA versions
Changed paths:
engines/tinsel/pcode.cpp
diff --git a/engines/tinsel/pcode.cpp b/engines/tinsel/pcode.cpp
index 5dbc026118e..0011bb07bb9 100644
--- a/engines/tinsel/pcode.cpp
+++ b/engines/tinsel/pcode.cpp
@@ -174,6 +174,18 @@ static const byte fragment19[] = {
OP_IMM | OPSIZE8, 2,
OP_LIBCALL | OPSIZE8, 0x0f // Conversation(2), close conversation window
};
+static const byte fragment20[] = {
+ OP_IMM | OPSIZE8, 35,
+ OP_LIBCALL | OPSIZE8, 0x29, // KillTag(35) - dragon polygon
+ OP_IMM | OPSIZE8, 9,
+ OP_LIBCALL | OPSIZE8, 0x26 // KillActor(9) - dragon actor
+};
+static const byte fragment21[] = {
+ OP_IMM | OPSIZE8, 35,
+ OP_LIBCALL | OPSIZE8, 0x43, // SetTag(35) - dragon polygon
+ OP_IMM | OPSIZE8, 9,
+ OP_LIBCALL | OPSIZE8, 0x3e // SetActor(9) - dragon actor
+};
#if NOIR_SKIP_INTRO
static const byte fragment_noir_skip_intro_1[] = {
@@ -282,6 +294,18 @@ const WorkaroundEntry workaroundList[] = {
// the stop-conversation icon from working. Fixes bug #10661
{TINSEL_V1, false, false, Common::kPlatformUnknown, 553821320, 465, sizeof(fragment19), fragment19},
+ // DW1-GRA: Fixes Act 4 dragon appearing in town square before finale.
+ // The dragon is supposed to appear once all the items have been found,
+ // but instead it is always present. Clicking it glitches the game with
+ // animation from the final battle, revealing puzzle details and leaving
+ // 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
+
#if NOIR_SKIP_INTRO
// NOIR: Skip the menu and intro, and skip the first conversation.
{TINSEL_V3, false, false, Common::kPlatformUnknown, 0, 0x6a2, sizeof(fragment_noir_skip_intro_1), fragment_noir_skip_intro_1},
More information about the Scummvm-git-logs
mailing list