diff --git a/ReadMe.md b/ReadMe.md
index 67e2adb..f9539f6 100644
--- a/ReadMe.md
+++ b/ReadMe.md
@@ -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)
diff --git a/changelog.txt b/changelog.txt
index 4d19124..a2a12ff 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -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
diff --git a/generator/src/racegroups.rs b/generator/src/racegroups.rs
index 1db2576..ca3a66d 100644
--- a/generator/src/racegroups.rs
+++ b/generator/src/racegroups.rs
@@ -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
{race}"));
}
+
let fields = match group.egg_implant {
true => "true\n\t\ttrue\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 = "".to_string();
+ f_genital = "".to_string();
+ format!("\n\t\t{}", !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}{sex_drive}
+ {fields}{sex_drive}{gendered}
\n";
pub fn racegroup_data_humans() -> Vec {
@@ -146,12 +166,6 @@ pub fn racegroup_data_humans() -> Vec {
"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 {
"Ooka_Miko",
"TrollRace",
],
- "Skin", "1",
+ "Skin", "1", true,
"Breasts",
"",
("", ""),
@@ -177,7 +191,7 @@ pub fn racegroup_data_humans() -> Vec {
"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 {
"ATK_Avianmorph",
"Harpy",
],
- "Feathers", "0.9",
+ "Feathers", "0.9", true,
"FeaturelessChest",
"Cloacal",
("Cloacal", "Cloacal"),
@@ -199,7 +213,7 @@ pub fn racegroup_data_humans() -> Vec {
"WoW_Pandaren",
"BearMan",
],
- "Fur", "0.9",
+ "Fur", "0.9", true,
"Breasts",
"",
("", "Bear"),
@@ -214,7 +228,7 @@ pub fn racegroup_data_humans() -> Vec {
"siro",
"WolfMan",
],
- "Fur", "1",
+ "Fur", "1", true,
"Breasts",
"",
("Dog", "Dog"),
@@ -233,7 +247,7 @@ pub fn racegroup_data_humans() -> Vec {
"Yokai_NineTailWhite",
"FoxMan",
],
- "Fur", "1.3",
+ "Fur", "1.3", true,
"Breasts",
"",
("Dog", "Dog"),
@@ -245,7 +259,7 @@ pub fn racegroup_data_humans() -> Vec {
"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 {
"GazelleMan",
"Lliscean",
],
- "Fur", "1",
+ "Fur", "1", true,
"Breasts",
"",
("Narrow", "Needle"),
@@ -271,7 +285,7 @@ pub fn racegroup_data_humans() -> Vec {
"Raptor",
"Tyrannosaur",
],
- "Scales", "0.9",
+ "Scales", "0.9", true,
"ScaleBreasts",
"Cloacal",
("Cloacal", "Dino"),
@@ -292,13 +306,12 @@ pub fn racegroup_data_humans() -> Vec {
"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 {
vec![
"ElephantMan",
],
- "Fur", "1",
+ "Fur", "1", true,
"Breasts",
"",
("Elephant", "Elephant"),
@@ -320,7 +333,7 @@ pub fn racegroup_data_humans() -> Vec {
"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 {
"WoW_NightElf",
"ElfRace",
],
- "Skin", "1.1",
+ "Skin", "1.1", true,
"Breasts",
"Elf",
("Elf", "Elf"),
@@ -378,7 +391,7 @@ pub fn racegroup_data_humans() -> Vec {
"Maidnukos",
"miko",
],
- "Fur", "1",
+ "Fur", "1", true,
"Breasts",
"Feline",
("Cat", "Cat"),
@@ -405,7 +418,7 @@ pub fn racegroup_data_humans() -> Vec {
"PW_Staryu",
"IkquanRace",
],
- "Scales", "0.8",
+ "Scales", "0.8", true,
"FeaturelessChest",
"Cloacal",
("Cloacal", "Marine"),
@@ -422,7 +435,7 @@ pub fn racegroup_data_humans() -> Vec {
"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 {
"Ghoul",
"GlowingGhoul",
],
- "Demon", "0.5",
+ "Demon", "0.5", true,
"GhoulBreasts",
"Ghoul",
("Ghoul", "Ghoul"),
@@ -443,7 +456,7 @@ pub fn racegroup_data_humans() -> Vec {
vec![
"Alien_Kijin",
],
- "Skin", "1.4",
+ "Skin", "1.4", true,
"Horny_Breasts",
"",
("Horny_", "Horny_"),
@@ -466,7 +479,7 @@ pub fn racegroup_data_humans() -> Vec {
"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 {
"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 {
vec![
"PigMan",
],
- "Fur", "1",
+ "Fur", "1", true,
"Breasts",
"",
("Pig", "Pig"),
@@ -506,7 +519,7 @@ pub fn racegroup_data_humans() -> Vec {
"RaccoonMan",
"StarWarsRaces_Ewok",
],
- "Fur", "1.1",
+ "Fur", "1.1", true,
"Breasts",
"",
("", "Raccoon"),
@@ -522,7 +535,7 @@ pub fn racegroup_data_humans() -> Vec {
"Yokai_Samia",
"Naga",
],
- "Scales", "0.9",
+ "Scales", "0.9", true,
"ScaleBreasts",
"Cloacal",
("Cloacal", "Hemi"),
@@ -543,7 +556,7 @@ pub fn racegroup_data_humans() -> Vec {
"Rotti",
"Rabbie",
],
- "Fur", "1.3",
+ "Fur", "1.3", true,
"Petite_Breasts",
"Petite_",
("Rodent", "Rodent"),
@@ -553,7 +566,7 @@ pub fn racegroup_data_humans() -> Vec {
vec![
"Thrumkin",
],
- "Fur", "1.2",
+ "Fur", "1.2", true,
"Breasts",
"Cloacal",
("Cloacal", "Dragon")
@@ -585,7 +598,7 @@ pub fn racegroup_data_humans() -> Vec {
"PW_Vileplume",
"PW_Weepinbell",
],
- "Plant", "1",
+ "Plant", "1", true,
"TreeBreasts",
"Tree",
("Tree", "Tree"),
@@ -609,6 +622,7 @@ pub fn racegroup_data_humans() -> Vec {
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 {
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 {
"Yokai_IssunAnimal",
"Andrewsarchus",
],
- "Fur", "1",
+ "Fur", "1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Mammal"),
@@ -672,7 +687,7 @@ pub fn racegroup_data_animals() -> Vec {
"Dinopithecus",
"Gigantopithecus",
],
- "Fur", "1.1",
+ "Fur", "1.1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Monkey"),
@@ -721,7 +736,7 @@ pub fn racegroup_data_animals() -> Vec {
"Arthropleura",
"Pulmonoscorpius",
],
- "Chitin", "0.7",
+ "Chitin", "0.7", true,
"",
"Insect",
("Ovipore", "Aedeagus"),
@@ -798,7 +813,7 @@ pub fn racegroup_data_animals() -> Vec {
"Palaeeudyptes",
"Titanis",
],
- "Feathers", "0.8",
+ "Feathers", "0.8", true,
"",
"Cloacal",
("Cloacal", "Cloacal"),
@@ -874,7 +889,7 @@ pub fn racegroup_data_animals() -> Vec {
"Omnicron",
"Fuzztino",
],
- "Fur", "1",
+ "Fur", "1", true,
"MammalBreasts",
"Dog",
("Dog", "Dog"),
@@ -884,7 +899,7 @@ pub fn racegroup_data_animals() -> Vec {
vec![
"AA_RipperHound",
],
- "Skin", "0.9",
+ "Skin", "0.9", true,
"MammalBreasts",
"Dog",
("Dog", "Dog"),
@@ -905,7 +920,7 @@ pub fn racegroup_data_animals() -> Vec {
"PW_Stantler",
"RG-WF_WastelandDeer",
],
- "Fur", "1",
+ "Fur", "1", true,
"MammalBreasts",
"Mammal",
("Narrow", "Needle"),
@@ -922,7 +937,7 @@ pub fn racegroup_data_animals() -> Vec {
"Quinkana",
"Purussaurus",
],
- "Scales", "0.8",
+ "Scales", "0.8", true,
"",
"Cloacal",
("Cloacal", "Crocodilian"),
@@ -940,7 +955,7 @@ pub fn racegroup_data_animals() -> Vec {
"Velociraptor",
"Yutyrannus",
],
- "Feathers", "1",
+ "Feathers", "1", true,
"",
"Cloacal",
("Cloacal", "Dino"),
@@ -980,7 +995,7 @@ pub fn racegroup_data_animals() -> Vec {
"TyrannosaurusRex",
"Utahraptor",
],
- "Scales", "1",
+ "Scales", "1", true,
"",
"Cloacal",
("Cloacal", "Dino"),
@@ -1017,7 +1032,7 @@ pub fn racegroup_data_animals() -> Vec {
"Mystogen",
"Voltaic",
],
- "Scales", "1.2",
+ "Scales", "1.2", true,
"",
"Cloacal",
("Cloacal", "Dragon"),
@@ -1043,7 +1058,7 @@ pub fn racegroup_data_animals() -> Vec {
"WoollyMammoth",
"Zygolophodon",
],
- "Fur", "0.9",
+ "Fur", "0.9", true,
"MammalBreasts",
"Mammal",
("Elephant", "Elephant"),
@@ -1098,13 +1113,12 @@ pub fn racegroup_data_animals() -> Vec {
"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 {
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 {
"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 {
"PW_Seel",
"Gomphotaria",
],
- "Fur", "0.9",
+ "Fur", "0.9", true,
"MammalBreasts",
"Mammal",
("Mammal", "Marine"),
@@ -1190,7 +1245,7 @@ pub fn racegroup_data_animals() -> Vec {
"AEXP_Kangaroo",
"Procoptodon",
],
- "Fur", "1",
+ "Fur", "1", true,
"MammalBreasts",
"Cloacal",
("Cloacal", "Cloacal"),
@@ -1205,7 +1260,7 @@ pub fn racegroup_data_animals() -> Vec {
"PW_Dugtrio",
"Diprotodon",
],
- "Fur", "1",
+ "Fur", "1", true,
"MammalBreasts",
"Cloacal",
("Cloacal", "Hemi"),
@@ -1219,7 +1274,7 @@ pub fn racegroup_data_animals() -> Vec {
"OG_Squig_Oily",
"OG_Snotling",
],
- "Skin", "1",
+ "Skin", "1", true,
"MammalBreasts",
"Orc",
("Orc", "Orc"),
@@ -1243,7 +1298,7 @@ pub fn racegroup_data_animals() -> Vec {
"MM_ErymanthianBoar",
"Daeodon",
],
- "Fur", "1",
+ "Fur", "1", true,
"MammalBreasts",
"Mammal",
("Pig", "Pig"),
@@ -1254,7 +1309,7 @@ pub fn racegroup_data_animals() -> Vec {
"ACPDuckBilledPlatypus",
"AEXP_Platypus",
],
- "Fur", "0.9",
+ "Fur", "0.9", true,
"MammalBreasts",
"Cloacal",
("Cloacal", "Cloacal"),
@@ -1278,7 +1333,7 @@ pub fn racegroup_data_animals() -> Vec {
"PW_Sneasel",
"Enhydriodon",
],
- "Fur", "1",
+ "Fur", "1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Raccoon"),
@@ -1322,7 +1377,7 @@ pub fn racegroup_data_animals() -> Vec {
"Rakk",
"Titanoboa",
],
- "Scales", "0.8",
+ "Scales", "0.8", true,
"",
"Cloacal",
("Cloacal", "Hemi"),
@@ -1399,7 +1454,7 @@ pub fn racegroup_data_animals() -> Vec {
"Josephoartigasia",
"Pika",
],
- "Fur", "1.1",
+ "Fur", "1.1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Rodent"),
@@ -1415,7 +1470,7 @@ pub fn racegroup_data_animals() -> Vec {
"PW_Tentacool",
"PW_Tentacruel",
],
- "Slime", "0.8",
+ "Slime", "0.8", true,
"",
"Cloacal",
("Cloacal", "Tentacle"),
@@ -1439,7 +1494,7 @@ pub fn racegroup_data_animals() -> Vec {
"Archothrumbo",
"RoyalThrumbo",
],
- "Fur", "1",
+ "Fur", "1", true,
"MammalBreasts",
"Cloacal",
("Cloacal", "Dragon"),
@@ -1457,7 +1512,7 @@ pub fn racegroup_data_animals() -> Vec {
"Archotortoise",
"Megalochelys",
],
- "Scales", "0.8",
+ "Scales", "0.8", true,
"",
"Cloacal",
("Cloacal", "Turtle"),
@@ -1489,7 +1544,7 @@ pub fn racegroup_data_animals() -> Vec {
"AnimaBear",
"ShortfacedBear",
],
- "Fur", "1",
+ "Fur", "1", true,
"MammalBreasts",
"Mammal",
("Mammal", "Bear"),
@@ -1500,7 +1555,7 @@ pub fn racegroup_data_animals() -> Vec {
vec![
"AA_SandProwler",
],
- "Scales", "1",
+ "Scales", "1", true,
"CatBreasts",
"Feline",
("Cat", "Cat"),
@@ -1605,6 +1660,7 @@ pub fn racegroup_data_animals() -> Vec {
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 {
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 {
m_genitals: "OvipositorM".to_string(),
tag: "Chitin".to_string(),
sex_drive: "1.5".to_string(),
+ gendered: true,
egg_implant: true,
},
]