1
0
Fork 0

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.
pull/12974/head
AviationGamerX 2024-10-02 23:19:57 +03:00
parent 9cdd217e53
commit 42301884ce
8 changed files with 22 additions and 11 deletions

View File

@ -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);

View File

@ -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++) {

View File

@ -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;

View File

@ -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"),

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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 */

View File

@ -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