aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/inter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/gob/inter.cpp')
-rw-r--r--engines/gob/inter.cpp35
1 files changed, 25 insertions, 10 deletions
diff --git a/engines/gob/inter.cpp b/engines/gob/inter.cpp
index f6e6d41100..8db42b217c 100644
--- a/engines/gob/inter.cpp
+++ b/engines/gob/inter.cpp
@@ -268,23 +268,23 @@ void Inter::funcBlock(int16 retFlag) {
int addr = _vm->_game->_script->pos();
if ((startaddr == 0x18B4 && addr == 0x1A7F && // Zombie, EGA
- !strncmp(_vm->_game->_curTotFile, "avt005.tot", 10)) ||
+ !scumm_stricmp(_vm->_game->_curTotFile, "avt005.tot")) ||
(startaddr == 0x188D && addr == 0x1A58 && // Zombie, Mac
- !strncmp(_vm->_game->_curTotFile, "avt005.tot", 10)) ||
+ !scumm_stricmp(_vm->_game->_curTotFile, "avt005.tot")) ||
(startaddr == 0x1299 && addr == 0x139A && // Dungeon
- !strncmp(_vm->_game->_curTotFile, "avt006.tot", 10)) ||
+ !scumm_stricmp(_vm->_game->_curTotFile, "avt006.tot")) ||
(startaddr == 0x11C0 && addr == 0x12C9 && // Cauldron, EGA
- !strncmp(_vm->_game->_curTotFile, "avt012.tot", 10)) ||
+ !scumm_stricmp(_vm->_game->_curTotFile, "avt012.tot")) ||
(startaddr == 0x11C8 && addr == 0x1341 && // Cauldron, Mac
- !strncmp(_vm->_game->_curTotFile, "avt012.tot", 10)) ||
+ !scumm_stricmp(_vm->_game->_curTotFile, "avt012.tot")) ||
(startaddr == 0x09F2 && addr == 0x0AF3 && // Statue
- !strncmp(_vm->_game->_curTotFile, "avt016.tot", 10)) ||
+ !scumm_stricmp(_vm->_game->_curTotFile, "avt016.tot")) ||
(startaddr == 0x0B92 && addr == 0x0C93 && // Castle
- !strncmp(_vm->_game->_curTotFile, "avt019.tot", 10)) ||
+ !scumm_stricmp(_vm->_game->_curTotFile, "avt019.tot")) ||
(startaddr == 0x17D9 && addr == 0x18DA && // Finale, EGA
- !strncmp(_vm->_game->_curTotFile, "avt022.tot", 10)) ||
+ !scumm_stricmp(_vm->_game->_curTotFile, "avt022.tot")) ||
(startaddr == 0x17E9 && addr == 0x19A8 && // Finale, Mac
- !strncmp(_vm->_game->_curTotFile, "avt022.tot", 10))) {
+ !scumm_stricmp(_vm->_game->_curTotFile, "avt022.tot"))) {
_vm->_util->longDelay(5000);
}
@@ -295,7 +295,7 @@ void Inter::funcBlock(int16 retFlag) {
// of Fascination have a too short delay between the storage room and the lab.
// We manually add it here.
if ((_vm->getGameType() == kGameTypeFascination) &&
- !strncmp(_vm->_game->_curTotFile, "PLANQUE.tot", 9)) {
+ !scumm_stricmp(_vm->_game->_curTotFile, "PLANQUE.tot")) {
int addr = _vm->_game->_script->pos();
if ((startaddr == 0x0202 && addr == 0x0330) || // Before Lab, Amiga & Atari, English
(startaddr == 0x023D && addr == 0x032D) || // Before Lab, PC floppy, German
@@ -306,6 +306,21 @@ void Inter::funcBlock(int16 retFlag) {
} // End of workaround
cmd = _vm->_game->_script->readByte();
+
+ // WORKAROUND:
+ // A VGA version has some broken code in its scripts, this workaround skips the corrupted parts.
+ if (_vm->getGameType() == kGameTypeFascination) {
+ int addr = _vm->_game->_script->pos();
+ if ((startaddr == 0x212D) && (addr == 0x290E) && (cmd == 0x90) && !scumm_stricmp(_vm->_game->_curTotFile, "INTRO1.tot")) {
+ _vm->_game->_script->skip(2);
+ cmd = _vm->_game->_script->readByte();
+ }
+ if ((startaddr == 0x207D) && (addr == 0x22CE) && (cmd == 0x90) && !scumm_stricmp(_vm->_game->_curTotFile, "INTRO2.tot")) {
+ _vm->_game->_script->skip(2);
+ cmd = _vm->_game->_script->readByte();
+ }
+ }
+
if ((cmd >> 4) >= 12) {
cmd2 = 16 - (cmd >> 4);
cmd &= 0xF;