Add setting to select cargo payment algorithm

See: #506
pull/512/head
Jonathan G Rennison 1 year ago
parent 211c1ba61d
commit e26bea6ce4

@ -1071,13 +1071,18 @@ Money GetTransportedGoodsIncome(uint num_pieces, uint dist, uint16 transit_days,
static const int TIME_FACTOR_FRAC_BITS = 4;
static const int TIME_FACTOR_FRAC = 1 << TIME_FACTOR_FRAC_BITS;
if (_settings_game.economy.payment_algorithm == CPA_TRADITIONAL) transit_days = std::min<uint16>(transit_days, 0xFFu);
const int days1 = cs->transit_days[0];
const int days2 = cs->transit_days[1];
const int days_over_days1 = std::max( transit_days - days1, 0);
const int days_over_days2 = std::max(days_over_days1 - days2, 0);
int days_over_max = MIN_TIME_FACTOR - MAX_TIME_FACTOR;
if (days2 > -days_over_max) days_over_max += transit_days - days1;
else days_over_max += 2 * (transit_days - days1) - days2;
int days_over_max = 0;
if (_settings_game.economy.payment_algorithm == CPA_MODERN) {
days_over_max = MIN_TIME_FACTOR - MAX_TIME_FACTOR;
if (days2 > -days_over_max) days_over_max += transit_days - days1;
else days_over_max += 2 * (transit_days - days1) - days2;
}
/*
* The time factor is calculated based on the time it took

@ -234,4 +234,11 @@ static const uint LOCK_DEPOT_TILE_FACTOR = 2;
struct CargoPayment;
typedef uint32 CargoPaymentID;
enum CargoPaymentAlgorithm : byte {
CPA_BEGIN = 0, ///< Used for iterations and limit testing
CPA_TRADITIONAL = 0, ///< Traditional algorithm
CPA_MODERN, ///< Modern algorithm
CPA_END, ///< Used for iterations and limit testing
};
#endif /* ECONOMY_TYPE_H */

@ -606,6 +606,11 @@ STR_CONFIG_SETTING_TOWN_GROWTH_CARGO_TRANSPORTED_HELPTEXT :Percentage of t
STR_CONFIG_SETTING_RANDOM_ROAD_RECONSTRUCTION :Probability of random town road re-construction: {STRING2}
STR_CONFIG_SETTING_RANDOM_ROAD_RECONSTRUCTION_HELPTEXT :The probability of town roads randomly being re-constructed (0 = off, 1000 = max)
STR_CONFIG_SETTING_CARGO_PAYMENT_ALGORITHM :Cargo payment algorithm: {STRING2}
STR_CONFIG_SETTING_CARGO_PAYMENT_ALGORITHM_HELPTEXT :The algorithm to use to calculate how much money to pay for delivering cargo to its destination.
STR_CONFIG_SETTING_CARGO_PAYMENT_ALGORITHM_TRADITIONAL :Traditional
STR_CONFIG_SETTING_CARGO_PAYMENT_ALGORITHM_MODERN :Modern
STR_CONFIG_SETTING_TOWN_MIN_DISTANCE :Minimum distance between towns: {STRING2}
STR_CONFIG_SETTING_TOWN_MIN_DISTANCE_HELPTEXT :Set the minimum distance in tiles between towns for map generation and random founding

@ -4187,6 +4187,10 @@ bool AfterLoadGame()
}
}
if (SlXvIsFeatureMissing(XSLFI_MORE_CARGO_AGE) && IsSavegameVersionBefore(SLV_MORE_CARGO_AGE)) {
_settings_game.economy.payment_algorithm = CPA_TRADITIONAL;
}
InitializeRoadGUI();
/* This needs to be done after conversion. */

@ -2061,6 +2061,7 @@ static SettingsContainer &GetSettingsTree()
accounting->Add(new SettingEntry("difficulty.vehicle_costs_in_depot"));
accounting->Add(new SettingEntry("difficulty.vehicle_costs_when_stopped"));
accounting->Add(new SettingEntry("difficulty.construction_cost"));
accounting->Add(new SettingEntry("economy.payment_algorithm"));
}
SettingsPage *vehicles = main->Add(new SettingsPage(STR_CONFIG_SETTING_VEHICLES));

@ -705,6 +705,7 @@ struct EconomySettings {
uint8 day_length_factor; ///< factor which the length of day is multiplied
uint16 random_road_reconstruction; ///< chance out of 1000 per tile loop for towns to start random road re-construction
bool disable_inflation_newgrf_flag; ///< Disable NewGRF inflation flag
CargoPaymentAlgorithm payment_algorithm; ///< Cargo payment algorithm
};
struct LinkGraphSettings {

@ -3237,6 +3237,20 @@ def = false
cat = SC_EXPERT
patxname = ""economy.disable_inflation_newgrf_flag""
[SDT_VAR]
var = economy.payment_algorithm
type = SLE_UINT8
flags = SF_GUI_DROPDOWN
def = CPA_MODERN
min = CPA_BEGIN
max = CPA_END - 1
interval = 1
str = STR_CONFIG_SETTING_CARGO_PAYMENT_ALGORITHM
strhelp = STR_CONFIG_SETTING_CARGO_PAYMENT_ALGORITHM_HELPTEXT
strval = STR_CONFIG_SETTING_CARGO_PAYMENT_ALGORITHM_TRADITIONAL
cat = SC_BASIC
patxname = ""economy.payment_algorithm""
##
[SDT_VAR]
var = pf.wait_for_pbs_path

Loading…
Cancel
Save