diff options
author | Arnaud Boutonné | 2010-10-24 20:20:48 +0000 |
---|---|---|
committer | Arnaud Boutonné | 2010-10-24 20:20:48 +0000 |
commit | 25e1af837a94f6b1a9dcdcdb69abb21167a7f6ce (patch) | |
tree | 98103618faccccae34c521c6d2af653b45411f81 | |
parent | 0db700a3dced67c607c9e9719ea22347612ead40 (diff) | |
download | scummvm-rg350-25e1af837a94f6b1a9dcdcdb69abb21167a7f6ce.tar.gz scummvm-rg350-25e1af837a94f6b1a9dcdcdb69abb21167a7f6ce.tar.bz2 scummvm-rg350-25e1af837a94f6b1a9dcdcdb69abb21167a7f6ce.zip |
GOB: un-ban and fix a somehow corrupted version of Fascination
(This version has been found on original floppies)
svn-id: r53772
-rw-r--r-- | engines/gob/detection_tables.h | 10 | ||||
-rw-r--r-- | engines/gob/inter.cpp | 15 |
2 files changed, 19 insertions, 6 deletions
diff --git a/engines/gob/detection_tables.h b/engines/gob/detection_tables.h index 93c1cc6d1c..43f15b8845 100644 --- a/engines/gob/detection_tables.h +++ b/engines/gob/detection_tables.h @@ -2264,16 +2264,14 @@ static const GOBGameDescription gameDescriptions[] = { kFeaturesAdLib, "demo.stk", "demo.tot", 0 }, -// This version is not detected on purpose: it's a pirated version, using a corrupted crack. -// Tagged ADGF_PIRATED! Do not re-add nor un-tag! - { + { // Supplied by scoriae { "fascination", - "", + "VGA", AD_ENTRY1s("disk0.stk", "c14330d052fe4da5a441ac9d81bc5891", 1061955), - UNK_LANG, + EN_ANY, kPlatformPC, - ADGF_PIRATED, + ADGF_NO_FLAGS, GUIO_NOSUBTITLES | GUIO_NOSPEECH }, kGameTypeFascination, diff --git a/engines/gob/inter.cpp b/engines/gob/inter.cpp index f6e6d41100..c86d3d2642 100644 --- a/engines/gob/inter.cpp +++ b/engines/gob/inter.cpp @@ -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; |