[Scummvm-git-logs] scummvm master -> c7c4eafa4978bd0433ae042c5703533f7b1a90fb
dwatteau
noreply at scummvm.org
Thu Aug 29 20:12:43 UTC 2024
This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
14a890cd78 SCUMM: Give a bit more details about the "lost" Monkey1-EGA DISK09.LEC patches
deab35bbbf SCUMM: Add a TODO for the Trac#2826 old workaround
b21a5e6c69 SCUMM: Add some TODOs for some original bugs to investigate with the original interpreters
7cb47c31f8 SCUMM: Add/update some enhancementEnabled() calls for some workarounds
c7c4eafa49 SCUMM: Add TODO comments for some Enhancements / original interpreter behaviors to explore
Commit: 14a890cd788a56cf99a9d92c8147b92319e79630
https://github.com/scummvm/scummvm/commit/14a890cd788a56cf99a9d92c8147b92319e79630
Author: Donovan Watteau (contrib at dwatteau.fr)
Date: 2024-08-29T22:02:45+02:00
Commit Message:
SCUMM: Give a bit more details about the "lost" Monkey1-EGA DISK09.LEC patches
Changed paths:
engines/scumm/resource_v4.cpp
diff --git a/engines/scumm/resource_v4.cpp b/engines/scumm/resource_v4.cpp
index 259b3fb10ba..748bf465ed1 100644
--- a/engines/scumm/resource_v4.cpp
+++ b/engines/scumm/resource_v4.cpp
@@ -48,8 +48,11 @@ int ScummEngine_v4::readResTypeList(ResType type) {
_res->_types[type][idx]._roomoffs = _fileHandle->readUint32LE();
}
- // WORKAROUND: The French floppy EGA had it own Roland MT-32 patch which is not available.
- // This allows using the official Roland MT-32 patch available from LucasArts along with any EGA version
+ // WORKAROUND: It seems that the French floppy EGA had its own Roland MT-32 patch, with
+ // a DISK09.LEC file different from the one still distributed by LucasFilm Games/Disney
+ // today. Unfortunately, if different patches existed back then, they appear to be lost.
+ //
+ // This allows using the official English Roland MT-32 patch along with any EGA version,
// by adjusting the sound directory offsets to match the available patch.
if (type == rtSound && _game.id == GID_MONKEY_EGA && _sound->_musicType == MDT_MIDI) {
Common::File rolandPatchFile;
Commit: deab35bbbf26fc4b7fa2a93cb29e740482cfd2de
https://github.com/scummvm/scummvm/commit/deab35bbbf26fc4b7fa2a93cb29e740482cfd2de
Author: Donovan Watteau (contrib at dwatteau.fr)
Date: 2024-08-29T22:02:45+02:00
Commit Message:
SCUMM: Add a TODO for the Trac#2826 old workaround
It's an old, known bug, but so far I haven't been able to locate an
original release (or interpreter?) showing this issue. Maybe only the
very first English releases had this issue?
Owning a copy of the release showing this bug would help understanding
what the original interpreters did there, and decide what Enhancement
class should be used for it.
Changed paths:
engines/scumm/script.cpp
diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp
index 318c00ef6c9..b73dc3a6aea 100644
--- a/engines/scumm/script.cpp
+++ b/engines/scumm/script.cpp
@@ -170,6 +170,11 @@ int ScummEngine::getVerbEntrypoint(int obj, int entry) {
// WORKAROUND for bug #2826: Disallow pulling the rope if it's
// already in the player's inventory.
+ //
+ // TODO: it would be nice to explore what the impacted original
+ // interpreter did in this case, and decide which Enhancement
+ // value we give to this, but so far, I couldn't locate an
+ // original release (interpreter?) showing this issue. -dwa
if (_game.id == GID_MONKEY2 && obj == 1047 && entry == 6 && whereIsObject(obj) == WIO_INVENTORY) {
return 0;
}
Commit: b21a5e6c691959acf093115f531a81ef67281cb6
https://github.com/scummvm/scummvm/commit/b21a5e6c691959acf093115f531a81ef67281cb6
Author: Donovan Watteau (contrib at dwatteau.fr)
Date: 2024-08-29T22:02:45+02:00
Commit Message:
SCUMM: Add some TODOs for some original bugs to investigate with the original interpreters
Changed paths:
engines/scumm/script.cpp
engines/scumm/script_v2.cpp
diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp
index b73dc3a6aea..0b859c5071c 100644
--- a/engines/scumm/script.cpp
+++ b/engines/scumm/script.cpp
@@ -1081,6 +1081,10 @@ void ScummEngine::killScriptsAndResources() {
// In FOA in the sentry room, in the chest plate of the statue,
// the pegs may be renamed to mouth: this custom name is lost
// when leaving the room; this hack prevents this).
+ //
+ // TODO: investigate this bug report from 2004, and see if the
+ // issue appears with an original interpreter, and with our current
+ // (much more accurate) SCUMMv5 implementation.
if (owner == OF_OWNER_ROOM && _game.id == GID_INDY4 && 336 <= obj && obj <= 340)
continue;
@@ -1594,6 +1598,10 @@ void ScummEngine::endCutscene() {
// WORKAROUND bug #5624: Due to poor translation of the v2 script to
// v5 an if statement jumps in the middle of a cutscene causing a
// endCutscene() without a begin cutscene()
+ //
+ // TODO: see what the original interpreter did when encountering this
+ // script bug (with UNZ, DREAMM or TOWNSEMU), and decide which
+ // Enhancement setting should be used in this case.
if (_game.id == GID_ZAK && _game.platform == Common::kPlatformFMTowns &&
vm.slot[_currentScript].number == 205 && _currentRoom == 185) {
return;
diff --git a/engines/scumm/script_v2.cpp b/engines/scumm/script_v2.cpp
index 30656b0455f..4af95b0871e 100644
--- a/engines/scumm/script_v2.cpp
+++ b/engines/scumm/script_v2.cpp
@@ -405,9 +405,9 @@ void ScummEngine_v2::decodeParseString() {
// So we add some extra spaces at the end of the string if it's too short; this
// unblocks the cutscene and also lets Sandy react as intended.
//
- // (Not using enhancementEnabled because some users could be really confused
+ // (Using `kEnhGameBreakingBugFixes`, because some users could be really confused
// by the game hanging and they may not know about the Esc key.)
- if (_game.id == GID_MANIAC && _game.platform != Common::kPlatformNES && _language == Common::FR_FRA && _currentScript != 0xFF && vm.slot [_currentScript].number == 155 && _roomResource == 31 && _actorToPrintStrFor == 9) {
+ if (_game.id == GID_MANIAC && _game.platform != Common::kPlatformNES && _language == Common::FR_FRA && _currentScript != 0xFF && vm.slot [_currentScript].number == 155 && _roomResource == 31 && _actorToPrintStrFor == 9 && enhancementEnabled(kEnhGameBreakingBugFixes)) {
while (ptr - buffer < 100) {
*ptr++ = ' ';
}
@@ -1089,7 +1089,7 @@ void ScummEngine_v2::o2_walkActorTo() {
// WORKAROUND bug #2110: crash when trying to fly back to San Francisco.
// walkActorTo() is called with an invalid actor number by script 115,
// after the room is loaded. The original DOS interpreter probably let
- // this slip by.
+ // this slip by (TODO: confirm this? and chose an Enhancement class).
if (_game.id == GID_ZAK && _game.version == 1 && vm.slot[_currentScript].number == 115 && act == 249) {
act = VAR(VAR_EGO);
}
Commit: 7cb47c31f824cfe4d2042f96ce7fffcf83c16586
https://github.com/scummvm/scummvm/commit/7cb47c31f824cfe4d2042f96ce7fffcf83c16586
Author: Donovan Watteau (contrib at dwatteau.fr)
Date: 2024-08-29T22:12:10+02:00
Commit Message:
SCUMM: Add/update some enhancementEnabled() calls for some workarounds
I reviewed what I was comfortable with; this change is not complete
(and I didn't review the HE workarounds at all), but it's still an
improvement.
I may need to update the Enhancement page on the wiki with these
changes...
Changed paths:
engines/scumm/room.cpp
engines/scumm/script_v5.cpp
engines/scumm/script_v6.cpp
engines/scumm/sound.cpp
diff --git a/engines/scumm/room.cpp b/engines/scumm/room.cpp
index ca8bca13ba5..170d4896764 100644
--- a/engines/scumm/room.cpp
+++ b/engines/scumm/room.cpp
@@ -486,10 +486,11 @@ void ScummEngine::setupRoomSubBlocks() {
// fact to fix the object class of obj 182. This should match what the
// 2016 remaster did.
//
- // Not using enhancementEnabled since leaving the room too quickly
+ // Using `kEnhGameBreakingBugFixes`, since leaving the room too quickly
// would just make this puzzle impossible to complete.
if (_game.id == GID_TENTACLE && _roomResource == 26 && readVar(0x8000 + 69)
- && getClass(182, kObjectClassUntouchable)) {
+ && getClass(182, kObjectClassUntouchable)
+ && enhancementEnabled(kEnhGameBreakingBugFixes)) {
putClass(182, kObjectClassUntouchable, 0);
}
diff --git a/engines/scumm/script_v5.cpp b/engines/scumm/script_v5.cpp
index 347a9db87a7..c944a4e9ada 100644
--- a/engines/scumm/script_v5.cpp
+++ b/engines/scumm/script_v5.cpp
@@ -1443,7 +1443,8 @@ void ScummEngine_v5::o5_isScriptRunning() {
// cutscenes and are abrubtly stopped by the endcutscene in script 204 at 0x0060.
// This patch changes the result of isScriptRunning(164) to also wait for any
// inventory scripts that are in a cutscene state, preventing the crash.
- if (_game.id == GID_MONKEY && _currentScript != 0xFF && vm.slot [_currentScript].number == 204 && _currentRoom == 25) {
+ if (_game.id == GID_MONKEY && _currentScript != 0xFF && vm.slot [_currentScript].number == 204 && _currentRoom == 25 &&
+ enhancementEnabled(kEnhGameBreakingBugFixes)) {
ScriptSlot *ss = vm.slot;
for (int i = 0; i < NUM_SCRIPT_SLOT; i++, ss++) {
if (ss->status != ssDead && ss->where == WIO_INVENTORY && ss->cutsceneOverride) {
@@ -1478,7 +1479,7 @@ void ScummEngine_v5::o5_ifClassOfIs() {
// Hostel door from the outside.
if (_game.id == GID_ZAK && _game.platform == Common::kPlatformFMTowns &&
vm.slot[_currentScript].number == 205 && _currentRoom == 185 &&
- obj == 465 && cls == 0) {
+ obj == 465 && cls == 0 && enhancementEnabled(kEnhGameBreakingBugFixes)) {
cond = (getState(obj) == 0);
} else {
b = getClass(obj, cls);
@@ -1600,11 +1601,11 @@ void ScummEngine_v5::o5_isLessEqual() {
// This is broken under UNZ too; the script does an incorrect signed
// comparison, possibly with the intent of checking for a gamepad.
//
- // Since the biplane is unplayable without this, we don't check for
- // enhancementEnabled, and always enable this fix.
+ // Since the biplane is unplayable without this, we use
+ // `kEnhGameBreakingBugFixes`.
if (_game.id == GID_INDY3 && (_game.platform == Common::kPlatformFMTowns) &&
(vm.slot[_currentScript].number == 200 || vm.slot[_currentScript].number == 203) &&
- _currentRoom == 70 && b == -256) {
+ _currentRoom == 70 && b == -256 && enhancementEnabled(kEnhGameBreakingBugFixes)) {
o5_jumpRelative();
return;
}
@@ -1705,7 +1706,8 @@ void ScummEngine_v5::o5_equalZero() {
// If the bit has been set, we simulate a WaitForMessage() instruction
// here, so that the script pauses until the "Wow!" message is gone.
- if (_game.id == GID_LOOM && _game.platform == Common::kPlatformPCEngine && vm.slot[_currentScript].number == 109) {
+ if (_game.id == GID_LOOM && _game.platform == Common::kPlatformPCEngine && vm.slot[_currentScript].number == 109 &&
+ enhancementEnabled(kEnhMinorBugFixes)) {
int var = fetchScriptWord();
a = readVar(var);
@@ -2526,9 +2528,9 @@ void ScummEngine_v5::o5_setObjectName() {
// Script 68 contains the code for handling the mugs. The issue occurs when a mug
// changes state. It will call setObjectName for the new state which in its turn
// restarts objects in inventory. Some objects (kidnap note) can be in a cutscene state
- // what causes a crash if the object gets restarted. This workaroud waits for cutscenes
+ // what causes a crash if the object gets restarted. This workaround waits for cutscenes
// to end, preventing the crash.
- if (_game.id == GID_MONKEY && vm.slot[_currentScript].number == 68) {
+ if (_game.id == GID_MONKEY && vm.slot[_currentScript].number == 68 && enhancementEnabled(kEnhGameBreakingBugFixes)) {
ScriptSlot *ss = vm.slot;
for (int i = 0; i < NUM_SCRIPT_SLOT; i++, ss++) {
if (ss->status != ssDead && ss->where == WIO_INVENTORY && ss->cutsceneOverride) {
@@ -2732,7 +2734,7 @@ void ScummEngine_v5::o5_startScript() {
// WORKAROUND bug #2198: Script 171 loads a complete room resource,
// instead of the actual script, causing invalid opcode cases
- if (_game.id == GID_ZAK && _game.platform == Common::kPlatformFMTowns && script == 171)
+ if (_game.id == GID_ZAK && _game.platform == Common::kPlatformFMTowns && script == 171 && enhancementEnabled(kEnhGameBreakingBugFixes))
return;
// WORKAROUND bug #5709 (also occurs in original): Some old versions of
@@ -3090,11 +3092,12 @@ void ScummEngine_v5::o5_walkActorTo() {
// This is because the box matrix is initialized too late in the entry
// script for that room, so we have to do it a bit earlier.
//
- // Intentionally not using enhancementEnabled, since you can get
+ // Intentionally using `kEnhGameBreakingBugFixes`, since you can get
// completely stuck.
if (_game.id == GID_INDY4 && _currentScript != 0xFF && vm.slot[_currentScript].number == 10002 &&
_currentRoom == (_game.platform == Common::kPlatformAmiga ? 58 : 60) &&
- VAR(224) == 140 && a->_number == VAR(VAR_EGO) && x == 45 && y == 137) {
+ VAR(224) == 140 && a->_number == VAR(VAR_EGO) && x == 45 && y == 137 &&
+ enhancementEnabled(kEnhGameBreakingBugFixes)) {
// If the elevator isn't on the current floor yet...
if (whereIsObject(829) == WIO_ROOM && getState(829) == 0 && getBoxFlags(7) != 128) {
// ...immediately set its box flags so that you can't walk on it
@@ -3403,6 +3406,7 @@ void ScummEngine_v5::decodeParseStringTextString(int textSlot) {
printString(textSlot, _scriptPointer);
}
} else if (_game.id == GID_MONKEY_EGA && _roomResource == 30 && _currentScript != 0xFF && vm.slot[_currentScript].number == 411 &&
+ enhancementEnabled(kEnhTextLocFixes) &&
strstr((const char *)_scriptPointer, "NCREDIT-NOTE-AMOUNT")) {
// WORKAROUND for bug #4886 (MI1EGA German: Credit text incorrect)
// The script contains buggy text.
@@ -3428,7 +3432,7 @@ void ScummEngine_v5::decodeParseStringTextString(int textSlot) {
_string[textSlot].color = (_game.platform == Common::kPlatformFMTowns) ? 0x0A : 0xF9;
printString(textSlot, _scriptPointer);
} else if (_game.id == GID_MONKEY && !(_game.features & GF_ULTIMATE_TALKIE) &&
- _game.platform != Common::kPlatformSegaCD && _currentScript != 0xFF &&
+ _game.platform != Common::kPlatformSegaCD && _currentScript != 0xFF &&
(vm.slot[_currentScript].number == 140 || vm.slot[_currentScript].number == 294) &&
_actorToPrintStrFor == 255 && _string[textSlot].color == 0x06 &&
enhancementEnabled(kEnhSubFmtCntChanges)) {
diff --git a/engines/scumm/script_v6.cpp b/engines/scumm/script_v6.cpp
index 9a7daea045d..561daa09af0 100644
--- a/engines/scumm/script_v6.cpp
+++ b/engines/scumm/script_v6.cpp
@@ -406,7 +406,8 @@ int ScummEngine_v6::readArray(int array, int idx, int base) {
// ...
// So it checks for invalid array indices only *after* using them to access
// the array. Ouch.
- if (_game.id == GID_FT && array == 447 && _currentRoom == 95 && vm.slot[_currentScript].number == 2010 && idx == -1 && base == -1) {
+ if (_game.id == GID_FT && array == 447 && _currentRoom == 95 && vm.slot[_currentScript].number == 2010 && idx == -1 && base == -1 &&
+ enhancementEnabled(kEnhGameBreakingBugFixes)) {
return 0;
}
@@ -1029,9 +1030,10 @@ void ScummEngine_v6::o6_jump() {
// This is a script bug, due to a missing jump in one segment of the script,
// and it also happens with the original interpreters.
//
- // Intentionally not using enhancementEnabled, since having the game hang
+ // Intentionally using `kEnhGameBreakingBugFixes`, since having the game hang
// is not useful to anyone.
- if (_game.id == GID_SAMNMAX && vm.slot[_currentScript].number == 101 && readVar(0x8000 + 97) == 1 && offset == 1) {
+ if (_game.id == GID_SAMNMAX && vm.slot[_currentScript].number == 101 && readVar(0x8000 + 97) == 1 && offset == 1 &&
+ enhancementEnabled(kEnhGameBreakingBugFixes)) {
offset = -18;
}
@@ -2696,10 +2698,12 @@ void ScummEngine_v6::o6_soundKludge() {
// slight bug causing it to busy-wait for a sound to finish. Even under
// the best of circumstances, this will cause the game to hang briefly.
// On platforms where threading is cooperative, it will cause the game
- // to hang indefinitely. We identify the buggy part of the script by
- // looking for a soundKludge() opcode immediately followed by a jump.
+ // to hang indefinitely (hence the use of `kEnhGameBreakingBugFixes`).
+ // We identify the buggy part of the script by looking for a
+ // soundKludge() opcode immediately followed by a jump.
- if (_game.id == GID_CMI && _roomResource == 11 && vm.slot[_currentScript].number == 2016 && *_scriptPointer == 0x66) {
+ if (_game.id == GID_CMI && _roomResource == 11 && vm.slot[_currentScript].number == 2016 && *_scriptPointer == 0x66 &&
+ enhancementEnabled(kEnhGameBreakingBugFixes)) {
debug(3, "Working around script bug in room-11-2016");
o6_breakHere();
}
diff --git a/engines/scumm/sound.cpp b/engines/scumm/sound.cpp
index 7c2baaa95b0..0487851f060 100644
--- a/engines/scumm/sound.cpp
+++ b/engines/scumm/sound.cpp
@@ -611,12 +611,6 @@ static int compareMP3OffsetTable(const void *a, const void *b) {
}
static Audio::AudioStream *checkForBrokenIndy4Sample(Common::SeekableReadStream *file, uint32 offset) {
- // WORKAROUND: Check for original Indy4 MONSTER.SOU bug
- // The speech sample at VCTL offset 0x76ccbca ("Hey you!") which is used
- // when Indy gets caught on the German submarine seems to not be a VOC
- // but raw PCM s16be at (this is a guess) 44.1 kHz with a bogus VOC header.
- // To work around this we skip the VOC header and decode the raw PCM data.
- // Fixes Trac#10559
byte vocHeader[32];
file->read(vocHeader, 32);
@@ -892,7 +886,16 @@ void Sound::startTalkSound(uint32 offset, uint32 length, int mode, Audio::SoundH
#endif
break;
default:
- if (mode == 2 && _vm->_game.id == GID_INDY4 && offset == 0x76ccbd4)
+ // WORKAROUND: Check for original Indy4 MONSTER.SOU bug
+ // The speech sample at VCTL offset 0x76ccbca ("Hey you!") which is used
+ // when Indy gets caught on the German submarine seems to not be a VOC
+ // but raw PCM s16be at (this is a guess) 44.1 kHz with a bogus VOC header.
+ // To work around this we skip the VOC header and decode the raw PCM data.
+ // Fixes Trac#10559
+ //
+ // We use `kEnhGameBreakingBugFixes` because the original bug causes some terrible
+ // harsh white noise which could damage one's ears when wearing headphones.
+ if (mode == 2 && _vm->_game.id == GID_INDY4 && offset == 0x76ccbd4 && _vm->enhancementEnabled(kEnhGameBreakingBugFixes))
input = checkForBrokenIndy4Sample(file.release(), offset);
if (!input) {
Commit: c7c4eafa4978bd0433ae042c5703533f7b1a90fb
https://github.com/scummvm/scummvm/commit/c7c4eafa4978bd0433ae042c5703533f7b1a90fb
Author: Donovan Watteau (contrib at dwatteau.fr)
Date: 2024-08-29T22:12:10+02:00
Commit Message:
SCUMM: Add TODO comments for some Enhancements / original interpreter behaviors to explore
Changed paths:
engines/scumm/script_v2.cpp
engines/scumm/script_v4.cpp
engines/scumm/script_v5.cpp
engines/scumm/script_v6.cpp
diff --git a/engines/scumm/script_v2.cpp b/engines/scumm/script_v2.cpp
index 4af95b0871e..186f007b443 100644
--- a/engines/scumm/script_v2.cpp
+++ b/engines/scumm/script_v2.cpp
@@ -1292,6 +1292,8 @@ void ScummEngine_v2::o2_putActorInRoom() {
// We don't touch the variable in the following situations
// If the Caponian is being put into the space ship room, or the current room is the
// space ship and the Caponian is being put into the backroom of the telephone company (you didnt show your fan club card)
+ //
+ // TODO: choose an Enhancement class for this
if (_game.id == GID_ZAK && _game.version <= 2 && act == 7) {
// Is script-96 cutscene done
if ((getState(344) & kObjectStateLocked)) {
diff --git a/engines/scumm/script_v4.cpp b/engines/scumm/script_v4.cpp
index ef1657b3578..078b159653b 100644
--- a/engines/scumm/script_v4.cpp
+++ b/engines/scumm/script_v4.cpp
@@ -74,6 +74,8 @@ void ScummEngine_v4::o4_ifState() {
// 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.
+ //
+ // TODO: choose an Enhancement class for this
if (_game.id == GID_INDY3 && a == 367 &&
vm.slot[_currentScript].number == 363 && _currentRoom == 25) {
b = 0;
diff --git a/engines/scumm/script_v5.cpp b/engines/scumm/script_v5.cpp
index c944a4e9ada..44a8bd036a6 100644
--- a/engines/scumm/script_v5.cpp
+++ b/engines/scumm/script_v5.cpp
@@ -1477,6 +1477,9 @@ void ScummEngine_v5::o5_ifClassOfIs() {
// used to test and set the state of various objects (e.g. the inside
// door (object 465) of the of the Hostel on Mars), when opening the
// Hostel door from the outside.
+ //
+ // TODO: check the behavior of the original interpreter against ours,
+ // in this particular case.
if (_game.id == GID_ZAK && _game.platform == Common::kPlatformFMTowns &&
vm.slot[_currentScript].number == 205 && _currentRoom == 185 &&
obj == 465 && cls == 0 && enhancementEnabled(kEnhGameBreakingBugFixes)) {
@@ -2530,6 +2533,8 @@ void ScummEngine_v5::o5_setObjectName() {
// restarts objects in inventory. Some objects (kidnap note) can be in a cutscene state
// what causes a crash if the object gets restarted. This workaround waits for cutscenes
// to end, preventing the crash.
+ //
+ // TODO: analyze the behavior of the original interpreter in this case.
if (_game.id == GID_MONKEY && vm.slot[_currentScript].number == 68 && enhancementEnabled(kEnhGameBreakingBugFixes)) {
ScriptSlot *ss = vm.slot;
for (int i = 0; i < NUM_SCRIPT_SLOT; i++, ss++) {
@@ -2734,6 +2739,8 @@ void ScummEngine_v5::o5_startScript() {
// WORKAROUND bug #2198: Script 171 loads a complete room resource,
// instead of the actual script, causing invalid opcode cases
+ //
+ // TODO: what does the original interpreter do in this case?
if (_game.id == GID_ZAK && _game.platform == Common::kPlatformFMTowns && script == 171 && enhancementEnabled(kEnhGameBreakingBugFixes))
return;
diff --git a/engines/scumm/script_v6.cpp b/engines/scumm/script_v6.cpp
index 561daa09af0..4e4fa89e896 100644
--- a/engines/scumm/script_v6.cpp
+++ b/engines/scumm/script_v6.cpp
@@ -406,6 +406,8 @@ int ScummEngine_v6::readArray(int array, int idx, int base) {
// ...
// So it checks for invalid array indices only *after* using them to access
// the array. Ouch.
+ //
+ // TODO: what did the original interpreter precisely do in this case?
if (_game.id == GID_FT && array == 447 && _currentRoom == 95 && vm.slot[_currentScript].number == 2010 && idx == -1 && base == -1 &&
enhancementEnabled(kEnhGameBreakingBugFixes)) {
return 0;
@@ -2671,6 +2673,8 @@ void ScummEngine_v6::o6_wait() {
//
// For now, if the value passed in is divisible by 45, assume it is an
// angle, and use _curActor as the actor to wait for.
+ //
+ // TODO: what did the original interpreter do in this case?
offs = fetchScriptWordSigned();
actnum = pop();
if (actnum % 45 == 0) {
More information about the Scummvm-git-logs
mailing list