(svn r18016) -Codechange: Move the arbitrary basecost multiplier offset (8) to newgrf loading and make the internal state zero-based instead.

pull/155/head
frosch 15 years ago
parent f43a38709c
commit c0936d100d

@ -109,7 +109,7 @@ int _score_part[MAX_COMPANIES][SCORE_END];
Economy _economy; Economy _economy;
Prices _price; Prices _price;
Money _additional_cash_required; Money _additional_cash_required;
static byte _price_base_multiplier[PR_END]; static int8 _price_base_multiplier[PR_END];
Money CalculateCompanyValue(const Company *c) Money CalculateCompanyValue(const Company *c)
{ {
@ -652,7 +652,7 @@ void RecomputePrices()
price = (int64)price * _economy.inflation_prices; price = (int64)price * _economy.inflation_prices;
/* Apply newgrf modifiers, and remove fractional part of inflation */ /* 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) { if (shift >= 0) {
price <<= shift; price <<= shift;
} else { } else {
@ -728,22 +728,20 @@ static void HandleEconomyFluctuations()
*/ */
void ResetPriceBaseMultipliers() void ResetPriceBaseMultipliers()
{ {
/* 8 means no multiplier. */ memset(_price_base_multiplier, 0, sizeof(_price_base_multiplier));
for (Price i = PR_BEGIN; i < PR_END; i++)
_price_base_multiplier[i] = 8;
} }
/** /**
* Change a price base by the given factor. * Change a price base by the given factor.
* The price base is altered by factors of two, with an offset of 8. * The price base is altered by factors of two.
* NewBaseCost = OldBaseCost * 2^(n-8) * NewBaseCost = OldBaseCost * 2^n
* @param price Index of price base to change. * @param price Index of price base to change.
* @param factor Amount to change by. * @param factor Amount to change by.
*/ */
void SetPriceBaseMultiplier(Price price, byte factor) void SetPriceBaseMultiplier(Price price, int factor)
{ {
assert(price < PR_END); 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);
} }
/** /**

@ -23,7 +23,7 @@
#include "station_type.h" #include "station_type.h"
void ResetPriceBaseMultipliers(); void ResetPriceBaseMultipliers();
void SetPriceBaseMultiplier(Price price, byte factor); void SetPriceBaseMultiplier(Price price, int factor);
extern const ScoreInfo _score_info[]; extern const ScoreInfo _score_info[];
extern int _score_part[MAX_COMPANIES][SCORE_END]; extern int _score_part[MAX_COMPANIES][SCORE_END];

@ -171,11 +171,14 @@ static const int LOAN_INTERVAL = 10000;
static const uint64 MAX_INFLATION = (1ull << (63 - 32)) - 1; 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. * Increasing base prices by factor 65536 should be enough.
* @see MAX_INFLATION * @see MAX_INFLATION
*/ */
static const int MAX_PRICE_MODIFIER = 16 + 8; enum {
MIN_PRICE_MODIFIER = -8,
MAX_PRICE_MODIFIER = 16,
};
struct CargoPayment; struct CargoPayment;
typedef uint32 CargoPaymentID; typedef uint32 CargoPaymentID;

@ -1665,11 +1665,11 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, by
for (int i = 0; i < numinfo; i++) { for (int i = 0; i < numinfo; i++) {
switch (prop) { switch (prop) {
case 0x08: { // Cost base factor case 0x08: { // Cost base factor
byte factor = grf_load_byte(&buf); int factor = grf_load_byte(&buf);
uint price = gvid + i; uint price = gvid + i;
if (price < PR_END) { if (price < PR_END) {
SetPriceBaseMultiplier((Price)price, factor); SetPriceBaseMultiplier((Price)price, factor - 8);
} else { } else {
grfmsg(1, "GlobalVarChangeInfo: Price %d out of range, ignoring", price); grfmsg(1, "GlobalVarChangeInfo: Price %d out of range, ignoring", price);
} }

Loading…
Cancel
Save