aboutsummaryrefslogtreecommitdiff
path: root/backends/platform
diff options
context:
space:
mode:
authorMarcus Comstedt2009-06-13 23:42:39 +0000
committerMarcus Comstedt2009-06-13 23:42:39 +0000
commit95f02dd86f95bfb5764077da4c9c399c89c35b07 (patch)
tree1bad65a730ff13c4b793eb8bee3561abfc0a5854 /backends/platform
parent3e8ea400e3b038db49ba56b95de45b1912ffe2b3 (diff)
downloadscummvm-rg350-95f02dd86f95bfb5764077da4c9c399c89c35b07.tar.gz
scummvm-rg350-95f02dd86f95bfb5764077da4c9c399c89c35b07.tar.bz2
scummvm-rg350-95f02dd86f95bfb5764077da4c9c399c89c35b07.zip
Detected games with different language or platform are now
no longer treated as duplicates, even if they have the same target and directory. Also, pass these parameters to the ConfMan, so that the correct version of the game is started. svn-id: r41504
Diffstat (limited to 'backends/platform')
-rw-r--r--backends/platform/dc/dc.h2
-rw-r--r--backends/platform/dc/dcmain.cpp12
-rw-r--r--backends/platform/dc/selector.cpp28
3 files changed, 33 insertions, 9 deletions
diff --git a/backends/platform/dc/dc.h b/backends/platform/dc/dc.h
index 0ccd69593e..f86a2c6065 100644
--- a/backends/platform/dc/dc.h
+++ b/backends/platform/dc/dc.h
@@ -232,5 +232,5 @@ class OSystem_Dreamcast : private DCHardware, public BaseBackend, public Filesys
extern int handleInput(struct mapledev *pad,
int &mouse_x, int &mouse_y,
byte &shiftFlags, Interactive *inter = NULL);
-extern bool selectGame(char *&, char *&, class Icon &);
+extern bool selectGame(char *&, char *&, Common::Language &, Common::Platform &, class Icon &);
diff --git a/backends/platform/dc/dcmain.cpp b/backends/platform/dc/dcmain.cpp
index 7a0f71ad1a..795504d243 100644
--- a/backends/platform/dc/dcmain.cpp
+++ b/backends/platform/dc/dcmain.cpp
@@ -234,8 +234,10 @@ int main()
int DCLauncherDialog::runModal()
{
char *base = NULL, *dir = NULL;
+ Common::Language language = Common::UNK_LANG;
+ Common::Platform platform = Common::kPlatformUnknown;
- if (!selectGame(base, dir, icon))
+ if (!selectGame(base, dir, language, platform, icon))
g_system->quit();
// Set the game path.
@@ -243,6 +245,14 @@ int DCLauncherDialog::runModal()
if (dir != NULL)
ConfMan.set("path", dir, base);
+ // Set the game language.
+ if (language != Common::UNK_LANG)
+ ConfMan.set("language", Common::getLanguageCode(language), base);
+
+ // Set the game platform.
+ if (platform != Common::kPlatformUnknown)
+ ConfMan.set("platform", Common::getPlatformCode(platform), base);
+
// Set the target.
ConfMan.setActiveDomain(base);
diff --git a/backends/platform/dc/selector.cpp b/backends/platform/dc/selector.cpp
index 9465769ea3..e2998234c3 100644
--- a/backends/platform/dc/selector.cpp
+++ b/backends/platform/dc/selector.cpp
@@ -138,6 +138,8 @@ struct Game
char dir[256];
char filename_base[256];
char text[256];
+ Common::Language language;
+ Common::Platform platform;
Icon icon;
Label label;
};
@@ -183,11 +185,15 @@ static void makeDefIcon(Icon &icon)
icon.load(scummvm_icon, sizeof(scummvm_icon));
}
-static bool uniqueGame(const char *base, const char *dir, Game *games, int cnt)
+static bool uniqueGame(const char *base, const char *dir,
+ Common::Language lang, Common::Platform plf,
+ Game *games, int cnt)
{
while (cnt--)
if (!strcmp(dir, games->dir) &&
- !stricmp(base, games->filename_base))
+ !stricmp(base, games->filename_base) &&
+ lang == games->language &&
+ plf == games->platform)
return false;
else
games++;
@@ -227,14 +233,20 @@ static int findGames(Game *games, int max)
if (curr_game < max) {
strcpy(games[curr_game].filename_base, ge->gameid().c_str());
strcpy(games[curr_game].dir, dirs[curr_dir-1].name);
+ games[curr_game].language = ge->language();
+ games[curr_game].platform = ge->platform();
if (uniqueGame(games[curr_game].filename_base,
- games[curr_game].dir, games, curr_game)) {
+ games[curr_game].dir,
+ games[curr_game].language,
+ games[curr_game].platform, games, curr_game)) {
strcpy(games[curr_game].text, ge->description().c_str());
#if 0
- printf("Registered game <%s> in <%s> <%s> because of <%s> <*>\n",
- games[curr_game].text, games[curr_game].dir,
- games[curr_game].filename_base,
+ printf("Registered game <%s> (l:%d p:%d) in <%s> <%s> because of <%s> <*>\n",
+ games[curr_game].text,
+ (int)games[curr_game].language,
+ (int)games[curr_game].platform,
+ games[curr_game].dir, games[curr_game].filename_base,
dirs[curr_dir-1].name);
#endif
curr_game++;
@@ -405,7 +417,7 @@ int gameMenu(Game *games, int num_games)
}
}
-bool selectGame(char *&ret, char *&dir_ret, Icon &icon)
+bool selectGame(char *&ret, char *&dir_ret, Common::Language &lang_ret, Common::Platform &plf_ret, Icon &icon)
{
Game *games = new Game[MAX_GAMES];
int selected, num_games;
@@ -449,6 +461,8 @@ bool selectGame(char *&ret, char *&dir_ret, Icon &icon)
dir_ret = the_game.dir;
#endif
ret = the_game.filename_base;
+ lang_ret = the_game.language;
+ plf_ret = the_game.platform;
icon = the_game.icon;
return true;
} else