1use rand::prelude::*;
2
3pub struct NameGen<'a, R: Rng> {
4 pub approx_syllables: usize,
6 pub approx_syllables_long: usize,
7
8 rng: &'a mut R,
9}
10
11impl<'a, R: Rng> NameGen<'a, R> {
12 pub fn location(rng: &'a mut R) -> Self {
13 Self {
14 approx_syllables: rng.gen_range(1..4),
15 approx_syllables_long: rng.gen_range(2..4),
16
17 rng,
18 }
19 }
20
21 pub fn generate(self) -> String {
22 let cons = vec![
23 "d", "f", "ph", "r", "st", "t", "s", "p", "sh", "th", "br", "tr", "m", "k", "st", "w",
24 "y", "cr", "fr", "dr", "pl", "wr", "sn", "g", "qu", "l",
25 ];
26 let mut start = cons.clone();
27 start.extend(vec![
28 "cr", "thr", "str", "br", "iv", "est", "ost", "ing", "kr", "in", "on", "tr", "tw",
29 "wh", "eld", "ar", "or", "ear", "irr", "mi", "en", "ed", "et", "ow", "fr", "shr", "wr",
30 "gr", "pr",
31 ]);
32 let mut middle = cons.clone();
33 middle.extend(vec!["tt"]);
34 let vowel = ["o", "e", "a", "i", "u", "au", "ee", "ow", "ay", "ey", "oe"];
35 let end = vec![
36 "et", "ige", "age", "ist", "en", "on", "og", "end", "ind", "ock", "een", "edge", "ist",
37 "ed", "est", "eed", "ast", "olt", "ey", "ean", "ead", "onk", "ink", "eon", "er", "ow",
38 "ot", "in", "on", "id", "ir", "or", "in", "ig", "en",
39 ];
40
41 let mut name = String::new();
42
43 name += start.choose(self.rng).unwrap();
44 for _ in 0..self.approx_syllables.saturating_sub(2) {
45 name += vowel.choose(self.rng).unwrap();
46 name += middle.choose(self.rng).unwrap();
47 }
48 name += end.choose(self.rng).unwrap();
49
50 name.chars()
51 .enumerate()
52 .map(|(i, c)| if i == 0 { c.to_ascii_uppercase() } else { c })
53 .collect()
54 }
55
56 pub fn generate_biome(self) -> String {
59 let start = [
60 "b", "d", "f", "g", "h", "k", "l", "m", "n", "s", "t", "w", "br", "dr", "gr", "gh",
61 "kh", "kr", "st", "str", "th", "tr", "ar", "ark", "adr", "ath", "an", "el", "elb",
62 "eldr", "estr", "ostr", "ond", "ondr", "ul", "uld", "eld", "eldr",
63 ];
64 let middle = [
65 "br", "d", "dr", "dn", "dm", "fr", "g", "gr", "gl", "k", "kr", "l", "ll", "m", "mm",
66 "n", "nn", "nd", "st", "th", "rw", "nw", "thr", "lk", "nk", "ng", "rd", "rk", "nr",
67 "nth", "rth", "kn", "rl", "gg", "lg", "str", "nb", "lb", "ld", "rm", "sd", "sb", "tt",
68 ];
69 let vowel = ["o", "e", "a", "u", "ae"];
70 let end = [
71 "ul", "um", "un", "uth", "und", "ur", "an", "a", "ar", "a", "amar", "amur", "ath",
72 "or", "on", "oth", "omor", "omur", "omar", "ador", "odor", "en", "end", "eth", "amon",
73 "edur", "aden", "oden", "alas", "elas", "alath", "aloth", "eloth", "eres", "ond",
74 "ondor", "undor", "andor", "od", "ed", "amad", "ud", "amud", "ulud", "alud", "allen",
75 "alad", "and", "an", "as", "es",
76 ];
77
78 let mut name = String::new();
79
80 name += start.choose(self.rng).unwrap();
81 for _ in 0..self.approx_syllables_long.saturating_sub(2) {
82 name += vowel.choose(self.rng).unwrap();
83 name += middle.choose(self.rng).unwrap();
84 }
85 name += end.choose(self.rng).unwrap();
86
87 name.chars()
88 .enumerate()
89 .map(|(i, c)| if i == 0 { c.to_ascii_uppercase() } else { c })
90 .collect()
91 }
92
93 fn generate_engl_from_parts(&mut self, start: &[&str], end: &[&str]) -> String {
95 let mut name = String::new();
96 name += start.choose(self.rng).unwrap();
97 name += end.choose(self.rng).unwrap();
98
99 name.chars()
100 .enumerate()
101 .map(|(i, c)| if i == 0 { c.to_ascii_uppercase() } else { c })
102 .collect()
103 }
104
105 fn generate_custom_from_parts(
106 &mut self,
107 start: &[&str],
108 middle: &[&str],
109 vowel: &[&str],
110 end: &[&str],
111 ) -> String {
112 let mut name = String::new();
113
114 name += start.choose(self.rng).unwrap();
115 for _ in 0..self.approx_syllables.saturating_sub(2) {
116 name += vowel.choose(self.rng).unwrap();
117 name += middle.choose(self.rng).unwrap();
118 }
119 name += end.choose(self.rng).unwrap();
120
121 name.chars()
122 .enumerate()
123 .map(|(i, c)| if i == 0 { c.to_ascii_uppercase() } else { c })
124 .collect()
125 }
126
127 pub fn generate_lake_custom(&mut self) -> String {
128 let start = [
129 "b", "f", "g", "d", "h", "c", "m", "l", "n", "p", "r", "s", "t", "w", "v", "z", "qu",
130 "br", "bl", "ch", "chr", "dr", "dw", "fr", "fl", "gr", "gw", "pr", "pl", "st", "sl",
131 "str", "sn", "sp", "spr", "sw", "tr", "wr", "as", "ast", "en", "end", "eld", "es",
132 "on", "ond", "orn", "un", "und", "undr", "in", "ind",
133 ];
134 let middle = ["b", "g", "d", "ch", "m", "l", "n", "p", "r", "s", "t", "v"];
135 let vowel = ["e", "a", "i", "o", "u"];
136 let end = [
137 "oric", "aric", "eric", "ara", "ira", "ora", "era", "aron", "eron", "oron", "ugan",
138 "igan", "adar", "edar", "agron", "udar", "alar", "ular", "imar", "amar", "iles",
139 "ares", "odor", "odur", "azan", "uzan", "ichor", "olon", "anath", "oloth", "oroth",
140 "isor", "agun", "agon", "egon", "oroc", "orac", "essa", "amma", "emma", "oluth",
141 "anda", "onda", "ondo",
142 ];
143 self.generate_custom_from_parts(&start, &middle, &vowel, &end)
144 }
145
146 pub fn generate_grassland_engl(&mut self) -> String {
147 let start = [
148 "green", "heather", "flower", "blue", "yellow", "vast", "moon", "star", "sun",
149 "bright", "fair", "calm", "mistral", "whisper", "clover", "sooth", "spring", "morrow",
150 "dim", "dusk", "dawn", "night", "shimmer", "silver", "gold", "amber", "quiet", "still",
151 "gleam", "wild", "corm", "mint", "petal", "feather", "silent", "bronze", "bistre",
152 "thistle", "bristle", "dew", "bramble", "sorrel", "broad",
153 ];
154 let end = [
155 "brook", "well", "flight", "more", "heart", "song", "barb", "wort", "hoof", "foot",
156 "herd", "path", "wind", "breeze", "light", "bloom", "rest", "balm", "reach", "flow",
157 "graze", "trail", "fall", "shrub", "bush", "gale", "run", "stem", "glare", "gaze",
158 "rove", "brew", "rise", "glow", "wish", "will", "walk", "wander", "wake", "sky",
159 "burrow", "cross", "roam",
160 ];
161 self.generate_engl_from_parts(&start, &end)
162 }
163
164 pub fn generate_grassland_custom(&mut self) -> String {
165 let start = [
166 "b", "f", "g", "d", "h", "c", "m", "l", "n", "p", "r", "s", "t", "w", "v", "z", "qu",
167 "br", "bl", "ch", "chr", "dr", "dw", "fr", "fl", "gr", "gw", "pr", "pl", "st", "sl",
168 "str", "sn", "sp", "spr", "sw", "tr", "wr", "ab", "abr", "al", "ald", "as", "ast",
169 "amm", "ach", "adr", "en", "end", "eld", "end", "es", "amr", "on", "ond", "ochr",
170 "orn", "ost", "ord",
171 ];
172 let middle = [
173 "b", "g", "d", "c", "m", "l", "n", "p", "r", "s", "t", "v", "br", "ch", "chr", "dr",
174 "gr", "pr", "st", "sl", "sn", "sp", "sw", "tr", "ghr", "mm", "n", "nn", "nd", "ln",
175 "lm", "nr", "r", "rz", "lz", "ld", "rm", "sd", "rn", "ss", "sm", "rv", "lv",
176 ];
177 let vowel = ["e", "a", "i", "o", "ea", "au"];
178 let end = [
179 "on", "oc", "ic", "oric", "aric", "eric", "elten", "alend", "alan", "aven", "elen",
180 "estin", "ostin", "alic", "elic", "alon", "elon", "arac", "erac", "eden", "elen",
181 "owan", "owen", "iel", "ien", "ing", "olm", "ulm", "ilm", "alm", "elm", "oria", "aria",
182 "eria", "elis", "alis", "amor", "emor", "en", "ard", "erd", "ord", "org", "enara",
183 "aran",
184 ];
185 self.generate_custom_from_parts(&start, &middle, &vowel, &end)
186 }
187
188 pub fn generate_ocean_engl(&mut self) -> String {
189 let start = [
190 "dark", "murk", "shimmer", "glimmer", "spirit", "moon", "dead", "bane", "salt",
191 "brine", "glitter", "thunder", "pale", "wail", "star", "dim", "azure", "sky", "rage",
192 "ripple", "gloom", "sun", "gleam", "void", "storm", "death", "silver", "dread",
193 "sorrow", "grim", "spirit",
194 ];
195 let end = [
196 "wave", "shell", "wind", "breeze", "gale", "crash", "grip", "fog", "mirror", "whirl",
197 "whorl", "stream", "current", "drift", "light", "shine", "haze", "tear", "maw", "fang",
198 "surf", "tide", "rush", "surge", "glow", "drop", "drag", "swell", "scale", "song",
199 "shroud", "grasp", "mist",
200 ];
201 self.generate_engl_from_parts(&start, &end)
202 }
203
204 pub fn generate_ocean_custom(&mut self) -> String {
205 let start = [
206 "b", "f", "g", "d", "h", "c", "m", "l", "n", "p", "r", "s", "t", "w", "v", "z", "qu",
207 "br", "bl", "ch", "chr", "dr", "dw", "fr", "fl", "gr", "gw", "pr", "pl", "st", "sl",
208 "str", "sn", "sp", "spr", "sw", "tr", "wr", "as", "ast", "en", "end", "eld", "es",
209 "on", "ond", "orn", "un", "und", "undr", "in", "ind",
210 ];
211 let middle = ["b", "g", "d", "ch", "m", "l", "n", "p", "r", "s", "t", "v"];
212 let vowel = ["e", "a", "i", "o", "u"];
213 let end = [
214 "oric", "aric", "eric", "ara", "ira", "ora", "era", "aron", "eron", "oron", "ugan",
215 "igan", "adar", "edar", "agron", "udar", "alar", "ular", "imar", "amar", "iles",
216 "ares", "odor", "odur", "azan", "uzan", "ichor", "olon", "anath", "oloth", "oroth",
217 "isor", "agun", "agon", "egon", "oroc", "orac", "essa", "amma", "emma", "oluth",
218 "anda", "onda", "ondo",
219 ];
220 self.generate_custom_from_parts(&start, &middle, &vowel, &end)
221 }
222
223 pub fn generate_mountain_engl(&mut self) -> String {
224 let start = [
225 "white", "frost", "ever", "pale", "hoar", "cold", "chill", "shiver", "bitter",
226 "glimmer", "winter", "algor", "grey", "dragon", "thunder", "pallid", "death", "spirit",
227 "crystal", "shimmer", "silver", "grizzle", "quiet", "still", "high", "blind", "silent",
228 "lost", "somber", "silent", "sharp", "somber", "sharp", "rime", "ice", "spear",
229 "hammer", "sword", "war", "sky", "heaven", "dread",
230 ];
231 let end = [
232 "cloud", "veil", "shroud", "fang", "horn", "bite", "more", "howl", "heart", "song",
233 "scream", "draft", "path", "wind", "breeze", "wail", "crag", "bellow", "breach",
234 "rift", "chasm", "climb", "fall", "rise", "grasp", "grip", "gale", "summit", "shard",
235 "pierce", "crush", "shard", "clash", "wish", "will", "wake", "storm", "blade", "hold",
236 "reach", "maw", "lock", "gust", "stone", "fury", "rage", "gorge", "clove",
237 ];
238 self.generate_engl_from_parts(&start, &end)
239 }
240
241 pub fn generate_mountain_custom(&mut self) -> String {
242 let start = [
243 "b", "d", "f", "g", "h", "k", "l", "m", "n", "s", "t", "w", "br", "dr", "gr", "gh",
244 "kh", "kr", "st", "str", "th", "tr", "ar", "ark", "adr", "ath", "an", "el", "elb",
245 "eldr", "estr", "ostr", "ond", "ondr", "ul", "uld", "eld", "eldr",
246 ];
247 let middle = [
248 "br", "d", "dr", "dn", "dm", "fr", "g", "gr", "gl", "k", "kr", "l", "ll", "m", "mm",
249 "n", "nn", "nd", "st", "th", "rw", "nw", "thr", "lk", "nk", "ng", "rd", "rk", "nr",
250 "nth", "rth", "kn", "rl", "gg", "lg", "str", "nb", "lb", "ld", "rm", "sd", "sb",
251 ];
252 let vowel = ["o", "e", "a", "u", "ae"];
253 let end = [
254 "ul", "um", "un", "uth", "und", "ur", "an", "a", "ar", "a", "amar", "amur", "ath",
255 "or", "on", "oth", "omor", "omur", "omar", "ador", "odor", "en", "end", "eth", "amon",
256 "edur", "aden", "oden", "alas", "elas", "alath", "aloth", "eloth", "eres", "ond",
257 "ondor", "undor", "andor", "od", "ed", "amad", "ud", "amud", "ulud", "alud", "allen",
258 "alad", "and", "an", "as", "es",
259 ];
260 self.generate_custom_from_parts(&start, &middle, &vowel, &end)
261 }
262
263 pub fn generate_snowland_engl(&mut self) -> String {
264 let start = [
265 "white", "frost", "ever", "pale", "hoar", "cold", "chill", "shiver", "bitter",
266 "glimmer", "winter", "algor", "grey", "ghost", "pearl", "pallid", "spectre", "spirit",
267 "crystal", "shimmer", "silver", "grizzle", "quiet", "still", "wild", "blind", "silent",
268 "lost", "dire", "somber", "sleet", "silent", "sharp", "somber", "sleet", "sharp",
269 "rime", "ice",
270 ];
271 let end = [
272 "wood", "veil", "shroud", "fang", "horn", "bite", "more", "howl", "heart", "song",
273 "scream", "draft", "path", "wind", "breeze", "wail", "growl", "bellow", "pine", "roam",
274 "rest", "shade", "fall", "fir", "grasp", "grip", "gale", "hunt", "run", "shadow",
275 "hill", "shard", "blood", "wish", "will", "walk", "wander", "wake", "storm", "blade",
276 "hold", "reach", "maw",
277 ];
278 self.generate_engl_from_parts(&start, &end)
279 }
280
281 pub fn generate_snowland_custom(&mut self) -> String {
282 let start = [
283 "b", "d", "f", "g", "h", "k", "l", "m", "n", "s", "t", "w", "br", "dr", "gr", "gh",
284 "kh", "kr", "st", "str", "th", "tr", "ar", "ark", "adr", "ath", "an", "el", "elb",
285 "eldr", "estr", "ostr", "ond", "ondr", "ul", "uld", "eld", "eldr",
286 ];
287 let middle = [
288 "br", "d", "dr", "dn", "dm", "fr", "g", "gr", "gl", "k", "kr", "l", "ll", "m", "mm",
289 "n", "nn", "nd", "st", "th", "rw", "nw", "thr", "lk", "nk", "ng", "rd", "rk", "nr",
290 "nth", "rth", "kn", "rl", "gg", "lg", "str", "nb", "lb", "ld", "rm", "sd", "sb",
291 ];
292 let vowel = ["o", "e", "a", "u", "ae"];
293 let end = [
294 "ul", "um", "un", "uth", "und", "ur", "an", "a", "ar", "a", "amar", "amur", "ath",
295 "or", "on", "oth", "omor", "omur", "omar", "ador", "odor", "en", "end", "eth", "amon",
296 "edur", "aden", "oden", "alas", "elas", "alath", "aloth", "eloth", "eres", "ond",
297 "ondor", "undor", "andor", "od", "ed", "amad", "ud", "amud", "ulud", "alud", "allen",
298 "alad", "and", "an", "as", "es",
299 ];
300 self.generate_custom_from_parts(&start, &middle, &vowel, &end)
301 }
302
303 pub fn generate_desert_engl(&mut self) -> String {
304 let start = [
305 "dry", "sun", "bright", "death", "dread", "sizzle", "scourge", "dearth", "dust",
306 "gold", "amber", "gleam", "dead", "swelter", "arid", "balm", "parch", "demon",
307 "scorch", "sear", "gold", "simmer", "doom", "torrid", "drake", "devil", "spirit",
308 "soul", "singe", "heat", "torch", "bone", "broil", "dragon", "shrivel", "sorrow",
309 ];
310 let end = [
311 "swarm", "claw", "curse", "quill", "spell", "bite", "thorn", "bane", "grasp", "storm",
312 "flare", "wind", "breeze", "howl", "reach", "flow", "sting", "sting", "fang", "blast",
313 "veil", "scale", "glare", "gaze", "skull", "prickle", "reach", "needle", "void",
314 "rise", "maw", "raze", "mirage", "glow", "wander", "roam", "breath", "shard", "scar",
315 "lurk", "cross", "stone", "flash", "dance", "burn", "blaze", "fury", "wound",
316 "blister", "mark", "waste", "blood", "rock", "grip", "blight",
317 ];
318 self.generate_engl_from_parts(&start, &end)
319 }
320
321 pub fn generate_desert_custom(&mut self) -> String {
322 let start = [
323 "j", "k", "m", "l", "n", "h", "t", "z", "f", "sh", "s", "q", "z", "y", "gh", "r", "ed",
324 "abg", "ab", "al", "b", "d", "alm",
325 ];
326 let middle = [
327 "j", "k", "m", "l", "n", "h", "t", "w", "z", "r", "f", "sh", "s", "q", "z", "y", "gh",
328 "b", "d", "lf", "lsh", "zd", "br", "lb", "mr", "th", "bd", "db", "ks", "ksh", "nb",
329 "st", "my", "kh", "khl", "zr", "thr", "hm", "hk", "yb", "hb", "hd",
330 ];
331 let vowel = ["e", "a", "i", "u", "ai", "ua"];
332 let end = [
333 "ejaz", "adaqas", "ahrain", "emen", "ahduri", "abna", "araq", "akhm", "atafan", "alik",
334 "ajd", "uda", "ara", "asqa", "uda", "uha", "amin", "iman", "anis", "ayma", "almud",
335 "ubal", "ammad", "ammud", "amir", "anaf", "afan", "aila", "amma", "ahra", "akhla",
336 "azraj", "anu", "ouk", "aksum", "awbas", "astar", "anah", "aqah", "aryat", "alasa",
337 "athar", "aubas", "anaf", "amash", "ilmun", "uza", "irim", "izeh", "ifah", "inah",
338 ];
339 self.generate_custom_from_parts(&start, &middle, &vowel, &end)
340 }
341
342 pub fn generate_swamp_engl(&mut self) -> String {
343 let start = [
344 "green", "moss", "deep", "moon", "haze", "drizzle", "mizzle", "rain", "bracken",
345 "hollow", "mist", "fog", "haze", "tear", "mud", "lost", "spirit", "venom", "glum",
346 "murk", "dim", "dusk", "night", "quiet", "dark", "brume", "rot", "drench", "sullen",
347 "still", "gleam", "wild", "blind", "gnarl", "silent", "dead", "rust", "soul", "gloom",
348 "bramble", "briar", "thorn", "earth", "wither", "tangle", "twist", "fear", "slither",
349 "vile",
350 ];
351 let end = [
352 "root", "bark", "vine", "brook", "well", "veil", "mantle", "drop", "fang", "beck",
353 "bough", "vale", "whisper", "shroud", "cloak", "muck", "claw", "wane", "call", "glen",
354 "rest", "shade", "fall", "grasp", "grip", "water", "glare", "swarm", "creek", "crawl",
355 "shadow", "glow", "wood", "wander", "river", "pool", "sting", "shriek", "barb", "silt",
356 "clay", "pond", "gorse", "burr", "blight", "wisp", "scale", "rill",
357 ];
358 self.generate_engl_from_parts(&start, &end)
359 }
360
361 pub fn generate_jungle_engl(&mut self) -> String {
362 let start = [
363 "green", "ever", "briar", "thorn", "deep", "sun", "glare", "tangle", "strangle",
364 "twist", "dim", "dark", "shade", "savage", "lost", "mist", "shadow", "red", "scarlet",
365 "fog", "fern", "quiet", "gleam", "wild", "blind", "swift", "gnarl", "venom", "spirit",
366 "dread", "wonder", "drizzle", "coil", "snarl", "skein", "snare", "murk", "moss",
367 "slither",
368 ];
369 let end = [
370 "root", "bark", "vine", "leaf", "more", "bole", "heart", "song", "climb", "talon",
371 "bough", "breeze", "light", "branch", "bloom", "vale", "swarm", "prowl", "fang",
372 "horn", "fall", "bush", "grasp", "grip", "crawl", "run", "sting", "hunt", "pride",
373 "veil", "shroud", "rise", "glow", "will", "wander", "wake", "blossom", "barb", "scale",
374 "claw", "catch", "plume", "dance", "maw", "roar", "howl", "shriek", "reach", "drench",
375 "flower", "snag",
376 ];
377 self.generate_engl_from_parts(&start, &end)
378 }
379
380 pub fn generate_jungle_custom(&mut self) -> String {
381 let start = [
382 "j", "k", "m", "l", "n", "p", "h", "t", "v", "z", "s", "x", "tl", "izt", "qu", "z",
383 "y", "tz", "om", "az", "aztl", "ch", "azt", "aw", "c", "uax", "ax",
384 ];
385 let middle = [
386 "k", "m", "l", "n", "p", "n", "h", "t", "v", "z", "s", "tl", "qu", "z", "y", "tl",
387 "ch", "c", "j", "tz", "lc", "lk", "kt", "cn", "xm", "xp", "mn", "c", "k T", "n Y",
388 "n P", "k P", "k X", "n K", "n H", "h P", "h K", "k J", "k Ch", "n J", "n Ch", "k P",
389 "h J",
390 ];
391 let vowel = ["e", "a", "i", "o", "u", "aa", "ui", "uu", "oa", "ai", "ua"];
392 let end = [
393 "ibalba", "alba", "oztoc", "ictlan", "itlan", "epetl", "opetl", "ocan", "aztlan",
394 "allan", "illan", "atz", "oyoi", "ahau", "azotz", "agual", "acna", "acan", "axtab",
395 "ixtab", "apeku", "ivo", "otec", "oyotl", "oatl", "icue", "aax", "iyalo", "aac",
396 "octli", "ipoca", "aat", "icapan", "irakan", "otzil", "aax", "iyalo", "aac", "octli",
397 "ipoca", "aat", "atec", "aya", "ulkan", "ook", "oox", "akh", "aktun", "iliw", "akal",
398 "ohil", "amna", "ucane", "aize", "itzan", "ontli", "eotl", "olotl",
399 ];
400 self.generate_custom_from_parts(&start, &middle, &vowel, &end)
401 }
402
403 pub fn generate_forest_engl(&mut self) -> String {
404 let start = [
405 "green", "moss", "ever", "briar", "thorn", "oak", "deep", "moon", "star", "sun",
406 "bright", "glare", "fair", "calm", "mistral", "whisper", "clover", "hollow", "spring",
407 "morrow", "dim", "dusk", "dawn", "night", "shimmer", "silver", "gold", "fern", "quiet",
408 "still", "gleam", "wild", "blind", "swift", "gnarl", "flutter", "silent", "honey",
409 "bramble", "rose", "aspen",
410 ];
411 let end = [
412 "root", "bark", "log", "brook", "well", "shire", "leaf", "more", "bole", "heart",
413 "song", "dew", "bough", "path", "wind", "breeze", "light", "branch", "bloom", "vale",
414 "glen", "rest", "shade", "fall", "sward", "shrub", "bush", "grasp", "grip", "gale",
415 "crawl", "run", "shadow", "rise", "glow", "wish", "will", "walk", "wander", "wake",
416 "eye", "blossom", "sprout", "barb",
417 ];
418 self.generate_engl_from_parts(&start, &end)
419 }
420
421 pub fn generate_forest_custom(&mut self) -> String {
422 let start = [
423 "d", "f", "h", "l", "m", "n", "r", "s", "t", "w", "v", "z", "st", "th", "thr", "str",
424 "vr", "wr", "an", "and", "ald", "ath", "as", "all", "amm", "an", "az", "en", "end",
425 "eld", "eldr", "es", "ell", "aldr", "astr", "estr", "on", "ond",
426 ];
427 let middle = [
428 "th", "d", "dr", "sl", "sm", "rw", "rv", "l", "ll", "m", "mm", "n", "nn", "nd", "ndr",
429 "thr", "nth", "ln", "lm", "lz", "nz", "nr", "str", "sth", "ld", "rm", "sd", "rn", "ss",
430 "sn", "lw", "lv", "th", "rw", "nw", "r", "rth", "rz",
431 ];
432 let vowel = ["o", "e", "a", "u", "ae"];
433 let end = [
434 "anir", "enir", "elen", "alen", "ezen", "azen", "yn", "andir", "endir", "ond", "alar",
435 "ales", "eles", "arain", "alain", "anuin", "athuin", "aruin", "yr", "ethuin", "eruin",
436 "athul", "edor", "edes", "edus", "inyr", "eden", "azar", "atiel", "etiel", "etien",
437 "eties", "aties", "aduil", "eduil", "eduin", "aduin", "assil", "iryl", "aryl", "anor",
438 "anes", "en", "es", "ys",
439 ];
440 self.generate_custom_from_parts(&start, &middle, &vowel, &end)
441 }
442
443 pub fn generate_savannah_engl(&mut self) -> String {
444 let start = [
445 "red", "pride", "dry", "copper", "vast", "war", "star", "sun", "bright", "blood",
446 "dawn", "shimmer", "gold", "amber", "gleam", "wild", "rust", "fire", "earth", "spirit",
447 "bronze", "broad", "scorch", "sear", "gold", "rage", "dire", "ghost", "soul",
448 "specter", "scald", "singe", "heat", "torch", "rite", "bone",
449 ];
450 let end = [
451 "dust", "grass", "swarm", "more", "heart", "song", "claw", "fang", "hoof", "foot",
452 "herd", "path", "wind", "breeze", "howl", "sway", "rest", "reach", "flow", "graze",
453 "trail", "sting", "fall", "growl", "mane", "bush", "gale", "run", "field", "glare",
454 "gaze", "wallow", "brew", "rise", "glow", "wade", "wander", "wake", "sky", "roam",
455 "breath", "shard", "scar", "lurk", "hill", "blaze", "fury", "hunt", "prowl", "marl",
456 ];
457 self.generate_engl_from_parts(&start, &end)
458 }
459
460 pub fn generate_savannah_custom(&mut self) -> String {
461 let start = [
462 "b", "d", "nz", "g", "mb", "k", "m", "l", "n", "nt", "ng", "t", "w", "z", "sh", "zw",
463 "gb", "an", "on", "s", "nj", "x", "gb", "mp",
464 ];
465 let middle = [
466 "b", "d", "nz", "g", "mb", "k", "m", "l", "n", "nt", "n", "ng", "t", "w", "z", "qu",
467 "sh", "ngb", "nb", "nd", "np", "gd", "k", "gn", "n", "kt", "nw", "mz", "mp", "md",
468 "kz", "ml", "ns", "j", "y", "nz",
469 ];
470 let vowel = ["e", "a", "i", "o", "u", "ou", "oa", "ai"];
471 let end = [
472 "oko", "apa", "eke", "embe", "okele", "ambi", "oubou", "abwe", "amato", "otho",
473 "iloko", "eloko", "adroa", "ansi", "umba", "ami", "ata", "uluku", "oluku", "ogbo",
474 "odudu", "iwara", "itaka", "anuka", "ukasa", "usisi", "umbe", "anga", "emba", "ambe",
475 "insu", "insi", "igbo", "ebege", "enga", "abali", "engi", "enga", "abali", "anga",
476 "unga", "izazi", "ungulu", "ombe", "ukiti", "izazi", "ombi", "engu", "aberi", "alusi",
477 ];
478 self.generate_custom_from_parts(&start, &middle, &vowel, &end)
479 }
480
481 pub fn generate_taiga_engl(&mut self) -> String {
482 let start = [
483 "green", "blue", "ever", "pale", "needle", "cold", "moon", "star", "chill", "shiver",
484 "bitter", "fair", "calm", "mistral", "whisper", "grey", "hollow", "morrow", "dim",
485 "dusk", "dawn", "night", "shimmer", "silver", "iron", "quill", "grizzle", "quiet",
486 "still", "wild", "blind", "silent", "somber", "sleet", "silent", "sharp", "somber",
487 "sleet", "sharp", "rime", "drizzle", "resin",
488 ];
489 let end = [
490 "root", "bark", "log", "brook", "well", "shire", "more", "bole", "heart", "song",
491 "dew", "bough", "path", "wind", "breeze", "light", "branch", "bloom", "pine", "spruce",
492 "rest", "shade", "fall", "fir", "grasp", "grip", "gale", "hunt", "run", "shadow",
493 "hill", "shadow", "larch", "rise", "bite", "wish", "will", "walk", "wander", "wake",
494 "stone", "howl", "moss",
495 ];
496 self.generate_engl_from_parts(&start, &end)
497 }
498
499 pub fn generate_taiga_custom(&mut self) -> String {
500 let start = [
501 "b", "f", "g", "d", "h", "c", "m", "l", "n", "p", "r", "s", "t", "w", "v", "z", "qu",
502 "br", "bl", "ch", "chr", "dr", "dw", "fr", "fl", "gr", "gw", "pr", "pl", "st", "sl",
503 "str", "sn", "sp", "spr", "sw", "tr", "wr", "ab", "abr", "al", "ald", "as", "ast",
504 "amm", "ach", "adr", "en", "end", "eld", "end", "es", "amr", "on", "ond", "ochr",
505 "orn", "ost", "ord",
506 ];
507 let middle = [
508 "b", "g", "d", "c", "m", "l", "n", "p", "r", "s", "t", "v", "br", "ch", "chr", "dr",
509 "gr", "pr", "st", "sl", "sn", "sp", "sw", "tr", "ghr", "mm", "n", "nn", "nd", "ln",
510 "lm", "nr", "r", "rz", "lz", "ld", "rm", "sd", "rn", "ss", "sm", "rv", "lv",
511 ];
512 let vowel = ["e", "a", "i", "o", "ea", "au"];
513 let end = [
514 "on", "oc", "ic", "oric", "aric", "eric", "elten", "alend", "alan", "aven", "elen",
515 "estin", "ostin", "alic", "elic", "alon", "elon", "arac", "erac", "eden", "elen",
516 "owan", "owen", "iel", "ien", "ing", "olm", "ulm", "ilm", "alm", "elm", "oria", "aria",
517 "eria", "elis", "alis", "amor", "emor", "en", "ard", "erd", "ord", "org", "enara",
518 "aran",
519 ];
520 self.generate_custom_from_parts(&start, &middle, &vowel, &end)
521 }
522
523 pub fn generate_mine(&mut self) -> String {
524 let start = [
525 "d", "f", "h", "l", "m", "n", "r", "s", "t", "w", "v", "z", "st", "th", "thr", "str",
526 "vr", "wr", "an", "and", "ald", "ath", "as", "all", "amm", "an", "az", "en", "end",
527 "eld", "eldr", "es", "ell", "aldr", "astr", "estr", "on", "ond",
528 ];
529 let middle = [
530 "th", "d", "dr", "sl", "sm", "rw", "rv", "l", "ll", "m", "mm", "n", "nn", "nd", "ndr",
531 "thr", "nth", "ln", "lm", "lz", "nz", "nr", "str", "sth", "ld", "rm", "sd", "rn", "ss",
532 "sn", "lw", "lv", "th", "rw", "nw", "r", "rth", "rz",
533 ];
534 let vowel = ["o", "e", "a", "u", "ae"];
535 let end = [
536 "anir", "enir", "elen", "alen", "ezen", "azen", "yn", "andir", "endir", "ond", "alar",
537 "ales", "eles", "arain", "alain", "anuin", "athuin", "aruin", "yr", "ethuin", "eruin",
538 "athul", "edor", "edes", "edus", "inyr", "eden", "azar", "atiel", "etiel", "etien",
539 "eties", "aties", "aduil", "eduil", "eduin", "aduin", "assil", "iryl", "aryl", "anor",
540 "anes", "en", "es", "ys",
541 ];
542 self.generate_custom_from_parts(&start, &middle, &vowel, &end)
543 }
544
545 fn generate_theme_from_parts(
547 &mut self,
548 start: &[&str],
549 middle: &[&str],
550 vowel: &[&str],
551 end: &[&str],
552 ) -> String {
553 let mut name = String::new();
554 name += start.choose(self.rng).unwrap();
555 for _ in 0..self.approx_syllables.saturating_sub(2) {
556 if !vowel.is_empty() {
557 name += vowel.choose(self.rng).unwrap()
558 };
559 if !middle.is_empty() {
560 name += middle.choose(self.rng).unwrap();
561 }
562 }
563 name += end.choose(self.rng).unwrap();
564
565 name.chars()
566 .enumerate()
567 .map(|(i, c)| if i == 0 { c.to_ascii_uppercase() } else { c })
568 .collect()
569 }
570
571 pub fn generate_town(mut self) -> String {
573 let start = [
574 "b", "f", "g", "d", "h", "c", "m", "l", "n", "p", "r", "s", "t", "w", "v", "z", "qu",
575 "br", "bl", "ch", "chr", "dr", "dw", "fr", "fl", "gr", "gw", "pr", "pl", "st", "sl",
576 "str", "sn", "sp", "spr", "sw", "tr", "wr", "ab", "abr", "al", "ald", "as", "ast",
577 "amm", "ach", "adr", "en", "end", "eld", "end", "es", "amr", "on", "ond", "ochr",
578 "orn", "ost", "ord",
579 ];
580 let middle = [
581 "b", "g", "d", "c", "m", "l", "n", "p", "r", "s", "t", "v", "br", "ch", "chr", "dr",
582 "gr", "pr", "st", "sl", "sn", "sp", "sw", "tr", "mm", "n", "nn", "nd", "ln", "lm",
583 "nr", "r", "rz", "lz", "ld", "rm", "sd", "rn", "ss", "sm", "rv", "lv",
584 ];
585 let vowel = ["e", "a", "i", "o", "ea", "au"];
586 let end = [
587 "on", "aton", "enton", "eau", "eaux", "erg", "enberg", "enburg", "oc", "ic", "oric",
588 "aric", "eric", "ach", "aven", "elen", "andam", "endam", "estin", "ostin", "alic",
589 "elic", "alon", "elon", "arac", "erac", "eden", "elen", "owan", "owen", "iel", "ien",
590 "alton", "ing", "iling", "aling", "olm", "ulm", "ough", "ilm", "alm", "elm", "eim",
591 "oria", "aria", "eria", "elis", "alis", "amor", "emor", "en", "edge", "arr", "ard",
592 "erd", "ord", "emberg", "emburg", "org", "alton", "agrad", "ograd", "inton", "imore",
593 "ale",
594 ];
595 self.generate_theme_from_parts(&start, &middle, &vowel, &end)
596 }
597
598 pub fn generate_danari(mut self) -> String {
600 let start = [
601 "d", "ph", "r", "st", "t", "s", "p", "th", "br", "tr", "m", "k", "cr", "phr", "dr",
602 "pl", "ch", "l", "ap", "akr", "ak", "ar", "ath", "asp", "al", "aph", "aphr", "oph",
603 "or", "ok", "on", "od", "oth", "om", "ep", "er", "em", "eph", "eth", "yps", "yph",
604 "ach", "amph", "yp", "ik", "is", "iph", "ith", "pr", "as", "asph", "ps", "b", "n", "z",
605 "x", "kr", "kt", "cht", "chr", "thr", "dr", "pr", "pl", "h", "in", "g", "sph", "kr",
606 "tr", "str", "rk", "st", "n", "r", "ph", "phr", "ch", "x", "d", "l", "kt", "pr", "ll",
607 "pp", "ss", "th", "mm", "s", "t", "g", "mn", "rg", "b", "p", "ps", "kl", "dr", "mp",
608 "sp", "cht", "lph",
609 ];
610 let middle = [
611 "d", "ph", "r", "st", "t", "s", "p", "th", "br", "tr", "m", "k", "cr", "phr", "dr",
612 "pl", "ch", "l", "ap", "akr", "ak", "ar", "ath", "asp", "al", "aph", "aphr", "oph",
613 "or", "ok", "on", "od", "oth", "om", "ep", "er", "em", "eph", "eth", "yps", "yph",
614 "ach", "amph", "yp", "ik", "is", "iph", "ith", "pr", "as", "ps", "b", "n", "z", "x",
615 "kr", "kt", "cht", "chr", "thr", "dr", "pr", "pl", "h", "in", "g", "sph",
616 ];
617 let vowel = [
618 "o", "e", "a", "i", "y", "eo", "ae", "ea", "oi", "io", "ia", "aeo",
619 ];
620 let end = [
621 "ilia", "ilios", "os", "oros", "ophos", "elos", "ethos", "athos", "yros", "a", "ares",
622 "aros", "olis", "ophis", "era", "ara", "ora", "antis", "entis", "ead", "aeon", "on",
623 "eon", "oron", "ena", "is", "as", "eris", "eras", "inis", "aros", "in", "orea", "isis",
624 "okles", "akles", "ilion", "anos", "akos", "akon", "enon", "es", "aros", "ikron",
625 "orea", "area", "ilon", "ilos", "aelos", "yron", "iron", "adalos", "anon", "ix", "ox",
626 "alea", "atheas", "eas", "eos", "yros", "ophon",
627 ];
628 self.generate_theme_from_parts(&start, &middle, &vowel, &end)
629 }
630
631 pub fn generate_gnarling(mut self) -> String {
633 let start = ["gn", "kr", "k", "r", "t", "kn", "tr", "kt", "gr"];
634 let middle = [
635 "t", "tt", "k", "kk", "r", "r", "rl", "lm", "km", "tm", "kn", "kr", "tr", "nk", "gn",
636 "kl", "kt", "lt", "arln", "ln", "k't", "k'n", "k'm", "g'm", "l'k", "t'n", "r'k",
637 "n'kr", "k R", "t K", "rl Gn", "rl K", "k Gn", "t M", "t N", "r K", "r N", "k M",
638 "k T", "rl T", "t Kn", "r Kn",
639 ];
640 let vowel = ["e", "a", "i", "o"];
641 let end = [
642 "arak", "orok", "arok", "orak", "attak", "akarl", "okarl", "atok", "anak", "etak",
643 "orek", "arek", "atik", "arik", "etik", "arlak", "arlek", "otek", "almek", "arlnok",
644 "arlnak", "okorl", "eknok", "ottok", "erlek", "akkat", "okkar", "attor", "ittor",
645 "aktor", "okomor", "imor", "inork", "inor", "amakkor", "ikkor", "amarl", "omarl",
646 "ikkarl", "okkarl", "emekk", "akatak", "okatak",
647 ];
648 self.generate_theme_from_parts(&start, &middle, &vowel, &end)
649 }
650
651 pub fn generate_arabic(mut self) -> String {
653 let start = [
654 "zor", "el", "mas", "yaz", "ra", "boh", "mah", "ah", "lam", "mak", "mol", "wa", "bisk",
655 "moj", "bis", "ay", "sha", "rez", "bakh", "ta", "je", "ki", "mos", "asj", "meh",
656 ];
657 let middle = [
658 "d", "ph", "r", "st", "t", "s", "p", "th", "br", "tr", "m", "k", "cr", "dr", "pl",
659 "ch", "l", "ap", "akr", "ak", "ar", "ath", "asp", "al", "aph", "aphr", "oph", "or",
660 "ok", "on", "od", "om", "ep", "er", "em", "eph", "eth", "yph", "ach", "yp", "ik", "is",
661 "iph", "ith", "pr", "as", "asph", "ps", "b", "n", "z", "x", "kr", "kt", "cht", "chr",
662 "thr", "dr", "pr", "pl", "h", "in", "g",
663 ];
664 let vowel = ["o", "e", "a", "i", "y", "ei", "ai", "io"];
665 let end = [
666 "wad", "tab", "med", "mad", "afa", "man", "oubi", "hir", "baz", "yen", "kh", "ah",
667 "dek", "fir", "ish", "rad", "iri", "am", "if", "van", "rik", "kat", "akan", "ikan",
668 "illah", "ulus", "fard",
669 ];
670 self.generate_theme_from_parts(&start, &middle, &vowel, &end)
671 }
672
673 pub fn generate_haniwa(&mut self) -> String {
675 let start = [
676 "a", "e", "o", "i", "u", "ka", "ki", "ku", "ke", "ko", "sa", "shi", "su", "se", "so",
677 "ta", "chi", "tsu", "te", "to", "na", "ne", "no", "ni", "nu", "ha", "hi", "fu", "he",
678 "ho", "ma", "mi", "mu", "me", "mo", "ra", "ri", "ru", "re", "ro", "wa", "ya", "yu",
679 "yo", "ga", "gi", "gu", "ge", "go", "za", "ji", "zu", "ze", "zo", "da", "de", "do",
680 "jo", "ju", "ja", "sho", "shu", "sha", "kya", "kyu", "kyo", "gya", "gyu", "gyo", "ba",
681 "bi", "bu", "be", "bo", "hya", "hyo", "ryu", "ryo",
682 ];
683 let vowel = [];
684 let middle = [
685 "a", "e", "o", "i", "u", "ka", "ki", "ku", "ke", "ko", "sa", "shi", "su", "se", "so",
686 "ta", "chi", "tsu", "te", "to", "na", "ne", "no", "ni", "nu", "ha", "hi", "fu", "he",
687 "ho", "ma", "mi", "mu", "me", "mo", "ra", "ri", "ru", "re", "ro", "wa", "ya", "yu",
688 "yo", "ga", "gi", "gu", "ge", "go", "za", "ji", "zu", "ze", "zo", "da", "de", "do",
689 "n", "jo", "ju", "ja", "sho", "shu", "sha", "pa", "pi", "pu", "pe", "po",
690 ];
691 let end = [
692 "maru", "mura", "machi", "yama", "da", "do", "don", "den", "fun", "taro", "dachi",
693 "mon", "ta", "yo", "chi", "poko", "gami", "ji", "guchi", "gachi", "goku", "gasha",
694 "do", "to", "saka", "zaru", "nami", "numa", "kichi", "juro", "jo", "keshi", "gara",
695 "goro", "tatsu", "tetsu", "niwa", "mo", "no", "nojo", "hachi", "ichi", "san", "saki",
696 "shima", "tsuchi", "gumo", "toko", "zuchi", "shi", "shiro", "jiro", "sho", "shu",
697 "tsu", "hara", "hama", "naga", "kan", "ken", "hage", "tai", "gyo", "kyo", "zo", "gu",
698 "zaki", "dai", "moto", "me", "saki", "kami", "gata", "date", "kawa", "gawa", "garu",
699 "tami", "yoro", "hiro", "ki", "kai", "gato", "mizu", "gin", "gon", "ppu", "matsu",
700 "yake", "koku", "miya", "zawa", "sen", "shiro", "kuro", "ppo", "kata", "riku", "sha",
701 "ishi", "yoko", "su", "gi", "ko", "hagi", "wa",
702 ];
703 self.generate_theme_from_parts(&start, &middle, &vowel, &end)
704 }
705
706 pub fn generate_terracotta(&mut self) -> String {
708 let start = [
709 "wang", "li", "zhang", "liu", "chen", "yang", "gong", "zhao", "wu", "zhou", "ming",
710 "jin", "xiao", "feng", "ho", "xiang", "yuan", "yu", "chien", "xi", "qin", "dao", "bao",
711 "ping", "qu", "yan", "deng", "ku", "ko", "la", "ge", "fu", "gao", "yong", "wo", "qi",
712 "mo", "gong", "shi", "xing", "xian", "biao", "kai", "bei", "ga", "zhou", "liu", "ba",
713 "fei", "tui", "de", "teng", "shou", "xiong", "diao", "lei", "shan", "shin", "pin",
714 "gin", "gen", "huen", "san", "hong", "long", "kon", "jing", "meng", "mei",
715 ];
716 let middle = [];
717 let vowel = [];
718 let end = [
719 "tian", "shi", "zhong", "xie", "biao", "neng", "zuo", "ze", "zhi", "hao", "pao",
720 "liang", "yong", "chou", "zhou", "peng", "yang", "huang", "bo", "yao", "fu", "xia",
721 "chen", "ling", "jia", "xu", "gou", "ya", "lang", "he", "ho", "nan", "hua", "xue",
722 "ji", "jian", "jiu", "xi", "ling", "dan", "dian", "shin", "gao", "yi", "zuo", "san",
723 "jie", "hua", "jin", "zhi", "zhe", "sing", "zai", "hun", "fen", "nen", "huan", "bian",
724 "cha", "wu", "wei", "jiao", "hu", "he", "bao", "bi",
725 ];
726 self.generate_theme_from_parts(&start, &middle, &vowel, &end)
727 }
728
729 pub fn generate_adlet(mut self) -> String {
731 let start = [
732 "p", "k", "h", "q", "s", "t", "y", "n", "m", "an", "ap", "ang", "am", "at", "arn",
733 "ats", "av", "aj", "in", "ikk", "ig", "im", "iq", "uak", "ual", "uj", "uk", "um", "ul",
734 "unn", "ut", "adl",
735 ];
736 let middle = [
737 "m", "k", "n", "ks", "gl", "ll", "g", "l", "t", "nn", "kt", "tt", "rj", "rl", "ts",
738 "qt", "ng", "gg", "ss", "kk",
739 ];
740 let vowel = ["a", "i", "u", "ia", "ui", "ua", "aa", "uu"];
741 let end = [
742 "uktu", "akut", "ukut", "aakut", "uvit", "avit", "ivit", "anuq", "attiq", "aqtuq",
743 "akka", "ikka", "ipit", "ugit", "agit", "uvusi", "avusi", "ivusi", "aali", "uli",
744 "aluk", "uluk", "alu", "uipit", "unga", "asuna", "uulik", "ivun", "avun", "adlet",
745 "adlit", "anit", "unit", "aluit", "angit", "arluut", "uluut", "araaq", "anait",
746 "uqsuit", "aruq", "ualik", "auti", "aliit", "igiit", "aana", "akkuq", "amali", "igit",
747 "irniq", "aasi", "ashi", "asik", "ukkit", "ajuq", "anook", "ivak", "attiq", "iksik",
748 "aaluk", "anik", "usuuq",
749 ];
750 self.generate_theme_from_parts(&start, &middle, &vowel, &end)
751 }
752
753 pub fn generate_vampire(mut self) -> String {
755 let start = [
756 "al", "ban", "bom", "br", "buc", "cl", "con", "cor", "cr", "dr", "ias", "or", "p",
757 "pit", "pl", "ram", "val", "res", "rom", "sat", "mar", "suc", "tar", "mur", "tim",
758 "vas", "zal",
759 ];
760 let middle = [
761 "d", "r", "st", "t", "s", "p", "br", "tr", "m", "k", "cr", "dr", "pl", "ch", "l", "ap",
762 "ak", "ar", "al", "od", "om", "ep", "er", "em",
763 ];
764 let vowel = ["o", "e", "a", "i", "ea", "au", "oa", "ia"];
765 let end = [
766 "ulia", "icau", "are", "eni", "usov", "uj", "ita", "asi", "edea", "etra", "ira",
767 "asti", "cu", "cea", "ita", "utu", "ire", "iva", "igu", "ares", "ara", "elui", "ilau",
768 ];
769 self.generate_theme_from_parts(&start, &middle, &vowel, &end)
770 }
771
772 pub fn generate_tavern(&mut self) -> String {
773 let adjectives = [
774 "Crazy",
775 "Big",
776 "Tiny",
777 "Slimy",
778 "Warm",
779 "Rigid",
780 "Soft",
781 "Wet",
782 "Humid",
783 "Smelly",
784 "Hidden",
785 "Smart",
786 "Fragile",
787 "Strong",
788 "Weak",
789 "Happy",
790 "Sad",
791 "Glad",
792 "Scared",
793 "Embarrassed",
794 "Goofy",
795 "Spicy",
796 "Salty",
797 "Peaceful",
798 "Awful",
799 "Sweet",
800 "Colossal",
801 "Puzzled",
802 "Cheap",
803 "Valuable",
804 "Rich",
805 "Obnoxious",
806 "Puzzled",
807 "Snoring",
808 "Fast",
809 "Quick",
810 "Magical",
811 "Violet",
812 "Red",
813 "Blue",
814 "Green",
815 "Yellow",
816 "Golden",
817 "Shiny",
818 "Tired",
819 "Twin",
820 "Incompetent",
821 "Light",
822 "Dark",
823 "Glorious",
824 "Best",
825 "Free",
826 "Odd",
827 "Juicy",
828 "Shaking",
829 "Tall",
830 "Short",
831 "Precious",
832 "Regular",
833 "Slow",
834 "Anxious",
835 "Naive",
836 "Sore",
837 "Next",
838 "Silver",
839 "Secret",
840 "Honorable",
841 "Rapid",
842 "Sleepy",
843 "Lying",
844 "Zesty",
845 "Fancy",
846 "Stylish",
847 "Thirsty",
848 "Dry",
849 "Dancing",
850 "Singing",
851 "Drunken",
852 ];
853 let tavern_synonyms = ["Tavern", "Bar", "Pub"];
854 let subjectives = [
855 "Apple",
856 "Pumpkin",
857 "Cucumber",
858 "Squash",
859 "Demons",
860 "Mango",
861 "Coconut",
862 "Cats",
863 "Hill",
864 "Mountain",
865 "Squirrel",
866 "Rabbit",
867 "Moose",
868 "Driggle",
869 "Iron",
870 "Velorite",
871 "Plate",
872 "Eagle",
873 "Birds",
874 "Drumstick",
875 "Dog",
876 "Tiger",
877 "Knight",
878 "Leader",
879 "Huntress",
880 "Hunter",
881 "Dwarf",
882 "Toad",
883 "Clams",
884 "Bell",
885 "Avocado",
886 "Egg",
887 "Spade",
888 "Stream",
889 "Cabbage",
890 "Tomato",
891 "Rapier",
892 "Katana",
893 "Whisper",
894 "Hammer",
895 "Axe",
896 "Sword",
897 "Saurok",
898 "Danari",
899 "Elf",
900 "Human",
901 "Draugr",
902 "Orc",
903 "Pie",
904 "Stick",
905 "Rope",
906 "Knife",
907 "Shield",
908 "Bow",
909 "Spear",
910 "Staff",
911 "Crow",
912 "Crown",
913 "Parrot",
914 "Parrots",
915 "Pelican",
916 "Whale",
917 "Cube",
918 "Minotaur",
919 "Oni",
920 "Monster",
921 ];
922 let kind = self.rng.gen_range(0..10);
923 let mut choose = |slice: &[&'static str]| *slice.choose(self.rng).unwrap();
924 match kind {
925 0 => format!("The {} {}", choose(&adjectives), choose(&tavern_synonyms)),
926 1..=7 => format!("The {} {}", choose(&adjectives), choose(&subjectives)),
927 _ => format!(
928 "The {} {} {}",
929 choose(&adjectives),
930 choose(&subjectives),
931 choose(&tavern_synonyms)
932 ),
933 }
934 }
935}