diff options
author | Filippos Karapetis | 2018-08-30 23:47:20 +0300 |
---|---|---|
committer | Filippos Karapetis | 2018-08-30 23:51:01 +0300 |
commit | dd7c000e4449aac857646e720c6cb455c8ad20e2 (patch) | |
tree | c18e19b471e55de61d3ef7560c132cc06f0b83fa /engines | |
parent | e32237ecb438452b8b57f674a5d86e944aab5982 (diff) | |
download | scummvm-rg350-dd7c000e4449aac857646e720c6cb455c8ad20e2.tar.gz scummvm-rg350-dd7c000e4449aac857646e720c6cb455c8ad20e2.tar.bz2 scummvm-rg350-dd7c000e4449aac857646e720c6cb455c8ad20e2.zip |
SCI32: Hide the unavailable games in the Hoyle 5 derived collections
The derived collections include Hoyle Children's Collection and Hoyle
Bridge. Each collection includes a subset of the games in the full
version, Hoyle Classic Games
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sci/engine/script_patches.cpp | 188 |
1 files changed, 187 insertions, 1 deletions
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index a61c9b6322..bbe00be173 100644 --- a/engines/sci/engine/script_patches.cpp +++ b/engines/sci/engine/script_patches.cpp @@ -910,6 +910,150 @@ static const uint16 hoyle5PatchSpinLoop[] = { PATCH_END }; +// There are two derived collections of Hoyle Classic Games: +// 1) The Hoyle Children's Collection, which includes the following games: +// - Crazy Eights (script 100) +// - Old Maid (script 200) +// - Checkers (script 1200) +// 2) Hoyle Bridge, which includes the following games: +// - Bridge (script 700) +// In these two collections, the scripts for the other games have been removed. +// Choosing any other game than the above results in a "No script found" error. +// The original game did not show the game selection screen, as there were +// direct shortucts to each game. +// Since we do show the game selection screen, we remove all the games +// which from the ones below, which are not included in each version: +// - Crazy Eights (script 100) +// - Old Maid (script 200) +// - Hearts (script 300) +// - Gin Rummy (script 400) +// - Cribbage (script 500) +// - Klondike / Solitaire (script 600) +// - Bridge (script 700) +// - Poker (script 1100) +// - Checkers (script 1200) +// - Backgammon (script 1300) +static const uint16 hoyle5SignatureCrazyEights[] = { + SIG_MAGICDWORD, + 0x38, 0x8e, 0x00, // pushi 008e + 0x76, // push0 + 0x38, 0xf0, 0x02, // pushi 02f0 + 0x76, // push0 + 0x72, 0x9c, 0x01, // lofsa chooseCrazy8s + 0x4a, 0x08, 0x00, // send 0008 + SIG_END +}; + +static const uint16 hoyle5SignatureOldMaid[] = { + SIG_MAGICDWORD, + 0x38, 0x8e, 0x00, // pushi 008e + 0x76, // push0 + 0x38, 0xf0, 0x02, // pushi 02f0 + 0x76, // push0 + 0x72, 0x2c, 0x02, // lofsa chooseOldMaid + 0x4a, 0x08, 0x00, // send 0008 + SIG_END +}; + +static const uint16 hoyle5SignatureHearts[] = { + SIG_MAGICDWORD, + 0x38, 0x8e, 0x00, // pushi 008e + 0x76, // push0 + 0x38, 0xf0, 0x02, // pushi 02f0 + 0x76, // push0 + 0x72, 0xdc, 0x03, // lofsa chooseHearts + 0x4a, 0x08, 0x00, // send 0008 + SIG_END +}; + +static const uint16 hoyle5SignatureGinRummy[] = { + SIG_MAGICDWORD, + 0x38, 0x8e, 0x00, // pushi 008e + 0x76, // push0 + 0x38, 0xf0, 0x02, // pushi 02f0 + 0x76, // push0 + 0x72, 0xbc, 0x02, // lofsa chooseGinRummy + 0x4a, 0x08, 0x00, // send 0008 + SIG_END +}; + +static const uint16 hoyle5SignatureCribbage[] = { + SIG_MAGICDWORD, + 0x38, 0x8e, 0x00, // pushi 008e + 0x76, // push0 + 0x38, 0xf0, 0x02, // pushi 02f0 + 0x76, // push0 + 0x72, 0x4c, 0x03, // lofsa chooseCribbage + 0x4a, 0x08, 0x00, // send 0008 + SIG_END +}; + +static const uint16 hoyle5SignatureKlondike[] = { + SIG_MAGICDWORD, + 0x38, 0x8e, 0x00, // pushi 008e + 0x76, // push0 + 0x38, 0xf0, 0x02, // pushi 02f0 + 0x76, // push0 + 0x72, 0xfc, 0x04, // lofsa chooseKlondike + 0x4a, 0x08, 0x00, // send 0008 + SIG_END +}; + +static const uint16 hoyle5SignatureBridge[] = { + SIG_MAGICDWORD, + 0x38, 0x8e, 0x00, // pushi 008e + 0x76, // push0 + 0x38, 0xf0, 0x02, // pushi 02f0 + 0x76, // push0 + 0x72, 0x6c, 0x04, // lofsa chooseBridge + 0x4a, 0x08, 0x00, // send 0008 + SIG_END +}; + +static const uint16 hoyle5SignaturePoker[] = { + SIG_MAGICDWORD, + 0x38, 0x8e, 0x00, // pushi 008e + 0x76, // push0 + 0x38, 0xf0, 0x02, // pushi 02f0 + 0x76, // push0 + 0x72, 0x8c, 0x05, // lofsa choosePoker + 0x4a, 0x08, 0x00, // send 0008 + SIG_END +}; + +static const uint16 hoyle5SignatureCheckers[] = { + SIG_MAGICDWORD, + 0x38, 0x8e, 0x00, // pushi 008e + 0x76, // push0 + 0x38, 0xf0, 0x02, // pushi 02f0 + 0x76, // push0 + 0x72, 0x1c, 0x06, // lofsa chooseCheckers + 0x4a, 0x08, 0x00, // send 0008 + SIG_END +}; + +static const uint16 hoyle5SignatureBackgammon[] = { + SIG_MAGICDWORD, + 0x38, 0x8e, 0x00, // pushi 008e + 0x76, // push0 + 0x38, 0xf0, 0x02, // pushi 02f0 + 0x76, // push0 + 0x72, 0xac, 0x06, // lofsa chooseBackgammon + 0x4a, 0x08, 0x00, // send 0008 + SIG_END +}; + +static const uint16 hoyle5PatchDisableGame[] = { + 0x35, 0x00, // ldi 00 + 0x35, 0x00, // ldi 00 + 0x35, 0x00, // ldi 00 + 0x35, 0x00, // ldi 00 + 0x35, 0x00, // ldi 00 + 0x35, 0x00, // ldi 00 + 0x35, 0x00, // ldi 00 + PATCH_END +}; + // script, description, signature patch static const SciScriptPatcherEntry hoyle5Signatures[] = { { true, 3, "remove kGetTime spin", 1, hoyle5SignatureSpinLoop, hoyle5PatchSpinLoop }, @@ -919,6 +1063,40 @@ static const SciScriptPatcherEntry hoyle5Signatures[] = { SCI_SIGNATUREENTRY_TERMINATOR }; +// script, description, signature patch +static const SciScriptPatcherEntry hoyle5ChildrensCollectionSignatures[] = { + { true, 3, "remove kGetTime spin", 1, hoyle5SignatureSpinLoop, hoyle5PatchSpinLoop }, + { true, 23, "remove kGetTime spin", 1, hoyle5SignatureSpinLoop, hoyle5PatchSpinLoop }, + { true, 500, "remove kGetTime spin", 1, hoyle5SignatureSpinLoop, hoyle5PatchSpinLoop }, + { true, 64937, "remove kGetTime spin", 1, hoyle5SignatureSpinLoop, hoyle5PatchSpinLoop }, + { true, 975, "disable Gin Rummy", 1, hoyle5SignatureGinRummy, hoyle5PatchDisableGame }, + { true, 975, "disable Cribbage", 1, hoyle5SignatureCribbage, hoyle5PatchDisableGame }, + { true, 975, "disable Klondike", 1, hoyle5SignatureKlondike, hoyle5PatchDisableGame }, + { true, 975, "disable Bridge", 1, hoyle5SignatureBridge, hoyle5PatchDisableGame }, + { true, 975, "disable Poker", 1, hoyle5SignaturePoker, hoyle5PatchDisableGame }, + { true, 975, "disable Hearts", 1, hoyle5SignatureHearts, hoyle5PatchDisableGame }, + { true, 975, "disable Backgammon", 1, hoyle5SignatureBackgammon, hoyle5PatchDisableGame }, + SCI_SIGNATUREENTRY_TERMINATOR +}; + +// script, description, signature patch +static const SciScriptPatcherEntry hoyle5BridgeSignatures[] = { + { true, 3, "remove kGetTime spin", 1, hoyle5SignatureSpinLoop, hoyle5PatchSpinLoop }, + { true, 23, "remove kGetTime spin", 1, hoyle5SignatureSpinLoop, hoyle5PatchSpinLoop }, + { true, 500, "remove kGetTime spin", 1, hoyle5SignatureSpinLoop, hoyle5PatchSpinLoop }, + { true, 64937, "remove kGetTime spin", 1, hoyle5SignatureSpinLoop, hoyle5PatchSpinLoop }, + { true, 975, "disable Gin Rummy", 1, hoyle5SignatureGinRummy, hoyle5PatchDisableGame }, + { true, 975, "disable Cribbage", 1, hoyle5SignatureCribbage, hoyle5PatchDisableGame }, + { true, 975, "disable Klondike", 1, hoyle5SignatureKlondike, hoyle5PatchDisableGame }, + { true, 975, "disable Poker", 1, hoyle5SignaturePoker, hoyle5PatchDisableGame }, + { true, 975, "disable Hearts", 1, hoyle5SignatureHearts, hoyle5PatchDisableGame }, + { true, 975, "disable Backgammon", 1, hoyle5SignatureBackgammon, hoyle5PatchDisableGame }, + { true, 975, "disable Crazy Eights", 1, hoyle5SignatureCrazyEights, hoyle5PatchDisableGame }, + { true, 975, "disable Old Maid", 1, hoyle5SignatureOldMaid, hoyle5PatchDisableGame }, + { true, 975, "disable Checkers", 1, hoyle5SignatureCheckers, hoyle5PatchDisableGame }, + SCI_SIGNATUREENTRY_TERMINATOR +}; + #pragma mark - #pragma mark Gabriel Knight 1 @@ -7647,7 +7825,15 @@ void ScriptPatcher::processScript(uint16 scriptNr, SciSpan<byte> scriptData) { break; #ifdef ENABLE_SCI32 case GID_HOYLE5: - signatureTable = hoyle5Signatures; + if (g_sci->getResMan()->testResource(ResourceId(kResourceTypeScript, 100)) && + g_sci->getResMan()->testResource(ResourceId(kResourceTypeScript, 700))) + signatureTable = hoyle5Signatures; + else if (g_sci->getResMan()->testResource(ResourceId(kResourceTypeScript, 100)) && + !g_sci->getResMan()->testResource(ResourceId(kResourceTypeScript, 700))) + signatureTable = hoyle5ChildrensCollectionSignatures; + else if (!g_sci->getResMan()->testResource(ResourceId(kResourceTypeScript, 100)) && + g_sci->getResMan()->testResource(ResourceId(kResourceTypeScript, 700))) + signatureTable = hoyle5BridgeSignatures; break; case GID_GK1: signatureTable = gk1Signatures; |