|
@@ -24,6 +24,7 @@
|
|
|
#include "vehicle.h"
|
|
|
#include "date.h"
|
|
|
#include "helpers.hpp"
|
|
|
#include "newgrf_townname.h"
|
|
|
|
|
|
static uint32 _difficulty_click_a;
|
|
|
static uint32 _difficulty_click_b;
|
|
@@ -66,19 +67,44 @@ static StringID *BuildDynamicDropdown(St
|
|
|
return buf;
|
|
|
}
|
|
|
|
|
|
static StringID _town_names[SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 2] = {STR_NULL};
|
|
|
int _nb_orig_names = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1;
|
|
|
static StringID *_town_names = NULL;
|
|
|
static StringID *_grf_names = NULL;
|
|
|
static int _nb_grf_names = 0;
|
|
|
|
|
|
void SortTownGeneratorNames()
|
|
|
{
|
|
|
int nb_town_names = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1;
|
|
|
/* Init the strings */
|
|
|
if (_town_names[0] == STR_NULL) {
|
|
|
for (int i = 0; i < nb_town_names; i++) _town_names[i] = STR_TOWNNAME_ORIGINAL_ENGLISH + i;
|
|
|
_town_names[nb_town_names] = INVALID_STRING_ID;
|
|
|
}
|
|
|
int n = 0;
|
|
|
|
|
|
/* Get Newgrf generators' names */
|
|
|
free(_grf_names);
|
|
|
_grf_names = GetGRFTownNameList();
|
|
|
_nb_grf_names = 0;
|
|
|
for (StringID *s = _grf_names; *s != INVALID_STRING_ID; s++) _nb_grf_names++;
|
|
|
|
|
|
/* Prepare the list */
|
|
|
free(_town_names);
|
|
|
_town_names = MallocT<StringID>(_nb_orig_names + _nb_grf_names + 1);
|
|
|
|
|
|
/* Put the original strings */
|
|
|
for (int i = 0; i < _nb_orig_names; i++) _town_names[n++] = STR_TOWNNAME_ORIGINAL_ENGLISH + i;
|
|
|
|
|
|
/* Put the grf strings */
|
|
|
for (int i = 0; i < _nb_grf_names; i++) _town_names[n++] = _grf_names[i];
|
|
|
|
|
|
/* Put the terminator */
|
|
|
_town_names[n] = INVALID_STRING_ID;
|
|
|
|
|
|
/* Sort the strings */
|
|
|
qsort(&_town_names[0], nb_town_names, sizeof(StringID), &StringIDSorter);
|
|
|
qsort(&_town_names[0], _nb_orig_names + _nb_grf_names, sizeof(StringID), &StringIDSorter);
|
|
|
}
|
|
|
|
|
|
static inline StringID TownName(int town_name)
|
|
|
{
|
|
|
if (town_name < _nb_orig_names) return STR_TOWNNAME_ORIGINAL_ENGLISH + town_name;
|
|
|
town_name -= _nb_orig_names;
|
|
|
if (town_name < _nb_grf_names) return _grf_names[town_name];
|
|
|
return STR_UNDEFINED;
|
|
|
}
|
|
|
|
|
|
static int GetCurRes()
|
|
@@ -120,7 +146,7 @@ static void GameOptionsWndProc(Window *w
|
|
|
SetDParam(1, _currency_specs[_opt_ptr->currency].name);
|
|
|
SetDParam(2, STR_UNITS_IMPERIAL + _opt_ptr->units);
|
|
|
SetDParam(3, STR_02E9_DRIVE_ON_LEFT + _opt_ptr->road_side);
|
|
|
SetDParam(4, STR_TOWNNAME_ORIGINAL_ENGLISH + _opt_ptr->town_name);
|
|
|
SetDParam(4, TownName(_opt_ptr->town_name));
|
|
|
SetDParam(5, _autosave_dropdown[_opt_ptr->autosave]);
|
|
|
SetDParam(6, SPECSTR_LANGUAGE_START + _dynlang.curr);
|
|
|
i = GetCurRes();
|
|
@@ -152,8 +178,8 @@ static void GameOptionsWndProc(Window *w
|
|
|
} return;
|
|
|
case 13: case 14: { /* Setup townname dropdown */
|
|
|
uint sel = 0;
|
|
|
for (uint i = 0; i < lengthof(_town_names) - 1; i++) {
|
|
|
if (_town_names[i] == STR_TOWNNAME_ORIGINAL_ENGLISH + _opt_ptr->town_name) {
|
|
|
for (uint i = 0; _town_names[i] != INVALID_STRING_ID; i++) {
|
|
|
if (_town_names[i] == TownName(_opt_ptr->town_name)) {
|
|
|
sel = i;
|
|
|
break;
|
|
|
}
|
|
@@ -214,7 +240,12 @@ static void GameOptionsWndProc(Window *w
|
|
|
break;
|
|
|
case 14: /* Town names */
|
|
|
if (_game_mode == GM_MENU) {
|
|
|
_opt_ptr->town_name = _town_names[e->we.dropdown.index] - STR_TOWNNAME_ORIGINAL_ENGLISH;
|
|
|
for (uint i = 0; _town_names[i] != INVALID_STRING_ID; i++) {
|
|
|
if (_town_names[e->we.dropdown.index] == TownName(i)) {
|
|
|
_opt_ptr->town_name = i;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
InvalidateWindow(WC_GAME_OPTIONS, 0);
|
|
|
}
|
|
|
break;
|