aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2006-03-18 13:44:57 +0000
committerWillem Jan Palenstijn2006-03-18 13:44:57 +0000
commit879b5e4064686d9857b4e11e81dd224e16e1d6c2 (patch)
treec0e2789960f2f3413f6265ae4c49d7213790c663
parente60c0441adb663332d0e546421fa715dc5aaecca (diff)
downloadscummvm-rg350-879b5e4064686d9857b4e11e81dd224e16e1d6c2.tar.gz
scummvm-rg350-879b5e4064686d9857b4e11e81dd224e16e1d6c2.tar.bz2
scummvm-rg350-879b5e4064686d9857b4e11e81dd224e16e1d6c2.zip
workaround: manually add delay when showing image between levels in gob1 ega
svn-id: r21364
-rw-r--r--engines/gob/gob.cpp4
-rw-r--r--engines/gob/gob.h5
-rw-r--r--engines/gob/inter.cpp25
3 files changed, 30 insertions, 4 deletions
diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp
index b1d8ea0783..58bf4252a8 100644
--- a/engines/gob/gob.cpp
+++ b/engines/gob/gob.cpp
@@ -64,8 +64,8 @@ struct GobGameSettings {
static const GobGameSettings gob_games[] = {
// Supplied by Florian Zeitz on scummvm-devel
- {"gob1", "Gobliiins (DOS EGA)", GF_GOB1, "82aea70ef26f41fa963dfae270993e49"},
- {"gob1", "Gobliiins (DOS EGA)", GF_GOB1, "1f499458837008058b8ba6ae07057214"},
+ {"gob1", "Gobliiins (DOS EGA)", GF_GOB1 | GF_EGA, "82aea70ef26f41fa963dfae270993e49"},
+ {"gob1", "Gobliiins (DOS EGA)", GF_GOB1 | GF_EGA, "1f499458837008058b8ba6ae07057214"},
{"gob1", "Gobliiins (Windows)", GF_GOB1, "8a5e850c49d7cacdba5f5eb1fcc77b89"},
// Supplied by Theruler76 in bug report #1201233
diff --git a/engines/gob/gob.h b/engines/gob/gob.h
index 111e575bd9..a3e53787d4 100644
--- a/engines/gob/gob.h
+++ b/engines/gob/gob.h
@@ -64,14 +64,15 @@ enum {
GF_GOB3 = 1 << 2,
GF_WOODRUFF = 1 << 3,
GF_CD = 1 << 4,
- GF_MAC = 1 << 5
+ GF_MAC = 1 << 5,
+ GF_EGA = 1 << 6
};
enum {
DEBUG_FUNCOP = 1 << 0,
DEBUG_DRAWOP = 1 << 1,
DEBUG_GOBOP = 1 << 2,
- DEBUG_MUSIC = 1 << 3, // CD and adlib music
+ DEBUG_MUSIC = 1 << 3, // CD and adlib music
DEBUG_PARSER = 1 << 4,
DEBUG_GAMEFLOW = 1 << 5,
DEBUG_FILEIO = 1 << 6,
diff --git a/engines/gob/inter.cpp b/engines/gob/inter.cpp
index 606849cb58..895301e07a 100644
--- a/engines/gob/inter.cpp
+++ b/engines/gob/inter.cpp
@@ -139,11 +139,36 @@ void Inter::funcBlock(int16 retFlag) {
return;
}
+ int startaddr = _vm->_global->_inter_execPtr-_vm->_game->_totFileData;
+
counter = 0;
do {
if (_terminate)
break;
+ // WORKAROUND:
+ // The EGA version of gob1 doesn't add a delay after showing
+ // images between levels. We manually add it here.
+ if ((_vm->_features & GF_GOB1) && (_vm->_features & GF_EGA)) {
+ int addr = _vm->_global->_inter_execPtr-_vm->_game->_totFileData;
+ if ((startaddr == 0x18B4 && addr == 0x1A7F && // Zombie
+ !strncmp(_vm->_game->_curTotFile, "avt005.tot", 10)) ||
+ (startaddr == 0x1299 && addr == 0x139A && // Dungeon
+ !strncmp(_vm->_game->_curTotFile, "avt006.tot", 10)) ||
+ (startaddr == 0x11C0 && addr == 0x12C9 && // Cauldron
+ !strncmp(_vm->_game->_curTotFile, "avt012.tot", 10)) ||
+ (startaddr == 0x09F2 && addr == 0x0AF3 && // Statue
+ !strncmp(_vm->_game->_curTotFile, "avt016.tot", 10)) ||
+ (startaddr == 0x0B92 && addr == 0x0C93 && // Castle
+ !strncmp(_vm->_game->_curTotFile, "avt019.tot", 10)) ||
+ (startaddr == 0x17D9 && addr == 0x18DA && // Finale
+ !strncmp(_vm->_game->_curTotFile, "avt022.tot", 10)))
+ {
+ _vm->_util->longDelay(5000);
+ }
+ }
+ // (end workaround)
+
cmd = (byte)*_vm->_global->_inter_execPtr;
if ((cmd >> 4) >= 12) {
cmd2 = 16 - (cmd >> 4);