mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-13 21:20:58 +00:00
SCI: sq4cd scriptpatch clothes change points #6866
script patch, so that points are awarded, when changing back clothes. You have to clean out the bank account again, because that's the problematic script. Also happened in original interpreter. Only happened for Space Quest 4 CD worked in floppy
This commit is contained in:
parent
158f491b44
commit
f0ccd3f91a
@ -2775,9 +2775,64 @@ static const uint16 sq4CdSignatureWalkInFromBelowRoom45[] = {
|
||||
|
||||
static const uint16 sq4CdPatchWalkInFromBelowRoom45[] = {
|
||||
PATCH_ADDTOOFFSET(+2),
|
||||
0x38, PATCH_UINT16(0x00bc), // pushi 00BCh
|
||||
0x38, PATCH_UINT16(0x00bc), // pushi 00BCh
|
||||
PATCH_ADDTOOFFSET(+15),
|
||||
0x38, PATCH_UINT16(0x00bb), // pushi 00BBh
|
||||
0x38, PATCH_UINT16(0x00bb), // pushi 00BBh
|
||||
PATCH_END
|
||||
};
|
||||
|
||||
// It seems that Sierra forgot to set a script flag, when cleaning out the bank account
|
||||
// in Space Quest 4 CD. This was probably caused by the whole bank account interaction
|
||||
// getting a rewrite and polish in the CD version.
|
||||
//
|
||||
// Because of this bug, points for changing back clothes will not get awarded, which
|
||||
// makes it impossible to get a perfect point score in the CD version of the game.
|
||||
// The points are awarded by rm371::doit in script 371.
|
||||
//
|
||||
// We fix this. Bug also happened, when using the original interpreter.
|
||||
// Bug does not happen for PC floppy.
|
||||
//
|
||||
// Attention: Some Let's Plays on youtube show that points are in fact awarded. Which is true.
|
||||
// But those Let's Plays were actually created by playing a hacked Space Quest 4 version
|
||||
// (which is part Floppy, part CD version - we consider it to be effectively pirated)
|
||||
// and not the actual CD version of Space Quest 4.
|
||||
// It's easy to identify - talkie + store called "Radio Shack" -> is hacked version.
|
||||
//
|
||||
// Applies to at least: English PC CD
|
||||
// Responsible method: but2Script::changeState(2)
|
||||
// Fixes bug: #6866
|
||||
static const uint16 sq4CdSignatureGetPointsForChangingBackClothes[] = {
|
||||
0x35, 0x02, // ldi 02
|
||||
SIG_MAGICDWORD,
|
||||
0x1a, // eq?
|
||||
0x30, SIG_UINT16(0x006a), // bnt [state 3]
|
||||
0x76,
|
||||
SIG_ADDTOOFFSET(+46), // jump over "withdraw funds" code
|
||||
0x33, 0x33, // jmp [end of state 2, set cycles code]
|
||||
SIG_ADDTOOFFSET(+51), // jump over "clean bank account" code
|
||||
0x35, 0x02, // ldi 02
|
||||
0x65, 0x1a, // aTop cycles
|
||||
0x33, 0x0b, // jmp [toss/ret]
|
||||
0x3c, // dup
|
||||
0x35, 0x03, // ldi 03
|
||||
0x1a, // eq?
|
||||
0x31, 0x05, // bnt [toss/ret]
|
||||
SIG_END
|
||||
};
|
||||
|
||||
static const uint16 sq4CdPatchGetPointsForChangingBackClothes[] = {
|
||||
PATCH_ADDTOOFFSET(+3),
|
||||
0x30, PATCH_UINT16(0x0070), // bnt [state 3]
|
||||
PATCH_ADDTOOFFSET(+47), // "withdraw funds" code
|
||||
0x33, 0x39, // jmp [end of state 2, set cycles code]
|
||||
PATCH_ADDTOOFFSET(+51),
|
||||
0x78, // push1
|
||||
0x39, 0x1d, // ldi 1Dh
|
||||
0x45, 0x07, 0x02, // call export 7 of script 0 (set flag) -> effectively sets global 73h, bit 2
|
||||
0x35, 0x02, // ldi 02
|
||||
0x65, 0x1c, // aTop cycles
|
||||
0x33, 0x05, // jmp [toss/ret]
|
||||
// check for state 3 code removed to save 6 bytes
|
||||
PATCH_END
|
||||
};
|
||||
|
||||
@ -2876,6 +2931,7 @@ static const SciScriptPatcherEntry sq4Signatures[] = {
|
||||
{ true, 298, "Floppy: endless flight", 1, sq4FloppySignatureEndlessFlight, sq4FloppyPatchEndlessFlight },
|
||||
{ true, 700, "Floppy: throw stuff at sequel police bug", 1, sq4FloppySignatureThrowStuffAtSequelPoliceBug, sq4FloppyPatchThrowStuffAtSequelPoliceBug },
|
||||
{ true, 45, "CD: walk in from below for room 45 fix", 1, sq4CdSignatureWalkInFromBelowRoom45, sq4CdPatchWalkInFromBelowRoom45 },
|
||||
{ true, 396, "CD: get points for changing back clothes fix",1, sq4CdSignatureGetPointsForChangingBackClothes, sq4CdPatchGetPointsForChangingBackClothes },
|
||||
{ true, 0, "CD: Babble icon speech and subtitles fix", 1, sq4CdSignatureBabbleIcon, sq4CdPatchBabbleIcon },
|
||||
{ true, 818, "CD: Speech and subtitles option", 1, sq4CdSignatureTextOptions, sq4CdPatchTextOptions },
|
||||
{ true, 818, "CD: Speech and subtitles option button", 1, sq4CdSignatureTextOptionsButton, sq4CdPatchTextOptionsButton },
|
||||
|
Loading…
x
Reference in New Issue
Block a user