aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Kołodziejski2003-04-06 19:41:34 +0000
committerPaweł Kołodziejski2003-04-06 19:41:34 +0000
commitd56673b8456ba5a5174c628cc1705a5309bea2ec (patch)
tree21bcb2c80df31a38b0d10eb6b5006f17ed20b444
parent9d1769665647454bb7cb7ab4649dd143024051a2 (diff)
downloadscummvm-rg350-d56673b8456ba5a5174c628cc1705a5309bea2ec.tar.gz
scummvm-rg350-d56673b8456ba5a5174c628cc1705a5309bea2ec.tar.bz2
scummvm-rg350-d56673b8456ba5a5174c628cc1705a5309bea2ec.zip
fixed detection of early scumm games
svn-id: r6923
-rw-r--r--common/gameDetector.h4
-rw-r--r--scumm/scumm.h1
-rw-r--r--scumm/scummvm.cpp55
3 files changed, 34 insertions, 26 deletions
diff --git a/common/gameDetector.h b/common/gameDetector.h
index fd2f4e90b6..6c6d6eee5e 100644
--- a/common/gameDetector.h
+++ b/common/gameDetector.h
@@ -86,6 +86,10 @@ enum GameFeatures {
GF_HUMONGOUS = 1 << 15,
GF_NEW_COSTUMES = 1 << 16,
GF_DEFAULT_TO_1X_SCALER = 1 << 17,
+ GF_AFTER_V2 = 1 << 18,
+ GF_AFTER_V3 = 1 << 19,
+ GF_AFTER_V4 = 1 << 20,
+ GF_AFTER_V5 = 1 << 21,
GF_HAS_ROOMTABLE = GF_AFTER_V7,
GF_USE_ANGLES = GF_AFTER_V7,
diff --git a/scumm/scumm.h b/scumm/scumm.h
index 7d35b3c8e2..2494fcd94e 100644
--- a/scumm/scumm.h
+++ b/scumm/scumm.h
@@ -170,6 +170,7 @@ enum ScummGameId {
GID_LOOM256,
GID_ZAK256,
GID_INDY3_256,
+ GID_INDY3,
GID_LOOM,
GID_FT,
GID_DIG,
diff --git a/scumm/scummvm.cpp b/scumm/scummvm.cpp
index afa940e525..7c2071f6ea 100644
--- a/scumm/scummvm.cpp
+++ b/scumm/scummvm.cpp
@@ -61,42 +61,43 @@ static const VersionSettings scumm_settings[] = {
/* Scumm Version 2 */
{"maniac", "Maniac Mansion", GID_MANIAC, 2, 0, 0,
- GF_SMALL_HEADER | GF_USE_KEY | GF_SMALL_NAMES | GF_16COLOR | GF_OLD_BUNDLE | GF_NO_SCALLING, "MANIACEX.EXE"},
-// {"zak", "Zak McKracken and the Alien Mindbenders", GID_ZAK, 2, 0, 0,
-// GF_SMALL_HEADER | GF_USE_KEY | GF_SMALL_NAMES | GF_16COLOR | GF_OLD_BUNDLE | GF_NO_SCALLING, "ZAKEXE.EXE"},
-// {"indy3", "Indiana Jones and the Last Crusade", GID_INDY3, 2, 0, 0,},
+ GF_AFTER_V2 | GF_SMALL_HEADER | GF_USE_KEY | GF_SMALL_NAMES | GF_16COLOR | GF_OLD_BUNDLE | GF_NO_SCALLING, "MANIAC.EXE"},
+// {"zak", "Zak McKracken and the Alien Mindbenders", GID_ZAK, 2, 0, 0,
+// GF_AFTER_V2 | GF_SMALL_HEADER | GF_USE_KEY | GF_SMALL_NAMES | GF_16COLOR | GF_OLD_BUNDLE | GF_NO_SCALLING, "ZAK.EXE"},
+// {"indy3EGA", "Indiana Jones and the Last Crusade", GID_INDY3, 2, 0, 0,},
+// GF_AFTER_V2 | GF_SMALL_HEADER | GF_USE_KEY | GF_SMALL_NAMES | GF_16COLOR | GF_OLD_BUNDLE | GF_NO_SCALLING, "INDY3.EXE"},
/* Scumm Version 3 */
{"indy3", "Indiana Jones and the Last Crusade (256)", GID_INDY3_256, 3, 0, 22,
- GF_SMALL_HEADER | GF_SMALL_NAMES | GF_OLD256 | GF_NO_SCALLING | GF_ADLIB_DEFAULT, "00.LFL"},
+ GF_AFTER_V3 | GF_SMALL_HEADER | GF_SMALL_NAMES | GF_OLD256 | GF_NO_SCALLING | GF_ADLIB_DEFAULT, "00.LFL"},
{"zak256", "Zak McKracken and the Alien Mindbenders (256)", GID_ZAK256, 3, 0, 0,
- GF_SMALL_HEADER | GF_SMALL_NAMES | GF_OLD256 | GF_AUDIOTRACKS | GF_NO_SCALLING, "00.LFL"},
+ GF_AFTER_V3 | GF_SMALL_HEADER | GF_SMALL_NAMES | GF_OLD256 | GF_AUDIOTRACKS | GF_NO_SCALLING, "00.LFL"},
{"loom", "Loom", GID_LOOM, 3, 5, 40,
- GF_SMALL_HEADER | GF_USE_KEY | GF_SMALL_NAMES | GF_OLD_BUNDLE | GF_16COLOR | GF_NO_SCALLING, "00.LFL"},
+ GF_AFTER_V3 | GF_SMALL_HEADER | GF_USE_KEY | GF_SMALL_NAMES | GF_OLD_BUNDLE | GF_16COLOR | GF_NO_SCALLING, "00.LFL"},
/* Scumm Version 4 */
{"monkeyEGA", "Monkey Island 1 (EGA)", GID_MONKEY_EGA, 4, 0, 67,
- GF_SMALL_HEADER | GF_USE_KEY | GF_16COLOR, 0}, // EGA version
+ GF_AFTER_V4 | GF_SMALL_HEADER | GF_USE_KEY | GF_16COLOR, 0},
/* Scumm version 5 */
{"monkeyVGA", "Monkey Island 1 (256 color Floppy version)", GID_MONKEY_VGA, 5, 0, 16,
- GF_SMALL_HEADER | GF_USE_KEY | GF_ADLIB_DEFAULT, "000.LFL"},
+ GF_AFTER_V4 | GF_SMALL_HEADER | GF_USE_KEY | GF_ADLIB_DEFAULT, "000.LFL"},
{"loomcd", "Loom (256 color CD version)", GID_LOOM256, 5, 1, 42,
- GF_SMALL_HEADER | GF_USE_KEY | GF_AUDIOTRACKS | GF_ADLIB_DEFAULT, "000.LFL"},
+ GF_AFTER_V4 | GF_SMALL_HEADER | GF_USE_KEY | GF_AUDIOTRACKS | GF_ADLIB_DEFAULT, "000.LFL"},
{"monkey", "Monkey Island 1", GID_MONKEY, 5, 2, 2,
- GF_USE_KEY | GF_AUDIOTRACKS | GF_ADLIB_DEFAULT, 0},
+ GF_AFTER_V5 | GF_USE_KEY | GF_AUDIOTRACKS | GF_ADLIB_DEFAULT, 0},
{"monkey1", "Monkey Island 1 (alt)", GID_MONKEY, 5, 2, 2,
- GF_USE_KEY | GF_AUDIOTRACKS | GF_ADLIB_DEFAULT, 0},
+ GF_AFTER_V5 | GF_USE_KEY | GF_AUDIOTRACKS | GF_ADLIB_DEFAULT, 0},
{"monkey2", "Monkey Island 2: LeChuck's revenge", GID_MONKEY2, 5, 2, 2,
- GF_USE_KEY | GF_ADLIB_DEFAULT, 0},
+ GF_AFTER_V5 | GF_USE_KEY | GF_ADLIB_DEFAULT, 0},
{"mi2demo", "Monkey Island 2: LeChuck's revenge (Demo)", GID_MONKEY2, 5, 2, 2,
- GF_USE_KEY | GF_ADLIB_DEFAULT, 0},
+ GF_AFTER_V5 | GF_USE_KEY | GF_ADLIB_DEFAULT, 0},
{"atlantis", "Indiana Jones and the Fate of Atlantis", GID_INDY4, 5, 5, 0,
- GF_USE_KEY | GF_ADLIB_DEFAULT, 0},
+ GF_AFTER_V5 | GF_USE_KEY | GF_ADLIB_DEFAULT, 0},
{"playfate", "Indiana Jones and the Fate of Atlantis (Demo)", GID_INDY4, 5, 5, 0,
- GF_USE_KEY | GF_ADLIB_DEFAULT, 0},
+ GF_AFTER_V5 | GF_USE_KEY | GF_ADLIB_DEFAULT, 0},
{"fate", "Indiana Jones and the Fate of Atlantis (Demo)", GID_INDY4, 5, 5, 0,
- GF_USE_KEY | GF_ADLIB_DEFAULT, 0},
+ GF_AFTER_V5 | GF_USE_KEY | GF_ADLIB_DEFAULT, 0},
/* Scumm Version 6 */
{"puttputt", "Putt-Putt Joins The Parade (DOS)", GID_SAMNMAX, 6, 1, 1,
@@ -153,20 +154,22 @@ Engine *Engine_SCUMM_create(GameDetector *detector, OSystem *syst) {
if (detector->_amiga)
detector->_features |= GF_AMIGA;
- if (detector->_features & GF_OLD_BUNDLE)
- engine = new Scumm_v2(detector, syst);
- else if (detector->_features & GF_OLD256)
- engine = new Scumm_v3(detector, syst);
- else if (detector->_features & GF_SMALL_HEADER) // this forces loomCD as v4
- engine = new Scumm_v4(detector, syst);
- else if (detector->_features & GF_AFTER_V8)
+ if (detector->_features & GF_AFTER_V8)
engine = new Scumm_v8(detector, syst);
else if (detector->_features & GF_AFTER_V7)
engine = new Scumm_v7(detector, syst);
- else if (detector->_features & GF_AFTER_V6) // this forces SamnmaxCD as v6
+ else if (detector->_features & GF_AFTER_V6)
engine = new Scumm_v6(detector, syst);
- else
+ else if (detector->_features & GF_AFTER_V5)
engine = new Scumm_v5(detector, syst);
+ else if (detector->_features & GF_AFTER_V4)
+ engine = new Scumm_v4(detector, syst);
+ else if (detector->_features & GF_AFTER_V3)
+ engine = new Scumm_v3(detector, syst);
+ else if (detector->_features & GF_AFTER_V2)
+ engine = new Scumm_v2(detector, syst);
+ else
+ error("Engine_SCUMM_create(): Unknown version of game engine");
return engine;
}