diff options
-rw-r--r-- | economy.c | 8 | ||||
-rw-r--r-- | economy.h | 2 | ||||
-rw-r--r-- | newgrf.c | 7 |
3 files changed, 11 insertions, 6 deletions
@@ -775,7 +775,7 @@ static byte price_base_multiplier[NUM_PRICES]; */ void ResetPriceBaseMultipliers(void) { - int i; + uint i; // 8 means no multiplier. for (i = 0; i < NUM_PRICES; i++) @@ -789,10 +789,10 @@ void ResetPriceBaseMultipliers(void) * @param price Index of price base to change. * @param factor Amount to change by. */ -void SetPriceBaseMultiplier(int price, byte factor) +void SetPriceBaseMultiplier(uint price, byte factor) { - if (price < NUM_PRICES) - price_base_multiplier[price] = factor; + assert(price < NUM_PRICES); + price_base_multiplier[price] = factor; } void StartupEconomy(void) @@ -4,7 +4,7 @@ #define ECONOMY_H void ResetPriceBaseMultipliers(void); -void SetPriceBaseMultiplier(int price, byte factor); +void SetPriceBaseMultiplier(uint price, byte factor); typedef struct { // Maximum possible loan @@ -1070,8 +1070,13 @@ static bool GlobalVarChangeInfo(uint gvid, int numinfo, int prop, byte **bufp, i case 0x08: { /* Cost base factor */ FOR_EACH_OBJECT { byte factor = grf_load_byte(&buf); + uint price = gvid + i; - SetPriceBaseMultiplier(gvid + i, factor); + if (price < NUM_PRICES) { + SetPriceBaseMultiplier(price, factor); + } else { + grfmsg(GMS_WARN, "GlobalVarChangeInfo: Price %d out of range, ignoring.", price); + } } } break; default: |