SCUMM: Fix bug #3306145: INDY3: EGA version script bugs
Based on a patch presented in the bugreport. Fixes several bugs connected with calcualting IQ points in Amiga versions of Indy3.
This commit is contained in:
parent
648d127cca
commit
10536e285c
2 changed files with 26 additions and 0 deletions
|
@ -68,6 +68,18 @@ void ScummEngine_v4::o4_ifState() {
|
||||||
int a = getVarOrDirectWord(PARAM_1);
|
int a = getVarOrDirectWord(PARAM_1);
|
||||||
int b = getVarOrDirectByte(PARAM_2);
|
int b = getVarOrDirectByte(PARAM_2);
|
||||||
|
|
||||||
|
// WORKAROUND bug #3306145 (also occurs in original): Some old versions of
|
||||||
|
// Indy3 sometimes fail to allocate IQ points correctly. To quote:
|
||||||
|
// "About the points error leaving Castle Brunwald: It seems to "reversed"!
|
||||||
|
// When you get caught, free yourself and escape, you get 25 IQ points even
|
||||||
|
// though you're not supposed to. However if you escape WITHOUT getting
|
||||||
|
// caught, you get 0 IQ points (supposed to get 25 IQ points)."
|
||||||
|
// This workaround is meant to address that.
|
||||||
|
if (_game.id == GID_INDY3 && a == 367 &&
|
||||||
|
vm.slot[_currentScript].number == 363 && _currentRoom == 25) {
|
||||||
|
b = 0;
|
||||||
|
}
|
||||||
|
|
||||||
jumpRelative(getState(a) == b);
|
jumpRelative(getState(a) == b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2095,6 +2095,20 @@ void ScummEngine_v5::o5_startScript() {
|
||||||
if (_game.id == GID_ZAK && _game.platform == Common::kPlatformFMTowns && script == 171)
|
if (_game.id == GID_ZAK && _game.platform == Common::kPlatformFMTowns && script == 171)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// WORKAROUND bug #3306145 (also occurs in original): Some old versions of
|
||||||
|
// Indy3 sometimes fail to allocate IQ points correctly. To quote:
|
||||||
|
// "In the Amiga version you get the 15 points for puzzle 30 if you give the
|
||||||
|
// book or KO the guy. The PC version correctly gives 10 points for puzzle
|
||||||
|
// 29 for KO and 15 for puzzle 30 when giving the book."
|
||||||
|
// This workaround is meant to address that.
|
||||||
|
if (_game.id == GID_INDY3 && vm.slot[_currentScript].number == 106 && script == 125 && VAR(115) != 2) {
|
||||||
|
// If Var[115] != 2, then:
|
||||||
|
// Correct: startScript(125,[29,10]);
|
||||||
|
// Wrong : startScript(125,[30,15]);
|
||||||
|
data[0] = 29;
|
||||||
|
data[1] = 10;
|
||||||
|
}
|
||||||
|
|
||||||
// Method used by original games to skip copy protection scheme
|
// Method used by original games to skip copy protection scheme
|
||||||
if (!_copyProtection) {
|
if (!_copyProtection) {
|
||||||
// Copy protection was disabled in LucasArts Classic Adventures (PC Disk)
|
// Copy protection was disabled in LucasArts Classic Adventures (PC Disk)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue