aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Boutonné2010-10-24 20:20:48 +0000
committerArnaud Boutonné2010-10-24 20:20:48 +0000
commit25e1af837a94f6b1a9dcdcdb69abb21167a7f6ce (patch)
tree98103618faccccae34c521c6d2af653b45411f81
parent0db700a3dced67c607c9e9719ea22347612ead40 (diff)
downloadscummvm-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.h10
-rw-r--r--engines/gob/inter.cpp15
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;