summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fios.cpp6
-rw-r--r--src/fios.h2
-rw-r--r--src/openttd.cpp18
3 files changed, 19 insertions, 7 deletions
diff --git a/src/fios.cpp b/src/fios.cpp
index 73c3b9ae2..cdecb1b34 100644
--- a/src/fios.cpp
+++ b/src/fios.cpp
@@ -297,12 +297,12 @@ static FiosItem *FiosGetFileList(SaveLoadDialogMode mode, fios_getlist_callback_
* @param mode Save/load mode.
* @param file Name of the file to check.
* @param ext A pointer to the extension identifier inside file
- * @param title Buffer if a callback wants to lookup the title of the file
+ * @param title Buffer if a callback wants to lookup the title of the file; NULL to skip the lookup
* @return a FIOS_TYPE_* type of the found file, FIOS_TYPE_INVALID if not a savegame
* @see FiosGetFileList
* @see FiosGetSavegameList
*/
-static FiosType FiosGetSavegameListCallback(SaveLoadDialogMode mode, const char *file, const char *ext, char *title)
+FiosType FiosGetSavegameListCallback(SaveLoadDialogMode mode, const char *file, const char *ext, char *title)
{
/* Show savegame files
* .SAV OpenTTD saved game
@@ -314,7 +314,7 @@ static FiosType FiosGetSavegameListCallback(SaveLoadDialogMode mode, const char
if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO) {
if (strcasecmp(ext, ".ss1") == 0 || strcasecmp(ext, ".sv1") == 0 ||
strcasecmp(ext, ".sv2") == 0) {
- GetOldSaveGameName(title, _fios_path, file);
+ if (title != NULL) GetOldSaveGameName(title, _fios_path, file);
return FIOS_TYPE_OLDFILE;
}
}
diff --git a/src/fios.h b/src/fios.h
index 6a46987b3..40982bf4d 100644
--- a/src/fios.h
+++ b/src/fios.h
@@ -105,6 +105,8 @@ StringID FiosGetDescText(const char **path, uint32 *total_free);
bool FiosDelete(const char *name);
/* Make a filename from a name */
void FiosMakeSavegameName(char *buf, const char *name, size_t size);
+/* Determines type of savegame (or tells it is not a savegame) */
+FiosType FiosGetSavegameListCallback(SaveLoadDialogMode mode, const char *file, const char *ext, char *title);
int CDECL compare_FiosItems(const void *a, const void *b);
diff --git a/src/openttd.cpp b/src/openttd.cpp
index 7eb61c226..29f6bbb79 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -460,11 +460,21 @@ int ttd_main(int argc, char *argv[])
if (mgo.opt != NULL) {
ttd_strlcpy(_file_to_saveload.name, mgo.opt, sizeof(_file_to_saveload.name));
_switch_mode = SM_LOAD;
- } else {
- _switch_mode = SM_NEWGAME;
- /* Give a random map */
- generation_seed = InteractiveRandom();
+ _file_to_saveload.mode = SL_LOAD;
+
+ /* if the file doesn't exist or it is not a valid savegame, let the saveload code show an error */
+ const char *t = strrchr(_file_to_saveload.name, '.');
+ if (t != NULL) {
+ FiosType ft = FiosGetSavegameListCallback(SLD_LOAD_GAME, _file_to_saveload.name, t, NULL);
+ if (ft != FIOS_TYPE_INVALID) SetFiosType(ft);
+ }
+
+ break;
}
+
+ _switch_mode = SM_NEWGAME;
+ /* Give a random map */
+ generation_seed = InteractiveRandom();
break;
case 'G': generation_seed = atoi(mgo.opt); break;
case 'c': _config_file = strdup(mgo.opt); break;