--- a/src/openttd.cpp Tue Apr 29 18:08:14 2008 +0000
+++ b/src/openttd.cpp Tue Apr 29 18:19:29 2008 +0000
@@ -101,10 +101,11 @@
extern void ShowOSErrorBox(const char *buf);
extern void InitializeRailGUI();
-/* TODO: usrerror() for errors which are not of an internal nature but
- * caused by the user, i.e. missing files or fatal configuration errors.
- * Post-0.4.0 since Celestar doesn't want this in SVN before. --pasky */
-
+/**
+ * Error handling for fatal errors.
+ * @param s the string to print.
+ * @note Does NEVER return.
+ */
void CDECL error(const char *s, ...)
{
va_list va;
@@ -121,6 +122,10 @@
exit(1);
}
+/**
+ * Shows some information on the console/a popup box depending on the OS.
+ * @param str the text to show.
+ */
void CDECL ShowInfoF(const char *str, ...)
{
va_list va;
@@ -131,13 +136,16 @@
ShowInfo(buf);
}
-
+/** The current revision of OpenTTD */
extern const char _openttd_revision[];
-static void showhelp()
+
+/**
+ * Show the help message when someone passed a wrong parameter.
+ */
+static void ShowHelp()
{
- char buf[4096], *p;
-
- p = buf;
+ char buf[4096];
+ char *p = buf;
p += snprintf(p, lengthof(buf), "OpenTTD %s\n", _openttd_revision);
p = strecpy(p,
@@ -253,7 +261,12 @@
}
}
-
+/**
+ * Extract the resolution from the given string and store
+ * it in the 'res' parameter.
+ * @param res variable to store the resolution in.
+ * @param s the string to decompose.
+ */
static void ParseResolution(int res[2], const char *s)
{
const char *t = strchr(s, 'x');
@@ -430,7 +443,7 @@
case 'x': save_config = false; break;
case -2:
case 'h':
- showhelp();
+ ShowHelp();
return 0;
}
}
@@ -778,7 +791,8 @@
* @param filename file to be loaded
* @param mode mode of loading, either SL_LOAD or SL_OLD_LOAD
* @param newgm switch to this mode of loading fails due to some unknown error
- * @param subdir default directory to look for filename, set to 0 if not needed */
+ * @param subdir default directory to look for filename, set to 0 if not needed
+ */
bool SafeSaveOrLoad(const char *filename, int mode, int newgm, Subdirectory subdir)
{
byte ogm = _game_mode;
@@ -839,103 +853,103 @@
#endif /* ENABLE_NETWORK */
switch (new_mode) {
- case SM_EDITOR: /* Switch to scenario editor */
- MakeNewEditorWorld();
- break;
-
- case SM_NEWGAME: /* New Game --> 'Random game' */
-#ifdef ENABLE_NETWORK
- if (_network_server) {
- snprintf(_network_game_info.map_name, lengthof(_network_game_info.map_name), "Random Map");
- }
-#endif /* ENABLE_NETWORK */
- MakeNewGame(false);
- break;
+ case SM_EDITOR: /* Switch to scenario editor */
+ MakeNewEditorWorld();
+ break;
- case SM_START_SCENARIO: /* New Game --> Choose one of the preset scenarios */
-#ifdef ENABLE_NETWORK
- if (_network_server) {
- snprintf(_network_game_info.map_name, lengthof(_network_game_info.map_name), "%s (Loaded scenario)", _file_to_saveload.title);
- }
-#endif /* ENABLE_NETWORK */
- StartScenario();
- break;
-
- case SM_LOAD: { /* Load game, Play Scenario */
- _opt_ptr = &_opt;
- ResetGRFConfig(true);
- ResetWindowSystem();
-
- if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, NO_DIRECTORY)) {
- LoadIntroGame();
- SetDParamStr(0, GetSaveLoadErrorString());
- ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
- } else {
- /* Update the local player for a loaded game. It is either always
- * player #1 (eg 0) or in the case of a dedicated server a spectator */
- SetLocalPlayer(_network_dedicated ? PLAYER_SPECTATOR : PLAYER_FIRST);
- /* Decrease pause counter (was increased from opening load dialog) */
- DoCommandP(0, 0, 0, NULL, CMD_PAUSE);
+ case SM_NEWGAME: /* New Game --> 'Random game' */
#ifdef ENABLE_NETWORK
if (_network_server) {
- snprintf(_network_game_info.map_name, lengthof(_network_game_info.map_name), "%s (Loaded game)", _file_to_saveload.title);
+ snprintf(_network_game_info.map_name, lengthof(_network_game_info.map_name), "Random Map");
}
#endif /* ENABLE_NETWORK */
- }
- break;
- }
+ MakeNewGame(false);
+ break;
- case SM_START_HEIGHTMAP: /* Load a heightmap and start a new game from it */
+ case SM_START_SCENARIO: /* New Game --> Choose one of the preset scenarios */
#ifdef ENABLE_NETWORK
- if (_network_server) {
- snprintf(_network_game_info.map_name, lengthof(_network_game_info.map_name), "%s (Heightmap)", _file_to_saveload.title);
- }
+ if (_network_server) {
+ snprintf(_network_game_info.map_name, lengthof(_network_game_info.map_name), "%s (Loaded scenario)", _file_to_saveload.title);
+ }
#endif /* ENABLE_NETWORK */
- MakeNewGame(true);
- break;
-
- case SM_LOAD_HEIGHTMAP: /* Load heightmap from scenario editor */
- SetLocalPlayer(OWNER_NONE);
+ StartScenario();
+ break;
- GenerateWorld(GW_HEIGHTMAP, 1 << _patches.map_x, 1 << _patches.map_y);
- MarkWholeScreenDirty();
- break;
+ case SM_LOAD: { /* Load game, Play Scenario */
+ _opt_ptr = &_opt;
+ ResetGRFConfig(true);
+ ResetWindowSystem();
- case SM_LOAD_SCENARIO: { /* Load scenario from scenario editor */
- if (SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_EDITOR, NO_DIRECTORY)) {
- _opt_ptr = &_opt;
+ if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, NO_DIRECTORY)) {
+ LoadIntroGame();
+ SetDParamStr(0, GetSaveLoadErrorString());
+ ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
+ } else {
+ /* Update the local player for a loaded game. It is either always
+ * player #1 (eg 0) or in the case of a dedicated server a spectator */
+ SetLocalPlayer(_network_dedicated ? PLAYER_SPECTATOR : PLAYER_FIRST);
+ /* Decrease pause counter (was increased from opening load dialog) */
+ DoCommandP(0, 0, 0, NULL, CMD_PAUSE);
+#ifdef ENABLE_NETWORK
+ if (_network_server) {
+ snprintf(_network_game_info.map_name, lengthof(_network_game_info.map_name), "%s (Loaded game)", _file_to_saveload.title);
+ }
+#endif /* ENABLE_NETWORK */
+ }
+ break;
+ }
+ case SM_START_HEIGHTMAP: /* Load a heightmap and start a new game from it */
+#ifdef ENABLE_NETWORK
+ if (_network_server) {
+ snprintf(_network_game_info.map_name, lengthof(_network_game_info.map_name), "%s (Heightmap)", _file_to_saveload.title);
+ }
+#endif /* ENABLE_NETWORK */
+ MakeNewGame(true);
+ break;
+
+ case SM_LOAD_HEIGHTMAP: /* Load heightmap from scenario editor */
SetLocalPlayer(OWNER_NONE);
- _patches_newgame.starting_year = _cur_year;
- } else {
- SetDParamStr(0, GetSaveLoadErrorString());
- ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
- }
- break;
- }
-
- case SM_MENU: /* Switch to game intro menu */
- LoadIntroGame();
- break;
- case SM_SAVE: /* Save game */
- /* Make network saved games on pause compatible to singleplayer */
- if (_networking && _pause_game == 1) _pause_game = 2;
- if (SaveOrLoad(_file_to_saveload.name, SL_SAVE, NO_DIRECTORY) != SL_OK) {
- SetDParamStr(0, GetSaveLoadErrorString());
- ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
- } else {
- DeleteWindowById(WC_SAVELOAD, 0);
+ GenerateWorld(GW_HEIGHTMAP, 1 << _patches.map_x, 1 << _patches.map_y);
+ MarkWholeScreenDirty();
+ break;
+
+ case SM_LOAD_SCENARIO: { /* Load scenario from scenario editor */
+ if (SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_EDITOR, NO_DIRECTORY)) {
+ _opt_ptr = &_opt;
+
+ SetLocalPlayer(OWNER_NONE);
+ _patches_newgame.starting_year = _cur_year;
+ } else {
+ SetDParamStr(0, GetSaveLoadErrorString());
+ ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
+ }
+ break;
}
- if (_networking && _pause_game == 2) _pause_game = 1;
- break;
- case SM_GENRANDLAND: /* Generate random land within scenario editor */
- SetLocalPlayer(OWNER_NONE);
- GenerateWorld(GW_RANDOM, 1 << _patches.map_x, 1 << _patches.map_y);
- /* XXX: set date */
- MarkWholeScreenDirty();
- break;
+ case SM_MENU: /* Switch to game intro menu */
+ LoadIntroGame();
+ break;
+
+ case SM_SAVE: /* Save game */
+ /* Make network saved games on pause compatible to singleplayer */
+ if (_networking && _pause_game == 1) _pause_game = 2;
+ if (SaveOrLoad(_file_to_saveload.name, SL_SAVE, NO_DIRECTORY) != SL_OK) {
+ SetDParamStr(0, GetSaveLoadErrorString());
+ ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
+ } else {
+ DeleteWindowById(WC_SAVELOAD, 0);
+ }
+ if (_networking && _pause_game == 2) _pause_game = 1;
+ break;
+
+ case SM_GENRANDLAND: /* Generate random land within scenario editor */
+ SetLocalPlayer(OWNER_NONE);
+ GenerateWorld(GW_RANDOM, 1 << _patches.map_x, 1 << _patches.map_y);
+ /* XXX: set date */
+ MarkWholeScreenDirty();
+ break;
}
if (_switch_mode_errorstr != INVALID_STRING_ID) {
@@ -944,10 +958,11 @@
}
-/* State controlling game loop.
- * The state must not be changed from anywhere
- * but here.
- * That check is enforced in DoCommand. */
+/**
+ * State controlling game loop.
+ * The state must not be changed from anywhere but here.
+ * That check is enforced in DoCommand.
+ */
void StateGameLoop()
{
/* dont execute the state loop during pause */
@@ -1044,8 +1059,7 @@
#if defined(PSP)
/* Autosaving in networking is too time expensive for the PSP */
- if (_networking)
- return;
+ if (_networking) return;
#endif /* PSP */
if (_patches.keep_all_autosave && _local_player != PLAYER_SPECTATOR) {
@@ -1061,8 +1075,9 @@
}
DEBUG(sl, 2, "Autosaving to '%s'", buf);
- if (SaveOrLoad(buf, SL_SAVE, AUTOSAVE_DIR) != SL_OK)
+ if (SaveOrLoad(buf, SL_SAVE, AUTOSAVE_DIR) != SL_OK) {
ShowErrorMessage(INVALID_STRING_ID, STR_AUTOSAVE_FAILED, 0, 0);
+ }
}
static void ScrollMainViewport(int x, int y)
@@ -1075,6 +1090,7 @@
WP(w, vp_d).dest_scrollpos_y += ScaleByZoom(y, w->viewport->zoom);
}
}
+
/**
* Describes all the different arrow key combinations the game allows
* when it is in scrolling mode.
@@ -1189,9 +1205,7 @@
static void ConvertTownOwner()
{
- TileIndex tile;
-
- for (tile = 0; tile != MapSize(); tile++) {
+ for (TileIndex tile = 0; tile != MapSize(); tile++) {
switch (GetTileType(tile)) {
case MP_ROAD:
if (GB(_m[tile].m5, 4, 2) == ROAD_TILE_CROSSING && HasBit(_m[tile].m4, 7)) {