Changeset - r833:c634bf4985fa
[Not reviewed]
master
0 3 1
truelight - 19 years ago 2004-12-31 14:43:47
truelight@openttd.org
(svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
readable now. 'American' is replaces by 'Additional English' (Jango)
4 files changed with 2351 insertions and 2125 deletions:
0 comments (0 inline, 0 general)
lang/english.txt
Show inline comments
 
@@ -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})
namegen.c
Show inline comments
 
#include "stdafx.h"
 
#include "ttd.h"
 

	
 

	
 
#define GETNUM(x, y) (((uint16)(seed >> x) * (y))>>16)
 
#include "table/namegen.h"
 

	
 
static void AppendPart(byte **buf, int num, const char *names)
 
inline static uint32 GetNumberBasedOnSeed(int x, int y, uint32 seed)
 
{
 
	byte *s;
 
	return (((uint16)(seed >> x) * (y))>>16);
 
}
 

	
 
	while (--num>=0) {
 
		do names++; while (names[-1]);
 
static void ReplaceWords(byte a, byte b, byte c, byte d, byte e, byte f, byte g, byte h, byte *buf)
 
{
 
	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;
 
	}
 

	
 
	for(s=*buf; (*s++ = *names++) != 0;) {}
 
	*buf = s - 1;
 
}
 

	
 
#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 MakeEnglishOriginalTownName(byte *buf, uint32 seed)
 
{
 
	int i;
 
	byte result;
 
	byte *start;
 

	
 
	//null terminates the string for strcat
 
	strcpy(buf, "");
 

	
 
	i = GETNUM(0, 54) - 50;
 
	if (i >= 0)
 
		AppendPart(&buf, i, english_1);
 

	
 
	start = buf;
 
	// optional first segment
 
	if ((i = GetNumberBasedOnSeed(0, lengthof(name_original_english_1) + 50, seed) - 50) >= 0)
 
	{
 
		strcat(buf,name_original_english_1[i]);
 
	}
 

	
 
	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);
 
	//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)]);
 

	
 
	i = GETNUM(15, NUM_ENGLISH_6 + 60) - 60;
 

	
 
	result = 0;
 

	
 
	if (i >= 0) {
 
		if (i <= 1) result = NG_EDGE;
 
		AppendPart(&buf, i, english_6);
 
	//optional last segment
 
	if ((i = GetNumberBasedOnSeed(15, lengthof(name_original_english_6) + 60, seed) - 60) >= 0)
 
	{
 
		strcat(buf, name_original_english_6[i]);
 
	}
 

	
 
	if (start[0]=='C' && (start[1] == 'e' || start[1] == 'i'))
 
		start[0] = 'K';
 

	
 
	/* Replace certain words (routine identical to TTD now) */
 
	if (buf[0] == 'C' && (buf[1] == 'e' || buf[1] == 'i'))
 
		buf[0] = 'K';
 

	
 
	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');
 
	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 result;
 
	return 0;
 
}
 

	
 
#define NUM_AUSTRIAN_A1 6
 
static const char austrian_a1[] =
 
	MK("Bad ")
 
	MK("Deutsch ")
 
	MK("Gross ")
 
	MK("Klein ")
 
	MK("Markt ")
 
	MK("Maria ")
 
;
 

	
 
static byte MakeEnglishAdditionalTownName(byte *buf, uint32 seed)
 
{
 
	int i;
 

	
 
#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")
 
;
 
	//null terminates the string for strcat
 
	strcpy(buf, "");
 

	
 
#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")
 
;
 
	// optional first segment
 
	if ((i = GetNumberBasedOnSeed(0, lengthof(name_additional_english_prefix) + 50, seed) - 50) >= 0)
 
	{
 
		strcat(buf,name_additional_english_prefix[i]);
 
	}
 

	
 
#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")
 
;
 
	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)]);
 
		}
 
	}
 

	
 
#define NUM_AUSTRIAN_A5 2
 
static const char austrian_a5[] =
 
	MK("St. ")
 
	MK("Sankt ")
 
;
 
	strcat(buf, name_additional_english_2[GetNumberBasedOnSeed(14, lengthof(name_additional_english_2), seed)]);
 

	
 
#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 ")
 
;
 
	//optional last segment
 
	if ((i = GetNumberBasedOnSeed(15, lengthof(name_additional_english_3) + 60, seed) - 60) >= 0)
 
	{
 
		strcat(buf, name_additional_english_3[i]);
 
	}
 

	
 
#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")
 
;
 
	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);
 

	
 
#define NUM_AUSTRIAN_B1 1
 
static const char austrian_b1[] =
 
	MK(" am ")
 
;
 
	return 0;
 

	
 
#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 = GetNumberBasedOnSeed(0, lengthof(name_austrian_a1) + 15,seed) - 15;
 

	
 
	if (i >= 0) strcat(buf, name_austrian_a1[i]);
 

	
 
	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(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;
 

	
 
	//null terminates the string for strcat
 
	strcpy(buf, "");
 

	
 
	ext=GETNUM(7, 28); /* Extension - Prefix / Suffix */
 
	// optional first segment
 
	if ((i = GetNumberBasedOnSeed(0, lengthof(name_german_pre) + 50, seed) - 50) >= 0)
 
	{
 
		strcat(buf,name_german_pre[i]);
 
	}
 

	
 
	if ((ext==12) || (ext==19)) {
 
		i=GETNUM(2,NUM_GERMAN_3-2);
 
		AppendPart(&buf, 2+i, german_3);
 
	// 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)]);
 
	}
 

	
 
	//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 {
 
			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)]);
 
		}
 

	
 

	
 
	i=GETNUM(3,NUM_GERMAN_1);
 
	}
 
	return 0;
 
}
 

	
 
static byte MakeSpanishTownName(byte *buf, uint32 seed)
 
{
 
	strcpy(buf, "");
 
	strcat(buf, name_spanish_1[GetNumberBasedOnSeed(0, lengthof(name_spanish_1), seed)]);
 
	return 0;
 
}
 

	
 
static byte MakeFrenchTownName(byte *buf, uint32 seed)
 
{
 
	strcpy(buf, "");
 
	strcat(buf, name_french_1[GetNumberBasedOnSeed(0, lengthof(name_french_1), seed)]);
 
	return 0;
 
}
 

	
 
static byte MakeSillyTownName(byte *buf, uint32 seed)
 
{
 
	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;
 
}
 

	
 
static byte MakeSwedishTownName(byte *buf, uint32 seed)
 
{
 
	int i;
 

	
 
	//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]);
 
	}
 

	
 
	AppendPart(&buf, i, german_1);
 
	// 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)]);
 
	}
 

	
 
	strcat(buf, name_swedish_3[GetNumberBasedOnSeed(16, lengthof(name_swedish_3), seed)]);
 

	
 
	return 0;
 
}
 

	
 
static byte MakeDutchTownName(byte *buf, uint32 seed)
 
{
 
	int i;
 

	
 
	//null terminates the string for strcat
 
	strcpy(buf, "");
 

	
 
	// optional first segment
 
	if ((i = GetNumberBasedOnSeed(0, lengthof(name_dutch_1) + 50, seed) - 50) >= 0)
 
	{
 
		strcat(buf, name_dutch_1[i]);
 
	}
 

	
 
	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 (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;
 
}
 

	
 
static byte MakeFinnishTownName(byte *buf, uint32 seed)
 
{
 
	//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)]);
 
	}
 

	
 
	if (ext==24) {
 
		i=GETNUM(9,NUM_GERMAN_4);
 
	return 0;
 
}
 

	
 
static byte MakePolishTownName(byte *buf, uint32 seed)
 
{
 
	int i, j;
 

	
 
	//null terminates the string for strcat
 
	strcpy(buf, "");
 

	
 
	// 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);
 

	
 

	
 
	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)]);
 

	
 
		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)]);
 

	
 
		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 (i<=NUM_GERMAN_4_PRECHANGE-1) {
 
			AppendPart(&buf, 0, german_3);
 
			AppendPart(&buf, i, german_4);
 
		} else {
 
			AppendPart(&buf, 1, german_3);
 
			AppendPart(&buf, i, german_4);
 
		if (j >= 4 && j < 16)
 
			strcat(buf, name_polish_3_n[GetNumberBasedOnSeed(10, lengthof(name_polish_3_n), seed)]);
 
	}
 
	return 0;
 
}
 

	
 
static byte MakeCzechTownName(byte *buf, uint32 seed)
 
{
 
	strcpy(buf, "");
 
	strcat(buf, name_czech_1[GetNumberBasedOnSeed(0, lengthof(name_czech_1), seed)]);
 
	return 0;
 
}
 

	
 
static byte MakeRomanianTownName(byte *buf, uint32 seed)
 
{
 
	strcpy(buf, "");
 
	strcat(buf, name_romanian_1[GetNumberBasedOnSeed(0, lengthof(name_romanian_1), seed)]);
 
	return 0;
 
}
 

	
 
static byte MakeSlovakTownName(byte *buf, uint32 seed)
 
{
 
	strcpy(buf, "");
 
	strcat(buf, name_slovakish_1[GetNumberBasedOnSeed(0, lengthof(name_slovakish_1), seed)]);
 
	return 0;
 
}
 

	
 
static byte MakeHungarianTownName(byte *buf, uint32 seed)
 
{
 
	int i;
 

	
 
	//null terminates the string for strcat
 
	strcpy(buf, "");
 

	
 
	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)]);
 

	
 
		// 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;
 
}
 

	
 
#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);
 
	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);
 
	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);
 
	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);
 

	
 
	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);
 
	}
 

	
 
	AppendPart(&buf, GETNUM(16, NUM_SWEDISH_3), swedish_3);
 

	
 
	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);
 

	
 
	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);
 
	}
 
	AppendPart(&buf, GETNUM(15, NUM_DUTCH_5), dutch_5);
 

	
 
	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);
 
	}
 
	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];
 

	
 
	// get a number ranging from 0 to all_towns
 
	i = GETNUM(0, NUM_POLISH_2);
 

	
 
	// single name
 
	if(i < NUM_POLISH_2_O) {
 
		AppendPart(&buf, i, polish_2);
 
		return 0;
 
	}
 

	
 
	// 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;
 
	}
 

	
 
	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;
 
	}
 

	
 
	// 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]);
 
	}
 

	
 
	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);
 
	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;	
 
}
 

	
 
#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);
 
	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);
 

	
 
		AppendPart(&buf, GETNUM(3, NUM_HUNGARIAN_2), hungarian_2);
 
		AppendPart(&buf, GETNUM(6, NUM_HUNGARIAN_3), hungarian_3);
 

	
 
		i = GETNUM(10, NUM_HUNGARIAN_4 * 3);
 
		if (i < NUM_HUNGARIAN_4) AppendPart(&buf, i, hungarian_4);
 
	}
 
	return 0;
 
}
 

	
 
TownNameGenerator * const _town_name_generators[] = {
 
	MakeEnglishTownName,
 
	MakeEnglishOriginalTownName,
 
	MakeFrenchTownName,
 
	MakeGermanTownName,
 
	MakeAmericanTownName,
 
	MakeEnglishAdditionalTownName,
 
	MakeSpanishTownName,
 
	MakeSillyTownName,
 
	MakeSwedishTownName,
 
@@ -2181,6 +428,7 @@ TownNameGenerator * const _town_name_gen
 
	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 townnamepar
 
			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;
 
}
settings_gui.c
Show inline comments
 
@@ -76,7 +76,7 @@ static void GameOptionsWndProc(Window *w
 
		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
 
		}
 
		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:
table/namegen.h
Show inline comments
 
new file 100644
 
#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"
 
};
0 comments (0 inline, 0 general)