diff --git a/generator/src/racegroups.rs b/generator/src/racegroups.rs index 9c01a7e..c92c0ba 100644 --- a/generator/src/racegroups.rs +++ b/generator/src/racegroups.rs @@ -2,8 +2,8 @@ use std::collections::HashMap; #[derive(Clone, Debug)] pub struct RaceGroup { - pub name: String, pub races: Vec<&'static str>, + pub name: String, pub anus: String, pub f_breasts: String, pub m_breasts: String, @@ -11,19 +11,17 @@ pub struct RaceGroup { pub m_genitals: String, pub tag: String, pub sex_drive: String, - pub egg_implant: bool, + pub egg_implant: Option, } impl RaceGroup { - fn standard( - species: &'static str, - races: Vec<&'static str>, - tag: &'static str, - sex_drive: &'static str, - breasts: &'static str, - anus: &'static str, - genitals: (&'static str, &'static str) - ) -> Self { + fn standard(races: Vec<&'static str>, + species: &'static str, + tag: &'static str, + sex_drive: &'static str, + breasts: &'static str, + anus: &'static str, + genitals: (&'static str, &'static str)) -> Self { Self { races, name: format!("{}Person", species), @@ -34,18 +32,17 @@ impl RaceGroup { m_genitals: format!("{}Penis", genitals.1), tag: tag.to_string(), sex_drive: sex_drive.to_string(), - egg_implant: false, + egg_implant: None, } } - fn standard_animal( - species: &'static str, - races: Vec<&'static str>, - tag: &'static str, - sex_drive: &'static str, - breasts: &'static str, - anus: &'static str, - genitals: (&'static str, &'static str) - ) -> Self { + fn standard_animal(races: Vec<&'static str>, + species: &'static str, + tag: &'static str, + sex_drive: &'static str, + egg_implant: Option, + breasts: &'static str, + anus: &'static str, + genitals: (&'static str, &'static str)) -> Self { Self { races, name: format!("{}Animal", species), @@ -56,7 +53,7 @@ impl RaceGroup { m_genitals: format!("{}Penis", genitals.1), tag: tag.to_string(), sex_drive: sex_drive.to_string(), - egg_implant: false, + egg_implant, } } } @@ -77,8 +74,13 @@ pub fn construct_racegroup(group: &RaceGroup) -> String { races.push_str(&format!("\n\t\t\t
  • {race}
  • ")); } let fields = match group.egg_implant { - true => "true\n\t\ttrue\n\t\t".to_string(), - false => String::new() + Some(imp) => { + match imp { + true => "true\n\t\ttrue\n\t\t".to_string(), + false => "true\n\t\t".to_string(), + } + }, + None => String::new() }; let replace = HashMap::from([ ("{name}", group.name.clone()), @@ -115,7 +117,6 @@ const RACEGROUP_STRING: &'static str = " pub fn racegroup_data_humans() -> Vec { vec![ RaceGroup::standard( - "Human", vec![ "AA_Mime", "Alien_Goblin", @@ -160,13 +161,13 @@ pub fn racegroup_data_humans() -> Vec { "Ooka_Miko", "TrollRace", ], + "Human", "Skin", "1", "Breasts", "", ("", ""), ), RaceGroup::standard( - "Arthropod", vec![ "Alien_Beetle", "Alien_Mantis", @@ -177,35 +178,35 @@ pub fn racegroup_data_humans() -> Vec { "Races_BlackWidow", "Yokai_JorouGumo", ], + "Arthropod", "Chitin", "0.8", "Breasts", "Insect", ("Ovipore", "Aedeagus"), ), RaceGroup::standard( - "Avian", vec![ "ATK_Avianmorph", "Harpy", ], + "Avian", "Feathers", "0.9", "FeaturelessChest", "Cloacal", ("Cloacal", "Cloacal"), ), RaceGroup::standard( - "Bear", vec![ "WoW_Pandaren", "BearMan", ], + "Bear", "Fur", "0.9", "Breasts", "", ("", "Bear"), ), RaceGroup::standard( - "Canine", vec![ "ATK_Caninemorph", "WoW_Worgen", @@ -214,6 +215,7 @@ pub fn racegroup_data_humans() -> Vec { "siro", "WolfMan", ], + "Canine", "Fur", "1", "Breasts", "", @@ -221,7 +223,6 @@ pub fn racegroup_data_humans() -> Vec { ), // For foxes, hyenas, werewolves, etc (hyenas are felines oops) RaceGroup::standard( - "CanineHighSex", vec![ "ATK_Gnollmorph", "ATK_Vulpinemorph", @@ -233,25 +234,25 @@ pub fn racegroup_data_humans() -> Vec { "Yokai_NineTailWhite", "FoxMan", ], + "CanineHighSex", "Fur", "1.3", "Breasts", "", ("Dog", "Dog"), ), RaceGroup::standard( - "Crocodilian", vec![ "Alien_Argonian", "SSD_DeathclawRace", "Races_Lizardman", ], + "Crocodilian", "Scales", "0.9", "ScaleBreasts", "Cloacal", ("Cloacal", "Crocodilian"), ), RaceGroup::standard( - "Deer", vec![ "ATK_Cervinemorph", "CamelMan", @@ -260,24 +261,24 @@ pub fn racegroup_data_humans() -> Vec { "GazelleMan", "Lliscean", ], + "Deer", "Fur", "1", "Breasts", "", ("Narrow", "Needle"), ), RaceGroup::standard( - "Dino", vec![ "Raptor", "Tyrannosaur", ], + "Dino", "Scales", "0.9", "ScaleBreasts", "Cloacal", ("Cloacal", "Dino"), ), RaceGroup::standard( - "Dragon", vec![ "ATK_Dragomorph", "WMH_Basilisk", @@ -298,35 +299,35 @@ pub fn racegroup_data_humans() -> Vec { "ALapelli", "yuki", ], + "Dragon", "Scales", "1.2", "ScaleBreasts", "Cloacal", ("Cloacal", "Dragon") ), RaceGroup::standard( - "Elephant", vec![ "ElephantMan", ], + "Elephant", "Fur", "1", "Breasts", "", ("Elephant", "Elephant"), ), RaceGroup::standard( - "FoxGirl", vec![ "Alien_Hisa", "kon", "Vulpes", ], + "FoxGirl", "Fur", "1.3", "Petite_FoxGirl_Breasts", "Petite_FoxGirl_", ("Petite_FoxGirl_", ""), ), RaceGroup::standard( - "Elf", vec![ "AS_WHE_Race", "Alien_Astoriel", @@ -357,13 +358,13 @@ pub fn racegroup_data_humans() -> Vec { "WoW_NightElf", "ElfRace", ], + "Elf", "Skin", "1.1", "Breasts", "Elf", ("Elf", "Elf"), ), RaceGroup::standard( - "Feline", vec![ "Alien_Nyaron", "ATK_Felinemorph", @@ -378,13 +379,13 @@ pub fn racegroup_data_humans() -> Vec { "Maidnukos", "miko", ], + "Feline", "Fur", "1", "Breasts", "Feline", ("Cat", "Cat"), ), RaceGroup::standard( - "Fish", vec![ "Alien_NiHal", "Alien_Quarren", @@ -405,13 +406,13 @@ pub fn racegroup_data_humans() -> Vec { "PW_Staryu", "IkquanRace", ], + "Fish", "Scales", "0.8", "FeaturelessChest", "Cloacal", ("Cloacal", "Marine"), ), RaceGroup::standard( - "Ghost", vec![ "DRSKT_Race", "HPLovecraft_MistCreature", @@ -422,34 +423,34 @@ pub fn racegroup_data_humans() -> Vec { "PW_Misdreavus", "WoW_Skeleton", ], + "Ghost", "Demon", "0.5", "GhostBreasts", "Ghost", ("Ghost", "Ghost"), ), RaceGroup::standard( - "Ghoul", vec![ "Ghoul", "GlowingGhoul", ], + "Ghoul", "Demon", "0.5", "GhoulBreasts", "Ghoul", ("Ghoul", "Ghoul"), ), RaceGroup::standard( - "Horny", vec![ "Alien_Kijin", ], + "Horny", "Skin", "1.4", "Horny_Breasts", "", ("Horny_", "Horny_"), ), RaceGroup::standard( - "Orc", vec![ "Alien_Orc", "O21_Alien_Orc", @@ -466,13 +467,13 @@ pub fn racegroup_data_humans() -> Vec { "OG_Alien_Grot", "WoW_Orc", ], + "Orc", "Skin", "1.3", "OrcBreasts", "Orc", ("Orc", "Orc"), ), RaceGroup::standard( - "Horse", vec![ "Alien_Bullgor", "Alien_Equium", @@ -485,34 +486,34 @@ pub fn racegroup_data_humans() -> Vec { "Alien_ZPEquium", "WoW_Draenei", ], + "Horse", "Fur", "1.2", "Breasts", "Horse", ("Horse", "Horse"), ), RaceGroup::standard( - "Pig", vec![ "PigMan", ], + "Pig", "Fur", "1", "Breasts", "", ("Pig", "Pig"), ), RaceGroup::standard( - "Raccoon", vec![ "RaccoonMan", "StarWarsRaces_Ewok", ], + "Raccoon", "Fur", "1.1", "Breasts", "", ("", "Raccoon"), ), RaceGroup::standard( - "Reptile", vec![ "O21_Alien_Kobold", "O21_FR_Kobold", @@ -522,13 +523,13 @@ pub fn racegroup_data_humans() -> Vec { "Yokai_Samia", "Naga", ], + "Reptile", "Scales", "0.9", "ScaleBreasts", "Cloacal", ("Cloacal", "Hemi"), ), RaceGroup::standard( - "Rodent", vec![ "ATK_Lagomorph", "Alien_Skaven", @@ -543,23 +544,23 @@ pub fn racegroup_data_humans() -> Vec { "Rotti", "Rabbie", ], + "Rodent", "Fur", "1.3", "Petite_Breasts", "Petite_", ("Rodent", "Rodent"), ), RaceGroup::standard( - "Thrumbo", vec![ "Thrumkin", ], + "Thrumbo", "Fur", "1.2", "Breasts", "Cloacal", ("Cloacal", "Dragon") ), RaceGroup::standard( - "Tree", vec![ "Alien_Dryad", "Alien_DryadWild", @@ -585,6 +586,7 @@ pub fn racegroup_data_humans() -> Vec { "PW_Vileplume", "PW_Weepinbell", ], + "Tree", "Plant", "1", "TreeBreasts", "Tree", @@ -609,7 +611,7 @@ pub fn racegroup_data_humans() -> Vec { m_genitals: "BovinePenis".to_string(), tag: "Fur".to_string(), sex_drive: "1".to_string(), - egg_implant: false, + egg_implant: None, }, RaceGroup { races: vec![ @@ -632,7 +634,7 @@ pub fn racegroup_data_humans() -> Vec { m_genitals: "SlimeTentacles".to_string(), tag: "Slime".to_string(), sex_drive: "1".to_string(), - egg_implant: false, + egg_implant: None, }, ] } @@ -640,7 +642,6 @@ pub fn racegroup_data_humans() -> Vec { pub fn racegroup_data_animals() -> Vec { vec![ RaceGroup::standard_animal( - "GenericMammal", vec![ "Megasloth", "ACPRedPanda", @@ -649,13 +650,13 @@ pub fn racegroup_data_animals() -> Vec { "Yokai_IssunAnimal", "Andrewsarchus", ], - "Fur", "1", + "GenericMammal", + "Fur", "1", None, "MammalBreasts", "Mammal", ("Mammal", "Mammal"), ), RaceGroup::standard_animal( - "Ape", vec![ "Monkey", "AEXP_Gorilla", @@ -672,14 +673,14 @@ pub fn racegroup_data_animals() -> Vec { "Dinopithecus", "Gigantopithecus", ], - "Fur", "1.1", + "Ape", + "Fur", "1.1", None, "MammalBreasts", "Mammal", ("Mammal", "Monkey"), ), // Arthropods that have aedeagi and ovipores, and reproduce via spermatophores and egg-laying RaceGroup::standard_animal( - "Arthropod", vec![ "AA_AngelMoth", "AA_Atispec", @@ -721,13 +722,13 @@ pub fn racegroup_data_animals() -> Vec { "Arthropleura", "Pulmonoscorpius", ], - "Chitin", "0.7", + "Arthropod", + "Chitin", "0.7", Some(false), "", "Insect", ("Ovipore", "Aedeagus"), ), RaceGroup::standard_animal( - "Avian", vec![ "Cassowary", "Chicken", @@ -798,13 +799,13 @@ pub fn racegroup_data_animals() -> Vec { "Palaeeudyptes", "Titanis", ], - "Feathers", "0.8", + "Avian", + "Feathers", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Cloacal"), ), RaceGroup::standard_animal( - "Canine", vec![ "Fox_Arctic", "Fox_Fennec", @@ -874,24 +875,24 @@ pub fn racegroup_data_animals() -> Vec { "Omnicron", "Fuzztino", ], - "Fur", "1", + "Canine", + "Fur", "1", None, "MammalBreasts", "Dog", ("Dog", "Dog"), ), RaceGroup::standard_animal( - "CanineSkin", vec![ "AA_RipperHound", ], - "Skin", "0.9", + "CanineSkin", + "Skin", "0.9", None, "MammalBreasts", "Dog", ("Dog", "Dog"), ), // Most even-toed ungulates go here, obviously excluding cetaceans RaceGroup::standard_animal( - "Cervine", vec![ "Alpaca", "Deer", @@ -905,13 +906,13 @@ pub fn racegroup_data_animals() -> Vec { "PW_Stantler", "RG-WF_WastelandDeer", ], - "Fur", "1", + "Cervine", + "Fur", "1", None, "MammalBreasts", "Mammal", ("Narrow", "Needle"), ), RaceGroup::standard_animal( - "Crocodilian", vec![ "AA_RoughPlatedMonitor", "AEXP_Alligator", @@ -922,13 +923,13 @@ pub fn racegroup_data_animals() -> Vec { "Quinkana", "Purussaurus", ], - "Scales", "0.8", + "Crocodilian", + "Scales", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Crocodilian"), ), RaceGroup::standard_animal( - "DinoFeathered", vec![ "AA_PedigreedRaptor", "PW_Aerodactyl", @@ -940,13 +941,13 @@ pub fn racegroup_data_animals() -> Vec { "Velociraptor", "Yutyrannus", ], - "Feathers", "1", + "DinoFeathered", + "Feathers", "1", Some(false), "", "Cloacal", ("Cloacal", "Dino"), ), RaceGroup::standard_animal( - "DinoScaled", vec![ "PW_Cubone", "PW_Marowak", @@ -980,13 +981,13 @@ pub fn racegroup_data_animals() -> Vec { "TyrannosaurusRex", "Utahraptor", ], - "Scales", "1", + "DinoScaled", + "Scales", "1", Some(false), "", "Cloacal", ("Cloacal", "Dino"), ), RaceGroup::standard_animal( - "Dragon", vec![ "AA_Behemoth", "AA_DecayDrake", @@ -1016,13 +1017,13 @@ pub fn racegroup_data_animals() -> Vec { "Mystogen", "Voltaic", ], - "Scales", "1.2", + "Dragon", + "Scales", "1.2", Some(false), "", "Cloacal", ("Cloacal", "Dragon"), ), RaceGroup::standard_animal( - "Elephant", vec![ "Elephant", "AA_Gallatross", @@ -1042,13 +1043,13 @@ pub fn racegroup_data_animals() -> Vec { "WoollyMammoth", "Zygolophodon", ], - "Fur", "0.9", + "Elephant", + "Fur", "0.9", None, "MammalBreasts", "Mammal", ("Elephant", "Elephant"), ), RaceGroup::standard_animal( - "Feline", vec![ "Cat", "Cougar", @@ -1103,24 +1104,24 @@ pub fn racegroup_data_animals() -> Vec { "Smilodon", "Snow_leopard", ], - "Fur", "1", + "Feline", + "Fur", "1", None, "CatBreasts", "Feline", ("Cat", "Cat"), ), RaceGroup::standard_animal( - "FelineHorny", vec![ "AEXP_Hyena", ], - "Fur", "1.3", + "FelineHorny", + "Fur", "1.3", None, "CatBreasts", "Feline", ("Cat", "Cat"), ), // Rhinos belong here, not with elephants, as they are odd-toed ungulates RaceGroup::standard_animal( - "Horse", vec![ "Donkey", "Horse", @@ -1158,14 +1159,14 @@ pub fn racegroup_data_animals() -> Vec { "Paraceratherium", "Uintatherium", ], - "Fur", "1", + "Horse", + "Fur", "1", None, "MammalBreasts", "Horse", ("Horse", "Horse"), ), // I know hippos are more closely related to other artiodactyls than to pinnipeds, but their genitalia are strikingly similar due to convergent evolution RaceGroup::standard_animal( - "MarineMammal", vec![ "ACPSpottedSeal", "ACPWalrus", @@ -1178,25 +1179,25 @@ pub fn racegroup_data_animals() -> Vec { "PW_Seel", "Gomphotaria", ], - "Fur", "0.9", + "MarineMammal", + "Fur", "0.9", None, "MammalBreasts", "Mammal", ("Mammal", "Marine"), ), RaceGroup::standard_animal( - "Marsupial", vec![ "AEXP_Kangaroo", "Procoptodon", ], - "Fur", "1", + "Marsupial", + "Fur", "1", None, "MammalBreasts", "Cloacal", ("Cloacal", "Cloacal"), ), // Marsupials with a bifurcated penis: All except kangaroos and marsupial moles RaceGroup::standard_animal( - "MarsupialBi", vec![ "AEXP_Koala", "AEXP_TasmanianDevil", @@ -1204,27 +1205,27 @@ pub fn racegroup_data_animals() -> Vec { "PW_Dugtrio", "Diprotodon", ], - "Fur", "1", + "MarsupialBi", + "Fur", "1", None, "MammalBreasts", "Cloacal", ("Cloacal", "Hemi"), ), // TODO: Should be single gender RaceGroup::standard_animal( - "Orc", vec![ "OG_Squig", "OG_Squig_Eatin", "OG_Squig_Oily", "OG_Snotling", ], - "Skin", "1", + "Orc", + "Skin", "1", None, "MammalBreasts", "Orc", ("Orc", "Orc"), ), RaceGroup::standard_animal( - "Pig", vec![ "Pig", "WildBoar", @@ -1242,25 +1243,25 @@ pub fn racegroup_data_animals() -> Vec { "MM_ErymanthianBoar", "Daeodon", ], - "Fur", "1", + "Pig", + "Fur", "1", None, "MammalBreasts", "Mammal", ("Pig", "Pig"), ), RaceGroup::standard_animal( - "Platypus", vec![ "ACPDuckBilledPlatypus", "AEXP_Platypus", ], - "Fur", "0.9", + "Platypus", + "Fur", "0.9", Some(false), "MammalBreasts", "Cloacal", ("Cloacal", "Cloacal"), ), // Mustelids RaceGroup::standard_animal( - "Raccoon", vec![ "Raccoon", "ACPMegaFerret", @@ -1277,13 +1278,13 @@ pub fn racegroup_data_animals() -> Vec { "PW_Sneasel", "Enhydriodon", ], - "Fur", "1", + "Raccoon", + "Fur", "1", None, "MammalBreasts", "Mammal", ("Mammal", "Raccoon"), ), RaceGroup::standard_animal( - "Reptile", vec![ "Cobra", "Iguana", @@ -1320,14 +1321,14 @@ pub fn racegroup_data_animals() -> Vec { "Rakk", "Titanoboa", ], - "Scales", "0.8", + "Reptile", + "Scales", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Hemi"), ), // Rodents and Lagomorphs RaceGroup::standard_animal( - "Rodent", vec![ "Alphabeaver", "Boomrat", @@ -1397,13 +1398,13 @@ pub fn racegroup_data_animals() -> Vec { "Josephoartigasia", "Pika", ], - "Fur", "1.1", + "Rodent", + "Fur", "1.1", None, "MammalBreasts", "Mammal", ("Mammal", "Rodent"), ), RaceGroup::standard_animal( - "Tentacle", vec![ "AA_Helixien", "AA_Plasmorph", @@ -1413,13 +1414,13 @@ pub fn racegroup_data_animals() -> Vec { "PW_Tentacool", "PW_Tentacruel", ], - "Slime", "0.8", + "Tentacle", + "Slime", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Tentacle"), ), RaceGroup::standard_animal( - "Thrumbo", vec![ "Thrumbo", "GR_Thrumbear", @@ -1437,13 +1438,13 @@ pub fn racegroup_data_animals() -> Vec { "Archothrumbo", "RoyalThrumbo", ], - "Fur", "1", + "Thrumbo", + "Fur", "1", None, "MammalBreasts", "Cloacal", ("Cloacal", "Dragon"), ), RaceGroup::standard_animal( - "Turtle", vec![ "Tortoise", "AEXP_DesertTortoise", @@ -1455,13 +1456,13 @@ pub fn racegroup_data_animals() -> Vec { "Archotortoise", "Megalochelys", ], - "Scales", "0.8", + "Turtle", + "Scales", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Turtle"), ), RaceGroup::standard_animal( - "Ursine", vec![ "Bear", "Bear_Grizzly", @@ -1486,18 +1487,19 @@ pub fn racegroup_data_animals() -> Vec { "AnimaBear", "ShortfacedBear", ], - "Fur", "1", + "Ursine", + "Fur", "1", None, "MammalBreasts", "Mammal", ("Mammal", "Bear"), ), // AA RaceGroup::standard_animal( - "AA_SandProwler", vec![ "AA_SandProwler", ], - "Scales", "1", + "AA_SandProwler", + "Scales", "1", None, "CatBreasts", "Feline", ("Cat", "Cat"), @@ -1602,7 +1604,7 @@ pub fn racegroup_data_animals() -> Vec { m_genitals: "BovinePenis".to_string(), tag: "Fur".to_string(), sex_drive: "1".to_string(), - egg_implant: false, + egg_implant: None, }, // Arthropods that reproduce through oviposition RaceGroup { @@ -1655,7 +1657,7 @@ pub fn racegroup_data_animals() -> Vec { m_genitals: "OvipositorM".to_string(), tag: "Chitin".to_string(), sex_drive: "1".to_string(), - egg_implant: true, + egg_implant: Some(true), }, RaceGroup { races: vec![ @@ -1670,7 +1672,7 @@ pub fn racegroup_data_animals() -> Vec { m_genitals: "OvipositorM".to_string(), tag: "Chitin".to_string(), sex_drive: "1.5".to_string(), - egg_implant: true, + egg_implant: Some(true), }, ] } \ No newline at end of file