diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -17,6 +17,7 @@ #include "town.h" #include "settings_internal.h" #include "newgrf_townname.h" +#include "townname_type.h" #include "strings_func.h" #include "window_func.h" #include "string_func.h" @@ -73,7 +74,6 @@ static const StringID _font_zoom_dropdow INVALID_STRING_ID, }; -int _nb_orig_names = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1; ///< Number of original town names. static StringID *_grf_names = nullptr; ///< Pointer to town names defined by NewGRFs. static int _nb_grf_names = 0; ///< Number of town names defined by NewGRFs. @@ -97,8 +97,8 @@ void InitGRFTownGeneratorNames() */ static inline StringID TownName(int town_name) { - if (town_name < _nb_orig_names) return STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH + town_name; - town_name -= _nb_orig_names; + if (town_name < BUILTIN_TOWNNAME_GENERATOR_COUNT) return STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH + town_name; + town_name -= BUILTIN_TOWNNAME_GENERATOR_COUNT; if (town_name < _nb_grf_names) return _grf_names[town_name]; return STR_UNDEFINED; } @@ -245,7 +245,7 @@ struct GameOptionsWindow : Window { /* Add and sort newgrf townnames generators */ for (int i = 0; i < _nb_grf_names; i++) { - int result = _nb_orig_names + i; + int result = BUILTIN_TOWNNAME_GENERATOR_COUNT + i; list.emplace_back(new DropDownListStringItem(_grf_names[i], result, enabled_item != result && enabled_item >= 0)); } std::sort(list.begin(), list.end(), DropDownListStringItem::NatSortFunc); @@ -258,7 +258,7 @@ struct GameOptionsWindow : Window { } /* Add and sort original townnames generators */ - for (int i = 0; i < _nb_orig_names; i++) { + for (int i = 0; i < BUILTIN_TOWNNAME_GENERATOR_COUNT; i++) { list.emplace_back(new DropDownListStringItem(STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH + i, i, enabled_item != i && enabled_item >= 0)); } std::sort(list.begin() + newgrf_size, list.end(), DropDownListStringItem::NatSortFunc); diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1841,15 +1841,10 @@ static void DoCreateTown(Town *t, TileIn t->exclusive_counter = 0; t->statues = 0; - extern int _nb_orig_names; - if (_settings_game.game_creation.town_name < _nb_orig_names) { - /* Original town name */ - t->townnamegrfid = 0; - t->townnametype = SPECSTR_TOWNNAME_START + _settings_game.game_creation.town_name; - } else { - /* Newgrf town name */ - t->townnamegrfid = GetGRFTownNameId(_settings_game.game_creation.town_name - _nb_orig_names); - t->townnametype = GetGRFTownNameType(_settings_game.game_creation.town_name - _nb_orig_names); + { + TownNameParams tnp(_settings_game.game_creation.town_name); + t->townnamegrfid = tnp.grfid; + t->townnametype = tnp.type; } t->townnameparts = townnameparts; diff --git a/src/townname_type.h b/src/townname_type.h --- a/src/townname_type.h +++ b/src/townname_type.h @@ -15,11 +15,14 @@ #include "newgrf_townname.h" #include "town_type.h" +#include "string_type.h" #include #include typedef std::set TownNames; +static constexpr uint BUILTIN_TOWNNAME_GENERATOR_COUNT = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1; ///< Number of built-in town name generators. + /** * Struct holding parameters used to generate town name. * Speeds things up a bit because these values are computed only once per name generation. @@ -34,10 +37,9 @@ struct TownNameParams { */ TownNameParams(byte town_name) { - extern int _nb_orig_names; - bool grf = town_name >= _nb_orig_names; - this->grfid = grf ? GetGRFTownNameId(town_name - _nb_orig_names) : 0; - this->type = grf ? GetGRFTownNameType(town_name - _nb_orig_names) : SPECSTR_TOWNNAME_START + town_name; + bool grf = town_name >= BUILTIN_TOWNNAME_GENERATOR_COUNT; + this->grfid = grf ? GetGRFTownNameId(town_name - BUILTIN_TOWNNAME_GENERATOR_COUNT) : 0; + this->type = grf ? GetGRFTownNameType(town_name - BUILTIN_TOWNNAME_GENERATOR_COUNT) : SPECSTR_TOWNNAME_START + town_name; } TownNameParams(const Town *t);