diff --git a/namegen.c b/namegen.c --- a/namegen.c +++ b/namegen.c @@ -534,7 +534,7 @@ static byte MakeGermanTownName(byte *buf if ((ext==12) || (ext==19)) { i=GETNUM(2,NUM_GERMAN_3-2); AppendPart(&buf, 2+i, german_3); - } + } i=GETNUM(3,NUM_GERMAN_1); @@ -543,7 +543,7 @@ static byte MakeGermanTownName(byte *buf 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); @@ -551,11 +551,11 @@ static byte MakeGermanTownName(byte *buf if (i<=NUM_GERMAN_4_PRECHANGE-1) { AppendPart(&buf, 0, german_3); AppendPart(&buf, i, german_4); - } else { + } else { AppendPart(&buf, 1, german_3); AppendPart(&buf, i, german_4); - } } + } return 0; } @@ -802,7 +802,7 @@ static const char silly_1[] = MK("Scramble") MK("Silly") MK("Simple") - MK("Tricky") + MK("Trickle") MK("Slippery") MK("Slimey") MK("Slumber") @@ -1972,3 +1972,34 @@ TownNameGenerator * const _town_name_gen MakeHungarianTownName, MakeAustrianTownName }; + +#define FIXNUM(x, y, z) (((((x) << 16) / (y)) + 1) << z) + +uint32 GetOldTownName(uint32 townnameparts, byte old_town_name_type) +{ + uint32 a = 0; + 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 */ + #ifdef _DEBUG + printf("German Townnames are buggy... (%d)\n", townnameparts); + #endif + return townnameparts; + case 4: /* Latin-American */ + /* 0000 0000 0000 0000 0000 0000 1111 1111 */ + return FIXNUM(townnameparts, NUM_SPANISH_1, 0); + case 5: /* Silly */ + //AppendPart(&buf, GETNUM(16, NUM_SILLY_2),silly_2); + /* 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; +}