SCI: Add script patch for Freddy Pharkas intro scaling
Fixes game title views not shown while they are scaled in.
This commit is contained in:
parent
3e7e53d344
commit
8da595366b
1 changed files with 52 additions and 0 deletions
|
@ -408,6 +408,57 @@ static const SciScriptPatcherEntry fanmadeSignatures[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
|
// WORKAROUND
|
||||||
|
// Freddy Pharkas intro screen
|
||||||
|
// Sierra used inner loops for the scaling of the 2 title views.
|
||||||
|
// Those inner loops don't call kGameIsRestarting, which is why
|
||||||
|
// we do not update the screen and we also do not throttle.
|
||||||
|
//
|
||||||
|
// This patch fixes this and makes it work.
|
||||||
|
// Applies to at least: English PC-CD
|
||||||
|
// Responsible method: sTownScript::changeState(1), sTownScript::changeState(3) (script 110)
|
||||||
|
static const uint16 freddypharkasSignatureIntroScaling[] = {
|
||||||
|
0x38, SIG_UINT16(0x009b), // pushi 009b (setLoop)
|
||||||
|
0x78, // push1
|
||||||
|
PATCH_ADDTOOFFSET(1), // push0 for first code, push1 for second code
|
||||||
|
0x38, SIG_UINT16(0x0143), // pushi 0143 (setStep)
|
||||||
|
0x7a, // push2
|
||||||
|
0x39, 0x05, // pushi 05
|
||||||
|
0x3c, // dup
|
||||||
|
0x72, SIG_ADDTOOFFSET(+2), // lofsa (view)
|
||||||
|
SIG_MAGICDWORD,
|
||||||
|
0x4a, 0x1e, // send 1e
|
||||||
|
0x35, 0x0a, // ldi 0a
|
||||||
|
0xa3, 0x02, // sal local[2]
|
||||||
|
// start of inner loop
|
||||||
|
0x8b, 0x02, // lsl local[2]
|
||||||
|
SIG_ADDTOOFFSET(+43), // skip almost all of inner loop
|
||||||
|
0xa3, 0x02, // sal local[2]
|
||||||
|
0x33, 0xcf, // jmp [inner loop start]
|
||||||
|
SIG_END
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint16 freddypharkasPatchIntroScaling[] = {
|
||||||
|
// remove setLoop(), objects in heap are already prepared, saves 5 bytes
|
||||||
|
0x38, PATCH_UINT16(0x0143), // pushi 0143 (setStep)
|
||||||
|
0x7a, // push2
|
||||||
|
0x39, 0x05, // pushi 05
|
||||||
|
0x3c, // dup
|
||||||
|
0x72,
|
||||||
|
PATCH_GETORIGINALBYTE(+13),
|
||||||
|
PATCH_GETORIGINALBYTE(+14), // lofsa (view)
|
||||||
|
0x4a, 0x18, // send 18 - adjusted
|
||||||
|
0x35, 0x0a, // ldi 0a
|
||||||
|
0xa3, 0x02, // sal local[2]
|
||||||
|
// start of new inner loop
|
||||||
|
0x39, 0x00, // pushi 00
|
||||||
|
0x43, 0x2c, 0x00, // callk GameIsRestarting <-- add this so that our speed throttler is triggered
|
||||||
|
SIG_ADDTOOFFSET(+47), // skip almost all of inner loop
|
||||||
|
0x33, 0xca, // jmp [inner loop start]
|
||||||
|
PATCH_END
|
||||||
|
};
|
||||||
|
|
||||||
// script 0 of freddy pharkas/CD PointsSound::check waits for a signal and if
|
// script 0 of freddy pharkas/CD PointsSound::check waits for a signal and if
|
||||||
// no signal received will call kDoSound(0xD) which is a dummy in sierra sci
|
// no signal received will call kDoSound(0xD) which is a dummy in sierra sci
|
||||||
// and ScummVM and will use acc (which is not set by the dummy) to trigger
|
// and ScummVM and will use acc (which is not set by the dummy) to trigger
|
||||||
|
@ -526,6 +577,7 @@ static const uint16 freddypharkasPatchMacInventory[] = {
|
||||||
static const SciScriptPatcherEntry freddypharkasSignatures[] = {
|
static const SciScriptPatcherEntry freddypharkasSignatures[] = {
|
||||||
{ true, 0, "CD: score early disposal", 1, freddypharkasSignatureScoreDisposal, freddypharkasPatchScoreDisposal },
|
{ true, 0, "CD: score early disposal", 1, freddypharkasSignatureScoreDisposal, freddypharkasPatchScoreDisposal },
|
||||||
{ true, 15, "Mac: broken inventory", 1, freddypharkasSignatureMacInventory, freddypharkasPatchMacInventory },
|
{ true, 15, "Mac: broken inventory", 1, freddypharkasSignatureMacInventory, freddypharkasPatchMacInventory },
|
||||||
|
{ true, 110, "intro scaling workaround", 2, freddypharkasSignatureIntroScaling, freddypharkasPatchIntroScaling },
|
||||||
{ true, 235, "CD: canister pickup hang", 3, freddypharkasSignatureCanisterHang, freddypharkasPatchCanisterHang },
|
{ true, 235, "CD: canister pickup hang", 3, freddypharkasSignatureCanisterHang, freddypharkasPatchCanisterHang },
|
||||||
{ true, 320, "ladder event issue", 2, freddypharkasSignatureLadderEvent, freddypharkasPatchLadderEvent },
|
{ true, 320, "ladder event issue", 2, freddypharkasSignatureLadderEvent, freddypharkasPatchLadderEvent },
|
||||||
SCI_SIGNATUREENTRY_TERMINATOR
|
SCI_SIGNATUREENTRY_TERMINATOR
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue