diff --git a/ReadMe.md b/ReadMe.md index 67e2adb..cba84a5 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ Provides RJW compatibility for a wide array of mods that add races and animals. The base RJW mod automatically patches most races in a way that works, but your cat-girls by default will only have normal human genitalia. This mod fixes that, giving the appropriate anatomy to animals and people from numerous mods. -Download: https://gitgud.io/AsmodeusRex/rjw-race-support/-/releases/permalink/latest/downloads/rjw-race-support.zip +Download: https://gitgud.io/AsmodeusRex/rjw-race-support/-/releases/permalink/latest This mod requires RJW and must be placed somewhere below it. @@ -108,7 +108,7 @@ This mod requires RJW and must be placed somewhere below it. ## Plans * Maintain -* Milk fixes and improvements +* Egg and milk fixes and improvements ### Mod support * VFE insects * Update milk mod support @@ -120,12 +120,12 @@ This mod requires RJW and must be placed somewhere below it. * Race to the rim * Ooka miko * kemomimihouse +* VAE test ## Thanks * Ed86 (for Maintaining RJW) * Glitched Securitron (Preview image) * Mlie (for keeping so many of these mods alive) -* purplepenguinonion (PokeWorld support) * MewTopian (for the expansion on RaceSupport) * DarkSlayerEX (for Traits and Breeders Charm) * ShauaPuta (Adding Support for their Races, Age Patches) diff --git a/changelog.txt b/changelog.txt index 4d19124..b3bb2cc 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,8 +1,3 @@ -11.3.0 --Fixed some viviparous species laying chicken eggs --Added PokeWorld support --Improved VAE Caves support - 11.2.7 -Fixed Androids race support diff --git a/generator/src/racegroups.rs b/generator/src/racegroups.rs index 1db2576..5b1a79b 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", @@ -127,21 +128,6 @@ pub fn racegroup_data_humans() -> Vec { "Alien_Twi'lek", "Alien_Zabrak", "HC_Giant", - "PW_Abra", - "PW_Alakazam", - "PW_Hitmonchan", - "PW_Hitmonlee", - "PW_Hitmontop", - "PW_Jynx", - "PW_Kadabra", - "PW_Machamp", - "PW_Machoke", - "PW_Machop", - "PW_Mewtwo", - "PW_MrMime", - "PW_Smoochum", - "PW_Snorlax", - "PW_Tyrogue", "WMH_Cyclops", "Yokai_Yamanba", "Yokai_YukiShizuku", @@ -160,13 +146,13 @@ pub fn racegroup_data_humans() -> Vec { "Ooka_Miko", "TrollRace", ], + "Human", "Skin", "1", "Breasts", "", ("", ""), ), RaceGroup::standard( - "Arthropod", vec![ "Alien_Beetle", "Alien_Mantis", @@ -177,35 +163,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 +200,7 @@ pub fn racegroup_data_humans() -> Vec { "siro", "WolfMan", ], + "Canine", "Fur", "1", "Breasts", "", @@ -221,7 +208,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 +219,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 +246,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,40 +284,40 @@ 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![ + "Alien_Eldar", "AS_WHE_Race", "Alien_Astoriel", "Alien_Drow_Otto", - "Alien_Eldar", "O21_Alien_DarkElf", "O21_Alien_MoonElf", "O21_Alien_SunElf", @@ -340,30 +326,21 @@ pub fn racegroup_data_humans() -> Vec { "O21_FR_MoonElf", "O21_FR_SunElf", "O21_FR_WoodElf", - "PW_Celebi", - "PW_Clefable", - "PW_Clefairy", - "PW_Cleffa", - "PW_Igglybuff", - "PW_Jigglypuff", - "PW_Togepi", - "PW_Togetic", - "PW_Wigglytuff", - "Sandy_Angel", "WoW_BloodElf", - "WoW_ForsakenHighElf", - "WoW_ForsakenNightElf", "WoW_HighElf", "WoW_NightElf", + "WoW_ForsakenHighElf", + "WoW_ForsakenNightElf", + "Sandy_Angel", "ElfRace", ], + "Elf", "Skin", "1.1", "Breasts", "Elf", ("Elf", "Elf"), ), RaceGroup::standard( - "Feline", vec![ "Alien_Nyaron", "ATK_Felinemorph", @@ -378,78 +355,60 @@ pub fn racegroup_data_humans() -> Vec { "Maidnukos", "miko", ], + "Feline", "Fur", "1", "Breasts", "Feline", ("Cat", "Cat"), ), RaceGroup::standard( - "Fish", vec![ "Alien_NiHal", "Alien_Quarren", "Alien_MonCalamari", - "PW_Corsola", - "PW_Goldeen", - "PW_Gyarados", - "PW_Horsea", - "PW_Kingdra", - "PW_Lanturn", - "PW_Magikarp", - "PW_Mantine", - "PW_Qwilfish", - "PW_Remoraid", - "PW_Seadra", - "PW_Seaking", - "PW_Starmie", - "PW_Staryu", "IkquanRace", ], + "Fish", "Scales", "0.8", "FeaturelessChest", "Cloacal", ("Cloacal", "Marine"), ), RaceGroup::standard( - "Ghost", vec![ "DRSKT_Race", "HPLovecraft_MistCreature", "MM_WillOWisp", - "PW_Gastly", - "PW_Gengar", - "PW_Haunter", - "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 +425,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 +444,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 +481,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,48 +502,29 @@ 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", "Alien_Tree", - "PW_Bayleef", - "PW_Bellossom", - "PW_Bellsprout", - "PW_Bulbasaur", - "PW_Chikorita", - "PW_Gloom", - "PW_Hoppip", - "PW_Ivysaur", - "PW_Jumpluff", - "PW_Meganium", - "PW_Oddish", - "PW_Skiploom", - "PW_Sudowoodo", - "PW_Sunflora", - "PW_Sunkern", - "PW_Tangela", - "PW_Venusaur", - "PW_Victreebel", - "PW_Vileplume", - "PW_Weepinbell", ], + "Tree", "Plant", "1", "TreeBreasts", "Tree", @@ -609,18 +549,13 @@ 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![ "Alien_Slime", "Alien_Slug", "Mincho_ThingDef", - "PW_Ditto", - "PW_Grimer", - "PW_Magcargo", - "PW_Muk", - "PW_Slugma", "Yokai_HihiiroKabe", "Slime", ], @@ -632,7 +567,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 +575,6 @@ pub fn racegroup_data_humans() -> Vec { pub fn racegroup_data_animals() -> Vec { vec![ RaceGroup::standard_animal( - "GenericMammal", vec![ "Megasloth", "ACPRedPanda", @@ -649,13 +583,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", @@ -663,23 +597,17 @@ pub fn racegroup_data_animals() -> Vec { "AEXP_Lemur", "AEXP_Bonobo", "GR_ParagonHumanoid", - "PW_Aipom", - "PW_Electabuzz", - "PW_Lickitung", - "PW_Magmar", - "PW_Mankey", - "PW_Primeape", "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", @@ -703,16 +631,6 @@ pub fn racegroup_data_animals() -> Vec { "AEXP_Megascorpion", "BWFlooferMoth", "Cults_ByakheeRace", - "PW_Cloyster", - "PW_Dunsparce", - "PW_Forretress", - "PW_Kabuto", - "PW_Kabutops", - "PW_Kingler", - "PW_Krabby", - "PW_Omanyte", - "PW_Omastar", - "PW_Shellder", "VAECaves_AncientGiantSpider", "VAECaves_CaveCrawler", "VAECaves_GiantSpider", @@ -721,13 +639,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", @@ -758,53 +676,31 @@ pub fn racegroup_data_animals() -> Vec { "AEXP_RockhopperPenguin", "AEXP_WildGoose", "GR_Chickenbear", - "GR_Chickencat", - "GR_Chickenffalo", "GR_Chickenlope", - "GR_Chickenrabbit", + "GR_Chickenffalo", "GR_Chickenwolf", + "GR_Chickenrabbit", + "GR_Chickencat", "GR_Manchicken", - "GR_ParagonChicken", "GR_Turkeyman", - "MM_Fenghuang", + "GR_ParagonChicken", "MM_Ieltxu", + "MM_Fenghuang", "MM_Phoenix", - "PW_Articuno", - "PW_Delibird", - "PW_Dodrio", - "PW_Doduo", - "PW_Farfetchd", - "PW_Fearow", - "PW_Golduck", - "PW_HoOh", - "PW_Hoothoot", - "PW_Lugia", - "PW_Moltres", - "PW_Murkrow", - "PW_Natu", - "PW_Noctowl", - "PW_Pidgeot", - "PW_Pidgeotto", - "PW_Pidgey", - "PW_Psyduck", - "PW_Skarmory", - "PW_Spearow", - "PW_Xatu", - "PW_Zapdos", - "RG-EAP_ArcticDrak", "RG-EAP_Dodo", + "RG-EAP_ArcticDrak", "Archostrich", "Dinornis", "Palaeeudyptes", "Titanis", ], - "Feathers", "0.8", + "Avian", + "Feathers", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Cloacal"), ), RaceGroup::standard_animal( - "Canine", vec![ "Fox_Arctic", "Fox_Fennec", @@ -838,35 +734,18 @@ pub fn racegroup_data_animals() -> Vec { "AEXP_WelshTerrier", "AEXP_AfricanWildDog", "ERN_Palamute", + "GR_Wolfbear", + "GR_Wolfalope", + "GR_Wolfchicken", + "GR_Wolffalo", + "GR_Wolfbeaver", + "GR_Wolfcat", "GR_Dogman", "GR_Manwolf", "GR_ParagonWolf", - "GR_Wolfalope", - "GR_Wolfbear", - "GR_Wolfbeaver", - "GR_Wolfcat", - "GR_Wolfchicken", - "GR_Wolffalo", "MM_Ahuizotl", - "MM_Cerberus", "MM_Kitsune", - "PW_Arcanine", - "PW_Eevee", - "PW_Entei", - "PW_Espeon", - "PW_Flareon", - "PW_Granbull", - "PW_Growlithe", - "PW_Houndoom", - "PW_Houndour", - "PW_Jolteon", - "PW_Ninetales", - "PW_Raikou", - "PW_Snubbull", - "PW_Suicune", - "PW_Umbreon", - "PW_Vaporeon", - "PW_Vulpix", + "MM_Cerberus", "Archomutt", "AnimaWarg", "Abaddog", @@ -874,24 +753,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", @@ -901,37 +780,31 @@ pub fn racegroup_data_animals() -> Vec { "AEXP_Camel", "AEXP_Giraffe", "AEXP_Moose", - "PW_Girafarig", - "PW_Stantler", "RG-WF_WastelandDeer", ], - "Fur", "1", + "Cervine", + "Fur", "1", None, "MammalBreasts", "Mammal", ("Narrow", "Needle"), ), RaceGroup::standard_animal( - "Crocodilian", vec![ "AA_RoughPlatedMonitor", - "AEXP_Alligator", "AEXP_Crocodile", - "PW_Croconaw", - "PW_Feraligatr", - "PW_Totodile", + "AEXP_Alligator", "Quinkana", "Purussaurus", ], - "Scales", "0.8", + "Crocodilian", + "Scales", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Crocodilian"), ), RaceGroup::standard_animal( - "DinoFeathered", vec![ "AA_PedigreedRaptor", - "PW_Aerodactyl", "Dakotaraptor", "Deinocheirus", "Gallimimus", @@ -940,19 +813,14 @@ 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", - "PW_Kangaskhan", - "PW_Larvitar", - "PW_Tyranitar", "Allosaurus", "Ankylosaurus", "Baryonyx", @@ -980,25 +848,18 @@ 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", - "MM_LesserWyvern", "MM_Qilin", - "PW_Charizard", - "PW_Charmander", - "PW_Charmeleon", - "PW_Dragonair", - "PW_Dragonite", - "PW_Dratini", - "VAECaves_Wyrm", + "MM_LesserWyvern", "Yokai_RyuunoIkariAnimal", // Colored dragons "Black_Dragon", @@ -1017,13 +878,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", @@ -1032,10 +893,6 @@ pub fn racegroup_data_animals() -> Vec { "AEXP_IndianElephant", "AEXP_Tapir", "HC_WoollyMammoth", - "PW_Donphan", - "PW_Drowzee", - "PW_Hypno", - "PW_Phanpy", "RG-EAP_WoollyMammoth", "Boltusk", "Deinotherium", @@ -1043,13 +900,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", @@ -1091,11 +948,9 @@ pub fn racegroup_data_animals() -> Vec { "GR_Catman", "GR_ParagonFeline", "MM_Chimera", - "MM_Griffin", "MM_Manticore", "MM_Xiezhi", - "PW_Meowth", - "PW_Persian", + "MM_Griffin", "Carnagrius", "Dinocrocuta", "eBlackcat", @@ -1104,24 +959,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", @@ -1149,83 +1004,73 @@ pub fn racegroup_data_animals() -> Vec { "GR_ParagonHorse", "MM_Pegasus", "MM_Unicorn", - "PW_Ponyta", - "PW_Rapidash", - "PW_Rhydon", - "PW_Rhyhorn", "RG-EAP_WoollyRhino", "Chalicotherium", "Elasmotherium", "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", "ACPHippopotamus", "AEXP_Seal", "AEXP_Walrus", - "PW_Azumarill", - "PW_Dewgong", - "PW_Marill", - "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", - "PW_Diglett", - "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", @@ -1233,35 +1078,30 @@ pub fn racegroup_data_animals() -> Vec { "AA_WindBeast", "AA_Darkbeast", "AA_DarkVandal", - "PW_Piloswine", - "PW_Slowbro", - "PW_Slowking", - "PW_Slowpoke", - "PW_Swinub", "ACPTapir", "ACPPeccary", "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", @@ -1274,17 +1114,15 @@ pub fn racegroup_data_animals() -> Vec { "AEXP_MegaWolverine", "AEXP_Otter", "AEXP_Badger", - "PW_Smeargle", - "PW_Sneasel", "Enhydriodon", ], - "Fur", "1", + "Raccoon", + "Fur", "1", None, "MammalBreasts", "Mammal", ("Mammal", "Raccoon"), ), RaceGroup::standard_animal( - "Reptile", vec![ "Cobra", "Iguana", @@ -1313,23 +1151,20 @@ pub fn racegroup_data_animals() -> Vec { "MM_Basilisk", "MM_Salamander", "MM_Tlilcoatl", - "PW_Arbok", - "PW_Ekans", "RG-WF_WastelandDeathclaw", - "VAECaves_BlindSalamander", "Gigantophis", "Megalania", "Rakk", "Titanoboa", ], - "Scales", "0.8", + "Reptile", + "Scales", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Hemi"), ), // Rodents and Lagomorphs RaceGroup::standard_animal( - "Rodent", vec![ "Alphabeaver", "Boomrat", @@ -1371,27 +1206,8 @@ pub fn racegroup_data_animals() -> Vec { "GR_Rabbitchicken", "GR_Ratffalo", "GR_Squirralope", - "PW_Cyndaquil", - "PW_Furret", - "PW_Mew", - "PW_Nidoking", - "PW_Nidoqueen", - "PW_NidoranF", - "PW_NidoranM", - "PW_Nidorina", - "PW_Nidorino", - "PW_Pichu", - "PW_Pikachu", - "PW_Quilava", - "PW_Raichu", - "PW_Raticate", - "PW_Rattata", - "PW_Sandshrew", - "PW_Sandslash", - "PW_Sentret", - "PW_Typhlosion", - "RG-WF_WastelandBeaver", "RG-WF_WastelandSquirrel", + "RG-WF_WastelandBeaver", "Yokai_SpinMouse", "Archojerboa", "Castoroides", @@ -1399,29 +1215,26 @@ 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", "AA_SandSquid", "AA_TarGuzzler", - "PW_Octillery", - "PW_Tentacool", - "PW_Tentacruel", ], - "Slime", "0.8", + "Tentacle", + "Slime", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Tentacle"), ), RaceGroup::standard_animal( - "Thrumbo", vec![ "Thrumbo", "GR_Thrumbear", @@ -1439,31 +1252,26 @@ 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", - "PW_Blastoise", - "PW_Lapras", - "PW_Shuckle", - "PW_Squirtle", - "PW_Wartortle", "Archotortoise", "Megalochelys", ], - "Scales", "0.8", + "Turtle", + "Scales", "0.8", Some(false), "", "Cloacal", ("Cloacal", "Turtle"), ), RaceGroup::standard_animal( - "Ursine", vec![ "Bear", "Bear_Grizzly", @@ -1481,26 +1289,24 @@ pub fn racegroup_data_animals() -> Vec { "GR_Bearwolf", "GR_Manbear", "GR_ParagonBear", - "PW_Teddiursa", - "PW_Ursaring", "RG-WF_WastelandBear", - "VAECaves_CaveBear", "Archopanda", "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"), @@ -1536,31 +1342,26 @@ pub fn racegroup_data_animals() -> Vec { "AEXP_Wildebeest", "GR_Boomabear", "GR_Boomachicken", - "GR_Booman", - "GR_Boomcat", "GR_Boomffalo", - "GR_Boomsquirrel", "GR_Boomwolf", + "GR_Boomsquirrel", + "GR_Boomcat", + "GR_Booman", "GR_Manalope", "GR_Manffalo", "GR_Muffalobear", - "GR_Muffalocat", - "GR_Muffalochicken", - "GR_Muffaloman", "GR_Muffalope", - "GR_Muffalorat", + "GR_Muffalochicken", "GR_Muffalowolf", + "GR_Muffalocat", + "GR_Muffalorat", + "GR_Muffaloman", "GR_ParagonBoomalope", "GR_ParagonMuffalo", + "RG-EAP-Protoceratidae", + "MM_WildMinotaur", "MM_Catoblepas", "MM_CeryneianHind", - "MM_WildMinotaur", - "PW_Ampharos", - "PW_Flaaffy", - "PW_Mareep", - "PW_Miltank", - "PW_Tauros", - "RG-EAP-Protoceratidae", "Addax", "AngusCow", "AnkoleWatusiCow", @@ -1605,7 +1406,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 { @@ -1627,26 +1428,6 @@ pub fn racegroup_data_animals() -> Vec { "AA_Feralisk", "AA_Junglelisk", "AACP_AnimaMegaspider", - "PW_Ariados", - "PW_Beedrill", - "PW_Butterfree", - "PW_Caterpie", - "PW_Heracross", - "PW_Kakuna", - "PW_Ledian", - "PW_Ledyba", - "PW_Metapod", - "PW_Paras", - "PW_Parasect", - "PW_Pineco", - "PW_Pinsir", - "PW_Scizor", - "PW_Scyther", - "PW_Spinarak", - "PW_Venomoth", - "PW_Venonat", - "PW_Weedle", - "PW_Yanma", "Meganeura", "Spiderant", ], @@ -1658,7 +1439,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![ @@ -1673,7 +1454,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