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