mirror of https://github.com/OpenTTD/OpenTTD
(svn r18016) -Codechange: Move the arbitrary basecost multiplier offset (8) to newgrf loading and make the internal state zero-based instead.
parent
5d3fa80931
commit
f48f73f060
|
@ -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…
Reference in New Issue