Allow various settings to be changed in multiplayer
If the corresponding TTDPatch flag bit has not been observed by a NewGRF
This commit is contained in:
@@ -2538,6 +2538,9 @@ STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_OFF :Off
|
|||||||
STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_WITHIN_TOWN :Within town
|
STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_WITHIN_TOWN :Within town
|
||||||
STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_ANYWHERE :Anywhere
|
STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_ANYWHERE :Anywhere
|
||||||
|
|
||||||
|
STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED :{WHITE}Can't change setting...
|
||||||
|
STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED_NEWGRF :{WHITE}...setting is observed by a NewGRF
|
||||||
|
|
||||||
# Config errors
|
# Config errors
|
||||||
STR_CONFIG_ERROR :{WHITE}Error with the configuration file...
|
STR_CONFIG_ERROR :{WHITE}Error with the configuration file...
|
||||||
STR_CONFIG_ERROR_ARRAY :{WHITE}... error in array '{RAW_STRING}'
|
STR_CONFIG_ERROR_ARRAY :{WHITE}... error in array '{RAW_STRING}'
|
||||||
|
@@ -86,6 +86,7 @@ byte _misc_grf_features = 0;
|
|||||||
|
|
||||||
/** 32 * 8 = 256 flags. Apparently TTDPatch uses this many.. */
|
/** 32 * 8 = 256 flags. Apparently TTDPatch uses this many.. */
|
||||||
static uint32 _ttdpatch_flags[8];
|
static uint32 _ttdpatch_flags[8];
|
||||||
|
static uint32 _observed_ttdpatch_flags[8];
|
||||||
|
|
||||||
/** Indicates which are the newgrf features currently loaded ingame */
|
/** Indicates which are the newgrf features currently loaded ingame */
|
||||||
GRFLoadedFeatures _loaded_newgrf_features;
|
GRFLoadedFeatures _loaded_newgrf_features;
|
||||||
@@ -7315,8 +7316,14 @@ static uint32 GetParamVal(byte param, uint32 *cond_val)
|
|||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
uint32 index = *cond_val / 0x20;
|
uint32 index = *cond_val / 0x20;
|
||||||
uint32 param_val = index < lengthof(_ttdpatch_flags) ? _ttdpatch_flags[index] : 0;
|
|
||||||
*cond_val %= 0x20;
|
*cond_val %= 0x20;
|
||||||
|
uint32 param_val = 0;
|
||||||
|
if (index < lengthof(_ttdpatch_flags)) {
|
||||||
|
param_val = _ttdpatch_flags[index];
|
||||||
|
if (!HasBit(_cur.grfconfig->flags, GCF_STATIC) && !HasBit(_cur.grfconfig->flags, GCF_SYSTEM)) {
|
||||||
|
SetBit(_observed_ttdpatch_flags[index], *cond_val);
|
||||||
|
}
|
||||||
|
}
|
||||||
return param_val;
|
return param_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9954,6 +9961,15 @@ static void InitializeGRFSpecial()
|
|||||||
|
|
||||||
_ttdpatch_flags[4] = (1U << 0x00) // larger persistent storage
|
_ttdpatch_flags[4] = (1U << 0x00) // larger persistent storage
|
||||||
| ((_settings_game.economy.inflation ? 1U : 0U) << 0x01); // inflation is on
|
| ((_settings_game.economy.inflation ? 1U : 0U) << 0x01); // inflation is on
|
||||||
|
MemSetT(_observed_ttdpatch_flags, 0, lengthof(_observed_ttdpatch_flags));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HasTTDPatchFlagBeenObserved(uint flag)
|
||||||
|
{
|
||||||
|
uint index = flag / 0x20;
|
||||||
|
flag %= 0x20;
|
||||||
|
if (index >= lengthof(_ttdpatch_flags)) return false;
|
||||||
|
return HasBit(_observed_ttdpatch_flags[index], flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Reset and clear all NewGRF stations */
|
/** Reset and clear all NewGRF stations */
|
||||||
|
@@ -1701,6 +1701,17 @@ static void TownZoneCustomValueChanged(int32 new_value)
|
|||||||
if (_settings_game.economy.town_zone_calc_mode) UpdateTownRadii();
|
if (_settings_game.economy.town_zone_calc_mode) UpdateTownRadii();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool CheckTTDPatchSettingFlag(uint flag)
|
||||||
|
{
|
||||||
|
extern bool HasTTDPatchFlagBeenObserved(uint flag);
|
||||||
|
if (_networking && HasTTDPatchFlagBeenObserved(flag)) {
|
||||||
|
ShowErrorMessage(STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED, STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED_NEWGRF, WL_ERROR);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Replace a passwords that are a literal asterisk with an empty string.
|
* Replace a passwords that are a literal asterisk with an empty string.
|
||||||
* @param newval The new string value for this password field.
|
* @param newval The new string value for this password field.
|
||||||
|
@@ -71,6 +71,7 @@ static bool CheckSharingWater(int32 &new_value);
|
|||||||
static bool CheckSharingAir(int32 &new_value);
|
static bool CheckSharingAir(int32 &new_value);
|
||||||
static void TownZoneModeChanged(int32 new_value);
|
static void TownZoneModeChanged(int32 new_value);
|
||||||
static void TownZoneCustomValueChanged(int32 new_value);
|
static void TownZoneCustomValueChanged(int32 new_value);
|
||||||
|
static bool CheckTTDPatchSettingFlag(uint flag);
|
||||||
|
|
||||||
/* End - Callback Functions for the various settings */
|
/* End - Callback Functions for the various settings */
|
||||||
|
|
||||||
@@ -777,7 +778,6 @@ strhelp = STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT
|
|||||||
var = construction.max_bridge_length
|
var = construction.max_bridge_length
|
||||||
type = SLE_UINT16
|
type = SLE_UINT16
|
||||||
from = SLV_159
|
from = SLV_159
|
||||||
flags = SF_NO_NETWORK
|
|
||||||
def = 64
|
def = 64
|
||||||
min = 1
|
min = 1
|
||||||
max = 4096
|
max = 4096
|
||||||
@@ -785,6 +785,7 @@ interval = 1
|
|||||||
str = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH
|
str = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH
|
||||||
strhelp = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT
|
||||||
strval = STR_CONFIG_SETTING_TILE_LENGTH
|
strval = STR_CONFIG_SETTING_TILE_LENGTH
|
||||||
|
pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x0F); }
|
||||||
|
|
||||||
[SDT_XREF]
|
[SDT_XREF]
|
||||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 2)
|
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 2)
|
||||||
@@ -862,22 +863,23 @@ to = SLV_159
|
|||||||
[SDT_VAR]
|
[SDT_VAR]
|
||||||
var = construction.train_signal_side
|
var = construction.train_signal_side
|
||||||
type = SLE_UINT8
|
type = SLE_UINT8
|
||||||
flags = SF_GUI_DROPDOWN | SF_NO_NETWORK
|
flags = SF_GUI_DROPDOWN
|
||||||
def = 1
|
def = 1
|
||||||
min = 0
|
min = 0
|
||||||
max = 2
|
max = 2
|
||||||
str = STR_CONFIG_SETTING_SIGNALSIDE
|
str = STR_CONFIG_SETTING_SIGNALSIDE
|
||||||
strhelp = STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT
|
||||||
strval = STR_CONFIG_SETTING_SIGNALSIDE_LEFT
|
strval = STR_CONFIG_SETTING_SIGNALSIDE_LEFT
|
||||||
|
pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x3B); }
|
||||||
post_cb = [](auto) { MarkWholeScreenDirty(); }
|
post_cb = [](auto) { MarkWholeScreenDirty(); }
|
||||||
cat = SC_BASIC
|
cat = SC_BASIC
|
||||||
|
|
||||||
[SDT_BOOL]
|
[SDT_BOOL]
|
||||||
var = station.never_expire_airports
|
var = station.never_expire_airports
|
||||||
flags = SF_NO_NETWORK
|
|
||||||
def = false
|
def = false
|
||||||
str = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS
|
str = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS
|
||||||
strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT
|
||||||
|
pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x0C); }
|
||||||
|
|
||||||
[SDT_VAR]
|
[SDT_VAR]
|
||||||
var = economy.town_layout
|
var = economy.town_layout
|
||||||
@@ -911,10 +913,10 @@ extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 7)
|
|||||||
[SDT_BOOL]
|
[SDT_BOOL]
|
||||||
var = economy.allow_town_roads
|
var = economy.allow_town_roads
|
||||||
from = SLV_113
|
from = SLV_113
|
||||||
flags = SF_NO_NETWORK
|
|
||||||
def = true
|
def = true
|
||||||
str = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS
|
str = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS
|
||||||
strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT
|
||||||
|
pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x62); }
|
||||||
|
|
||||||
[SDT_XREF]
|
[SDT_XREF]
|
||||||
xref = ""economy.old_town_cargo_factor""
|
xref = ""economy.old_town_cargo_factor""
|
||||||
@@ -1736,10 +1738,10 @@ strhelp = STR_CONFIG_SETTING_NOSERVICE_HELPTEXT
|
|||||||
|
|
||||||
[SDT_BOOL]
|
[SDT_BOOL]
|
||||||
var = vehicle.wagon_speed_limits
|
var = vehicle.wagon_speed_limits
|
||||||
flags = SF_NO_NETWORK
|
|
||||||
def = true
|
def = true
|
||||||
str = STR_CONFIG_SETTING_WAGONSPEEDLIMITS
|
str = STR_CONFIG_SETTING_WAGONSPEEDLIMITS
|
||||||
strhelp = STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT
|
||||||
|
pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x5D); }
|
||||||
post_cb = UpdateConsists
|
post_cb = UpdateConsists
|
||||||
|
|
||||||
;; vehicle.slow_road_vehicles_in_curves
|
;; vehicle.slow_road_vehicles_in_curves
|
||||||
@@ -1782,7 +1784,6 @@ cat = SC_EXPERT
|
|||||||
var = vehicle.freight_trains
|
var = vehicle.freight_trains
|
||||||
type = SLE_UINT8
|
type = SLE_UINT8
|
||||||
from = SLV_39
|
from = SLV_39
|
||||||
flags = SF_NO_NETWORK
|
|
||||||
def = 1
|
def = 1
|
||||||
min = 1
|
min = 1
|
||||||
max = 255
|
max = 255
|
||||||
@@ -1790,6 +1791,7 @@ interval = 1
|
|||||||
str = STR_CONFIG_SETTING_FREIGHT_TRAINS
|
str = STR_CONFIG_SETTING_FREIGHT_TRAINS
|
||||||
strhelp = STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT
|
||||||
strval = STR_JUST_COMMA
|
strval = STR_JUST_COMMA
|
||||||
|
pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x58); }
|
||||||
post_cb = UpdateConsists
|
post_cb = UpdateConsists
|
||||||
|
|
||||||
;; vehicle.freight_mult_to_passengers
|
;; vehicle.freight_mult_to_passengers
|
||||||
@@ -2200,11 +2202,11 @@ extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
|||||||
##
|
##
|
||||||
[SDT_BOOL]
|
[SDT_BOOL]
|
||||||
var = economy.inflation
|
var = economy.inflation
|
||||||
flags = SF_NO_NETWORK
|
|
||||||
def = false
|
def = false
|
||||||
str = STR_CONFIG_SETTING_INFLATION
|
str = STR_CONFIG_SETTING_INFLATION
|
||||||
strhelp = STR_CONFIG_SETTING_INFLATION_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_INFLATION_HELPTEXT
|
||||||
cat = SC_BASIC
|
cat = SC_BASIC
|
||||||
|
pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x81); }
|
||||||
|
|
||||||
[SDT_BOOL]
|
[SDT_BOOL]
|
||||||
var = economy.inflation_fixed_dates
|
var = economy.inflation_fixed_dates
|
||||||
|
Reference in New Issue
Block a user