namegen.c
author Darkvater
Fri, 16 Sep 2005 10:37:21 +0000
changeset 2431 c720f620253e
parent 2186 461a2aff3486
child 2484 8e0c88a833fb
permissions -rw-r--r--
(svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 1891
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 1891
diff changeset
     2
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     3
#include "stdafx.h"
1891
92a3b0aa0946 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1473
diff changeset
     4
#include "openttd.h"
1299
0a6510cc889b (svn r1803) Move debugging stuff into files of it's own
tron
parents: 1109
diff changeset
     5
#include "debug.h"
1306
40038dfdf3ba (svn r1810) Move town name generation declarations into a header of their own
tron
parents: 1299
diff changeset
     6
#include "namegen.h"
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
     7
#include "table/namegen.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     8
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
     9
static inline uint32 SeedChance(int shift_by, int max, uint32 seed)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    10
{
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    11
	return ((uint16)(seed >> shift_by) * max) >> 16;
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    12
}
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    13
1447
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    14
static inline uint32 SeedModChance(int shift_by, int max, uint32 seed)
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    15
{
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    16
	/* This actually gives *MUCH* more even distribution of the values
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    17
	 * than SeedChance(), which is absolutely horrible in that. If
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    18
	 * you do not believe me, try with i.e. the Czech town names,
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    19
	 * compare the words (nicely visible on prefixes) generated by
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    20
	 * SeedChance() and SeedModChance(). Do not get dicouraged by the
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    21
	 * never-use-modulo myths, which hold true only for the linear
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    22
	 * congruential generators (and Random() isn't such a generator).
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    23
	 * --pasky */
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    24
	// TODO: Perhaps we should use it for all the name generators? --pasky
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    25
	return (seed >> shift_by) % max;
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    26
}
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
    27
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    28
static inline int32 SeedChanceBias(int shift_by, int max, uint32 seed, int bias)
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    29
{
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    30
	return SeedChance(shift_by, max + bias, seed) - bias;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    31
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    32
1109
1bab892228cd (svn r1610) Remove trailing whitespace (last time ever, i hope)
tron
parents: 1107
diff changeset
    33
static void ReplaceWords(const char *org, const char *rep, char *buf)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    34
{
1107
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
    35
	if (strncmp(buf, org, 4) == 0) strncpy(buf, rep, 4);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    36
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    37
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
    38
static byte MakeEnglishOriginalTownName(char *buf, uint32 seed)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    39
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    40
	int i;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    41
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    42
	//null terminates the string for strcat
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    43
	strcpy(buf, "");
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    44
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    45
	// optional first segment
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    46
	i = SeedChanceBias(0, lengthof(name_original_english_1), seed, 50);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    47
	if (i >= 0)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    48
		strcat(buf,name_original_english_1[i]);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    49
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    50
	//mandatory middle segments
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    51
	strcat(buf, name_original_english_2[SeedChance(4,  lengthof(name_original_english_2), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    52
	strcat(buf, name_original_english_3[SeedChance(7,  lengthof(name_original_english_3), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    53
	strcat(buf, name_original_english_4[SeedChance(10, lengthof(name_original_english_4), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    54
	strcat(buf, name_original_english_5[SeedChance(13, lengthof(name_original_english_5), seed)]);
111
31c32d936f58 (svn r112) -Fix: converted all linebreaks to UNIX-linebreak (\n) (forgot one file)
truelight
parents: 109
diff changeset
    55
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    56
	//optional last segment
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    57
	i = SeedChanceBias(15, lengthof(name_original_english_6), seed, 60);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    58
	if (i >= 0)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    59
		strcat(buf, name_original_english_6[i]);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    60
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    61
	if (buf[0] == 'C' && (buf[1] == 'e' || buf[1] == 'i'))
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    62
		buf[0] = 'K';
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    63
1107
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
    64
	ReplaceWords("Cunt", "East", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
    65
	ReplaceWords("Slag", "Pits", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
    66
	ReplaceWords("Slut", "Edin", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
    67
	//ReplaceWords("Fart", "Boot", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
    68
	ReplaceWords("Drar", "Quar", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
    69
	ReplaceWords("Dreh", "Bash", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
    70
	ReplaceWords("Frar", "Shor", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
    71
	ReplaceWords("Grar", "Aber", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
    72
	ReplaceWords("Brar", "Over", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
    73
	ReplaceWords("Wrar", "Inve", buf);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    74
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    75
	return 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    76
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    77
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    78
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
    79
static byte MakeEnglishAdditionalTownName(char *buf, uint32 seed)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    80
{
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    81
	int i;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    82
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    83
	//null terminates the string for strcat
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    84
	strcpy(buf, "");
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    85
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    86
	// optional first segment
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    87
	i = SeedChanceBias(0, lengthof(name_additional_english_prefix), seed, 50);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    88
	if (i >= 0)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
    89
		strcat(buf,name_additional_english_prefix[i]);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    90
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    91
	if (SeedChance(3, 20, seed) >= 14) {
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    92
		strcat(buf, name_additional_english_1a[SeedChance(6, lengthof(name_additional_english_1a), seed)]);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
    93
	} else {
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    94
		strcat(buf, name_additional_english_1b1[SeedChance(6, lengthof(name_additional_english_1b1), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    95
		strcat(buf, name_additional_english_1b2[SeedChance(9, lengthof(name_additional_english_1b2), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    96
		if (SeedChance(11, 20, seed) >= 4) {
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    97
			strcat(buf, name_additional_english_1b3a[SeedChance(12, lengthof(name_additional_english_1b3a), seed)]);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
    98
		} else {
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
    99
			strcat(buf, name_additional_english_1b3b[SeedChance(12, lengthof(name_additional_english_1b3b), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   100
		}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   101
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   102
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   103
	strcat(buf, name_additional_english_2[SeedChance(14, lengthof(name_additional_english_2), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   104
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   105
	//optional last segment
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   106
	i = SeedChanceBias(15, lengthof(name_additional_english_3), seed, 60);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   107
	if (i >= 0)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   108
		strcat(buf, name_additional_english_3[i]);
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   109
1107
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
   110
	ReplaceWords("Cunt", "East", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
   111
	ReplaceWords("Slag", "Pits", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
   112
	ReplaceWords("Slut", "Edin", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
   113
	ReplaceWords("Fart", "Boot", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
   114
	ReplaceWords("Drar", "Quar", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
   115
	ReplaceWords("Dreh", "Bash", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
   116
	ReplaceWords("Frar", "Shor", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
   117
	ReplaceWords("Grar", "Aber", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
   118
	ReplaceWords("Brar", "Over", buf);
29c55f462a18 (svn r1608) Make ReplaceWords() comprehensible
tron
parents: 1030
diff changeset
   119
	ReplaceWords("Wrar", "Stan", buf);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   120
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   121
	return 0;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   122
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   123
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   124
static byte MakeAustrianTownName(char *buf, uint32 seed)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   125
{
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   126
	int i, j = 0;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   127
	strcpy(buf, "");
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   128
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   129
	// Bad, Maria, Gross, ...
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   130
	i = SeedChanceBias(0, lengthof(name_austrian_a1), seed, 15);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   131
	if (i >= 0) strcat(buf, name_austrian_a1[i]);
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   132
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   133
	i = SeedChance(4, 6, seed);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   134
	if (i >= 4) {
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   135
		// Kaisers-kirchen
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   136
		strcat(buf, name_austrian_a2[SeedChance( 7, lengthof(name_austrian_a2), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   137
		strcat(buf, name_austrian_a3[SeedChance(13, lengthof(name_austrian_a3), seed)]);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   138
	} else if (i >= 2) {
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   139
		// St. Johann
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   140
		strcat(buf, name_austrian_a5[SeedChance( 7, lengthof(name_austrian_a5), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   141
		strcat(buf, name_austrian_a6[SeedChance( 9, lengthof(name_austrian_a6), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   142
		j = 1; // More likely to have a " an der " or " am "
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   143
	} else {
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   144
		// Zell
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   145
		strcat(buf, name_austrian_a4[SeedChance( 7, lengthof(name_austrian_a4), seed)]);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   146
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   147
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   148
	i = SeedChance(1, 6, seed);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   149
	if (i >= 4 - j) {
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   150
		// an der Donau (rivers)
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   151
		strcat(buf, name_austrian_f1[SeedChance(4, lengthof(name_austrian_f1), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   152
		strcat(buf, name_austrian_f2[SeedChance(5, lengthof(name_austrian_f2), seed)]);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   153
	} else if (i >= 2 - j) {
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   154
		// am Dachstein (mountains)
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   155
		strcat(buf, name_austrian_b1[SeedChance(4, lengthof(name_austrian_b1), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   156
		strcat(buf, name_austrian_b2[SeedChance(5, lengthof(name_austrian_b2), seed)]);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   157
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   158
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   159
	return 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   160
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   161
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   162
static byte MakeGermanTownName(char *buf, uint32 seed)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   163
{
992
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   164
	uint i;
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   165
	uint seed_derivative;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   166
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   167
	//null terminates the string for strcat
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   168
	strcpy(buf, "");
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   169
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   170
	seed_derivative = SeedChance(7, 28, seed);
992
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   171
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   172
	//optional prefix
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   173
	if (seed_derivative == 12 || seed_derivative == 19) {
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   174
		i = SeedChance(2, lengthof(name_german_pre), seed);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   175
		strcat(buf,name_german_pre[i]);
4
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   176
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   177
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   178
	// mandatory middle segments including option of hardcoded name
1422
c3bc75035658 (svn r1926) Codechange: Renamed some of the predefined town names arrays for consistent naming.
pasky
parents: 1307
diff changeset
   179
	i = SeedChance(3, lengthof(name_german_real) + lengthof(name_german_1), seed);
c3bc75035658 (svn r1926) Codechange: Renamed some of the predefined town names arrays for consistent naming.
pasky
parents: 1307
diff changeset
   180
	if (i < lengthof(name_german_real)) {
c3bc75035658 (svn r1926) Codechange: Renamed some of the predefined town names arrays for consistent naming.
pasky
parents: 1307
diff changeset
   181
		strcat(buf,name_german_real[i]);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   182
	} else {
1422
c3bc75035658 (svn r1926) Codechange: Renamed some of the predefined town names arrays for consistent naming.
pasky
parents: 1307
diff changeset
   183
		strcat(buf, name_german_1[i - lengthof(name_german_real)]);
992
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   184
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   185
		i = SeedChance(5, lengthof(name_german_2), seed);
992
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   186
		strcat(buf, name_german_2[i]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   187
	}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   188
992
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   189
	// optional suffix
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   190
	if (seed_derivative == 24) {
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   191
		i = SeedChance(9,
992
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   192
			lengthof(name_german_4_an_der) + lengthof(name_german_4_am), seed);
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   193
		if (i < lengthof(name_german_4_an_der)) {
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   194
			strcat(buf, name_german_3_an_der[0]);
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   195
			strcat(buf, name_german_4_an_der[i]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   196
		} else {
992
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   197
			strcat(buf, name_german_3_am[0]);
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   198
			strcat(buf, name_german_4_am[i - lengthof(name_german_4_an_der)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   199
		}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   200
	}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   201
	return 0;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   202
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   203
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   204
static byte MakeSpanishTownName(char *buf, uint32 seed)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   205
{
1422
c3bc75035658 (svn r1926) Codechange: Renamed some of the predefined town names arrays for consistent naming.
pasky
parents: 1307
diff changeset
   206
	strcpy(buf, name_spanish_real[SeedChance(0, lengthof(name_spanish_real), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   207
	return 0;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   208
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   209
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   210
static byte MakeFrenchTownName(char *buf, uint32 seed)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   211
{
1422
c3bc75035658 (svn r1926) Codechange: Renamed some of the predefined town names arrays for consistent naming.
pasky
parents: 1307
diff changeset
   212
	strcpy(buf, name_french_real[SeedChance(0, lengthof(name_french_real), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   213
	return 0;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   214
}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   215
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   216
static byte MakeSillyTownName(char *buf, uint32 seed)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   217
{
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   218
	strcpy(buf, name_silly_1[SeedChance( 0, lengthof(name_silly_1), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   219
	strcat(buf, name_silly_2[SeedChance(16, lengthof(name_silly_2), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   220
	return 0;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   221
}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   222
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   223
static byte MakeSwedishTownName(char *buf, uint32 seed)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   224
{
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   225
	int i;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   226
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   227
	//null terminates the string for strcat
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   228
	strcpy(buf, "");
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   229
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   230
	// optional first segment
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   231
	i = SeedChanceBias(0, lengthof(name_swedish_1), seed, 50);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   232
	if (i >= 0)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   233
		strcat(buf, name_swedish_1[i]);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   234
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   235
	// mandatory middle segments including option of hardcoded name
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   236
	if (SeedChance(4, 5, seed) >= 3) {
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   237
		strcat(buf, name_swedish_2[SeedChance( 7, lengthof(name_swedish_2), seed)]);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   238
	} else {
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   239
		strcat(buf, name_swedish_2a[SeedChance( 7, lengthof(name_swedish_2a), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   240
		strcat(buf, name_swedish_2b[SeedChance(10, lengthof(name_swedish_2b), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   241
		strcat(buf, name_swedish_2c[SeedChance(13, lengthof(name_swedish_2c), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   242
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   243
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   244
	strcat(buf, name_swedish_3[SeedChance(16, lengthof(name_swedish_3), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   245
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   246
	return 0;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   247
}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   248
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   249
static byte MakeDutchTownName(char *buf, uint32 seed)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   250
{
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   251
	int i;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   252
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   253
	//null terminates the string for strcat
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   254
	strcpy(buf, "");
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   255
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   256
	// optional first segment
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   257
	i = SeedChanceBias(0, lengthof(name_dutch_1), seed, 50);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   258
	if (i >= 0)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   259
		strcat(buf, name_dutch_1[i]);
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   260
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   261
	// mandatory middle segments including option of hardcoded name
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   262
	if (SeedChance(6, 9, seed) > 4) {
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   263
		strcat(buf, name_dutch_2[SeedChance( 9, lengthof(name_dutch_2), seed)]);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   264
	} else {
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   265
		strcat(buf, name_dutch_3[SeedChance( 9, lengthof(name_dutch_3), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   266
		strcat(buf, name_dutch_4[SeedChance(12, lengthof(name_dutch_4), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   267
	}
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   268
	strcat(buf, name_dutch_5[SeedChance(15, lengthof(name_dutch_5), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   269
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   270
	return 0;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   271
}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   272
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   273
static byte MakeFinnishTownName(char *buf, uint32 seed)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   274
{
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   275
	//null terminates the string for strcat
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   276
	strcpy(buf, "");
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   277
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   278
	// Select randomly if town name should consists of one or two parts.
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   279
	if (SeedChance(0, 15, seed) >= 10) {
1422
c3bc75035658 (svn r1926) Codechange: Renamed some of the predefined town names arrays for consistent naming.
pasky
parents: 1307
diff changeset
   280
		strcat(buf, name_finnish_real[SeedChance( 2, lengthof(name_finnish_real), seed)]);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   281
	} else {
1422
c3bc75035658 (svn r1926) Codechange: Renamed some of the predefined town names arrays for consistent naming.
pasky
parents: 1307
diff changeset
   282
		strcat(buf, name_finnish_1[SeedChance( 2, lengthof(name_finnish_1), seed)]);
c3bc75035658 (svn r1926) Codechange: Renamed some of the predefined town names arrays for consistent naming.
pasky
parents: 1307
diff changeset
   283
		strcat(buf, name_finnish_2[SeedChance(10, lengthof(name_finnish_2), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   284
	}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   285
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   286
	return 0;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   287
}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   288
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   289
static byte MakePolishTownName(char *buf, uint32 seed)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   290
{
959
b031d88c76f3 (svn r1451) Fix some of the signed/unsigned comparison warnings
tron
parents: 958
diff changeset
   291
	uint i;
b031d88c76f3 (svn r1451) Fix some of the signed/unsigned comparison warnings
tron
parents: 958
diff changeset
   292
	uint j;
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   293
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   294
	//null terminates the string for strcat
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   295
	strcpy(buf, "");
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   296
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   297
	// optional first segment
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   298
	i = SeedChance(0,
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   299
		lengthof(name_polish_2_o) + lengthof(name_polish_2_m) +
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   300
		lengthof(name_polish_2_f) + lengthof(name_polish_2_n),
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   301
		seed);
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   302
	j = SeedChance(2, 20, seed);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   303
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   304
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   305
	if (i < lengthof(name_polish_2_o)) {
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   306
		strcat(buf, name_polish_2_o[SeedChance(3, lengthof(name_polish_2_o), seed)]);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   307
	} else if (i < lengthof(name_polish_2_m) + lengthof(name_polish_2_o)) {
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   308
		if (j < 4)
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   309
			strcat(buf, name_polish_1_m[SeedChance(5, lengthof(name_polish_1_m), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   310
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   311
		strcat(buf, name_polish_2_m[SeedChance(7, lengthof(name_polish_2_m), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   312
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   313
		if (j >= 4 && j < 16)
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   314
			strcat(buf, name_polish_3_m[SeedChance(10, lengthof(name_polish_3_m), seed)]);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   315
	} else if (i < lengthof(name_polish_2_f) + lengthof(name_polish_2_m) + lengthof(name_polish_2_o)) {
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   316
		if (j < 4)
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   317
			strcat(buf, name_polish_1_f[SeedChance(5, lengthof(name_polish_1_f), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   318
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   319
		strcat(buf, name_polish_2_f[SeedChance(7, lengthof(name_polish_2_f), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   320
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   321
		if (j >= 4 && j < 16)
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   322
			strcat(buf, name_polish_3_f[SeedChance(10, lengthof(name_polish_3_f), seed)]);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   323
	} else {
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   324
		if (j < 4)
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   325
			strcat(buf, name_polish_1_n[SeedChance(5, lengthof(name_polish_1_n), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   326
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   327
		strcat(buf, name_polish_2_n[SeedChance(7, lengthof(name_polish_2_n), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   328
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   329
		if (j >= 4 && j < 16)
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   330
			strcat(buf, name_polish_3_n[SeedChance(10, lengthof(name_polish_3_n), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   331
	}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   332
	return 0;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   333
}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   334
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   335
static byte MakeCzechTownName(char *buf, uint32 seed)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   336
{
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   337
	/* Probability of prefixes/suffixes */
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   338
	/* 0..11 prefix, 12..13 prefix+suffix, 14..17 suffix, 18..31 nothing */
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   339
	int prob_tails;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   340
	bool do_prefix, do_suffix, dynamic_subst;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   341
	/* IDs of the respective parts */
1473
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   342
	int prefix = 0, ending = 0, suffix = 0;
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   343
	uint postfix = 0;
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   344
	uint stem;
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   345
	/* The select criteria. */
1473
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   346
	CzechGender gender;
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   347
	CzechChoose choose;
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   348
	CzechAllow allow;
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   349
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   350
	// 1:3 chance to use a real name.
1447
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
   351
	if (SeedModChance(0, 4, seed) == 0) {
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
   352
		strcpy(buf, name_czech_real[SeedModChance(4, lengthof(name_czech_real), seed)]);
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   353
		return 0;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   354
	}
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   355
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   356
	// NUL terminates the string for strcat()
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   357
	strcpy(buf, "");
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   358
1447
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
   359
	prob_tails = SeedModChance(2, 32, seed);
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   360
	do_prefix = prob_tails < 12;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   361
	do_suffix = prob_tails > 11 && prob_tails < 17;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   362
1447
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
   363
	if (do_prefix) prefix = SeedModChance(5, lengthof(name_czech_adj) * 12, seed) / 12;
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
   364
	if (do_suffix) suffix = SeedModChance(7, lengthof(name_czech_suffix), seed);
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   365
	// 3:1 chance 3:1 to use dynamic substantive
1473
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   366
	stem = SeedModChance(9,
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   367
		lengthof(name_czech_subst_full) + 3 * lengthof(name_czech_subst_stem),
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   368
		seed);
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   369
	if (stem < lengthof(name_czech_subst_full)) {
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   370
		// That was easy!
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   371
		dynamic_subst = false;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   372
		gender = name_czech_subst_full[stem].gender;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   373
		choose = name_czech_subst_full[stem].choose;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   374
		allow = name_czech_subst_full[stem].allow;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   375
	} else {
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   376
		unsigned int map[lengthof(name_czech_subst_ending)];
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   377
		int ending_start = -1, ending_stop = -1;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   378
		int i;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   379
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   380
		// Load the substantive
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   381
		dynamic_subst = true;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   382
		stem -= lengthof(name_czech_subst_full);
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   383
		stem %= lengthof(name_czech_subst_stem);
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   384
		gender = name_czech_subst_stem[stem].gender;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   385
		choose = name_czech_subst_stem[stem].choose;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   386
		allow = name_czech_subst_stem[stem].allow;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   387
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   388
		// Load the postfix (1:1 chance that a postfix will be inserted)
1447
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
   389
		postfix = SeedModChance(14, lengthof(name_czech_subst_postfix) * 2, seed);
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   390
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   391
		if (choose & CZC_POSTFIX) {
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   392
			// Always get a real postfix.
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   393
			postfix %= lengthof(name_czech_subst_postfix);
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   394
		}
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   395
		if (choose & CZC_NOPOSTFIX) {
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   396
			// Always drop a postfix.
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   397
			postfix += lengthof(name_czech_subst_postfix);
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   398
		}
1473
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   399
		if (postfix < lengthof(name_czech_subst_postfix))
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   400
			choose |= CZC_POSTFIX;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   401
		else
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   402
			choose |= CZC_NOPOSTFIX;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   403
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   404
		// Localize the array segment containing a good gender
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   405
		for (ending = 0; ending < (int) lengthof(name_czech_subst_ending); ending++) {
1473
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   406
			const CzechNameSubst *e = &name_czech_subst_ending[ending];
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   407
1473
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   408
			if (gender == CZG_FREE ||
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   409
					(gender == CZG_NFREE && e->gender != CZG_SNEUT && e->gender != CZG_PNEUT) ||
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   410
					gender == e->gender) {
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   411
				if (ending_start < 0)
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   412
					ending_start = ending;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   413
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   414
			} else if (ending_start >= 0) {
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   415
				ending_stop = ending - 1;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   416
				break;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   417
			}
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   418
		}
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   419
		if (ending_stop < 0) {
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   420
			// Whoa. All the endings matched.
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   421
			ending_stop = ending - 1;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   422
		}
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   423
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   424
		// Make a sequential map of the items with good mask
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   425
		i = 0;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   426
		for (ending = ending_start; ending <= ending_stop; ending++) {
1473
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   427
			const CzechNameSubst *e = &name_czech_subst_ending[ending];
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   428
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   429
			if ((e->choose & choose) == choose && (e->allow & allow) != 0)
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   430
				map[i++] = ending;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   431
		}
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   432
		assert(i > 0);
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   433
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   434
		// Load the ending
1447
3f1c82502413 (svn r1951) Introduced SeedModChance() (which is like SeedChance() but uses simple modulo instead of bitshifting and multiplication), explained why does it work better, used it in MakeCzechTownName() and added a TODO note about possibly using it in the other town name generators too.
pasky
parents: 1426
diff changeset
   435
		ending = map[SeedModChance(16, i, seed)];
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   436
		// Override possible CZG_*FREE; this must be a real gender,
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   437
		// otherwise we get overflow when modifying the adjectivum.
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   438
		gender = name_czech_subst_ending[ending].gender;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   439
		assert(gender != CZG_FREE && gender != CZG_NFREE);
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   440
	}
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   441
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   442
	if (do_prefix && (name_czech_adj[prefix].choose & choose) != choose) {
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   443
		// Throw away non-matching prefix.
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   444
		do_prefix = false;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   445
	}
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   446
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   447
	// Now finally construct the name
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   448
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   449
	if (do_prefix) {
1473
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   450
		CzechPattern pattern = name_czech_adj[prefix].pattern;
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   451
		int endpos;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   452
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   453
		strcat(buf, name_czech_adj[prefix].name);
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   454
		endpos = strlen(buf) - 1;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   455
		if (gender == CZG_SMASC && pattern == CZP_PRIVL) {
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   456
			/* -ovX -> -uv */
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   457
			buf[endpos - 2] = 'u';
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   458
			assert(buf[endpos - 1] == 'v');
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   459
			buf[endpos] = '\0';
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   460
		} else {
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   461
			buf[endpos] = name_czech_patmod[gender][pattern];
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   462
		}
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   463
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   464
		strcat(buf, " ");
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   465
	}
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   466
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   467
	if (dynamic_subst) {
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   468
		strcat(buf, name_czech_subst_stem[stem].name);
1473
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   469
		if (postfix < lengthof(name_czech_subst_postfix)) {
1426
0a215fc32f96 (svn r1930) Cleaned up the postfix-ending connecting code and introduced some simple postfix-last-letter transformations when the ending first letter is 'i'.
pasky
parents: 1425
diff changeset
   470
			const char *poststr = name_czech_subst_postfix[postfix];
0a215fc32f96 (svn r1930) Cleaned up the postfix-ending connecting code and introduced some simple postfix-last-letter transformations when the ending first letter is 'i'.
pasky
parents: 1425
diff changeset
   471
			const char *endstr = name_czech_subst_ending[ending].name;
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   472
			int postlen, endlen;
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   473
1426
0a215fc32f96 (svn r1930) Cleaned up the postfix-ending connecting code and introduced some simple postfix-last-letter transformations when the ending first letter is 'i'.
pasky
parents: 1425
diff changeset
   474
			postlen = strlen(poststr);
0a215fc32f96 (svn r1930) Cleaned up the postfix-ending connecting code and introduced some simple postfix-last-letter transformations when the ending first letter is 'i'.
pasky
parents: 1425
diff changeset
   475
			endlen = strlen(endstr);
0a215fc32f96 (svn r1930) Cleaned up the postfix-ending connecting code and introduced some simple postfix-last-letter transformations when the ending first letter is 'i'.
pasky
parents: 1425
diff changeset
   476
			assert(postlen > 0 && endlen > 0);
0a215fc32f96 (svn r1930) Cleaned up the postfix-ending connecting code and introduced some simple postfix-last-letter transformations when the ending first letter is 'i'.
pasky
parents: 1425
diff changeset
   477
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   478
			// Kill the "avava" and "Jananna"-like cases
1473
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   479
			if (postlen < 2 || postlen > endlen || (
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   480
						(poststr[1] != 'v' || poststr[1] != endstr[1]) &&
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   481
						poststr[2] != endstr[1])
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   482
					) {
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   483
				uint buflen;
1426
0a215fc32f96 (svn r1930) Cleaned up the postfix-ending connecting code and introduced some simple postfix-last-letter transformations when the ending first letter is 'i'.
pasky
parents: 1425
diff changeset
   484
				strcat(buf, poststr);
0a215fc32f96 (svn r1930) Cleaned up the postfix-ending connecting code and introduced some simple postfix-last-letter transformations when the ending first letter is 'i'.
pasky
parents: 1425
diff changeset
   485
				buflen = strlen(buf);
0a215fc32f96 (svn r1930) Cleaned up the postfix-ending connecting code and introduced some simple postfix-last-letter transformations when the ending first letter is 'i'.
pasky
parents: 1425
diff changeset
   486
0a215fc32f96 (svn r1930) Cleaned up the postfix-ending connecting code and introduced some simple postfix-last-letter transformations when the ending first letter is 'i'.
pasky
parents: 1425
diff changeset
   487
				// k-i -> c-i, h-i -> z-i
0a215fc32f96 (svn r1930) Cleaned up the postfix-ending connecting code and introduced some simple postfix-last-letter transformations when the ending first letter is 'i'.
pasky
parents: 1425
diff changeset
   488
				if (endstr[0] == 'i') {
1473
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   489
					switch (buf[buflen - 1]) {
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   490
						case 'k': buf[buflen - 1] = 'c'; break;
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   491
						case 'h': buf[buflen - 1] = 'z'; break;
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   492
						default: break;
4be673c6c994 (svn r1977) Typedef some enums and struct plus some minor style changes
tron
parents: 1447
diff changeset
   493
					}
1426
0a215fc32f96 (svn r1930) Cleaned up the postfix-ending connecting code and introduced some simple postfix-last-letter transformations when the ending first letter is 'i'.
pasky
parents: 1425
diff changeset
   494
				}
0a215fc32f96 (svn r1930) Cleaned up the postfix-ending connecting code and introduced some simple postfix-last-letter transformations when the ending first letter is 'i'.
pasky
parents: 1425
diff changeset
   495
			}
1425
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   496
		}
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   497
		strcat(buf, name_czech_subst_ending[ending].name);
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   498
	} else {
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   499
		strcat(buf, name_czech_subst_full[stem].name);
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   500
	}
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   501
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   502
	if (do_suffix) {
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   503
		strcat(buf, " ");
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   504
		strcat(buf, name_czech_suffix[suffix]);
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   505
	}
d566470aa3ca (svn r1929) Feature: [namegen] Support for dynamic generation of the Czech town names.
pasky
parents: 1422
diff changeset
   506
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   507
	return 0;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   508
}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   509
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   510
static byte MakeRomanianTownName(char *buf, uint32 seed)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   511
{
1422
c3bc75035658 (svn r1926) Codechange: Renamed some of the predefined town names arrays for consistent naming.
pasky
parents: 1307
diff changeset
   512
	strcpy(buf, name_romanian_real[SeedChance(0, lengthof(name_romanian_real), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   513
	return 0;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   514
}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   515
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   516
static byte MakeSlovakTownName(char *buf, uint32 seed)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   517
{
1422
c3bc75035658 (svn r1926) Codechange: Renamed some of the predefined town names arrays for consistent naming.
pasky
parents: 1307
diff changeset
   518
	strcpy(buf, name_slovak_real[SeedChance(0, lengthof(name_slovak_real), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   519
	return 0;
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   520
}
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   521
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   522
static byte MakeNorwegianTownName(char *buf, uint32 seed)
948
4b3f777634ab (svn r1438) Added norwegian townnames
miham
parents: 852
diff changeset
   523
{
4b3f777634ab (svn r1438) Added norwegian townnames
miham
parents: 852
diff changeset
   524
	strcpy(buf, "");
958
f5ccffdadd48 (svn r1450) Updated norwegian townname generation (Simen Graaten)
miham
parents: 948
diff changeset
   525
f5ccffdadd48 (svn r1450) Updated norwegian townname generation (Simen Graaten)
miham
parents: 948
diff changeset
   526
	// Use first 4 bit from seed to decide whether or not this town should
f5ccffdadd48 (svn r1450) Updated norwegian townname generation (Simen Graaten)
miham
parents: 948
diff changeset
   527
	// have a real name 3/16 chance.  Bit 0-3
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   528
	if (SeedChance(0, 15, seed) < 3) {
958
f5ccffdadd48 (svn r1450) Updated norwegian townname generation (Simen Graaten)
miham
parents: 948
diff changeset
   529
		// Use 7bit for the realname table index.  Bit 4-10
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   530
		strcat(buf, name_norwegian_real[SeedChance(4, lengthof(name_norwegian_real), seed)]);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   531
	} else {
958
f5ccffdadd48 (svn r1450) Updated norwegian townname generation (Simen Graaten)
miham
parents: 948
diff changeset
   532
		// Use 7bit for the first fake part.  Bit 4-10
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   533
		strcat(buf, name_norwegian_1[SeedChance(4, lengthof(name_norwegian_1), seed)]);
958
f5ccffdadd48 (svn r1450) Updated norwegian townname generation (Simen Graaten)
miham
parents: 948
diff changeset
   534
		// Use 7bit for the last fake part.  Bit 11-17
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   535
		strcat(buf, name_norwegian_2[SeedChance(11, lengthof(name_norwegian_2), seed)]);
958
f5ccffdadd48 (svn r1450) Updated norwegian townname generation (Simen Graaten)
miham
parents: 948
diff changeset
   536
	}
f5ccffdadd48 (svn r1450) Updated norwegian townname generation (Simen Graaten)
miham
parents: 948
diff changeset
   537
948
4b3f777634ab (svn r1438) Added norwegian townnames
miham
parents: 852
diff changeset
   538
	return 0;
4b3f777634ab (svn r1438) Added norwegian townnames
miham
parents: 852
diff changeset
   539
}
4b3f777634ab (svn r1438) Added norwegian townnames
miham
parents: 852
diff changeset
   540
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   541
static byte MakeHungarianTownName(char *buf, uint32 seed)
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   542
{
959
b031d88c76f3 (svn r1451) Fix some of the signed/unsigned comparison warnings
tron
parents: 958
diff changeset
   543
	uint i;
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   544
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   545
	//null terminates the string for strcat
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   546
	strcpy(buf, "");
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   547
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   548
	if (SeedChance(12, 15, seed) < 3) {
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   549
		strcat(buf, name_hungarian_real[SeedChance(0, lengthof(name_hungarian_real), seed)]);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   550
	} else {
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   551
		// optional first segment
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   552
		i = SeedChance(3, lengthof(name_hungarian_1) * 3, seed);
992
7ddeb6074c06 (svn r1490) Restore original town name generation behavior for german and hungarian (Jango)
tron
parents: 959
diff changeset
   553
		if (i < lengthof(name_hungarian_1))
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   554
			strcat(buf, name_hungarian_1[i]);
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   555
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   556
		// mandatory middle segments
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   557
		strcat(buf, name_hungarian_2[SeedChance(3, lengthof(name_hungarian_2), seed)]);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   558
		strcat(buf, name_hungarian_3[SeedChance(6, lengthof(name_hungarian_3), seed)]);
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   559
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   560
		// optional last segment
996
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   561
		i = SeedChance(10, lengthof(name_hungarian_4) * 3, seed);
3cdb8dbb5c2f (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
tron
parents: 994
diff changeset
   562
		if (i < lengthof(name_hungarian_4)) {
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   563
			strcat(buf, name_hungarian_4[i]);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   564
		}
4
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   565
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   566
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   567
	return 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   568
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   569
1307
e009b42d00b4 (svn r1811) Use char for string handling in namegen.[ch]
tron
parents: 1306
diff changeset
   570
static byte MakeSwissTownName(char *buf, uint32 seed)
1030
a5e4705a738c (svn r1531) -Feature: [1039061] Swiss town-names (vulvulune)
darkvater
parents: 996
diff changeset
   571
{
a5e4705a738c (svn r1531) -Feature: [1039061] Swiss town-names (vulvulune)
darkvater
parents: 996
diff changeset
   572
	strcpy(buf, name_swiss_real[SeedChance(0, lengthof(name_swiss_real), seed)]);
a5e4705a738c (svn r1531) -Feature: [1039061] Swiss town-names (vulvulune)
darkvater
parents: 996
diff changeset
   573
	return 0;
a5e4705a738c (svn r1531) -Feature: [1039061] Swiss town-names (vulvulune)
darkvater
parents: 996
diff changeset
   574
}
a5e4705a738c (svn r1531) -Feature: [1039061] Swiss town-names (vulvulune)
darkvater
parents: 996
diff changeset
   575
2431
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   576
static byte MakeDanishTownName(char *buf, uint32 seed)
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   577
{
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   578
	int i;
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   579
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   580
	// null terminates the string for strcat
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   581
	strcpy(buf, "");
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   582
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   583
	// optional first segment
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   584
	i = SeedChanceBias(0, lengthof(name_danish_1), seed, 50);
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   585
	if (i >= 0)
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   586
		strcat(buf, name_danish_1[i]);
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   587
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   588
	// middle segments removed as this algorithm seems to create much more realistic names
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   589
	strcat(buf, name_danish_2[SeedChance( 7, lengthof(name_danish_2), seed)]);
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   590
	strcat(buf, name_danish_3[SeedChance(16, lengthof(name_danish_3), seed)]);
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   591
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   592
	return 0;
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   593
}
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   594
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   595
TownNameGenerator * const _town_name_generators[] =
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   596
{
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   597
	MakeEnglishOriginalTownName,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   598
	MakeFrenchTownName,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   599
	MakeGermanTownName,
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   600
	MakeEnglishAdditionalTownName,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   601
	MakeSpanishTownName,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   602
	MakeSillyTownName,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   603
	MakeSwedishTownName,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   604
	MakeDutchTownName,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   605
	MakeFinnishTownName,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   606
	MakePolishTownName,
428
532ec9578634 (svn r627) Merge r439 to trunk:
tron
parents: 264
diff changeset
   607
	MakeSlovakTownName,
948
4b3f777634ab (svn r1438) Added norwegian townnames
miham
parents: 852
diff changeset
   608
	MakeNorwegianTownName,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   609
	MakeHungarianTownName,
233
dd177a8c9f19 (svn r234) -Fix: added missing romanian.txt to VC6, VS.NET and Jamfile project file
darkvater
parents: 193
diff changeset
   610
	MakeAustrianTownName,
264
38396861c501 (svn r270) Fix: [ 1028851 ] automatic and unwanted city renaming
dominik
parents: 240
diff changeset
   611
	MakeRomanianTownName,
38396861c501 (svn r270) Fix: [ 1028851 ] automatic and unwanted city renaming
dominik
parents: 240
diff changeset
   612
	MakeCzechTownName,
1030
a5e4705a738c (svn r1531) -Feature: [1039061] Swiss town-names (vulvulune)
darkvater
parents: 996
diff changeset
   613
	MakeSwissTownName,
2431
c720f620253e (svn r2957) - Feature: [ 1263280 ] Danish town names (fey_dk)
Darkvater
parents: 2186
diff changeset
   614
	MakeDanishTownName,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   615
};
4
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   616
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   617
// DO WE NEED THIS ANY MORE?
4
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   618
#define FIXNUM(x, y, z) (((((x) << 16) / (y)) + 1) << z)
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   619
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   620
uint32 GetOldTownName(uint32 townnameparts, byte old_town_name_type)
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   621
{
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   622
	switch (old_town_name_type) {
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   623
		case 0: case 3: /* English, American */
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   624
			/*	Already OK */
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   625
			return townnameparts;
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   626
4
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   627
		case 1: /* French */
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   628
			/*	For some reason 86 needs to be subtracted from townnameparts
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   629
			*	0000 0000 0000 0000 0000 0000 1111 1111 */
1422
c3bc75035658 (svn r1926) Codechange: Renamed some of the predefined town names arrays for consistent naming.
pasky
parents: 1307
diff changeset
   630
			return FIXNUM(townnameparts - 86, lengthof(name_french_real), 0);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   631
4
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   632
		case 2: /* German */
65
f9f866bc609c (svn r66) -Fix Station list updated on station deletion/station rename
darkvater
parents: 8
diff changeset
   633
			DEBUG(misc, 0) ("German Townnames are buggy... (%d)", townnameparts);
4
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   634
			return townnameparts;
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   635
4
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   636
		case 4: /* Latin-American */
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   637
			/*	0000 0000 0000 0000 0000 0000 1111 1111 */
1422
c3bc75035658 (svn r1926) Codechange: Renamed some of the predefined town names arrays for consistent naming.
pasky
parents: 1307
diff changeset
   638
			return FIXNUM(townnameparts, lengthof(name_spanish_real), 0);
993
5ac6f569031e (svn r1491) Fix bracing style and indentation (Jango)
tron
parents: 992
diff changeset
   639
4
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   640
		case 5: /* Silly */
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   641
			/*	NUM_SILLY_1	-	lower 16 bits
833
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   642
			*	NUM_SILLY_2	-	upper 16 bits without leading 1 (first 8 bytes)
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   643
			*	1000 0000 2222 2222 0000 0000 1111 1111 */
9d4d77ff2cce (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
truelight
parents: 428
diff changeset
   644
			return FIXNUM(townnameparts, lengthof(name_silly_1), 0) | FIXNUM(((townnameparts >> 16)&0xFF), lengthof(name_silly_2), 16);
4
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   645
	}
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   646
	return 0;
cad62d5f9708 (svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents: 0
diff changeset
   647
}