summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--regression/regression/result.txt18
-rw-r--r--src/company_cmd.cpp2
-rw-r--r--src/economy.cpp2
-rw-r--r--src/economy_type.h2
-rw-r--r--src/settings_gui.cpp14
-rw-r--r--src/table/settings.ini4
6 files changed, 24 insertions, 18 deletions
diff --git a/regression/regression/result.txt b/regression/regression/result.txt
index 9ae029932..52d957faf 100644
--- a/regression/regression/result.txt
+++ b/regression/regression/result.txt
@@ -594,7 +594,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetBankBalance(): 100000
GetName(): (null : 0x00000000)
GetLoanAmount(): 100000
- GetMaxLoanAmount(): 500000
+ GetMaxLoanAmount(): 2000000000
GetLoanInterval(): 10000
SetLoanAmount(1): false
SetLoanAmount(100): false
@@ -606,8 +606,8 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetBankBalance(): 40000
GetLoanAmount(): 40000
SetLoanAmount(10000): true
- GetBankBalance(): 500000
- GetLoanAmount(): 500000
+ GetBankBalance(): 2000000000
+ GetLoanAmount(): 2000000000
GetCompanyHQ(): -1
BuildCompanyHQ(): true
GetCompanyHQ(): 33151
@@ -848,7 +848,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetAirportWidth(9): -1
GetAirportHeight(9): -1
GetAirportCoverageRadius(9): -1
- GetBankBalance(): 499790
+ GetBankBalance(): 1999999790
GetPrice(): 5400
BuildAirport(): true
IsHangarTile(): false
@@ -858,11 +858,11 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsHangarTile(): true
IsAirportTile(): true
GetAirportType(): 0
- GetBankBalance(): 489890
+ GetBankBalance(): 1999989890
RemoveAirport(): true
IsHangarTile(): false
IsAirportTile(): false
- GetBankBalance(): 489626
+ GetBankBalance(): 1999989626
BuildAirport(): true
--Bridge--
@@ -7314,7 +7314,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsBuoyTile(): false
IsLockTile(): false
IsCanalTile(): false
- GetBankBalance(): 479664
+ GetBankBalance(): 1999979664
BuildWaterDepot(): true
BuildDock(): true
BuildBuoy(): true
@@ -7327,7 +7327,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsBuoyTile(): true
IsLockTile(): true
IsCanalTile(): true
- GetBankBalance(): 465070
+ GetBankBalance(): 1999965070
--AIWaypointList(BUOY)--
Count(): 1
@@ -7346,7 +7346,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsBuoyTile(): false
IsLockTile(): false
IsCanalTile(): false
- GetBankBalance(): 459675
+ GetBankBalance(): 1999959675
BuildWaterDepot(): true
BuildDock(): true
diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp
index 25b3fe6fb..c871b64c9 100644
--- a/src/company_cmd.cpp
+++ b/src/company_cmd.cpp
@@ -553,7 +553,7 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY)
ResetCompanyLivery(c);
_company_colours[c->index] = (Colours)c->colour;
- c->money = c->current_loan = (100000ll * _economy.inflation_prices >> 16) / 50000 * 50000;
+ c->money = c->current_loan = (min(INITIAL_LOAN, _economy.max_loan) * _economy.inflation_prices >> 16) / 50000 * 50000;
c->share_owners[0] = c->share_owners[1] = c->share_owners[2] = c->share_owners[3] = INVALID_OWNER;
diff --git a/src/economy.cpp b/src/economy.cpp
index 00bdd6f53..7c801e854 100644
--- a/src/economy.cpp
+++ b/src/economy.cpp
@@ -746,7 +746,7 @@ bool AddInflation(bool check_year)
void RecomputePrices()
{
/* Setup maximum loan */
- _economy.max_loan = (_settings_game.difficulty.max_loan * _economy.inflation_prices >> 16) / 50000 * 50000;
+ _economy.max_loan = ((uint64)_settings_game.difficulty.max_loan * _economy.inflation_prices >> 16) / 50000 * 50000;
/* Setup price bases */
for (Price i = PR_BEGIN; i < PR_END; i++) {
diff --git a/src/economy_type.h b/src/economy_type.h
index 842e2711c..3e9519506 100644
--- a/src/economy_type.h
+++ b/src/economy_type.h
@@ -196,6 +196,8 @@ struct PriceBaseSpec {
/** The "steps" in loan size, in British Pounds! */
static const int LOAN_INTERVAL = 10000;
+/** The size of loan for a new company, in British Pounds! */
+static const int64 INITIAL_LOAN = 100000;
/**
* Maximum inflation (including fractional part) without causing overflows in int64 price computations.
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index cfb6bc5b8..c7dd0cb14 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -2187,12 +2187,14 @@ struct GameSettingsWindow : Window {
} else {
/* Only open editbox if clicked for the second time, and only for types where it is sensible for. */
if (this->last_clicked == pe && sd->desc.cmd != SDT_BOOLX && !(sd->desc.flags & SGF_MULTISTRING)) {
+ int64 value64 = value;
/* Show the correct currency-translated value */
- if (sd->desc.flags & SGF_CURRENCY) value *= _currency->rate;
+ if (sd->desc.flags & SGF_CURRENCY) value64 *= _currency->rate;
this->valuewindow_entry = pe;
- SetDParam(0, value);
- ShowQueryString(STR_JUST_INT, STR_CONFIG_SETTING_QUERY_CAPTION, 10, this, CS_NUMERAL, QSF_ENABLE_DEFAULT);
+ SetDParam(0, value64);
+ /* Limit string length to 14 so that MAX_INT32 * max currency rate doesn't exceed MAX_INT64. */
+ ShowQueryString(STR_JUST_INT, STR_CONFIG_SETTING_QUERY_CAPTION, 15, this, CS_NUMERAL, QSF_ENABLE_DEFAULT);
}
this->SetDisplayedHelpText(pe);
}
@@ -2217,10 +2219,12 @@ struct GameSettingsWindow : Window {
int32 value;
if (!StrEmpty(str)) {
- value = atoi(str);
+ long long llvalue = atoll(str);
/* Save the correct currency-translated value */
- if (sd->desc.flags & SGF_CURRENCY) value /= _currency->rate;
+ if (sd->desc.flags & SGF_CURRENCY) llvalue /= _currency->rate;
+
+ value = (int32)ClampToI32(llvalue);
} else {
value = (int32)(size_t)sd->desc.def;
}
diff --git a/src/table/settings.ini b/src/table/settings.ini
index b578d462b..cca6a99bf 100644
--- a/src/table/settings.ini
+++ b/src/table/settings.ini
@@ -148,8 +148,8 @@ type = SLE_UINT32
from = SLV_97
guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_CURRENCY
def = 300000
-min = 100000
-max = 500000
+min = 0
+max = 2000000000
interval = 50000
str = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN
strhelp = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT