use std::collections::HashMap; #[derive(Clone, Debug)] pub struct RaceGroup { pub races: Vec<&'static str>, pub name: String, pub anus: String, pub f_breasts: String, pub m_breasts: String, pub f_genitals: String, pub m_genitals: String, pub tag: String, pub sex_drive: String, pub egg_implant: Option, } 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 { Self { races, name: format!("{}Person", species), anus: format!("{}Anus", anus), f_breasts: breasts.to_string(), m_breasts: breasts.to_string(), f_genitals: format!("{}Vagina", genitals.0), m_genitals: format!("{}Penis", genitals.1), tag: tag.to_string(), sex_drive: sex_drive.to_string(), egg_implant: None, } } 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), anus: format!("{}Anus", anus), f_breasts: breasts.to_string(), m_breasts: breasts.to_string(), f_genitals: format!("{}Vagina", genitals.0), m_genitals: format!("{}Penis", genitals.1), tag: tag.to_string(), sex_drive: sex_drive.to_string(), egg_implant, } } } fn tagify(content: &str, tag: &str) -> String { if content == "" { return format!("<{tag} />"); } format!("<{tag}>
  • {content}
  • ") } pub fn construct_racegroup(group: &RaceGroup) -> String { let mut s = String::from(RACEGROUP_STRING); let mut races = String::new(); for race in &group.races { 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() }; let replace = HashMap::from([ ("{name}", group.name.clone()), ("{anus}", tagify(&group.anus, "anuses")), ("{f_breasts}", tagify(&group.f_breasts, "femaleBreasts")), ("{f_genitals}", tagify(&group.f_genitals, "femaleGenitals")), ("{m_breasts}", tagify(&group.m_breasts, "maleBreasts")), ("{m_genitals}", tagify(&group.m_genitals, "maleGenitals")), ("{tag}", tagify(&group.tag, "tags")), ("{sex_drive}", group.sex_drive.clone()), ("{races}", races), ("{fields}", fields) ]); for r in replace { s = s.replace(r.0, &r.1); } s } const RACEGROUP_STRING: &'static str = " {name} {races} {anus} {f_breasts} {f_genitals} {m_breasts} {m_genitals} {tag} {fields}{sex_drive} \n"; pub fn racegroup_data_humans() -> Vec { vec![ RaceGroup::standard( vec![ "AA_Mime", "Alien_Goblin", "Alien_Dirach", "Alien_Fimm", "Alien_Meargh", "Alien_Moyo", "Alien_Shearl", "Alien_Twi'lek", "Alien_Zabrak", "HC_Giant", "WMH_Cyclops", "Yokai_Yamanba", "Yokai_YukiShizuku", "DwarfRace", "eCutefairy", "eDefender", "eGoldenknight", "eGwen", "eYoungercatsister", "eYoungersister", "HorrorsInfestedHuman", "HorrorsOverlord", "Elona_Imouto", "Giant", "Shoujo", "Ooka_Miko", "TrollRace", ], "Human", "Skin", "1", "Breasts", "", ("", ""), ), RaceGroup::standard( vec![ "Alien_Beetle", "Alien_Mantis", "Ant_AntiniumRace", "Arachne", "KlickmalaRace", "Poleepkwa", "Races_BlackWidow", "Yokai_JorouGumo", ], "Arthropod", "Chitin", "0.8", "Breasts", "Insect", ("Ovipore", "Aedeagus"), ), RaceGroup::standard( vec![ "ATK_Avianmorph", "Harpy", ], "Avian", "Feathers", "0.9", "FeaturelessChest", "Cloacal", ("Cloacal", "Cloacal"), ), RaceGroup::standard( vec![ "WoW_Pandaren", "BearMan", ], "Bear", "Fur", "0.9", "Breasts", "", ("", "Bear"), ), RaceGroup::standard( vec![ "ATK_Caninemorph", "WoW_Worgen", "Lupaios", "kuro", "siro", "WolfMan", ], "Canine", "Fur", "1", "Breasts", "", ("Dog", "Dog"), ), // For foxes, hyenas, werewolves, etc (hyenas are felines oops) RaceGroup::standard( vec![ "ATK_Gnollmorph", "ATK_Vulpinemorph", "Alien_Fennex", "Alien_Frijjid", "StarWarsRaces_Wookie", "WMH_Werewolf", "Yokai_NineTail", "Yokai_NineTailWhite", "FoxMan", ], "CanineHighSex", "Fur", "1.3", "Breasts", "", ("Dog", "Dog"), ), RaceGroup::standard( vec![ "Alien_Argonian", "SSD_DeathclawRace", "Races_Lizardman", ], "Crocodilian", "Scales", "0.9", "ScaleBreasts", "Cloacal", ("Cloacal", "Crocodilian"), ), RaceGroup::standard( vec![ "ATK_Cervinemorph", "CamelMan", "CamelPerson", "ElkMan", "GazelleMan", "Lliscean", ], "Deer", "Fur", "1", "Breasts", "", ("Narrow", "Needle"), ), RaceGroup::standard( vec![ "Raptor", "Tyrannosaur", ], "Dino", "Scales", "0.9", "ScaleBreasts", "Cloacal", ("Cloacal", "Dino"), ), RaceGroup::standard( vec![ "ATK_Dragomorph", "WMH_Basilisk", "WMH_Wyvern", "Yokai_Dragon_MoonDragon", "Yokai_Dragon_Pekodra", "Yokai_Dragon_Redra", "Yokai_Dragon_Shiro", "Yokai_Raid_Mdra", "Yokai_Raid_Pekodra", "Yokai_Raid_Redra", "Yokai_Tenaga", "Yokai_TenagaH", "Yokai_TubakiAnimal", "EmperorDragon", "HalfDragon", "Dragon_Kilhn", "ALapelli", "yuki", ], "Dragon", "Scales", "1.2", "ScaleBreasts", "Cloacal", ("Cloacal", "Dragon") ), RaceGroup::standard( vec![ "ElephantMan", ], "Elephant", "Fur", "1", "Breasts", "", ("Elephant", "Elephant"), ), RaceGroup::standard( vec![ "Alien_Hisa", "kon", "Vulpes", ], "FoxGirl", "Fur", "1.3", "Petite_FoxGirl_Breasts", "Petite_FoxGirl_", ("Petite_FoxGirl_", ""), ), RaceGroup::standard( vec![ "Alien_Eldar", "AS_WHE_Race", "Alien_Astoriel", "Alien_Drow_Otto", "O21_Alien_DarkElf", "O21_Alien_MoonElf", "O21_Alien_SunElf", "O21_Alien_WoodElf", "O21_FR_DarkElf", "O21_FR_MoonElf", "O21_FR_SunElf", "O21_FR_WoodElf", "WoW_BloodElf", "WoW_HighElf", "WoW_NightElf", "WoW_ForsakenHighElf", "WoW_ForsakenNightElf", "Sandy_Angel", "ElfRace", ], "Elf", "Skin", "1.1", "Breasts", "Elf", ("Elf", "Elf"), ), RaceGroup::standard( vec![ "Alien_Nyaron", "ATK_Felinemorph", "YanzihkoCheetah", "YanzihkoJaguar", "YanzihkoLeo", "YanzihkoPanther", "YanzihkoTigris", "Yokai_NekoMusume", "GuardianBast", "LynxMan", "Maidnukos", "miko", ], "Feline", "Fur", "1", "Breasts", "Feline", ("Cat", "Cat"), ), RaceGroup::standard( vec![ "Alien_NiHal", "Alien_Quarren", "Alien_MonCalamari", "IkquanRace", ], "Fish", "Scales", "0.8", "FeaturelessChest", "Cloacal", ("Cloacal", "Marine"), ), RaceGroup::standard( vec![ "DRSKT_Race", "HPLovecraft_MistCreature", "MM_WillOWisp", "WoW_Skeleton", ], "Ghost", "Demon", "0.5", "GhostBreasts", "Ghost", ("Ghost", "Ghost"), ), RaceGroup::standard( vec![ "Ghoul", "GlowingGhoul", ], "Ghoul", "Demon", "0.5", "GhoulBreasts", "Ghoul", ("Ghoul", "Ghoul"), ), RaceGroup::standard( vec![ "Alien_Kijin", ], "Horny", "Skin", "1.4", "Horny_Breasts", "", ("Horny_", "Horny_"), ), RaceGroup::standard( vec![ "Alien_Orc", "O21_Alien_Orc", "O21_FR_Orc", "OG_Alien_Ork", "OG_Cyborg_Ork", "OrcRace", "Ork_Warboss", "Ork_Nob", "Ork_Eavy_Nob", "Ork_Boy", "Ork_Eavy_Boy", "Ork_Grot", "OG_Alien_Grot", "WoW_Orc", ], "Orc", "Skin", "1.3", "OrcBreasts", "Orc", ("Orc", "Orc"), ), RaceGroup::standard( vec![ "Alien_Bullgor", "Alien_Equium", "Alien_DonkEquium", "Alien_UniEquium", "Alien_ZEquium", "Alien_PEquium", "Alien_DonkPEquium", "Alien_UniPEquium", "Alien_ZPEquium", "WoW_Draenei", ], "Horse", "Fur", "1.2", "Breasts", "Horse", ("Horse", "Horse"), ), RaceGroup::standard( vec![ "PigMan", ], "Pig", "Fur", "1", "Breasts", "", ("Pig", "Pig"), ), RaceGroup::standard( vec![ "RaccoonMan", "StarWarsRaces_Ewok", ], "Raccoon", "Fur", "1.1", "Breasts", "", ("", "Raccoon"), ), RaceGroup::standard( vec![ "O21_Alien_Kobold", "O21_FR_Kobold", "Pawnbold_bold", "StarWarsRaces_Rodian", "Yokai_Lamia", "Yokai_Samia", "Naga", ], "Reptile", "Scales", "0.9", "ScaleBreasts", "Cloacal", ("Cloacal", "Hemi"), ), RaceGroup::standard( vec![ "ATK_Lagomorph", "Alien_Skaven", "Alien_SkavenStorm", "Alien_SkavenMoulder", "Alien_HornedSkaven", "RK_KingHamster", "Yokai_Kamaitachi", "hana", "Ratkin", "Ratkin_Su", "Rotti", "Rabbie", ], "Rodent", "Fur", "1.3", "Petite_Breasts", "Petite_", ("Rodent", "Rodent"), ), RaceGroup::standard( vec![ "Thrumkin", ], "Thrumbo", "Fur", "1.2", "Breasts", "Cloacal", ("Cloacal", "Dragon") ), RaceGroup::standard( vec![ "Alien_Dryad", "Alien_DryadWild", "Alien_Tree", ], "Tree", "Plant", "1", "TreeBreasts", "Tree", ("Tree", "Tree"), ), RaceGroup { races: vec![ "ATK_Bovinemorph", "Alien_Gor", "Alien_Ungor", "WoW_Tauren", "WMH_Chort", "WMH_Fiend", "akame", "aome", ], name: "Bovine".to_string(), anus: "Anus".to_string(), f_breasts: "UdderBreasts".to_string(), m_breasts: "Breasts".to_string(), f_genitals: "BovineVagina".to_string(), m_genitals: "BovinePenis".to_string(), tag: "Fur".to_string(), sex_drive: "1".to_string(), egg_implant: None, }, RaceGroup { races: vec![ "Alien_Slime", "Alien_Slug", "Mincho_ThingDef", "Yokai_HihiiroKabe", "Slime", ], name: "Slime".to_string(), anus: "SlimeAnus".to_string(), f_breasts: "SlimeBreasts".to_string(), m_breasts: "SlimeBreasts".to_string(), f_genitals: "SlimeVagina".to_string(), m_genitals: "SlimeTentacles".to_string(), tag: "Slime".to_string(), sex_drive: "1".to_string(), egg_implant: None, }, ] } pub fn racegroup_data_animals() -> Vec { vec![ RaceGroup::standard_animal( vec![ "Megasloth", "ACPRedPanda", "AEXP_Pangolin", "AEXP_RedPanda", "Yokai_IssunAnimal", "Andrewsarchus", ], "GenericMammal", "Fur", "1", None, "MammalBreasts", "Mammal", ("Mammal", "Mammal"), ), RaceGroup::standard_animal( vec![ "Monkey", "AEXP_Gorilla", "AEXP_Mandrill", "AEXP_Lemur", "AEXP_Bonobo", "GR_ParagonHumanoid", "Dinopithecus", "Gigantopithecus", ], "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( vec![ "AA_AngelMoth", "AA_Atispec", "AA_Barbslinger", "AA_BedBug", "AA_Bobeene", "AA_ChemfuelMyrmidon", "AA_CrepuscularBeetle", "AA_Drainer", "AA_FireWasp", "AA_GreatDevourer", "AA_IronhuskBeetle", "AA_LuciferBug", "AA_Metallovore", // AA Crabs "AA_BoulderMit", "AA_CrystalMit", "AA_PebbleMit", "AA_SummitCrab", "ACPSilkspider", "AEXP_Megascorpion", "BWFlooferMoth", "Cults_ByakheeRace", "VAECaves_AncientGiantSpider", "VAECaves_CaveCrawler", "VAECaves_GiantSpider", "VAECaves_GiantSpiderHatchling", "Archospider", "Arthropleura", "Pulmonoscorpius", ], "Arthropod", "Chitin", "0.7", Some(false), "", "Insect", ("Ovipore", "Aedeagus"), ), RaceGroup::standard_animal( vec![ "Cassowary", "Chicken", "Duck", "Emu", "Goose", "Turkey", "Ostrich", "ACPDuck", "ACPDomesticGoose", "ACPWildGoose", "ACPGreatBustard", "ACPKiwi", "ACPPenguin", "ACPFlamingo", "ACPValleyQuail", "ACPSilkieChicken", "ACPPtarmigan", "AA_DesertAve", "AA_GiantCrownedSilkie", "AA_FrostAve", "AA_MeadowAve", "AA_NightAve", "AA_RoyalAve", "AA_FlamingoPhoenix", "AEXP_Penguin", "AEXP_Moa", "AEXP_RockhopperPenguin", "AEXP_WildGoose", "GR_Chickenbear", "GR_Chickenlope", "GR_Chickenffalo", "GR_Chickenwolf", "GR_Chickenrabbit", "GR_Chickencat", "GR_Manchicken", "GR_Turkeyman", "GR_ParagonChicken", "MM_Ieltxu", "MM_Fenghuang", "MM_Phoenix", "RG-EAP_Dodo", "RG-EAP_ArcticDrak", "Archostrich", "Dinornis", "Palaeeudyptes", "Titanis", ], "Avian", "Feathers", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Cloacal"), ), RaceGroup::standard_animal( vec![ "Fox_Arctic", "Fox_Fennec", "Fox_Red", "Husky", "LabradorRetriever", "Warg", "Wolf_Arctic", "Wolf_Timber", "YorkshireTerrier", "AA_AnimusVox", "AA_Skiphound", "AACP_AnimaFox", "ACPWildDog", "ACPDirewolf", "ACPBlackwolf", "ACPSpiritwolf", "ACPSpiritwolfFF", "AEXP_Coyote", "AEXP_ArcticCoyote", "AEXP_Beagle", "AEXP_Chihuahua", "AEXP_Corgi", "AEXP_FrenchBulldog", "AEXP_GermanShepherd", "AEXP_GreatDane", "AEXP_Poodle", "AEXP_Pug", "AEXP_Rottweiler", "AEXP_Shih-Tzu", "AEXP_WelshTerrier", "AEXP_AfricanWildDog", "ERN_Palamute", "GR_Wolfbear", "GR_Wolfalope", "GR_Wolfchicken", "GR_Wolffalo", "GR_Wolfbeaver", "GR_Wolfcat", "GR_Dogman", "GR_Manwolf", "GR_ParagonWolf", "MM_Ahuizotl", "MM_Kitsune", "MM_Cerberus", "Archomutt", "AnimaWarg", "Abaddog", "Arctivore", "Omnicron", "Fuzztino", ], "Canine", "Fur", "1", None, "MammalBreasts", "Dog", ("Dog", "Dog"), ), RaceGroup::standard_animal( vec![ "AA_RipperHound", ], "CanineSkin", "Skin", "0.9", None, "MammalBreasts", "Dog", ("Dog", "Dog"), ), // Most even-toed ungulates go here, obviously excluding cetaceans RaceGroup::standard_animal( vec![ "Alpaca", "Deer", "Dromedary", "Elk", "ACPGiraffe", "AEXP_Camel", "AEXP_Giraffe", "AEXP_Moose", "RG-WF_WastelandDeer", ], "Cervine", "Fur", "1", None, "MammalBreasts", "Mammal", ("Narrow", "Needle"), ), RaceGroup::standard_animal( vec![ "AA_RoughPlatedMonitor", "AEXP_Crocodile", "AEXP_Alligator", "Quinkana", "Purussaurus", ], "Crocodilian", "Scales", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Crocodilian"), ), RaceGroup::standard_animal( vec![ "AA_PedigreedRaptor", "Dakotaraptor", "Deinocheirus", "Gallimimus", "Gigantoraptor", "Therizinosaurus", "Velociraptor", "Yutyrannus", ], "DinoFeathered", "Feathers", "1", Some(false), "", "Cloacal", ("Cloacal", "Dino"), ), RaceGroup::standard_animal( vec![ "Allosaurus", "Ankylosaurus", "Baryonyx", "Brachiosaurus", "Brontosaurus", "Carnotaurus", "Compsognathus", "Corythosaurus", "Dilophosaurus", "Diplodocus", "Doedicurus", "Dryosaurus", "Iguanodon", "Magyarosaurus", "Minmi", "Pachycephalosaurus", "Parasaur", "Protoceratops", "Pteranodon", "Quetzalcoatlus", "Spinosaurus", "Stegosaurus", "Stygimoloch", "Triceratops", "TyrannosaurusRex", "Utahraptor", ], "DinoScaled", "Scales", "1", Some(false), "", "Cloacal", ("Cloacal", "Dino"), ), RaceGroup::standard_animal( vec![ "AA_Behemoth", "AA_DecayDrake", "MM_Qilin", "MM_LesserWyvern", "Yokai_RyuunoIkariAnimal", // Colored dragons "Black_Dragon", "Blue_Dragon", "Gold_Dragon", "Green_Dragon", "Jade_Dragon", "Purple_Dragon", "Red_Dragon", "Royal_Dragon", "Silver_Dragon", "True_Dragon", "White_Dragon", "Yellow_Dragon", "Draclone", "Mystogen", "Voltaic", ], "Dragon", "Scales", "1.2", Some(false), "", "Cloacal", ("Cloacal", "Dragon"), ), RaceGroup::standard_animal( vec![ "Elephant", "AA_Gallatross", "AA_GallatrossMoribund", "AEXP_AsianElephant", "AEXP_IndianElephant", "AEXP_Tapir", "HC_WoollyMammoth", "RG-EAP_WoollyMammoth", "Boltusk", "Deinotherium", "Platybelodon", "WoollyMammoth", "Zygolophodon", ], "Elephant", "Fur", "0.9", None, "MammalBreasts", "Mammal", ("Elephant", "Elephant"), ), RaceGroup::standard_animal( vec![ "Cat", "Cougar", "Lynx", "Panther", "AA_ArcticLion", "AA_CrystallineCaracal", "AA_DuskProwler", "AA_Genix", "AA_SandLion", "AA_PhoenixOwlcat", "ACPMunchkinCat", "ACPLion", "ACPTiger", "ACPCheetah", "ACPAmurLeopard", "ACPSnowLeopard", "AEXP_Jaguar", "AEXP_Tiger", "AEXP_CatAbyssinian", "AEXP_CatBengal", "AEXP_CatBritishShorthair", "AEXP_CatMaineCoon", "AEXP_CatMunchkin", "AEXP_CatNorwegianForest", "AEXP_CatPersian", "AEXP_CatSiamese", "AEXP_CatSomali", "AEXP_CatSphynx", "AEXP_Lion", "AEXP_Cheetah", "AEXP_Thylacine", "GR_Catbear", "GR_Catalope", "GR_Catchicken", "GR_Catffalo", "GR_Catrabbit", "GR_Catwolf", "GR_Catman", "GR_ParagonFeline", "MM_Chimera", "MM_Manticore", "MM_Xiezhi", "MM_Griffin", "Carnagrius", "Dinocrocuta", "eBlackcat", "Jeeta", "Pallas_cat", "Smilodon", "Snow_leopard", ], "Feline", "Fur", "1", None, "CatBreasts", "Feline", ("Cat", "Cat"), ), RaceGroup::standard_animal( vec![ "AEXP_Hyena", ], "FelineHorny", "Fur", "1.3", None, "CatBreasts", "Feline", ("Cat", "Cat"), ), // Rhinos belong here, not with elephants, as they are odd-toed ungulates RaceGroup::standard_animal( vec![ "Donkey", "Horse", "Rhinoceros", "AA_Thunderox", "ACPHorse", "ACPWoolyHorse", "ACPLlama", "ACPBlackRhinoceros", "ACPWoolyRhino", "AEXP_BlackRhino", "AEXP_Zebra", "AEXP_Quagga", "GR_Bearhorse", "GR_Boomhorse", "GR_Chickenhorse", "GR_Cathorse", "GR_Molehorse", "GR_Wolfhorse", "GR_Muffalohorse", "GR_Crocorse", "GR_Spiderhorse", "GR_Hurseman", "GR_Mancat", "GR_ParagonHorse", "MM_Pegasus", "MM_Unicorn", "RG-EAP_WoollyRhino", "Chalicotherium", "Elasmotherium", "Paraceratherium", "Uintatherium", ], "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( vec![ "ACPSpottedSeal", "ACPWalrus", "ACPHippopotamus", "AEXP_Seal", "AEXP_Walrus", "Gomphotaria", ], "MarineMammal", "Fur", "0.9", None, "MammalBreasts", "Mammal", ("Mammal", "Marine"), ), RaceGroup::standard_animal( vec![ "AEXP_Kangaroo", "Procoptodon", ], "Marsupial", "Fur", "1", None, "MammalBreasts", "Cloacal", ("Cloacal", "Cloacal"), ), // Marsupials with a bifurcated penis: All except kangaroos and marsupial moles RaceGroup::standard_animal( vec![ "AEXP_Koala", "AEXP_TasmanianDevil", "Diprotodon", ], "MarsupialBi", "Fur", "1", None, "MammalBreasts", "Cloacal", ("Cloacal", "Hemi"), ), // TODO: Should be single gender RaceGroup::standard_animal( vec![ "OG_Squig", "OG_Squig_Eatin", "OG_Squig_Oily", "OG_Snotling", ], "Orc", "Skin", "1", None, "MammalBreasts", "Orc", ("Orc", "Orc"), ), RaceGroup::standard_animal( vec![ "Pig", "WildBoar", "AA_Thunderbeast", "AA_WindBeast", "AA_Darkbeast", "AA_DarkVandal", "ACPTapir", "ACPPeccary", "MM_ErymanthianBoar", "Daeodon", ], "Pig", "Fur", "1", None, "MammalBreasts", "Mammal", ("Pig", "Pig"), ), RaceGroup::standard_animal( vec![ "ACPDuckBilledPlatypus", "AEXP_Platypus", ], "Platypus", "Fur", "0.9", Some(false), "MammalBreasts", "Cloacal", ("Cloacal", "Cloacal"), ), // Mustelids RaceGroup::standard_animal( vec![ "Raccoon", "ACPMegaFerret", "ACPMegabadger", "ACPOtter", "ACPFerret", "ACPHoneyBadger", "ACPFishercat", "ACPErmine", "AEXP_MegaWolverine", "AEXP_Otter", "AEXP_Badger", "Enhydriodon", ], "Raccoon", "Fur", "1", None, "MammalBreasts", "Mammal", ("Mammal", "Raccoon"), ), RaceGroup::standard_animal( vec![ "Cobra", "Iguana", "AA_CrescendoAnole", "AA_Erin", "AA_Lockjaw", "AA_RayHound", "AA_Skyeel", "ACPXenguana", "ACPXGecko", "ACPKomodo", "ACPThornyDevil", "AEXP_Anaconda", "AEXP_Rattlesnake", "AEXP_GilaMonster", "GR_Bearodile", "GR_Boomsnake", "GR_Chickenlizard", "GR_Lizardman", "GR_Muffalokomodo", "GR_ParagonIguana", "GR_Snakecat", "GR_Spidersnake", "GR_Wolfsnake", "MM_LernaeanHydra", "MM_Basilisk", "MM_Salamander", "MM_Tlilcoatl", "RG-WF_WastelandDeathclaw", "Gigantophis", "Megalania", "Rakk", "Titanoboa", ], "Reptile", "Scales", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Hemi"), ), // Rodents and Lagomorphs RaceGroup::standard_animal( vec![ "Alphabeaver", "Boomrat", "Capybara", "Chinchilla", "GuineaPig", "Hare", "Rat", "Snowhare", "Squirrel", "AA_DuskRat", "AA_FrostboundBehemoth", "AA_Frostmite", "AA_Groundrunner", "AA_Razorjack", // AA Lings "AA_OcularNightling", "AA_Murkling", "AA_Nightling", "AA_Frostling", "ACPAngoraRabbit", "ACPChipmunk", "ACPDomesticRabbit", "ACPGuineaPig", "ACPHedgehog", "ACPJackalope", "ACPPorcupine", "AEXP_BlackFootedFerret", "AEXP_Boombat", "AEXP_Hedgehog", "AEXP_Beaver", "AEXP_Porcupine", "GR_Beaverwolf", "GR_Mansquirrel", "GR_Molebear", "GR_Moleman", "GR_ParagonRat", "GR_Rabbitcat", "GR_Rabbitchicken", "GR_Ratffalo", "GR_Squirralope", "RG-WF_WastelandSquirrel", "RG-WF_WastelandBeaver", "Yokai_SpinMouse", "Archojerboa", "Castoroides", "FoxSquirrel", "Josephoartigasia", "Pika", ], "Rodent", "Fur", "1.1", None, "MammalBreasts", "Mammal", ("Mammal", "Rodent"), ), RaceGroup::standard_animal( vec![ "AA_Helixien", "AA_Plasmorph", "AA_SandSquid", "AA_TarGuzzler", ], "Tentacle", "Slime", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Tentacle"), ), RaceGroup::standard_animal( vec![ "Thrumbo", "GR_Thrumbear", "GR_Thrumbalope", "GR_Thrumbochicken", "GR_Thrumffalo", "GR_Thrumwolf", "GR_Thrumbocat", "GR_Thrumbospider", "GR_Thrumbolizard", "GR_Thrumborat", "GR_Thrumhorse", "GR_Thrumboman", "GR_ParagonThrumbo", "Archothrumbo", "RoyalThrumbo", ], "Thrumbo", "Fur", "1", None, "MammalBreasts", "Cloacal", ("Cloacal", "Dragon"), ), RaceGroup::standard_animal( vec![ "Tortoise", "AEXP_DesertTortoise", "Archotortoise", "Megalochelys", ], "Turtle", "Scales", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Turtle"), ), RaceGroup::standard_animal( vec![ "Bear", "Bear_Grizzly", "Bear_Polar", "ACPBlackbear", "ACPPanda", "AEXP_BlackBear", "AEXP_Panda", "GR_Bearalope", "GR_Bearcat", "GR_Bearchicken", "GR_Bearffalo", "GR_Bearman", "GR_Bearmole", "GR_Bearwolf", "GR_Manbear", "GR_ParagonBear", "RG-WF_WastelandBear", "Archopanda", "AnimaBear", "ShortfacedBear", ], "Ursine", "Fur", "1", None, "MammalBreasts", "Mammal", ("Mammal", "Bear"), ), // AA RaceGroup::standard_animal( vec![ "AA_SandProwler", ], "AA_SandProwler", "Scales", "1", None, "CatBreasts", "Feline", ("Cat", "Cat"), ), RaceGroup { races: vec![ "Boomalope", "Bison", "Caribou", "Cow", "Gazelle", "Goat", "Ibex", "Muffalo", "Sheep", "Yak", "AA_ChameleonYak", "AA_DevilSheep", "AA_Gigantelope", "AA_NightMule", "AA_NightRam", "AA_Radyak", "AA_ShadowCharger", "AA_ShockGoat", "AA_SpinedGow", "AA_GreyCoatedMouflon", "AACP_AnimaMuffalo", "ACPBison", "ACPMajoreraGoat", "ACPSheep", "AEXP_Hippopotamus", "AEXP_Muskox", "AEXP_Wildebeest", "GR_Boomabear", "GR_Boomachicken", "GR_Boomffalo", "GR_Boomwolf", "GR_Boomsquirrel", "GR_Boomcat", "GR_Booman", "GR_Manalope", "GR_Manffalo", "GR_Muffalobear", "GR_Muffalope", "GR_Muffalochicken", "GR_Muffalowolf", "GR_Muffalocat", "GR_Muffalorat", "GR_Muffaloman", "GR_ParagonBoomalope", "GR_ParagonMuffalo", "RG-EAP-Protoceratidae", "MM_WildMinotaur", "MM_Catoblepas", "MM_CeryneianHind", "Addax", "AngusCow", "AnkoleWatusiCow", "AnimaYak", "Archoffalo", "Archolope", "AssafSheep", "Aurochs", "AwassiSheep", "BighornSheep", "Bongo", "BoomooCow", "BorderLeicesterSheep", "BrahmanCow", "BravaCow", "BrownSwissCow", "Gemsbok", "HarianaCow", "HerefordCow", "HighlandCow", "HolsteinFriesianCow", "JacobsSheep", "JerseyCow", "LimousinCow", "LonghornCow", "LincolnSheep", "MerinoSheep", "MouflonSheep", "Macrauchenia", "Megaloceros", "Raamu", "Sivatherium", "SuffolkSheep", "WaterDeer", "ZebuCow", ], name: "BovineAnimal".to_string(), anus: "MammalAnus".to_string(), f_breasts: "UdderBreasts".to_string(), m_breasts: "MammalBreasts".to_string(), f_genitals: "BovineVagina".to_string(), m_genitals: "BovinePenis".to_string(), tag: "Fur".to_string(), sex_drive: "1".to_string(), egg_implant: None, }, // Arthropods that reproduce through oviposition RaceGroup { races: vec![ "AA_BlackScarab", "AA_BlackSpelopede", "AA_BlackSpider", "AA_BloodShrimp", "AA_MammothWorm", "AA_MegaLouse", "AA_RaptorShrimp", "AA_Ravager", "AA_Thermadon", // AA Lisks "AA_Animalisk", "AA_Blizzarisk", "AA_Cinderlisk", "AA_Dunealisk", "AA_Feralisk", "AA_Junglelisk", "AACP_AnimaMegaspider", "Meganeura", "Spiderant", ], name: "ArthropodOvipositorAnimal".to_string(), anus: "InsectAnus".to_string(), f_breasts: "".to_string(), m_breasts: "".to_string(), f_genitals: "OvipositorF".to_string(), m_genitals: "OvipositorM".to_string(), tag: "Chitin".to_string(), sex_drive: "1".to_string(), egg_implant: Some(true), }, RaceGroup { races: vec![ "VAECaves_InsectoidHulk", "WMH_KikimoreQueen", ], name: "ArthropodOvipositorHornyAnimal".to_string(), anus: "InsectAnus".to_string(), f_breasts: "".to_string(), m_breasts: "".to_string(), f_genitals: "OvipositorF".to_string(), m_genitals: "OvipositorM".to_string(), tag: "Chitin".to_string(), sex_drive: "1.5".to_string(), egg_implant: Some(true), }, ] }