diff options
author | Torbjörn Andersson | 2005-07-19 21:15:56 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2005-07-19 21:15:56 +0000 |
commit | 0009b36293aeb7a499c13aa82859065b4845660d (patch) | |
tree | 38e1634e385249fc24317b0b3dc1db3212e52836 /saga | |
parent | a818b83858634003ca1ce892984496d56b387823 (diff) | |
download | scummvm-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
Diffstat (limited to 'saga')
-rw-r--r-- | saga/game.cpp | 42 | ||||
-rw-r--r-- | saga/saga.h | 1 |
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 |