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

1792 lines
34 KiB
Rust

use std::collections::HashMap;
#[derive(Clone, Debug)]
pub struct RaceGroup {
pub name: String,
pub races: Vec<&'static str>,
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 gendered: bool,
pub egg_implant: bool,
}
impl RaceGroup {
fn standard(
species: &'static str,
races: Vec<&'static str>,
tag: &'static str,
sex_drive: &'static str,
gendered: bool,
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(),
gendered,
egg_implant: false,
}
}
fn standard_animal(
species: &'static str,
races: Vec<&'static str>,
tag: &'static str,
sex_drive: &'static str,
gendered: 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(),
gendered,
egg_implant: false,
}
}
}
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 {
true => "<oviPregnancy>true</oviPregnancy>\n\t\t<ImplantEggs>true</ImplantEggs>\n\t\t".to_string(),
false => String::new()
};
let mut m_breasts = group.m_breasts.clone();
let mut m_genital = group.m_genitals.clone();
let gender = match !group.gendered {
true => {
m_breasts = String::new();
m_genital = String::new();
format!("\n\t\t<hasSingleGender>{}</hasSingleGender>", !group.gendered)
},
false => 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(&m_breasts, "maleBreasts")),
("{m_genitals}", tagify(&m_genital, "maleGenitals")),
("{tag}", tagify(&group.tag, "tags")),
("{gendered}", gender),
("{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>{gendered}
</rjw.RaceGroupDef>\n";
pub fn racegroup_data_humans() -> Vec<RaceGroup> {
vec![
RaceGroup::standard(
"Human",
vec![
"AA_Mime",
"Alien_Goblin",
"Alien_Dirach",
"Alien_Fimm",
"Alien_Meargh",
"Alien_Moyo",
"Alien_Shearl",
"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",
"DwarfRace",
"HorrorsInfestedHuman",
"HorrorsOverlord",
"Elona_Imouto",
"Giant",
"Shoujo",
"Ooka_Miko",
"TrollRace",
],
"Skin", "1", true,
"Breasts",
"",
("", ""),
),
RaceGroup::standard(
"Arthropod",
vec![
"Alien_Beetle",
"Alien_Mantis",
"Ant_AntiniumRace",
"Arachne",
"KlickmalaRace",
"Poleepkwa",
"Races_BlackWidow",
"Yokai_JorouGumo",
],
"Chitin", "0.8", true,
"Breasts",
"Insect",
("Ovipore", "Aedeagus"),
),
RaceGroup::standard(
"Avian",
vec![
"ATK_Avianmorph",
"Harpy",
],
"Feathers", "0.9", true,
"FeaturelessChest",
"Cloacal",
("Cloacal", "Cloacal"),
),
RaceGroup::standard(
"Bear",
vec![
"WoW_Pandaren",
"BearMan",
],
"Fur", "0.9", true,
"Breasts",
"",
("", "Bear"),
),
RaceGroup::standard(
"Canine",
vec![
"ATK_Caninemorph",
"WoW_Worgen",
"Lupaios",
"kuro",
"siro",
"WolfMan",
],
"Fur", "1", true,
"Breasts",
"",
("Dog", "Dog"),
),
// For foxes, hyenas, werewolves, etc (hyenas are felines oops)
RaceGroup::standard(
"CanineHighSex",
vec![
"ATK_Gnollmorph",
"ATK_Vulpinemorph",
"Alien_Fennex",
"Alien_Frijjid",
"StarWarsRaces_Wookie",
"WMH_Werewolf",
"Yokai_NineTail",
"Yokai_NineTailWhite",
"FoxMan",
],
"Fur", "1.3", true,
"Breasts",
"",
("Dog", "Dog"),
),
RaceGroup::standard(
"Crocodilian",
vec![
"Alien_Argonian",
"SSD_DeathclawRace",
"Races_Lizardman",
],
"Scales", "0.9", true,
"ScaleBreasts",
"Cloacal",
("Cloacal", "Crocodilian"),
),
RaceGroup::standard(
"Deer",
vec![
"ATK_Cervinemorph",
"CamelMan",
"CamelPerson",
"ElkMan",
"GazelleMan",
"Lliscean",
],
"Fur", "1", true,
"Breasts",
"",
("Narrow", "Needle"),
),
RaceGroup::standard(
"Dino",
vec![
"Raptor",
"Tyrannosaur",
],
"Scales", "0.9", true,
"ScaleBreasts",
"Cloacal",
("Cloacal", "Dino"),
),
RaceGroup::standard(
"Dragon",
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",
"HalfDragon",
"Dragon_Kilhn",
"ALapelli",
"yuki",
],
"Scales", "1.2", true,
"ScaleBreasts",
"Cloacal",
("Cloacal", "Dragon")
),
RaceGroup::standard(
"Elephant",
vec![
"ElephantMan",
],
"Fur", "1", true,
"Breasts",
"",
("Elephant", "Elephant"),
),
RaceGroup::standard(
"FoxGirl",
vec![
"Alien_Hisa",
"kon",
"Vulpes",
],
"Fur", "1.3", true,
"Petite_FoxGirl_Breasts",
"Petite_FoxGirl_",
("Petite_FoxGirl_", ""),
),
RaceGroup::standard(
"Elf",
vec![
"AS_WHE_Race",
"Alien_Astoriel",
"Alien_Drow_Otto",
"Alien_Eldar",
"O21_Alien_DarkElf",
"O21_Alien_MoonElf",
"O21_Alien_SunElf",
"O21_Alien_WoodElf",
"O21_FR_DarkElf",
"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",
"ElfRace",
],
"Skin", "1.1", true,
"Breasts",
"Elf",
("Elf", "Elf"),
),
RaceGroup::standard(
"Feline",
vec![
"Alien_Nyaron",
"ATK_Felinemorph",
"YanzihkoCheetah",
"YanzihkoJaguar",
"YanzihkoLeo",
"YanzihkoPanther",
"YanzihkoTigris",
"Yokai_NekoMusume",
"GuardianBast",
"LynxMan",
"Maidnukos",
"miko",
],
"Fur", "1", true,
"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",
],
"Scales", "0.8", true,
"FeaturelessChest",
"Cloacal",
("Cloacal", "Marine"),
),
RaceGroup::standard(
"Ghost",
vec![
"DRSKT_Race",
"HPLovecraft_MistCreature",
"MM_WillOWisp",
"PW_Gastly",
"PW_Gengar",
"PW_Haunter",
"PW_Misdreavus",
"WoW_Skeleton",
],
"Demon", "0.5", true,
"GhostBreasts",
"Ghost",
("Ghost", "Ghost"),
),
RaceGroup::standard(
"Ghoul",
vec![
"Ghoul",
"GlowingGhoul",
],
"Demon", "0.5", true,
"GhoulBreasts",
"Ghoul",
("Ghoul", "Ghoul"),
),
RaceGroup::standard(
"Horny",
vec![
"Alien_Kijin",
],
"Skin", "1.4", true,
"Horny_Breasts",
"",
("Horny_", "Horny_"),
),
RaceGroup::standard(
"Orc",
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",
],
"Skin", "1.3", true,
"OrcBreasts",
"Orc",
("Orc", "Orc"),
),
RaceGroup::standard(
"Horse",
vec![
"Alien_Bullgor",
"Alien_Equium",
"Alien_DonkEquium",
"Alien_UniEquium",
"Alien_ZEquium",
"Alien_PEquium",
"Alien_DonkPEquium",
"Alien_UniPEquium",
"Alien_ZPEquium",
"WoW_Draenei",
],
"Fur", "1.2", true,
"Breasts",
"Horse",
("Horse", "Horse"),
),
RaceGroup::standard(
"Pig",
vec![
"PigMan",
],
"Fur", "1", true,
"Breasts",
"",
("Pig", "Pig"),
),
RaceGroup::standard(
"Raccoon",
vec![
"RaccoonMan",
"StarWarsRaces_Ewok",
],
"Fur", "1.1", true,
"Breasts",
"",
("", "Raccoon"),
),
RaceGroup::standard(
"Reptile",
vec![
"O21_Alien_Kobold",
"O21_FR_Kobold",
"Pawnbold_bold",
"StarWarsRaces_Rodian",
"Yokai_Lamia",
"Yokai_Samia",
"Naga",
],
"Scales", "0.9", true,
"ScaleBreasts",
"Cloacal",
("Cloacal", "Hemi"),
),
RaceGroup::standard(
"Rodent",
vec![
"ATK_Lagomorph",
"Alien_Skaven",
"Alien_SkavenStorm",
"Alien_SkavenMoulder",
"Alien_HornedSkaven",
"RK_KingHamster",
"Yokai_Kamaitachi",
"hana",
"Ratkin",
"Ratkin_Su",
"Rotti",
"Rabbie",
],
"Fur", "1.3", true,
"Petite_Breasts",
"Petite_",
("Rodent", "Rodent"),
),
RaceGroup::standard(
"Thrumbo",
vec![
"Thrumkin",
],
"Fur", "1.2", true,
"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",
],
"Plant", "1", true,
"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(),
gendered: true,
egg_implant: false,
},
RaceGroup {
races: vec![
"Alien_Slime",
"Alien_Slug",
"Mincho_ThingDef",
"PW_Ditto",
"PW_Grimer",
"PW_Magcargo",
"PW_Muk",
"PW_Slugma",
"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(),
gendered: true,
egg_implant: false,
},
]
}
pub fn racegroup_data_animals() -> Vec<RaceGroup> {
vec![
RaceGroup::standard_animal(
"GenericMammal",
vec![
"Megasloth",
"ACPRedPanda",
"AEXP_Pangolin",
"AEXP_RedPanda",
"Yokai_IssunAnimal",
"Andrewsarchus",
],
"Fur", "1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Mammal"),
),
RaceGroup::standard_animal(
"Ape",
vec![
"Monkey",
"AEXP_Gorilla",
"AEXP_Mandrill",
"AEXP_Lemur",
"AEXP_Bonobo",
"GR_ParagonHumanoid",
"PW_Aipom",
"PW_Electabuzz",
"PW_Lickitung",
"PW_Magmar",
"PW_Mankey",
"PW_Primeape",
"Dinopithecus",
"Gigantopithecus",
],
"Fur", "1.1", true,
"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",
"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",
"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",
"VAECaves_GiantSpiderHatchling",
"Archospider",
"Arthropleura",
"Pulmonoscorpius",
],
"Chitin", "0.7", true,
"",
"Insect",
("Ovipore", "Aedeagus"),
),
RaceGroup::standard_animal(
"Avian",
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_Chickencat",
"GR_Chickenffalo",
"GR_Chickenlope",
"GR_Chickenrabbit",
"GR_Chickenwolf",
"GR_Manchicken",
"GR_ParagonChicken",
"GR_Turkeyman",
"MM_Fenghuang",
"MM_Ieltxu",
"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",
"Archostrich",
"Dinornis",
"Palaeeudyptes",
"Titanis",
],
"Feathers", "0.8", true,
"",
"Cloacal",
("Cloacal", "Cloacal"),
),
RaceGroup::standard_animal(
"Canine",
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_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",
"Archomutt",
"AnimaWarg",
"Abaddog",
"Arctivore",
"Omnicron",
"Fuzztino",
],
"Fur", "1", true,
"MammalBreasts",
"Dog",
("Dog", "Dog"),
),
RaceGroup::standard_animal(
"CanineSingleGender",
vec![
"kon",
"konf",
"kuro",
"Ooka_Miko",
"siro",
"sirof",
],
"Fur", "1", false,
"MammalBreasts",
"Dog",
("Dog", "Dog"),
),
RaceGroup::standard_animal(
"CanineSkin",
vec![
"AA_RipperHound",
],
"Skin", "0.9", true,
"MammalBreasts",
"Dog",
("Dog", "Dog"),
),
// Most even-toed ungulates go here, obviously excluding cetaceans
RaceGroup::standard_animal(
"Cervine",
vec![
"Alpaca",
"Deer",
"Dromedary",
"Elk",
"ACPGiraffe",
"AEXP_Camel",
"AEXP_Giraffe",
"AEXP_Moose",
"PW_Girafarig",
"PW_Stantler",
"RG-WF_WastelandDeer",
],
"Fur", "1", true,
"MammalBreasts",
"Mammal",
("Narrow", "Needle"),
),
RaceGroup::standard_animal(
"Crocodilian",
vec![
"AA_RoughPlatedMonitor",
"AEXP_Alligator",
"AEXP_Crocodile",
"PW_Croconaw",
"PW_Feraligatr",
"PW_Totodile",
"Quinkana",
"Purussaurus",
],
"Scales", "0.8", true,
"",
"Cloacal",
("Cloacal", "Crocodilian"),
),
RaceGroup::standard_animal(
"DemonSingleGender",
vec![
"eBlackangel",
"eExile",
"kohime",
],
"Demon", "1", false,
"Breasts",
"",
("Demon", "Demon"),
),
RaceGroup::standard_animal(
"DinoFeathered",
vec![
"AA_PedigreedRaptor",
"PW_Aerodactyl",
"Dakotaraptor",
"Deinocheirus",
"Gallimimus",
"Gigantoraptor",
"Therizinosaurus",
"Velociraptor",
"Yutyrannus",
],
"Feathers", "1", true,
"",
"Cloacal",
("Cloacal", "Dino"),
),
RaceGroup::standard_animal(
"DinoScaled",
vec![
"PW_Cubone",
"PW_Marowak",
"PW_Kangaskhan",
"PW_Larvitar",
"PW_Tyranitar",
"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",
],
"Scales", "1", true,
"",
"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",
"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",
],
"Scales", "1.2", true,
"",
"Cloacal",
("Cloacal", "Dragon"),
),
RaceGroup::standard_animal(
"DragonSingleGender",
vec![
"yuki",
],
"Scales", "1.2", false,
"",
"Cloacal",
("Cloacal", "Dragon"),
),
RaceGroup::standard_animal(
"Elephant",
vec![
"Elephant",
"AA_Gallatross",
"AA_GallatrossMoribund",
"AEXP_AsianElephant",
"AEXP_IndianElephant",
"AEXP_Tapir",
"HC_WoollyMammoth",
"PW_Donphan",
"PW_Drowzee",
"PW_Hypno",
"PW_Phanpy",
"RG-EAP_WoollyMammoth",
"Boltusk",
"Deinotherium",
"Platybelodon",
"WoollyMammoth",
"Zygolophodon",
],
"Fur", "0.9", true,
"MammalBreasts",
"Mammal",
("Elephant", "Elephant"),
),
RaceGroup::standard_animal(
"Feline",
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_Griffin",
"MM_Manticore",
"MM_Xiezhi",
"PW_Meowth",
"PW_Persian",
"Carnagrius",
"Dinocrocuta",
"Jeeta",
"Pallas_cat",
"Smilodon",
"Snow_leopard",
],
"Fur", "1", true,
"CatBreasts",
"Feline",
("Cat", "Cat"),
),
RaceGroup::standard_animal(
"FelineHorny",
vec![
"AEXP_Hyena",
],
"Fur", "1.3", true,
"CatBreasts",
"Feline",
("Cat", "Cat"),
),
RaceGroup::standard_animal(
"FelineSingleGender",
vec![
"eBlackcat",
"eYoungercatsister",
"miko",
],
"Fur", "1", false,
"CatBreasts",
"Feline",
("Cat", "Cat"),
),
// Rhinos belong here, not with elephants, as they are odd-toed ungulates
RaceGroup::standard_animal(
"Horse",
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",
"PW_Ponyta",
"PW_Rapidash",
"PW_Rhydon",
"PW_Rhyhorn",
"RG-EAP_WoollyRhino",
"Chalicotherium",
"Elasmotherium",
"Paraceratherium",
"Uintatherium",
],
"Fur", "1", true,
"MammalBreasts",
"Horse",
("Horse", "Horse"),
),
RaceGroup::standard_animal(
"HumanlikeGenderless",
vec![
"eCutefairy",
"eDefender",
"eGoldenknight",
"eGwen",
"eYoungersister",
"EmperorDragon",
"baier",
"buer",
"jiaer",
"juer",
"kuoer",
"zhuer",
],
"Skin", "1", false,
"Breasts",
"",
("", ""),
),
// 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", true,
"MammalBreasts",
"Mammal",
("Mammal", "Marine"),
),
RaceGroup::standard_animal(
"Marsupial",
vec![
"AEXP_Kangaroo",
"Procoptodon",
],
"Fur", "1", true,
"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", true,
"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", true,
"MammalBreasts",
"Orc",
("Orc", "Orc"),
),
RaceGroup::standard_animal(
"Pig",
vec![
"Pig",
"WildBoar",
"AA_Thunderbeast",
"AA_WindBeast",
"AA_Darkbeast",
"AA_DarkVandal",
"PW_Piloswine",
"PW_Slowbro",
"PW_Slowking",
"PW_Slowpoke",
"PW_Swinub",
"ACPTapir",
"ACPPeccary",
"MM_ErymanthianBoar",
"Daeodon",
],
"Fur", "1", true,
"MammalBreasts",
"Mammal",
("Pig", "Pig"),
),
RaceGroup::standard_animal(
"Platypus",
vec![
"ACPDuckBilledPlatypus",
"AEXP_Platypus",
],
"Fur", "0.9", true,
"MammalBreasts",
"Cloacal",
("Cloacal", "Cloacal"),
),
// Mustelids
RaceGroup::standard_animal(
"Raccoon",
vec![
"Raccoon",
"ACPMegaFerret",
"ACPMegabadger",
"ACPOtter",
"ACPFerret",
"ACPHoneyBadger",
"ACPFishercat",
"ACPErmine",
"AEXP_MegaWolverine",
"AEXP_Otter",
"AEXP_Badger",
"PW_Smeargle",
"PW_Sneasel",
"Enhydriodon",
],
"Fur", "1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Raccoon"),
),
RaceGroup::standard_animal(
"Reptile",
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",
"PW_Arbok",
"PW_Ekans",
"RG-WF_WastelandDeathclaw",
"VAECaves_BlindSalamander",
"Gigantophis",
"Megalania",
"Rakk",
"Titanoboa",
],
"Scales", "0.8", true,
"",
"Cloacal",
("Cloacal", "Hemi"),
),
// Rodents and Lagomorphs
RaceGroup::standard_animal(
"Rodent",
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",
"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",
"Yokai_SpinMouse",
"Archojerboa",
"Castoroides",
"FoxSquirrel",
"Josephoartigasia",
"Pika",
],
"Fur", "1.1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Rodent"),
),
RaceGroup::standard_animal(
"RodentSingleGender",
vec![
"hana",
],
"Fur", "1.1", false,
"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", true,
"",
"Cloacal",
("Cloacal", "Tentacle"),
),
RaceGroup::standard_animal(
"Thrumbo",
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",
],
"Fur", "1", true,
"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", true,
"",
"Cloacal",
("Cloacal", "Turtle"),
),
RaceGroup::standard_animal(
"Ursine",
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",
"PW_Teddiursa",
"PW_Ursaring",
"RG-WF_WastelandBear",
"VAECaves_CaveBear",
"Archopanda",
"AnimaBear",
"ShortfacedBear",
],
"Fur", "1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Bear"),
),
// AA
RaceGroup::standard_animal(
"AA_SandProwler",
vec![
"AA_SandProwler",
],
"Scales", "1", true,
"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_Booman",
"GR_Boomcat",
"GR_Boomffalo",
"GR_Boomsquirrel",
"GR_Boomwolf",
"GR_Manalope",
"GR_Manffalo",
"GR_Muffalobear",
"GR_Muffalocat",
"GR_Muffalochicken",
"GR_Muffaloman",
"GR_Muffalope",
"GR_Muffalorat",
"GR_Muffalowolf",
"GR_ParagonBoomalope",
"GR_ParagonMuffalo",
"MM_Catoblepas",
"MM_CeryneianHind",
"MM_WildMinotaur",
"PW_Ampharos",
"PW_Flaaffy",
"PW_Mareep",
"PW_Miltank",
"PW_Tauros",
"RG-EAP-Protoceratidae",
"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(),
gendered: true,
egg_implant: false,
},
RaceGroup {
races: vec![
"akame",
"aome",
],
name: "BovineSingleGenderAnimal".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(),
gendered: false,
egg_implant: false,
},
// 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",
"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",
],
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(),
gendered: true,
egg_implant: 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(),
gendered: true,
egg_implant: true,
},
]
}