aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjörn Andersson2005-07-19 21:15:56 +0000
committerTorbjörn Andersson2005-07-19 21:15:56 +0000
commit0009b36293aeb7a499c13aa82859065b4845660d (patch)
tree38e1634e385249fc24317b0b3dc1db3212e52836
parenta818b83858634003ca1ce892984496d56b387823 (diff)
downloadscummvm-rg350-0009b36293aeb7a499c13aa82859065b4845660d.tar.gz
scummvm-rg350-0009b36293aeb7a499c13aa82859065b4845660d.tar.bz2
scummvm-rg350-0009b36293aeb7a499c13aa82859065b4845660d.zip
If we're not going to detect music "engine" at run-time, then we do need
separate entries for the original Windows CD and the first Wyrmkeep version. The latter has the "patch" files, which include the standalone MIDI files. However, since the data files are otherwise indistinguishable, we also need to be able to detect multiple versions and let the user to the disambiguation. I've added that functionality in the simplest way I could think of, in case we want to revert it later. svn-id: r18565
-rw-r--r--saga/game.cpp42
-rw-r--r--saga/saga.h1
2 files changed, 35 insertions, 8 deletions
diff --git a/saga/game.cpp b/saga/game.cpp
index d3481b182a..59b53f6840 100644
--- a/saga/game.cpp
+++ b/saga/game.cpp
@@ -39,7 +39,7 @@
namespace Saga {
-static int detectGame(const FSList &fslist, bool mode = false);
+static int detectGame(const FSList &fslist, bool mode = false, int start = -1);
// ITE section
static PanelButton ITE_MainPanelButtons[] = {
@@ -557,6 +557,11 @@ static GameMD5 gameMD5[] = {
{ GID_ITE_DEMO_G, "c58e67c506af4ffa03fd0aac2079deb0", "voices.rsc", false },
{ GID_ITE_DEMO_G, "0b9a70eb4e120b6f00579b46c8cae29e", "ite.dmo", false },
+ { GID_ITE_WINCD, "8f4315a9bb10ec839253108a032c8b54", "ite.rsc", false },
+ { GID_ITE_WINCD, "a891405405edefc69c9d6c420c868b84", "scripts.rsc", false },
+ { GID_ITE_WINCD, "e2ccb61c325d6d1ead3be0e731fe29fe", "sounds.rsc", false },
+ { GID_ITE_WINCD, "41bb6b95d792dde5196bdb78740895a6", "voices.rsc", false },
+
{ GID_ITE_MACCD, "4f7fa11c5175980ed593392838523060", "ite.rsc", false },
{ GID_ITE_MACCD, "adf1f46c1d0589083996a7060c798ad0", "scripts.rsc", false },
{ GID_ITE_MACCD, "1a91cd60169f367ecb6c6e058d899b2f", "music.rsc", false },
@@ -815,6 +820,25 @@ static GameDescription gameDescriptions[] = {
GF_WYRMKEEP | GF_CD_FX
},
+ // Inherit the earth - Wyrmkeep Windows CD version
+ {
+ "ite",
+ GType_ITE,
+ GID_ITE_WINCD,
+ "Inherit the Earth (Win32 CD Version)",
+ &ITE_DisplayInfo,
+ ITE_DEFAULT_SCENE,
+ &ITE_Resources,
+ ARRAYSIZE(ITECD_GameFiles),
+ ITECD_GameFiles,
+ ARRAYSIZE(ITECD_GameFonts),
+ ITECD_GameFonts,
+ &ITECD_GameSound,
+ ARRAYSIZE(ITEWinPatch1_Files),
+ ITEWinPatch1_Files,
+ GF_WYRMKEEP | GF_CD_FX
+ },
+
// Inherit the earth - DOS CD version
{
"ite",
@@ -978,8 +1002,6 @@ bool SagaEngine::initGame(void) {
return false;
}
-
-
if (gameNumber >= gameCount) {
error("SagaEngine::loadGame wrong gameNumber");
}
@@ -990,7 +1012,6 @@ bool SagaEngine::initGame(void) {
_displayClip.right = _gameDisplayInfo.logicalWidth;
_displayClip.bottom = _gameDisplayInfo.logicalHeight;
-
if (!_resource->createContexts()) {
return false;
}
@@ -1001,13 +1022,19 @@ DetectedGameList GAME_ProbeGame(const FSList &fslist) {
DetectedGameList detectedGames;
int game_n;
- if ((game_n = detectGame(fslist, true)) != -1)
+ game_n = -1;
+
+ while (1) {
+ game_n = detectGame(fslist, true, game_n);
+ if (game_n == -1)
+ break;
detectedGames.push_back(gameDescriptions[game_n].toGameSettings());
+ }
return detectedGames;
}
-int detectGame(const FSList &fslist, bool mode) {
+int detectGame(const FSList &fslist, bool mode, int start) {
int game_count = ARRAYSIZE(gameDescriptions);
int game_n = -1;
typedef Common::Map<Common::String, Common::String> StringMap;
@@ -1073,7 +1100,7 @@ int detectGame(const FSList &fslist, bool mode) {
}
}
- for (game_n = 0; game_n < game_count; game_n++) {
+ for (game_n = start + 1; game_n < game_count; game_n++) {
file_count = gameDescriptions[game_n].filesCount;
file_missing = false;
@@ -1121,7 +1148,6 @@ int detectGame(const FSList &fslist, bool mode) {
for (StringMap::const_iterator file = filesMD5.begin(); file != filesMD5.end(); ++file)
printf("%s: %s\n", file->_key.c_str(), file->_value.c_str());
-
}
return -1;
diff --git a/saga/saga.h b/saga/saga.h
index bc512eeb37..9a586ebf77 100644
--- a/saga/saga.h
+++ b/saga/saga.h
@@ -256,6 +256,7 @@ enum GameIds {
// Wyrmkeep
GID_ITE_CD, // data for Win rerelease is same as in old DOS
+ GID_ITE_WINCD, // but it has a bunch of patch files
GID_ITE_MACCD,
GID_ITE_LINCD,
GID_ITE_MULTICD, // Wyrmkeep combined Windows/Mac/Linux version