From 0009b36293aeb7a499c13aa82859065b4845660d Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Tue, 19 Jul 2005 21:15:56 +0000 Subject: 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 --- saga/game.cpp | 42 ++++++++++++++++++++++++++++++++++-------- 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 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 -- cgit v1.2.3