diff options
author | belugas <belugas@openttd.org> | 2006-09-20 00:34:06 +0000 |
---|---|---|
committer | belugas <belugas@openttd.org> | 2006-09-20 00:34:06 +0000 |
commit | b51d58a44c9f8b52db59b842e4309b5eaf4b9c81 (patch) | |
tree | 1e18ce466f13c77758a0b7649707f86edc02fb32 | |
parent | 32077448ba40487241b51f84efd1db26e0448e6c (diff) | |
download | openttd-b51d58a44c9f8b52db59b842e4309b5eaf4b9c81.tar.xz |
(svn r6485) -NewGRF Feature: Match the order of TTDPatch's currencies with those used in OTTD.
This will not reorder OTTD's currencies, but will make it so that
currencies affected by a grf will be those aimed by the writer.
-rw-r--r-- | currency.c | 76 | ||||
-rw-r--r-- | currency.h | 1 | ||||
-rw-r--r-- | newgrf.c | 14 |
3 files changed, 84 insertions, 7 deletions
diff --git a/currency.c b/currency.c index 7d2594647..3347d6eb4 100644 --- a/currency.c +++ b/currency.c @@ -44,6 +44,82 @@ const CurrencySpec origin_currency_specs[NUM_CURRENCY] = { /* Array of currencies used by the system */ CurrencySpec _currency_specs[NUM_CURRENCY]; +/** + * These enums are only declared in order to make sens + * out of the TTDPatch_To_OTTDIndex array that will follow + * Every currency used by Ottd is there, just in case TTDPatch will + * add those missing in its code + **/ +enum { + CURR_GBP, + CURR_USD, + CURR_EUR, + CURR_YEN, + CURR_ATS, + CURR_BEF, + CURR_CHF, + CURR_CZK, + CURR_DEM, + CURR_DKK, + CURR_ESP, + CURR_FIM, + CURR_FRF, + CURR_GRD, + CURR_HUF, + CURR_ISK, + CURR_ITL, + CURR_NLG, + CURR_NOK, + CURR_PLN, + CURR_ROL, + CURR_RUR, + CURR_SIT, + CURR_SEK, + CURR_YTL, +}; + +/** + * This array represent the position of OpenTTD's currencies, + * compared to TTDPatch's ones. + * When a grf sends currencies, they are based on the order defined by TTDPatch. + * So, we must reindex them to our own order. + **/ +const byte TTDPatch_To_OTTDIndex[] = +{ + CURR_GBP, + CURR_USD, + CURR_FRF, + CURR_DEM, + CURR_YEN, + CURR_ESP, + CURR_HUF, + CURR_PLN, + CURR_ATS, + CURR_BEF, + CURR_DKK, + CURR_FIM, + CURR_GRD, + CURR_CHF, + CURR_NLG, + CURR_ITL, + CURR_SEK, + CURR_RUR, + CURR_EUR, +}; + +/** + * Will return the ottd's index correspondance to + * the ttdpatch's id. If the id is bigger then the array, + * it is a grf written for ottd, thus returning the same id. + * Only called from newgrf.c + * @param grfcurr_id currency id coming from newgrf + * @return the corrected index + **/ +byte GetNewgrfCurrencyIdConverted(byte grfcurr_id) +{ + return (grf_id >= lengthof(TTDPatch_To_OTTDIndex)) ? grfcurr_id : TTDPatch_To_OTTDIndex[grfcurr_id]; +} + /* get a mask of the allowed currencies depending on the year */ uint GetMaskOfAllowedCurrencies(void) { diff --git a/currency.h b/currency.h index 9a76b1495..46445590f 100644 --- a/currency.h +++ b/currency.h @@ -40,5 +40,6 @@ uint GetMaskOfAllowedCurrencies(void); void CheckSwitchToEuro(void); void ResetCurrencies(void); StringID* BuildCurrencyDropdown(void); +byte GetNewgrfCurrencyIdConverted(byte grfcurr_id); #endif /* CURRENCY_H */ @@ -1090,8 +1090,8 @@ static bool GlobalVarChangeInfo(uint gvid, int numinfo, int prop, byte **bufp, i case 0x0A: // Currency display names FOR_EACH_OBJECT { - uint curidx = gvid + i; - StringID newone = GetGRFStringID(_cur_grffile->grfid,grf_load_word(&buf)); + uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); + StringID newone = GetGRFStringID(_cur_grffile->grfid, grf_load_word(&buf)); if ((newone != STR_UNDEFINED) && (curidx < NUM_CURRENCY)) { _currency_specs[curidx].name = newone; @@ -1101,7 +1101,7 @@ static bool GlobalVarChangeInfo(uint gvid, int numinfo, int prop, byte **bufp, i case 0x0B: // Currency multipliers FOR_EACH_OBJECT { - uint curidx = gvid + i; + uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); uint32 rate = grf_load_dword(&buf); if (curidx < NUM_CURRENCY) { @@ -1117,7 +1117,7 @@ static bool GlobalVarChangeInfo(uint gvid, int numinfo, int prop, byte **bufp, i case 0x0C: // Currency options FOR_EACH_OBJECT { - uint curidx = gvid +i; + uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); uint16 options = grf_load_word(&buf); if (curidx < NUM_CURRENCY) { @@ -1133,7 +1133,7 @@ static bool GlobalVarChangeInfo(uint gvid, int numinfo, int prop, byte **bufp, i case 0x0D: // Currency prefix symbol FOR_EACH_OBJECT { - uint curidx = gvid +i; + uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); uint32 tempfix = grf_load_dword(&buf); if (curidx < NUM_CURRENCY) { @@ -1147,7 +1147,7 @@ static bool GlobalVarChangeInfo(uint gvid, int numinfo, int prop, byte **bufp, i case 0x0E: // Currency suffix symbol FOR_EACH_OBJECT { - uint curidx = gvid +i; + uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); uint32 tempfix = grf_load_dword(&buf); if (curidx < NUM_CURRENCY) { @@ -1161,7 +1161,7 @@ static bool GlobalVarChangeInfo(uint gvid, int numinfo, int prop, byte **bufp, i case 0x0F: // Euro introduction dates FOR_EACH_OBJECT { - uint curidx = gvid +i; + uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); Year year_euro = grf_load_word(&buf); if (curidx < NUM_CURRENCY) { |