diff options
| author | David Fioramonti | 2017-09-15 18:17:43 -0700 | 
|---|---|---|
| committer | Colin Snover | 2017-09-15 23:44:13 -0500 | 
| commit | 817c9e77aa6f2c40571e807888bace46b08d0142 (patch) | |
| tree | 5d7fff5b9f24f47e79137a29534af6871dac77b9 | |
| parent | 45cadfd9fbb25d28a7ff96a719f259f20499a93e (diff) | |
| download | scummvm-rg350-817c9e77aa6f2c40571e807888bace46b08d0142.tar.gz scummvm-rg350-817c9e77aa6f2c40571e807888bace46b08d0142.tar.bz2 scummvm-rg350-817c9e77aa6f2c40571e807888bace46b08d0142.zip | |
SCI32: Fix bad play call in Shivers room 23090
This fixes a bad play call by replacing it with a fade call.
The newRoom function In script rm23v090 (room 23090) was
calling a play function with 5 arguments, but the play
function only takes 4 arguments. Since it looks like a fade
call it has been replaced with that.
Fixes Trac#10200.
snover helped.
| -rw-r--r-- | engines/sci/engine/script_patches.cpp | 27 | 
1 files changed, 27 insertions, 0 deletions
| diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index 22006575c6..018b4089aa 100644 --- a/engines/sci/engine/script_patches.cpp +++ b/engines/sci/engine/script_patches.cpp @@ -115,6 +115,8 @@ static const char *const selectorNameTable[] = {  	"posn",         // SCI2 benchmarking script  	"detailLevel",  // GK2 benchmarking  	"view",         // RAMA benchmarking +	"fade",         // Shivers sound fix +	"play",         // Shivers sound fix  	"test",         // Torin  	"get",          // Torin  	"set",          // Torin @@ -166,6 +168,8 @@ enum ScriptPatcherSelectors {  	SELECTOR_posn,  	SELECTOR_detailLevel,  	SELECTOR_view, +	SELECTOR_fade, +	SELECTOR_play,  	SELECTOR_test,  	SELECTOR_get,  	SELECTOR_set, @@ -6193,11 +6197,34 @@ static const uint16 shiversPatchSuperCall[] = {  	PATCH_END  }; +// When the Ixupi is present in the Gods and Items intro room, the game tries to +// play a sound using the play selector, but its arguments are only appropriate +// for the fade selector. +// If the badly constructed sound object from this call ends up receiving a +// signal at any time in the future, the game will try to send to a number and +// crash (because the third argument to play is supposed to be a client object, +// but here it is a number instead). Other rooms make this same call with the +// correct fade selector, so fix the selector here to match. +// Applies to at least: English CD +static const uint16 shiversGodsItemsIxupiPlaySoundSignature[] = { +	SIG_MAGICDWORD, +	0x39, SIG_SELECTOR8(play),     // pushi 33 +	0x38, SIG_UINT16(0x06),        // pushi 0006 +	SIG_END +}; + +static const uint16 shiversGodsItemsIxupiPlaySoundPatch[] = { +	0x38, PATCH_SELECTOR16(fade),  // pushi 00f3 +	0x39, 0x06,                    // pushi 06 +	PATCH_END +}; +  //          script, description,                                      signature                        patch  static const SciScriptPatcherEntry shiversSignatures[] = {  	{  true, 35170, "fix CCTV joystick interaction",               1, shiversSignatureSuperCall,     shiversPatchSuperCall },  	{  true,   990, "fix volume & brightness sliders",             2, shiversSignatureSuperCall,     shiversPatchSuperCall },  	{  true, 64908, "disable video benchmarking",                  1, sci2BenchmarkSignature,        sci2BenchmarkPatch }, +	{  true, 23090, "fix play call in room 23090",                 1, shiversGodsItemsIxupiPlaySoundSignature, shiversGodsItemsIxupiPlaySoundPatch },  	SCI_SIGNATUREENTRY_TERMINATOR  }; | 
