diff --git a/.gitignore b/.gitignore
index bd55167..971fc41 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,8 @@
+*.user
+
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
-
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
@@ -253,4 +254,4 @@ paket-files/
# Python Tools for Visual Studio (PTVS)
__pycache__/
-*.pyc
\ No newline at end of file
+*.pyc
diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll
index bba6d7a..2485a6c 100644
Binary files a/Common/Assemblies/Rjw-Genes.dll and b/Common/Assemblies/Rjw-Genes.dll differ
diff --git a/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml b/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml
index 4337b4e..aaf412d 100644
--- a/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml
@@ -3,6 +3,7 @@
rjw_genes_genitalia_type
+ RJW_Genes.Gene_GenitaliaType
GenitalType
@@ -21,7 +22,13 @@
equine genitalia
Carriers of this gene develop equine genitalia.
Genes/Icons/Genitalia_Equine
- RJW_Genes.Gene_EquineGenitalia
+
+
+ HorsePenis
+ HorseVagina
+ GenericAnus
+
+
802
@@ -30,7 +37,13 @@
canine genitalia
Carriers of this gene develop canine genitalia.
Genes/Icons/Genitalia_Canine
- RJW_Genes.Gene_CanineGenitalia
+
+
+ DogPenis
+ DogVagina
+ GenericAnus
+
+
803
@@ -39,7 +52,13 @@
feline genitalia
Carriers of this gene develop feline genitalia.
Genes/Icons/Genitalia_Feline
- RJW_Genes.Gene_FelineGenitalia
+
+
+ CatPenis
+ CatVagina
+ GenericAnus
+
+
804
@@ -48,7 +67,13 @@
demonic genitalia
Carriers of this gene have demonic genitalia.
Genes/Icons/Genitalia_Demon
- RJW_Genes.Gene_DemonicGenitalia
+
+
+ DemonPenis
+ DemonVagina
+ DemonAnus
+
+
805
@@ -57,7 +82,13 @@
dragon genitalia
Carriers of this gene develop dragon genitalia.
Genes/Icons/Genitalia_Draconic
- RJW_Genes.Gene_DragonGenitalia
+
+
+ DragonPenis
+ DragonVagina
+ GenericAnus
+
+
806
@@ -66,7 +97,13 @@
slime genitalia
Carriers of this gene have slime genitalia.
Genes/Icons/Slime_Genitalia
- RJW_Genes.Gene_SlimeGenitalia
+
+
+ SlimeTentacles
+ SlimeVagina
+ SlimeAnus
+
+
807
@@ -75,7 +112,13 @@
demonic tentacle genitalia
Carriers of this gene have demonic tentacle genitalia.
Genes/Icons/Genitalia_tentacle_icon
- RJW_Genes.Gene_DemonicGenitaliaTentacle
+
+
+ DemonTentaclePenis
+ DemonVagina
+ DemonAnus
+
+
807
@@ -84,7 +127,11 @@
crocodilian genitalia
Carriers of this gene have crocodilian genitalia.
Genes/Icons/Genitalia_croc_icon
- RJW_Genes.Gene_CrocodilianGenitalia
+
+
+ CrocodilianPenis
+
+
807
@@ -93,7 +140,11 @@
racoon genitalia
Carriers of this gene have racoon genitalia.
Genes/Icons/Genitalia_racoon_icon
- RJW_Genes.Gene_RacoonGenitalia
+
+
+ RaccoonPenis
+
+
807
@@ -102,7 +153,11 @@
reptilian genitalia
Carriers of this gene have reptilian genitalia.
Genes/Icons/Genitalia_hemi_icon
- RJW_Genes.Gene_ReptilianGenitalia
+
+
+ HemiPenis
+
+
807
@@ -115,7 +170,12 @@
ghost genitalia
Carriers of this gene have ghost genitalia.
Genes/Icons/Genitalia_ghost_icon
- RJW_Genes.Gene_GhostGenitalia
+
+
+ GhostPenis
+ GhostVagina
+
+
807
@@ -124,7 +184,11 @@
golem genitalia
Carriers of this gene have rocky golem genitalia.
Genes/Icons/penis_rock_icon
- RJW_Genes.Gene_GolemGenitalia
+
+
+ GolemPenis
+
+
807
@@ -133,7 +197,11 @@
marine genitalia
Carriers of this gene have marine mammal like genitalia.
Genes/Icons/Genitalia_marine_icon
- RJW_Genes.Gene_MarineGenitalia
+
+
+ MarinePenis
+
+
807
@@ -142,16 +210,25 @@
undead genitalia
Carriers of this gene have necrotic undead genitalia.
Genes/Icons/Genitalia_necro_icon
- RJW_Genes.Gene_NecroGenitalia
+
+
+ NecroPenis
+
+
807
rjw_genes_Needle_genitalia
- needle genitalia
- Carriers of this gene have marine very thin genitalia.
+ narrow genitalia
+ Carriers of this gene have very thin genitalia.
Genes/Icons/Genitalia_thin_icon
- RJW_Genes.Gene_NeedleGenitalia
+
+
+ NeedlePenis
+ NarrowVagina
+
+
807
@@ -160,7 +237,11 @@
orc genitalia
Carriers of this gene have orc genitalia.
Genes/Icons/Genitalia_orc_icon
- RJW_Genes.Gene_OrcGenitalia
+
+
+ OrcPenis
+
+
807
@@ -169,8 +250,11 @@
screw genitalia
Carriers of this gene have screw genitalia.
Genes/Icons/Genitalia_screw_icon
- RJW_Genes.Gene_PigGenitalia
- 807
+
+
+ PigPenis
+
+
@@ -178,7 +262,11 @@
alien genitalia
Carriers of this gene have alien genitalia.
Genes/Icons/Genitalia_alien_icon
- RJW_Genes.Gene_TentacleGenitalia
+
+
+ TentaclePenis
+
+
807
@@ -192,7 +280,13 @@
insect genitalia
Carriers of this gene have ovipositors similar to insects.
Genes/Icons/Ovipositor_Genitalia
- RJW_Genes.Gene_OvipositorGenitalia
+
+
+ OvipositorM
+ OvipositorF
+ InsectAnus
+
+
808
diff --git a/Source/Genes/Genitalia/Defs/GenitaliaTypeExtension.cs b/Source/Genes/Genitalia/Defs/GenitaliaTypeExtension.cs
new file mode 100644
index 0000000..fce2ded
--- /dev/null
+++ b/Source/Genes/Genitalia/Defs/GenitaliaTypeExtension.cs
@@ -0,0 +1,15 @@
+using Verse;
+using RimWorld;
+using rjw;
+
+namespace RJW_Genes
+{
+ public class GenitaliaTypeExtension : DefModExtension
+ {
+ public HediffDef_PartBase penis;
+
+ public HediffDef_PartBase vagina;
+
+ public HediffDef_PartBase anus;
+ }
+}
diff --git a/Source/Genes/Genitalia/Gene_CanineGenitalia.cs b/Source/Genes/Genitalia/Gene_CanineGenitalia.cs
deleted file mode 100644
index 01f0015..0000000
--- a/Source/Genes/Genitalia/Gene_CanineGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_CanineGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.canine_penis,Genital_Helper.canine_vagina,Genital_Helper.generic_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.canine_penis, Genital_Helper.canine_vagina, Genital_Helper.generic_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_CrocodilianGenitalia.cs b/Source/Genes/Genitalia/Gene_CrocodilianGenitalia.cs
deleted file mode 100644
index 9452382..0000000
--- a/Source/Genes/Genitalia/Gene_CrocodilianGenitalia.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Verse;
-using RimWorld;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_CrocodilianGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.crocodilian_penis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.crocodilian_penis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_DemonicGenitalia.cs b/Source/Genes/Genitalia/Gene_DemonicGenitalia.cs
deleted file mode 100644
index cc0cc29..0000000
--- a/Source/Genes/Genitalia/Gene_DemonicGenitalia.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Verse;
-using RimWorld;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_DemonicGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.demon_penis,Genital_Helper.demon_vagina,Genital_Helper.demon_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.demon_penis, Genital_Helper.demon_vagina, Genital_Helper.demon_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_DemonicGenitaliaTentacle.cs b/Source/Genes/Genitalia/Gene_DemonicGenitaliaTentacle.cs
deleted file mode 100644
index 2fc1f83..0000000
--- a/Source/Genes/Genitalia/Gene_DemonicGenitaliaTentacle.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Verse;
-using RimWorld;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_DemonicGenitaliaTentacle : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.demonT_penis,Genital_Helper.demon_vagina,Genital_Helper.demon_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.demonT_penis, Genital_Helper.demon_vagina, Genital_Helper.demon_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_DragonGenitalia.cs b/Source/Genes/Genitalia/Gene_DragonGenitalia.cs
deleted file mode 100644
index 34d24f6..0000000
--- a/Source/Genes/Genitalia/Gene_DragonGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_DragonGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.dragon_penis,Genital_Helper.dragon_vagina,Genital_Helper.generic_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.dragon_penis, Genital_Helper.dragon_vagina, Genital_Helper.generic_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_EquineGenitalia.cs b/Source/Genes/Genitalia/Gene_EquineGenitalia.cs
deleted file mode 100644
index 74b8b2f..0000000
--- a/Source/Genes/Genitalia/Gene_EquineGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_EquineGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.equine_penis,Genital_Helper.equine_vagina,Genital_Helper.generic_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.equine_penis, Genital_Helper.equine_vagina, Genital_Helper.generic_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_FelineGenitalia.cs b/Source/Genes/Genitalia/Gene_FelineGenitalia.cs
deleted file mode 100644
index 2fe4882..0000000
--- a/Source/Genes/Genitalia/Gene_FelineGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_FelineGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.feline_penis,Genital_Helper.feline_vagina,Genital_Helper.generic_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.feline_penis, Genital_Helper.feline_vagina, Genital_Helper.generic_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_GenitaliaType.cs b/Source/Genes/Genitalia/Gene_GenitaliaType.cs
new file mode 100644
index 0000000..8cdb1a5
--- /dev/null
+++ b/Source/Genes/Genitalia/Gene_GenitaliaType.cs
@@ -0,0 +1,31 @@
+using rjw;
+
+namespace RJW_Genes
+{
+ // bleh plural attributive noun in keeping with naming convention
+ public class Gene_GenitaliaType : RJW_Gene
+ {
+ public override void PostMake()
+ {
+ base.PostMake();
+ Apply();
+ }
+
+ public override void PostAdd()
+ {
+ base.PostAdd();
+ Apply();
+ }
+
+ protected virtual void Apply()
+ {
+ GenitaliaTypeExtension genitals = def.GetModExtension();
+ if (genitals == null && RJW_Genes_Settings.rjw_genes_detailed_debug)
+ {
+ ModLog.Error($"Gene {def} failed to change genitals - Need a modExtension with Class=\"{typeof(GenitaliaTypeExtension).FullName}\".");
+ return;
+ }
+ GenitaliaChanger.ChangeGenitalia(pawn, genitals.penis, genitals.vagina, genitals.anus);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Genes/Genitalia/Gene_GhostGenitalia.cs b/Source/Genes/Genitalia/Gene_GhostGenitalia.cs
deleted file mode 100644
index 7fa7dc4..0000000
--- a/Source/Genes/Genitalia/Gene_GhostGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_GhostGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.GhostPenis, Genital_Helper_2.GhostVagina, Genital_Helper.average_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.GhostPenis, Genital_Helper_2.GhostVagina, Genital_Helper.average_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_GolemGenitalia.cs b/Source/Genes/Genitalia/Gene_GolemGenitalia.cs
deleted file mode 100644
index 3a19a88..0000000
--- a/Source/Genes/Genitalia/Gene_GolemGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_GolemGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.GolemPenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.GolemPenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_MarineGenitalia.cs b/Source/Genes/Genitalia/Gene_MarineGenitalia.cs
deleted file mode 100644
index b273380..0000000
--- a/Source/Genes/Genitalia/Gene_MarineGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_MarineGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.MarinePenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.MarinePenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_NecroGenitalia.cs b/Source/Genes/Genitalia/Gene_NecroGenitalia.cs
deleted file mode 100644
index 2ad03b6..0000000
--- a/Source/Genes/Genitalia/Gene_NecroGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_NecroGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.NecroPenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.NecroPenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_NeedleGenitalia.cs b/Source/Genes/Genitalia/Gene_NeedleGenitalia.cs
deleted file mode 100644
index 4d0b166..0000000
--- a/Source/Genes/Genitalia/Gene_NeedleGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_NeedleGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.NeedlePenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.NeedlePenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_OrcGenitalia.cs b/Source/Genes/Genitalia/Gene_OrcGenitalia.cs
deleted file mode 100644
index cd3ef4c..0000000
--- a/Source/Genes/Genitalia/Gene_OrcGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_OrcGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.OrcPenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.OrcPenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_OvipositorGenitalia.cs b/Source/Genes/Genitalia/Gene_OvipositorGenitalia.cs
deleted file mode 100644
index b7a1141..0000000
--- a/Source/Genes/Genitalia/Gene_OvipositorGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_OvipositorGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.ovipositorM,Genital_Helper.ovipositorF,Genital_Helper.insect_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.ovipositorM, Genital_Helper.ovipositorF, Genital_Helper.insect_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_PigGenitalia.cs b/Source/Genes/Genitalia/Gene_PigGenitalia.cs
deleted file mode 100644
index c210226..0000000
--- a/Source/Genes/Genitalia/Gene_PigGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_PigGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.PigPenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.PigPenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_RacoonGenitalia.cs b/Source/Genes/Genitalia/Gene_RacoonGenitalia.cs
deleted file mode 100644
index 61aaf22..0000000
--- a/Source/Genes/Genitalia/Gene_RacoonGenitalia.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Verse;
-using RimWorld;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_RacoonGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.raccoon_penis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.raccoon_penis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_ReptilianGenitalia.cs b/Source/Genes/Genitalia/Gene_ReptilianGenitalia.cs
deleted file mode 100644
index 65f7950..0000000
--- a/Source/Genes/Genitalia/Gene_ReptilianGenitalia.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Verse;
-using RimWorld;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_ReptilianGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.hemipenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.hemipenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_SlimeGenitalia.cs b/Source/Genes/Genitalia/Gene_SlimeGenitalia.cs
deleted file mode 100644
index 5671f1f..0000000
--- a/Source/Genes/Genitalia/Gene_SlimeGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_SlimeGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.slime_penis,Genital_Helper.slime_vagina,Genital_Helper.slime_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper.slime_penis, Genital_Helper.slime_vagina, Genital_Helper.slime_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/Gene_TentacleGenitalia.cs b/Source/Genes/Genitalia/Gene_TentacleGenitalia.cs
deleted file mode 100644
index 834a32d..0000000
--- a/Source/Genes/Genitalia/Gene_TentacleGenitalia.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
-{
- public class Gene_TentacleGenitalia : RJW_Gene
- {
- public override void PostMake()
- {
- base.PostMake();
-
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.TentaclePenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
- GenitaliaChanger.ChangeGenitalia(this.pawn, Genital_Helper_2.TentaclePenis, Genital_Helper.average_vagina, Genital_Helper.average_anus);
- }
- }
-
-}
diff --git a/Source/Genes/Genitalia/GenitaliaChanger.cs b/Source/Genes/Genitalia/GenitaliaChanger.cs
index 48ddc4d..86d112b 100644
--- a/Source/Genes/Genitalia/GenitaliaChanger.cs
+++ b/Source/Genes/Genitalia/GenitaliaChanger.cs
@@ -16,7 +16,7 @@ namespace RJW_Genes
/// the new type of penis
/// the new type of vagina
/// the new type of anus
- public static void ChangeGenitalia(Pawn pawn, HediffDef penisReplacement, HediffDef vaginaReplacement, HediffDef anusReplacement)
+ public static void ChangeGenitalia(Pawn pawn, HediffDef penisReplacement = null, HediffDef vaginaReplacement = null, HediffDef anusReplacement = null)
{
var oldParts = Genital_Helper.get_AllPartsHediffList(pawn);
BodyPartRecord correctBPR;
@@ -34,13 +34,13 @@ namespace RJW_Genes
replacementGenital = null;
CompHediff = null;
- if (Genital_Helper.is_penis(existingGenital))
+ if (Genital_Helper.is_penis(existingGenital) && penisReplacement != null && existingGenital.def != penisReplacement)
replacementGenital = HediffMaker.MakeHediff(penisReplacement, pawn, correctBPR);
- if (Genital_Helper.is_vagina(existingGenital))
+ if (Genital_Helper.is_vagina(existingGenital) && vaginaReplacement != null && existingGenital.def != vaginaReplacement)
replacementGenital = HediffMaker.MakeHediff(vaginaReplacement, pawn, correctBPR);
- if (IsAnus(existingGenital))
+ if (IsAnus(existingGenital) && anusReplacement != null && existingGenital.def != anusReplacement)
{
correctBPR = Genital_Helper.get_anusBPR(pawn);
replacementGenital = HediffMaker.MakeHediff(anusReplacement, pawn, correctBPR);
diff --git a/Source/Genes/Genitalia/GenitaliaUtility.cs b/Source/Genes/Genitalia/GenitaliaUtility.cs
index c762071..b2c4488 100644
--- a/Source/Genes/Genitalia/GenitaliaUtility.cs
+++ b/Source/Genes/Genitalia/GenitaliaUtility.cs
@@ -19,7 +19,7 @@ namespace RJW_Genes
foreach (var gene in pawn.genes.GenesListForReading)
{
- if (gene.def.defName.Contains("rjw_genes") && gene.def.defName.EndsWith("_genitalia"))
+ if (gene is Gene_GenitaliaType)
if (!gene.Overridden)
return gene.def;
}
@@ -29,60 +29,19 @@ namespace RJW_Genes
public static HediffDef GetPenisForGene(GeneDef gene)
{
- if (gene == null)
- return Genital_Helper.average_penis;
-
- switch (gene.defName)
- {
- case "rjw_genes_equine_genitalia": return Genital_Helper.equine_penis;
- case "rjw_genes_canine_genitalia": return Genital_Helper.canine_penis;
- case "rjw_genes_feline_genitalia": return Genital_Helper.feline_penis;
- case "rjw_genes_demonic_genitalia": return Genital_Helper.demon_penis;
- case "rjw_genes_dragon_genitalia": return Genital_Helper.dragon_penis;
- case "rjw_genes_slime_genitalia": return Genital_Helper.slime_penis;
- case "rjw_genes_ovipositor_genitalia": return Genital_Helper.ovipositorM;
-
- default: return Genital_Helper.average_penis;
- }
+ return gene?.GetModExtension()?.penis ?? Genital_Helper.average_penis;
}
public static HediffDef GetVaginaForGene(GeneDef gene)
{
- if (gene == null)
- return Genital_Helper.average_vagina;
-
- switch (gene.defName)
- {
- case "rjw_genes_equine_genitalia": return Genital_Helper.equine_vagina;
- case "rjw_genes_canine_genitalia": return Genital_Helper.canine_vagina;
- case "rjw_genes_feline_genitalia": return Genital_Helper.feline_vagina;
- case "rjw_genes_demonic_genitalia": return Genital_Helper.demon_vagina;
- case "rjw_genes_dragon_genitalia": return Genital_Helper.dragon_vagina;
- case "rjw_genes_slime_genitalia": return Genital_Helper.slime_vagina;
- case "rjw_genes_ovipositor_genitalia": return Genital_Helper.ovipositorF;
-
- default: return Genital_Helper.average_vagina;
- }
+ return gene?.GetModExtension()?.vagina ?? Genital_Helper.average_vagina;
}
public static HediffDef GetAnusForGene(GeneDef gene)
{
- if (gene == null)
- return Genital_Helper.average_anus;
- switch (gene.defName)
- {
- //TODO: Do I want the default to be generic or average for feline,equine and canine?
- case "rjw_genes_equine_genitalia": return Genital_Helper.average_anus;
- case "rjw_genes_canine_genitalia": return Genital_Helper.average_anus;
- case "rjw_genes_feline_genitalia": return Genital_Helper.average_anus;
- case "rjw_genes_demonic_genitalia": return Genital_Helper.demon_anus;
- case "rjw_genes_dragon_genitalia": return Genital_Helper.average_anus;
- case "rjw_genes_slime_genitalia": return Genital_Helper.slime_anus;
- case "rjw_genes_ovipositor_genitalia": return Genital_Helper.insect_anus;
-
- default: return Genital_Helper.generic_anus;
- }
+ //TODO: Do I want the default to be generic or average for feline,equine and canine?
+ return gene?.GetModExtension()?.anus ?? Genital_Helper.average_anus;
}
public static HediffDef GetBreastsForGene(GeneDef gene)
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index 4fdea14..6ccde5f 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -86,25 +86,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -189,7 +172,7 @@
False
- ..\..\rjw\1.4\Assemblies\RJW.dll
+ ..\..\rjw\1.5\Assemblies\RJW.dll
False
diff --git a/Source/Rjw-Genes.csproj.user b/Source/Rjw-Genes.csproj.user
deleted file mode 100644
index 6e4223f..0000000
--- a/Source/Rjw-Genes.csproj.user
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file