2210 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			2210 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "stdafx.h"
 | ||
| #include "ttd.h"
 | ||
| 
 | ||
| 
 | ||
| #define GETNUM(x, y) (((uint16)(seed >> x) * (y))>>16)
 | ||
| 
 | ||
| static void AppendPart(byte **buf, int num, const char *names)
 | ||
| {
 | ||
| 	byte *s;
 | ||
| 
 | ||
| 	while (--num>=0) {
 | ||
| 		do names++; while (names[-1]);
 | ||
| 	}
 | ||
| 
 | ||
| 	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)
 | ||
| {
 | ||
| 	int i;
 | ||
| 	byte result;
 | ||
| 	byte *start;
 | ||
| 
 | ||
| 	i = GETNUM(0, 54) - 50;
 | ||
| 	if (i >= 0)
 | ||
| 		AppendPart(&buf, i, english_1);
 | ||
| 
 | ||
| 	start = 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);
 | ||
| 
 | ||
| 	i = GETNUM(15, NUM_ENGLISH_6 + 60) - 60;
 | ||
| 
 | ||
| 	result = 0;
 | ||
| 
 | ||
| 	if (i >= 0) {
 | ||
| 		if (i <= 1) result = NG_EDGE;
 | ||
| 		AppendPart(&buf, i, english_6);
 | ||
| 	}
 | ||
| 
 | ||
| 	if (start[0]=='C' && (start[1] == 'e' || start[1] == 'i'))
 | ||
| 		start[0] = 'K';
 | ||
| 
 | ||
| 	/* Replace certain words (routine identical to TTD now) */
 | ||
| 
 | ||
| 	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<EFBFBD>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<EFBFBD>tt")
 | ||
| 	MK("Kaisers")
 | ||
| 	MK("K<EFBFBD>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<EFBFBD>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<EFBFBD>")
 | ||
| 	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<EFBFBD>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;
 | ||
| 
 | ||
| 	// 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);
 | ||
| 	}
 | ||
| 	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 {
 | ||
| 	  // Zell
 | ||
| 	  AppendPart(&buf, GETNUM( 7, NUM_AUSTRIAN_A4), austrian_a4);
 | ||
| 	}
 | ||
| 
 | ||
| 	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);
 | ||
| 	}
 | ||
| 	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);
 | ||
| 	}
 | ||
| 
 | ||
| 	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<EFBFBD>ln")
 | ||
| 	MK("L<EFBFBD>beck")
 | ||
| 	MK("Magdeburg")
 | ||
| 	MK("M<EFBFBD>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<EFBFBD>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<EFBFBD>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<EFBFBD>ne")
 | ||
| 	MK("Mel")
 | ||
| 	MK("Michels")
 | ||
| 	MK("M<EFBFBD>hl")
 | ||
| 	MK("Naum")
 | ||
| 	MK("Nest")
 | ||
| 	MK("Nord")
 | ||
| 	MK("Nort")
 | ||
| 	MK("Nien")
 | ||
| 	MK("Nidda")
 | ||
| 	MK("Nieder")
 | ||
| 	MK("N<EFBFBD>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<EFBFBD>ssels")
 | ||
| 	MK("Saal")
 | ||
| 	MK("Saar")
 | ||
| 	MK("Salz")
 | ||
| 	MK("Sch<EFBFBD>ne")
 | ||
| 	MK("Schwein")
 | ||
| 	MK("Sonder")
 | ||
| 	MK("Sonnen")
 | ||
| 	MK("Stein")
 | ||
| 	MK("Strals")
 | ||
| 	MK("Straus")
 | ||
| 	MK("S<EFBFBD>d")
 | ||
| 	MK("Ton")
 | ||
| 	MK("Unter")
 | ||
| 	MK("Ur")
 | ||
| 	MK("Vor")
 | ||
| 	MK("Wald")
 | ||
| 	MK("War")
 | ||
| 	MK("Wert")
 | ||
| 	MK("Wester")
 | ||
| 	MK("Witten")
 | ||
| 	MK("Wolfs")
 | ||
| 	MK("W<EFBFBD>rz")
 | ||
| ;
 | ||
| 
 | ||
| #define NUM_GERMAN_2 16
 | ||
| static const char german_2[] =
 | ||
| 	MK("bach")
 | ||
| 	MK("berg")
 | ||
| 	MK("br<EFBFBD>ck")
 | ||
| 	MK("br<EFBFBD>cken")
 | ||
| 	MK("burg")
 | ||
| 	MK("dorf")
 | ||
| 	MK("feld")
 | ||
| 	MK("furt")
 | ||
| 	MK("hausen")
 | ||
| 	MK("haven")
 | ||
| 	MK("heim")
 | ||
| 	MK("horst")
 | ||
| 	MK("mund")
 | ||
| 	MK("m<EFBFBD>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 */
 | ||
| 
 | ||
| 	if ((ext==12) || (ext==19)) {
 | ||
| 		i=GETNUM(2,NUM_GERMAN_3-2);
 | ||
| 		AppendPart(&buf, 2+i, german_3);
 | ||
| 	}
 | ||
| 
 | ||
| 
 | ||
| 	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);
 | ||
| 	}
 | ||
| 
 | ||
| 	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);
 | ||
| 		} else {
 | ||
| 			AppendPart(&buf, 1, german_3);
 | ||
| 			AppendPart(&buf, i, german_4);
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	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<EFBFBD>te")
 | ||
| 	MK("Aurillac")
 | ||
| 	MK("Gueret")
 | ||
| 	MK("Le Creusot")
 | ||
| 	MK("Nevers")
 | ||
| 	MK("Auxerre")
 | ||
| 	MK("Versailles")
 | ||
| 	MK("Meaux")
 | ||
| 	MK("Ch<EFBFBD>lons")
 | ||
| 	MK("Compi<EFBFBD>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<EFBFBD>teauroux")
 | ||
| 	MK("Orl<EFBFBD>ans")
 | ||
| 	MK("Lisieux")
 | ||
| 	MK("Cherbourg")
 | ||
| 	MK("Morlaix")
 | ||
| 	MK("Cognac")
 | ||
| 	MK("Agen")
 | ||
| 	MK("Tulle")
 | ||
| 	MK("Blois")
 | ||
| 	MK("Troyes")
 | ||
| 	MK("Charolles")
 | ||
| 	MK("Grenoble")
 | ||
| 	MK("Chamb<EFBFBD>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<EFBFBD>ziers")
 | ||
| 	MK("N<EFBFBD>mes")
 | ||
| 	MK("Chamonix")
 | ||
| 	MK("Angoul<EFBFBD>me")
 | ||
| 	MK("Alen<EFBFBD>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<EFBFBD>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<EFBFBD>m")
 | ||
| 	MK("Sund")
 | ||
| 	MK("S<EFBFBD>der")
 | ||
| 	MK("Tall")
 | ||
| 	MK("Tratt")
 | ||
| 	MK("Troll")
 | ||
| 	MK("Upp")
 | ||
| 	MK("Var")
 | ||
| 	MK("V<EFBFBD>ster")
 | ||
| 	MK("<EFBFBD>ngel")
 | ||
| 	MK("<EFBFBD>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("<EFBFBD>")
 | ||
| 	MK("<EFBFBD>")
 | ||
| 	MK("<EFBFBD>");
 | ||
| 
 | ||
| #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<EFBFBD>ttan")
 | ||
| 	MK("kulle")
 | ||
| 	MK("k<EFBFBD>ping")
 | ||
| 	MK("lund")
 | ||
| 	MK("l<EFBFBD>v")
 | ||
| 	MK("sala")
 | ||
| 	MK("skrona")
 | ||
| 	MK("sl<EFBFBD>tt")
 | ||
| 	MK("sp<EFBFBD>ng")
 | ||
| 	MK("stad")
 | ||
| 	MK("sund")
 | ||
| 	MK("svall")
 | ||
| 	MK("svik")
 | ||
| 	MK("s<EFBFBD>ker")
 | ||
| 	MK("udde")
 | ||
| 	MK("valla")
 | ||
| 	MK("viken")
 | ||
| 	MK("<EFBFBD>lv")
 | ||
| 	MK("<EFBFBD>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<EFBFBD>rvel<EFBFBD>")
 | ||
| 	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<EFBFBD>")
 | ||
| 	MK("Kuusi")
 | ||
| 	MK("Pelto")
 | ||
| 	MK("Tuomi")
 | ||
| 	MK("Pit<EFBFBD>j<EFBFBD>n")
 | ||
| 	MK("Terva")
 | ||
| 	MK("Olki")
 | ||
| 	MK("Hein<EFBFBD>")
 | ||
| 	MK("Kuusan")
 | ||
| 	MK("Sein<EFBFBD>")
 | ||
| 	MK("Kemi")
 | ||
| 	MK("Rova")
 | ||
| 	MK("Martin")
 | ||
| 	MK("Koivu");
 | ||
| 
 | ||
| #define NUM_FINNISH_2b 18
 | ||
| static const char finnish_2b[] =
 | ||
| 	MK("harju")
 | ||
| 	MK("linna")
 | ||
| 	MK("j<EFBFBD>rvi")
 | ||
| 	MK("kallio")
 | ||
| 	MK("m<EFBFBD>ki")
 | ||
| 	MK("nummi")
 | ||
| 	MK("joki")
 | ||
| 	MK("kyl<EFBFBD>")
 | ||
| 	MK("lampi")
 | ||
| 	MK("lahti")
 | ||
| 	MK("mets<EFBFBD>")
 | ||
| 	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<EFBFBD>l")
 | ||
| 	MK("Cesk<EFBFBD> L<>pa")
 | ||
| 	MK("Cesk<EFBFBD> Budejovice")
 | ||
| 	MK("Cesk<EFBFBD> Krumlov")
 | ||
| 	MK("Dec<EFBFBD>n")
 | ||
| 	MK("Domazlice")
 | ||
| 	MK("Dub<EFBFBD>")
 | ||
| 	MK("Fr<EFBFBD>dek-M<>stek")
 | ||
| 	MK("Havl<EFBFBD>ckuv Brod")
 | ||
| 	MK("Hodon<EFBFBD>n")
 | ||
| 	MK("Hradec Kr<4B>lov<6F>")
 | ||
| 	MK("Humpolec")
 | ||
| 	MK("Cheb")
 | ||
| 	MK("Chomutov")
 | ||
| 	MK("Chrudim")
 | ||
| 	MK("Jablonec nad Nisou")
 | ||
| 	MK("Jesen<EFBFBD>k")
 | ||
| 	MK("Jic<EFBFBD>n")
 | ||
| 	MK("Jihlava")
 | ||
| 	MK("Jindrichuv Hradec")
 | ||
| 	MK("Karlovy Vary")
 | ||
| 	MK("Karvin<EFBFBD>")
 | ||
| 	MK("Kladno")
 | ||
| 	MK("Klatovy")
 | ||
| 	MK("Kol<EFBFBD>n")
 | ||
| 	MK("Kosmonosy")
 | ||
| 	MK("Kromer<EFBFBD>z")
 | ||
| 	MK("Kutn<EFBFBD> Hora")
 | ||
| 	MK("Liberec")
 | ||
| 	MK("Litomerice")
 | ||
| 	MK("Louny")
 | ||
| 	MK("Manet<EFBFBD>n")
 | ||
| 	MK("Meln<EFBFBD>k")
 | ||
| 	MK("Mlad<EFBFBD> Boleslav")
 | ||
| 	MK("Most")
 | ||
| 	MK("N<EFBFBD>chod")
 | ||
| 	MK("Nov<EFBFBD> Jic<69>n")
 | ||
| 	MK("Nymburk")
 | ||
| 	MK("Olomouc")
 | ||
| 	MK("Opava")
 | ||
| 	MK("Or<EFBFBD>cov")
 | ||
| 	MK("Ostrava")
 | ||
| 	MK("Pardubice")
 | ||
| 	MK("Pelhrimov")
 | ||
| 	MK("Polzice")
 | ||
| 	MK("P<EFBFBD>sek")
 | ||
| 	MK("Plzen")
 | ||
| 	MK("Praha")
 | ||
| 	MK("Prachatice")
 | ||
| 	MK("Prerov")
 | ||
| 	MK("Pr<EFBFBD>bram")
 | ||
| 	MK("Prostejov")
 | ||
| 	MK("Rakovn<EFBFBD>k")
 | ||
| 	MK("Rokycany")
 | ||
| 	MK("Rudn<EFBFBD>")
 | ||
| 	MK("Rychnov nad Kneznou")
 | ||
| 	MK("Semily")
 | ||
| 	MK("Sokolov")
 | ||
| 	MK("Strakonice")
 | ||
| 	MK("Stredokluky")
 | ||
| 	MK("Sumperk")
 | ||
| 	MK("Svitavy")
 | ||
| 	MK("T<EFBFBD>bor")
 | ||
| 	MK("Tachov")
 | ||
| 	MK("Teplice")
 | ||
| 	MK("Treb<EFBFBD>c")
 | ||
| 	MK("Trutnov")
 | ||
| 	MK("Uhersk<EFBFBD> Hradiste")
 | ||
| 	MK("<EFBFBD>st<EFBFBD> nad Labem")
 | ||
| 	MK("<EFBFBD>st<EFBFBD> nad Orlic<69>")
 | ||
| 	MK("Vset<EFBFBD>n")
 | ||
| 	MK("Vyskov")
 | ||
| 	MK("Zd<EFBFBD>r nad S<>zavou")
 | ||
| 	MK("Zl<EFBFBD>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<EFBFBD>u")
 | ||
| 	MK("Baia Mare")
 | ||
| 	MK("B<EFBFBD>ile Herculane")
 | ||
| 	MK("B<EFBFBD>ilesti")
 | ||
| 	MK("B<EFBFBD>rlad")
 | ||
| 	MK("Bicaz")
 | ||
| 	MK("Bistrita")
 | ||
| 	MK("Blaj")
 | ||
| 	MK("Borsec")
 | ||
| 	MK("Botosani")
 | ||
| 	MK("Br<EFBFBD>ila")
 | ||
| 	MK("Brasov")
 | ||
| 	MK("Bucuresti")
 | ||
| 	MK("Buftea")
 | ||
| 	MK("Buz<EFBFBD>u")
 | ||
| 	MK("C<EFBFBD>l<EFBFBD>rasi")
 | ||
| 	MK("Caransebes")
 | ||
| 	MK("Cernavod<EFBFBD>")
 | ||
| 	MK("Cluj-Napoca")
 | ||
| 	MK("Constanta")
 | ||
| 	MK("Covasna")
 | ||
| 	MK("Craiova")
 | ||
| 	MK("Dej")
 | ||
| 	MK("Deva")
 | ||
| 	MK("Dorohoi")
 | ||
| 	MK("Dr.-Tr. Severin")
 | ||
| 	MK("Dr<EFBFBD>g<EFBFBD>sani")
 | ||
| 	MK("F<EFBFBD>g<EFBFBD>ras")
 | ||
| 	MK("F<EFBFBD>lticeni")
 | ||
| 	MK("Fetesti")
 | ||
| 	MK("Focsani")
 | ||
| 	MK("Galati")
 | ||
| 	MK("Gheorgheni")
 | ||
| 	MK("Giurgiu")
 | ||
| 	MK("H<EFBFBD>rsova")
 | ||
| 	MK("Hunedoara")
 | ||
| 	MK("Husi")
 | ||
| 	MK("Iasi")
 | ||
| 	MK("Isaccea")
 | ||
| 	MK("Lugoj")
 | ||
| 	MK("M<EFBFBD>cin")
 | ||
| 	MK("Mangalia")
 | ||
| 	MK("Medgidia")
 | ||
| 	MK("Medias")
 | ||
| 	MK("Miercurea Ciuc")
 | ||
| 	MK("Mizil")
 | ||
| 	MK("Motru")
 | ||
| 	MK("N<EFBFBD>s<EFBFBD>ud")
 | ||
| 	MK("N<EFBFBD>vodari")
 | ||
| 	MK("Odobesti")
 | ||
| 	MK("Oltenita")
 | ||
| 	MK("Onesti")
 | ||
| 	MK("Oradea")
 | ||
| 	MK("Orsova")
 | ||
| 	MK("Petrosani")
 | ||
| 	MK("Piatra Neamt")
 | ||
| 	MK("Pitesti")
 | ||
| 	MK("Ploiesti")
 | ||
| 	MK("Predeal")
 | ||
| 	MK("R<EFBFBD>mnicu V<>lcea")
 | ||
| 	MK("Reghin")
 | ||
| 	MK("Resita")
 | ||
| 	MK("Roman")
 | ||
| 	MK("Rosiorii de Vede")
 | ||
| 	MK("Satu Mare")
 | ||
| 	MK("Sebes")
 | ||
| 	MK("Sf<EFBFBD>ntu Gheorghe")
 | ||
| 	MK("Sibiu")
 | ||
| 	MK("Sighisoara")
 | ||
| 	MK("Sinaia")
 | ||
| 	MK("Slatina")
 | ||
| 	MK("Slobozia")
 | ||
| 	MK("Sovata")
 | ||
| 	MK("Suceava")
 | ||
| 	MK("Sulina")
 | ||
| 	MK("T<EFBFBD>nd<EFBFBD>rei")
 | ||
| 	MK("T<EFBFBD>rgoviste")
 | ||
| 	MK("T<EFBFBD>rgu Jiu")
 | ||
| 	MK("T<EFBFBD>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<EFBFBD>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<EFBFBD>-")
 | ||
| 	MK("Als<EFBFBD>-")
 | ||
| 	MK("<EFBFBD>j-")
 | ||
| ;
 | ||
| 
 | ||
| #define NUM_HUNGARIAN_2 54
 | ||
| static const char hungarian_2[] =
 | ||
| // River modifiers
 | ||
| // 1 - 10
 | ||
| 	MK("Bodrog")
 | ||
| 	MK("Dr<EFBFBD>va")
 | ||
| 	MK("Duna")
 | ||
| 	MK("Hej<EFBFBD>")
 | ||
| 	MK("Hern<EFBFBD>d")
 | ||
| 	MK("R<EFBFBD>ba")
 | ||
| 	MK("Saj<EFBFBD>")
 | ||
| 	MK("Szamos")
 | ||
| 	MK("Tisza")
 | ||
| 	MK("Zala")
 | ||
| 	// Lake modifiers
 | ||
| 	// 11 - 12
 | ||
| 	MK("Balaton")
 | ||
| 	MK("Fert<EFBFBD>")
 | ||
| 	// Mountain modifiers
 | ||
| 	// 13 - 14
 | ||
| 	MK("Bakony")
 | ||
| 	MK("Cserh<EFBFBD>t")
 | ||
| 	// Country modifiers
 | ||
| 	// 15 - 23
 | ||
| 	MK("Bihar")
 | ||
| 	MK("Hajd<EFBFBD>")
 | ||
| 	MK("J<EFBFBD>sz")
 | ||
| 	MK("Kun")
 | ||
| 	MK("Magyar")
 | ||
| 	MK("N<EFBFBD>gr<EFBFBD>d")
 | ||
| 	MK("Ny<EFBFBD>r")
 | ||
| 	MK("Somogy")
 | ||
| 	MK("Sz<EFBFBD>kely")
 | ||
| 	// Town modifiers
 | ||
| 	// 24 - 26
 | ||
| 	MK("Buda")
 | ||
| 	MK("Gy<EFBFBD>r")
 | ||
| 	MK("Pest")
 | ||
| 	// Color modifiers
 | ||
| 	// 27
 | ||
| 	MK("Feh<EFBFBD>r")
 | ||
| 	// General terrain modifiers
 | ||
| 	// 28 - 34
 | ||
| 	MK("Cser<EFBFBD>p")
 | ||
| 	MK("Erd<EFBFBD>")
 | ||
| 	MK("Hegy")
 | ||
| 	MK("Homok")
 | ||
| 	MK("Mez<EFBFBD>")
 | ||
| 	MK("Puszta")
 | ||
| 	MK("S<EFBFBD>r")
 | ||
| 	// Rank modifiers
 | ||
| 	// 35 - 40
 | ||
| 	MK("Cs<EFBFBD>sz<EFBFBD>r")
 | ||
| 	MK("Herceg")
 | ||
| 	MK("Kir<EFBFBD>ly")
 | ||
| 	MK("Nemes")
 | ||
| 	MK("P<EFBFBD>sp<EFBFBD>k")
 | ||
| 	MK("Szent")
 | ||
| 	// Plant modifiers
 | ||
| 	// 41 - 42
 | ||
| 	MK("Alm<EFBFBD>s")
 | ||
| 	MK("Szilv<EFBFBD>s")
 | ||
| 	// Standard stuff
 | ||
| 	// 43 - 54
 | ||
| 	MK("Agg")
 | ||
| 	MK("Aranyos")
 | ||
| 	MK("B<EFBFBD>k<EFBFBD>s")
 | ||
| 	MK("Egyh<EFBFBD>zas")
 | ||
| 	MK("Gagy")
 | ||
| 	MK("Heves")
 | ||
| 	MK("Kapos")
 | ||
| 	MK("T<EFBFBD>pi<EFBFBD>")
 | ||
| 	MK("Torna")
 | ||
| 	MK("Vas")
 | ||
| 	MK("V<EFBFBD>mos")
 | ||
| 	MK("V<EFBFBD>s<EFBFBD>ros")
 | ||
| ;
 | ||
| 
 | ||
| #define NUM_HUNGARIAN_3 16
 | ||
| static const char hungarian_3[] =
 | ||
| 	MK("ap<EFBFBD>ti")
 | ||
| 	MK("b<EFBFBD>ba")
 | ||
| 	MK("bikk")
 | ||
| 	MK("dob")
 | ||
| 	MK("fa")
 | ||
| 	MK("f<EFBFBD>ld")
 | ||
| 	MK("hegyes")
 | ||
| 	MK("kak")
 | ||
| 	MK("kereszt")
 | ||
| 	MK("k<EFBFBD>rt")
 | ||
| 	MK("lad<EFBFBD>ny")
 | ||
| 	MK("m<EFBFBD>rges")
 | ||
| 	MK("szalonta")
 | ||
| 	MK("telek")
 | ||
| 	MK("vas")
 | ||
| 	MK("v<EFBFBD>lgy")
 | ||
| ;
 | ||
| 
 | ||
| #define NUM_HUNGARIAN_4 5
 | ||
| static const char hungarian_4[] =
 | ||
| 	MK("alja")
 | ||
| 	MK("egyh<EFBFBD>za")
 | ||
| 	MK("h<EFBFBD>za")
 | ||
| 	MK("<EFBFBD>r")
 | ||
| 	MK("v<EFBFBD>r")
 | ||
| ;
 | ||
| 
 | ||
| #define NUM_HUNGARIAN_REAL 35
 | ||
| static const char hungarian_real[] =
 | ||
| 	MK("Ajka")
 | ||
| 	MK("Asz<EFBFBD>d")
 | ||
| 	MK("Badacsony")
 | ||
| 	MK("Baja")
 | ||
| 	MK("Budapest")
 | ||
| 	MK("Debrecen")
 | ||
| 	MK("Eger")
 | ||
| 	MK("Fony<EFBFBD>d")
 | ||
| 	MK("G<EFBFBD>d<EFBFBD>ll<EFBFBD>")
 | ||
| 	MK("Gy<EFBFBD>r")
 | ||
| 	MK("Gyula")
 | ||
| 	MK("Karcag")
 | ||
| 	MK("Kecskem<EFBFBD>t")
 | ||
| 	MK("Keszthely")
 | ||
| 	MK("Kisk<EFBFBD>re")
 | ||
| 	MK("Kocsord")
 | ||
| 	MK("Kom<EFBFBD>rom")
 | ||
| 	MK("K<EFBFBD>szeg")
 | ||
| 	MK("Mak<EFBFBD>")
 | ||
| 	MK("Moh<EFBFBD>cs")
 | ||
| 	MK("Miskolc")
 | ||
| 	MK("<EFBFBD>zd")
 | ||
| 	MK("Paks")
 | ||
| 	MK("P<EFBFBD>pa")
 | ||
| 	MK("P<EFBFBD>cs")
 | ||
| 	MK("Polg<EFBFBD>r")
 | ||
| 	MK("Sarkad")
 | ||
| 	MK("Si<EFBFBD>fok")
 | ||
| 	MK("Szeged")
 | ||
| 	MK("Szentes")
 | ||
| 	MK("Szolnok")
 | ||
| 	MK("Tihany")
 | ||
| 	MK("Tokaj")
 | ||
| 	MK("V<EFBFBD>c")
 | ||
| 	MK("Z<EFBFBD>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,
 | ||
| 	MakeFrenchTownName,
 | ||
| 	MakeGermanTownName,
 | ||
| 	MakeAmericanTownName,
 | ||
| 	MakeSpanishTownName,
 | ||
| 	MakeSillyTownName,
 | ||
| 	MakeSwedishTownName,
 | ||
| 	MakeDutchTownName,
 | ||
| 	MakeFinnishTownName,
 | ||
| 	MakePolishTownName,
 | ||
| 	MakeSlovakTownName,
 | ||
| 	MakeHungarianTownName,
 | ||
| 	MakeAustrianTownName,
 | ||
| 	MakeRomanianTownName,
 | ||
| 	MakeCzechTownName,
 | ||
| };
 | ||
| 
 | ||
| #define FIXNUM(x, y, z) (((((x) << 16) / (y)) + 1) << z)
 | ||
| 
 | ||
| uint32 GetOldTownName(uint32 townnameparts, byte old_town_name_type)
 | ||
| {
 | ||
| 	switch (old_town_name_type) {
 | ||
| 		case 0: case 3: /* English, American */
 | ||
| 			/*	Already OK */
 | ||
| 			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);
 | ||
| 		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);
 | ||
| 		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);
 | ||
| 	}
 | ||
| 	return 0;
 | ||
| }
 | 
