openttd.c
changeset 3058 8363e01ea189
parent 3033 9cba043eb38f
child 3059 1726615b3ddd
equal deleted inserted replaced
3057:7e42adcf85a8 3058:8363e01ea189
   305 
   305 
   306 int ttd_main(int argc, char* argv[])
   306 int ttd_main(int argc, char* argv[])
   307 {
   307 {
   308 	MyGetOptData mgo;
   308 	MyGetOptData mgo;
   309 	int i;
   309 	int i;
   310 	bool network = false;
       
   311 	char *network_conn = NULL;
       
   312 	const char *optformat;
   310 	const char *optformat;
   313 	char musicdriver[16], sounddriver[16], videodriver[16];
   311 	char musicdriver[16], sounddriver[16], videodriver[16];
   314 	int resolution[2] = {0,0};
   312 	int resolution[2] = {0,0};
   315 	uint startdate = -1;
   313 	uint startdate = -1;
   316 	bool dedicated;
   314 
       
   315 	bool dedicated = false;
       
   316 	bool network   = false;
       
   317 	char *network_conn = NULL;
   317 
   318 
   318 	musicdriver[0] = sounddriver[0] = videodriver[0] = 0;
   319 	musicdriver[0] = sounddriver[0] = videodriver[0] = 0;
   319 
   320 
   320 	_game_mode = GM_MENU;
   321 	_game_mode = GM_MENU;
   321 	_switch_mode = SM_MENU;
   322 	_switch_mode = SM_MENU;
   322 	_switch_mode_errorstr = INVALID_STRING_ID;
   323 	_switch_mode_errorstr = INVALID_STRING_ID;
   323 	_dedicated_forks = false;
   324 	_dedicated_forks = false;
   324 	dedicated = false;
       
   325 	_config_file = NULL;
   325 	_config_file = NULL;
   326 
   326 
   327 	// The last param of the following function means this:
   327 	// The last param of the following function means this:
   328 	//   a letter means: it accepts that param (e.g.: -h)
   328 	//   a letter means: it accepts that param (e.g.: -h)
   329 	//   a ':' behind it means: it need a param (e.g.: -m<driver>)
   329 	//   a ':' behind it means: it need a param (e.g.: -m<driver>)
   338 	while ((i = MyGetOpt(&mgo)) != -1) {
   338 	while ((i = MyGetOpt(&mgo)) != -1) {
   339 		switch (i) {
   339 		switch (i) {
   340 		case 'm': ttd_strlcpy(musicdriver, mgo.opt, sizeof(musicdriver)); break;
   340 		case 'm': ttd_strlcpy(musicdriver, mgo.opt, sizeof(musicdriver)); break;
   341 		case 's': ttd_strlcpy(sounddriver, mgo.opt, sizeof(sounddriver)); break;
   341 		case 's': ttd_strlcpy(sounddriver, mgo.opt, sizeof(sounddriver)); break;
   342 		case 'v': ttd_strlcpy(videodriver, mgo.opt, sizeof(videodriver)); break;
   342 		case 'v': ttd_strlcpy(videodriver, mgo.opt, sizeof(videodriver)); break;
   343 		case 'D': {
   343 		case 'D':
   344 				strcpy(musicdriver, "null");
   344 			strcpy(musicdriver, "null");
   345 				strcpy(sounddriver, "null");
   345 			strcpy(sounddriver, "null");
   346 				strcpy(videodriver, "dedicated");
   346 			strcpy(videodriver, "dedicated");
   347 				dedicated = true;
   347 			dedicated = true;
   348 			} break;
   348 			break;
   349 		case 'f': {
   349 		case 'f': _dedicated_forks = true; break;
   350 				_dedicated_forks = true;
   350 		case 'n':
   351 			}; break;
   351 			network = true;
   352 		case 'n': {
   352 			network_conn = mgo_opt; // optional IP parameter, NULL if unset
   353 				network = true;
   353 			break;
   354 				if (mgo.opt)
       
   355 					// Optional, you can give an IP
       
   356 					network_conn = mgo.opt;
       
   357 				else
       
   358 					network_conn = NULL;
       
   359 			} break;
       
   360 		case 'b': _ai.network_client = true; break;
   354 		case 'b': _ai.network_client = true; break;
   361 		case 'r': ParseResolution(resolution, mgo.opt); break;
   355 		case 'r': ParseResolution(resolution, mgo.opt); break;
   362 		case 't': startdate = atoi(mgo.opt); break;
   356 		case 't': startdate = atoi(mgo.opt); break;
   363 		case 'd': {
   357 		case 'd': {
   364 #if defined(WIN32)
   358 #if defined(WIN32)
   373 				strcpy(_file_to_saveload.name, mgo.opt);
   367 				strcpy(_file_to_saveload.name, mgo.opt);
   374 				_switch_mode = SM_LOAD;
   368 				_switch_mode = SM_LOAD;
   375 			} else
   369 			} else
   376 				_switch_mode = SM_NEWGAME;
   370 				_switch_mode = SM_NEWGAME;
   377 			break;
   371 			break;
   378 		case 'G':
   372 		case 'G': _random_seeds[0][0] = atoi(mgo.opt); break;
   379 			_random_seeds[0][0] = atoi(mgo.opt);
   373 		case 'c': _config_file = strdup(mgo.opt); break;
   380 			break;
       
   381 		case 'c':
       
   382 			_config_file = strdup(mgo.opt);
       
   383 			break;
       
   384 		case -2:
   374 		case -2:
   385 		case 'h':
   375 		case 'h':
   386 			showhelp();
   376 			showhelp();
   387 			return 0;
   377 			return 0;
   388 		}
   378 		}
   389 	}
   379 	}
   390 
   380 
   391 	if (_ai.network_client && !network) {
   381 	if (_ai.network_client && !network) {
   392 		_ai.network_client = false;
   382 		_ai.network_client = false;
   393 		DEBUG(ai, 0)("[AI] Can't enable network-AI, because '-n' is not used\n");
   383 		DEBUG(ai, 0) ("[AI] Can't enable network-AI, because '-n' is not used\n");
   394 	}
   384 	}
   395 
   385 
   396 	DeterminePaths();
   386 	DeterminePaths();
   397 	CheckExternalFiles();
   387 	CheckExternalFiles();
   398 
   388 
   439 	InitWindowSystem();
   429 	InitWindowSystem();
   440 
   430 
   441 	GfxLoadSprites();
   431 	GfxLoadSprites();
   442 	LoadStringWidthTable();
   432 	LoadStringWidthTable();
   443 
   433 
   444 	DEBUG(misc, 1) ("Loading drivers...");
   434 	DEBUG(driver, 1) ("Loading drivers...");
   445 	LoadDriver(SOUND_DRIVER, _ini_sounddriver);
   435 	LoadDriver(SOUND_DRIVER, _ini_sounddriver);
   446 	LoadDriver(MUSIC_DRIVER, _ini_musicdriver);
   436 	LoadDriver(MUSIC_DRIVER, _ini_musicdriver);
   447 	LoadDriver(VIDEO_DRIVER, _ini_videodriver); // load video last, to prevent an empty window while sound and music loads
   437 	LoadDriver(VIDEO_DRIVER, _ini_videodriver); // load video last, to prevent an empty window while sound and music loads
   448 	_savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING;
   438 	_savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING;
   449 
   439