OpenTTD Source 20241224-master-gf74b0cf984
openttd.cpp File Reference

Functions related to starting OpenTTD. More...

#include "stdafx.h"
#include "blitter/factory.hpp"
#include "sound/sound_driver.hpp"
#include "music/music_driver.hpp"
#include "video/video_driver.hpp"
#include "mixer.h"
#include "fontcache.h"
#include "error.h"
#include "error_func.h"
#include "gui.h"
#include "base_media_base.h"
#include "saveload/saveload.h"
#include "company_cmd.h"
#include "company_func.h"
#include "command_func.h"
#include "news_func.h"
#include "fios.h"
#include "aircraft.h"
#include "roadveh.h"
#include "train.h"
#include "ship.h"
#include "console_func.h"
#include "screenshot.h"
#include "network/network.h"
#include "network/network_func.h"
#include "ai/ai.hpp"
#include "ai/ai_config.hpp"
#include "settings_func.h"
#include "genworld.h"
#include "progress.h"
#include "strings_func.h"
#include "vehicle_func.h"
#include "gamelog.h"
#include "animated_tile_func.h"
#include "roadstop_base.h"
#include "elrail_func.h"
#include "rev.h"
#include "highscore.h"
#include "station_base.h"
#include "crashlog.h"
#include "engine_func.h"
#include "core/random_func.hpp"
#include "rail_gui.h"
#include "road_gui.h"
#include "core/backup_type.hpp"
#include "hotkeys.h"
#include "newgrf.h"
#include "misc/getoptdata.h"
#include "game/game.hpp"
#include "game/game_config.hpp"
#include "town.h"
#include "subsidy_func.h"
#include "gfx_layout.h"
#include "viewport_func.h"
#include "viewport_sprite_sorter.h"
#include "framerate_type.h"
#include "industry.h"
#include "network/network_gui.h"
#include "network/network_survey.h"
#include "misc_cmd.h"
#include "timer/timer.h"
#include "timer/timer_game_calendar.h"
#include "timer/timer_game_economy.h"
#include "timer/timer_game_realtime.h"
#include "timer/timer_game_tick.h"
#include "social_integration.h"
#include "linkgraph/linkgraphschedule.h"
#include <system_error>
#include "safeguards.h"

Go to the source code of this file.

Data Structures

struct  AfterNewGRFScan
 Callback structure of statements to be executed after the NewGRF scan. More...
 

Functions

void CallLandscapeTick ()
 
void DoPaletteAnimations ()
 
void MusicLoop ()
 Check music playback status and start/stop/song-finished.
 
void CallWindowGameTickEvent ()
 Dispatch OnGameTick event over all windows.
 
bool HandleBootstrap ()
 Handle all procedures for bootstrapping OpenTTD without a base graphics set.
 
void CheckCaches ()
 Check the validity of some of the caches.
 
CompanyDoStartupNewCompany (bool is_ai, CompanyID company=INVALID_COMPANY)
 Create a new company and sets all company variables default values.
 
void OSOpenBrowser (const std::string &url)
 
void ShowOSErrorBox (const char *buf, bool system)
 
void UserErrorI (const std::string &str)
 Error handling for fatal user errors.
 
void FatalErrorI (const std::string &str)
 Error handling for fatal non-user errors.
 
static void ShowHelp ()
 Show the help message when someone passed a wrong parameter.
 
static void WriteSavegameInfo (const std::string &name)
 
static void ParseResolution (Dimension *res, const char *s)
 Extract the resolution from the given string and store it in the 'res' parameter.
 
static void ShutdownGame ()
 Uninitializes drivers, frees allocated memory, cleans pools, ... Generally, prepares the game for shutting down.
 
static void LoadIntroGame (bool load_newgrfs=true)
 Load the introduction game.
 
void MakeNewgameSettingsLive ()
 
void OpenBrowser (const std::string &url)
 
void PostMainLoop ()
 
static std::vector< OptionDataCreateOptions ()
 Create all the options that OpenTTD supports.
 
int openttd_main (std::span< char *const > arguments)
 Main entry point for this lovely game.
 
void HandleExitGameRequest ()
 
static void OnStartScenario ()
 Triggers everything required to set up a saved scenario for a new game.
 
static void OnStartGame (bool dedicated_server)
 Triggers everything that should be triggered when starting a game.
 
static void MakeNewGameDone ()
 
static void MakeNewGame (bool from_heightmap, bool reset_settings)
 
static void MakeNewEditorWorldDone ()
 
static void MakeNewEditorWorld ()
 
bool SafeLoad (const std::string &filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, std::shared_ptr< LoadFilter > lf=nullptr)
 Load the specified savegame but on error do different things.
 
static void UpdateSocialIntegration (GameMode game_mode)
 
void SwitchToMode (SwitchMode new_mode)
 
void StateGameLoop ()
 State controlling game loop.
 
void ChangeAutosaveFrequency (bool reset)
 Reset the interval of the autosave.
 
bool RequestNewGRFScan (NewGRFScanCallback *callback)
 Request a new NewGRF scan.
 
void GameLoop ()
 

Variables

std::string _config_file
 Configuration file of OpenTTD.
 
bool _save_config = false
 
bool _request_newgrf_scan = false
 
NewGRFScanCallback_request_newgrf_scan_callback = nullptr
 
static IntervalTimer< TimerGameRealtime_autosave_interval ({std::chrono::milliseconds::zero(), TimerGameRealtime::AUTOSAVE}, [](auto) { _pause_mode &=~PM_COMMAND_DURING_PAUSE;_do_autosave=true;SetWindowDirty(WC_STATUS_BAR, 0);static FiosNumberedSaveName _autosave_ctr("autosave");DoAutoOrNetsave(_autosave_ctr);_do_autosave=false;SetWindowDirty(WC_STATUS_BAR, 0);})
 Interval for regular autosaves.
 

Detailed Description

Functions related to starting OpenTTD.

Definition in file openttd.cpp.

Function Documentation

◆ CallLandscapeTick()

void CallLandscapeTick ( )

Definition at line 1662 of file landscape.cpp.

◆ CallWindowGameTickEvent()

void CallWindowGameTickEvent ( )

Dispatch OnGameTick event over all windows.

Definition at line 3248 of file window.cpp.

References Window::OnGameTick().

Referenced by StateGameLoop().

◆ ChangeAutosaveFrequency()

void ChangeAutosaveFrequency ( bool  reset)

Reset the interval of the autosave.

If reset is not set, this does not set the elapsed time on the timer, so if the interval is smaller, it might result in an autosave being done immediately.

Parameters
resetWhether to reset the timer back to zero, or to continue.

Definition at line 1318 of file openttd.cpp.

References _autosave_interval, _settings_client, TimerGameRealtime::AUTOSAVE, GUISettings::autosave_interval, ClientSettings::gui, and IntervalTimer< TTimerType >::SetInterval().

Referenced by GameOptionsWindow::OnDropdownSelect().

◆ CheckCaches()

void CheckCaches ( )
extern

◆ CreateOptions()

static std::vector< OptionData > CreateOptions ( )
static

Create all the options that OpenTTD supports.

Each option is always a single character with no, an optional or a required value.

Returns
The available options.

Definition at line 482 of file openttd.cpp.

References ODF_HAS_VALUE.

Referenced by openttd_main().

◆ DoPaletteAnimations()

void DoPaletteAnimations ( )

Definition at line 172 of file palette.cpp.

◆ DoStartupNewCompany()

Company * DoStartupNewCompany ( bool  is_ai,
CompanyID  company = INVALID_COMPANY 
)
extern

Create a new company and sets all company variables default values.

Parameters
is_aiis an AI company?
companyCompanyID to use for the new company
Returns
the company struct

Definition at line 585 of file company_cmd.cpp.

◆ FatalErrorI()

void FatalErrorI ( const std::string &  str)

Error handling for fatal non-user errors.

Parameters
strthe string to print.
Note
Does NEVER return.

Definition at line 133 of file openttd.cpp.

◆ GameLoop()

void GameLoop ( )

Definition at line 1340 of file openttd.cpp.

◆ HandleBootstrap()

bool HandleBootstrap ( )

Handle all procedures for bootstrapping OpenTTD without a base graphics set.

This requires all kinds of trickery that is needed to avoid the use of sprites from the base graphics set which are pretty interwoven.

Returns
True if a base set exists, otherwise false.

Definition at line 362 of file bootstrap_gui.cpp.

References _network_available, CheckForMissingGlyphs(), BlitterFactory::GetCurrentBlitter(), VideoDriver::GetInstance(), BaseMedia< GraphicsSet >::GetUsedSet(), InitializeUnicodeGlyphMap(), VideoDriver::MainLoop(), SetColourGradient(), and BaseMedia< GraphicsSet >::SetSet().

Referenced by openttd_main().

◆ HandleExitGameRequest()

void HandleExitGameRequest ( )

Definition at line 817 of file openttd.cpp.

◆ LoadIntroGame()

static void LoadIntroGame ( bool  load_newgrfs = true)
static

◆ MakeNewEditorWorld()

static void MakeNewEditorWorld ( )
static

Definition at line 921 of file openttd.cpp.

◆ MakeNewEditorWorldDone()

static void MakeNewEditorWorldDone ( )
static

Definition at line 916 of file openttd.cpp.

◆ MakeNewGame()

static void MakeNewGame ( bool  from_heightmap,
bool  reset_settings 
)
static

Definition at line 902 of file openttd.cpp.

◆ MakeNewGameDone()

static void MakeNewGameDone ( )
static

Definition at line 860 of file openttd.cpp.

◆ MakeNewgameSettingsLive()

void MakeNewgameSettingsLive ( )

Definition at line 342 of file openttd.cpp.

◆ MusicLoop()

void MusicLoop ( )

Check music playback status and start/stop/song-finished.

Called from main loop.

Definition at line 454 of file music_gui.cpp.

References MusicSystem::CheckStatus().

Referenced by LoadIntroGame().

◆ OnStartGame()

static void OnStartGame ( bool  dedicated_server)
static

Triggers everything that should be triggered when starting a game.

Parameters
dedicated_serverWhether this is a dedicated server or not.

Definition at line 848 of file openttd.cpp.

References COMPANY_SPECTATOR, GetFirstPlayableCompanyID(), IConsoleCmdExec(), NetworkOnGameStart(), and SetLocalCompany().

◆ OnStartScenario()

static void OnStartScenario ( )
static

◆ OpenBrowser()

void OpenBrowser ( const std::string &  url)

Definition at line 370 of file openttd.cpp.

◆ openttd_main()

int openttd_main ( std::span< char *const >  arguments)

Main entry point for this lovely game.

Parameters
argumentsThe command line arguments passed to the application.
Returns
0 when there is no error.

Definition at line 504 of file openttd.cpp.

References _blitter_autodetected, _config_file, _cur_resolution, _file_to_saveload, _game_session_stats, _ini_blitter, _ini_musicdriver, _ini_sounddriver, _ini_videodriver, _load_check_data, _skip_all_newgrf_scanning, _switch_mode, GetOptData::arguments, TarScanner::BASESET, BLT_8BPP, LoadCheckData::Clear(), CreateOptions(), Debug, DeterminePaths(), DFT_GAME_FILE, TarScanner::DoScan(), Driver::DT_MUSIC, Driver::DT_SOUND, Driver::DT_VIDEO, LoadCheckData::error, LoadCheckData::error_msg, BaseGraphics::Ini::extra_version, BaseMedia< MusicSet >::FindSets(), BaseMedia< GraphicsSet >::FindSets(), BaseMedia< SoundsSet >::FindSets(), FiosGetSavegameListCallback(), FiosGetScenarioListCallback(), FS2OTTD(), FT_HEIGHTMAP, FT_SAVEGAME, FT_SCENARIO, GENERATE_NEW_SEED, GenerateWorld(), GetAbstractFileType(), GetDetailedFileType(), VideoDriver::GetInstance(), GetOptData::GetOpt(), GraphicsSet::GetOrCreateExtraConfig(), GetString(), BaseMedia< GraphicsSet >::GetUsedSet(), GWM_EMPTY, HandleBootstrap(), LoadCheckData::HasErrors(), CursorVars::in_window, BaseSounds::ini_set, BaseMusic::ini_set, InitFontCache(), SocialIntegration::Initialize(), InitializeLanguagePacks(), InitializeScreenshotFormats(), InitializeSpriteSorter(), InitWindowSystem(), GRFConfig::IsCompatible(), LoadFromConfig(), LoadIntroGame(), VideoDriver::MainLoop(), FileToSaveLoad::name, NetworkStartUp(), GetOptData::opt, OTTD2FS(), ParseFullConnectionString(), ParseResolution(), RequestNewGRFScan(), S8BPP_NONE, SAVE_DIR, GameSessionStats::savegame_size, SaveOrLoad(), ScheduleErrorMessage(), BlitterFactory::SelectBlitter(), DriverFactoryBase::SelectDriver(), SetDebugString(), SetDParamStr(), ErrorMessageData::SetDParamStr(), FileToSaveLoad::SetMode(), BaseMedia< GraphicsSet >::SetSet(), BaseMedia< MusicSet >::SetSet(), BaseMedia< SoundsSet >::SetSet(), BaseMedia< GraphicsSet >::SetSetByName(), BaseMedia< SoundsSet >::SetSetByName(), BaseMedia< MusicSet >::SetSetByName(), BaseMedia< GraphicsSet >::SetSetByShortname(), ShowHelp(), ShutdownGame(), SL_OK, SLO_CHECK, SLO_LOAD, SM_EDITOR, SM_LOAD_GAME, SM_LOAD_HEIGHTMAP, SM_LOAD_SCENARIO, SM_MENU, SM_NEWGAME, SM_START_HEIGHTMAP, GameSessionStats::start_time, StrEmpty(), UpdateGUIZoom(), and ZOOM_LVL_MIN.

◆ OSOpenBrowser()

void OSOpenBrowser ( const std::string &  url)
extern

Definition at line 230 of file unix.cpp.

◆ ParseResolution()

static void ParseResolution ( Dimension res,
const char *  s 
)
static

Extract the resolution from the given string and store it in the 'res' parameter.

Parameters
resvariable to store the resolution in.
sthe string to decompose.

Definition at line 267 of file openttd.cpp.

Referenced by openttd_main().

◆ PostMainLoop()

void PostMainLoop ( )

Definition at line 457 of file openttd.cpp.

◆ RequestNewGRFScan()

bool RequestNewGRFScan ( NewGRFScanCallback callback)

Request a new NewGRF scan.

This will be executed on the next game-tick. This is mostly needed to ensure NewGRF scans (which are blocking) are done in the game-thread, and not in the draw-thread (which most often triggers this request).

Parameters
callbackOptional callback to call when NewGRF scan is completed.
Returns
True when the NewGRF scan was actually requested, false when the scan was already running.

Definition at line 1331 of file openttd.cpp.

Referenced by NetworkContentDownloadStatusWindow::Close(), NewGRFWindow::OnClick(), and openttd_main().

◆ SafeLoad()

bool SafeLoad ( const std::string &  filename,
SaveLoadOperation  fop,
DetailedFileType  dft,
GameMode  newgm,
Subdirectory  subdir,
std::shared_ptr< LoadFilter lf = nullptr 
)

Load the specified savegame but on error do different things.

If loading fails due to corrupt savegame, bad version, etc. go back to a previous correct state. In the menu for example load the intro game again.

Parameters
filenamefile to be loaded
fopmode of loading, always SLO_LOAD
newgmswitch to this mode of loading fails due to some unknown error
subdirdefault directory to look for filename, set to 0 if not needed
lfLoad filter to use, if nullptr: use filename + subdir.

Definition at line 943 of file openttd.cpp.

References _network_dedicated, _network_server, Debug, DFT_GAME_FILE, DFT_OLD_GAME_FILE, LoadIntroGame(), LoadWithFilter(), NetworkDisconnect(), SaveOrLoad(), SL_OK, SL_REINIT, and SLO_LOAD.

◆ ShowHelp()

◆ ShowOSErrorBox()

void ShowOSErrorBox ( const char *  buf,
bool  system 
)
extern

Definition at line 193 of file unix.cpp.

◆ ShutdownGame()

static void ShutdownGame ( )
static

Uninitializes drivers, frees allocated memory, cleans pools, ... Generally, prepares the game for shutting down.

Definition at line 284 of file openttd.cpp.

References _gamelog, _network_available, PoolBase::Clean(), LinkGraphSchedule::Clear(), NetworkShutDown(), PT_ALL, Gamelog::Reset(), ResetNewGRFData(), SocialIntegration::Shutdown(), DriverFactoryBase::ShutdownDrivers(), UninitFontCache(), AI::Uninitialize(), Game::Uninitialize(), and UnInitWindowSystem().

Referenced by openttd_main().

◆ StateGameLoop()

◆ SwitchToMode()

void SwitchToMode ( SwitchMode  new_mode)

Definition at line 1020 of file openttd.cpp.

◆ UpdateSocialIntegration()

static void UpdateSocialIntegration ( GameMode  game_mode)
static

Definition at line 998 of file openttd.cpp.

◆ UserErrorI()

void UserErrorI ( const std::string &  str)

Error handling for fatal user errors.

Parameters
strthe string to print.
Note
Does NEVER return.

Definition at line 112 of file openttd.cpp.

References VideoDriver::GetInstance(), and Driver::Stop().

◆ WriteSavegameInfo()

static void WriteSavegameInfo ( const std::string &  name)
static

Definition at line 223 of file openttd.cpp.

Variable Documentation

◆ _autosave_interval

IntervalTimer< TimerGameRealtime > _autosave_interval({std::chrono::milliseconds::zero(), TimerGameRealtime::AUTOSAVE},[](auto) { _pause_mode &=~PM_COMMAND_DURING_PAUSE;_do_autosave=true;SetWindowDirty(WC_STATUS_BAR, 0);static FiosNumberedSaveName _autosave_ctr("autosave");DoAutoOrNetsave(_autosave_ctr);_do_autosave=false;SetWindowDirty(WC_STATUS_BAR, 0);}) ( {std::chrono::milliseconds::zero(), TimerGameRealtime::AUTOSAVE ,
[] (auto) { _pause_mode &=~PM_COMMAND_DURING_PAUSE;_do_autosave=true;SetWindowDirty(WC_STATUS_BAR, 0);static FiosNumberedSaveName _autosave_ctr("autosave");DoAutoOrNetsave(_autosave_ctr);_do_autosave=false;SetWindowDirty(WC_STATUS_BAR, 0);}   
)
static

Interval for regular autosaves.

Initialized at zero to disable till settings are loaded.

Referenced by ChangeAutosaveFrequency().

◆ _config_file

std::string _config_file
extern

Configuration file of OpenTTD.

Definition at line 60 of file settings.cpp.

Referenced by openttd_main().

◆ _request_newgrf_scan

bool _request_newgrf_scan = false

Definition at line 104 of file openttd.cpp.

◆ _request_newgrf_scan_callback

NewGRFScanCallback* _request_newgrf_scan_callback = nullptr

Definition at line 105 of file openttd.cpp.

◆ _save_config

bool _save_config = false

Definition at line 103 of file openttd.cpp.