Add gender to constructor

This commit is contained in:
AsmodeusRex 2022-12-16 21:03:37 -08:00
parent 1538712ffa
commit bde44382e5
3 changed files with 128 additions and 70 deletions

View File

@ -115,11 +115,8 @@ This mod requires RJW and must be placed somewhere below it.
* FCP dogmeat
* Alpha mythology
### Test and improve
* Emperor of dragon
* Gods of elona
* Race to the rim
* Ooka miko
* kemomimihouse
* Dragon's descent crossbreeding
## Thanks
* Ed86 (for Maintaining RJW)

View File

@ -1,3 +1,6 @@
11.3.1
-Fixed Emperor of dragon, Gods of elona, Ooka miko, and kemomimihouse
11.3.0
-Fixed some viviparous species laying chicken eggs
-Added PokeWorld support

View File

@ -11,6 +11,7 @@ pub struct RaceGroup {
pub m_genitals: String,
pub tag: String,
pub sex_drive: String,
pub gendered: bool,
pub egg_implant: bool,
}
@ -20,6 +21,7 @@ impl RaceGroup {
races: Vec<&'static str>,
tag: &'static str,
sex_drive: &'static str,
gendered: bool,
breasts: &'static str,
anus: &'static str,
genitals: (&'static str, &'static str)
@ -34,6 +36,7 @@ impl RaceGroup {
m_genitals: format!("{}Penis", genitals.1),
tag: tag.to_string(),
sex_drive: sex_drive.to_string(),
gendered,
egg_implant: false,
}
}
@ -42,6 +45,7 @@ impl RaceGroup {
races: Vec<&'static str>,
tag: &'static str,
sex_drive: &'static str,
gendered: bool,
breasts: &'static str,
anus: &'static str,
genitals: (&'static str, &'static str)
@ -56,6 +60,7 @@ impl RaceGroup {
m_genitals: format!("{}Penis", genitals.1),
tag: tag.to_string(),
sex_drive: sex_drive.to_string(),
gendered,
egg_implant: false,
}
}
@ -72,22 +77,37 @@ fn tagify(content: &str, tag: &str) -> String {
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 f_breasts = tagify(&group.f_breasts, "femaleBreasts");
let mut f_genital = tagify(&group.f_genitals, "femaleGenitals");
let gender = match !group.gendered {
true => {
f_breasts = "<femaleBreasts />".to_string();
f_genital = "<femaleGenitals />".to_string();
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")),
("{f_breasts}", f_breasts),
("{f_genitals}", f_genital),
("{m_breasts}", tagify(&group.m_breasts, "maleBreasts")),
("{m_genitals}", tagify(&group.m_genitals, "maleGenitals")),
("{tag}", tagify(&group.tag, "tags")),
("{gendered}", gender),
("{sex_drive}", group.sex_drive.clone()),
("{races}", races),
("{fields}", fields)
@ -109,7 +129,7 @@ const RACEGROUP_STRING: &'static str = "
{m_breasts}
{m_genitals}
{tag}
{fields}<raceSexDrive>{sex_drive}</raceSexDrive>
{fields}<raceSexDrive>{sex_drive}</raceSexDrive>{gendered}
</rjw.RaceGroupDef>\n";
pub fn racegroup_data_humans() -> Vec<RaceGroup> {
@ -146,12 +166,6 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"Yokai_Yamanba",
"Yokai_YukiShizuku",
"DwarfRace",
"eCutefairy",
"eDefender",
"eGoldenknight",
"eGwen",
"eYoungercatsister",
"eYoungersister",
"HorrorsInfestedHuman",
"HorrorsOverlord",
"Elona_Imouto",
@ -160,7 +174,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"Ooka_Miko",
"TrollRace",
],
"Skin", "1",
"Skin", "1", true,
"Breasts",
"",
("", ""),
@ -177,7 +191,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"Races_BlackWidow",
"Yokai_JorouGumo",
],
"Chitin", "0.8",
"Chitin", "0.8", true,
"Breasts",
"Insect",
("Ovipore", "Aedeagus"),
@ -188,7 +202,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"ATK_Avianmorph",
"Harpy",
],
"Feathers", "0.9",
"Feathers", "0.9", true,
"FeaturelessChest",
"Cloacal",
("Cloacal", "Cloacal"),
@ -199,7 +213,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"WoW_Pandaren",
"BearMan",
],
"Fur", "0.9",
"Fur", "0.9", true,
"Breasts",
"",
("", "Bear"),
@ -214,7 +228,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"siro",
"WolfMan",
],
"Fur", "1",
"Fur", "1", true,
"Breasts",
"",
("Dog", "Dog"),
@ -233,7 +247,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"Yokai_NineTailWhite",
"FoxMan",
],
"Fur", "1.3",
"Fur", "1.3", true,
"Breasts",
"",
("Dog", "Dog"),
@ -245,7 +259,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"SSD_DeathclawRace",
"Races_Lizardman",
],
"Scales", "0.9",
"Scales", "0.9", true,
"ScaleBreasts",
"Cloacal",
("Cloacal", "Crocodilian"),
@ -260,7 +274,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"GazelleMan",
"Lliscean",
],
"Fur", "1",
"Fur", "1", true,
"Breasts",
"",
("Narrow", "Needle"),
@ -271,7 +285,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"Raptor",
"Tyrannosaur",
],
"Scales", "0.9",
"Scales", "0.9", true,
"ScaleBreasts",
"Cloacal",
("Cloacal", "Dino"),
@ -292,13 +306,12 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"Yokai_Tenaga",
"Yokai_TenagaH",
"Yokai_TubakiAnimal",
"EmperorDragon",
"HalfDragon",
"Dragon_Kilhn",
"ALapelli",
"yuki",
],
"Scales", "1.2",
"Scales", "1.2", true,
"ScaleBreasts",
"Cloacal",
("Cloacal", "Dragon")
@ -308,7 +321,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
vec![
"ElephantMan",
],
"Fur", "1",
"Fur", "1", true,
"Breasts",
"",
("Elephant", "Elephant"),
@ -320,7 +333,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"kon",
"Vulpes",
],
"Fur", "1.3",
"Fur", "1.3", true,
"Petite_FoxGirl_Breasts",
"Petite_FoxGirl_",
("Petite_FoxGirl_", ""),
@ -357,7 +370,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"WoW_NightElf",
"ElfRace",
],
"Skin", "1.1",
"Skin", "1.1", true,
"Breasts",
"Elf",
("Elf", "Elf"),
@ -378,7 +391,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"Maidnukos",
"miko",
],
"Fur", "1",
"Fur", "1", true,
"Breasts",
"Feline",
("Cat", "Cat"),
@ -405,7 +418,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"PW_Staryu",
"IkquanRace",
],
"Scales", "0.8",
"Scales", "0.8", true,
"FeaturelessChest",
"Cloacal",
("Cloacal", "Marine"),
@ -422,7 +435,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"PW_Misdreavus",
"WoW_Skeleton",
],
"Demon", "0.5",
"Demon", "0.5", true,
"GhostBreasts",
"Ghost",
("Ghost", "Ghost"),
@ -433,7 +446,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"Ghoul",
"GlowingGhoul",
],
"Demon", "0.5",
"Demon", "0.5", true,
"GhoulBreasts",
"Ghoul",
("Ghoul", "Ghoul"),
@ -443,7 +456,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
vec![
"Alien_Kijin",
],
"Skin", "1.4",
"Skin", "1.4", true,
"Horny_Breasts",
"",
("Horny_", "Horny_"),
@ -466,7 +479,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"OG_Alien_Grot",
"WoW_Orc",
],
"Skin", "1.3",
"Skin", "1.3", true,
"OrcBreasts",
"Orc",
("Orc", "Orc"),
@ -485,7 +498,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"Alien_ZPEquium",
"WoW_Draenei",
],
"Fur", "1.2",
"Fur", "1.2", true,
"Breasts",
"Horse",
("Horse", "Horse"),
@ -495,7 +508,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
vec![
"PigMan",
],
"Fur", "1",
"Fur", "1", true,
"Breasts",
"",
("Pig", "Pig"),
@ -506,7 +519,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"RaccoonMan",
"StarWarsRaces_Ewok",
],
"Fur", "1.1",
"Fur", "1.1", true,
"Breasts",
"",
("", "Raccoon"),
@ -522,7 +535,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"Yokai_Samia",
"Naga",
],
"Scales", "0.9",
"Scales", "0.9", true,
"ScaleBreasts",
"Cloacal",
("Cloacal", "Hemi"),
@ -543,7 +556,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"Rotti",
"Rabbie",
],
"Fur", "1.3",
"Fur", "1.3", true,
"Petite_Breasts",
"Petite_",
("Rodent", "Rodent"),
@ -553,7 +566,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
vec![
"Thrumkin",
],
"Fur", "1.2",
"Fur", "1.2", true,
"Breasts",
"Cloacal",
("Cloacal", "Dragon")
@ -585,7 +598,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
"PW_Vileplume",
"PW_Weepinbell",
],
"Plant", "1",
"Plant", "1", true,
"TreeBreasts",
"Tree",
("Tree", "Tree"),
@ -609,6 +622,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
m_genitals: "BovinePenis".to_string(),
tag: "Fur".to_string(),
sex_drive: "1".to_string(),
gendered: true,
egg_implant: false,
},
RaceGroup {
@ -632,6 +646,7 @@ pub fn racegroup_data_humans() -> Vec<RaceGroup> {
m_genitals: "SlimeTentacles".to_string(),
tag: "Slime".to_string(),
sex_drive: "1".to_string(),
gendered: true,
egg_implant: false,
},
]
@ -649,7 +664,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"Yokai_IssunAnimal",
"Andrewsarchus",
],
"Fur", "1",
"Fur", "1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Mammal"),
@ -672,7 +687,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"Dinopithecus",
"Gigantopithecus",
],
"Fur", "1.1",
"Fur", "1.1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Monkey"),
@ -721,7 +736,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"Arthropleura",
"Pulmonoscorpius",
],
"Chitin", "0.7",
"Chitin", "0.7", true,
"",
"Insect",
("Ovipore", "Aedeagus"),
@ -798,7 +813,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"Palaeeudyptes",
"Titanis",
],
"Feathers", "0.8",
"Feathers", "0.8", true,
"",
"Cloacal",
("Cloacal", "Cloacal"),
@ -874,7 +889,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"Omnicron",
"Fuzztino",
],
"Fur", "1",
"Fur", "1", true,
"MammalBreasts",
"Dog",
("Dog", "Dog"),
@ -884,7 +899,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
vec![
"AA_RipperHound",
],
"Skin", "0.9",
"Skin", "0.9", true,
"MammalBreasts",
"Dog",
("Dog", "Dog"),
@ -905,7 +920,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"PW_Stantler",
"RG-WF_WastelandDeer",
],
"Fur", "1",
"Fur", "1", true,
"MammalBreasts",
"Mammal",
("Narrow", "Needle"),
@ -922,7 +937,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"Quinkana",
"Purussaurus",
],
"Scales", "0.8",
"Scales", "0.8", true,
"",
"Cloacal",
("Cloacal", "Crocodilian"),
@ -940,7 +955,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"Velociraptor",
"Yutyrannus",
],
"Feathers", "1",
"Feathers", "1", true,
"",
"Cloacal",
("Cloacal", "Dino"),
@ -980,7 +995,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"TyrannosaurusRex",
"Utahraptor",
],
"Scales", "1",
"Scales", "1", true,
"",
"Cloacal",
("Cloacal", "Dino"),
@ -1017,7 +1032,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"Mystogen",
"Voltaic",
],
"Scales", "1.2",
"Scales", "1.2", true,
"",
"Cloacal",
("Cloacal", "Dragon"),
@ -1043,7 +1058,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"WoollyMammoth",
"Zygolophodon",
],
"Fur", "0.9",
"Fur", "0.9", true,
"MammalBreasts",
"Mammal",
("Elephant", "Elephant"),
@ -1098,13 +1113,12 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"PW_Persian",
"Carnagrius",
"Dinocrocuta",
"eBlackcat",
"Jeeta",
"Pallas_cat",
"Smilodon",
"Snow_leopard",
],
"Fur", "1",
"Fur", "1", true,
"CatBreasts",
"Feline",
("Cat", "Cat"),
@ -1114,7 +1128,17 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
vec![
"AEXP_Hyena",
],
"Fur", "1.3",
"Fur", "1.3", true,
"CatBreasts",
"Feline",
("Cat", "Cat"),
),
RaceGroup::standard_animal(
"FelineSingleGender",
vec![
"eBlackcat",
],
"Fur", "1", false,
"CatBreasts",
"Feline",
("Cat", "Cat"),
@ -1159,11 +1183,42 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"Paraceratherium",
"Uintatherium",
],
"Fur", "1",
"Fur", "1", true,
"MammalBreasts",
"Horse",
("Horse", "Horse"),
),
RaceGroup::standard_animal(
"HumanlikeGenderless",
vec![
"eCutefairy",
"eDefender",
"eGoldenknight",
"eGwen",
"eYoungercatsister",
"eYoungersister",
"EmperorDragon",
"akame",
"aome",
"baier",
"buer",
"hana",
"jiaer",
"juer",
"kohime",
"kon",
"kuoer",
"kuro",
"miko",
"siro",
"yuki",
"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",
@ -1179,7 +1234,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"PW_Seel",
"Gomphotaria",
],
"Fur", "0.9",
"Fur", "0.9", true,
"MammalBreasts",
"Mammal",
("Mammal", "Marine"),
@ -1190,7 +1245,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"AEXP_Kangaroo",
"Procoptodon",
],
"Fur", "1",
"Fur", "1", true,
"MammalBreasts",
"Cloacal",
("Cloacal", "Cloacal"),
@ -1205,7 +1260,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"PW_Dugtrio",
"Diprotodon",
],
"Fur", "1",
"Fur", "1", true,
"MammalBreasts",
"Cloacal",
("Cloacal", "Hemi"),
@ -1219,7 +1274,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"OG_Squig_Oily",
"OG_Snotling",
],
"Skin", "1",
"Skin", "1", true,
"MammalBreasts",
"Orc",
("Orc", "Orc"),
@ -1243,7 +1298,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"MM_ErymanthianBoar",
"Daeodon",
],
"Fur", "1",
"Fur", "1", true,
"MammalBreasts",
"Mammal",
("Pig", "Pig"),
@ -1254,7 +1309,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"ACPDuckBilledPlatypus",
"AEXP_Platypus",
],
"Fur", "0.9",
"Fur", "0.9", true,
"MammalBreasts",
"Cloacal",
("Cloacal", "Cloacal"),
@ -1278,7 +1333,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"PW_Sneasel",
"Enhydriodon",
],
"Fur", "1",
"Fur", "1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Raccoon"),
@ -1322,7 +1377,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"Rakk",
"Titanoboa",
],
"Scales", "0.8",
"Scales", "0.8", true,
"",
"Cloacal",
("Cloacal", "Hemi"),
@ -1399,7 +1454,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"Josephoartigasia",
"Pika",
],
"Fur", "1.1",
"Fur", "1.1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Rodent"),
@ -1415,7 +1470,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"PW_Tentacool",
"PW_Tentacruel",
],
"Slime", "0.8",
"Slime", "0.8", true,
"",
"Cloacal",
("Cloacal", "Tentacle"),
@ -1439,7 +1494,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"Archothrumbo",
"RoyalThrumbo",
],
"Fur", "1",
"Fur", "1", true,
"MammalBreasts",
"Cloacal",
("Cloacal", "Dragon"),
@ -1457,7 +1512,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"Archotortoise",
"Megalochelys",
],
"Scales", "0.8",
"Scales", "0.8", true,
"",
"Cloacal",
("Cloacal", "Turtle"),
@ -1489,7 +1544,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
"AnimaBear",
"ShortfacedBear",
],
"Fur", "1",
"Fur", "1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Bear"),
@ -1500,7 +1555,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
vec![
"AA_SandProwler",
],
"Scales", "1",
"Scales", "1", true,
"CatBreasts",
"Feline",
("Cat", "Cat"),
@ -1605,6 +1660,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
m_genitals: "BovinePenis".to_string(),
tag: "Fur".to_string(),
sex_drive: "1".to_string(),
gendered: true,
egg_implant: false,
},
// Arthropods that reproduce through oviposition
@ -1658,6 +1714,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
m_genitals: "OvipositorM".to_string(),
tag: "Chitin".to_string(),
sex_drive: "1".to_string(),
gendered: true,
egg_implant: true,
},
RaceGroup {
@ -1673,6 +1730,7 @@ pub fn racegroup_data_animals() -> Vec<RaceGroup> {
m_genitals: "OvipositorM".to_string(),
tag: "Chitin".to_string(),
sex_drive: "1.5".to_string(),
gendered: true,
egg_implant: true,
},
]