summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lang/english.txt26
-rw-r--r--namegen.c2324
-rw-r--r--settings_gui.c4
-rw-r--r--table/namegen.h1978
4 files changed, 2279 insertions, 2053 deletions
diff --git a/lang/english.txt b/lang/english.txt
index 635816870..ee5bf8ac9 100644
--- a/lang/english.txt
+++ b/lang/english.txt
@@ -852,21 +852,21 @@ STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
############ start of townname region
-STR_TOWNNAME_ENGLISH :English
-STR_TOWNNAME_FRENCH :French
-STR_TOWNNAME_GERMAN :German
-STR_TOWNNAME_AMERICAN :American
-STR_TOWNNAME_LATIN_AMERICAN :Latin-American
-STR_TOWNNAME_SILLY :Silly
-STR_TOWNNAME_SWEDISH :Swedish
-STR_TOWNNAME_DUTCH :Dutch
-STR_TOWNNAME_FINNISH :Finnish
-STR_TOWNNAME_POLISH :Polish
+STR_TOWNNAME_ORIGINAL_ENGLISH :English (Original)
+STR_TOWNNAME_FRENCH :French
+STR_TOWNNAME_GERMAN :German
+STR_TOWNNAME_ADDITIONAL_ENGLISH :English (Additional)
+STR_TOWNNAME_LATIN_AMERICAN :Latin-American
+STR_TOWNNAME_SILLY :Silly
+STR_TOWNNAME_SWEDISH :Swedish
+STR_TOWNNAME_DUTCH :Dutch
+STR_TOWNNAME_FINNISH :Finnish
+STR_TOWNNAME_POLISH :Polish
STR_TOWNNAME_SLOVAKISH :Slovakish
STR_TOWNNAME_HUNGARIAN :Hungarian
-STR_TOWNNAME_AUSTRIAN :Austrian
-STR_TOWNNAME_ROMANIAN :Romanian
-STR_TOWNNAME_CZECH :Czech
+STR_TOWNNAME_AUSTRIAN :Austrian
+STR_TOWNNAME_ROMANIAN :Romanian
+STR_TOWNNAME_CZECH :Czech
############ end of townname region
STR_CURR_GBP :Pounds ({POUNDSIGN})
diff --git a/namegen.c b/namegen.c
index 6d245f4e6..2b61c77cc 100644
--- a/namegen.c
+++ b/namegen.c
@@ -1,2173 +1,420 @@
#include "stdafx.h"
#include "ttd.h"
+#include "table/namegen.h"
-#define GETNUM(x, y) (((uint16)(seed >> x) * (y))>>16)
+inline static uint32 GetNumberBasedOnSeed(int x, int y, uint32 seed)
+{
+ return (((uint16)(seed >> x) * (y))>>16);
+}
-static void AppendPart(byte **buf, int num, const char *names)
+static void ReplaceWords(byte a, byte b, byte c, byte d, byte e, byte f, byte g, byte h, byte *buf)
{
- byte *s;
+ if (buf[0] == a && buf[1] == b && buf[2] == c && buf[3] == d)
+ {
+ buf[0] = e;
+ buf[1] = f;
+ buf[2] = g;
+ buf[3] = h;
+ }
+}
+
+static byte MakeEnglishOriginalTownName(byte *buf, uint32 seed)
+{
+ int i;
+
+ //null terminates the string for strcat
+ strcpy(buf, "");
+
+ // optional first segment
+ if ((i = GetNumberBasedOnSeed(0, lengthof(name_original_english_1) + 50, seed) - 50) >= 0)
+ {
+ strcat(buf,name_original_english_1[i]);
+ }
+
+ //mandatory middle segments
+ strcat(buf, name_original_english_2[GetNumberBasedOnSeed(4, lengthof(name_original_english_2), seed)]);
+ strcat(buf, name_original_english_3[GetNumberBasedOnSeed(7, lengthof(name_original_english_3), seed)]);
+ strcat(buf, name_original_english_4[GetNumberBasedOnSeed(10, lengthof(name_original_english_4), seed)]);
+ strcat(buf, name_original_english_5[GetNumberBasedOnSeed(13, lengthof(name_original_english_5), seed)]);
- while (--num>=0) {
- do names++; while (names[-1]);
+ //optional last segment
+ if ((i = GetNumberBasedOnSeed(15, lengthof(name_original_english_6) + 60, seed) - 60) >= 0)
+ {
+ strcat(buf, name_original_english_6[i]);
}
- for(s=*buf; (*s++ = *names++) != 0;) {}
- *buf = s - 1;
+ if (buf[0] == 'C' && (buf[1] == 'e' || buf[1] == 'i'))
+ buf[0] = 'K';
+
+ ReplaceWords('C','u','n','t', 'E','a','s','t', buf);
+ ReplaceWords('S','l','a','g', 'P','i','t','s', buf);
+ ReplaceWords('S','l','u','t', 'E','d','i','n', buf);
+// ReplaceWords('F','a','r','t', 'B','o','o','t', buf);
+ ReplaceWords('D','r','a','r', 'Q','u','a','r', buf);
+ ReplaceWords('D','r','e','h', 'B','a','s','h', buf);
+ ReplaceWords('F','r','a','r', 'S','h','o','r', buf);
+ ReplaceWords('G','r','a','r', 'A','b','e','r', buf);
+ ReplaceWords('B','r','a','r', 'O','v','e','r', buf);
+ ReplaceWords('W','r','a','r', 'I','n','v','e', buf);
+
+ return 0;
}
-#define MK(x) x "\x0"
-
-#define NUM_ENGLISH_1 4
-static const char english_1[] =
- MK("Great ")
- MK("Little ")
- MK("New ")
- MK("Fort ")
-;
-
-#define NUM_ENGLISH_2 26
-static const char english_2[] =
- MK("Wr")
- MK("B")
- MK("C")
- MK("Ch")
- MK("Br")
- MK("D")
- MK("Dr")
- MK("F")
- MK("Fr")
- MK("Fl")
- MK("G")
- MK("Gr")
- MK("H")
- MK("L")
- MK("M")
- MK("N")
- MK("P")
- MK("Pr")
- MK("Pl")
- MK("R")
- MK("S")
- MK("S")
- MK("Sl")
- MK("T")
- MK("Tr")
- MK("W")
-;
-
-#define NUM_ENGLISH_3 8
-static const char english_3[] =
- MK("ar")
- MK("a")
- MK("e")
- MK("in")
- MK("on")
- MK("u")
- MK("un")
- MK("en")
-;
-
-#define NUM_ENGLISH_4 7
-static const char english_4[] =
- MK("n")
- MK("ning")
- MK("ding")
- MK("d")
- MK("")
- MK("t")
- MK("fing")
-;
-
-#define NUM_ENGLISH_5 23
-static const char english_5[] =
- MK("ville")
- MK("ham")
- MK("field")
- MK("ton")
- MK("town")
- MK("bridge")
- MK("bury")
- MK("wood")
- MK("ford")
- MK("hall")
- MK("ston")
- MK("way")
- MK("stone")
- MK("borough")
- MK("ley")
- MK("head")
- MK("bourne")
- MK("pool")
- MK("worth")
- MK("hill")
- MK("well")
- MK("hattan")
- MK("burg")
-;
-
-#define NUM_ENGLISH_6 9
-static const char english_6[] =
- MK("-on-sea")
- MK(" Bay")
- MK(" Market")
- MK(" Cross")
- MK(" Bridge")
- MK(" Falls")
- MK(" City")
- MK(" Ridge")
- MK(" Springs")
-;
-
-#define REPLACE_WORDS(a,b,c,d,e,f,g,h) { if (start[0] == a && start[1] == b && start[2] == c && start[3] == d) { start[0] = e; start[1] = f; start[2] = g; start[3] = h; } }
-
-static byte MakeEnglishTownName(byte *buf, uint32 seed)
+
+static byte MakeEnglishAdditionalTownName(byte *buf, uint32 seed)
{
int i;
- byte result;
- byte *start;
-
- i = GETNUM(0, 54) - 50;
- if (i >= 0)
- AppendPart(&buf, i, english_1);
- start = buf;
+ //null terminates the string for strcat
+ strcpy(buf, "");
- AppendPart(&buf, GETNUM(4, NUM_ENGLISH_2), english_2);
- AppendPart(&buf, GETNUM(7, NUM_ENGLISH_3), english_3);
- AppendPart(&buf, GETNUM(10, NUM_ENGLISH_4), english_4);
- AppendPart(&buf, GETNUM(13, NUM_ENGLISH_5), english_5);
+ // optional first segment
+ if ((i = GetNumberBasedOnSeed(0, lengthof(name_additional_english_prefix) + 50, seed) - 50) >= 0)
+ {
+ strcat(buf,name_additional_english_prefix[i]);
+ }
- i = GETNUM(15, NUM_ENGLISH_6 + 60) - 60;
+ if (GetNumberBasedOnSeed(3, 20, seed) >= 14)
+ {
+ strcat(buf, name_additional_english_1a[GetNumberBasedOnSeed(6, lengthof(name_additional_english_1a), seed)]);
+ }
+ else
+ {
+ strcat(buf, name_additional_english_1b1[GetNumberBasedOnSeed(6, lengthof(name_additional_english_1b1), seed)]);
+ strcat(buf, name_additional_english_1b2[GetNumberBasedOnSeed(9, lengthof(name_additional_english_1b2), seed)]);
+ if (GetNumberBasedOnSeed(11, 20, seed) >= 4)
+ {
+ strcat(buf, name_additional_english_1b3a[GetNumberBasedOnSeed(12, lengthof(name_additional_english_1b3a), seed)]);
+ }
+ else
+ {
+ strcat(buf, name_additional_english_1b3b[GetNumberBasedOnSeed(12, lengthof(name_additional_english_1b3a), seed)]);
+ }
+ }
- result = 0;
+ strcat(buf, name_additional_english_2[GetNumberBasedOnSeed(14, lengthof(name_additional_english_2), seed)]);
- if (i >= 0) {
- if (i <= 1) result = NG_EDGE;
- AppendPart(&buf, i, english_6);
+ //optional last segment
+ if ((i = GetNumberBasedOnSeed(15, lengthof(name_additional_english_3) + 60, seed) - 60) >= 0)
+ {
+ strcat(buf, name_additional_english_3[i]);
}
- if (start[0]=='C' && (start[1] == 'e' || start[1] == 'i'))
- start[0] = 'K';
+ ReplaceWords('C','u','n','t', 'E','a','s','t', buf);
+ ReplaceWords('S','l','a','g', 'P','i','t','s', buf);
+ ReplaceWords('S','l','u','t', 'E','d','i','n', buf);
+ ReplaceWords('F','a','r','t', 'B','o','o','t', buf);
+ ReplaceWords('D','r','a','r', 'Q','u','a','r', buf);
+ ReplaceWords('D','r','e','h', 'B','a','s','h', buf);
+ ReplaceWords('F','r','a','r', 'S','h','o','r', buf);
+ ReplaceWords('G','r','a','r', 'A','b','e','r', buf);
+ ReplaceWords('B','r','a','r', 'O','v','e','r', buf);
+ ReplaceWords('W','r','a','r', 'S','t','a','n', buf);
- /* Replace certain words (routine identical to TTD now) */
+ return 0;
- REPLACE_WORDS('C','u','n','t', 'E','a','s','t');
- REPLACE_WORDS('S','l','a','g', 'P','i','t','s');
- REPLACE_WORDS('S','l','u','t', 'E','d','i','n');
-// REPLACE_WORDS('F','a','r','t', 'B','o','o','t');
- REPLACE_WORDS('D','r','a','r', 'Q','u','a','r');
- REPLACE_WORDS('D','r','e','h', 'B','a','s','h');
- REPLACE_WORDS('F','r','a','r', 'S','h','o','r');
- REPLACE_WORDS('G','r','a','r', 'A','b','e','r');
- REPLACE_WORDS('B','r','a','r', 'O','v','e','r');
- REPLACE_WORDS('W','r','a','r', 'I','n','v','e');
- return result;
}
-#define NUM_AUSTRIAN_A1 6
-static const char austrian_a1[] =
- MK("Bad ")
- MK("Deutsch ")
- MK("Gross ")
- MK("Klein ")
- MK("Markt ")
- MK("Maria ")
-;
-
-#define NUM_AUSTRIAN_A2 42
-static const char austrian_a2[] =
- MK("Aus")
- MK("Alten")
- MK("Braun")
- MK("Vösl")
- MK("Mittern")
- MK("Nuss")
- MK("Neu")
- MK("Walters")
- MK("Breiten")
- MK("Eisen")
- MK("Feld")
- MK("Mittern")
- MK("Gall")
- MK("Obern")
- MK("Grat")
- MK("Heiligen")
- MK("Hof")
- MK("Holla")
- MK("Stein")
- MK("Eber")
- MK("Eggen")
- MK("Enzers")
- MK("Frauen")
- MK("Herren")
- MK("Hof")
- MK("Hütt")
- MK("Kaisers")
- MK("Königs")
- MK("Knittel")
- MK("Lang")
- MK("Ober")
- MK("Ollers")
- MK("Pfaffen")
- MK("Potten")
- MK("Salz")
- MK("Schwarz")
- MK("Stocker")
- MK("Unter")
- MK("Utten")
- MK("Vösen")
- MK("Vill")
- MK("Weissen")
-;
-
-#define NUM_AUSTRIAN_A3 16
-static const char austrian_a3[] =
- MK("see")
- MK("bach")
- MK("dorf")
- MK("ach")
- MK("stein")
- MK("hofen")
- MK("au")
- MK("ach")
- MK("kirch")
- MK("kirchen")
- MK("kreuz")
- MK("brunn")
- MK("siedl")
- MK("markt")
- MK("wang")
- MK("haag")
-;
-
-#define NUM_AUSTRIAN_A4 12
-static const char austrian_a4[] =
- MK("Bruck")
- MK("Brunn")
- MK("Gams")
- MK("Grein")
- MK("Ried")
- MK("Faak")
- MK("Zell")
- MK("Spital")
- MK("Kirchberg")
- MK("Saal")
- MK("Taferl")
- MK("Wald")
-;
-
-#define NUM_AUSTRIAN_A5 2
-static const char austrian_a5[] =
- MK("St. ")
- MK("Sankt ")
-;
-
-#define NUM_AUSTRIAN_A6 20
-static const char austrian_a6[] =
- MK("Aegyd")
- MK("Andrä")
- MK("Georgen")
- MK("Jakob")
- MK("Johann")
- MK("Leonhard")
- MK("Marein")
- MK("Lorenzen")
- MK("Margarethen")
- MK("Martin")
- MK("Michael")
- MK("Nikolai")
- MK("Oswald")
- MK("Peter")
- MK("Pölten")
- MK("Stefan")
- MK("Stephan")
- MK("Thomas")
- MK("Veit")
- MK("Wolfgang")
-;
-
-#define NUM_AUSTRIAN_F1 2
-static const char austrian_f1[] =
- MK(" an der ")
- MK(" ob der ")
-;
-
-#define NUM_AUSTRIAN_F2 13
-static const char austrian_f2[] =
- MK("Donau")
- MK("Steyr")
- MK("Lafnitz")
- MK("Leitha")
- MK("Thaya")
- MK("Gail")
- MK("Drau")
- MK("Salzach")
- MK("Ybbs")
- MK("Traisen")
- MK("Enns")
- MK("Mur")
- MK("Ill")
-;
-
-#define NUM_AUSTRIAN_B1 1
-static const char austrian_b1[] =
- MK(" am ")
-;
-
-#define NUM_AUSTRIAN_B2 10
-static const char austrian_b2[] =
- MK("Brenner")
- MK("Dachstein")
- MK("Gebirge")
- MK("Grossglockner")
- MK("Hausruck")
- MK("Semmering")
- MK("Wagram")
- MK("Wechsel")
- MK("Wilden Kaiser")
- MK("Ziller")
-;
-
static byte MakeAustrianTownName(byte *buf, uint32 seed)
{
- int i, j=0;
+ int i, j = 0;
+ strcpy(buf, "");
// Bad, Maria, Gross, ...
- i = GETNUM(0, NUM_AUSTRIAN_A1 + 15) - 15;
- if (i >= 0) AppendPart(&buf, i, austrian_a1);
-
- i = GETNUM(4, 6);
- if(i >= 4) {
- // Kaisers-kirchen
- AppendPart(&buf, GETNUM( 7, NUM_AUSTRIAN_A2), austrian_a2);
- AppendPart(&buf, GETNUM(13, NUM_AUSTRIAN_A3), austrian_a3);
+ i = GetNumberBasedOnSeed(0, lengthof(name_austrian_a1) + 15,seed) - 15;
+
+ if (i >= 0) strcat(buf, name_austrian_a1[i]);
+
+ i = GetNumberBasedOnSeed(4, 6, seed);
+ if (i >= 4)
+ {
+ // Kaisers-kirchen
+ strcat(buf, name_austrian_a2[GetNumberBasedOnSeed( 7, lengthof(name_austrian_a2), seed)]);
+ strcat(buf, name_austrian_a3[GetNumberBasedOnSeed(13, lengthof(name_austrian_a3), seed)]);
}
- else if(i >= 2) {
- // St. Johann
- AppendPart(&buf, GETNUM( 7, NUM_AUSTRIAN_A5), austrian_a5);
- AppendPart(&buf, GETNUM( 9, NUM_AUSTRIAN_A6), austrian_a6);
- j=1; // More likely to have a " an der " or " am "
+ else if (i >= 2)
+ {
+ // St. Johann
+ strcat(buf, name_austrian_a5[GetNumberBasedOnSeed( 7, lengthof(name_austrian_a5), seed)]);
+ strcat(buf, name_austrian_a6[GetNumberBasedOnSeed( 9, lengthof(name_austrian_a6), seed)]);
+ j = 1; // More likely to have a " an der " or " am "
}
- else {
- // Zell
- AppendPart(&buf, GETNUM( 7, NUM_AUSTRIAN_A4), austrian_a4);
+ else
+ {
+ // Zell
+ strcat(buf, name_austrian_a4[GetNumberBasedOnSeed( 7, lengthof(name_austrian_a4), seed)]);
}
- i = GETNUM(1, 6);
- if(i >= 4-j) {
- // an der Donau (rivers)
- AppendPart(&buf, GETNUM(4, NUM_AUSTRIAN_F1), austrian_f1);
- AppendPart(&buf, GETNUM(5, NUM_AUSTRIAN_F2), austrian_f2);
+ i = GetNumberBasedOnSeed(1, 6, seed);
+ if (i >= 4 - j)
+ {
+ // an der Donau (rivers)
+ strcat(buf, name_austrian_f1[GetNumberBasedOnSeed(4, lengthof(name_austrian_f1), seed)]);
+ strcat(buf, name_austrian_f2[GetNumberBasedOnSeed(5, lengthof(name_austrian_f2), seed)]);
}
- else if(i >= 2-j) {
- // am Dachstein (mountains)
- AppendPart(&buf, GETNUM(4, NUM_AUSTRIAN_B1), austrian_b1);
- AppendPart(&buf, GETNUM(5, NUM_AUSTRIAN_B2), austrian_b2);
+ else if (i >= 2 - j)
+ {
+ // am Dachstein (mountains)
+ strcat(buf, name_austrian_b1[GetNumberBasedOnSeed(4, lengthof(name_austrian_b1), seed)]);
+ strcat(buf, name_austrian_b2[GetNumberBasedOnSeed(5, lengthof(name_austrian_b2), seed)]);
}
return 0;
}
-#define NUM_GERMAN_1 114
-#define NUM_GERMAN_1_HARDCODED 21
-static const char german_1[] =
- /* hardcoded names */
- MK("Berlin")
- MK("Bonn")
- MK("Bremen")
- MK("Cottbus")
- MK("Chemnitz")
- MK("Dortmund")
- MK("Dresden")
- MK("Erfurt")
- MK("Erlangen")
- MK("Essen")
- MK("Fulda")
- MK("Gera")
- MK("Kassel")
- MK("Kiel")
- MK("Köln")
- MK("Lübeck")
- MK("Magdeburg")
- MK("München")
- MK("Potsdam")
- MK("Stuttgart")
- MK("Wiesbaden")
- /* randomizer names */
- MK("Alb")
- MK("Als")
- MK("Ander")
- MK("Arns")
- MK("Bruns")
- MK("Bam")
- MK("Biele")
- MK("Cloppen")
- MK("Co")
- MK("Duis")
- MK("Düssel")
- MK("Dannen")
- MK("Elb")
- MK("Els")
- MK("Elster")
- MK("Eichen")
- MK("Ems")
- MK("Fahr")
- MK("Falken")
- MK("Flens")
- MK("Frank")
- MK("Frei")
- MK("Freuden")
- MK("Fried")
- MK("Fürsten")
- MK("Hahn")
- MK("Ham")
- MK("Harz")
- MK("Heidel")
- MK("Hers")
- MK("Herz")
- MK("Holz")
- MK("Hildes")
- MK("Inns")
- MK("Ilsen")
- MK("Ingols")
- MK("Kel")
- MK("Kies")
- MK("Korn")
- MK("Kor")
- MK("Kreuz")
- MK("Kulm")
- MK("Langen")
- MK("Lim")
- MK("Lohr")
- MK("Lüne")
- MK("Mel")
- MK("Michels")
- MK("Mühl")
- MK("Naum")
- MK("Nest")
- MK("Nord")
- MK("Nort")
- MK("Nien")
- MK("Nidda")
- MK("Nieder")
- MK("Nürn")
- MK("Ober")
- MK("Offen")
- MK("Osna")
- MK("Olden")
- MK("Ols")
- MK("Oranien")
- MK("Pader")
- MK("Quedlin")
- MK("Quer")
- MK("Ravens")
- MK("Regens")
- MK("Rott")
- MK("Ros")
- MK("Rüssels")
- MK("Saal")
- MK("Saar")
- MK("Salz")
- MK("Schöne")
- MK("Schwein")
- MK("Sonder")
- MK("Sonnen")
- MK("Stein")
- MK("Strals")
- MK("Straus")
- MK("Süd")
- MK("Ton")
- MK("Unter")
- MK("Ur")
- MK("Vor")
- MK("Wald")
- MK("War")
- MK("Wert")
- MK("Wester")
- MK("Witten")
- MK("Wolfs")
- MK("Würz")
-;
-
-#define NUM_GERMAN_2 16
-static const char german_2[] =
- MK("bach")
- MK("berg")
- MK("brück")
- MK("brücken")
- MK("burg")
- MK("dorf")
- MK("feld")
- MK("furt")
- MK("hausen")
- MK("haven")
- MK("heim")
- MK("horst")
- MK("mund")
- MK("münster")
- MK("stadt")
- MK("wald")
-;
-
-#define NUM_GERMAN_3 5
-static const char german_3[] =
- MK(" an der ")
- MK(" am ")
- MK("Bad ")
- MK("Klein ")
- MK("Neu ")
-;
-
-#define NUM_GERMAN_4 6
-#define NUM_GERMAN_4_PRECHANGE 5
-static const char german_4[] =
- /* use "an der" */
- MK("Oder")
- MK("Spree")
- MK("Donau")
- MK("Saale")
- MK("Elbe")
- /* use "am" */
- MK("Main")
-
-;
-
static byte MakeGermanTownName(byte *buf, uint32 seed)
{
int i;
- int ext;
- ext=GETNUM(7, 28); /* Extension - Prefix / Suffix */
+ //null terminates the string for strcat
+ strcpy(buf, "");
- if ((ext==12) || (ext==19)) {
- i=GETNUM(2,NUM_GERMAN_3-2);
- AppendPart(&buf, 2+i, german_3);
+ // optional first segment
+ if ((i = GetNumberBasedOnSeed(0, lengthof(name_german_pre) + 50, seed) - 50) >= 0)
+ {
+ strcat(buf,name_german_pre[i]);
}
-
- i=GETNUM(3,NUM_GERMAN_1);
-
- AppendPart(&buf, i, german_1);
-
- if (i>NUM_GERMAN_1_HARDCODED-1) {
- AppendPart(&buf, GETNUM(5, NUM_GERMAN_2), german_2);
+ // mandatory middle segments including option of hardcoded name
+ if ((i = GetNumberBasedOnSeed(4, lengthof(name_german_hardcoded) + 50, seed) - 50) >= 0)
+ {
+ strcat(buf,name_german_hardcoded[i]);
+ }
+ else
+ {
+ strcat(buf, name_german_1[GetNumberBasedOnSeed( 7, lengthof(name_german_1), seed)]);
+ strcat(buf, name_german_2[GetNumberBasedOnSeed(10, lengthof(name_german_2), seed)]);
}
- if (ext==24) {
- i=GETNUM(9,NUM_GERMAN_4);
-
- if (i<=NUM_GERMAN_4_PRECHANGE-1) {
- AppendPart(&buf, 0, german_3);
- AppendPart(&buf, i, german_4);
+ //optional last segment
+ if ((i = GetNumberBasedOnSeed(12, 50 + 10, seed) - 50) >= 0)
+ {
+ if (i > 2)
+ {
+ strcat(buf, name_german_3_an_der[GetNumberBasedOnSeed(14, lengthof(name_german_3_an_der), seed)]);
+ strcat(buf, name_german_4_an_der[GetNumberBasedOnSeed(15, lengthof(name_german_4_an_der), seed)]);
} else {
- AppendPart(&buf, 1, german_3);
- AppendPart(&buf, i, german_4);
+ strcat(buf, name_german_3_am[GetNumberBasedOnSeed(14, lengthof(name_german_3_am), seed)]);
+ strcat(buf, name_german_4_am[GetNumberBasedOnSeed(15, lengthof(name_german_4_am), seed)]);
}
- }
+
+ }
return 0;
}
-#define NUM_SPANISH_1 86
-static const char spanish_1[] =
- MK("Caracas")
- MK("Maracay")
- MK("Maracaibo")
- MK("Velencia")
- MK("El Dorado")
- MK("Morrocoy")
- MK("Cata")
- MK("Cataito")
- MK("Ciudad Bolivar")
- MK("Barquisimeto")
- MK("Merida")
- MK("Puerto Ordaz")
- MK("Santa Elena")
- MK("San Juan")
- MK("San Luis")
- MK("San Rafael")
- MK("Santiago")
- MK("Barcelona")
- MK("Barinas")
- MK("San Cristobal")
- MK("San Fransisco")
- MK("San Martin")
- MK("Guayana")
- MK("San Carlos")
- MK("El Limon")
- MK("Coro")
- MK("Corocoro")
- MK("Puerto Ayacucho")
- MK("Elorza")
- MK("Arismendi")
- MK("Trujillo")
- MK("Carupano")
- MK("Anaco")
- MK("Lima")
- MK("Cuzco")
- MK("Iquitos")
- MK("Callao")
- MK("Huacho")
- MK("Camana")
- MK("Puerto Chala")
- MK("Santa Cruz")
- MK("Quito")
- MK("Cuenca")
- MK("Huacho")
- MK("Tulcan")
- MK("Esmereldas")
- MK("Ibarra")
- MK("San Lorenzo")
- MK("Macas")
- MK("Morana")
- MK("Machala")
- MK("Zamora")
- MK("Latacunga")
- MK("Tena")
- MK("Cochabamba")
- MK("Ascencion")
- MK("Magdalena")
- MK("Santa Ana")
- MK("Manoa")
- MK("Sucre")
- MK("Oruro")
- MK("Uyuni")
- MK("Potosi")
- MK("Tupiza")
- MK("La Quiaca")
- MK("Yacuiba")
- MK("San Borja")
- MK("Fuerte Olimpio")
- MK("Fortin Esteros")
- MK("Campo Grande")
- MK("Bogota")
- MK("El Banco")
- MK("Zaragosa")
- MK("Neiva")
- MK("Mariano")
- MK("Cali")
- MK("La Palma")
- MK("Andoas")
- MK("Barranca")
- MK("Montevideo")
- MK("Valdivia")
- MK("Arica")
- MK("Temuco")
- MK("Tocopilla")
- MK("Mendoza")
- MK("Santa Rosa");
-
static byte MakeSpanishTownName(byte *buf, uint32 seed)
{
- AppendPart(&buf, GETNUM(0, NUM_SPANISH_1), spanish_1);
+ strcpy(buf, "");
+ strcat(buf, name_spanish_1[GetNumberBasedOnSeed(0, lengthof(name_spanish_1), seed)]);
return 0;
}
-#define NUM_FRENCH_1 70
-static const char french_1[] =
- MK("Agincourt")
- MK("Lille")
- MK("Dinan")
- MK("Aubusson")
- MK("Rodez")
- MK("Bergerac")
- MK("Bordeaux")
- MK("Bayonne")
- MK("Montpellier")
- MK("Montelimar")
- MK("Valence")
- MK("Digne")
- MK("Nice")
- MK("Cannes")
- MK("St. Tropez")
- MK("Marseilles")
- MK("Narbonne")
- MK("Sčte")
- MK("Aurillac")
- MK("Gueret")
- MK("Le Creusot")
- MK("Nevers")
- MK("Auxerre")
- MK("Versailles")
- MK("Meaux")
- MK("Châlons")
- MK("Compičgne")
- MK("Metz")
- MK("Chaumont")
- MK("Langres")
- MK("Bourg")
- MK("Lyons")
- MK("Vienne")
- MK("Grenoble")
- MK("Toulon")
- MK("Rennes")
- MK("Le Mans")
- MK("Angers")
- MK("Nantes")
- MK("Châteauroux")
- MK("Orléans")
- MK("Lisieux")
- MK("Cherbourg")
- MK("Morlaix")
- MK("Cognac")
- MK("Agen")
- MK("Tulle")
- MK("Blois")
- MK("Troyes")
- MK("Charolles")
- MK("Grenoble")
- MK("Chambéry")
- MK("Tours")
- MK("St. Brieuc")
- MK("St. Malo")
- MK("La Rochelle")
- MK("St. Flour")
- MK("Le Puy")
- MK("Vichy")
- MK("St. Valery")
- MK("Beaujolais")
- MK("Narbonne")
- MK("Albi")
- MK("St. Valery")
- MK("Biarritz")
- MK("Béziers")
- MK("Nîmes")
- MK("Chamonix")
- MK("Angoulčme")
- MK("Alençon");
-
static byte MakeFrenchTownName(byte *buf, uint32 seed)
{
- AppendPart(&buf, GETNUM(0, NUM_FRENCH_1), french_1);
+ strcpy(buf, "");
+ strcat(buf, name_french_1[GetNumberBasedOnSeed(0, lengthof(name_french_1), seed)]);
return 0;
}
-static byte MakeAmericanTownName(byte *buf, uint32 seed)
-{
- // make american town names equal to english for now.
- return MakeEnglishTownName(buf, seed);
-}
-
-#define NUM_SILLY_1 88
-static const char silly_1[] =
- MK("Binky")
- MK("Blubber")
- MK("Bumble")
- MK("Crinkle")
- MK("Crusty")
- MK("Dangle")
- MK("Dribble")
- MK("Flippety")
- MK("Google")
- MK("Muffin")
-
- MK("Nosey")
- MK("Pinker")
- MK("Quack")
- MK("Rumble")
- MK("Sleepy")
- MK("Sliggles")
- MK("Snooze")
- MK("Teddy")
- MK("Tinkle")
- MK("Twister")
-
- MK("Pinker")
- MK("Hippo")
- MK("Itchy")
- MK("Jelly")
- MK("Jingle")
- MK("Jolly")
- MK("Kipper")
- MK("Lazy")
- MK("Frogs")
- MK("Mouse")
-
- MK("Quack")
- MK("Cheeky")
- MK("Lumpy")
- MK("Grumpy")
- MK("Mangle")
- MK("Fiddle")
- MK("Slugs")
- MK("Noodles")
- MK("Poodles")
- MK("Shiver")
-
- MK("Rumble")
- MK("Pixie")
- MK("Puddle")
- MK("Riddle")
- MK("Rattle")
- MK("Rickety")
- MK("Waffle")
- MK("Sagging")
- MK("Sausage")
- MK("Egg")
-
- MK("Sleepy")
- MK("Scatter")
- MK("Scramble")
- MK("Silly")
- MK("Simple")
- MK("Trickle")
- MK("Slippery")
- MK("Slimey")
- MK("Slumber")
- MK("Soggy")
-
- MK("Sliggles")
- MK("Splutter")
- MK("Sulky")
- MK("Swindle")
- MK("Swivel")
- MK("Tasty")
- MK("Tangle")
- MK("Toggle")
- MK("Trotting")
- MK("Tumble")
-
- MK("Snooze")
- MK("Water")
- MK("Windy")
- MK("Amble")
- MK("Bubble")
- MK("Cheery")
- MK("Cheese")
- MK("Cockle")
- MK("Cracker")
- MK("Crumple")
-
- MK("Teddy")
- MK("Evil")
- MK("Fairy")
- MK("Falling")
- MK("Fishy")
- MK("Fizzle")
- MK("Frosty")
- MK("Griddle")
-;
-
-#define NUM_SILLY_2 15
-static const char silly_2[] =
- MK("ton")
- MK("bury")
- MK("bottom")
- MK("ville")
- MK("well")
- MK("weed")
- MK("worth")
- MK("wig")
- MK("wick")
- MK("wood")
-
- MK("pool")
- MK("head")
- MK("burg")
- MK("gate")
- MK("bridge")
-;
-
-
static byte MakeSillyTownName(byte *buf, uint32 seed)
{
- AppendPart(&buf, GETNUM(0, NUM_SILLY_1), silly_1);
- AppendPart(&buf, GETNUM(16, NUM_SILLY_2),silly_2);
+ strcpy(buf, "");
+ strcat(buf, name_silly_1[GetNumberBasedOnSeed( 0, lengthof(name_silly_1), seed)]);
+ strcat(buf, name_silly_2[GetNumberBasedOnSeed(16, lengthof(name_silly_2), seed)]);
return 0;
}
-
-#define NUM_SWEDISH_1 4
-static const char swedish_1[] =
- MK("Gamla ")
- MK("Lilla ")
- MK("Nya ")
- MK("Stora ");
-
-#define NUM_SWEDISH_2 38
-static const char swedish_2[] =
- MK("Boll")
- MK("Bor")
- MK("Ed")
- MK("En")
- MK("Erik")
- MK("Es")
- MK("Fin")
- MK("Fisk")
- MK("Grön")
- MK("Hag")
- MK("Halm")
- MK("Karl")
- MK("Kram")
- MK("Kung")
- MK("Land")
- MK("Lid")
- MK("Lin")
- MK("Mal")
- MK("Malm")
- MK("Marie")
- MK("Ner")
- MK("Norr")
- MK("Oskar")
- MK("Sand")
- MK("Skog")
- MK("Stock")
- MK("Stor")
- MK("Ström")
- MK("Sund")
- MK("Söder")
- MK("Tall")
- MK("Tratt")
- MK("Troll")
- MK("Upp")
- MK("Var")
- MK("Väster")
- MK("Ängel")
- MK("Öster");
-
-#define NUM_SWEDISH_2A 42
-static const char swedish_2a[] =
- MK("B")
- MK("Br")
- MK("D")
- MK("Dr")
- MK("Dv")
- MK("F")
- MK("Fj")
- MK("Fl")
- MK("Fr")
- MK("G")
- MK("Gl")
- MK("Gn")
- MK("Gr")
- MK("H")
- MK("J")
- MK("K")
- MK("Kl")
- MK("Kn")
- MK("Kr")
- MK("Kv")
- MK("L")
- MK("M")
- MK("N")
- MK("P")
- MK("Pl")
- MK("Pr")
- MK("R")
- MK("S")
- MK("Sk")
- MK("Skr")
- MK("Sl")
- MK("Sn")
- MK("Sp")
- MK("Spr")
- MK("St")
- MK("Str")
- MK("Sv")
- MK("T")
- MK("Tr")
- MK("Tv")
- MK("V")
- MK("Vr");
-
-#define NUM_SWEDISH_2B 9
-static const char swedish_2b[] =
- MK("a")
- MK("e")
- MK("i")
- MK("o")
- MK("u")
- MK("y")
- MK("ĺ")
- MK("ä")
- MK("ö");
-
-#define NUM_SWEDISH_2C 26
-static const char swedish_2c[] =
- MK("ck")
- MK("d")
- MK("dd")
- MK("g")
- MK("gg")
- MK("l")
- MK("ld")
- MK("m")
- MK("n")
- MK("nd")
- MK("ng")
- MK("nn")
- MK("p")
- MK("pp")
- MK("r")
- MK("rd")
- MK("rk")
- MK("rp")
- MK("rr")
- MK("rt")
- MK("s")
- MK("sk")
- MK("st")
- MK("t")
- MK("tt")
- MK("v");
-
-#define NUM_SWEDISH_3 32
-static const char swedish_3[] =
- MK("arp")
- MK("berg")
- MK("boda")
- MK("borg")
- MK("bro")
- MK("bukten")
- MK("by")
- MK("byn")
- MK("fors")
- MK("hammar")
- MK("hamn")
- MK("holm")
- MK("hus")
- MK("hättan")
- MK("kulle")
- MK("köping")
- MK("lund")
- MK("löv")
- MK("sala")
- MK("skrona")
- MK("slätt")
- MK("spĺng")
- MK("stad")
- MK("sund")
- MK("svall")
- MK("svik")
- MK("sĺker")
- MK("udde")
- MK("valla")
- MK("viken")
- MK("älv")
- MK("ĺs");
-
static byte MakeSwedishTownName(byte *buf, uint32 seed)
{
int i;
- i = GETNUM(0, 50 + NUM_SWEDISH_1) - 50;
- if (i >= 0) AppendPart(&buf, i, swedish_1);
+ //null terminates the string for strcat
+ strcpy(buf, "");
+
+ // optional first segment
+ if ((i = GetNumberBasedOnSeed(0, lengthof(name_swedish_1) + 50, seed) - 50) >= 0)
+ {
+ strcat(buf, name_swedish_1[i]);
+ }
- if (GETNUM(4, 5) >= 3)
- AppendPart(&buf, GETNUM(7, NUM_SWEDISH_2), swedish_2);
- else {
- AppendPart(&buf, GETNUM(7, NUM_SWEDISH_2A), swedish_2a);
- AppendPart(&buf, GETNUM(10, NUM_SWEDISH_2B), swedish_2b);
- AppendPart(&buf, GETNUM(13, NUM_SWEDISH_2C), swedish_2c);
+ // mandatory middle segments including option of hardcoded name
+ if (GetNumberBasedOnSeed(4, 5, seed) >= 3)
+ {
+ strcat(buf, name_swedish_2[GetNumberBasedOnSeed( 7, lengthof(name_swedish_2), seed)]);
+ }
+ else
+ {
+ strcat(buf, name_swedish_2a[GetNumberBasedOnSeed( 7, lengthof(name_swedish_2a), seed)]);
+ strcat(buf, name_swedish_2b[GetNumberBasedOnSeed(10, lengthof(name_swedish_2b), seed)]);
+ strcat(buf, name_swedish_2c[GetNumberBasedOnSeed(13, lengthof(name_swedish_2c), seed)]);
}
- AppendPart(&buf, GETNUM(16, NUM_SWEDISH_3), swedish_3);
+ strcat(buf, name_swedish_3[GetNumberBasedOnSeed(16, lengthof(name_swedish_3), seed)]);
return 0;
}
-
-#define NUM_DUTCH_1 8
-static const char dutch_1[] =
- MK("Nieuw ")
- MK("Oud ")
- MK("Groot ")
- MK("Zuid ")
- MK("Noord ")
- MK("Oost ")
- MK("West ")
- MK("Klein ");
-
-#define NUM_DUTCH_2 57
-static const char dutch_2[] =
- MK("Hoog")
- MK("Laag")
- MK("Klein")
- MK("Groot")
- MK("Noorder")
- MK("Noord")
- MK("Zuider")
- MK("Zuid")
- MK("Ooster")
- MK("Oost")
- MK("Wester")
- MK("West")
- MK("Hoofd")
- MK("Midden")
- MK("Eind")
- MK("Amster")
- MK("Amstel")
- MK("Dord")
- MK("Rotter")
- MK("Haar")
- MK("Til")
- MK("Enk")
- MK("Dok")
- MK("Veen")
- MK("Leidsch")
- MK("Lely")
- MK("En")
- MK("Kaats")
- MK("U")
- MK("Maas")
- MK("Mar")
- MK("Bla")
- MK("Al")
- MK("Alk")
- MK("Eer")
- MK("Drie")
- MK("Ter")
- MK("Groes")
- MK("Goes")
- MK("Soest")
- MK("Coe")
- MK("Uit")
- MK("Zwaag")
- MK("Hellen")
- MK("Slie")
- MK("IJ")
- MK("Grubben")
- MK("Groen")
- MK("Lek")
- MK("Ridder")
- MK("Schie")
- MK("Olde")
- MK("Roose")
- MK("Haar")
- MK("Til")
- MK("Loos")
- MK("Hil");
-
-#define NUM_DUTCH_3 20
-static const char dutch_3[] =
- MK("Drog")
- MK("Nat")
- MK("Valk")
- MK("Bob")
- MK("Dedem")
- MK("Kollum")
- MK("Best")
- MK("Hoend")
- MK("Leeuw")
- MK("Graaf")
- MK("Uithuis")
- MK("Purm")
- MK("Hard")
- MK("Hell")
- MK("Werk")
- MK("Spijk")
- MK("Vink")
- MK("Wams")
- MK("Heerhug")
- MK("Koning");
-
-
-#define NUM_DUTCH_4 6
-static const char dutch_4[] =
- MK("e")
- MK("er")
- MK("el")
- MK("en")
- MK("o")
- MK("s");
-
-#define NUM_DUTCH_5 56
-static const char dutch_5[] =
- MK("stad")
- MK("vorst")
- MK("dorp")
- MK("dam")
- MK("beek")
- MK("doorn")
- MK("zijl")
- MK("zijlen")
- MK("lo")
- MK("muiden")
- MK("meden")
- MK("vliet")
- MK("nisse")
- MK("daal")
- MK("vorden")
- MK("vaart")
- MK("mond")
- MK("zaal")
- MK("water")
- MK("duinen")
- MK("heuvel")
- MK("geest")
- MK("kerk")
- MK("meer")
- MK("maar")
- MK("hoorn")
- MK("rade")
- MK("wijk")
- MK("berg")
- MK("heim")
- MK("sum")
- MK("richt")
- MK("burg")
- MK("recht")
- MK("drecht")
- MK("trecht")
- MK("tricht")
- MK("dricht")
- MK("lum")
- MK("rum")
- MK("halen")
- MK("oever")
- MK("wolde")
- MK("veen")
- MK("hoven")
- MK("gast")
- MK("kum")
- MK("hage")
- MK("dijk")
- MK("zwaag")
- MK("pomp")
- MK("huizen")
- MK("bergen")
- MK("schede")
- MK("mere")
- MK("end");
-
static byte MakeDutchTownName(byte *buf, uint32 seed)
{
int i;
- i = GETNUM(0, 50 + NUM_DUTCH_1) - 50;
- if (i >= 0)
- AppendPart(&buf, i, dutch_1);
+ //null terminates the string for strcat
+ strcpy(buf, "");
- i = GETNUM(6, 9);
- if(i > 4){
- AppendPart(&buf, GETNUM(9, NUM_DUTCH_2), dutch_2);
- } else {
- AppendPart(&buf, GETNUM(9, NUM_DUTCH_3), dutch_3);
- AppendPart(&buf, GETNUM(12, NUM_DUTCH_4), dutch_4);
+ // optional first segment
+ if ((i = GetNumberBasedOnSeed(0, lengthof(name_dutch_1) + 50, seed) - 50) >= 0)
+ {
+ strcat(buf, name_dutch_1[i]);
}
- AppendPart(&buf, GETNUM(15, NUM_DUTCH_5), dutch_5);
+
+ // mandatory middle segments including option of hardcoded name
+ if (GetNumberBasedOnSeed(6, 9, seed) > 4)
+ {
+ strcat(buf, name_dutch_2[GetNumberBasedOnSeed( 9, lengthof(name_dutch_2), seed)]);
+ }
+ else
+ {
+ strcat(buf, name_dutch_3[GetNumberBasedOnSeed( 9, lengthof(name_dutch_3), seed)]);
+ strcat(buf, name_dutch_4[GetNumberBasedOnSeed(12, lengthof(name_dutch_4), seed)]);
+ }
+ strcat(buf, name_dutch_5[GetNumberBasedOnSeed(15, lengthof(name_dutch_5), seed)]);
return 0;
}
-#define NUM_FINNISH_1 25
-static const char finnish_1[] =
- MK("Aijala")
- MK("Kisko")
- MK("Espoo")
- MK("Helsinki")
- MK("Tapiola")
- MK("Järvelä")
- MK("Lahti")
- MK("Kotka")
- MK("Hamina")
- MK("Loviisa")
- MK("Kouvola")
- MK("Tampere")
- MK("Kokkola")
- MK("Oulu")
- MK("Salo")
- MK("Malmi")
- MK("Pelto")
- MK("Koski")
- MK("Iisalmi")
- MK("Raisio")
- MK("Taavetti")
- MK("Joensuu")
- MK("Imatra")
- MK("Tapanila")
- MK("Pasila");
-
-#define NUM_FINNISH_2a 26
-static const char finnish_2a[] =
- MK("Hiekka")
- MK("Haapa")
- MK("Mylly")
- MK("Kivi")
- MK("Lappeen")
- MK("Lohjan")
- MK("Savon")
- MK("Sauna")
- MK("Keri")
- MK("Uusi")
- MK("Vanha")
- MK("Lapin")
- MK("Kesä")
- MK("Kuusi")
- MK("Pelto")
- MK("Tuomi")
- MK("Pitäjän")
- MK("Terva")
- MK("Olki")
- MK("Heinä")
- MK("Kuusan")
- MK("Seinä")
- MK("Kemi")
- MK("Rova")
- MK("Martin")
- MK("Koivu");
-
-#define NUM_FINNISH_2b 18
-static const char finnish_2b[] =
- MK("harju")
- MK("linna")
- MK("järvi")
- MK("kallio")
- MK("mäki")
- MK("nummi")
- MK("joki")
- MK("kylä")
- MK("lampi")
- MK("lahti")
- MK("metsä")
- MK("suo")
- MK("laakso")
- MK("niitty")
- MK("luoto")
- MK("hovi")
- MK("ranta")
- MK("koski");
-
static byte MakeFinnishTownName(byte *buf, uint32 seed)
{
-// Select randomly if town name should consists of one or two parts.
- if (GETNUM(0, 15) >= 10)
- AppendPart(&buf, GETNUM(2, NUM_FINNISH_1), finnish_1); // One part
- else {
- AppendPart(&buf, GETNUM(2, NUM_FINNISH_2a), finnish_2a); // Two parts
- AppendPart(&buf, GETNUM(10, NUM_FINNISH_2b), finnish_2b);
+ //null terminates the string for strcat
+ strcpy(buf, "");
+
+ // Select randomly if town name should consists of one or two parts.
+ if (GetNumberBasedOnSeed(0, 15, seed) >= 10)
+ {
+ strcat(buf, name_finnish_1[GetNumberBasedOnSeed( 2, lengthof(name_finnish_1), seed)]);
+ }
+ else
+ {
+ strcat(buf, name_finnish_2a[GetNumberBasedOnSeed( 2, lengthof(name_finnish_2a), seed)]);
+ strcat(buf, name_finnish_2b[GetNumberBasedOnSeed(10, lengthof(name_finnish_2b), seed)]);
}
+
return 0;
}
-#define NUM_POLISH_1 11
-
-static const char polish_1_m[] =
- MK("Wielki ")
- MK("Maly ")
- MK("Zly ")
- MK("Dobry ")
- MK("Nowy ")
- MK("Stary ")
- MK("Zloty ")
- MK("Zielony ")
- MK("Bialy ")
- MK("Modry ")
- MK("Debowy ")
- ;
-
-static const char polish_1_f[] =
- MK("Wielka ")
- MK("Mala ")
- MK("Zla ")
- MK("Dobra ")
- MK("Nowa ")
- MK("Stara ")
- MK("Zlota ")
- MK("Zielona ")
- MK("Biala ")
- MK("Modra ")
- MK("Debowa ")
- ;
-
-static const char polish_1_n[] =
- MK("Wielkie ")
- MK("Male ")
- MK("Zle ")
- MK("Dobre ")
- MK("Nowe ")
- MK("Stare ")
- MK("Zlote ")
- MK("Zielone ")
- MK("Biale ")
- MK("Modre ")
- MK("Debowe ")
- ;
-
-#define NUM_POLISH_2_O 34// single names
-#define NUM_POLISH_2_M 48// masculine + pref/suf
-#define NUM_POLISH_2_F 27// feminine + pref/suf
-#define NUM_POLISH_2_N 29// 'it' + pref/suf
-
-static const char polish_2[] =
-//static const char polish_2_o[] =
- MK("Frombork")
- MK("Gniezno")
- MK("Olsztyn")
- MK("Torun")
- MK("Bydgoszcz")
- MK("Terespol")
- MK("Krakow")
- MK("Poznan")
- MK("Wroclaw")
- MK("Katowice")
- MK("Cieszyn")
- MK("Bytom")
- MK("Frombork")
- MK("Hel")
- MK("Konin")
- MK("Lublin")
- MK("Malbork")
- MK("Sopot")
- MK("Sosnowiec")
- MK("Gdansk")
- MK("Gdynia")
- MK("Sieradz")
- MK("Sandomierz")
- MK("Szczyrk")
- MK("Szczytno")
- MK("Szczecin")
- MK("Zakopane")
- MK("Szklarska Poreba")
- MK("Bochnia")
- MK("Golub-Dobrzyn")
- MK("Chojnice")
- MK("Ostrowiec")
- MK("Otwock")
- MK("Wolsztyn")
-//;
-
-//static const char polish_2_m[] =
- MK("Jarocin")
- MK("Gogolin")
- MK("Tomaszow")
- MK("Piotrkow")
- MK("Lidzbark")
- MK("Rypin")
- MK("Radzymin")
- MK("Wolomin")
- MK("Pruszkow")
- MK("Olsztynek")
- MK("Rypin")
- MK("Cisek")
- MK("Krotoszyn")
- MK("Stoczek")
- MK("Lubin")
- MK("Lubicz")
- MK("Milicz")
- MK("Targ")
- MK("Ostrow")
- MK("Ozimek")
- MK("Puck")
- MK("Rzepin")
- MK("Siewierz")
- MK("Stargard")
- MK("Starogard")
- MK("Turek")
- MK("Tymbark")
- MK("Wolsztyn")
- MK("Strzepcz")
- MK("Strzebielin")
- MK("Sochaczew")
- MK("Grebocin")
- MK("Gniew")
- MK("Lubliniec")
- MK("Lubasz")
- MK("Lutomiersk")
- MK("Niemodlin")
- MK("Przeworsk")
- MK("Ursus")
- MK("Tyczyn")
- MK("Sztum")
- MK("Szczebrzeszyn")
- MK("Wolin")
- MK("Wrzeszcz")
- MK("Zgierz")
- MK("Zieleniec")
- MK("Drobin")
- MK("Garwolin")
-//;
-
-//static const char polish_2_f[] =
- MK("Szprotawa")
- MK("Pogorzelica")
- MK("Motlawa")
- MK("Lubawa")
- MK("Nidzica")
- MK("Kruszwica")
- MK("Bierawa")
- MK("Brodnica")
- MK("Chojna")
- MK("Krzepica")
- MK("Ruda")
- MK("Rumia")
- MK("Tuchola")
- MK("Trzebinia")
- MK("Ustka")
- MK("Warszawa")
- MK("Bobowa")
- MK("Dukla")
- MK("Krynica")
- MK("Murowana")
- MK("Niemcza")
- MK("Zaspa")
- MK("Zawoja")
- MK("Wola")
- MK("Limanowa")
- MK("Rabka")
- MK("Skawina")
- MK("Pilawa")
-//;
-
-//static const char polish_2_n[] =
- MK("Lipsko")
- MK("Pilzno")
- MK("Przodkowo")
- MK("Strzelno")
- MK("Susz")
- MK("Jaworzno")
- MK("Choszczno")
- MK("Mogilno")
- MK("Luzino")
- MK("Miasto")
- MK("Dziadowo")
- MK("Kowalewo")
- MK("Legionowo")
- MK("Miastko")
- MK("Zabrze")
- MK("Zawiercie")
- MK("Kochanowo")
- MK("Miechucino")
- MK("Mirachowo")
- MK("Robakowo")
- MK("Kosakowo")
- MK("Borne")
- MK("Braniewo")
- MK("Sulinowo")
- MK("Chmielno")
- MK("Jastrzebie")
- MK("Gryfino")
- MK("Koronowo")
- MK("Lubichowo")
- MK("Opoczno")
-;
-
-#define NUM_POLISH_3 29
-static const char polish_3_m[] =
- MK(" Wybudowanie")
- MK(" Swietokrzyski")
- MK(" Gorski")
- MK(" Morski")
- MK(" Zdroj")
- MK(" Wody")
- MK(" Bajoro")
- MK(" Krajenski")
- MK(" Slaski")
- MK(" Mazowiecki")
- MK(" Pomorski")
- MK(" Wielki")
- MK(" Maly")
- MK(" Warminski")
- MK(" Mazurski")
- MK(" Mniejszy")
- MK(" Wiekszy")
- MK(" Gorny")
- MK(" Dolny")
- MK(" Wielki")
- MK(" Stary")
- MK(" Nowy")
- MK(" Wielkopolski")
- MK(" Wzgorze")
- MK(" Mosty")
- MK(" Kujawski")
- MK(" Malopolski")
- MK(" Podlaski")
- MK(" Lesny")
-;
-static const char polish_3_f[] =
- MK(" Wybudowanie")
- MK(" Swietokrzyska")
- MK(" Gorska")
- MK(" Morska")
- MK(" Zdroj")
- MK(" Woda")
- MK(" Bajoro")
- MK(" Krajenska")
- MK(" Slaska")
- MK(" Mazowiecka")
- MK(" Pomorska")
- MK(" Wielka")
- MK(" Mala")
- MK(" Warminska")
- MK(" Mazurska")
- MK(" Mniejsza")
- MK(" Wieksza")
- MK(" Gorna")
- MK(" Dolna")
- MK(" Wielka")
- MK(" Stara")
- MK(" Nowa")
- MK(" Wielkopolska")
- MK(" Wzgorza")
- MK(" Mosty")
- MK(" Kujawska")
- MK(" Malopolska")
- MK(" Podlaska")
- MK(" Lesna")
-;
-static const char polish_3_n[] =
- MK(" Wybudowanie")
- MK(" Swietokrzyskie")
- MK(" Gorskie")
- MK(" Morskie")
- MK(" Zdroj")
- MK(" Wody")
- MK(" Bajoro")
- MK(" Krajenskie")
- MK(" Slaskie")
- MK(" Mazowieckie")
- MK(" Pomorskie")
- MK(" Wielkie")
- MK(" Male")
- MK(" Warminskie ")
- MK(" Mazurskie ")
- MK(" Mniejsze")
- MK(" Wieksze")
- MK(" Gorne")
- MK(" Dolne")
- MK(" Wielkie")
- MK(" Stare")
- MK(" Nowe")
- MK(" Wielkopolskie")
- MK(" Wzgorze")
- MK(" Mosty")
- MK(" Kujawskie")
- MK(" Malopolskie")
- MK(" Podlaskie")
- MK(" Lesne")
-;
-
-#define NUM_POLISH_2 NUM_POLISH_2_O + NUM_POLISH_2_M + NUM_POLISH_2_F + NUM_POLISH_2_N
-
-static const char * const _polish_types[3][2] = {
- {polish_1_m, polish_3_m}, // masculine
- {polish_1_f, polish_3_f}, // feminine
- {polish_1_n, polish_3_n}, // neutral
-};
-
static byte MakePolishTownName(byte *buf, uint32 seed)
{
- uint i, x;
- const char *const (*t)[2];
+ int i, j;
- // get a number ranging from 0 to all_towns
- i = GETNUM(0, NUM_POLISH_2);
+ //null terminates the string for strcat
+ strcpy(buf, "");
- // single name
- if(i < NUM_POLISH_2_O) {
- AppendPart(&buf, i, polish_2);
- return 0;
- }
+ // optional first segment
+ i = GetNumberBasedOnSeed(0,
+ lengthof(name_polish_2_o) +
+ lengthof(name_polish_2_m) +
+ lengthof(name_polish_2_f) +
+ lengthof(name_polish_2_n), seed);
+ j = GetNumberBasedOnSeed(2, 20, seed);
- // a suffix (12/20), a prefix (4/20), or nothing (4/20)
- x = GETNUM(5, 20);
- // no suffix of prefix
- if(x < 4) {
- AppendPart(&buf, i-NUM_POLISH_2_O, polish_2);
- return 0;
+ if (i < lengthof(name_polish_2_o))
+ {
+ strcat(buf, name_polish_2_o[GetNumberBasedOnSeed(3, lengthof(name_polish_2_o), seed)]);
}
+ else if (i < lengthof(name_polish_2_m) + lengthof(name_polish_2_o))
+ {
+ if (j < 4)
+ strcat(buf, name_polish_1_m[GetNumberBasedOnSeed(5, lengthof(name_polish_1_m), seed)]);
+
+ strcat(buf, name_polish_2_m[GetNumberBasedOnSeed(7, lengthof(name_polish_2_m), seed)]);
- t = _polish_types;
- if(IS_INT_INSIDE(i, NUM_POLISH_2_O, NUM_POLISH_2_O + NUM_POLISH_2_M)) {
- // nothing
- } else if (IS_INT_INSIDE(i, NUM_POLISH_2_O + NUM_POLISH_2_M, NUM_POLISH_2_O + NUM_POLISH_2_M + NUM_POLISH_2_F)) {
- t += 1;
- } else {
- t += 2;
+ if (j >= 4 && j < 16)
+ strcat(buf, name_polish_3_m[GetNumberBasedOnSeed(10, lengthof(name_polish_3_m), seed)]);
}
+ else if (i < lengthof(name_polish_2_f) + lengthof(name_polish_2_m) + lengthof(name_polish_2_o))
+ {
+ if (j < 4)
+ strcat(buf, name_polish_1_f[GetNumberBasedOnSeed(5, lengthof(name_polish_1_f), seed)]);
- // suffix or prefix
- if(x < 8) {
- AppendPart(&buf, GETNUM(10, NUM_POLISH_1), (*t)[0]);
- AppendPart(&buf, i, polish_2);
- } else {
- AppendPart(&buf, i, polish_2);
- AppendPart(&buf, GETNUM(10, NUM_POLISH_3), (*t)[1]);
+ strcat(buf, name_polish_2_f[GetNumberBasedOnSeed(7, lengthof(name_polish_2_f), seed)]);
+
+ if (j >= 4 && j < 16)
+ strcat(buf, name_polish_3_f[GetNumberBasedOnSeed(10, lengthof(name_polish_3_f), seed)]);
}
+ else
+ {
+ if (j < 4)
+ strcat(buf, name_polish_1_n[GetNumberBasedOnSeed(5, lengthof(name_polish_1_n), seed)]);
+
+ strcat(buf, name_polish_2_n[GetNumberBasedOnSeed(7, lengthof(name_polish_2_n), seed)]);
+ if (j >= 4 && j < 16)
+ strcat(buf, name_polish_3_n[GetNumberBasedOnSeed(10, lengthof(name_polish_3_n), seed)]);
+ }
return 0;
}
-#define NUM_CZECH_1 82
-static const char czech_1[] =
- MK("As")
- MK("Benesov")
- MK("Beroun")
- MK("Bezdruzice")
- MK("Blansko")
- MK("Breclav")
- MK("Brno")
- MK("Bruntál")
- MK("Ceská Lípa")
- MK("Ceské Budejovice")
- MK("Ceský Krumlov")
- MK("Decín")
- MK("Domazlice")
- MK("Dubí")
- MK("Frýdek-Místek")
- MK("Havlíckuv Brod")
- MK("Hodonín")
- MK("Hradec Králové")
- MK("Humpolec")
- MK("Cheb")
- MK("Chomutov")
- MK("Chrudim")
- MK("Jablonec nad Nisou")
- MK("Jeseník")
- MK("Jicín")
- MK("Jihlava")
- MK("Jindrichuv Hradec")
- MK("Karlovy Vary")
- MK("Karviná")
- MK("Kladno")
- MK("Klatovy")
- MK("Kolín")
- MK("Kosmonosy")
- MK("Kromeríz")
- MK("Kutná Hora")
- MK("Liberec")
- MK("Litomerice")
- MK("Louny")
- MK("Manetín")
- MK("Melník")
- MK("Mladá Boleslav")
- MK("Most")
- MK("Náchod")
- MK("Nový Jicín")
- MK("Nymburk")
- MK("Olomouc")
- MK("Opava")
- MK("Orácov")
- MK("Ostrava")
- MK("Pardubice")
- MK("Pelhrimov")
- MK("Polzice")
- MK("Písek")
- MK("Plzen")
- MK("Praha")
- MK("Prachatice")
- MK("Prerov")
- MK("Príbram")
- MK("Prostejov")
- MK("Rakovník")
- MK("Rokycany")
- MK("Rudná")
- MK("Rychnov nad Kneznou")
- MK("Semily")
- MK("Sokolov")
- MK("Strakonice")
- MK("Stredokluky")
- MK("Sumperk")
- MK("Svitavy")
- MK("Tábor")
- MK("Tachov")
- MK("Teplice")
- MK("Trebíc")
- MK("Trutnov")
- MK("Uherské Hradiste")
- MK("Ústí nad Labem")
- MK("Ústí nad Orlicí")
- MK("Vsetín")
- MK("Vyskov")
- MK("Zdár nad Sázavou")
- MK("Zlín")
- MK("Znojmo")
-;
-
static byte MakeCzechTownName(byte *buf, uint32 seed)
{
- AppendPart(&buf, GETNUM(0, NUM_CZECH_1), czech_1);
+ strcpy(buf, "");
+ strcat(buf, name_czech_1[GetNumberBasedOnSeed(0, lengthof(name_czech_1), seed)]);
return 0;
}
-#define NUM_ROMANIAN_1 94
-static const char romanian_1[]=
- MK("Adjud")
- MK("Alba Iulia")
- MK("Alexandria")
- MK("Babadag")
- MK("Bacău")
- MK("Baia Mare")
- MK("Băile Herculane")
- MK("Băilesti")
- MK("Bârlad")
- MK("Bicaz")
- MK("Bistrita")
- MK("Blaj")
- MK("Borsec")
- MK("Botosani")
- MK("Brăila")
- MK("Brasov")
- MK("Bucuresti")
- MK("Buftea")
- MK("Buzău")
- MK("Călărasi")
- MK("Caransebes")
- MK("Cernavodă")
- MK("Cluj-Napoca")
- MK("Constanta")
- MK("Covasna")
- MK("Craiova")
- MK("Dej")
- MK("Deva")
- MK("Dorohoi")
- MK("Dr.-Tr. Severin")
- MK("Drăgăsani")
- MK("Făgăras")
- MK("Fălticeni")
- MK("Fetesti")
- MK("Focsani")
- MK("Galati")
- MK("Gheorgheni")
- MK("Giurgiu")
- MK("Hârsova")
- MK("Hunedoara")
- MK("Husi")
- MK("Iasi")
- MK("Isaccea")
- MK("Lugoj")
- MK("Măcin")
- MK("Mangalia")
- MK("Medgidia")
- MK("Medias")
- MK("Miercurea Ciuc")
- MK("Mizil")
- MK("Motru")
- MK("Năsăud")
- MK("Năvodari")
- MK("Odobesti")
- MK("Oltenita")
- MK("Onesti")
- MK("Oradea")
- MK("Orsova")
- MK("Petrosani")
- MK("Piatra Neamt")
- MK("Pitesti")
- MK("Ploiesti")
- MK("Predeal")
- MK("Râmnicu Vâlcea")
- MK("Reghin")
- MK("Resita")
- MK("Roman")
- MK("Rosiorii de Vede")
- MK("Satu Mare")
- MK("Sebes")
- MK("Sfântu Gheorghe")
- MK("Sibiu")
- MK("Sighisoara")
- MK("Sinaia")
- MK("Slatina")
- MK("Slobozia")
- MK("Sovata")
- MK("Suceava")
- MK("Sulina")
- MK("Tăndărei")
- MK("Târgoviste")
- MK("Târgu Jiu")
- MK("Târgu Mures")
- MK("Tecuci")
- MK("Timisoara")
- MK("Tulcea")
- MK("Turda")
- MK("Turnu Măgurele")
- MK("Urziceni")
- MK("Vaslui")
- MK("Vatra Dornei")
- MK("Victoria")
- MK("Videle")
- MK("Zalău")
-;
-
static byte MakeRomanianTownName(byte *buf, uint32 seed)
{
- AppendPart(&buf, GETNUM(0, NUM_ROMANIAN_1), romanian_1);
- return 0;
+ strcpy(buf, "");
+ strcat(buf, name_romanian_1[GetNumberBasedOnSeed(0, lengthof(name_romanian_1), seed)]);
+ return 0;
}
-#define NUM_SLOVAKISH_1 87
-static const char slovakish_1[] =
- MK("Bratislava")
- MK("Banovce nad Bebravou")
- MK("Banska Bystrica")
- MK("Banska Stiavnica")
- MK("Bardejov")
- MK("Brezno")
- MK("Brezova pod Bradlom")
- MK("Bytca")
- MK("Cadca")
- MK("Cierna nad Tisou")
- MK("Detva")
- MK("Detva")
- MK("Dolny Kubin")
- MK("Dolny Kubin")
- MK("Dunajska Streda")
- MK("Gabcikovo")
- MK("Galanta")
- MK("Gbely")
- MK("Gelnica")
- MK("Handlova")
- MK("Hlohovec")
- MK("Holic")
- MK("Humenne")
- MK("Hurbanovo")
- MK("Kezmarok")
- MK("Komarno")
- MK("Kosice")
- MK("Kremnica")
- MK("Krompachy")
- MK("Kuty")
- MK("Leopoldov")
- MK("Levoca")
- MK("Liptovsky Mikulas")
- MK("Lucenec")
- MK("Malacky")
- MK("Martin")
- MK("Medzilaborce")
- MK("Michalovce")
- MK("Modra")
- MK("Myjava")
- MK("Namestovo")
- MK("Nitra")
- MK("Nova Bana")
- MK("Nove Mesto nad Vahom")
- MK("Nove Zamky")
- MK("Partizanske")
- MK("Pezinok")
- MK("Piestany")
- MK("Poltar")
- MK("Poprad")
- MK("Povazska Bystrica")
- MK("Prievidza")
- MK("Puchov")
- MK("Revuca")
- MK("Rimavska Sobota")
- MK("Roznava")
- MK("Ruzomberok")
- MK("Sabinov")
- MK("Sala")
- MK("Senec")
- MK("Senica")
- MK("Sered")
- MK("Skalica")
- MK("Sladkovicovo")
- MK("Smolenice")
- MK("Snina")
- MK("Stara Lubovna")
- MK("Stara Tura")
- MK("Strazske")
- MK("Stropkov")
- MK("Stupava")
- MK("Sturovo")
- MK("Sulekovo")
- MK("Topolcany")
- MK("Trebisov")
- MK("Trencin")
- MK("Trnava")
- MK("Turcianske Teplice")
- MK("Tvrdosin")
- MK("Vrable")
- MK("Vranov nad Toplov")
- MK("Zahorska Bystrica")
- MK("Zdiar")
- MK("Ziar nad Hronom")
- MK("Zilina")
- MK("Zlate Moravce")
- MK("Zvolen")
-;
-
static byte MakeSlovakTownName(byte *buf, uint32 seed)
{
- AppendPart(&buf, GETNUM(0, NUM_SLOVAKISH_1), slovakish_1);
+ strcpy(buf, "");
+ strcat(buf, name_slovakish_1[GetNumberBasedOnSeed(0, lengthof(name_slovakish_1), seed)]);
return 0;
}
-// Modifiers
-#define NUM_HUNGARIAN_1 5
-static const char hungarian_1[] =
- MK("Nagy-")
- MK("Kis-")
- MK("Felső-")
- MK("Alsó-")
- MK("Új-")
-;
-
-#define NUM_HUNGARIAN_2 54
-static const char hungarian_2[] =
-// River modifiers
-// 1 - 10
- MK("Bodrog")
- MK("Dráva")
- MK("Duna")
- MK("Hejő")
- MK("Hernád")
- MK("Rába")
- MK("Sajó")
- MK("Szamos")
- MK("Tisza")
- MK("Zala")
- // Lake modifiers
- // 11 - 12
- MK("Balaton")
- MK("Fertő")
- // Mountain modifiers
- // 13 - 14
- MK("Bakony")
- MK("Cserhát")
- // Country modifiers
- // 15 - 23
- MK("Bihar")
- MK("Hajdú")
- MK("Jász")
- MK("Kun")
- MK("Magyar")
- MK("Nógrád")
- MK("Nyír")
- MK("Somogy")
- MK("Székely")
- // Town modifiers
- // 24 - 26
- MK("Buda")
- MK("Győr")
- MK("Pest")
- // Color modifiers
- // 27
- MK("Fehér")
- // General terrain modifiers
- // 28 - 34
- MK("Cserép")
- MK("Erdő")
- MK("Hegy")
- MK("Homok")
- MK("Mező")
- MK("Puszta")
- MK("Sár")
- // Rank modifiers
- // 35 - 40
- MK("Császár")
- MK("Herceg")
- MK("Király")
- MK("Nemes")
- MK("Püspök")
- MK("Szent")
- // Plant modifiers
- // 41 - 42
- MK("Almás")
- MK("Szilvás")
- // Standard stuff
- // 43 - 54
- MK("Agg")
- MK("Aranyos")
- MK("Békés")
- MK("Egyházas")
- MK("Gagy")
- MK("Heves")
- MK("Kapos")
- MK("Tápió")
- MK("Torna")
- MK("Vas")
- MK("Vámos")
- MK("Vásáros")
-;
-
-#define NUM_HUNGARIAN_3 16
-static const char hungarian_3[] =
- MK("apáti")
- MK("bába")
- MK("bikk")
- MK("dob")
- MK("fa")
- MK("föld")
- MK("hegyes")
- MK("kak")
- MK("kereszt")
- MK("kürt")
- MK("ladány")
- MK("mérges")
- MK("szalonta")
- MK("telek")
- MK("vas")
- MK("völgy")
-;
-
-#define NUM_HUNGARIAN_4 5
-static const char hungarian_4[] =
- MK("alja")
- MK("egyháza")
- MK("háza")
- MK("úr")
- MK("vár")
-;
-
-#define NUM_HUNGARIAN_REAL 35
-static const char hungarian_real[] =
- MK("Ajka")
- MK("Aszód")
- MK("Badacsony")
- MK("Baja")
- MK("Budapest")
- MK("Debrecen")
- MK("Eger")
- MK("Fonyód")
- MK("Gödöllő")
- MK("Győr")
- MK("Gyula")
- MK("Karcag")
- MK("Kecskemét")
- MK("Keszthely")
- MK("Kisköre")
- MK("Kocsord")
- MK("Komárom")
- MK("Kőszeg")
- MK("Makó")
- MK("Mohács")
- MK("Miskolc")
- MK("Ózd")
- MK("Paks")
- MK("Pápa")
- MK("Pécs")
- MK("Polgár")
- MK("Sarkad")
- MK("Siófok")
- MK("Szeged")
- MK("Szentes")
- MK("Szolnok")
- MK("Tihany")
- MK("Tokaj")
- MK("Vác")
- MK("Záhony")
- MK("Zirc")
-;
-
static byte MakeHungarianTownName(byte *buf, uint32 seed)
{
int i;
- if (GETNUM(12, 15) < 3) {
- /* These are real names.. */
- AppendPart(&buf, GETNUM(0, NUM_HUNGARIAN_REAL), hungarian_real);
- } else {
- /* These are the generated names.. Some of them exist, LOL */
- /* Append the prefix if needed */
- i = GETNUM(3, NUM_HUNGARIAN_1 * 3);
- if (i < NUM_HUNGARIAN_1) AppendPart(&buf, i, hungarian_1);
+ //null terminates the string for strcat
+ strcpy(buf, "");
- AppendPart(&buf, GETNUM(3, NUM_HUNGARIAN_2), hungarian_2);
- AppendPart(&buf, GETNUM(6, NUM_HUNGARIAN_3), hungarian_3);
+ if (GetNumberBasedOnSeed(12, 15, seed) < 3)
+ {
+ strcat(buf, name_hungarian_real[GetNumberBasedOnSeed(0, lengthof(name_hungarian_real), seed)]);
+ }
+ else
+ {
+ // optional first segment
+ if ((i = GetNumberBasedOnSeed(0, lengthof(name_hungarian_1) * 3, seed)) < lengthof(name_hungarian_1))
+ {
+ strcat(buf, name_hungarian_1[i]);
+ }
+
+ // mandatory middle segments
+ strcat(buf, name_hungarian_2[GetNumberBasedOnSeed(3, lengthof(name_hungarian_2), seed)]);
+ strcat(buf, name_hungarian_3[GetNumberBasedOnSeed(6, lengthof(name_hungarian_3), seed)]);
- i = GETNUM(10, NUM_HUNGARIAN_4 * 3);
- if (i < NUM_HUNGARIAN_4) AppendPart(&buf, i, hungarian_4);
+ // optional last segment
+ if ((i = GetNumberBasedOnSeed(10, lengthof(name_hungarian_4) * 3, seed)) < lengthof(name_hungarian_4)) {
+ strcat(buf, name_hungarian_4[i]);
+ }
}
+
return 0;
}
TownNameGenerator * const _town_name_generators[] = {
- MakeEnglishTownName,
+ MakeEnglishOriginalTownName,
MakeFrenchTownName,
MakeGermanTownName,
- MakeAmericanTownName,
+ MakeEnglishAdditionalTownName,
MakeSpanishTownName,
MakeSillyTownName,
MakeSwedishTownName,
@@ -2181,6 +428,7 @@ TownNameGenerator * const _town_name_generators[] = {
MakeCzechTownName,
};
+// DO WE NEED THIS ANY MORE?
#define FIXNUM(x, y, z) (((((x) << 16) / (y)) + 1) << z)
uint32 GetOldTownName(uint32 townnameparts, byte old_town_name_type)
@@ -2191,19 +439,19 @@ uint32 GetOldTownName(uint32 townnameparts, byte old_town_name_type)
return townnameparts;
case 1: /* French */
/* For some reason 86 needs to be subtracted from townnameparts
- * 0000 0000 0000 0000 0000 0000 1111 1111 */
- return FIXNUM(townnameparts - 86, NUM_FRENCH_1, 0);
+ * 0000 0000 0000 0000 0000 0000 1111 1111 */
+ return FIXNUM(townnameparts - 86, lengthof(name_french_1), 0);
case 2: /* German */
DEBUG(misc, 0) ("German Townnames are buggy... (%d)", townnameparts);
return townnameparts;
case 4: /* Latin-American */
/* 0000 0000 0000 0000 0000 0000 1111 1111 */
- return FIXNUM(townnameparts, NUM_SPANISH_1, 0);
+ return FIXNUM(townnameparts, lengthof(name_spanish_1), 0);
case 5: /* Silly */
/* NUM_SILLY_1 - lower 16 bits
- * NUM_SILLY_2 - upper 16 bits without leading 1 (first 8 bytes)
- * 1000 0000 2222 2222 0000 0000 1111 1111 */
- return FIXNUM(townnameparts, NUM_SILLY_1, 0) | FIXNUM(((townnameparts >> 16)&0xFF), NUM_SILLY_2, 16);
+ * NUM_SILLY_2 - upper 16 bits without leading 1 (first 8 bytes)
+ * 1000 0000 2222 2222 0000 0000 1111 1111 */
+ return FIXNUM(townnameparts, lengthof(name_silly_1), 0) | FIXNUM(((townnameparts >> 16)&0xFF), lengthof(name_silly_2), 16);
}
return 0;
}
diff --git a/settings_gui.c b/settings_gui.c
index 8e7790f34..f92463b5b 100644
--- a/settings_gui.c
+++ b/settings_gui.c
@@ -76,7 +76,7 @@ static void GameOptionsWndProc(Window *w, WindowEvent *e)
SetDParam(1, _currency_string_list[_opt_mod_ptr->currency]);
SetDParam(2, _opt_mod_ptr->kilometers + STR_0139_IMPERIAL_MILES);
SetDParam(3, STR_02E9_DRIVE_ON_LEFT + _opt_mod_ptr->road_side);
- SetDParam(4, STR_TOWNNAME_ENGLISH + _opt_mod_ptr->town_name);
+ SetDParam(4, STR_TOWNNAME_ORIGINAL_ENGLISH + _opt_mod_ptr->town_name);
SetDParam(5, _autosave_dropdown[_opt_mod_ptr->autosave]);
SetDParam(6, SPECSTR_LANGUAGE_START + _dynlang.curr);
i = GetCurRes();
@@ -103,7 +103,7 @@ static void GameOptionsWndProc(Window *w, WindowEvent *e)
}
case 14: {
int i = _opt_mod_ptr->town_name;
- ShowDropDownMenu(w, BuildDynamicDropdown(STR_TOWNNAME_ENGLISH, SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1), i, e->click.widget, (_game_mode == GM_MENU) ? 0 : (-1) ^ (1 << i));
+ ShowDropDownMenu(w, BuildDynamicDropdown(STR_TOWNNAME_ORIGINAL_ENGLISH, SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1), i, e->click.widget, (_game_mode == GM_MENU) ? 0 : (-1) ^ (1 << i));
return;
}
case 17:
diff --git a/table/namegen.h b/table/namegen.h
new file mode 100644
index 000000000..af0c9888c
--- /dev/null
+++ b/table/namegen.h
@@ -0,0 +1,1978 @@
+#include "../stdafx.h"
+#include "../ttd.h"
+
+static const char *name_original_english_1[] = {
+ "Great ",
+ "Little ",
+ "New ",
+ "Fort ",
+};
+
+static const char *name_original_english_2[] = {
+ "Wr",
+ "B",
+ "C",
+ "Ch",
+ "Br",
+ "D",
+ "Dr",
+ "F",
+ "Fr",
+ "Fl",
+ "G",
+ "Gr",
+ "H",
+ "L",
+ "M",
+ "N",
+ "P",
+ "Pr",
+ "Pl",
+ "R",
+ "S",
+ "S",
+ "Sl",
+ "T",
+ "Tr",
+ "W"
+};
+
+static const char *name_original_english_3[] = {
+ "ar",
+ "a",
+ "e",
+ "in",
+ "on",
+ "u",
+ "un",
+ "en"
+};
+
+static const char *name_original_english_4[] = {
+ "n",
+ "ning",
+ "ding",
+ "d",
+ "",
+ "t"
+ "fing"
+};
+
+static const char *name_original_english_5[] = {
+ "ville",
+ "ham",
+ "field",
+ "ton",
+ "town",
+ "bridge",
+ "bury",
+ "wood",
+ "ford",
+ "hall",
+ "ston",
+ "way",
+ "stone",
+ "borough",
+ "ley",
+ "head",
+ "bourne",
+ "pool",
+ "worth",
+ "hill",
+ "well",
+ "hattan",
+ "burg",
+};
+
+static const char *name_original_english_6[] = {
+ "-on-sea",
+ " Bay",
+ " Market",
+ " Cross",
+ " Bridge",
+ " Falls",
+ " City",
+ " Ridge",
+ " Springs"
+};
+
+static const char *name_additional_english_prefix[] = {
+ "Great ",
+ "Little ",
+ "New ",
+ "Fort ",
+ "St. ",
+ "Old "
+};
+
+static const char *name_additional_english_1a[] = {
+ "Pen",
+ "Lough",
+ "Stam",
+ "Aber",
+ "Acc",
+ "Ex",
+ "Ax",
+ "Bre",
+ "Cum",
+ "Dun",
+ "Fin",
+ "Inver",
+ "Kin",
+ "Mon",
+ "Nan",
+ "Nant",
+ "Pit",
+ "Pol",
+ "Pont",
+ "Strath",
+ "Tre",
+ "Tilly",
+ "Beck",
+ "Canter",
+ "Bath",
+ "Liver",
+ "Mal",
+ "Ox",
+ "Bletch",
+ "Maccles",
+ "Grim",
+ "Wind",
+ "Sher",
+ "Gates",
+ "Orp",
+ "Brom",
+ "Lewis",
+ "Whit",
+ "White",
+ "Worm",
+ "Tyne",
+ "Avon",
+ "Stan"
+};
+
+static const char *name_additional_english_1b1[] = {
+ "Wr",
+ "B",
+ "C",
+ "Ch",
+ "Br",
+ "D",
+ "Dr",
+ "F",
+ "Fr",
+ "Fl",
+ "G",
+ "Gr",
+ "H",
+ "L",
+ "M",
+ "N",
+ "P",
+ "Pr",
+ "Pl",
+ "R",
+ "S",
+ "S",
+ "Sl",
+ "T",
+ "Tr",
+ "W"
+};
+
+static const char *name_additional_english_1b2[] = {
+ "ar",
+ "a",
+ "e",
+ "in",
+ "on",
+ "u",
+ "o",
+ "ee",
+ "es",
+ "ea",
+ "un",
+ "en"
+};
+
+static const char *name_additional_english_1b3a[] = {
+ "n",
+ "d",
+ "",
+ "t",
+ "",
+ ""
+};
+
+static const char *name_additional_english_1b3b[] = {
+ "ning",
+ "ding",
+ "fing"
+};
+
+static const char *name_additional_english_2[] = {
+ "ville",
+ "ham",
+ "field",
+ "ton",
+ "town",
+ "borough",
+ "bridge",
+ "bury",
+ "wood",
+ "ditch",
+ "ford",
+ "hall",
+ "dean",
+ "leigh",
+ "dore",
+ "ston",
+ "stow",
+ "church",
+ "wich",
+ "low",
+ "way",
+ "stone",
+ "minster",
+ "ley",
+ "head",
+ "bourne",
+ "pool",
+ "worth",
+ "hill",
+ "well",
+ "hattan",
+ "burg",
+ "berg",
+ "burgh",
+ "port",
+ "stoke",
+ "haven",
+ "stable",
+ "stock",
+ "side",
+ "brook",
+ "don",
+ "den",
+ "down",
+ "nor",
+ "grove",
+ "combe",
+ "by",
+ "say",
+ "ney",
+ "chester",
+ "dale",
+ "ness",
+ "shaw",
+ "thwaite"
+};
+
+static const char *name_additional_english_3[] = {
+ "-on-sea",
+ " Bay",
+ " Market",
+ " Beeches",
+ " Common",
+ " Park",
+ " Heath",
+ " Marsh",
+ " Green",
+ " Castle",
+ " End",
+ " Rivers",
+ " Cross",
+ " Bridge",
+ " Falls",
+ " City",
+ " Ridge",
+ " Springs"
+};
+
+static const char *name_austrian_a1[] = {
+ "Bad ",
+ "Deutsch ",
+ "Gross ",
+ "Klein ",
+ "Markt ",
+ "Maria "
+};
+
+static const char *name_austrian_a2[] = {
+ "Aus",
+ "Alten",
+ "Braun",
+ "Vösl",
+ "Mittern",
+ "Nuss",
+ "Neu",
+ "Walters",
+ "Breiten",
+ "Eisen",
+ "Feld",
+ "Mittern",
+ "Gall",
+ "Obern",
+ "Grat",
+ "Heiligen",
+ "Hof",
+ "Holla",
+ "Stein",
+ "Eber",
+ "Eggen",
+ "Enzers",
+ "Frauen",
+ "Herren",
+ "Hof",
+ "Hütt",
+ "Kaisers",
+ "Königs",
+ "Knittel",
+ "Lang",
+ "Ober",
+ "Ollers",
+ "Pfaffen",
+ "Potten",
+ "Salz",
+ "Schwarz",
+ "Stocker",
+ "Unter",
+ "Utten",
+ "Vösen",
+ "Vill",
+ "Weissen"
+};
+
+static const char *name_austrian_a3[] = {
+ "see",
+ "bach",
+ "dorf",
+ "ach",
+ "stein",
+ "hofen",
+ "au",
+ "ach",
+ "kirch",
+ "kirchen",
+ "kreuz",
+ "brunn",
+ "siedl",
+ "markt",
+ "wang",
+ "haag"
+};
+
+static const char *name_austrian_a4[] = {
+ "Bruck",
+ "Brunn",
+ "Gams",
+ "Grein",
+ "Ried",
+ "Faak",
+ "Zell",
+ "Spital",
+ "Kirchberg",
+ "Saal",
+ "Taferl",
+ "Wald"
+};
+
+static const char *name_austrian_a5[] = {
+ "St. ",
+ "Sankt "
+};
+
+static const char *name_austrian_a6[] = {
+ "Aegyd",
+ "Andrä",
+ "Georgen",
+ "Jakob",
+ "Johann",
+ "Leonhard",
+ "Marein",
+ "Lorenzen",
+ "Margarethen",
+ "Martin",
+ "Michael",
+ "Nikolai",
+ "Oswald",
+ "Peter",
+ "Pölten",
+ "Stefan",
+ "Stephan",
+ "Thomas",
+ "Veit",
+ "Wolfgang"
+};
+
+static const char *name_austrian_f1[] = {
+ " an der ",
+ " ob der "
+};
+
+static const char *name_austrian_f2[] = {
+ "Donau",
+ "Steyr",
+ "Lafnitz",
+ "Leitha",
+ "Thaya",
+ "Gail",
+ "Drau",
+ "Salzach",
+ "Ybbs",
+ "Traisen",
+ "Enns",
+ "Mur",
+ "Ill"
+};
+
+static const char *name_austrian_b1[] = {
+ " am "
+};
+
+static const char *name_austrian_b2[] = {
+ "Brenner",
+ "Dachstein",
+ "Gebirge",
+ "Grossglockner",
+ "Hausruck",
+ "Semmering",
+ "Wagram",
+ "Wechsel",
+ "Wilden Kaiser",
+ "Ziller"
+};
+
+static const char *name_german_hardcoded[] = {
+ "Berlin",
+ "Bonn",
+ "Bremen",
+ "Cottbus",
+ "Chemnitz",
+ "Dortmund",
+ "Dresden",
+ "Erfurt",
+ "Erlangen",
+ "Essen",
+ "Fulda",
+ "Gera",
+ "Kassel",
+ "Kiel",
+ "Köln",
+ "Lübeck",
+ "Magdeburg",
+ "München",
+ "Potsdam",
+ "Stuttgart",
+ "Wiesbaden"
+};
+
+static const char *name_german_pre[] = {
+ "Bad ",
+ "Klein ",
+ "Neu "
+};
+
+static const char *name_german_1[] = {
+ "Alb",
+ "Als",
+ "Ander",
+ "Arns",
+ "Bruns",
+ "Bam",
+ "Biele",
+ "Cloppen",
+ "Co",
+ "Duis",
+ "Düssel",
+ "Dannen",
+ "Elb",
+ "Els",
+ "Elster",
+ "Eichen",
+ "Ems",
+ "Fahr",
+ "Falken",
+ "Flens",
+ "Frank",
+ "Frei",
+ "Freuden",
+ "Fried",
+ "Fürsten",
+ "Hahn",
+ "Ham",
+ "Harz",
+ "Heidel",
+ "Hers",
+ "Herz",
+ "Holz",
+ "Hildes",
+ "Inns",
+ "Ilsen",
+ "Ingols",
+ "Kel",
+ "Kies",
+ "Korn",
+ "Kor",
+ "Kreuz",
+ "Kulm",
+ "Langen",
+ "Lim",
+ "Lohr",
+ "Lüne",
+ "Mel",
+ "Michels",
+ "Mühl",
+ "Naum",
+ "Nest",
+ "Nord",
+ "Nort",
+ "Nien",
+ "Nidda",
+ "Nieder",
+ "Nürn",
+ "Ober",
+ "Offen",
+ "Osna",
+ "Olden",
+ "Ols",
+ "Oranien",
+ "Pader",
+ "Quedlin",
+ "Quer",
+ "Ravens",
+ "Regens",
+ "Rott",
+ "Ros",
+ "Rüssels",
+ "Saal",
+ "Saar",
+ "Salz",
+ "Schöne",
+ "Schwein",
+ "Sonder",
+ "Sonnen",
+ "Stein",
+ "Strals",
+ "Straus",
+ "Süd",
+ "Ton",
+ "Unter",
+ "Ur",
+ "Vor",
+ "Wald",
+ "War",
+ "Wert",
+ "Wester",
+ "Witten",
+ "Wolfs",
+ "Würz"
+};
+
+static const char *name_german_2[] = {
+ "bach",
+ "berg",
+ "brück",
+ "brücken",
+ "burg",
+ "dorf",
+ "feld",
+ "furt",
+ "hausen",
+ "haven",
+ "heim",
+ "horst",
+ "mund",
+ "münster",
+ "stadt",
+ "wald"
+};
+
+static const char *name_german_3_an_der[] = {
+ " an der "
+};
+
+static const char *name_german_3_am[] = {
+ " am "
+};
+
+static const char *name_german_4_an_der[] = {
+ "Oder",
+ "Spree",
+ "Donau",
+ "Saale",
+ "Elbe"
+};
+
+static const char *name_german_4_am[] = {
+ "Main"
+};
+
+static const char *name_spanish_1[] = {
+ "Caracas",
+ "Maracay",
+ "Maracaibo",
+ "Velencia",
+ "El Dorado",
+ "Morrocoy",
+ "Cata",
+ "Cataito",
+ "Ciudad Bolivar",
+ "Barquisimeto",
+ "Merida",
+ "Puerto Ordaz",
+ "Santa Elena",
+ "San Juan",
+ "San Luis",
+ "San Rafael",
+ "Santiago",
+ "Barcelona",
+ "Barinas",
+ "San Cristobal",
+ "San Fransisco",
+ "San Martin",
+ "Guayana",
+ "San Carlos",
+ "El Limon",
+ "Coro",
+ "Corocoro",
+ "Puerto Ayacucho",
+ "Elorza",
+ "Arismendi",
+ "Trujillo",
+ "Carupano",
+ "Anaco",
+ "Lima",
+ "Cuzco",
+ "Iquitos",
+ "Callao",
+ "Huacho",
+ "Camana",
+ "Puerto Chala",
+ "Santa Cruz",
+ "Quito",
+ "Cuenca",
+ "Huacho",
+ "Tulcan",
+ "Esmereldas",
+ "Ibarra",
+ "San Lorenzo",
+ "Macas",
+ "Morana",
+ "Machala",
+ "Zamora",
+ "Latacunga",
+ "Tena",
+ "Cochabamba",
+ "Ascencion",
+ "Magdalena",
+ "Santa Ana",
+ "Manoa",
+ "Sucre",
+ "Oruro",
+ "Uyuni",
+ "Potosi",
+ "Tupiza",
+ "La Quiaca",
+ "Yacuiba",
+ "San Borja",
+ "Fuerte Olimpio",
+ "Fortin Esteros",
+ "Campo Grande",
+ "Bogota",
+ "El Banco",
+ "Zaragosa",
+ "Neiva",
+ "Mariano",
+ "Cali",
+ "La Palma",
+ "Andoas",
+ "Barranca",
+ "Montevideo",
+ "Valdivia",
+ "Arica",
+ "Temuco",
+ "Tocopilla",
+ "Mendoza",
+ "Santa Rosa"
+};
+
+static const char *name_french_1[] = {
+ "Agincourt",
+ "Lille",
+ "Dinan",
+ "Aubusson",
+ "Rodez",
+ "Bergerac",
+ "Bordeaux",
+ "Bayonne",
+ "Montpellier",
+ "Montelimar",
+ "Valence",
+ "Digne",
+ "Nice",
+ "Cannes",
+ "St. Tropez",
+ "Marseilles",
+ "Narbonne",
+ "Sčte",
+ "Aurillac",
+ "Gueret",
+ "Le Creusot",
+ "Nevers",
+ "Auxerre",
+ "Versailles",
+ "Meaux",
+ "Châlons",
+ "Compičgne",
+ "Metz",
+ "Chaumont",
+ "Langres",
+ "Bourg",
+ "Lyons",
+ "Vienne",
+ "Grenoble",
+ "Toulon",
+ "Rennes",
+ "Le Mans",
+ "Angers",
+ "Nantes",
+ "Châteauroux",
+ "Orléans",
+ "Lisieux",
+ "Cherbourg",
+ "Morlaix",
+ "Cognac",
+ "Agen",
+ "Tulle",
+ "Blois",
+ "Troyes",
+ "Charolles",
+ "Grenoble",
+ "Chambéry",
+ "Tours",
+ "St. Brieuc",
+ "St. Malo",
+ "La Rochelle",
+ "St. Flour",
+ "Le Puy",
+ "Vichy",
+ "St. Valery",
+ "Beaujolais",
+ "Narbonne",
+ "Albi",
+ "St. Valery",
+ "Biarritz",
+ "Béziers",
+ "Nîmes",
+ "Chamonix",
+ "Angoulčme",
+ "Alençon"
+};
+
+static const char *name_silly_1[] = {
+ "Binky",
+ "Blubber",
+ "Bumble",
+ "Crinkle",
+ "Crusty",
+ "Dangle",
+ "Dribble",
+ "Flippety",
+ "Google",
+ "Muffin",
+ "Nosey",
+ "Pinker",
+ "Quack",
+ "Rumble",
+ "Sleepy",
+ "Sliggles",
+ "Snooze",
+ "Teddy",
+ "Tinkle",
+ "Twister",
+ "Pinker",
+ "Hippo",
+ "Itchy",
+ "Jelly",
+ "Jingle",
+ "Jolly",
+ "Kipper",
+ "Lazy",
+ "Frogs",
+ "Mouse",
+ "Quack",
+ "Cheeky",
+ "Lumpy",
+ "Grumpy",
+ "Mangle",
+ "Fiddle",
+ "Slugs",
+ "Noodles",
+ "Poodles",
+ "Shiver",
+ "Rumble",
+ "Pixie",
+ "Puddle",
+ "Riddle",
+ "Rattle",
+ "Rickety",
+ "Waffle",
+ "Sagging",
+ "Sausage",
+ "Egg",
+ "Sleepy",
+ "Scatter",
+ "Scramble",
+ "Silly",
+ "Simple",
+ "Trickle",
+ "Slippery",
+ "Slimey",
+ "Slumber",
+ "Soggy",
+ "Sliggles",
+ "Splutter",
+ "Sulky",
+ "Swindle",
+ "Swivel",
+ "Tasty",
+ "Tangle",
+ "Toggle",
+ "Trotting",
+ "Tumble",
+ "Snooze",
+ "Water",
+ "Windy",
+ "Amble",
+ "Bubble",
+ "Cheery",
+ "Cheese",
+ "Cockle",
+ "Cracker",
+ "Crumple",
+ "Teddy",
+ "Evil",
+ "Fairy",
+ "Falling",
+ "Fishy",
+ "Fizzle",
+ "Frosty",
+ "Griddle"
+};
+
+static const char *name_silly_2[] = {
+ "ton",
+ "bury",
+ "bottom",
+ "ville",
+ "well",
+ "weed",
+ "worth",
+ "wig",
+ "wick",
+ "wood",
+ "pool",
+ "head",
+ "burg",
+ "gate",
+ "bridge"
+};
+
+static const char *name_swedish_1[] = {
+ "Gamla ",
+ "Lilla ",
+ "Nya ",
+ "Stora "
+};
+
+static const char *name_swedish_2[] = {
+ "Boll",
+ "Bor",
+ "Ed",
+ "En",
+ "Erik",
+ "Es",
+ "Fin",
+ "Fisk",
+ "Grön",
+ "Hag",
+ "Halm",
+ "Karl",
+ "Kram",
+ "Kung",
+ "Land",
+ "Lid",
+ "Lin",
+ "Mal",
+ "Malm",
+ "Marie",
+ "Ner",
+ "Norr",
+ "Oskar",
+ "Sand",
+ "Skog",
+ "Stock",
+ "Stor",
+ "Ström",
+ "Sund",
+ "Söder",
+ "Tall",
+ "Tratt",
+ "Troll",
+ "Upp",
+ "Var",
+ "Väster",
+ "Ängel",
+ "Öster"
+};
+
+static const char *name_swedish_2a[] = {
+ "B",
+ "Br",
+ "D",
+ "Dr",
+ "Dv",
+ "F",
+ "Fj",
+ "Fl",
+ "Fr",
+ "G",
+ "Gl",
+ "Gn",
+ "Gr",
+ "H",
+ "J",
+ "K",
+ "Kl",
+ "Kn",
+ "Kr",
+ "Kv",
+ "L",
+ "M",
+ "N",
+ "P",
+ "Pl",
+ "Pr",
+ "R",
+ "S",
+ "Sk",
+ "Skr",
+ "Sl",
+ "Sn",
+ "Sp",
+ "Spr",
+ "St",
+ "Str",
+ "Sv",
+ "T",
+ "Tr",
+ "Tv",
+ "V",
+ "Vr"
+};
+
+static const char *name_swedish_2b[] = {
+ "a",
+ "e",
+ "i",
+ "o",
+ "u",
+ "y",
+ "ĺ",
+ "ä",
+ "ö"
+};
+
+static const char *name_swedish_2c[] = {
+ "ck",
+ "d",
+ "dd",
+ "g",
+ "gg",
+ "l",
+ "ld",
+ "m",
+ "n",
+ "nd",
+ "ng",
+ "nn",
+ "p",
+ "pp",
+ "r",
+ "rd",
+ "rk",
+ "rp",
+ "rr",
+ "rt",
+ "s",
+ "sk",
+ "st",
+ "t",
+ "tt",
+ "v"
+};
+
+static const char *name_swedish_3[] = {
+ "arp",
+ "berg",
+ "boda",
+ "borg",
+ "bro",
+ "bukten",
+ "by",
+ "byn",
+ "fors",
+ "hammar",
+ "hamn",
+ "holm",
+ "hus",
+ "hättan",
+ "kulle",
+ "köping",
+ "lund",
+ "löv",
+ "sala",
+ "skrona",
+ "slätt",
+ "spĺng",
+ "stad",
+ "sund",
+ "svall",
+ "svik",
+ "sĺker",
+ "udde",
+ "valla",
+ "viken",
+ "älv",
+ "ĺs"
+};
+
+static const char *name_dutch_1[] = {
+ "Nieuw ",
+ "Oud ",
+ "Groot ",
+ "Zuid ",
+ "Noord ",
+ "Oost ",
+ "West ",
+ "Klein "
+};
+
+static const char *name_dutch_2[] = {
+ "Hoog",
+ "Laag",
+ "Zuider",
+ "Zuid",
+ "Ooster",
+ "Oost",
+ "Wester",
+ "West",
+ "Hoofd",
+ "Midden",
+ "Eind",
+ "Amster",
+ "Amstel",
+ "Dord",
+ "Rotter",
+ "Haar",
+ "Til",
+ "Enk",
+ "Dok",
+ "Veen",
+ "Leidsch",
+ "Lely",
+ "En",
+ "Kaats",
+ "U",
+ "Maas",
+ "Mar",
+ "Bla",
+ "Al",
+ "Alk",
+ "Eer",
+ "Drie",
+ "Ter",
+ "Groes",
+ "Goes",
+ "Soest",
+ "Coe",
+ "Uit",
+ "Zwaag",
+ "Hellen",
+ "Slie",
+ "IJ",
+ "Grubben",
+ "Groen",
+ "Lek",
+ "Ridder",
+ "Schie",
+ "Olde",
+ "Roose",
+ "Haar",
+ "Til",
+ "Loos",
+ "Hil"
+};
+
+static const char *name_dutch_3[] = {
+ "Drog",
+ "Nat",
+ "Valk",
+ "Bob",
+ "Dedem",
+ "Kollum",
+ "Best",
+ "Hoend",
+ "Leeuw",
+ "Graaf",
+ "Uithuis",
+ "Purm",
+ "Hard",
+ "Hell",
+ "Werk",
+ "Spijk",
+ "Vink",
+ "Wams",
+ "Heerhug",
+ "Koning"
+};
+
+static const char *name_dutch_4[] = {
+ "e",
+ "er",
+ "el",
+ "en",
+ "o",
+ "s"
+};
+
+static const char *name_dutch_5[] = {
+ "stad",
+ "vorst",
+ "dorp",
+ "dam",
+ "beek",
+ "doorn",
+ "zijl",
+ "zijlen",
+ "lo",
+ "muiden",
+ "meden",
+ "vliet",
+ "nisse",
+ "daal",
+ "vorden",
+ "vaart",
+ "mond",
+ "zaal",
+ "water",
+ "duinen",
+ "heuvel",
+ "geest",
+ "kerk",
+ "meer",
+ "maar",
+ "hoorn",
+ "rade",
+ "wijk",
+ "berg",
+ "heim",
+ "sum",
+ "richt",
+ "burg",
+ "recht",
+ "drecht",
+ "trecht",
+ "tricht",
+ "dricht",
+ "lum",
+ "rum",
+ "halen",
+ "oever",
+ "wolde",
+ "veen",
+ "hoven",
+ "gast",
+ "kum",
+ "hage",
+ "dijk",
+ "zwaag",
+ "pomp",
+ "huizen",
+ "bergen",
+ "schede",
+ "mere",
+ "end"
+};
+
+static const char *name_finnish_1[] = {
+ "Aijala",
+ "Kisko",
+ "Espoo",
+ "Helsinki",
+ "Tapiola",
+ "Järvelä",
+ "Lahti",
+ "Kotka",
+ "Hamina",
+ "Loviisa",
+ "Kouvola",
+ "Tampere",
+ "Kokkola",
+ "Oulu",
+ "Salo",
+ "Malmi",
+ "Pelto",
+ "Koski",
+ "Iisalmi",
+ "Raisio",
+ "Taavetti",
+ "Joensuu",
+ "Imatra",
+ "Tapanila",
+ "Pasila"
+};
+
+static const char *name_finnish_2a[] = {
+ "Hiekka",
+ "Haapa",
+ "Mylly",
+ "Kivi",
+ "Lappeen",
+ "Lohjan",
+ "Savon",
+ "Sauna",
+ "Keri",
+ "Uusi",
+ "Vanha",
+ "Lapin",
+ "Kesä",
+ "Kuusi",
+ "Pelto",
+ "Tuomi",
+ "Pitäjän",
+ "Terva",
+ "Olki",
+ "Heinä",
+ "Kuusan",
+ "Seinä",
+ "Kemi",
+ "Rova",
+ "Martin",
+ "Koivu"
+};
+
+static const char *name_finnish_2b[] = {
+ "harju",
+ "linna",
+ "järvi",
+ "kallio",
+ "mäki",
+ "nummi",
+ "joki",
+ "kylä",
+ "lampi",
+ "lahti",
+ "metsä",
+ "suo",
+ "laakso",
+ "niitty",
+ "luoto",
+ "hovi",
+ "ranta",
+ "koski"
+};
+
+static const char *name_polish_1_m[] = {
+ "Wielki ",
+ "Maly ",
+ "Zly ",
+ "Dobry ",
+ "Nowy ",
+ "Stary ",
+ "Zloty ",
+ "Zielony ",
+ "Bialy ",
+ "Modry ",
+ "Debowy "
+};
+
+static const char *name_polish_1_f[] = {
+ "Wielka ",
+ "Mala ",
+ "Zla ",
+ "Dobra ",
+ "Nowa ",
+ "Stara ",
+ "Zlota ",
+ "Zielona ",
+ "Biala ",
+ "Modra ",
+ "Debowa "
+};
+
+static const char *name_polish_1_n[] = {
+ "Wielkie ",
+ "Male ",
+ "Zle ",
+ "Dobre ",
+ "Nowe ",
+ "Stare ",
+ "Zlote ",
+ "Zielone ",
+ "Biale ",
+ "Modre ",
+ "Debowe "
+};
+
+static const char *name_polish_2_o[] = {
+ "Frombork",
+ "Gniezno",
+ "Olsztyn",
+ "Torun",
+ "Bydgoszcz",
+ "Terespol",
+ "Krakow",
+ "Poznan",
+ "Wroclaw",
+ "Katowice",
+ "Cieszyn",
+ "Bytom",
+ "Frombork",
+ "Hel",
+ "Konin",
+ "Lublin",
+ "Malbork",
+ "Sopot",
+ "Sosnowiec",
+ "Gdansk",
+ "Gdynia",
+ "Sieradz",
+ "Sandomierz",
+ "Szczyrk",
+ "Szczytno",
+ "Szczecin",
+ "Zakopane",
+ "Szklarska Poreba",
+ "Bochnia",
+ "Golub-Dobrzyn",
+ "Chojnice",
+ "Ostrowiec",
+ "Otwock",
+ "Wolsztyn"
+};
+
+static const char *name_polish_2_m[] = {
+ "Jarocin",
+ "Gogolin",
+ "Tomaszow",
+ "Piotrkow",
+ "Lidzbark",
+ "Rypin",
+ "Radzymin",
+ "Wolomin",
+ "Pruszkow",
+ "Olsztynek",
+ "Rypin",
+ "Cisek",
+ "Krotoszyn",
+ "Stoczek",
+ "Lubin",
+ "Lubicz",
+ "Milicz",
+ "Targ",
+ "Ostrow",
+ "Ozimek",
+ "Puck",
+ "Rzepin",
+ "Siewierz",
+ "Stargard",
+ "Starogard",
+ "Turek",
+ "Tymbark",
+ "Wolsztyn",
+ "Strzepcz",
+ "Strzebielin",
+ "Sochaczew",
+ "Grebocin",
+ "Gniew",
+ "Lubliniec",
+ "Lubasz",
+ "Lutomiersk",
+ "Niemodlin",
+ "Przeworsk",
+ "Ursus",
+ "Tyczyn",
+ "Sztum",
+ "Szczebrzeszyn",
+ "Wolin",
+ "Wrzeszcz",
+ "Zgierz",
+ "Zieleniec",
+ "Drobin",
+ "Garwolin"
+};
+
+static const char *name_polish_2_f[] = {
+ "Szprotawa",
+ "Pogorzelica",
+ "Motlawa",
+ "Lubawa",
+ "Nidzica",
+ "Kruszwica",
+ "Bierawa",
+ "Brodnica",
+ "Chojna",
+ "Krzepica",
+ "Ruda",
+ "Rumia",
+ "Tuchola",
+ "Trzebinia",
+ "Ustka",
+ "Warszawa",
+ "Bobowa",
+ "Dukla",
+ "Krynica",
+ "Murowana",
+ "Niemcza",
+ "Zaspa",
+ "Zawoja",
+ "Wola",
+ "Limanowa",
+ "Rabka",
+ "Skawina",
+ "Pilawa"
+};
+
+static const char *name_polish_2_n[] = {
+ "Lipsko",
+ "Pilzno",
+ "Przodkowo",
+ "Strzelno",
+ "Susz",
+ "Jaworzno",
+ "Choszczno",
+ "Mogilno",
+ "Luzino",
+ "Miasto",
+ "Dziadowo",
+ "Kowalewo",
+ "Legionowo",
+ "Miastko",
+ "Zabrze",
+ "Zawiercie",
+ "Kochanowo",
+ "Miechucino",
+ "Mirachowo",
+ "Robakowo",
+ "Kosakowo",
+ "Borne",
+ "Braniewo",
+ "Sulinowo",
+ "Chmielno",
+ "Jastrzebie",
+ "Gryfino",
+ "Koronowo",
+ "Lubichowo",
+ "Opoczno"
+};
+
+static const char *name_polish_3_m[] = {
+ " Wybudowanie",
+ " Swietokrzyski",
+ " Gorski",
+ " Morski",
+ " Zdroj",
+ " Wody",
+ " Bajoro",
+ " Krajenski",
+ " Slaski",
+ " Mazowiecki",
+ " Pomorski",
+ " Wielki",
+ " Maly",
+ " Warminski",
+ " Mazurski",
+ " Mniejszy",
+ " Wiekszy",
+ " Gorny",
+ " Dolny",
+ " Wielki",
+ " Stary",
+ " Nowy",
+ " Wielkopolski",
+ " Wzgorze",
+ " Mosty",
+ " Kujawski",
+ " Malopolski",
+ " Podlaski",
+ " Lesny"
+};
+
+static const char *name_polish_3_f[] = {
+ " Wybudowanie",
+ " Swietokrzyska",
+ " Gorska",
+ " Morska",
+ " Zdroj",
+ " Woda",
+ " Bajoro",
+ " Krajenska",
+ " Slaska",
+ " Mazowiecka",
+ " Pomorska",
+ " Wielka",
+ " Mala",
+ " Warminska",
+ " Mazurska",
+ " Mniejsza",
+ " Wieksza",
+ " Gorna",
+ " Dolna",
+ " Wielka",
+ " Stara",
+ " Nowa",
+ " Wielkopolska",
+ " Wzgorza",
+ " Mosty",
+ " Kujawska",
+ " Malopolska",
+ " Podlaska",
+ " Lesna"
+};
+
+static const char *name_polish_3_n[] = {
+ " Wybudowanie",
+ " Swietokrzyskie",
+ " Gorskie",
+ " Morskie",
+ " Zdroj",
+ " Wody",
+ " Bajoro",
+ " Krajenskie",
+ " Slaskie",
+ " Mazowieckie",
+ " Pomorskie",
+ " Wielkie",
+ " Male",
+ " Warminskie ",
+ " Mazurskie ",
+ " Mniejsze",
+ " Wieksze",
+ " Gorne",
+ " Dolne",
+ " Wielkie",
+ " Stare",
+ " Nowe",
+ " Wielkopolskie",
+ " Wzgorze",
+ " Mosty",
+ " Kujawskie",
+ " Malopolskie",
+ " Podlaskie",
+ " Lesne"
+};
+
+static const char *name_czech_1[] = {
+ "As",
+ "Benesov",
+ "Beroun",
+ "Bezdruzice",
+ "Blansko",
+ "Breclav",
+ "Brno",
+ "Bruntál",
+ "Ceská Lípa",
+ "Ceské Budejovice",
+ "Ceský Krumlov",
+ "Decín",
+ "Domazlice",
+ "Dubí",
+ "Frýdek-Místek",
+ "Havlíckuv Brod",
+ "Hodonín",
+ "Hradec Králové",
+ "Humpolec",
+ "Cheb",
+ "Chomutov",
+ "Chrudim",
+ "Jablonec nad Nisou",
+ "Jeseník",
+ "Jicín",
+ "Jihlava",
+ "Jindrichuv Hradec",
+ "Karlovy Vary",
+ "Karviná",
+ "Kladno",
+ "Klatovy",
+ "Kolín",
+ "Kosmonosy",
+ "Kromeríz",
+ "Kutná Hora",
+ "Liberec",
+ "Litomerice",
+ "Louny",
+ "Manetín",
+ "Melník",
+ "Mladá Boleslav",
+ "Most",
+ "Náchod",
+ "Nový Jicín",
+ "Nymburk",
+ "Olomouc",
+ "Opava",
+ "Orácov",
+ "Ostrava",
+ "Pardubice",
+ "Pelhrimov",
+ "Polzice",
+ "Písek",
+ "Plzen",
+ "Praha",
+ "Prachatice",
+ "Prerov",
+ "Príbram",
+ "Prostejov",
+ "Rakovník",
+ "Rokycany",
+ "Rudná",
+ "Rychnov nad Kneznou",
+ "Semily",
+ "Sokolov",
+ "Strakonice",
+ "Stredokluky",
+ "Sumperk",
+ "Svitavy",
+ "Tábor",
+ "Tachov",
+ "Teplice",
+ "Trebíc",
+ "Trutnov",
+ "Uherské Hradiste",
+ "Ústí nad Labem",
+ "Ústí nad Orlicí",
+ "Vsetín",
+ "Vyskov",
+ "Zdár nad Sázavou",
+ "Zlín",
+ "Znojmo"
+};
+
+static const char *name_romanian_1[]= {
+ "Adjud",
+ "Alba Iulia",
+ "Alexandria",
+ "Babadag",
+ "Bacău",
+ "Baia Mare",
+ "Băile Herculane",
+ "Băilesti",
+ "Bârlad",
+ "Bicaz",
+ "Bistrita",
+ "Blaj",
+ "Borsec",
+ "Botosani",
+ "Brăila",
+ "Brasov",
+ "Bucuresti",
+ "Buftea",
+ "Buzău",
+ "Călărasi",
+ "Caransebes",
+ "Cernavodă",
+ "Cluj-Napoca",
+ "Constanta",
+ "Covasna",
+ "Craiova",
+ "Dej",
+ "Deva",
+ "Dorohoi",
+ "Dr.-Tr. Severin",
+ "Drăgăsani",
+ "Făgăras",
+ "Fălticeni",
+ "Fetesti",
+ "Focsani",
+ "Galati",
+ "Gheorgheni",
+ "Giurgiu",
+ "Hârsova",
+ "Hunedoara",
+ "Husi",
+ "Iasi",
+ "Isaccea",
+ "Lugoj",
+ "Măcin",
+ "Mangalia",
+ "Medgidia",
+ "Medias",
+ "Miercurea Ciuc",
+ "Mizil",
+ "Motru",
+ "Năsăud",
+ "Năvodari",
+ "Odobesti",
+ "Oltenita",
+ "Onesti",
+ "Oradea",
+ "Orsova",
+ "Petrosani",
+ "Piatra Neamt",
+ "Pitesti",
+ "Ploiesti",
+ "Predeal",
+ "Râmnicu Vâlcea",
+ "Reghin",
+ "Resita",
+ "Roman",
+ "Rosiorii de Vede",
+ "Satu Mare",
+ "Sebes",
+ "Sfântu Gheorghe",
+ "Sibiu",
+ "Sighisoara",
+ "Sinaia",
+ "Slatina",
+ "Slobozia",
+ "Sovata",
+ "Suceava",
+ "Sulina",
+ "Tăndărei",
+ "Târgoviste",
+ "Târgu Jiu",
+ "Târgu Mures",
+ "Tecuci",
+ "Timisoara",
+ "Tulcea",
+ "Turda",
+ "Turnu Măgurele",
+ "Urziceni",
+ "Vaslui",
+ "Vatra Dornei",
+ "Victoria",
+ "Videle",
+ "Zalău"
+};
+
+static const char *name_slovakish_1[] = {
+ "Bratislava",
+ "Banovce nad Bebravou",
+ "Banska Bystrica",
+ "Banska Stiavnica",
+ "Bardejov",
+ "Brezno",
+ "Brezova pod Bradlom",
+ "Bytca",
+ "Cadca",
+ "Cierna nad Tisou",
+ "Detva",
+ "Detva",
+ "Dolny Kubin",
+ "Dolny Kubin",
+ "Dunajska Streda",
+ "Gabcikovo",
+ "Galanta",
+ "Gbely",
+ "Gelnica",
+ "Handlova",
+ "Hlohovec",
+ "Holic",
+ "Humenne",
+ "Hurbanovo",
+ "Kezmarok",
+ "Komarno",
+ "Kosice",
+ "Kremnica",
+ "Krompachy",
+ "Kuty",
+ "Leopoldov",
+ "Levoca",
+ "Liptovsky Mikulas",
+ "Lucenec",
+ "Malacky",
+ "Martin",
+ "Medzilaborce",
+ "Michalovce",
+ "Modra",
+ "Myjava",
+ "Namestovo",
+ "Nitra",
+ "Nova Bana",
+ "Nove Mesto nad Vahom",
+ "Nove Zamky",
+ "Partizanske",
+ "Pezinok",
+ "Piestany",
+ "Poltar",
+ "Poprad",
+ "Povazska Bystrica",
+ "Prievidza",
+ "Puchov",
+ "Revuca",
+ "Rimavska Sobota",
+ "Roznava",
+ "Ruzomberok",
+ "Sabinov",
+ "Sala",
+ "Senec",
+ "Senica",
+ "Sered",
+ "Skalica",
+ "Sladkovicovo",
+ "Smolenice",
+ "Snina",
+ "Stara Lubovna",
+ "Stara Tura",
+ "Strazske",
+ "Stropkov",
+ "Stupava",
+ "Sturovo",
+ "Sulekovo",
+ "Topolcany",
+ "Trebisov",
+ "Trencin",
+ "Trnava",
+ "Turcianske Teplice",
+ "Tvrdosin",
+ "Vrable",
+ "Vranov nad Toplov",
+ "Zahorska Bystrica",
+ "Zdiar",
+ "Ziar nad Hronom",
+ "Zilina",
+ "Zlate Moravce",
+ "Zvolen"
+};
+
+static const char *name_hungarian_1[] = {
+ "Nagy-",
+ "Kis-",
+ "Felső-",
+ "Alsó-",
+ "Új-"
+};
+
+static const char *name_hungarian_2[] = {
+ "Bodrog",
+ "Dráva",
+ "Duna",
+ "Hejő",
+ "Hernád",
+ "Rába",
+ "Sajó",
+ "Szamos",
+ "Tisza",
+ "Zala",
+ "Balaton",
+ "Fertő",
+ "Bakony",
+ "Cserhát",
+ "Bihar",
+ "Hajdú",
+ "Jász",
+ "Kun",
+ "Magyar",
+ "Nógrád",
+ "Nyír",
+ "Somogy",
+ "Székely",
+ "Buda",
+ "Győr",
+ "Pest",
+ "Fehér",
+ "Cserép",
+ "Erdő",
+ "Hegy",
+ "Homok",
+ "Mező",
+ "Puszta",
+ "Sár",
+ "Császár",
+ "Herceg",
+ "Király",
+ "Nemes",
+ "Püspök",
+ "Szent",
+ "Almás",
+ "Szilvás",
+ "Agg",
+ "Aranyos",
+ "Békés",
+ "Egyházas",
+ "Gagy",
+ "Heves",
+ "Kapos",
+ "Tápió",
+ "Torna",
+ "Vas",
+ "Vámos",
+ "Vásáros"
+};
+
+static const char *name_hungarian_3[] = {
+ "apáti",
+ "bába",
+ "bikk",
+ "dob",
+ "fa",
+ "föld",
+ "hegyes",
+ "kak",
+ "kereszt",
+ "kürt",
+ "ladány",
+ "mérges",
+ "szalonta",
+ "telek",
+ "vas",
+ "völgy"
+};
+
+static const char *name_hungarian_4[] = {
+ "alja",
+ "egyháza",
+ "háza",
+ "úr",
+ "vár"
+};
+
+static const char *name_hungarian_real[] = {
+ "Ajka",
+ "Aszód",
+ "Badacsony",
+ "Baja",
+ "Budapest",
+ "Debrecen",
+ "Eger",
+ "Fonyód",
+ "Gödöllő",
+ "Győr",
+ "Gyula",
+ "Karcag",
+ "Kecskemét",
+ "Keszthely",
+ "Kisköre",
+ "Kocsord",
+ "Komárom",
+ "Kőszeg",
+ "Makó",
+ "Mohács",
+ "Miskolc",
+ "Ózd",
+ "Paks",
+ "Pápa",
+ "Pécs",
+ "Polgár",
+ "Sarkad",
+ "Siófok",
+ "Szeged",
+ "Szentes",
+ "Szolnok",
+ "Tihany",
+ "Tokaj",
+ "Vác",
+ "Záhony",
+ "Zirc"
+};