settings.c
changeset 3131 e856656f99a9
parent 3125 f4a655a6f639
child 3152 447059d1ecdd
equal deleted inserted replaced
3130:87a9577f6945 3131:e856656f99a9
   938 #define MS SGF_MULTISTRING
   938 #define MS SGF_MULTISTRING
   939 #define NO SGF_NETWORK_ONLY
   939 #define NO SGF_NETWORK_ONLY
   940 #define CR SGF_CURRENCY
   940 #define CR SGF_CURRENCY
   941 
   941 
   942 #include "table/strings.h"
   942 #include "table/strings.h"
       
   943 
       
   944 /* Begin - Callback Functions for the various settings */
       
   945 #include "window.h"
       
   946 #include "gui.h"
       
   947 #include "town.h"
       
   948 #include "gfx.h"
       
   949 // virtual PositionMainToolbar function, calls the right one.
       
   950 static int32 v_PositionMainToolbar(int32 p1)
       
   951 {
       
   952 	if (_game_mode != GM_MENU) PositionMainToolbar(NULL);
       
   953 	return 0;
       
   954 }
       
   955 
       
   956 static int32 AiNew_PatchActive_Warning(int32 p1)
       
   957 {
       
   958 	if (p1 == 1) ShowErrorMessage(INVALID_STRING_ID, TEMP_AI_ACTIVATED, 0, 0);
       
   959 	return 0;
       
   960 }
       
   961 
       
   962 static int32 Ai_In_Multiplayer_Warning(int32 p1)
       
   963 {
       
   964 	if (p1 == 1) {
       
   965 		ShowErrorMessage(INVALID_STRING_ID, TEMP_AI_MULTIPLAYER, 0, 0);
       
   966 		_patches.ainew_active = true;
       
   967 	}
       
   968 	return 0;
       
   969 }
       
   970 
       
   971 static int32 PopulationInLabelActive(int32 p1)
       
   972 {
       
   973 	Town* t;
       
   974 
       
   975 	FOR_ALL_TOWNS(t) {
       
   976 		if (t->xy != 0) UpdateTownVirtCoord(t);
       
   977 	}
       
   978 	return 0;
       
   979 }
       
   980 
       
   981 static int32 InvisibleTreesActive(int32 p1)
       
   982 {
       
   983 	MarkWholeScreenDirty();
       
   984 	return 0;
       
   985 }
       
   986 
       
   987 static int32 InValidateDetailsWindow(int32 p1)
       
   988 {
       
   989 	InvalidateWindowClasses(WC_VEHICLE_DETAILS);
       
   990 	return 0;
       
   991 }
       
   992 
       
   993 static int32 InvalidateStationBuildWindow(int32 p1)
       
   994 {
       
   995 	InvalidateWindow(WC_BUILD_STATION, 0);
       
   996 	return 0;
       
   997 }
       
   998 
       
   999 /* Check service intervals of vehicles, p1 is value of % or day based servicing */
       
  1000 static int32 CheckInterval(int32 p1)
       
  1001 {
       
  1002 	bool warning;
       
  1003 	const Patches *ptc = (_game_mode == GM_MENU) ? &_patches_newgame : &_patches;
       
  1004 
       
  1005 	if (p1) {
       
  1006 		warning = ( (IS_INT_INSIDE(ptc->servint_trains,   5, 90+1) || ptc->servint_trains   == 0) &&
       
  1007 								(IS_INT_INSIDE(ptc->servint_roadveh,  5, 90+1) || ptc->servint_roadveh  == 0) &&
       
  1008 								(IS_INT_INSIDE(ptc->servint_aircraft, 5, 90+1) || ptc->servint_aircraft == 0) &&
       
  1009 								(IS_INT_INSIDE(ptc->servint_ships,    5, 90+1) || ptc->servint_ships    == 0) );
       
  1010 	} else {
       
  1011 		warning = ( (IS_INT_INSIDE(ptc->servint_trains,   30, 800+1) || ptc->servint_trains   == 0) &&
       
  1012 								(IS_INT_INSIDE(ptc->servint_roadveh,  30, 800+1) || ptc->servint_roadveh  == 0) &&
       
  1013 								(IS_INT_INSIDE(ptc->servint_aircraft, 30, 800+1) || ptc->servint_aircraft == 0) &&
       
  1014 								(IS_INT_INSIDE(ptc->servint_ships,    30, 800+1) || ptc->servint_ships    == 0) );
       
  1015 	}
       
  1016 
       
  1017 	if (!warning)
       
  1018 		ShowErrorMessage(INVALID_STRING_ID, STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE, 0, 0);
       
  1019 
       
  1020 	return InValidateDetailsWindow(0);
       
  1021 }
       
  1022 
       
  1023 static int32 EngineRenewUpdate(int32 p1)
       
  1024 {
       
  1025 	DoCommandP(0, 0, _patches.autorenew, NULL, CMD_REPLACE_VEHICLE);
       
  1026 	return 0;
       
  1027 }
       
  1028 
       
  1029 static int32 EngineRenewMonthsUpdate(int32 p1)
       
  1030 {
       
  1031 	DoCommandP(0, 1, _patches.autorenew_months, NULL, CMD_REPLACE_VEHICLE);
       
  1032 	return 0;
       
  1033 }
       
  1034 
       
  1035 static int32 EngineRenewMoneyUpdate(int32 p1)
       
  1036 {
       
  1037 	DoCommandP(0, 2, _patches.autorenew_money, NULL, CMD_REPLACE_VEHICLE);
       
  1038 	return 0;
       
  1039 }
       
  1040 /* End - Callback Functions */
       
  1041 
   943 #ifndef EXTERNAL_PLAYER
  1042 #ifndef EXTERNAL_PLAYER
   944 #define EXTERNAL_PLAYER "timidity"
  1043 #define EXTERNAL_PLAYER "timidity"
   945 #endif
  1044 #endif
   946 
  1045 
   947 static const SettingDesc _music_settings[] = {
  1046 static const SettingDesc _music_settings[] = {
  1047 	SDT_BOOL(Patches, status_long_date,              S, 0,  true,    STR_CONFIG_PATCHES_LONGDATE,              NULL),
  1146 	SDT_BOOL(Patches, status_long_date,              S, 0,  true,    STR_CONFIG_PATCHES_LONGDATE,              NULL),
  1048 	SDT_BOOL(Patches, show_finances,                 S, 0,  true,    STR_CONFIG_PATCHES_SHOWFINANCES,          NULL),
  1147 	SDT_BOOL(Patches, show_finances,                 S, 0,  true,    STR_CONFIG_PATCHES_SHOWFINANCES,          NULL),
  1049 	SDT_BOOL(Patches, autoscroll,                    S, 0, false,    STR_CONFIG_PATCHES_AUTOSCROLL,            NULL),
  1148 	SDT_BOOL(Patches, autoscroll,                    S, 0, false,    STR_CONFIG_PATCHES_AUTOSCROLL,            NULL),
  1050 	SDT_BOOL(Patches, reverse_scroll,                S, 0, false,    STR_CONFIG_PATCHES_REVERSE_SCROLLING,     NULL),
  1149 	SDT_BOOL(Patches, reverse_scroll,                S, 0, false,    STR_CONFIG_PATCHES_REVERSE_SCROLLING,     NULL),
  1051 	 SDT_VAR(Patches, errmsg_duration,    SLE_UINT8, S, 0,  5, 0,20, STR_CONFIG_PATCHES_ERRMSG_DURATION,       NULL),
  1150 	 SDT_VAR(Patches, errmsg_duration,    SLE_UINT8, S, 0,  5, 0,20, STR_CONFIG_PATCHES_ERRMSG_DURATION,       NULL),
  1052 	 SDT_VAR(Patches, toolbar_pos,        SLE_UINT8, S,MS,  0, 0, 2, STR_CONFIG_PATCHES_TOOLBAR_POS,           NULL),//&v_PositionMainToolbar),
  1151 	 SDT_VAR(Patches, toolbar_pos,        SLE_UINT8, S,MS,  0, 0, 2, STR_CONFIG_PATCHES_TOOLBAR_POS,           v_PositionMainToolbar),
  1053 	 SDT_VAR(Patches, window_snap_radius, SLE_UINT8, S,D0, 10, 1,32, STR_CONFIG_PATCHES_SNAP_RADIUS,           NULL),
  1152 	 SDT_VAR(Patches, window_snap_radius, SLE_UINT8, S,D0, 10, 1,32, STR_CONFIG_PATCHES_SNAP_RADIUS,           NULL),
  1054 	SDT_BOOL(Patches, invisible_trees,               S, 0, false,    STR_CONFIG_PATCHES_INVISIBLE_TREES,       NULL),//&InvisibleTreesActive),
  1153 	SDT_BOOL(Patches, invisible_trees,               S, 0, false,    STR_CONFIG_PATCHES_INVISIBLE_TREES,       InvisibleTreesActive),
  1055 	SDT_BOOL(Patches, population_in_label,           S, 0,  true,    STR_CONFIG_PATCHES_POPULATION_IN_LABEL,   NULL),//&PopulationInLabelActive),
  1154 	SDT_BOOL(Patches, population_in_label,           S, 0,  true,    STR_CONFIG_PATCHES_POPULATION_IN_LABEL,   PopulationInLabelActive),
  1056 	 SDT_VAR(Patches, map_x,              SLE_UINT8, S, 0,  8, 6,11, STR_CONFIG_PATCHES_MAP_X,                 NULL),
  1155 	 SDT_VAR(Patches, map_x,              SLE_UINT8, S, 0,  8, 6,11, STR_CONFIG_PATCHES_MAP_X,                 NULL),
  1057 	 SDT_VAR(Patches, map_y,              SLE_UINT8, S, 0,  8, 6,11, STR_CONFIG_PATCHES_MAP_Y,                 NULL),
  1156 	 SDT_VAR(Patches, map_y,              SLE_UINT8, S, 0,  8, 6,11, STR_CONFIG_PATCHES_MAP_Y,                 NULL),
  1058 	SDT_BOOL(Patches, link_terraform_toolbar,        S, 0, false,    STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR,NULL),
  1157 	SDT_BOOL(Patches, link_terraform_toolbar,        S, 0, false,    STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR,NULL),
  1059 
  1158 
  1060 	/***************************************************************************/
  1159 	/***************************************************************************/
  1076 	SDT_BOOL(Patches, new_pathfinding_all,           0, 0, false,                STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL,  NULL),
  1175 	SDT_BOOL(Patches, new_pathfinding_all,           0, 0, false,                STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL,  NULL),
  1077 	SDT_BOOL(Patches, train_income_warn,             S, 0,  true,                STR_CONFIG_PATCHES_WARN_INCOME_LESS,     NULL),
  1176 	SDT_BOOL(Patches, train_income_warn,             S, 0,  true,                STR_CONFIG_PATCHES_WARN_INCOME_LESS,     NULL),
  1078 	 SDT_VAR(Patches, order_review_system,SLE_UINT8, S,MS,     2,      0,     2, STR_CONFIG_PATCHES_ORDER_REVIEW,         NULL),
  1177 	 SDT_VAR(Patches, order_review_system,SLE_UINT8, S,MS,     2,      0,     2, STR_CONFIG_PATCHES_ORDER_REVIEW,         NULL),
  1079 	SDT_BOOL(Patches, never_expire_vehicles,         0, 0, false,                STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES,NULL),
  1178 	SDT_BOOL(Patches, never_expire_vehicles,         0, 0, false,                STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES,NULL),
  1080 	 SDT_VAR(Patches, lost_train_days,   SLE_UINT16, S,D0,   180,    180,   720, STR_CONFIG_PATCHES_LOST_TRAIN_DAYS,      NULL),
  1179 	 SDT_VAR(Patches, lost_train_days,   SLE_UINT16, S,D0,   180,    180,   720, STR_CONFIG_PATCHES_LOST_TRAIN_DAYS,      NULL),
  1081 	SDT_BOOL(Patches, autorenew,                     S, 0, false,                STR_CONFIG_PATCHES_AUTORENEW_VEHICLE,    NULL),//&EngineRenewUpdate),
  1180 	SDT_BOOL(Patches, autorenew,                     S, 0, false,                STR_CONFIG_PATCHES_AUTORENEW_VEHICLE,    EngineRenewUpdate),
  1082 	 SDT_VAR(Patches, autorenew_months,   SLE_INT16, S, 0,     6,    -12,    12, STR_CONFIG_PATCHES_AUTORENEW_MONTHS,     NULL),//&EngineRenewMonthsUpdate),
  1181 	 SDT_VAR(Patches, autorenew_months,   SLE_INT16, S, 0,     6,    -12,    12, STR_CONFIG_PATCHES_AUTORENEW_MONTHS,     EngineRenewMonthsUpdate),
  1083 	 SDT_VAR(Patches, autorenew_money,     SLE_UINT, S,CR,100000,     0,2000000, STR_CONFIG_PATCHES_AUTORENEW_MONEY,      NULL),//&EngineRenewMoneyUpdate),
  1182 	 SDT_VAR(Patches, autorenew_money,     SLE_UINT, S,CR,100000,     0,2000000, STR_CONFIG_PATCHES_AUTORENEW_MONEY,      EngineRenewMoneyUpdate),
  1084 	 SDT_VAR(Patches, max_trains,        SLE_UINT16, 0, 0,   500,     0,   5000, STR_CONFIG_PATCHES_MAX_TRAINS,           NULL),
  1183 	 SDT_VAR(Patches, max_trains,        SLE_UINT16, 0, 0,   500,     0,   5000, STR_CONFIG_PATCHES_MAX_TRAINS,           NULL),
  1085 	 SDT_VAR(Patches, max_roadveh,       SLE_UINT16, 0, 0,   500,     0,   5000, STR_CONFIG_PATCHES_MAX_ROADVEH,          NULL),
  1184 	 SDT_VAR(Patches, max_roadveh,       SLE_UINT16, 0, 0,   500,     0,   5000, STR_CONFIG_PATCHES_MAX_ROADVEH,          NULL),
  1086 	 SDT_VAR(Patches, max_aircraft,      SLE_UINT16, 0, 0,   200,     0,   5000, STR_CONFIG_PATCHES_MAX_AIRCRAFT,         NULL),
  1185 	 SDT_VAR(Patches, max_aircraft,      SLE_UINT16, 0, 0,   200,     0,   5000, STR_CONFIG_PATCHES_MAX_AIRCRAFT,         NULL),
  1087 	 SDT_VAR(Patches, max_ships,         SLE_UINT16, 0, 0,   300,     0,   5000, STR_CONFIG_PATCHES_MAX_SHIPS,            NULL),
  1186 	 SDT_VAR(Patches, max_ships,         SLE_UINT16, 0, 0,   300,     0,   5000, STR_CONFIG_PATCHES_MAX_SHIPS,            NULL),
  1088 	SDT_BOOL(Patches, servint_ispercent,             0, 0, false,                STR_CONFIG_PATCHES_SERVINT_ISPERCENT,    NULL),//&CheckInterval),
  1187 	SDT_BOOL(Patches, servint_ispercent,             0, 0, false,                STR_CONFIG_PATCHES_SERVINT_ISPERCENT,    CheckInterval),
  1089 	 SDT_VAR(Patches, servint_trains,    SLE_UINT16, 0,D0,   150,     5,    800, STR_CONFIG_PATCHES_SERVINT_TRAINS,       NULL),//&InValidateDetailsWindow),
  1188 	 SDT_VAR(Patches, servint_trains,    SLE_UINT16, 0,D0,   150,     5,    800, STR_CONFIG_PATCHES_SERVINT_TRAINS,       NULL),//&InValidateDetailsWindow),
  1090 	 SDT_VAR(Patches, servint_roadveh,   SLE_UINT16, 0,D0,   150,     5,    800, STR_CONFIG_PATCHES_SERVINT_ROADVEH,      NULL),//&InValidateDetailsWindow),
  1189 	 SDT_VAR(Patches, servint_roadveh,   SLE_UINT16, 0,D0,   150,     5,    800, STR_CONFIG_PATCHES_SERVINT_ROADVEH,      InValidateDetailsWindow),
  1091 	 SDT_VAR(Patches, servint_ships,     SLE_UINT16, 0,D0,   360,     5,    800, STR_CONFIG_PATCHES_SERVINT_AIRCRAFT,     NULL),//&InValidateDetailsWindow),
  1190 	 SDT_VAR(Patches, servint_ships,     SLE_UINT16, 0,D0,   360,     5,    800, STR_CONFIG_PATCHES_SERVINT_AIRCRAFT,     InValidateDetailsWindow),
  1092 	 SDT_VAR(Patches, servint_aircraft,  SLE_UINT16, 0,D0,   100,     5,    800, STR_CONFIG_PATCHES_SERVINT_SHIPS,        NULL),//&InValidateDetailsWindow),
  1191 	 SDT_VAR(Patches, servint_aircraft,  SLE_UINT16, 0,D0,   100,     5,    800, STR_CONFIG_PATCHES_SERVINT_SHIPS,        NULL),//&InValidateDetailsWindow),
  1093 	SDT_BOOL(Patches, no_servicing_if_no_breakdowns, 0, 0, false,                STR_CONFIG_PATCHES_NOSERVICE,            NULL),
  1192 	SDT_BOOL(Patches, no_servicing_if_no_breakdowns, 0, 0, false,                STR_CONFIG_PATCHES_NOSERVICE,            NULL),
  1094 	SDT_BOOL(Patches, wagon_speed_limits,            0, 0,  true,                STR_CONFIG_PATCHES_WAGONSPEEDLIMITS,     NULL),
  1193 	SDT_BOOL(Patches, wagon_speed_limits,            0, 0,  true,                STR_CONFIG_PATCHES_WAGONSPEEDLIMITS,     NULL),
  1095 
  1194 
  1096 	/***************************************************************************/
  1195 	/***************************************************************************/
  1099 	SDT_BOOL(Patches, full_load_any,           0, 0,  true,   STR_CONFIG_PATCHES_FULLLOADANY,        NULL),
  1198 	SDT_BOOL(Patches, full_load_any,           0, 0,  true,   STR_CONFIG_PATCHES_FULLLOADANY,        NULL),
  1100 	SDT_BOOL(Patches, improved_load,           0, 0, false,   STR_CONFIG_PATCHES_IMPROVEDLOAD,       NULL),
  1199 	SDT_BOOL(Patches, improved_load,           0, 0, false,   STR_CONFIG_PATCHES_IMPROVEDLOAD,       NULL),
  1101 	SDT_BOOL(Patches, selectgoods,             0, 0,  true,   STR_CONFIG_PATCHES_SELECTGOODS,        NULL),
  1200 	SDT_BOOL(Patches, selectgoods,             0, 0,  true,   STR_CONFIG_PATCHES_SELECTGOODS,        NULL),
  1102 	SDT_BOOL(Patches, new_nonstop,             0, 0, false,   STR_CONFIG_PATCHES_NEW_NONSTOP,        NULL),
  1201 	SDT_BOOL(Patches, new_nonstop,             0, 0, false,   STR_CONFIG_PATCHES_NEW_NONSTOP,        NULL),
  1103 	SDT_BOOL(Patches, nonuniform_stations,     0, 0,  true,   STR_CONFIG_PATCHES_NONUNIFORM_STATIONS,NULL),
  1202 	SDT_BOOL(Patches, nonuniform_stations,     0, 0,  true,   STR_CONFIG_PATCHES_NONUNIFORM_STATIONS,NULL),
  1104 	 SDT_VAR(Patches, station_spread,SLE_UINT8,0, 0, 12, 4,64,STR_CONFIG_PATCHES_STATION_SPREAD,     NULL),//&InvalidateStationBuildWindow),
  1203 	 SDT_VAR(Patches, station_spread,SLE_UINT8,0, 0, 12, 4,64,STR_CONFIG_PATCHES_STATION_SPREAD,     InvalidateStationBuildWindow),
  1105 	SDT_BOOL(Patches, serviceathelipad,        0, 0,  true,   STR_CONFIG_PATCHES_SERVICEATHELIPAD,   NULL),
  1204 	SDT_BOOL(Patches, serviceathelipad,        0, 0,  true,   STR_CONFIG_PATCHES_SERVICEATHELIPAD,   NULL),
  1106 	SDT_BOOL(Patches, modified_catchment,      0, 0,  true,   STR_CONFIG_PATCHES_CATCHMENT,          NULL),
  1205 	SDT_BOOL(Patches, modified_catchment,      0, 0,  true,   STR_CONFIG_PATCHES_CATCHMENT,          NULL),
  1107 
  1206 
  1108 	/***************************************************************************/
  1207 	/***************************************************************************/
  1109 	/* Economy section of the GUI-configure patches window (52 - 62) */
  1208 	/* Economy section of the GUI-configure patches window (52 - 62) */
  1119 	SDT_BOOL(Patches, smooth_economy,             0, 0,  true,            STR_CONFIG_PATCHES_SMOOTH_ECONOMY,   NULL),
  1218 	SDT_BOOL(Patches, smooth_economy,             0, 0,  true,            STR_CONFIG_PATCHES_SMOOTH_ECONOMY,   NULL),
  1120 	SDT_BOOL(Patches, allow_shares,               0, 0,  true,            STR_CONFIG_PATCHES_ALLOW_SHARES,     NULL),
  1219 	SDT_BOOL(Patches, allow_shares,               0, 0,  true,            STR_CONFIG_PATCHES_ALLOW_SHARES,     NULL),
  1121 
  1220 
  1122 	/***************************************************************************/
  1221 	/***************************************************************************/
  1123 	/* AI section of the GUI-configure patches window (63 - 68) */
  1222 	/* AI section of the GUI-configure patches window (63 - 68) */
  1124 	SDT_BOOL(Patches, ainew_active,           0, 0, false, STR_CONFIG_PATCHES_AINEW_ACTIVE,      NULL),//&AiNew_PatchActive_Warning),
  1223 	SDT_BOOL(Patches, ainew_active,           0, 0, false, STR_CONFIG_PATCHES_AINEW_ACTIVE,      AiNew_PatchActive_Warning),
  1125 	SDT_BOOL(Patches, ai_in_multiplayer,      0, 0, false, STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER, NULL),//&Ai_In_Multiplayer_Warning),
  1224 	SDT_BOOL(Patches, ai_in_multiplayer,      0, 0, false, STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER, Ai_In_Multiplayer_Warning),
  1126 	SDT_BOOL(Patches, ai_disable_veh_train,   0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_TRAINS,  NULL),
  1225 	SDT_BOOL(Patches, ai_disable_veh_train,   0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_TRAINS,  NULL),
  1127 	SDT_BOOL(Patches, ai_disable_veh_roadveh, 0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH, NULL),
  1226 	SDT_BOOL(Patches, ai_disable_veh_roadveh, 0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH, NULL),
  1128 	SDT_BOOL(Patches, ai_disable_veh_aircraft,0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT,NULL),
  1227 	SDT_BOOL(Patches, ai_disable_veh_aircraft,0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT,NULL),
  1129 	SDT_BOOL(Patches, ai_disable_veh_ship,    0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_SHIPS,   NULL),
  1228 	SDT_BOOL(Patches, ai_disable_veh_ship,    0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_SHIPS,   NULL),
  1130 
  1229 
  1318 
  1417 
  1319 static const SettingDesc *GetPatchFromName(const char *name, uint *i)
  1418 static const SettingDesc *GetPatchFromName(const char *name, uint *i)
  1320 {
  1419 {
  1321 	const SettingDesc *sd;
  1420 	const SettingDesc *sd;
  1322 
  1421 
  1323 	for (*i = 0, sd = _patch_settings; sd->save.cmd != SL_END; sd++, *i++) {
  1422 	for (*i = 0, sd = _patch_settings; sd->save.cmd != SL_END; sd++, (*i)++) {
  1324 		if (strncmp(sd->desc.name, name, sizeof(sd->desc.name)) == 0) return sd;
  1423 		if (strncmp(sd->desc.name, name, sizeof(sd->desc.name)) == 0) return sd;
  1325 	}
  1424 	}
  1326 
  1425 
  1327 	return NULL;
  1426 	return NULL;
  1328 }
  1427 }
  1330 /* Those 2 functions need to be here, else we have to make some stuff non-static
  1429 /* Those 2 functions need to be here, else we have to make some stuff non-static
  1331  * and besides, it is also better to keep stuff like this at the same place */
  1430  * and besides, it is also better to keep stuff like this at the same place */
  1332 void IConsoleSetPatchSetting(const char *name, const char *value)
  1431 void IConsoleSetPatchSetting(const char *name, const char *value)
  1333 {
  1432 {
  1334 	char newval[20];
  1433 	char newval[20];
  1335 	int val;
  1434 	int32 val;
  1336 	uint index;
  1435 	uint index;
  1337 	const SettingDesc *sd = GetPatchFromName(name, &index);
  1436 	const SettingDesc *sd = GetPatchFromName(name, &index);
  1338 	const Patches *patches_ptr;
  1437 	const Patches *patches_ptr;
  1339 	void *ptr;
  1438 	void *ptr;
  1340 
  1439 
  1346 	sscanf(value, "%d", &val);
  1445 	sscanf(value, "%d", &val);
  1347 	patches_ptr = (_game_mode == GM_MENU) ? &_patches_newgame : &_patches;
  1446 	patches_ptr = (_game_mode == GM_MENU) ? &_patches_newgame : &_patches;
  1348 	ptr = ini_get_variable(&sd->save, patches_ptr);
  1447 	ptr = ini_get_variable(&sd->save, patches_ptr);
  1349 
  1448 
  1350 	SetPatchValue(index, patches_ptr, val);
  1449 	SetPatchValue(index, patches_ptr, val);
       
  1450 	val = ReadValue(ptr, sd->save.conv);
       
  1451 
       
  1452 	if (sd->desc.proc != NULL) sd->desc.proc(val);
  1351 
  1453 
  1352 	if (sd->desc.cmd == SDT_BOOLX) {
  1454 	if (sd->desc.cmd == SDT_BOOLX) {
  1353 		snprintf(newval, sizeof(newval), (*(bool*)ptr == 1) ? "on" : "off");
  1455 		snprintf(newval, sizeof(newval), (val != 0) ? "on" : "off");
  1354 	} else {
  1456 	} else {
  1355 		snprintf(newval, sizeof(newval), "%d", (int32)ReadValue(ptr, sd->save.conv));
  1457 		snprintf(newval, sizeof(newval), "%d", val);
  1356 	}
  1458 	}
  1357 
  1459 
  1358 	IConsolePrintF(_icolour_warn, "'%s' changed to:  %s", name, newval);
  1460 	IConsolePrintF(_icolour_warn, "'%s' changed to:  %s", name, newval);
  1359 }
  1461 }
  1360 
  1462