diff --git a/generator/src/racegroups.rs b/generator/src/racegroups.rs index c92c0ba..9c01a7e 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 races: Vec<&'static str>, pub name: String, + pub races: Vec<&'static str>, pub anus: String, pub f_breasts: String, pub m_breasts: String, @@ -11,17 +11,19 @@ pub struct RaceGroup { pub m_genitals: String, pub tag: String, pub sex_drive: String, - pub egg_implant: Option, + pub egg_implant: bool, } impl RaceGroup { - 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 { + 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 { Self { races, name: format!("{}Person", species), @@ -32,17 +34,18 @@ impl RaceGroup { m_genitals: format!("{}Penis", genitals.1), tag: tag.to_string(), sex_drive: sex_drive.to_string(), - egg_implant: None, + egg_implant: false, } } - 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 { + 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 { Self { races, name: format!("{}Animal", species), @@ -53,7 +56,7 @@ impl RaceGroup { m_genitals: format!("{}Penis", genitals.1), tag: tag.to_string(), sex_drive: sex_drive.to_string(), - egg_implant, + egg_implant: false, } } } @@ -74,13 +77,8 @@ pub fn construct_racegroup(group: &RaceGroup) -> String { races.push_str(&format!("\n\t\t\t
  • {race}
  • ")); } let fields = match group.egg_implant { - Some(imp) => { - match imp { - true => "true\n\t\ttrue\n\t\t".to_string(), - false => "true\n\t\t".to_string(), - } - }, - None => String::new() + true => "true\n\t\ttrue\n\t\t".to_string(), + false => String::new() }; let replace = HashMap::from([ ("{name}", group.name.clone()), @@ -117,6 +115,7 @@ const RACEGROUP_STRING: &'static str = " pub fn racegroup_data_humans() -> Vec { vec![ RaceGroup::standard( + "Human", vec![ "AA_Mime", "Alien_Goblin", @@ -161,13 +160,13 @@ pub fn racegroup_data_humans() -> Vec { "Ooka_Miko", "TrollRace", ], - "Human", "Skin", "1", "Breasts", "", ("", ""), ), RaceGroup::standard( + "Arthropod", vec![ "Alien_Beetle", "Alien_Mantis", @@ -178,35 +177,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", @@ -215,7 +214,6 @@ pub fn racegroup_data_humans() -> Vec { "siro", "WolfMan", ], - "Canine", "Fur", "1", "Breasts", "", @@ -223,6 +221,7 @@ pub fn racegroup_data_humans() -> Vec { ), // For foxes, hyenas, werewolves, etc (hyenas are felines oops) RaceGroup::standard( + "CanineHighSex", vec![ "ATK_Gnollmorph", "ATK_Vulpinemorph", @@ -234,25 +233,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", @@ -261,24 +260,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", @@ -299,35 +298,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", @@ -358,13 +357,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", @@ -379,13 +378,13 @@ pub fn racegroup_data_humans() -> Vec { "Maidnukos", "miko", ], - "Feline", "Fur", "1", "Breasts", "Feline", ("Cat", "Cat"), ), RaceGroup::standard( + "Fish", vec![ "Alien_NiHal", "Alien_Quarren", @@ -406,13 +405,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", @@ -423,34 +422,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", @@ -467,13 +466,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", @@ -486,34 +485,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", @@ -523,13 +522,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", @@ -544,23 +543,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", @@ -586,7 +585,6 @@ pub fn racegroup_data_humans() -> Vec { "PW_Vileplume", "PW_Weepinbell", ], - "Tree", "Plant", "1", "TreeBreasts", "Tree", @@ -611,7 +609,7 @@ pub fn racegroup_data_humans() -> Vec { m_genitals: "BovinePenis".to_string(), tag: "Fur".to_string(), sex_drive: "1".to_string(), - egg_implant: None, + egg_implant: false, }, RaceGroup { races: vec![ @@ -634,7 +632,7 @@ pub fn racegroup_data_humans() -> Vec { m_genitals: "SlimeTentacles".to_string(), tag: "Slime".to_string(), sex_drive: "1".to_string(), - egg_implant: None, + egg_implant: false, }, ] } @@ -642,6 +640,7 @@ pub fn racegroup_data_humans() -> Vec { pub fn racegroup_data_animals() -> Vec { vec![ RaceGroup::standard_animal( + "GenericMammal", vec![ "Megasloth", "ACPRedPanda", @@ -650,13 +649,13 @@ pub fn racegroup_data_animals() -> Vec { "Yokai_IssunAnimal", "Andrewsarchus", ], - "GenericMammal", - "Fur", "1", None, + "Fur", "1", "MammalBreasts", "Mammal", ("Mammal", "Mammal"), ), RaceGroup::standard_animal( + "Ape", vec![ "Monkey", "AEXP_Gorilla", @@ -673,14 +672,14 @@ pub fn racegroup_data_animals() -> Vec { "Dinopithecus", "Gigantopithecus", ], - "Ape", - "Fur", "1.1", None, + "Fur", "1.1", "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", @@ -722,13 +721,13 @@ pub fn racegroup_data_animals() -> Vec { "Arthropleura", "Pulmonoscorpius", ], - "Arthropod", - "Chitin", "0.7", Some(false), + "Chitin", "0.7", "", "Insect", ("Ovipore", "Aedeagus"), ), RaceGroup::standard_animal( + "Avian", vec![ "Cassowary", "Chicken", @@ -799,13 +798,13 @@ pub fn racegroup_data_animals() -> Vec { "Palaeeudyptes", "Titanis", ], - "Avian", - "Feathers", "0.8", Some(false), + "Feathers", "0.8", "", "Cloacal", ("Cloacal", "Cloacal"), ), RaceGroup::standard_animal( + "Canine", vec![ "Fox_Arctic", "Fox_Fennec", @@ -875,24 +874,24 @@ pub fn racegroup_data_animals() -> Vec { "Omnicron", "Fuzztino", ], - "Canine", - "Fur", "1", None, + "Fur", "1", "MammalBreasts", "Dog", ("Dog", "Dog"), ), RaceGroup::standard_animal( + "CanineSkin", vec![ "AA_RipperHound", ], - "CanineSkin", - "Skin", "0.9", None, + "Skin", "0.9", "MammalBreasts", "Dog", ("Dog", "Dog"), ), // Most even-toed ungulates go here, obviously excluding cetaceans RaceGroup::standard_animal( + "Cervine", vec![ "Alpaca", "Deer", @@ -906,13 +905,13 @@ pub fn racegroup_data_animals() -> Vec { "PW_Stantler", "RG-WF_WastelandDeer", ], - "Cervine", - "Fur", "1", None, + "Fur", "1", "MammalBreasts", "Mammal", ("Narrow", "Needle"), ), RaceGroup::standard_animal( + "Crocodilian", vec![ "AA_RoughPlatedMonitor", "AEXP_Alligator", @@ -923,13 +922,13 @@ pub fn racegroup_data_animals() -> Vec { "Quinkana", "Purussaurus", ], - "Crocodilian", - "Scales", "0.8", Some(false), + "Scales", "0.8", "", "Cloacal", ("Cloacal", "Crocodilian"), ), RaceGroup::standard_animal( + "DinoFeathered", vec![ "AA_PedigreedRaptor", "PW_Aerodactyl", @@ -941,13 +940,13 @@ pub fn racegroup_data_animals() -> Vec { "Velociraptor", "Yutyrannus", ], - "DinoFeathered", - "Feathers", "1", Some(false), + "Feathers", "1", "", "Cloacal", ("Cloacal", "Dino"), ), RaceGroup::standard_animal( + "DinoScaled", vec![ "PW_Cubone", "PW_Marowak", @@ -981,13 +980,13 @@ pub fn racegroup_data_animals() -> Vec { "TyrannosaurusRex", "Utahraptor", ], - "DinoScaled", - "Scales", "1", Some(false), + "Scales", "1", "", "Cloacal", ("Cloacal", "Dino"), ), RaceGroup::standard_animal( + "Dragon", vec![ "AA_Behemoth", "AA_DecayDrake", @@ -1017,13 +1016,13 @@ pub fn racegroup_data_animals() -> Vec { "Mystogen", "Voltaic", ], - "Dragon", - "Scales", "1.2", Some(false), + "Scales", "1.2", "", "Cloacal", ("Cloacal", "Dragon"), ), RaceGroup::standard_animal( + "Elephant", vec![ "Elephant", "AA_Gallatross", @@ -1043,13 +1042,13 @@ pub fn racegroup_data_animals() -> Vec { "WoollyMammoth", "Zygolophodon", ], - "Elephant", - "Fur", "0.9", None, + "Fur", "0.9", "MammalBreasts", "Mammal", ("Elephant", "Elephant"), ), RaceGroup::standard_animal( + "Feline", vec![ "Cat", "Cougar", @@ -1104,24 +1103,24 @@ pub fn racegroup_data_animals() -> Vec { "Smilodon", "Snow_leopard", ], - "Feline", - "Fur", "1", None, + "Fur", "1", "CatBreasts", "Feline", ("Cat", "Cat"), ), RaceGroup::standard_animal( + "FelineHorny", vec![ "AEXP_Hyena", ], - "FelineHorny", - "Fur", "1.3", None, + "Fur", "1.3", "CatBreasts", "Feline", ("Cat", "Cat"), ), // Rhinos belong here, not with elephants, as they are odd-toed ungulates RaceGroup::standard_animal( + "Horse", vec![ "Donkey", "Horse", @@ -1159,14 +1158,14 @@ pub fn racegroup_data_animals() -> Vec { "Paraceratherium", "Uintatherium", ], - "Horse", - "Fur", "1", None, + "Fur", "1", "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", @@ -1179,25 +1178,25 @@ pub fn racegroup_data_animals() -> Vec { "PW_Seel", "Gomphotaria", ], - "MarineMammal", - "Fur", "0.9", None, + "Fur", "0.9", "MammalBreasts", "Mammal", ("Mammal", "Marine"), ), RaceGroup::standard_animal( + "Marsupial", vec![ "AEXP_Kangaroo", "Procoptodon", ], - "Marsupial", - "Fur", "1", None, + "Fur", "1", "MammalBreasts", "Cloacal", ("Cloacal", "Cloacal"), ), // Marsupials with a bifurcated penis: All except kangaroos and marsupial moles RaceGroup::standard_animal( + "MarsupialBi", vec![ "AEXP_Koala", "AEXP_TasmanianDevil", @@ -1205,27 +1204,27 @@ pub fn racegroup_data_animals() -> Vec { "PW_Dugtrio", "Diprotodon", ], - "MarsupialBi", - "Fur", "1", None, + "Fur", "1", "MammalBreasts", "Cloacal", ("Cloacal", "Hemi"), ), // TODO: Should be single gender RaceGroup::standard_animal( + "Orc", vec![ "OG_Squig", "OG_Squig_Eatin", "OG_Squig_Oily", "OG_Snotling", ], - "Orc", - "Skin", "1", None, + "Skin", "1", "MammalBreasts", "Orc", ("Orc", "Orc"), ), RaceGroup::standard_animal( + "Pig", vec![ "Pig", "WildBoar", @@ -1243,25 +1242,25 @@ pub fn racegroup_data_animals() -> Vec { "MM_ErymanthianBoar", "Daeodon", ], - "Pig", - "Fur", "1", None, + "Fur", "1", "MammalBreasts", "Mammal", ("Pig", "Pig"), ), RaceGroup::standard_animal( + "Platypus", vec![ "ACPDuckBilledPlatypus", "AEXP_Platypus", ], - "Platypus", - "Fur", "0.9", Some(false), + "Fur", "0.9", "MammalBreasts", "Cloacal", ("Cloacal", "Cloacal"), ), // Mustelids RaceGroup::standard_animal( + "Raccoon", vec![ "Raccoon", "ACPMegaFerret", @@ -1278,13 +1277,13 @@ pub fn racegroup_data_animals() -> Vec { "PW_Sneasel", "Enhydriodon", ], - "Raccoon", - "Fur", "1", None, + "Fur", "1", "MammalBreasts", "Mammal", ("Mammal", "Raccoon"), ), RaceGroup::standard_animal( + "Reptile", vec![ "Cobra", "Iguana", @@ -1321,14 +1320,14 @@ pub fn racegroup_data_animals() -> Vec { "Rakk", "Titanoboa", ], - "Reptile", - "Scales", "0.8", Some(false), + "Scales", "0.8", "", "Cloacal", ("Cloacal", "Hemi"), ), // Rodents and Lagomorphs RaceGroup::standard_animal( + "Rodent", vec![ "Alphabeaver", "Boomrat", @@ -1398,13 +1397,13 @@ pub fn racegroup_data_animals() -> Vec { "Josephoartigasia", "Pika", ], - "Rodent", - "Fur", "1.1", None, + "Fur", "1.1", "MammalBreasts", "Mammal", ("Mammal", "Rodent"), ), RaceGroup::standard_animal( + "Tentacle", vec![ "AA_Helixien", "AA_Plasmorph", @@ -1414,13 +1413,13 @@ pub fn racegroup_data_animals() -> Vec { "PW_Tentacool", "PW_Tentacruel", ], - "Tentacle", - "Slime", "0.8", Some(false), + "Slime", "0.8", "", "Cloacal", ("Cloacal", "Tentacle"), ), RaceGroup::standard_animal( + "Thrumbo", vec![ "Thrumbo", "GR_Thrumbear", @@ -1438,13 +1437,13 @@ pub fn racegroup_data_animals() -> Vec { "Archothrumbo", "RoyalThrumbo", ], - "Thrumbo", - "Fur", "1", None, + "Fur", "1", "MammalBreasts", "Cloacal", ("Cloacal", "Dragon"), ), RaceGroup::standard_animal( + "Turtle", vec![ "Tortoise", "AEXP_DesertTortoise", @@ -1456,13 +1455,13 @@ pub fn racegroup_data_animals() -> Vec { "Archotortoise", "Megalochelys", ], - "Turtle", - "Scales", "0.8", Some(false), + "Scales", "0.8", "", "Cloacal", ("Cloacal", "Turtle"), ), RaceGroup::standard_animal( + "Ursine", vec![ "Bear", "Bear_Grizzly", @@ -1487,19 +1486,18 @@ pub fn racegroup_data_animals() -> Vec { "AnimaBear", "ShortfacedBear", ], - "Ursine", - "Fur", "1", None, + "Fur", "1", "MammalBreasts", "Mammal", ("Mammal", "Bear"), ), // AA RaceGroup::standard_animal( + "AA_SandProwler", vec![ "AA_SandProwler", ], - "AA_SandProwler", - "Scales", "1", None, + "Scales", "1", "CatBreasts", "Feline", ("Cat", "Cat"), @@ -1604,7 +1602,7 @@ pub fn racegroup_data_animals() -> Vec { m_genitals: "BovinePenis".to_string(), tag: "Fur".to_string(), sex_drive: "1".to_string(), - egg_implant: None, + egg_implant: false, }, // Arthropods that reproduce through oviposition RaceGroup { @@ -1657,7 +1655,7 @@ pub fn racegroup_data_animals() -> Vec { m_genitals: "OvipositorM".to_string(), tag: "Chitin".to_string(), sex_drive: "1".to_string(), - egg_implant: Some(true), + egg_implant: true, }, RaceGroup { races: vec![ @@ -1672,7 +1670,7 @@ pub fn racegroup_data_animals() -> Vec { m_genitals: "OvipositorM".to_string(), tag: "Chitin".to_string(), sex_drive: "1.5".to_string(), - egg_implant: Some(true), + egg_implant: true, }, ] } \ No newline at end of file