Changeset - r9717:375054eafc8a
[Not reviewed]
master
0 3 0
peter1138 - 16 years ago 2008-07-26 14:58:08
peter1138@openttd.org
(svn r13836) -Fix [FS#2074]: Automatically recalculate inflation if NewGRFs are changed and cargo types are added, so that cargo payment rates are correct.
3 files changed with 34 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/economy.cpp
Show inline comments
 
@@ -621,7 +621,7 @@ static void AddSingleInflation(Money *va
 
	}
 
}
 

	
 
static void AddInflation()
 
static void AddInflation(bool check_year = true)
 
{
 
	/* The cargo payment inflation differs from the normal inflation, so the
 
	 * relative amount of money you make with a transport decreases slowly over
 
@@ -638,7 +638,7 @@ static void AddInflation()
 
	 * inflation doesn't add anything after that either; it even makes playing
 
	 * it impossible due to the diverging cost and income rates.
 
	 */
 
	if ((_cur_year - _settings_game.game_creation.starting_year) >= (ORIGINAL_MAX_YEAR - ORIGINAL_BASE_YEAR)) return;
 
	if (check_year && (_cur_year - _settings_game.game_creation.starting_year) >= (ORIGINAL_MAX_YEAR - ORIGINAL_BASE_YEAR)) return;
 

	
 
	/* Approximation for (100 + infl_amount)% ** (1 / 12) - 100%
 
	 * scaled by 65536
 
@@ -818,6 +818,35 @@ void StartupEconomy()
 
	_economy.fluct = GB(Random(), 0, 8) + 168;
 
}
 

	
 
void ResetEconomy()
 
{
 
	/* Test if resetting the economy is needed. */
 
	bool needed = false;
 

	
 
	for (CargoID c = 0; c < NUM_CARGO; c++) {
 
		const CargoSpec *cs = GetCargo(c);
 
		if (!cs->IsValid()) continue;
 
		if (_cargo_payment_rates[c] == 0) {
 
			needed = true;
 
			break;
 
		}
 
	}
 

	
 
	if (!needed) return;
 

	
 
	/* Remember old unrounded maximum loan value. NewGRF has the ability
 
	 * to change all the other inflation affected base costs. */
 
	Money old_value = _economy.max_loan_unround;
 

	
 
	/* Reset the economy */
 
	StartupEconomy();
 
	InitializeLandscapeVariables(false);
 

	
 
	/* Reapply inflation, ignoring the year */
 
	while (old_value > _economy.max_loan_unround) {
 
		AddInflation(false);
 
	}
 
}
 

	
 
Money GetPriceByIndex(uint8 index)
 
{
 
@@ -1718,8 +1747,7 @@ void LoadUnloadStation(Station *st)
 
void PlayersMonthlyLoop()
 
{
 
	PlayersGenStatistics();
 
	if (_settings_game.economy.inflation && _cur_year < MAX_YEAR)
 
		AddInflation();
 
	if (_settings_game.economy.inflation) AddInflation();
 
	PlayersPayInterest();
 
	/* Reset the _current_player flag */
 
	_current_player = OWNER_NONE;
src/economy_func.h
Show inline comments
 
@@ -19,6 +19,7 @@ struct Player;
 

	
 
void ResetPriceBaseMultipliers();
 
void SetPriceBaseMultiplier(uint price, byte factor);
 
void ResetEconomy();
 

	
 
extern const ScoreInfo _score_info[];
 
extern int _score_part[MAX_PLAYERS][SCORE_END];
src/openttd.cpp
Show inline comments
 
@@ -2454,6 +2454,7 @@ void ReloadNewGRFData()
 
	/* reload grf data */
 
	GfxLoadSprites();
 
	LoadStringWidthTable();
 
	ResetEconomy();
 
	/* reload vehicles */
 
	ResetVehiclePosHash();
 
	AfterLoadVehicles(false);
0 comments (0 inline, 0 general)