diff options
| -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;  | 
