From d7f26886c3df2862bd8e3f49bb2d113bf9cbc78d Mon Sep 17 00:00:00 2001
From: Martin Kiewitz
Date: Sun, 1 Jun 2014 23:33:45 +0200
Subject: SCI: more hoyle 4 workarounds (bug #6604)

---
 engines/sci/engine/kernel_tables.h | 2 +-
 engines/sci/engine/workarounds.cpp | 8 ++++++++
 engines/sci/engine/workarounds.h   | 1 +
 3 files changed, 10 insertions(+), 1 deletion(-)

(limited to 'engines')

diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h
index 8a9c1426b6..fc46d16b8d 100644
--- a/engines/sci/engine/kernel_tables.h
+++ b/engines/sci/engine/kernel_tables.h
@@ -331,7 +331,7 @@ static SciKernelMapEntry s_kernelMap[] = {
 	{ MAP_CALL(Clone),             SIG_EVERYWHERE,           "o",                     NULL,            NULL },
 	{ MAP_CALL(CoordPri),          SIG_EVERYWHERE,           "i(i)",                  NULL,            NULL },
 	{ MAP_CALL(CosDiv),            SIG_EVERYWHERE,           "ii",                    NULL,            NULL },
-	{ MAP_CALL(DeleteKey),         SIG_EVERYWHERE,           "l.",                    NULL,            NULL },
+	{ MAP_CALL(DeleteKey),         SIG_EVERYWHERE,           "l.",                    NULL,            kDeleteKey_workarounds },
 	{ MAP_CALL(DeviceInfo),        SIG_EVERYWHERE,           "i(r)(r)(i)",            NULL,            kDeviceInfo_workarounds }, // subop
 	{ MAP_CALL(Display),           SIG_EVERYWHERE,           "[ir]([ir!]*)",          NULL,            kDisplay_workarounds },
 	// ^ we allow invalid references here, because kDisplay gets called with those in e.g. pq3 during intro
diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp
index 60584ef675..37e46b7a96 100644
--- a/engines/sci/engine/workarounds.cpp
+++ b/engines/sci/engine/workarounds.cpp
@@ -223,6 +223,14 @@ const SciWorkaroundEntry kCelWide_workarounds[] = {
 	SCI_WORKAROUNDENTRY_TERMINATOR
 };
 
+//    gameID,           room,script,lvl,          object-name, method-name,    call,index,                workaround
+const SciWorkaroundEntry kDeleteKey_workarounds[] = {
+	{    GID_HOYLE4,     300,   999,  0,     "handleEventList", "delete",        -1,    0, { WORKAROUND_IGNORE, 0 } }, // restarting hearts, while tray is shown - bug #6604
+	{    GID_HOYLE4,     500,   999,  0,     "handleEventList", "delete",        -1,    0, { WORKAROUND_IGNORE, 0 } }, // restarting cribbage, while tray is shown - bug #6604
+	{    GID_HOYLE4,     975,   999,  0,     "handleEventList", "delete",        -1,    0, { WORKAROUND_IGNORE, 0 } }, // going back to gamelist from hearts/cribbage, while tray is shown - bug #6604
+	SCI_WORKAROUNDENTRY_TERMINATOR
+};
+
 //    gameID,           room,script,lvl,          object-name, method-name,    call,index,                workaround
 const SciWorkaroundEntry kDeviceInfo_workarounds[] = {
 	{ GID_FANMADE,        -1,   994,  1,               "Game", "save",        0xd1c,    0, { WORKAROUND_STILLCALL, 0 } }, // In fanmade games, this is called with one parameter for CurDevice (Cascade Quest)
diff --git a/engines/sci/engine/workarounds.h b/engines/sci/engine/workarounds.h
index 2e73dddbe3..9cad618481 100644
--- a/engines/sci/engine/workarounds.h
+++ b/engines/sci/engine/workarounds.h
@@ -76,6 +76,7 @@ extern const SciWorkaroundEntry kDirLoop_workarounds[];
 extern const SciWorkaroundEntry kDisposeScript_workarounds[];
 extern const SciWorkaroundEntry kDoSoundFade_workarounds[];
 extern const SciWorkaroundEntry kFindKey_workarounds[];
+extern const SciWorkaroundEntry kDeleteKey_workarounds[];
 extern const SciWorkaroundEntry kGetAngle_workarounds[];
 extern const SciWorkaroundEntry kGraphDrawLine_workarounds[];
 extern const SciWorkaroundEntry kGraphSaveBox_workarounds[];
-- 
cgit v1.2.3