summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fileio.cpp6
-rw-r--r--src/fileio.h1
-rw-r--r--src/openttd.cpp6
-rw-r--r--src/saveload.cpp5
4 files changed, 12 insertions, 6 deletions
diff --git a/src/fileio.cpp b/src/fileio.cpp
index e79f54984..a3f4a89d6 100644
--- a/src/fileio.cpp
+++ b/src/fileio.cpp
@@ -279,7 +279,7 @@ FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath sp, Subd
FILE *f = NULL;
char buf[MAX_PATH];
- if (subdir == BASE_DIR) {
+ if (subdir == NO_DIRECTORY) {
ttd_strlcpy(buf, filename, lengthof(buf));
} else {
snprintf(buf, lengthof(buf), "%s%s%s", _searchpaths[sp], _subdirs[subdir], filename);
@@ -301,11 +301,11 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir)
FILE *f = NULL;
Searchpath sp;
- assert(subdir < NUM_SUBDIRS);
+ assert(subdir < NUM_SUBDIRS || subdir == NO_DIRECTORY);
FOR_ALL_SEARCHPATHS(sp) {
f = FioFOpenFileSp(filename, mode, sp, subdir);
- if (f != NULL || subdir == 0) break;
+ if (f != NULL || subdir == NO_DIRECTORY) break;
}
return f;
diff --git a/src/fileio.h b/src/fileio.h
index 40d7a95b7..47ca115f7 100644
--- a/src/fileio.h
+++ b/src/fileio.h
@@ -33,6 +33,7 @@ enum Subdirectory {
DATA_DIR, ///< Subdirectory for all data (GRFs, sample.cat, intro game)
LANG_DIR, ///< Subdirectory for all translation files
NUM_SUBDIRS, ///< Number of subdirectories
+ NO_DIRECTORY, ///< A path without any base directory
};
/**
diff --git a/src/openttd.cpp b/src/openttd.cpp
index 0ccb850c6..87e4d55c3 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -860,7 +860,7 @@ void SwitchMode(int new_mode)
_opt_ptr = &_opt;
ResetGRFConfig(true);
- if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, BASE_DIR)) {
+ if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, NO_DIRECTORY)) {
LoadIntroGame();
ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
} else {
@@ -894,7 +894,7 @@ void SwitchMode(int new_mode)
break;
case SM_LOAD_SCENARIO: { /* Load scenario from scenario editor */
- if (SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_EDITOR, BASE_DIR)) {
+ if (SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_EDITOR, NO_DIRECTORY)) {
_opt_ptr = &_opt;
SetLocalPlayer(OWNER_NONE);
@@ -910,7 +910,7 @@ void SwitchMode(int new_mode)
break;
case SM_SAVE: /* Save game */
- if (SaveOrLoad(_file_to_saveload.name, SL_SAVE, BASE_DIR) != SL_OK) {
+ if (SaveOrLoad(_file_to_saveload.name, SL_SAVE, NO_DIRECTORY) != SL_OK) {
ShowErrorMessage(INVALID_STRING_ID, STR_4007_GAME_SAVE_FAILED, 0, 0);
} else {
DeleteWindowById(WC_SAVELOAD, 0);
diff --git a/src/saveload.cpp b/src/saveload.cpp
index 4b1f12bf8..bf78d5048 100644
--- a/src/saveload.cpp
+++ b/src/saveload.cpp
@@ -1584,6 +1584,11 @@ SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb)
}
_sl.fh = (mode == SL_SAVE) ? FioFOpenFile(filename, "wb", sb) : FioFOpenFile(filename, "rb", sb);
+
+ /* Make it a little easier to load savegames from the console */
+ if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", SAVE_DIR);
+ if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", BASE_DIR);
+
if (_sl.fh == NULL) {
DEBUG(sl, 0, "Cannot open savegame '%s' for saving/loading.", filename);
return SL_ERROR;