diff --git a/engines/scumm/script_v4.cpp b/engines/scumm/script_v4.cpp
index 1302c8c..6d54456 100644
a
|
b
|
void ScummEngine_v4::o4_ifState() {
|
68 | 68 | int a = getVarOrDirectWord(PARAM_1); |
69 | 69 | int b = getVarOrDirectByte(PARAM_2); |
70 | 70 | |
| 71 | // WORKAROUND bug #3306145 (also occurs in original): Some old versions of |
| 72 | // Indy3 sometimes fail to allocate IQ points correctly. To quote: |
| 73 | // "About the points error leaving Castle Brunwald: It seems to "reversed"! |
| 74 | // When you get caught, free yourself and escape, you get 25 IQ points even |
| 75 | // though you're not supposed to. However if you escape WITHOUT getting |
| 76 | // caught, you get 0 IQ points (supposed to get 25 IQ points)." |
| 77 | // This workaround is meant to address that. |
| 78 | if (_game.id == GID_INDY3 && a == 367 && |
| 79 | vm.slot[_currentScript].number == 363 && _currentRoom == 25) { |
| 80 | debug("Workaround A active (b=%d)", b); |
| 81 | b = 0; |
| 82 | } |
| 83 | |
71 | 84 | jumpRelative(getState(a) == b); |
72 | 85 | } |
73 | 86 | |
diff --git a/engines/scumm/script_v5.cpp b/engines/scumm/script_v5.cpp
index a6cf504..a882f4f 100644
a
|
b
|
void ScummEngine_v5::o5_startScript() {
|
2095 | 2095 | if (_game.id == GID_ZAK && _game.platform == Common::kPlatformFMTowns && script == 171) |
2096 | 2096 | return; |
2097 | 2097 | |
| 2098 | // WORKAROUND bug #3306145 (also occurs in original): Some old versions of |
| 2099 | // Indy3 sometimes fail to allocate IQ points correctly. To quote: |
| 2100 | // "In the Amiga version you get the 15 points for puzzle 30 if you give the |
| 2101 | // book or KO the guy. The PC version correctly gives 10 points for puzzle |
| 2102 | // 29 for KO and 15 for puzzle 30 when giving the book." |
| 2103 | // This workaround is meant to address that. |
| 2104 | if (_game.id == GID_INDY3 && vm.slot[_currentScript].number == 106 && script == 125 && VAR(115) != 2) { |
| 2105 | // If Var[115] != 2, then: |
| 2106 | // Correct: startScript(125,[29,10]); |
| 2107 | // Wrong : startScript(125,[30,15]); |
| 2108 | debug("Workaround B active (%d,%d)", data[0], data[1]); |
| 2109 | data[0] = 29; |
| 2110 | data[1] = 10; |
| 2111 | } |
| 2112 | |
2098 | 2113 | // Method used by original games to skip copy protection scheme |
2099 | 2114 | if (!_copyProtection) { |
2100 | 2115 | // Copy protection was disabled in LucasArts Classic Adventures (PC Disk) |