veloren_rtsim/generate/
name.rs

1use rand::prelude::*;
2
3fn generate_alias(rng: &mut impl Rng) -> String {
4    let starts = [
5        "ad", "tr", "b", "l", "p", "d", "r", "w", "t", "fr", "s", "l", "ar", "fl", "ch", "ph",
6        "gr", "sn", "k", "sh", "cr", "cl", "v", "j",
7    ];
8    let vowels = ["o", "e", "a", "i", "oo"];
9    let cons = [
10        "m", "d", "st", "n", "y", "gh", "s", "b", "c", "th", "w", "l", "ph", "sh", "p", "rg", "ld",
11        "hn", "g", "v", "rn",
12    ];
13
14    let mut name = String::new();
15
16    name += starts.choose(rng).unwrap();
17
18    for _ in 0..rng.random_range(1..3) {
19        name += vowels.choose(rng).unwrap();
20        name += cons.choose(rng).unwrap();
21    }
22
23    if rng.random_bool(0.25) {
24        name += vowels.choose(rng).unwrap();
25    }
26
27    // Make the first letter uppercase (hacky)
28    name.chars()
29        .enumerate()
30        .map(|(i, c)| if i == 0 { c.to_ascii_uppercase() } else { c })
31        .collect()
32}
33
34fn generate_adjective(rng: &mut impl Rng) -> &'static str {
35    [
36        "Wise",
37        "Polite",
38        "Annoyed",
39        "Shy",
40        "Ordinary",
41        "Small",
42        "Bitter",
43        "Scary",
44        "Keen",
45        "Quick",
46        "Strange",
47        "Old",
48        "Younger",
49        "Boring",
50        "Bizarre",
51        "Lowly",
52        "Ugly",
53        "Brave",
54        "Strong",
55        "Able",
56        "Wrong",
57        "Anxious",
58        "Incoherent",
59        "Odd",
60        "Uninvited",
61        "Curious",
62        "Thoughtless",
63        "Existant",
64        "Oafish",
65        "Sincere",
66        "Irrelevant",
67        "Exhausted",
68        "Bored",
69    ]
70    .choose(rng)
71    .unwrap()
72}
73
74pub fn generate_npc(rng: &mut impl Rng) -> String {
75    match rng.random_range(0..3) {
76        0 => generate_alias(rng),
77        1 => format!("{} the {}", generate_alias(rng), generate_adjective(rng)),
78        _ => format!("{} {}", generate_adjective(rng), generate_alias(rng)),
79    }
80}