aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorsluicebox2019-11-01 08:17:41 -0700
committersluicebox2019-11-01 08:17:41 -0700
commit0369e3b8caf1345e792059c0b5f310245e0cbb42 (patch)
tree6a4647d311911f480c55472b6141b4128b12c049 /engines
parentd5e8e44e9102227d6cf1fc047c3078f569042577 (diff)
downloadscummvm-rg350-0369e3b8caf1345e792059c0b5f310245e0cbb42.tar.gz
scummvm-rg350-0369e3b8caf1345e792059c0b5f310245e0cbb42.tar.bz2
scummvm-rg350-0369e3b8caf1345e792059c0b5f310245e0cbb42.zip
SCI: Fix PQ1VGA bugs outside Carol's coffee shop
Fixes bug: #5826
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/engine/script_patches.cpp48
1 files changed, 46 insertions, 2 deletions
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp
index 0f3f126e66..1c5a7a2734 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -108,6 +108,7 @@ static const char *const selectorNameTable[] = {
"localize", // Freddy Pharkas
"roomFlags", // Iceman
"put", // Police Quest 1 VGA
+ "approachVerbs", // Police Quest 1 VGA, QFG4
"newRoom", // Police Quest 3, GK1
"changeState", // Quest For Glory 1 VGA, QFG4
"hide", // Quest For Glory 1 VGA, QFG4
@@ -178,7 +179,6 @@ static const char *const selectorNameTable[] = {
"getSubscriberObj", // RAMA
"advanceCurIcon", // QFG4
"amount", // QFG4
- "approachVerbs", // QFG4
"claimed", // QFG4
"cue", // QFG4
"getCursor", // QFG4
@@ -222,6 +222,7 @@ enum ScriptPatcherSelectors {
SELECTOR_localize,
SELECTOR_roomFlags,
SELECTOR_put,
+ SELECTOR_approachVerbs,
SELECTOR_newRoom,
SELECTOR_changeState,
SELECTOR_hide,
@@ -293,7 +294,6 @@ enum ScriptPatcherSelectors {
SELECTOR_getSubscriberObj,
SELECTOR_advanceCurIcon,
SELECTOR_amount,
- SELECTOR_approachVerbs,
SELECTOR_claimed,
SELECTOR_cue,
SELECTOR_getCursor,
@@ -8119,8 +8119,52 @@ static const uint16 pq1vgaPatchMapSaveRestoreBug[] = {
PATCH_END
};
+// In the first release of PQ1VGA, looking at objects while sitting in the car
+// outside of Carol's breaks the game. The objects set Look as an approachVerb,
+// causing ego to float towards them without leaving the car and initializing.
+//
+// We fix this as Sierra did by removing Look from all approachVerbs in room 30.
+//
+// Applies to: English Floppy without 30.HEP and 30.SCR
+// Responsible methods: door:init, harleys:init, willySign:init, carolSign:init,
+// carolWindow:init, weeds:init, alley:init, mat:init
+// Fixes bug: #5826
+static const uint16 pq1vgaSignatureFloatOutsideCarols1[] = {
+ 0x38, SIG_SELECTOR16(approachVerbs), // pushi approachVerbs
+ SIG_MAGICDWORD,
+ 0x78, // push1
+ 0x78, // push1
+ 0x54, 0x06, // self 06 [ self approachVerbs: 1 ]
+ SIG_END
+};
+
+static const uint16 pq1vgaPatchFloatOutsideCarols1[] = {
+ 0x32, PATCH_UINT16(0x0004), // jmp 0004 [ don't set approachVerbs ]
+ PATCH_END
+};
+
+static const uint16 pq1vgaSignatureFloatOutsideCarols2[] = {
+ 0x38, SIG_SELECTOR16(approachVerbs), // pushi approachVerbs
+ SIG_MAGICDWORD,
+ 0x7a, // push2
+ 0x78, // push1
+ 0x39, 0x04, // pushi 04
+ 0x54, 0x08, // self 08 [ self approachVerbs: 1 4 ]
+ SIG_END
+};
+
+static const uint16 pq1vgaPatchFloatOutsideCarols2[] = {
+ PATCH_ADDTOOFFSET(+3),
+ 0x39, 0x01, // pushi 01
+ PATCH_ADDTOOFFSET(+2),
+ 0x54, 0x06, // self 06 [ self approachVerbs: 4 ]
+ PATCH_END
+};
+
// script, description, signature patch
static const SciScriptPatcherEntry pq1vgaSignatures[] = {
+ { true, 30, "float outside carol's (1/2)", 7, pq1vgaSignatureFloatOutsideCarols1, pq1vgaPatchFloatOutsideCarols1 },
+ { true, 30, "float outside carol's (2/2)", 1, pq1vgaSignatureFloatOutsideCarols2, pq1vgaPatchFloatOutsideCarols2 },
{ true, 152, "getting stuck while briefing is about to start", 1, pq1vgaSignatureBriefingGettingStuck, pq1vgaPatchBriefingGettingStuck },
{ true, 341, "put gun in locker bug", 1, pq1vgaSignaturePutGunInLockerBug, pq1vgaPatchPutGunInLockerBug },
{ true, 500, "map save/restore bug", 2, pq1vgaSignatureMapSaveRestoreBug, pq1vgaPatchMapSaveRestoreBug },