rjw-race-support-AsmodeusRex/generator/src/racegroups.rs

1460 lines
28 KiB
Rust

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<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 {
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<bool>,
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}>
<li>{content}</li>
</{tag}>")
}
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<li>{race}</li>"));
}
let fields = match group.egg_implant {
Some(imp) => {
match imp {
true => "<oviPregnancy>true</oviPregnancy>\n\t\t<ImplantEggs>true</ImplantEggs>\n\t\t".to_string(),
false => "<oviPregnancy>true</oviPregnancy>\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 = "
<rjw.RaceGroupDef>
<defName>{name}</defName>
<raceNames>{races}
</raceNames>
{anus}
{f_breasts}
{f_genitals}
{m_breasts}
{m_genitals}
{tag}
{fields}<raceSexDrive>{sex_drive}</raceSexDrive>
</rjw.RaceGroupDef>\n";
pub fn racegroup_data_humans() -> Vec<RaceGroup> {
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<RaceGroup> {
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),
},
]
}