File diff r24217:df2f5854f1e3 → r24218:c32caa9f014d
src/openttd.cpp
Show inline comments
 
@@ -530,16 +530,16 @@ static const OptionData _options[] = {
 
 * @param argc The number of arguments passed to this game.
 
 * @param argv The values of the arguments.
 
 * @return 0 when there is no error.
 
 */
 
int openttd_main(int argc, char *argv[])
 
{
 
	char *musicdriver = nullptr;
 
	char *sounddriver = nullptr;
 
	char *videodriver = nullptr;
 
	char *blitter = nullptr;
 
	std::string musicdriver;
 
	std::string sounddriver;
 
	std::string videodriver;
 
	std::string blitter;
 
	std::string graphics_set;
 
	std::string sounds_set;
 
	std::string music_set;
 
	Dimension resolution = {0, 0};
 
	/* AfterNewGRFScan sets save_config to true after scanning completed. */
 
	bool save_config = false;
 
@@ -563,25 +563,21 @@ int openttd_main(int argc, char *argv[])
 
	int i;
 
	while ((i = mgo.GetOpt()) != -1) {
 
		switch (i) {
 
		case 'I': graphics_set = mgo.opt; break;
 
		case 'S': sounds_set = mgo.opt; break;
 
		case 'M': music_set = mgo.opt; break;
 
		case 'm': free(musicdriver); musicdriver = stredup(mgo.opt); break;
 
		case 's': free(sounddriver); sounddriver = stredup(mgo.opt); break;
 
		case 'v': free(videodriver); videodriver = stredup(mgo.opt); break;
 
		case 'b': free(blitter); blitter = stredup(mgo.opt); break;
 
		case 'm': musicdriver = mgo.opt; break;
 
		case 's': sounddriver = mgo.opt; break;
 
		case 'v': videodriver = mgo.opt; break;
 
		case 'b': blitter = mgo.opt; break;
 
		case 'D':
 
			free(musicdriver);
 
			free(sounddriver);
 
			free(videodriver);
 
			free(blitter);
 
			musicdriver = stredup("null");
 
			sounddriver = stredup("null");
 
			videodriver = stredup("dedicated");
 
			blitter = stredup("null");
 
			musicdriver = "null";
 
			sounddriver = "null";
 
			videodriver = "dedicated";
 
			blitter = "null";
 
			dedicated = true;
 
			SetDebugString("net=6");
 
			if (mgo.opt != nullptr) {
 
				/* Use the existing method for parsing (openttd -n).
 
				 * However, we do ignore the #company part. */
 
				const char *temp = nullptr;
 
@@ -743,34 +739,32 @@ int openttd_main(int argc, char *argv[])
 
	}
 

	
 
	/* Initialize game palette */
 
	GfxInitPalettes();
 

	
 
	DEBUG(misc, 1, "Loading blitter...");
 
	if (blitter == nullptr && _ini_blitter != nullptr) blitter = stredup(_ini_blitter);
 
	_blitter_autodetected = StrEmpty(blitter);
 
	if (blitter.empty() && !_ini_blitter.empty()) blitter = _ini_blitter;
 
	_blitter_autodetected = blitter.empty();
 
	/* Activate the initial blitter.
 
	 * This is only some initial guess, after NewGRFs have been loaded SwitchNewGRFBlitter may switch to a different one.
 
	 *  - Never guess anything, if the user specified a blitter. (_blitter_autodetected)
 
	 *  - Use 32bpp blitter if baseset or 8bpp-support settings says so.
 
	 *  - Use 8bpp blitter otherwise.
 
	 */
 
	if (!_blitter_autodetected ||
 
			(_support8bpp != S8BPP_NONE && (BaseGraphics::GetUsedSet() == nullptr || BaseGraphics::GetUsedSet()->blitter == BLT_8BPP)) ||
 
			BlitterFactory::SelectBlitter("32bpp-anim") == nullptr) {
 
		if (BlitterFactory::SelectBlitter(blitter) == nullptr) {
 
			StrEmpty(blitter) ?
 
			blitter.empty() ?
 
				usererror("Failed to autoprobe blitter") :
 
				usererror("Failed to select requested blitter '%s'; does it exist?", blitter);
 
				usererror("Failed to select requested blitter '%s'; does it exist?", blitter.c_str());
 
		}
 
	}
 
	free(blitter);
 

	
 
	if (videodriver == nullptr && _ini_videodriver != nullptr) videodriver = stredup(_ini_videodriver);
 
	if (videodriver.empty() && !_ini_videodriver.empty()) videodriver = _ini_videodriver;
 
	DriverFactoryBase::SelectDriver(videodriver, Driver::DT_VIDEO);
 
	free(videodriver);
 

	
 
	InitializeSpriteSorter();
 

	
 
	/* Initialize the zoom level of the screen to normal */
 
	_screen.zoom = ZOOM_LVL_NORMAL;
 

	
 
@@ -821,19 +815,17 @@ int openttd_main(int argc, char *argv[])
 
			ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND);
 
			msg.SetDParamStr(0, music_set.c_str());
 
			ScheduleErrorMessage(msg);
 
		}
 
	}
 

	
 
	if (sounddriver == nullptr && _ini_sounddriver != nullptr) sounddriver = stredup(_ini_sounddriver);
 
	if (sounddriver.empty() && !_ini_sounddriver.empty()) sounddriver = _ini_sounddriver;
 
	DriverFactoryBase::SelectDriver(sounddriver, Driver::DT_SOUND);
 
	free(sounddriver);
 

	
 
	if (musicdriver == nullptr && _ini_musicdriver != nullptr) musicdriver = stredup(_ini_musicdriver);
 
	if (musicdriver.empty() && !_ini_musicdriver.empty()) musicdriver = _ini_musicdriver;
 
	DriverFactoryBase::SelectDriver(musicdriver, Driver::DT_MUSIC);
 
	free(musicdriver);
 

	
 
	/* Take our initial lock on whatever we might want to do! */
 
	try {
 
		modal_work_lock.lock();
 
		modal_paint_lock.lock();
 
	} catch (const std::system_error&) {
 
@@ -865,29 +857,15 @@ int openttd_main(int argc, char *argv[])
 
		WindowDesc::SaveToConfig();
 
		SaveToHighScore();
 
	}
 

	
 
	/* Reset windowing system, stop drivers, free used memory, ... */
 
	ShutdownGame();
 
	goto exit_normal;
 

	
 
exit_noshutdown:
 
	/* These three are normally freed before bootstrap. */
 
	free(videodriver);
 
	free(blitter);
 

	
 
exit_bootstrap:
 
	/* These are normally freed before exit, but after bootstrap. */
 
	free(musicdriver);
 
	free(sounddriver);
 

	
 
exit_normal:
 
	free(_ini_musicdriver);
 
	free(_ini_sounddriver);
 
	free(_ini_videodriver);
 
	free(_ini_blitter);
 

	
 
	delete scanner;
 

	
 
	extern FILE *_log_fd;
 
	if (_log_fd != nullptr) {
 
		fclose(_log_fd);