[Scummvm-git-logs] scummvm master -> 850d5585171c46cf0106ae93c687eaae33472a76
bluegr
noreply at scummvm.org
Mon Mar 2 19:55:55 UTC 2026
This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
3b40ac0018 TINSEL: Add debugger commands for global variables
b2e9411eef TINSEL: Add debugger command for listing scenes
517b8d192d TINSEL: Fix DW1 Act 2 Amazon speech in all versions
7636862d06 TINSEL: Fix DW1 Act 4 invisible city guard crash
cd6e1b7048 TINSEL: Fix DW1 Act 3 floating calculate button
850d558517 TINSEL: Fix DW1 L-Space barman conversation window
Commit: 3b40ac0018596090a6f7ee9ca33920b0016c02f7
https://github.com/scummvm/scummvm/commit/3b40ac0018596090a6f7ee9ca33920b0016c02f7
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2026-03-02T21:55:43+02:00
Commit Message:
TINSEL: Add debugger commands for global variables
Changed paths:
engines/tinsel/debugger.cpp
engines/tinsel/debugger.h
engines/tinsel/pcode.cpp
engines/tinsel/pcode.h
diff --git a/engines/tinsel/debugger.cpp b/engines/tinsel/debugger.cpp
index ba1606b4b9c..b8a8dbe565f 100644
--- a/engines/tinsel/debugger.cpp
+++ b/engines/tinsel/debugger.cpp
@@ -73,6 +73,9 @@ Console::Console() : GUI::Debugger() {
registerCmd("music", WRAP_METHOD(Console, cmd_music));
registerCmd("sound", WRAP_METHOD(Console, cmd_sound));
registerCmd("string", WRAP_METHOD(Console, cmd_string));
+ registerCmd("globals", WRAP_METHOD(Console, cmd_globals));
+ registerCmd("global", WRAP_METHOD(Console, cmd_global));
+ registerCmd("g", WRAP_METHOD(Console, cmd_global)); // alias
}
Console::~Console() {
@@ -167,6 +170,37 @@ bool Console::cmd_string(int argc, const char **argv) {
return true;
}
+bool Console::cmd_globals(int argc, const char **argv) {
+ for (int i = 0; i < GetGlobalCount(); i++) {
+ int value = GetGlobal(i);
+ debugPrintf("global %d == %08x (%d)\n", i, value, value);
+ }
+ return true;
+}
+
+bool Console::cmd_global(int argc, const char **argv) {
+ if (!(2 <= argc && argc <= 3)) {
+ debugPrintf("Print or set global variable\n");
+ debugPrintf("usage: %s <global> [new-value]\n", argv[0]);
+ return true;
+ }
+
+ int global = strToInt(argv[1]);
+ if (!(0 <= global && global < GetGlobalCount())) {
+ debugPrintf("maximum global: %d\n", GetGlobalCount() - 1);
+ return true;
+ }
+
+ if (argc == 3) {
+ int newValue = strToInt(argv[2]);
+ SetGlobal(global, newValue);
+ }
+
+ int value = GetGlobal(global);
+ debugPrintf("global %d == %08x (%d)\n", global, value, value);
+ return true;
+}
+
// Noir:
bool Console::cmd_add_clue(int argc, const char **argv) {
if (argc < 2) {
diff --git a/engines/tinsel/debugger.h b/engines/tinsel/debugger.h
index 2e5b52645ac..d5d0d98ccc0 100644
--- a/engines/tinsel/debugger.h
+++ b/engines/tinsel/debugger.h
@@ -43,6 +43,8 @@ private:
bool cmd_music(int argc, const char **argv);
bool cmd_sound(int argc, const char **argv);
bool cmd_string(int argc, const char **argv);
+ bool cmd_globals(int argc, const char **argv);
+ bool cmd_global(int argc, const char **argv);
};
} // End of namespace Tinsel
diff --git a/engines/tinsel/pcode.cpp b/engines/tinsel/pcode.cpp
index acaf955683d..71079149eb1 100644
--- a/engines/tinsel/pcode.cpp
+++ b/engines/tinsel/pcode.cpp
@@ -509,6 +509,32 @@ void FreeGlobals() {
g_icList= nullptr;
}
+/**
+ * Get number of globals. Used by debugger.
+ */
+int GetGlobalCount() {
+ return g_numGlobals;
+}
+
+/**
+ * Get global value. Used by debugger.
+ */
+int32 GetGlobal(int g) {
+ if (g_pGlobals != nullptr && 0 <= g && g < g_numGlobals) {
+ return g_pGlobals[g];
+ }
+ return 0;
+}
+
+/**
+* Sets global value. Used by debugger.
+*/
+void SetGlobal(int g, int32 value) {
+ if (g_pGlobals != nullptr && 0 <= g && g < g_numGlobals) {
+ g_pGlobals[g] = value;
+ }
+}
+
/**
* (Un)serialize the global data for save/restore game.
*/
diff --git a/engines/tinsel/pcode.h b/engines/tinsel/pcode.h
index 4ecc9f12029..83377ca6c8d 100644
--- a/engines/tinsel/pcode.h
+++ b/engines/tinsel/pcode.h
@@ -111,6 +111,11 @@ void SaveInterpretContexts(INT_CONTEXT *sICInfo);
void RegisterGlobals(int num);
void FreeGlobals();
+// Used by debugger
+int GetGlobalCount();
+int32 GetGlobal(int g);
+void SetGlobal(int g, int32 value);
+
void AttachInterpret(INT_CONTEXT *pic, Common::PROCESS *pProc);
void WaitInterpret(CORO_PARAM, Common::PPROCESS pWaitProc, bool *result);
Commit: b2e9411eef00ac1fe7790cec0a49dd89e464279e
https://github.com/scummvm/scummvm/commit/b2e9411eef00ac1fe7790cec0a49dd89e464279e
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2026-03-02T21:55:43+02:00
Commit Message:
TINSEL: Add debugger command for listing scenes
Changed paths:
engines/tinsel/debugger.cpp
engines/tinsel/debugger.h
engines/tinsel/handle.cpp
engines/tinsel/handle.h
diff --git a/engines/tinsel/debugger.cpp b/engines/tinsel/debugger.cpp
index b8a8dbe565f..4a02d5b2c2d 100644
--- a/engines/tinsel/debugger.cpp
+++ b/engines/tinsel/debugger.cpp
@@ -22,6 +22,7 @@
#include "tinsel/tinsel.h"
#include "tinsel/debugger.h"
#include "tinsel/dialogs.h"
+#include "tinsel/handle.h"
#include "tinsel/pcode.h"
#include "tinsel/scene.h"
#include "tinsel/sound.h"
@@ -69,6 +70,7 @@ Console::Console() : GUI::Debugger() {
registerCmd("list_clues", WRAP_METHOD(Console, cmd_list_clues));
}
registerCmd("item", WRAP_METHOD(Console, cmd_item));
+ registerCmd("scenes", WRAP_METHOD(Console, cmd_scenes));
registerCmd("scene", WRAP_METHOD(Console, cmd_scene));
registerCmd("music", WRAP_METHOD(Console, cmd_music));
registerCmd("sound", WRAP_METHOD(Console, cmd_sound));
@@ -93,6 +95,23 @@ bool Console::cmd_item(int argc, const char **argv) {
return false;
}
+bool Console::cmd_scenes(int argc, const char **argv) {
+ Common::String filter;
+ if (argc >= 2) {
+ filter = argv[1];
+ }
+
+ for (int i = 0; i < _vm->_handle->GetSceneCount(); i++) {
+ Common::String name = _vm->_handle->GetSceneName(i);
+ if (!name.empty()) {
+ if (filter.empty() || name.hasPrefixIgnoreCase(filter)) {
+ debugPrintf("scene %d: %s\n", i, name.c_str());
+ }
+ }
+ }
+ return true;
+}
+
bool Console::cmd_scene(int argc, const char **argv) {
if (argc < 1 || argc > 3) {
debugPrintf("%s [scene_number [entry number]]\n", argv[0]);
@@ -102,7 +121,9 @@ bool Console::cmd_scene(int argc, const char **argv) {
}
if (argc == 1) {
- debugPrintf("Current scene is %d\n", GetSceneHandle() >> SCNHANDLE_SHIFT);
+ int index = GetSceneHandle() >> SCNHANDLE_SHIFT;
+ Common::String name = _vm->_handle->GetSceneName(index);
+ debugPrintf("Current scene is %d: %s\n", index, name.c_str());
return true;
}
diff --git a/engines/tinsel/debugger.h b/engines/tinsel/debugger.h
index d5d0d98ccc0..77e6f3ee099 100644
--- a/engines/tinsel/debugger.h
+++ b/engines/tinsel/debugger.h
@@ -39,6 +39,7 @@ private:
bool cmd_cross_clue(int argc, const char **argv);
bool cmd_list_clues(int argc, const char **argv);
bool cmd_item(int argc, const char **argv);
+ bool cmd_scenes(int argc, const char **argv);
bool cmd_scene(int argc, const char **argv);
bool cmd_music(int argc, const char **argv);
bool cmd_sound(int argc, const char **argv);
diff --git a/engines/tinsel/handle.cpp b/engines/tinsel/handle.cpp
index aeaf5f97418..26b00900fe6 100644
--- a/engines/tinsel/handle.cpp
+++ b/engines/tinsel/handle.cpp
@@ -593,6 +593,28 @@ bool Handle::ValidHandle(SCNHANDLE offset) {
}
#endif
+/**
+ * Get number of scenes. Used by debugger.
+ */
+int Handle::GetSceneCount() {
+ return _numHandles;
+}
+
+/**
+ * Get scene file name. Used by debugger.
+ */
+Common::String Handle::GetSceneName(int index) {
+ if (0 <= index && index < (int)_numHandles) {
+ // extract and zero terminate the filename
+ const MEMHANDLE *handle = &_handleTable[index];
+ char szFilename[sizeof(handle->szName) + 1];
+ memcpy(szFilename, handle->szName, sizeof(handle->szName));
+ szFilename[sizeof(handle->szName)] = 0;
+ return szFilename;
+ }
+ return "";
+}
+
/**
* TouchMem
* @param offset Handle and offset to data
diff --git a/engines/tinsel/handle.h b/engines/tinsel/handle.h
index 4d2aea96304..a59580c96f3 100644
--- a/engines/tinsel/handle.h
+++ b/engines/tinsel/handle.h
@@ -84,6 +84,10 @@ public:
bool ValidHandle(SCNHANDLE offset);
#endif
+ // Used by debugger
+ int GetSceneCount();
+ Common::String GetSceneName(int index);
+
private:
void LoadFile(MEMHANDLE *pH); // load a memory block as a file
void OpenCDGraphFile();
Commit: 517b8d192d286aa77f18ab39eac97f968e601f8b
https://github.com/scummvm/scummvm/commit/517b8d192d286aa77f18ab39eac97f968e601f8b
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2026-03-02T21:55:43+02:00
Commit Message:
TINSEL: Fix DW1 Act 2 Amazon speech in all versions
Fixes bug #6013
Changed paths:
engines/tinsel/pcode.cpp
diff --git a/engines/tinsel/pcode.cpp b/engines/tinsel/pcode.cpp
index 71079149eb1..d13745d365f 100644
--- a/engines/tinsel/pcode.cpp
+++ b/engines/tinsel/pcode.cpp
@@ -141,22 +141,23 @@ static const byte fragment5[] = {OP_IMM | OPSIZE16, FRAGMENT_WORD(901), OP_JUMP
static const byte fragment6[] = {OP_IMM | OPSIZE16, FRAGMENT_WORD(903), OP_JUMP | OPSIZE16, FRAGMENT_WORD(516)};
static const byte fragment7[] = {OP_IMM | OPSIZE16, FRAGMENT_WORD(908), OP_JUMP | OPSIZE16, FRAGMENT_WORD(616)};
static const byte fragment8[] = {OP_IMM | OPSIZE16, FRAGMENT_WORD(910), OP_JUMP | OPSIZE16, FRAGMENT_WORD(644)};
-static const byte fragment9[] = {OP_JUMP | OPSIZE8, 123};
-static const byte fragment10[] = {OP_IMM | OPSIZE16, FRAGMENT_WORD(160), OP_JUMP | OPSIZE16, FRAGMENT_WORD(136)};
-static const byte fragment11[] = {OP_JMPTRUE | OPSIZE16, FRAGMENT_WORD(1572),
+static const byte fragment9[] = {OP_JUMP | OPSIZE8, 115};
+static const byte fragment10[] = {OP_JUMP | OPSIZE8, 123};
+static const byte fragment11[] = {OP_IMM | OPSIZE16, FRAGMENT_WORD(160), OP_JUMP | OPSIZE16, FRAGMENT_WORD(136)};
+static const byte fragment12[] = {OP_JMPTRUE | OPSIZE16, FRAGMENT_WORD(1572),
OP_ONE, OP_LIBCALL | OPSIZE8, 14, // Re-show the cursor
OP_IMM | OPSIZE16, FRAGMENT_WORD(322), OP_LIBCALL | OPSIZE8, 46, // Give back the whistle
OP_JUMP | OPSIZE16, FRAGMENT_WORD(1661)};
-static const byte fragment12[] = {OP_JMPTRUE | OPSIZE16, FRAGMENT_WORD(1491),
+static const byte fragment13[] = {OP_JMPTRUE | OPSIZE16, FRAGMENT_WORD(1491),
OP_ONE, OP_LIBCALL | OPSIZE8, 14, // Re-show the cursor
OP_IMM | OPSIZE16, FRAGMENT_WORD(322), OP_LIBCALL | OPSIZE8, 46, // Give back the whistle
OP_JUMP | OPSIZE16, FRAGMENT_WORD(1568)};
-static const byte fragment13[] = {OP_ZERO, OP_GSTORE | OPSIZE16, FRAGMENT_WORD(306)};
-static const byte fragment14[] = {OP_LIBCALL | OPSIZE8, 58,
+static const byte fragment14[] = {OP_ZERO, OP_GSTORE | OPSIZE16, FRAGMENT_WORD(306)};
+static const byte fragment15[] = {OP_LIBCALL | OPSIZE8, 58,
OP_IMM, FRAGMENT_DWORD((42 << 23)), OP_ONE, OP_ZERO, OP_LIBCALL | OPSIZE8, 44,
OP_LIBCALL | OPSIZE8, 97, OP_JUMP | OPSIZE16, FRAGMENT_WORD(2220)
};
-static const byte fragment15[] = { OP_JMPFALSE | OPSIZE16, FRAGMENT_WORD(154) };
+static const byte fragment16[] = { OP_JMPFALSE | OPSIZE16, FRAGMENT_WORD(154) };
#if NOIR_SKIP_INTRO
static const byte fragment_noir_skip_intro_1[] = {
@@ -201,11 +202,16 @@ const WorkaroundEntry workaroundList[] = {
{TINSEL_V1, false, false, Common::kPlatformUnknown, 310506872, 613, sizeof(fragment7), fragment7},
{TINSEL_V1, false, false, Common::kPlatformUnknown, 310506872, 641, sizeof(fragment8), fragment8},
- // DW1-SCN: The script for the lovable street-Starfish does a
+ // DW1: The script for the lovable street-Starfish does a
// 'StopSample' after flicking the coin to ensure it's sound is
// stopped, but which also accidentally can stop any active
- // conversation with the Amazon.
- {TINSEL_V1, true, false, Common::kPlatformUnknown, 394640351, 121, sizeof(fragment9), fragment9},
+ // conversation with the Amazon. This occurs in GRA and early
+ // SCN versions (Mac English-only, DOS English-only), and was
+ // fixed in later versions by removing the `StopSample` call.
+ // Fixes bugs #4588, #6013
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 386244920, 113, sizeof(fragment9), fragment9}, // All .GRA
+ {TINSEL_V1, true, false, Common::kPlatformMacintosh, 395378742, 113, sizeof(fragment9), fragment9}, // Mac .SCN
+ {TINSEL_V1, true, false, Common::kPlatformDOS, 394640351, 121, sizeof(fragment10), fragment10}, // DOS .SCN
// DW2: In the garden, global #490 is set when the bees begin their
// 'out of hive' animation, and reset when done. But if the game is
@@ -222,26 +228,26 @@ const WorkaroundEntry workaroundList[] = {
// DW1-GRA: Corrects text being drawn partially off-screen during
// the blackboard description of the Librarian.
- {TINSEL_V1, false, false, Common::kPlatformUnknown, 293831402, 133, sizeof(fragment10), fragment10},
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 293831402, 133, sizeof(fragment11), fragment11},
// DW1-GRA/SCN: Corrects the dead-end of being able to give the
// whistle back to the pirate before giving him the parrot.
// See bug report #4755.
- {TINSEL_V1, true, false, Common::kPlatformUnknown, 352601285, 1569, sizeof(fragment11), fragment11},
- {TINSEL_V1, false, false, Common::kPlatformUnknown, 352602304, 1488, sizeof(fragment12), fragment12},
+ {TINSEL_V1, true, false, Common::kPlatformUnknown, 352601285, 1569, sizeof(fragment12), fragment12},
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 352602304, 1488, sizeof(fragment13), fragment13},
// DW2: Corrects a bug with global 306 not being cleared if you leave
// the marketplace scene whilst D'Blah is talking (even if it's not
// actually audible); returning to the scene and clicking on him multiple
// times would cause the game to crash
- {TINSEL_V2, true, false, Common::kPlatformUnknown, 1109294728, 0, sizeof(fragment13), fragment13},
+ {TINSEL_V2, true, false, Common::kPlatformUnknown, 1109294728, 0, sizeof(fragment14), fragment14},
// DW1 PSX DEMO: Alters a script in the PSX DW1 demo to show the Idle animation scene rather than
// quitting the game when no user input happens for a while
- {TINSEL_V1, true, true, Common::kPlatformPSX, 0, 2186, sizeof(fragment14), fragment14},
+ {TINSEL_V1, true, true, Common::kPlatformPSX, 0, 2186, sizeof(fragment15), fragment15},
// DW1-GRA: Fixes hang in Temple, when trying to use items on the big hammer
- {TINSEL_V1, false, false, Common::kPlatformUnknown, 276915849, 0x98, sizeof(fragment15), fragment15},
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 276915849, 0x98, sizeof(fragment16), fragment16},
#if NOIR_SKIP_INTRO
// NOIR: Skip the menu and intro, and skip the first conversation.
Commit: 7636862d06c365b3f6222bab76483ceeab1c9fac
https://github.com/scummvm/scummvm/commit/7636862d06c365b3f6222bab76483ceeab1c9fac
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2026-03-02T21:55:43+02:00
Commit Message:
TINSEL: Fix DW1 Act 4 invisible city guard crash
Fixes bug #10659
Changed paths:
engines/tinsel/pcode.cpp
diff --git a/engines/tinsel/pcode.cpp b/engines/tinsel/pcode.cpp
index d13745d365f..9ca44c1d4aa 100644
--- a/engines/tinsel/pcode.cpp
+++ b/engines/tinsel/pcode.cpp
@@ -158,6 +158,7 @@ static const byte fragment15[] = {OP_LIBCALL | OPSIZE8, 58,
OP_LIBCALL | OPSIZE8, 97, OP_JUMP | OPSIZE16, FRAGMENT_WORD(2220)
};
static const byte fragment16[] = { OP_JMPFALSE | OPSIZE16, FRAGMENT_WORD(154) };
+static const byte fragment17[] = { OP_IMM | OPSIZE8, 21, OP_LIBCALL | OPSIZE8, 0x29 }; // KillTag(21), city guard
#if NOIR_SKIP_INTRO
static const byte fragment_noir_skip_intro_1[] = {
@@ -249,6 +250,12 @@ const WorkaroundEntry workaroundList[] = {
// DW1-GRA: Fixes hang in Temple, when trying to use items on the big hammer
{TINSEL_V1, false, false, Common::kPlatformUnknown, 276915849, 0x98, sizeof(fragment16), fragment16},
+ // DW1-GRA: Fixes Act 4 invisible city guard. Talking to him crashes the game.
+ // The guard's polygon has the wrong ID, preventing `KillTag` from disabling it.
+ // The ID was fixed in SCN versions. We fix this by adding a `KillTag` with
+ // the actual polygon ID. Fixes bug #10659
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 184651316, 10, sizeof(fragment17), fragment17},
+
#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},
Commit: cd6e1b70488ea35e8956e90c20467408854ff6d3
https://github.com/scummvm/scummvm/commit/cd6e1b70488ea35e8956e90c20467408854ff6d3
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2026-03-02T21:55:43+02:00
Commit Message:
TINSEL: Fix DW1 Act 3 floating calculate button
Fixes bug #10658
Changed paths:
engines/tinsel/pcode.cpp
diff --git a/engines/tinsel/pcode.cpp b/engines/tinsel/pcode.cpp
index 9ca44c1d4aa..5a3c84ec404 100644
--- a/engines/tinsel/pcode.cpp
+++ b/engines/tinsel/pcode.cpp
@@ -159,6 +159,13 @@ static const byte fragment15[] = {OP_LIBCALL | OPSIZE8, 58,
};
static const byte fragment16[] = { OP_JMPFALSE | OPSIZE16, FRAGMENT_WORD(154) };
static const byte fragment17[] = { OP_IMM | OPSIZE8, 21, OP_LIBCALL | OPSIZE8, 0x29 }; // KillTag(21), city guard
+static const byte fragment18[] = {
+ OP_FILM, FRAGMENT_DWORD(0x0B015A30),
+ OP_IMM | OPSIZE16, FRAGMENT_WORD(82),
+ OP_IMM | OPSIZE16, FRAGMENT_WORD(141),
+ OP_MINUSONE, OP_ZERO, OP_ONE,
+ OP_LIBCALL | OPSIZE8, 0x51 // TopPlay(0B015A30, 82, 141, -1, 0, 1), city gate "calculate odds" button
+};
#if NOIR_SKIP_INTRO
static const byte fragment_noir_skip_intro_1[] = {
@@ -256,6 +263,12 @@ const WorkaroundEntry workaroundList[] = {
// the actual polygon ID. Fixes bug #10659
{TINSEL_V1, false, false, Common::kPlatformUnknown, 184651316, 10, sizeof(fragment17), fragment17},
+ // DW1-GRA: Fixes Act 3 floating "calculate odds" button when clicking outside window.
+ // The film that is played when clicking outside the window does not remove the button.
+ // This was fixed in SCN versions. We work around this by playing the click-button
+ // film when clicking outside the window, as it removes the button. Fixes bug #10658
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 184641238, 39, sizeof(fragment18), fragment18},
+
#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},
Commit: 850d5585171c46cf0106ae93c687eaae33472a76
https://github.com/scummvm/scummvm/commit/850d5585171c46cf0106ae93c687eaae33472a76
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2026-03-02T21:55:43+02:00
Commit Message:
TINSEL: Fix DW1 L-Space barman conversation window
Fixes bug #10661
Changed paths:
engines/tinsel/pcode.cpp
diff --git a/engines/tinsel/pcode.cpp b/engines/tinsel/pcode.cpp
index 5a3c84ec404..5dbc026118e 100644
--- a/engines/tinsel/pcode.cpp
+++ b/engines/tinsel/pcode.cpp
@@ -166,6 +166,14 @@ static const byte fragment18[] = {
OP_MINUSONE, OP_ZERO, OP_ONE,
OP_LIBCALL | OPSIZE8, 0x51 // TopPlay(0B015A30, 82, 141, -1, 0, 1), city gate "calculate odds" button
};
+static const byte fragment19[] = {
+ OP_DUP,
+ OP_IMM | OPSIZE16, FRAGMENT_WORD(331), // stop conversation icon
+ OP_EQUAL,
+ OP_JMPFALSE | OPSIZE16, FRAGMENT_WORD(69), // jmpfalse to alloc -1, jump to alloc -1, halt
+ OP_IMM | OPSIZE8, 2,
+ OP_LIBCALL | OPSIZE8, 0x0f // Conversation(2), close conversation window
+};
#if NOIR_SKIP_INTRO
static const byte fragment_noir_skip_intro_1[] = {
@@ -269,6 +277,11 @@ const WorkaroundEntry workaroundList[] = {
// film when clicking outside the window, as it removes the button. Fixes bug #10658
{TINSEL_V1, false, false, Common::kPlatformUnknown, 184641238, 39, sizeof(fragment18), fragment18},
+ // DW1-GRA: Fixes barman conversation window not closing in L-Space.
+ // The `SCANICON` switch statement is missing a handler, preventing
+ // the stop-conversation icon from working. Fixes bug #10661
+ {TINSEL_V1, false, false, Common::kPlatformUnknown, 553821320, 465, sizeof(fragment19), fragment19},
+
#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