src/settings.cpp
branchnoai
changeset 9722 ebf0ece7d8f6
parent 9718 f82a4facea8b
child 9723 eee46cb39750
equal deleted inserted replaced
9721:9a27928bcd5e 9722:ebf0ece7d8f6
    47 #ifdef WITH_FREETYPE
    47 #ifdef WITH_FREETYPE
    48 #include "gfx.h"
    48 #include "gfx.h"
    49 #include "fontcache.h"
    49 #include "fontcache.h"
    50 #endif
    50 #endif
    51 #include "spritecache.h"
    51 #include "spritecache.h"
       
    52 #include "transparency.h"
    52 
    53 
    53 /** The patch values that are used for new games and/or modified in config file */
    54 /** The patch values that are used for new games and/or modified in config file */
    54 Patches _patches_newgame;
    55 Patches _patches_newgame;
    55 
    56 
    56 struct IniFile;
    57 struct IniFile;
    94 static void *pool_alloc(SettingsMemoryPool **pool, uint size)
    95 static void *pool_alloc(SettingsMemoryPool **pool, uint size)
    95 {
    96 {
    96 	uint pos;
    97 	uint pos;
    97 	SettingsMemoryPool *p = *pool;
    98 	SettingsMemoryPool *p = *pool;
    98 
    99 
    99 	size = ALIGN(size, sizeof(void*));
   100 	size = Align(size, sizeof(void*));
   100 
   101 
   101 	/* first check if there's memory in the next pool */
   102 	/* first check if there's memory in the next pool */
   102 	if (p->next && p->next->pos + size <= p->next->size) {
   103 	if (p->next && p->next->pos + size <= p->next->size) {
   103 		p = p->next;
   104 		p = p->next;
   104 	/* then check if there's not memory in the cur pool */
   105 	/* then check if there's not memory in the cur pool */
   432 		while (*s != 0 && *s != ' ' && *s != '\t' && *s != '|') s++;
   433 		while (*s != 0 && *s != ' ' && *s != '\t' && *s != '|') s++;
   433 
   434 
   434 		r = lookup_oneofmany(many, str, s - str);
   435 		r = lookup_oneofmany(many, str, s - str);
   435 		if (r == -1) return (uint32)-1;
   436 		if (r == -1) return (uint32)-1;
   436 
   437 
   437 		SETBIT(res, r); // value found, set it
   438 		SetBit(res, r); // value found, set it
   438 		if (*s == 0) break;
   439 		if (*s == 0) break;
   439 		str = s + 1;
   440 		str = s + 1;
   440 	}
   441 	}
   441 	return res;
   442 	return res;
   442 }
   443 }
   567 
   568 
   568 	for (; x != 0; x >>= 1, i++) {
   569 	for (; x != 0; x >>= 1, i++) {
   569 		start = many;
   570 		start = many;
   570 		while (*many != 0 && *many != '|') many++; // advance to the next element
   571 		while (*many != 0 && *many != '|') many++; // advance to the next element
   571 
   572 
   572 		if (HASBIT(x, 0)) { // item found, copy it
   573 		if (HasBit(x, 0)) { // item found, copy it
   573 			if (!init) *buf++ = '|';
   574 			if (!init) *buf++ = '|';
   574 			init = false;
   575 			init = false;
   575 			if (start == many) {
   576 			if (start == many) {
   576 				buf += sprintf(buf, "%d", i);
   577 				buf += sprintf(buf, "%d", i);
   577 			} else {
   578 			} else {
   663 			case SLE_VAR_I16:
   664 			case SLE_VAR_I16:
   664 			case SLE_VAR_U16:
   665 			case SLE_VAR_U16:
   665 			case SLE_VAR_I32: {
   666 			case SLE_VAR_I32: {
   666 				/* Override the minimum value. No value below sdb->min, except special value 0 */
   667 				/* Override the minimum value. No value below sdb->min, except special value 0 */
   667 				int32 min = ((sdb->flags & SGF_0ISDISABLED) && val <= sdb->min) ? 0 : sdb->min;
   668 				int32 min = ((sdb->flags & SGF_0ISDISABLED) && val <= sdb->min) ? 0 : sdb->min;
   668 				val = clamp(val, min, sdb->max);
   669 				val = Clamp(val, min, sdb->max);
   669 			} break;
   670 			} break;
   670 			case SLE_VAR_U32: {
   671 			case SLE_VAR_U32: {
   671 				/* Override the minimum value. No value below sdb->min, except special value 0 */
   672 				/* Override the minimum value. No value below sdb->min, except special value 0 */
   672 				uint min = ((sdb->flags & SGF_0ISDISABLED) && (uint)val <= (uint)sdb->min) ? 0 : sdb->min;
   673 				uint min = ((sdb->flags & SGF_0ISDISABLED) && (uint)val <= (uint)sdb->min) ? 0 : sdb->min;
   673 				WriteValue(ptr, SLE_VAR_U32, (int64)clampu(val, min, sdb->max));
   674 				WriteValue(ptr, SLE_VAR_U32, (int64)ClampU(val, min, sdb->max));
   674 				return;
   675 				return;
   675 			}
   676 			}
   676 			case SLE_VAR_I64:
   677 			case SLE_VAR_I64:
   677 			case SLE_VAR_U64:
   678 			case SLE_VAR_U64:
   678 			default: NOT_REACHED(); break;
   679 			default: NOT_REACHED(); break;
  1078 #define D0 SGF_0ISDISABLED
  1079 #define D0 SGF_0ISDISABLED
  1079 #define NC SGF_NOCOMMA
  1080 #define NC SGF_NOCOMMA
  1080 #define MS SGF_MULTISTRING
  1081 #define MS SGF_MULTISTRING
  1081 #define NO SGF_NETWORK_ONLY
  1082 #define NO SGF_NETWORK_ONLY
  1082 #define CR SGF_CURRENCY
  1083 #define CR SGF_CURRENCY
       
  1084 #define NN SGF_NO_NETWORK
  1083 
  1085 
  1084 #include "table/strings.h"
  1086 #include "table/strings.h"
  1085 
  1087 
  1086 /* Begin - Callback Functions for the various settings */
  1088 /* Begin - Callback Functions for the various settings */
  1087 #include "window.h"
  1089 #include "window.h"
  1267 	 SDTG_BOOL("medium_aa",                  S, 0, _freetype.medium_aa,   false,    STR_NULL, NULL),
  1269 	 SDTG_BOOL("medium_aa",                  S, 0, _freetype.medium_aa,   false,    STR_NULL, NULL),
  1268 	 SDTG_BOOL("large_aa",                   S, 0, _freetype.large_aa,    false,    STR_NULL, NULL),
  1270 	 SDTG_BOOL("large_aa",                   S, 0, _freetype.large_aa,    false,    STR_NULL, NULL),
  1269 #endif
  1271 #endif
  1270 	  SDTG_VAR("sprite_cache_size",SLE_UINT, S, 0, _sprite_cache_size,     4, 1, 64, 0, STR_NULL, NULL),
  1272 	  SDTG_VAR("sprite_cache_size",SLE_UINT, S, 0, _sprite_cache_size,     4, 1, 64, 0, STR_NULL, NULL),
  1271 	  SDTG_VAR("player_face",    SLE_UINT32, S, 0, _player_face,      0,0,0xFFFFFFFF,0, STR_NULL, NULL),
  1273 	  SDTG_VAR("player_face",    SLE_UINT32, S, 0, _player_face,      0,0,0xFFFFFFFF,0, STR_NULL, NULL),
       
  1274 	  SDTG_VAR("transparency_options", SLE_UINT8, S, 0, _transparency_opt, 0, 0,0xFF,0, STR_NULL, NULL),
  1272 	  SDTG_END()
  1275 	  SDTG_END()
  1273 };
  1276 };
  1274 
  1277 
  1275 #ifdef ENABLE_NETWORK
  1278 #ifdef ENABLE_NETWORK
  1276 static const SettingDescGlobVarList _network_settings[] = {
  1279 static const SettingDescGlobVarList _network_settings[] = {
  1365 	 SDT_VAR(Patches, loading_indicators, SLE_UINT8, S,MS,  1, 0,  2, 0, STR_CONFIG_PATCHES_LOADING_INDICATORS,    RedrawScreen),
  1368 	 SDT_VAR(Patches, loading_indicators, SLE_UINT8, S,MS,  1, 0,  2, 0, STR_CONFIG_PATCHES_LOADING_INDICATORS,    RedrawScreen),
  1366 	 SDT_VAR(Patches, default_rail_type,  SLE_UINT8, S,MS,  4, 0,  6, 0, STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE,     NULL),
  1369 	 SDT_VAR(Patches, default_rail_type,  SLE_UINT8, S,MS,  4, 0,  6, 0, STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE,     NULL),
  1367 
  1370 
  1368 	/***************************************************************************/
  1371 	/***************************************************************************/
  1369 	/* Construction section of the GUI-configure patches window */
  1372 	/* Construction section of the GUI-configure patches window */
  1370 	SDT_BOOL(Patches, build_on_slopes,               0, 0,  true,        STR_CONFIG_PATCHES_BUILDONSLOPES,       NULL),
  1373 	SDT_BOOL(Patches, build_on_slopes,               0,NN,  true,        STR_CONFIG_PATCHES_BUILDONSLOPES,       NULL),
  1371 	SDT_CONDBOOL(Patches, autoslope,                75, SL_MAX_VERSION, 0, 0, true,  STR_CONFIG_PATCHES_AUTOSLOPE,            NULL),
  1374 	SDT_CONDBOOL(Patches, autoslope,                75, SL_MAX_VERSION, 0, 0, true,  STR_CONFIG_PATCHES_AUTOSLOPE,            NULL),
  1372 	SDT_BOOL(Patches, extra_dynamite,                0, 0, false,        STR_CONFIG_PATCHES_EXTRADYNAMITE,       NULL),
  1375 	SDT_BOOL(Patches, extra_dynamite,                0, 0, false,        STR_CONFIG_PATCHES_EXTRADYNAMITE,       NULL),
  1373 	SDT_BOOL(Patches, longbridges,                   0, 0,  true,        STR_CONFIG_PATCHES_LONGBRIDGES,         NULL),
  1376 	SDT_BOOL(Patches, longbridges,                   0,NN,  true,        STR_CONFIG_PATCHES_LONGBRIDGES,         NULL),
  1374 	SDT_BOOL(Patches, signal_side,                   N, 0,  true,        STR_CONFIG_PATCHES_SIGNALSIDE,          RedrawScreen),
  1377 	SDT_BOOL(Patches, signal_side,                   N,NN,  true,        STR_CONFIG_PATCHES_SIGNALSIDE,          RedrawScreen),
  1375 	SDT_BOOL(Patches, always_small_airport,          0, 0, false,        STR_CONFIG_PATCHES_SMALL_AIRPORTS,      NULL),
  1378 	SDT_BOOL(Patches, always_small_airport,          0,NN, false,        STR_CONFIG_PATCHES_SMALL_AIRPORTS,      NULL),
  1376 	 SDT_VAR(Patches, drag_signals_density,SLE_UINT8,S, 0,  4, 1, 20, 0, STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY,NULL),
  1379 	 SDT_VAR(Patches, drag_signals_density,SLE_UINT8,S, 0,  4, 1, 20, 0, STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY,NULL),
  1377 	 SDT_VAR(Patches, semaphore_build_before,SLE_INT32, S, NC, 1975, MIN_YEAR, MAX_YEAR, 1, STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE, NULL),
  1380 	 SDT_VAR(Patches, semaphore_build_before,SLE_INT32, S, NC, 1975, MIN_YEAR, MAX_YEAR, 1, STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE, NULL),
  1378 	SDT_CONDVAR(Patches, town_layout, SLE_UINT8, 59, SL_MAX_VERSION, 0, MS, TL_ORIGINAL, TL_NO_ROADS, NUM_TLS - 1, 1, STR_CONFIG_PATCHES_TOWN_LAYOUT, CheckTownLayout),
  1381 	SDT_CONDVAR(Patches, town_layout, SLE_UINT8, 59, SL_MAX_VERSION, 0, MS, TL_ORIGINAL, TL_NO_ROADS, NUM_TLS - 1, 1, STR_CONFIG_PATCHES_TOWN_LAYOUT, CheckTownLayout),
  1379 
  1382 
  1380 	/***************************************************************************/
  1383 	/***************************************************************************/
  1381 	/* Vehicle section of the GUI-configure patches window */
  1384 	/* Vehicle section of the GUI-configure patches window */
  1382 	SDT_BOOL(Patches, realistic_acceleration,        0, 0, false,                    STR_CONFIG_PATCHES_REALISTICACCEL,       NULL),
  1385 	SDT_BOOL(Patches, realistic_acceleration,        0, 0, false,                    STR_CONFIG_PATCHES_REALISTICACCEL,       NULL),
  1383 	SDT_BOOL(Patches, forbid_90_deg,                 0, 0, false,                    STR_CONFIG_PATCHES_FORBID_90_DEG,        NULL),
  1386 	SDT_BOOL(Patches, forbid_90_deg,                 0, 0, false,                    STR_CONFIG_PATCHES_FORBID_90_DEG,        NULL),
  1384 	SDT_BOOL(Patches, mammoth_trains,                0, 0,  true,                    STR_CONFIG_PATCHES_MAMMOTHTRAINS,        NULL),
  1387 	SDT_BOOL(Patches, mammoth_trains,                0,NN,  true,                    STR_CONFIG_PATCHES_MAMMOTHTRAINS,        NULL),
  1385 	SDT_BOOL(Patches, gotodepot,                     0, 0,  true,                    STR_CONFIG_PATCHES_GOTODEPOT,            NULL),
  1388 	SDT_BOOL(Patches, gotodepot,                     0, 0,  true,                    STR_CONFIG_PATCHES_GOTODEPOT,            NULL),
  1386 	SDT_BOOL(Patches, roadveh_queue,                 0, 0,  true,                    STR_CONFIG_PATCHES_ROADVEH_QUEUE,        NULL),
  1389 	SDT_BOOL(Patches, roadveh_queue,                 0, 0,  true,                    STR_CONFIG_PATCHES_ROADVEH_QUEUE,        NULL),
  1387 	SDT_BOOL(Patches, new_pathfinding_all,           0, 0, false,                    STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL,  NULL),
  1390 	SDT_BOOL(Patches, new_pathfinding_all,           0, 0, false,                    STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL,  NULL),
  1388 
  1391 
  1389 	SDT_CONDBOOL(Patches, yapf.ship_use_yapf,      28, SL_MAX_VERSION, 0, 0, false,  STR_CONFIG_PATCHES_YAPF_SHIPS,      NULL),
  1392 	SDT_CONDBOOL(Patches, yapf.ship_use_yapf,      28, SL_MAX_VERSION, 0, 0, false,  STR_CONFIG_PATCHES_YAPF_SHIPS,      NULL),
  1390 	SDT_CONDBOOL(Patches, yapf.road_use_yapf,      28, SL_MAX_VERSION, 0, 0,  true,  STR_CONFIG_PATCHES_YAPF_ROAD,       NULL),
  1393 	SDT_CONDBOOL(Patches, yapf.road_use_yapf,      28, SL_MAX_VERSION, 0, 0,  true,  STR_CONFIG_PATCHES_YAPF_ROAD,       NULL),
  1391 	SDT_CONDBOOL(Patches, yapf.rail_use_yapf,      28, SL_MAX_VERSION, 0, 0,  true,  STR_CONFIG_PATCHES_YAPF_RAIL,       NULL),
  1394 	SDT_CONDBOOL(Patches, yapf.rail_use_yapf,      28, SL_MAX_VERSION, 0, 0,  true,  STR_CONFIG_PATCHES_YAPF_RAIL,       NULL),
  1392 
  1395 
  1393 	SDT_BOOL(Patches, train_income_warn,             S, 0,  true,                    STR_CONFIG_PATCHES_WARN_INCOME_LESS,     NULL),
  1396 	SDT_BOOL(Patches, train_income_warn,             S, 0,  true,                    STR_CONFIG_PATCHES_WARN_INCOME_LESS,     NULL),
  1394 	 SDT_VAR(Patches, order_review_system,SLE_UINT8, S,MS,     2,     0,       2, 0, STR_CONFIG_PATCHES_ORDER_REVIEW,         NULL),
  1397 	 SDT_VAR(Patches, order_review_system,SLE_UINT8, S,MS,     2,     0,       2, 0, STR_CONFIG_PATCHES_ORDER_REVIEW,         NULL),
  1395 	SDT_BOOL(Patches, never_expire_vehicles,         0, 0, false,                    STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES,NULL),
  1398 	SDT_BOOL(Patches, never_expire_vehicles,         0,NN, false,                    STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES,NULL),
  1396 	SDT_BOOL(Patches, lost_train_warn,               S, 0,  true,                    STR_CONFIG_PATCHES_WARN_LOST_TRAIN,      NULL),
  1399 	SDT_BOOL(Patches, lost_train_warn,               S, 0,  true,                    STR_CONFIG_PATCHES_WARN_LOST_TRAIN,      NULL),
  1397 	SDT_BOOL(Patches, autorenew,                     S, 0, false,                    STR_CONFIG_PATCHES_AUTORENEW_VEHICLE,    EngineRenewUpdate),
  1400 	SDT_BOOL(Patches, autorenew,                     S, 0, false,                    STR_CONFIG_PATCHES_AUTORENEW_VEHICLE,    EngineRenewUpdate),
  1398 	 SDT_VAR(Patches, autorenew_months,   SLE_INT16, S, 0,     6,   -12,      12, 0, STR_CONFIG_PATCHES_AUTORENEW_MONTHS,     EngineRenewMonthsUpdate),
  1401 	 SDT_VAR(Patches, autorenew_months,   SLE_INT16, S, 0,     6,   -12,      12, 0, STR_CONFIG_PATCHES_AUTORENEW_MONTHS,     EngineRenewMonthsUpdate),
  1399 	 SDT_VAR(Patches, autorenew_money,     SLE_UINT, S,CR,100000,     0, 2000000, 0, STR_CONFIG_PATCHES_AUTORENEW_MONEY,      EngineRenewMoneyUpdate),
  1402 	 SDT_VAR(Patches, autorenew_money,     SLE_UINT, S,CR,100000,     0, 2000000, 0, STR_CONFIG_PATCHES_AUTORENEW_MONEY,      EngineRenewMoneyUpdate),
  1400 	SDT_BOOL(Patches, always_build_infrastructure,   S, 0, false,                    STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE, RedrawScreen),
  1403 	SDT_BOOL(Patches, always_build_infrastructure,   S, 0, false,                    STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE, RedrawScreen),
  1406 	 SDT_VAR(Patches, servint_trains,    SLE_UINT16, 0,D0,   150,     5,     800, 0, STR_CONFIG_PATCHES_SERVINT_TRAINS,       InValidateDetailsWindow),
  1409 	 SDT_VAR(Patches, servint_trains,    SLE_UINT16, 0,D0,   150,     5,     800, 0, STR_CONFIG_PATCHES_SERVINT_TRAINS,       InValidateDetailsWindow),
  1407 	 SDT_VAR(Patches, servint_roadveh,   SLE_UINT16, 0,D0,   150,     5,     800, 0, STR_CONFIG_PATCHES_SERVINT_ROADVEH,      InValidateDetailsWindow),
  1410 	 SDT_VAR(Patches, servint_roadveh,   SLE_UINT16, 0,D0,   150,     5,     800, 0, STR_CONFIG_PATCHES_SERVINT_ROADVEH,      InValidateDetailsWindow),
  1408 	 SDT_VAR(Patches, servint_ships,     SLE_UINT16, 0,D0,   360,     5,     800, 0, STR_CONFIG_PATCHES_SERVINT_SHIPS,        InValidateDetailsWindow),
  1411 	 SDT_VAR(Patches, servint_ships,     SLE_UINT16, 0,D0,   360,     5,     800, 0, STR_CONFIG_PATCHES_SERVINT_SHIPS,        InValidateDetailsWindow),
  1409 	 SDT_VAR(Patches, servint_aircraft,  SLE_UINT16, 0,D0,   100,     5,     800, 0, STR_CONFIG_PATCHES_SERVINT_AIRCRAFT,     InValidateDetailsWindow),
  1412 	 SDT_VAR(Patches, servint_aircraft,  SLE_UINT16, 0,D0,   100,     5,     800, 0, STR_CONFIG_PATCHES_SERVINT_AIRCRAFT,     InValidateDetailsWindow),
  1410 	SDT_BOOL(Patches, no_servicing_if_no_breakdowns, 0, 0, false,                    STR_CONFIG_PATCHES_NOSERVICE,            NULL),
  1413 	SDT_BOOL(Patches, no_servicing_if_no_breakdowns, 0, 0, false,                    STR_CONFIG_PATCHES_NOSERVICE,            NULL),
  1411 	SDT_BOOL(Patches, wagon_speed_limits,            0, 0,  true,                    STR_CONFIG_PATCHES_WAGONSPEEDLIMITS,     UpdateConsists),
  1414 	SDT_BOOL(Patches, wagon_speed_limits,            0,NN,  true,                    STR_CONFIG_PATCHES_WAGONSPEEDLIMITS,     UpdateConsists),
  1412 	SDT_CONDBOOL(Patches, disable_elrails, 38, SL_MAX_VERSION, 0, 0, false,          STR_CONFIG_PATCHES_DISABLE_ELRAILS,      SettingsDisableElrail),
  1415 	SDT_CONDBOOL(Patches, disable_elrails, 38, SL_MAX_VERSION, 0, NN, false,         STR_CONFIG_PATCHES_DISABLE_ELRAILS,      SettingsDisableElrail),
  1413 	SDT_CONDVAR(Patches, freight_trains, SLE_UINT8, 39, SL_MAX_VERSION, 0, 0, 1, 1, 255, 1, STR_CONFIG_PATCHES_FREIGHT_TRAINS, NULL),
  1416 	SDT_CONDVAR(Patches, freight_trains, SLE_UINT8, 39, SL_MAX_VERSION, 0,NN, 1, 1, 255, 1, STR_CONFIG_PATCHES_FREIGHT_TRAINS, NULL),
  1414 	SDT_CONDBOOL(Patches, timetabling,              67, SL_MAX_VERSION, 0, 0, true,  STR_CONFIG_PATCHES_TIMETABLE_ALLOW,      NULL),
  1417 	SDT_CONDBOOL(Patches, timetabling,              67, SL_MAX_VERSION, 0, 0, true,  STR_CONFIG_PATCHES_TIMETABLE_ALLOW,      NULL),
  1415 
  1418 
  1416 	/***************************************************************************/
  1419 	/***************************************************************************/
  1417 	/* Station section of the GUI-configure patches window */
  1420 	/* Station section of the GUI-configure patches window */
  1418 	SDT_BOOL(Patches, join_stations,           0, 0,  true,        STR_CONFIG_PATCHES_JOINSTATIONS,       NULL),
  1421 	SDT_BOOL(Patches, join_stations,           0, 0,  true,        STR_CONFIG_PATCHES_JOINSTATIONS,       NULL),
  1419 	SDT_BOOL(Patches, full_load_any,           0, 0,  true,        STR_CONFIG_PATCHES_FULLLOADANY,        NULL),
  1422 	SDT_BOOL(Patches, full_load_any,           0,NN,  true,        STR_CONFIG_PATCHES_FULLLOADANY,        NULL),
  1420 	SDT_BOOL(Patches, improved_load,           0, 0, false,        STR_CONFIG_PATCHES_IMPROVEDLOAD,       NULL),
  1423 	SDT_BOOL(Patches, improved_load,           0,NN, false,        STR_CONFIG_PATCHES_IMPROVEDLOAD,       NULL),
  1421 	SDT_BOOL(Patches, selectgoods,             0, 0,  true,        STR_CONFIG_PATCHES_SELECTGOODS,        NULL),
  1424 	SDT_BOOL(Patches, selectgoods,             0, 0,  true,        STR_CONFIG_PATCHES_SELECTGOODS,        NULL),
  1422 	SDT_BOOL(Patches, new_nonstop,             0, 0, false,        STR_CONFIG_PATCHES_NEW_NONSTOP,        NULL),
  1425 	SDT_BOOL(Patches, new_nonstop,             0, 0, false,        STR_CONFIG_PATCHES_NEW_NONSTOP,        NULL),
  1423 	SDT_BOOL(Patches, nonuniform_stations,     0, 0,  true,        STR_CONFIG_PATCHES_NONUNIFORM_STATIONS,NULL),
  1426 	SDT_BOOL(Patches, nonuniform_stations,     0,NN,  true,        STR_CONFIG_PATCHES_NONUNIFORM_STATIONS,NULL),
  1424 	 SDT_VAR(Patches, station_spread,SLE_UINT8,0, 0, 12, 4, 64, 0, STR_CONFIG_PATCHES_STATION_SPREAD,     InvalidateStationBuildWindow),
  1427 	 SDT_VAR(Patches, station_spread,SLE_UINT8,0, 0, 12, 4, 64, 0, STR_CONFIG_PATCHES_STATION_SPREAD,     InvalidateStationBuildWindow),
  1425 	SDT_BOOL(Patches, serviceathelipad,        0, 0,  true,        STR_CONFIG_PATCHES_SERVICEATHELIPAD,   NULL),
  1428 	SDT_BOOL(Patches, serviceathelipad,        0, 0,  true,        STR_CONFIG_PATCHES_SERVICEATHELIPAD,   NULL),
  1426 	SDT_BOOL(Patches, modified_catchment,      0, 0,  true,        STR_CONFIG_PATCHES_CATCHMENT,          NULL),
  1429 	SDT_BOOL(Patches, modified_catchment,      0, 0,  true,        STR_CONFIG_PATCHES_CATCHMENT,          NULL),
  1427 	SDT_CONDBOOL(Patches, gradual_loading, 40, SL_MAX_VERSION, 0, 0,  true, STR_CONFIG_PATCHES_GRADUAL_LOADING,    NULL),
  1430 	SDT_CONDBOOL(Patches, gradual_loading, 40, SL_MAX_VERSION, 0, 0,  true, STR_CONFIG_PATCHES_GRADUAL_LOADING,    NULL),
  1428 	SDT_CONDBOOL(Patches, road_stop_on_town_road, 47, SL_MAX_VERSION, 0, 0, false, STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD, NULL),
  1431 	SDT_CONDBOOL(Patches, road_stop_on_town_road, 47, SL_MAX_VERSION, 0, 0, false, STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD, NULL),
  1659 		if (!FillGRFDetails(c, is_static)) {
  1662 		if (!FillGRFDetails(c, is_static)) {
  1660 			const char *msg;
  1663 			const char *msg;
  1661 
  1664 
  1662 			if (c->status == GCS_NOT_FOUND) {
  1665 			if (c->status == GCS_NOT_FOUND) {
  1663 				msg = "not found";
  1666 				msg = "not found";
  1664 			} else if (HASBIT(c->flags, GCF_UNSAFE)) {
  1667 			} else if (HasBit(c->flags, GCF_UNSAFE)) {
  1665 				msg = "unsafe for static use";
  1668 				msg = "unsafe for static use";
  1666 			} else if (HASBIT(c->flags, GCF_SYSTEM)) {
  1669 			} else if (HasBit(c->flags, GCF_SYSTEM)) {
  1667 				msg = "system NewGRF";
  1670 				msg = "system NewGRF";
  1668 			} else {
  1671 			} else {
  1669 				msg = "unknown";
  1672 				msg = "unknown";
  1670 			}
  1673 			}
  1671 
  1674 
  1673 			ClearGRFConfig(&c);
  1676 			ClearGRFConfig(&c);
  1674 			continue;
  1677 			continue;
  1675 		}
  1678 		}
  1676 
  1679 
  1677 		/* Mark file as static to avoid saving in savegame. */
  1680 		/* Mark file as static to avoid saving in savegame. */
  1678 		if (is_static) SETBIT(c->flags, GCF_STATIC);
  1681 		if (is_static) SetBit(c->flags, GCF_STATIC);
  1679 
  1682 
  1680 		/* Add item to list */
  1683 		/* Add item to list */
  1681 		*curr = c;
  1684 		*curr = c;
  1682 		curr = &c->next;
  1685 		curr = &c->next;
  1683 	}
  1686 	}
  1793 	const SettingDesc *sd = GetSettingDescription(p1);
  1796 	const SettingDesc *sd = GetSettingDescription(p1);
  1794 
  1797 
  1795 	if (sd == NULL) return CMD_ERROR;
  1798 	if (sd == NULL) return CMD_ERROR;
  1796 	if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) return CMD_ERROR;
  1799 	if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) return CMD_ERROR;
  1797 
  1800 
       
  1801 	if ((sd->desc.flags & SGF_NO_NETWORK) && _networking) return CMD_ERROR;
       
  1802 
  1798 	if (flags & DC_EXEC) {
  1803 	if (flags & DC_EXEC) {
  1799 		Patches *patches_ptr = (_game_mode == GM_MENU) ? &_patches_newgame : &_patches;
  1804 		Patches *patches_ptr = (_game_mode == GM_MENU) ? &_patches_newgame : &_patches;
  1800 		void *var = GetVariableAddress(patches_ptr, &sd->save);
  1805 		void *var = GetVariableAddress(patches_ptr, &sd->save);
  1801 		Write_ValidateSetting(var, sd, (int32)p2);
  1806 		Write_ValidateSetting(var, sd, (int32)p2);
  1802 		if (sd->desc.proc != NULL) sd->desc.proc((int32)ReadValue(var, sd->save.conv));
  1807 		if (sd->desc.proc != NULL) sd->desc.proc((int32)ReadValue(var, sd->save.conv));