Change cargo scaling settings to be linear instead of logarithmic

This commit is contained in:
Jonathan G Rennison
2024-01-16 18:02:34 +00:00
parent c8ff26f2b8
commit 1e0bb019a7
21 changed files with 190 additions and 96 deletions

View File

@@ -1229,8 +1229,8 @@ class NIHIndustry : public NIHelper {
output.print(buffer);
seprintf(buffer, lastof(buffer), " CBM_IND_PRODUCTION_256_TICKS: %s", HasBit(indsp->callback_mask, CBM_IND_PRODUCTION_256_TICKS) ? "yes" : "no");
output.print(buffer);
if ((_settings_game.economy.industry_cargo_scale_factor != 0) && HasBit(indsp->callback_mask, CBM_IND_PRODUCTION_256_TICKS)) {
seprintf(buffer, lastof(buffer), " Counter production interval: %u", ScaleQuantity(INDUSTRY_PRODUCE_TICKS, -_settings_game.economy.industry_cargo_scale_factor));
if (_industry_cargo_scaler.HasScaling() && HasBit(indsp->callback_mask, CBM_IND_PRODUCTION_256_TICKS)) {
seprintf(buffer, lastof(buffer), " Counter production interval: %u", _industry_inverse_cargo_scaler.Scale(INDUSTRY_PRODUCE_TICKS));
output.print(buffer);
}
seprintf(buffer, lastof(buffer), " Number of layouts: %u", (uint)indsp->layouts.size());

View File

@@ -93,6 +93,9 @@ static bool CheckTTDPatchSettingFlag(uint flag);
#define SDT_VAR(base, var, type, flags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, from, to, extver, cat, guiproc, startup, patxname)\
NSD(Int, SLE_GENERAL_X(SL_VAR, base, var, type, 1, from, to, extver), #var, flags, guiproc, startup, patxname, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback, nullptr)
#define SDT_VAR2(base, name, var, type, flags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, from, to, extver, cat, guiproc, startup, patxname)\
NSD(Int, SLE_GENERAL_X(SL_VAR, base, var, type, 1, from, to, extver), name, flags, guiproc, startup, patxname, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback, nullptr)
#define SDT_ENUM(base, var, type, flags, def, str, strhelp, pre_check, post_callback, from, to, extver, cat, guiproc, startup, patxname, enumlist)\
NSD(Int, SLE_GENERAL_X(SL_VAR, base, var, type, 1, from, to, extver), #var, flags | SF_ENUM, guiproc, startup, patxname, def, 0, 0, 0, str, strhelp, STR_NULL, cat, pre_check, post_callback, enumlist)

View File

@@ -21,6 +21,7 @@ static void TownZoneModeChanged(int32_t new_value);
static void TownZoneCustomValueChanged(int32_t new_value);
static bool OrderTownGrowthRate(SettingOnGuiCtrlData &data);
static bool IndustryCargoScaleGUI(SettingOnGuiCtrlData &data);
static const SettingTable _economy_settings{
[post-amble]
@@ -28,6 +29,7 @@ static const SettingTable _economy_settings{
[templates]
SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname),
SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname),
SDT_VAR2 = SDT_VAR2(GameSettings, $name, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname),
[validation]
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
@@ -146,45 +148,6 @@ strhelp = STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT
strval = STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL
cat = SC_ADVANCED
[SDT_VAR]
var = economy.old_town_cargo_factor
type = SLE_INT8
flags = SF_PATCH
def = 0
min = -16
max = +8
interval = 1
str = STR_CONFIG_SETTING_TOWN_CARGO_FACTOR
strval = STR_JUST_INT
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_TOWN_CARGO_ADJ, 1, 1)
patxname = ""town_cargo_adj.economy.town_cargo_factor""
[SDT_VAR]
var = economy.town_cargo_scale_factor
type = SLE_INT16
flags = SF_DECIMAL1 | SF_DEC1SCALE | SF_PATCH
def = 0
min = -160
max = +80
interval = 1
str = STR_CONFIG_SETTING_TOWN_CARGO_FACTOR
strval = STR_DECIMAL1_WITH_SCALE
strhelp = STR_CONFIG_SETTING_TOWN_CARGO_FACTOR_HELPTEXT
patxname = ""town_cargo_adj.economy.town_cargo_scale_factor""
[SDT_VAR]
var = economy.industry_cargo_scale_factor
type = SLE_INT16
flags = SF_DECIMAL1 | SF_DEC1SCALE | SF_PATCH
def = 0
min = -50
max = +50
interval = 1
str = STR_CONFIG_SETTING_INDUSTRY_CARGO_FACTOR
strval = STR_DECIMAL1_WITH_SCALE
strhelp = STR_CONFIG_SETTING_INDUSTRY_CARGO_FACTOR_HELPTEXT
patxname = ""industry_cargo_adj.economy.industry_cargo_scale_factor""
[SDT_VAR]
var = economy.max_town_heightlevel
type = SLE_UINT8
@@ -739,6 +702,35 @@ strhelp = STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT
post_cb = [](auto) { InvalidateWindowClassesData(WC_COMPANY_INFRASTRUCTURE); }
cat = SC_BASIC
[SDT_VAR]
var = economy.town_cargo_scale
type = SLE_UINT16
flags = SF_PATCH
def = 100
min = 1
max = 5000
interval = 10
str = STR_CONFIG_SETTING_TOWN_CARGO_SCALE
strhelp = STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT
strval = STR_CONFIG_SETTING_CARGO_SCALE_VALUE
cat = SC_BASIC
post_cb = [](auto) { UpdateCargoScalers(); }
[SDT_VAR]
var = economy.industry_cargo_scale
type = SLE_UINT16
flags = SF_PATCH
def = 100
min = 5
max = 3000
interval = 10
str = STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE
strhelp = STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT
strval = STR_CONFIG_SETTING_CARGO_SCALE_VALUE
cat = SC_BASIC
post_cb = [](auto) { UpdateCargoScalers(); }
guiproc = IndustryCargoScaleGUI
[SDT_VAR]
var = economy.random_road_reconstruction
type = SLE_UINT16
@@ -787,3 +779,44 @@ strval = STR_CONFIG_SETTING_TICK_RATE_TRADITIONAL
cat = SC_EXPERT
post_cb = [](auto) { SetupTickRate(); }
patxname = ""economy.tick_rate""
## Old settings
[SDT_VAR2]
name = ""economy.old_town_cargo_factor""
var = old_economy.town_cargo_factor
type = SLE_INT8
flags = SF_PATCH
def = 0
min = -16
max = +8
interval = 1
strval = STR_JUST_INT
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_TOWN_CARGO_ADJ, 1, 1)
patxname = ""town_cargo_adj.economy.town_cargo_factor""
[SDT_VAR2]
name = ""economy.town_cargo_scale_factor""
var = old_economy.town_cargo_scale_factor
type = SLE_INT16
flags = SF_DECIMAL1 | SF_DEC1SCALE | SF_PATCH
def = 0
min = -160
max = +80
interval = 1
strval = STR_DECIMAL1_WITH_SCALE
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_TOWN_CARGO_ADJ, 2, 2)
patxname = ""town_cargo_adj.economy.town_cargo_scale_factor""
[SDT_VAR2]
name = ""economy.industry_cargo_scale_factor""
var = old_economy.industry_cargo_scale_factor
type = SLE_INT16
flags = SF_DECIMAL1 | SF_DEC1SCALE | SF_PATCH
def = 0
min = -50
max = +50
interval = 1
strval = STR_DECIMAL1_WITH_SCALE
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INDUSTRY_CARGO_ADJ, 1, 1)
patxname = ""industry_cargo_adj.economy.industry_cargo_scale_factor""