Changeset - r13487:42bb7dd86e5e
[Not reviewed]
master
0 4 0
frosch - 15 years ago 2009-11-08 18:04:53
frosch@openttd.org
(svn r18016) -Codechange: Move the arbitrary basecost multiplier offset (8) to newgrf loading and make the internal state zero-based instead.
4 files changed with 15 insertions and 14 deletions:
0 comments (0 inline, 0 general)
src/economy.cpp
Show inline comments
 
@@ -109,7 +109,7 @@ int _score_part[MAX_COMPANIES][SCORE_END
 
Economy _economy;
 
Prices _price;
 
Money _additional_cash_required;
 
static byte _price_base_multiplier[PR_END];
 
static int8 _price_base_multiplier[PR_END];
 

	
 
Money CalculateCompanyValue(const Company *c)
 
{
 
@@ -652,7 +652,7 @@ void RecomputePrices()
 
		price = (int64)price * _economy.inflation_prices;
 

	
 
		/* Apply newgrf modifiers, and remove fractional part of inflation */
 
		int shift = _price_base_multiplier[i] - 8 - 16;
 
		int shift = _price_base_multiplier[i] - 16;
 
		if (shift >= 0) {
 
			price <<= shift;
 
		} else {
 
@@ -728,22 +728,20 @@ static void HandleEconomyFluctuations()
 
 */
 
void ResetPriceBaseMultipliers()
 
{
 
	/* 8 means no multiplier. */
 
	for (Price i = PR_BEGIN; i < PR_END; i++)
 
		_price_base_multiplier[i] = 8;
 
	memset(_price_base_multiplier, 0, sizeof(_price_base_multiplier));
 
}
 

	
 
/**
 
 * Change a price base by the given factor.
 
 * The price base is altered by factors of two, with an offset of 8.
 
 * NewBaseCost = OldBaseCost * 2^(n-8)
 
 * The price base is altered by factors of two.
 
 * NewBaseCost = OldBaseCost * 2^n
 
 * @param price Index of price base to change.
 
 * @param factor Amount to change by.
 
 */
 
void SetPriceBaseMultiplier(Price price, byte factor)
 
void SetPriceBaseMultiplier(Price price, int factor)
 
{
 
	assert(price < PR_END);
 
	_price_base_multiplier[price] = min(factor, MAX_PRICE_MODIFIER);
 
	_price_base_multiplier[price] = Clamp(factor, MIN_PRICE_MODIFIER, MAX_PRICE_MODIFIER);
 
}
 

	
 
/**
src/economy_func.h
Show inline comments
 
@@ -23,7 +23,7 @@
 
#include "station_type.h"
 

	
 
void ResetPriceBaseMultipliers();
 
void SetPriceBaseMultiplier(Price price, byte factor);
 
void SetPriceBaseMultiplier(Price price, int factor);
 

	
 
extern const ScoreInfo _score_info[];
 
extern int _score_part[MAX_COMPANIES][SCORE_END];
src/economy_type.h
Show inline comments
 
@@ -171,11 +171,14 @@ static const int LOAN_INTERVAL = 10000;
 
static const uint64 MAX_INFLATION = (1ull << (63 - 32)) - 1;
 

	
 
/**
 
 * Maximum NewGRF price modifier including the shift offset of 8 bits.
 
 * Maximum NewGRF price modifiers.
 
 * Increasing base prices by factor 65536 should be enough.
 
 * @see MAX_INFLATION
 
 */
 
static const int MAX_PRICE_MODIFIER = 16 + 8;
 
enum {
 
	MIN_PRICE_MODIFIER = -8,
 
	MAX_PRICE_MODIFIER = 16,
 
};
 

	
 
struct CargoPayment;
 
typedef uint32 CargoPaymentID;
src/newgrf.cpp
Show inline comments
 
@@ -1665,11 +1665,11 @@ static ChangeInfoResult GlobalVarChangeI
 
	for (int i = 0; i < numinfo; i++) {
 
		switch (prop) {
 
			case 0x08: { // Cost base factor
 
				byte factor = grf_load_byte(&buf);
 
				int factor = grf_load_byte(&buf);
 
				uint price = gvid + i;
 

	
 
				if (price < PR_END) {
 
					SetPriceBaseMultiplier((Price)price, factor);
 
					SetPriceBaseMultiplier((Price)price, factor - 8);
 
				} else {
 
					grfmsg(1, "GlobalVarChangeInfo: Price %d out of range, ignoring", price);
 
				}
0 comments (0 inline, 0 general)