Merge branch 'main' into movablepanes
|
After Width: | Height: | Size: 116 KiB |
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "Tourney1",
|
||||
"nations": [
|
||||
{
|
||||
"coordinates": [177, 510],
|
||||
"name": "Left"
|
||||
},
|
||||
{
|
||||
"coordinates": [847, 511],
|
||||
"name": "Right"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 147 KiB |
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "Tourney2",
|
||||
"nations": [
|
||||
{
|
||||
"coordinates": [339, 987],
|
||||
"name": "South West"
|
||||
},
|
||||
{
|
||||
"coordinates": [1162, 990],
|
||||
"name": "South East"
|
||||
},
|
||||
{
|
||||
"coordinates": [750, 278],
|
||||
"name": "North"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 129 KiB |
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "Tourney3",
|
||||
"nations": [
|
||||
{
|
||||
"coordinates": [437, 410],
|
||||
"name": "North West"
|
||||
},
|
||||
{
|
||||
"coordinates": [1066, 408],
|
||||
"name": "North East"
|
||||
},
|
||||
{
|
||||
"coordinates": [433, 1088],
|
||||
"name": "South West"
|
||||
},
|
||||
{
|
||||
"coordinates": [1068, 1075],
|
||||
"name": "South East"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 148 KiB |
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"name": "Tourney4",
|
||||
"nations": [
|
||||
{
|
||||
"coordinates": [568, 309],
|
||||
"name": "North North West"
|
||||
},
|
||||
{
|
||||
"coordinates": [308, 562],
|
||||
"name": "West North West"
|
||||
},
|
||||
{
|
||||
"coordinates": [945, 303],
|
||||
"name": "North North East"
|
||||
},
|
||||
{
|
||||
"coordinates": [1188, 556],
|
||||
"name": "East North East"
|
||||
},
|
||||
{
|
||||
"coordinates": [1196, 931],
|
||||
"name": "East South East"
|
||||
},
|
||||
{
|
||||
"coordinates": [941, 1178],
|
||||
"name": "South South East"
|
||||
},
|
||||
{
|
||||
"coordinates": [564, 1185],
|
||||
"name": "South South West"
|
||||
},
|
||||
{
|
||||
"coordinates": [315, 927],
|
||||
"name": "West South West"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -68,6 +68,10 @@ var maps = []struct {
|
||||
{Name: "world"},
|
||||
{Name: "lemnos"},
|
||||
{Name: "twolakes"},
|
||||
{Name: "tourney1"},
|
||||
{Name: "tourney2"},
|
||||
{Name: "tourney3"},
|
||||
{Name: "tourney4"},
|
||||
{Name: "thebox"},
|
||||
{Name: "didier"},
|
||||
{Name: "didierfrance"},
|
||||
|
||||
@@ -329,6 +329,10 @@
|
||||
"svalmel": "Svalmel",
|
||||
"manicouagan": "Manicouagan",
|
||||
"lemnos": "Lemnos",
|
||||
"tourney1": "Tourney 2 Teams",
|
||||
"tourney2": "Tourney 3 Teams",
|
||||
"tourney3": "Tourney 4 Teams",
|
||||
"tourney4": "Tourney 8 Teams",
|
||||
"passage": "Passage",
|
||||
"sierpinski": "Sierpinski",
|
||||
"thebox": "The Box",
|
||||
@@ -352,6 +356,7 @@
|
||||
"featured": "Featured",
|
||||
"continental": "Continental",
|
||||
"regional": "Regional",
|
||||
"tournament": "Tournament",
|
||||
"fantasy": "Other",
|
||||
"special": "Special",
|
||||
"arcade": "Arcade"
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"map": {
|
||||
"height": 1500,
|
||||
"num_land_tiles": 984577,
|
||||
"width": 1500
|
||||
},
|
||||
"map16x": {
|
||||
"height": 375,
|
||||
"num_land_tiles": 60237,
|
||||
"width": 375
|
||||
},
|
||||
"map4x": {
|
||||
"height": 750,
|
||||
"num_land_tiles": 244567,
|
||||
"width": 750
|
||||
},
|
||||
"name": "Tourney1",
|
||||
"nations": [
|
||||
{
|
||||
"coordinates": [177, 510],
|
||||
"name": "Left"
|
||||
},
|
||||
{
|
||||
"coordinates": [847, 511],
|
||||
"name": "Right"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.8 KiB |
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"map": {
|
||||
"height": 1500,
|
||||
"num_land_tiles": 1024327,
|
||||
"width": 1500
|
||||
},
|
||||
"map16x": {
|
||||
"height": 375,
|
||||
"num_land_tiles": 62691,
|
||||
"width": 375
|
||||
},
|
||||
"map4x": {
|
||||
"height": 750,
|
||||
"num_land_tiles": 254300,
|
||||
"width": 750
|
||||
},
|
||||
"name": "Tourney2",
|
||||
"nations": [
|
||||
{
|
||||
"coordinates": [339, 987],
|
||||
"name": "South West"
|
||||
},
|
||||
{
|
||||
"coordinates": [1162, 990],
|
||||
"name": "South East"
|
||||
},
|
||||
{
|
||||
"coordinates": [750, 278],
|
||||
"name": "North"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 6.9 KiB |
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"map": {
|
||||
"height": 1500,
|
||||
"num_land_tiles": 1008007,
|
||||
"width": 1500
|
||||
},
|
||||
"map16x": {
|
||||
"height": 375,
|
||||
"num_land_tiles": 61644,
|
||||
"width": 375
|
||||
},
|
||||
"map4x": {
|
||||
"height": 750,
|
||||
"num_land_tiles": 250191,
|
||||
"width": 750
|
||||
},
|
||||
"name": "Tourney3",
|
||||
"nations": [
|
||||
{
|
||||
"coordinates": [437, 410],
|
||||
"name": "North West"
|
||||
},
|
||||
{
|
||||
"coordinates": [1066, 408],
|
||||
"name": "North East"
|
||||
},
|
||||
{
|
||||
"coordinates": [433, 1088],
|
||||
"name": "South West"
|
||||
},
|
||||
{
|
||||
"coordinates": [1068, 1075],
|
||||
"name": "South East"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 6.4 KiB |
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"map": {
|
||||
"height": 1500,
|
||||
"num_land_tiles": 905705,
|
||||
"width": 1500
|
||||
},
|
||||
"map16x": {
|
||||
"height": 375,
|
||||
"num_land_tiles": 54860,
|
||||
"width": 375
|
||||
},
|
||||
"map4x": {
|
||||
"height": 750,
|
||||
"num_land_tiles": 224342,
|
||||
"width": 750
|
||||
},
|
||||
"name": "Tourney4",
|
||||
"nations": [
|
||||
{
|
||||
"coordinates": [568, 309],
|
||||
"name": "North North West"
|
||||
},
|
||||
{
|
||||
"coordinates": [308, 562],
|
||||
"name": "West North West"
|
||||
},
|
||||
{
|
||||
"coordinates": [945, 303],
|
||||
"name": "North North East"
|
||||
},
|
||||
{
|
||||
"coordinates": [1188, 556],
|
||||
"name": "East North East"
|
||||
},
|
||||
{
|
||||
"coordinates": [1196, 931],
|
||||
"name": "East South East"
|
||||
},
|
||||
{
|
||||
"coordinates": [941, 1178],
|
||||
"name": "South South East"
|
||||
},
|
||||
{
|
||||
"coordinates": [564, 1185],
|
||||
"name": "South South West"
|
||||
},
|
||||
{
|
||||
"coordinates": [315, 927],
|
||||
"name": "West South West"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 8.9 KiB |
@@ -120,6 +120,10 @@ export enum GameMapType {
|
||||
Lisbon = "Lisbon",
|
||||
Manicouagan = "Manicouagan",
|
||||
Lemnos = "Lemnos",
|
||||
Tourney1 = "Tourney 2 Teams",
|
||||
Tourney2 = "Tourney 3 Teams",
|
||||
Tourney3 = "Tourney 4 Teams",
|
||||
Tourney4 = "Tourney 8 Teams",
|
||||
Passage = "Passage",
|
||||
Sierpinski = "Sierpinski",
|
||||
TheBox = "The Box",
|
||||
@@ -210,6 +214,12 @@ export const mapCategories: Record<string, GameMapType[]> = {
|
||||
GameMapType.DidierFrance,
|
||||
GameMapType.Sierpinski,
|
||||
],
|
||||
tournament: [
|
||||
GameMapType.Tourney1,
|
||||
GameMapType.Tourney2,
|
||||
GameMapType.Tourney3,
|
||||
GameMapType.Tourney4,
|
||||
],
|
||||
};
|
||||
|
||||
export enum GameType {
|
||||
|
||||
@@ -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") ||
|
||||
|
||||