00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #include "stdafx.h"
00013 #include "currency.h"
00014 #include "news_func.h"
00015 #include "settings_type.h"
00016 #include "date_func.h"
00017 #include "string_type.h"
00018
00019 #include "table/strings.h"
00020
00021
00022
00023
00024
00026 static const CurrencySpec origin_currency_specs[NUM_CURRENCY] = {
00027 { 1, "", CF_NOEURO, "\xC2\xA3", "", 0, STR_GAME_OPTIONS_CURRENCY_GBP },
00028 { 2, "", CF_NOEURO, "$", "", 0, STR_GAME_OPTIONS_CURRENCY_USD },
00029 { 2, "", CF_ISEURO, "\xE2\x82\xAC", "", 0, STR_GAME_OPTIONS_CURRENCY_EUR },
00030 { 220, "", CF_NOEURO, "\xC2\xA5", "", 0, STR_GAME_OPTIONS_CURRENCY_JPY },
00031 { 27, "", 2002, "", NBSP "S.", 1, STR_GAME_OPTIONS_CURRENCY_ATS },
00032 { 81, "", 2002, "BEF" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_BEF },
00033 { 2, "", CF_NOEURO, "CHF" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_CHF },
00034 { 41, "", CF_NOEURO, "", NBSP "K\xC4\x8D", 1, STR_GAME_OPTIONS_CURRENCY_CZK },
00035 { 4, "", 2002, "DM" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_DEM },
00036 { 11, "", CF_NOEURO, "", NBSP "kr", 1, STR_GAME_OPTIONS_CURRENCY_DKK },
00037 { 333, "", 2002, "Pts" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_ESP },
00038 { 12, "", 2002, "", NBSP "mk", 1, STR_GAME_OPTIONS_CURRENCY_FIM },
00039 { 13, "", 2002, "FF" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_FRF },
00040 { 681, "", 2002, "", "Dr.", 1, STR_GAME_OPTIONS_CURRENCY_GRD },
00041 { 378, "", CF_NOEURO, "", NBSP "Ft", 1, STR_GAME_OPTIONS_CURRENCY_HUF },
00042 { 130, "", CF_NOEURO, "", NBSP "Kr", 1, STR_GAME_OPTIONS_CURRENCY_ISK },
00043 { 3873, "", 2002, "", NBSP "L.", 1, STR_GAME_OPTIONS_CURRENCY_ITL },
00044 { 4, "", 2002, "NLG" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_NLG },
00045 { 12, "", CF_NOEURO, "", NBSP "Kr", 1, STR_GAME_OPTIONS_CURRENCY_NOK },
00046 { 6, "", CF_NOEURO, "", NBSP "z\xC5\x82", 1, STR_GAME_OPTIONS_CURRENCY_PLN },
00047 { 5, "", CF_NOEURO, "", NBSP "Lei", 1, STR_GAME_OPTIONS_CURRENCY_RON },
00048 { 50, "", CF_NOEURO, "", NBSP "p", 1, STR_GAME_OPTIONS_CURRENCY_RUR },
00049 { 479, "", 2007, "", NBSP "SIT", 1, STR_GAME_OPTIONS_CURRENCY_SIT },
00050 { 13, "", CF_NOEURO, "", NBSP "Kr", 1, STR_GAME_OPTIONS_CURRENCY_SEK },
00051 { 3, "", CF_NOEURO, "", NBSP "TL", 1, STR_GAME_OPTIONS_CURRENCY_TRY },
00052 { 60, "", 2009, "", NBSP "Sk", 1, STR_GAME_OPTIONS_CURRENCY_SKK },
00053 { 4, "", CF_NOEURO, "R$" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_BRL },
00054 { 31, "", 2011, "", NBSP "EEK", 1, STR_GAME_OPTIONS_CURRENCY_EEK },
00055 { 4, "", 2014, "", NBSP "Lt", 1, STR_GAME_OPTIONS_CURRENCY_LTL },
00056 { 1850, "", CF_NOEURO, "\xE2\x82\xA9", "", 0, STR_GAME_OPTIONS_CURRENCY_KRW },
00057 { 13, "", CF_NOEURO, "R" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_ZAR },
00058 { 1, "", CF_NOEURO, "", "", 2, STR_GAME_OPTIONS_CURRENCY_CUSTOM },
00059 };
00060
00062 CurrencySpec _currency_specs[NUM_CURRENCY];
00063
00070 enum Currencies {
00071 CURR_GBP,
00072 CURR_USD,
00073 CURR_EUR,
00074 CURR_JPY,
00075 CURR_ATS,
00076 CURR_BEF,
00077 CURR_CHF,
00078 CURR_CZK,
00079 CURR_DEM,
00080 CURR_DKK,
00081 CURR_ESP,
00082 CURR_FIM,
00083 CURR_FRF,
00084 CURR_GRD,
00085 CURR_HUF,
00086 CURR_ISK,
00087 CURR_ITL,
00088 CURR_NLG,
00089 CURR_NOK,
00090 CURR_PLN,
00091 CURR_RON,
00092 CURR_RUR,
00093 CURR_SIT,
00094 CURR_SEK,
00095 CURR_YTL,
00096 CURR_SKK,
00097 CURR_BRL,
00098 CURR_EEK,
00099 CURR_LTL,
00100 };
00101
00108 const byte TTDPatch_To_OTTDIndex[] =
00109 {
00110 CURR_GBP,
00111 CURR_USD,
00112 CURR_FRF,
00113 CURR_DEM,
00114 CURR_JPY,
00115 CURR_ESP,
00116 CURR_HUF,
00117 CURR_PLN,
00118 CURR_ATS,
00119 CURR_BEF,
00120 CURR_DKK,
00121 CURR_FIM,
00122 CURR_GRD,
00123 CURR_CHF,
00124 CURR_NLG,
00125 CURR_ITL,
00126 CURR_SEK,
00127 CURR_RUR,
00128 CURR_EUR,
00129 };
00130
00139 byte GetNewgrfCurrencyIdConverted(byte grfcurr_id)
00140 {
00141 return (grfcurr_id >= lengthof(TTDPatch_To_OTTDIndex)) ? grfcurr_id : TTDPatch_To_OTTDIndex[grfcurr_id];
00142 }
00143
00148 uint GetMaskOfAllowedCurrencies()
00149 {
00150 uint mask = 0;
00151 uint i;
00152
00153 for (i = 0; i < NUM_CURRENCY; i++) {
00154 Year to_euro = _currency_specs[i].to_euro;
00155
00156 if (to_euro != CF_NOEURO && to_euro != CF_ISEURO && _cur_year >= to_euro) continue;
00157 if (to_euro == CF_ISEURO && _cur_year < 2000) continue;
00158 mask |= (1 << i);
00159 }
00160 mask |= (1 << CUSTOM_CURRENCY_ID);
00161 return mask;
00162 }
00163
00167 void CheckSwitchToEuro()
00168 {
00169 if (_currency_specs[_settings_game.locale.currency].to_euro != CF_NOEURO &&
00170 _currency_specs[_settings_game.locale.currency].to_euro != CF_ISEURO &&
00171 _cur_year >= _currency_specs[_settings_game.locale.currency].to_euro) {
00172 _settings_game.locale.currency = 2;
00173 AddNewsItem(STR_NEWS_EURO_INTRODUCTION, NT_ECONOMY, NF_NORMAL);
00174 }
00175 }
00176
00186 void ResetCurrencies(bool preserve_custom)
00187 {
00188 memcpy(&_currency_specs, &origin_currency_specs, sizeof(origin_currency_specs) - (preserve_custom ? sizeof(_custom_currency) : 0));
00189 }
00190
00195 StringID *BuildCurrencyDropdown()
00196 {
00197
00198 static StringID names[NUM_CURRENCY + 1];
00199 uint i;
00200
00201
00202 for (i = 0; i < NUM_CURRENCY; i++) {
00203 names[i] = _currency_specs[i].name;
00204 }
00205
00206 names[i] = INVALID_STRING_ID;
00207
00208 return names;
00209 }