From d5f0ee2fc5d180b5fdf9537d237bcbbcb8ac0f89 Mon Sep 17 00:00:00 2001 From: floppy Date: Sun, 16 Jan 2022 16:40:22 +0100 Subject: [PATCH] create fn generate_biome in namegen --- world/src/civ/mod.rs | 2 +- world/src/site/namegen.rs | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/world/src/civ/mod.rs b/world/src/civ/mod.rs index 76450f204f..5d9b93baa2 100644 --- a/world/src/civ/mod.rs +++ b/world/src/civ/mod.rs @@ -548,7 +548,7 @@ impl Civs { let size_parameter = ((chords[2] + chords[3]) + (chords[0] + chords[1]) / 4) as u32; let lake = PointOfInterest { name: { - let name = NameGen::location(rng).generate(); + let name = NameGen::location(rng).generate_biome(); if size_parameter > 30 { format!("{} Sea", name) } else if (water_alt - alt) < 30 { diff --git a/world/src/site/namegen.rs b/world/src/site/namegen.rs index d9a55a377f..6eb9819fce 100644 --- a/world/src/site/namegen.rs +++ b/world/src/site/namegen.rs @@ -49,4 +49,38 @@ impl<'a, R: Rng> NameGen<'a, R> { .map(|(i, c)| if i == 0 { c.to_ascii_uppercase() } else { c }) .collect() } + + pub fn generate_biome(self) -> String { + let cons = vec![ + "d", "f", "ph", "r", "st", "t", "s", "p", "sh", "th", "br", "tr", "m", "k", "st", "w", + "y", "cr", "fr", "dr", "pl", "wr", "sn", "g", "qu", "l", + ]; + let mut start = cons.clone(); + start.extend(vec![ + "cr", "thr", "str", "br", "iv", "est", "ost", "ing", "kr", "in", "on", "tr", "tw", + "wh", "eld", "ar", "or", "ear", "irr", "mi", "en", "ed", "et", "ow", "fr", "shr", "wr", + "gr", "pr", + ]); + let mut middle = cons.clone(); + middle.extend(vec!["tt"]); + let vowel = vec!["o", "e", "a", "i", "u", "au", "ee", "ow", "ay", "ey", "oe"]; + let end = vec![ + "a", "ia", "ium", "ist", "en", "on", "og", "end", "ind", "ock", "een", "edge", "ed", + "est", "ean", "ead", "eon", "ow", "in", "on", "id", "ir", "or", "in", "en", + ]; + + let mut name = String::new(); + + name += start.choose(self.rng).unwrap(); + for _ in 0..self.approx_syllables.saturating_sub(2) { + name += vowel.choose(self.rng).unwrap(); + name += middle.choose(self.rng).unwrap(); + } + name += end.choose(self.rng).unwrap(); + + name.chars() + .enumerate() + .map(|(i, c)| if i == 0 { c.to_ascii_uppercase() } else { c }) + .collect() + } }