From 95cdd3b4b97d21838f6847d6dcf8fdcf4ae4dd1f Mon Sep 17 00:00:00 2001 From: FloPinguin <25036848+FloPinguin@users.noreply.github.com> Date: Sat, 21 Mar 2026 22:36:56 +0100 Subject: [PATCH] =?UTF-8?q?More=20random=20nation=20names=20=F0=9F=98=84?= =?UTF-8?q?=20(#3486)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description: Extend NationCreation for a bit more variety :D ## Please complete the following: - [X] I have added screenshots for all UI updates - [X] I process any text displayed to the user through translateText() and I've added it to the en.json file - [X] I have added relevant tests to the test directory - [X] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced ## Please put your Discord username so you can be contacted if a bug or regression is found: FloPinguin --- src/core/game/NationCreation.ts | 335 ++++++++++++++++++++++++++++---- 1 file changed, 302 insertions(+), 33 deletions(-) diff --git a/src/core/game/NationCreation.ts b/src/core/game/NationCreation.ts index 65a1135b4..259ef85c8 100644 --- a/src/core/game/NationCreation.ts +++ b/src/core/game/NationCreation.ts @@ -199,6 +199,60 @@ const NAME_TEMPLATES: NameTemplate[] = [ ["House of", PLURAL_NOUN], ["Certified Organic", NOUN], ["Unregulated", NOUN], + ["Slightly Damp", NOUN], + ["Suspiciously Quiet", PLURAL_NOUN], + ["Weaponized", NOUN], + ["Accidentally Evil", NOUN], + ["Extremely Loud", PLURAL_NOUN], + ["Bootleg", NOUN], + ["Questionable", NOUN], + ["Off-Brand", NOUN], + ["Counterfeit", PLURAL_NOUN], + ["Sentient", PLURAL_NOUN], + ["Feral", PLURAL_NOUN], + ["Aggressively Friendly", PLURAL_NOUN], + ["Mildly Threatening", NOUN], + ["Dangerously Cute", PLURAL_NOUN], + ["Legally Distinct", NOUN], + ["Deeply Confused", PLURAL_NOUN], + ["Order of the", NOUN], + ["Knights of the", NOUN], + ["Cult of the", NOUN], + ["League of", PLURAL_NOUN], + ["Band of", PLURAL_NOUN], + ["Council of", PLURAL_NOUN], + ["Assembly of", PLURAL_NOUN], + ["Haunted", NOUN], + ["Cursed", NOUN], + ["Blessed", NOUN], + ["Radioactive", PLURAL_NOUN], + ["Deep Fried", NOUN], + ["Gluten Free", PLURAL_NOUN], + ["Turbocharged", NOUN], + ["Nomadic", PLURAL_NOUN], + ["Vengeful", PLURAL_NOUN], + ["Legendary", PLURAL_NOUN], + ["Outlaw", PLURAL_NOUN], + ["AFK", NOUN], + ["Noob", NOUN], + ["Pro", NOUN], + ["Tryhard", PLURAL_NOUN], + ["Sweaty", PLURAL_NOUN], + ["Griefing", PLURAL_NOUN], + ["Speedrunning", PLURAL_NOUN], + ["Nerfed", PLURAL_NOUN], + ["Buffed", PLURAL_NOUN], + ["OP", NOUN], + ["Overpowered", NOUN], + ["Underpowered", PLURAL_NOUN], + ["Modded", PLURAL_NOUN], + ["Prestige", NOUN], + ["Hardcore", PLURAL_NOUN], + ["Clutch", NOUN], + ["Cracked", NOUN], + ["Unranked", PLURAL_NOUN], + ["Max Level", NOUN], + ["Ironman", NOUN], [NOUN, "For Hire"], [PLURAL_NOUN, "That Bite"], @@ -224,6 +278,43 @@ const NAME_TEMPLATES: NameTemplate[] = [ [NOUN, "State"], [NOUN, "Duchy"], [NOUN, "Ocean"], + [NOUN, "Syndicate"], + [NOUN, "Republic"], + [NOUN, "Province"], + [NOUN, "Dominion"], + [NOUN, "Commune"], + [NOUN, "Federation"], + [NOUN, "Parliament"], + [NOUN, "Tribunal"], + [NOUN, "Armada"], + [NOUN, "Rebellion"], + [NOUN, "Resistance"], + [NOUN, "Expedition"], + [NOUN, "Preservation Society"], + [NOUN, "Defense League"], + [NOUN, "Thunderdome"], + [NOUN, "Uprising"], + [NOUN, "Enthusiasts"], + [NOUN, "Appreciation Society"], + [NOUN, "Fan Club"], + [NOUN, "Simulation"], + [PLURAL_NOUN, "Anonymous"], + [PLURAL_NOUN, "With Attitude"], + [PLURAL_NOUN, "Gone Wrong"], + [PLURAL_NOUN, "on Vacation"], + [PLURAL_NOUN, "in Disguise"], + [PLURAL_NOUN, "With Hats"], + [PLURAL_NOUN, "on Ice"], + [PLURAL_NOUN, "United"], + [PLURAL_NOUN, "Unhinged"], + [PLURAL_NOUN, "Unleashed"], + [PLURAL_NOUN, "Reloaded"], + [PLURAL_NOUN, "After Dark"], + [PLURAL_NOUN, "From Space"], + [PLURAL_NOUN, "of Doom"], + [PLURAL_NOUN, "Without Borders"], + [NOUN, "Meta"], + [PLURAL_NOUN, "OP Please Nerf"], ["Alternate", NOUN, "Universe"], ["Famous", NOUN, "Collection"], @@ -237,50 +328,39 @@ const NAME_TEMPLATES: NameTemplate[] = [ ["Quantum", NOUN, "Computer"], ["Hadron", NOUN, "Collider"], ["Large", NOUN, "Obliterator"], - ["Interstellar", NOUN, "Cabal"], - ["Interstellar", NOUN, "Army"], ["Interstellar", NOUN, "Pirates"], - ["Interstellar", NOUN, "Dynasty"], - ["Interstellar", NOUN, "Clan"], - ["Galactic", NOUN, "Smugglers"], - ["Galactic", NOUN, "Cabal"], - ["Galactic", NOUN, "Alliance"], - ["Galactic", NOUN, "Empire"], - ["Galactic", NOUN, "Army"], - ["Galactic", NOUN, "Crown"], - ["Galactic", NOUN, "Pirates"], - ["Galactic", NOUN, "Dynasty"], - ["Galactic", NOUN, "Clan"], - ["Alien", NOUN, "Army"], - ["Alien", NOUN, "Cabal"], - ["Alien", NOUN, "Alliance"], - ["Alien", NOUN, "Empire"], - ["Alien", NOUN, "Pirates"], ["Alien", NOUN, "Clan"], - ["Grand", NOUN, "Empire"], - ["Grand", NOUN, "Dynasty"], - ["Grand", NOUN, "Army"], - ["Grand", NOUN, "Cabal"], ["Grand", NOUN, "Alliance"], ["Royal", NOUN, "Army"], - ["Royal", NOUN, "Cabal"], - ["Royal", NOUN, "Empire"], - ["Royal", NOUN, "Dynasty"], - ["Holy", NOUN, "Dynasty"], ["Holy", NOUN, "Empire"], - ["Holy", NOUN, "Alliance"], - ["Eternal", NOUN, "Empire"], ["Eternal", NOUN, "Cabal"], - ["Eternal", NOUN, "Alliance"], - ["Eternal", NOUN, "Dynasty"], - ["Invading", NOUN, "Cabal"], ["Invading", NOUN, "Empire"], - ["Invading", NOUN, "Alliance"], ["Immortal", NOUN, "Pirates"], ["Shadow", NOUN, "Cabal"], ["Secret", NOUN, "Dynasty"], ["The Great", NOUN, "Army"], ["The", NOUN, "Matrix"], + ["Tax-Free", NOUN, "Paradise"], + ["Self-Proclaimed", NOUN, "Experts"], + ["Forbidden", NOUN, "Zone"], + ["Reluctant", NOUN, "Monarchy"], + ["Chaotic", NOUN, "Collective"], + ["Unsanctioned", NOUN, "Olympics"], + ["The", NOUN, "Conspiracy"], + ["The", NOUN, "Incident"], + ["The", NOUN, "Situation"], + ["Premium", NOUN, "Subscription"], + ["Clearance", NOUN, "Warehouse"], + ["Budget", NOUN, "Emporium"], + ["Overnight", NOUN, "Delivery"], + ["National", NOUN, "Reserve"], + ["The", NOUN, "Dimension"], + ["The", NOUN, "Prophecy"], + ["The", NOUN, "Awakening"], + ["The", NOUN, "Inquisition"], + ["Legendary", NOUN, "Drop"], + ["Elite", NOUN, "Squad"], + ["The", NOUN, "Saga"], ]; const NOUNS = [ @@ -350,12 +430,201 @@ const NOUNS = [ "Burger", "Tomato", "Penguin", + "Waffle", + "Toaster", + "Hamster", + "Pretzel", + "Walrus", + "Raccoon", + "Llama", + "Noodle", + "Goblin", + "Muffin", + "Coconut", + "Biscuit", + "Cactus", + "Moose", + "Platypus", + "Yeti", + "Sponge", + "Spatula", + "Trampoline", + "Dolphin", + "Taco", + "Chainsaw", + "Spoon", + "Doorknob", + "Bathrobe", + "Lampshade", + "Crowbar", + "Shoelace", + "Wheelbarrow", + "Barnacle", + "Armadillo", + "Cabbage", + "Wig", + "Plunger", + "Kazoo", + "Napkin", + "Pelican", + "Turnip", + "Canoe", + "Igloo", + "Stapler", + "Ferret", + "Anchovy", + "Dumpling", + "Mattress", + "Parsnip", + "Gargoyle", + "Crayon", + "Corgi", + "Macaroni", + "Blender", + "Ukulele", + "Flamingo", + "Nugget", + "Porcupine", + "Tadpole", + "Papaya", + "Chinchilla", + "Teapot", + "Baguette", + "Squid", + "Otter", + "Badger", + "Hedgehog", + "Mantis", + "Scorpion", + "Vulture", + "Falcon", + "Jackal", + "Hyena", + "Panther", + "Stingray", + "Octopus", + "Basilisk", + "Dragon", + "Sphinx", + "Phoenix", + "Kraken", + "Leviathan", + "Mammoth", + "Chimera", + "Griffin", + "Minotaur", + "Cyclops", + "Brick", + "Anvil", + "Torpedo", + "Lantern", + "Compass", + "Telescope", + "Pendulum", + "Furnace", + "Cauldron", + "Beacon", + "Anchor", + "Dagger", + "Gauntlet", + "Helmet", + "Shield", + "Banner", + "Trumpet", + "Bagpipe", + "Tambourine", + "Accordion", + "Xylophone", + "Avocado", + "Broccoli", + "Radish", + "Artichoke", + "Kumquat", + "Pomegranate", + "Mango", + "Truffle", + "Croissant", + "Lasagna", + "Soufflé", + "Spaghetti", + "Tsunami", + "Tornado", + "Avalanche", + "Volcano", + "Glacier", + "Comet", + "Meteor", + "Nebula", + "Supernova", + "Quasar", + "Abyss", + "Labyrinth", + "Caterpillar", + "Chameleon", + "Narwhal", + "Capybara", + "Pangolin", + "Axolotl", + "Sloth", + "Lemur", + "Alpaca", + "Tapir", + "Wombat", + "Ocelot", + "Manatee", + "Ibis", + "Kiwi", + "Creeper", + "Enderman", + "Skeleton", + "Necromancer", + "Paladin", + "Warlock", + "Ranger", + "Boss", + "NPC", + "Assassin", + "Viking", + "Samurai", + "Pirate", + "Champion", + "Gladiator", + "Demon", + "Angel", + + "Fullsender", + "Fullsender", + "Fullsender", + "Mito", + "Mito", + "Mito", + "Mitochondria", + "Mitochondria", + "Mitochondria", ]; // Words from NOUNS that need irregular "-oes" plural -const O_TO_OES = new Set(["Potato", "Tomato"]); +const O_TO_OES = new Set(["Potato", "Tomato", "Volcano", "Torpedo"]); + +// Words from NOUNS that need special plural forms +const SPECIAL_PLURALS = new Map([ + ["Cactus", "Cacti"], + ["Platypus", "Platypuses"], + ["Moose", "Moose"], + ["Octopus", "Octopi"], + ["Cyclops", "Cyclopes"], + ["Samurai", "Samurai"], + ["Fish", "Fish"], + ["Salmon", "Salmon"], + ["Cod", "Cod"], + ["Enderman", "Endermen"], + ["Mitochondria", "Mitochondria"], +]); function pluralize(noun: string): string { + if (SPECIAL_PLURALS.has(noun)) { + return SPECIAL_PLURALS.get(noun)!; + } if ( noun.endsWith("s") || noun.endsWith("ch") ||