From 42301884ce55791c1cf749a47aa0b908ef61a961 Mon Sep 17 00:00:00 2001 From: AviationGamerX <76180779+AviationGamerX@users.noreply.github.com> Date: Wed, 2 Oct 2024 23:19:57 +0300 Subject: [PATCH] Replaced max_loan with a function that calculates the max_loan from the max_loan_percentage (added some includes in where they were used) And replaced other uses of max_loan with max_loan_percentage. --- src/company_base.h | 10 ++++++++++ src/economy.cpp | 3 ++- src/saveload/afterload.cpp | 3 ++- src/saveload/compat/settings_sl_compat.h | 2 +- src/saveload/oldloader_sl.cpp | 4 ++-- src/saveload/settings_sl.cpp | 2 +- src/settings_type.h | 4 ++-- src/table/settings/difficulty_settings.ini | 5 ++--- 8 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/company_base.h b/src/company_base.h index 24f9051fc2..e43d3ec209 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -17,6 +17,7 @@ #include "timer/timer_game_economy.h" #include "settings_type.h" #include "group.h" +#include "currency.h" static const Money COMPANY_MAX_LOAN_DEFAULT = INT64_MIN; @@ -189,6 +190,15 @@ struct Company : CompanyProperties, CompanyPool::PoolItem<&_company_pool> { static void PostDestructor(size_t index); }; +/** +* Function to get the max loan from the saved percentage in the settings (inline makes it avoid many unwanted errors) +*/ +inline uint32_t GetMaxLoanFromPercentage() +{ + return ((_settings_game.difficulty.max_loan_percentage / 100) * 300000) * GetCurrency().rate; +} + + Money CalculateCompanyValue(const Company *c, bool including_loan = true); Money CalculateHostileTakeoverValue(const Company *c); diff --git a/src/economy.cpp b/src/economy.cpp index cd99094239..19e07aba12 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -33,6 +33,7 @@ #include "sound_func.h" #include "autoreplace_func.h" #include "company_gui.h" +#include "company_base.h" #include "signs_base.h" #include "subsidy_base.h" #include "subsidy_func.h" @@ -762,7 +763,7 @@ bool AddInflation(bool check_year) void RecomputePrices() { /* Setup maximum loan as a rounded down multiple of LOAN_INTERVAL. */ - _economy.max_loan = ((uint64_t)_settings_game.difficulty.max_loan * _economy.inflation_prices >> 16) / LOAN_INTERVAL * LOAN_INTERVAL; + _economy.max_loan = ((uint64_t)GetMaxLoanFromPercentage() * _economy.inflation_prices >> 16) / LOAN_INTERVAL * LOAN_INTERVAL; /* Setup price bases */ for (Price i = PR_BEGIN; i < PR_END; i++) { diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index e1d06532bb..df41ee96c1 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -62,6 +62,7 @@ #include "../timer/timer_game_calendar.h" #include "../timer/timer_game_economy.h" #include "../timer/timer_game_tick.h" +#include "../company_base.h" #include "saveload_internal.h" @@ -2293,7 +2294,7 @@ bool AfterLoadGame() * So taking the 16 bit fractional part into account there are plenty of bits left * for unmodified savegames ... */ - uint64_t aimed_inflation = (_economy.old_max_loan_unround << 16 | _economy.old_max_loan_unround_fract) / _settings_game.difficulty.max_loan; + uint64_t aimed_inflation = (_economy.old_max_loan_unround << 16 | _economy.old_max_loan_unround_fract) / GetMaxLoanFromPercentage(); /* ... well, just clamp it then. */ if (aimed_inflation > MAX_INFLATION) aimed_inflation = MAX_INFLATION; diff --git a/src/saveload/compat/settings_sl_compat.h b/src/saveload/compat/settings_sl_compat.h index 37005b98e2..b1a5b7666f 100644 --- a/src/saveload/compat/settings_sl_compat.h +++ b/src/saveload/compat/settings_sl_compat.h @@ -32,7 +32,7 @@ const SaveLoadCompat _settings_sl_compat[] = { SLC_NULL(1, SLV_97, SLV_110), SLC_VAR("difficulty.number_towns"), SLC_VAR("difficulty.industry_density"), - SLC_VAR("difficulty.max_loan"), + SLC_VAR("difficulty.max_loan_percentage"), SLC_VAR("difficulty.initial_interest"), SLC_VAR("difficulty.vehicle_costs"), SLC_VAR("difficulty.competitor_speed"), diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index ea9c97c212..166cd22ad5 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -1471,7 +1471,7 @@ static const OldChunks game_difficulty_chunk[] = { OCL_NULL( 2), // competitor_start_time OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, number_towns ), OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, industry_density ), - OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, DifficultySettings, max_loan ), + OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, DifficultySettings, max_loan_percentage ), OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, initial_interest ), OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, vehicle_costs ), OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, competitor_speed ), @@ -1490,7 +1490,7 @@ static const OldChunks game_difficulty_chunk[] = { static bool LoadOldGameDifficulty(LoadgameState *ls, int) { bool ret = LoadChunk(ls, &_settings_game.difficulty, game_difficulty_chunk); - _settings_game.difficulty.max_loan *= 1000; + _settings_game.difficulty.max_loan_percentage *= 1000; return ret; } diff --git a/src/saveload/settings_sl.cpp b/src/saveload/settings_sl.cpp index 0d09ec4cd9..e5bb21fa22 100644 --- a/src/saveload/settings_sl.cpp +++ b/src/saveload/settings_sl.cpp @@ -63,7 +63,7 @@ void HandleOldDiffCustom(bool savegame) continue; } - int32_t value = (int32_t)((name == "max_loan" ? 1000 : 1) * _old_diff_custom[i++]); + int32_t value = (int32_t)((name == "max_loan_percentage" ? 1000 : 1) * _old_diff_custom[i++]); sd->AsIntSetting()->MakeValueValidAndWrite(savegame ? &_settings_game : &_settings_newgame, value); } } diff --git a/src/settings_type.h b/src/settings_type.h index 8fea3a0039..a710338744 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -100,8 +100,7 @@ struct DifficultySettings { uint16_t competitors_interval; ///< the interval (in minutes) between adding competitors uint8_t number_towns; ///< the amount of towns uint8_t industry_density; ///< The industry density. @see IndustryDensity - uint32_t max_loan; ///< the maximum initial loan - uint32_t max_loan_percentage; ///< the percentage increase/decrease of the default maximum intial loan + uint32_t max_loan_percentage; ///< the percentage of the maximum intial loan uint8_t initial_interest; ///< amount of interest (to pay over the loan) uint8_t vehicle_costs; ///< amount of money spent on vehicle running cost uint8_t competitor_speed; ///< the speed at which the AI builds @@ -638,4 +637,5 @@ inline GameSettings &GetGameSettings() return (_game_mode == GM_MENU) ? _settings_newgame : _settings_game; } + #endif /* SETTINGS_TYPE_H */ diff --git a/src/table/settings/difficulty_settings.ini b/src/table/settings/difficulty_settings.ini index 4955a7ed14..5e552d81ff 100644 --- a/src/table/settings/difficulty_settings.ini +++ b/src/table/settings/difficulty_settings.ini @@ -111,11 +111,10 @@ type = SLE_UINT32 from = SLV_97 flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_0_IS_SPECIAL def = 100 -min = 10 +min = 100 max = 6000000 pre_cb = [](auto &new_value) { new_value = (new_value + 10 / 2) / 10 * 10; return true; } -post_cb = [](auto) { _settings_game.difficulty.max_loan = ((_settings_game.difficulty.max_loan_percentage/100)* 300000) * GetCurrency().rate;} -interval = 10 +interval = 100 str = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN strhelp = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT strval = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE