diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll
index 5b7deea..05fb3b0 100644
Binary files a/Common/Assemblies/Rjw-Genes.dll and b/Common/Assemblies/Rjw-Genes.dll differ
diff --git a/Common/Defs/Genes/GeneCategories.xml b/Common/Defs/Genes/GeneCategories.xml
index e9b727b..202545e 100644
--- a/Common/Defs/Genes/GeneCategories.xml
+++ b/Common/Defs/Genes/GeneCategories.xml
@@ -1,10 +1,21 @@
+
+
+
+ rjw_genes_gender
+
+ 20
+
+
rjw_genes_genitalia
- 541
+ 16
\ No newline at end of file
diff --git a/Common/Defs/Genes/GeneDefs_ExtraGenitaliaEndogenes.xml b/Common/Defs/Genes/GeneDefs_ExtraGenitaliaEndogenes.xml
index 3242cb6..703d8db 100644
--- a/Common/Defs/Genes/GeneDefs_ExtraGenitaliaEndogenes.xml
+++ b/Common/Defs/Genes/GeneDefs_ExtraGenitaliaEndogenes.xml
@@ -11,7 +11,7 @@
Males of this species grow an additional penis .
Genes/Icons/Placeholder
RJW_Genes.Gene_ExtraPenis
- 20
+ 701
PenisAmount
@@ -23,7 +23,7 @@
Males of this do not have a penis.
Genes/Icons/Placeholder
RJW_Genes.Gene_NoPenis
- 21
+ 702
PenisAmount
@@ -36,7 +36,7 @@
Females of this species grow an additional vagina .
Genes/Icons/Placeholder
RJW_Genes.Gene_ExtraVagina
- 22
+ 703
VaginaAmount
@@ -48,7 +48,7 @@
Females of this do not have a vagina.
Genes/Icons/Placeholder
RJW_Genes.Gene_NoVagina
- 23
+ 704
VaginaAmount
@@ -61,7 +61,7 @@
Females of this species grow an additional pair of breasts .
Genes/Icons/Placeholder
RJW_Genes.Gene_ExtraBreasts
- 24
+ 705
BreastAmount
@@ -73,7 +73,7 @@
Females of this do not have a pair of breasts.
Genes/Icons/Placeholder
RJW_Genes.Gene_NoBreasts
- 25
+ 706
BreastAmount
@@ -85,7 +85,7 @@
This specias has an extra anus.
Genes/Icons/Placeholder
RJW_Genes.Gene_ExtraAnus
- 26
+ 707
AnusAmount
@@ -97,7 +97,7 @@
This specias has no anus.
Genes/Icons/Placeholder
RJW_Genes.Gene_NoAnus
- 27
+ 708
AnusAmount
@@ -109,7 +109,7 @@
Males of this xenotype grow additional female genitalia, Females grow additional male genitalia.
Genes/Icons/Placeholder
RJW_Genes.Gene_Futa
- 29
+ 709
PenisAmount
VaginaAmount
diff --git a/Common/Defs/Genes/GeneDefs_GenitaliaSizes.xml b/Common/Defs/Genes/GeneDefs_GenitaliaSizes.xml
index 8ecc4c7..41dac59 100644
--- a/Common/Defs/Genes/GeneDefs_GenitaliaSizes.xml
+++ b/Common/Defs/Genes/GeneDefs_GenitaliaSizes.xml
@@ -12,7 +12,7 @@
Penises of this Xenotype are bigger.
Genes/Icons/Placeholder
RJW_Genes.Gene_BigMaleGenitalia
- 51
+ 751
PenisSize
@@ -24,7 +24,7 @@
Penises of this Xenotype can be any size.
Genes/Icons/Placeholder
RJW_Genes.Gene_NormalMaleGenitalia
- 52
+ 752
PenisSize
@@ -36,7 +36,7 @@
Penises of this Xenotype are smaller.
Genes/Icons/Placeholder
RJW_Genes.Gene_SmallMaleGenitalia
- 53
+ 753
PenisSize
@@ -49,7 +49,7 @@
Vaginas of this Xenotype are quite spacy.
Genes/Icons/Placeholder
RJW_Genes.Gene_LooseFemaleGenitalia
- 54
+ 754
VaginaSize
@@ -61,7 +61,7 @@
Vaginas of this Xenotype can be any size.
Genes/Icons/Placeholder
RJW_Genes.Gene_NormalFemaleGenitalia
- 55
+ 755
VaginaSize
@@ -73,7 +73,7 @@
Vaginas of this Xenotype are pretty tight.
Genes/Icons/Placeholder
RJW_Genes.Gene_TightFemaleGenitalia
- 56
+ 756
VaginaSize
@@ -86,7 +86,7 @@
Females of this Xenotype have big honkers.
Genes/Icons/Placeholder
RJW_Genes.Gene_BigBreasts
- 57
+ 757
BreastSize
@@ -98,7 +98,7 @@
Females of this Xenotype have breasts of any size.
Genes/Icons/Placeholder
RJW_Genes.Gene_NormalBreasts
- 58
+ 758
BreastSize
@@ -110,7 +110,7 @@
Females of this Xenotype have smaller breasts.
Genes/Icons/Placeholder
RJW_Genes.Gene_SmallBreasts
- 59
+ 759
BreastSize
@@ -123,7 +123,7 @@
The Anus of this Xenotype is roomy.
Genes/Icons/Placeholder
RJW_Genes.Gene_LooseAnus
- 60
+ 760
AnusSize
@@ -135,7 +135,7 @@
Anus of this Xenotype can be any size.
Genes/Icons/Placeholder
RJW_Genes.Gene_NormalAnus
- 61
+ 761
AnusSize
@@ -147,7 +147,7 @@
The anus of this Xenotype is small.
Genes/Icons/Placeholder
RJW_Genes.Gene_TightAnus
- 62
+ 762
AnusSize
diff --git a/Common/Defs/Genes/GeneDefs_GenitaliaTypeEndogenes.xml b/Common/Defs/Genes/GeneDefs_GenitaliaTypeEndogenes.xml
index ff90a9f..39f7f64 100644
--- a/Common/Defs/Genes/GeneDefs_GenitaliaTypeEndogenes.xml
+++ b/Common/Defs/Genes/GeneDefs_GenitaliaTypeEndogenes.xml
@@ -18,7 +18,7 @@
Carriers of this carry genitalia similar to humans.
Genes/Icons/Placeholder
RJW_Genes.Gene_HumanGenitalia
- 1
+ 801
@@ -27,7 +27,7 @@
Carriers of this gene develop equine genitalia.
Genes/Icons/Placeholder
RJW_Genes.Gene_EquineGenitalia
- 2
+ 802
@@ -36,7 +36,7 @@
Carriers of this gene develop canine genitalia.
Genes/Icons/Placeholder
RJW_Genes.Gene_CanineGenitalia
- 3
+ 803
@@ -45,7 +45,7 @@
Carriers of this gene develop feline genitalia.
Genes/Icons/Placeholder
RJW_Genes.Gene_FelineGenitalia
- 4
+ 804
@@ -54,7 +54,7 @@
Carriers of this gene have demonic genitalia.
Genes/Icons/Placeholder
RJW_Genes.Gene_DemonicGenitalia
- 5
+ 805
@@ -63,7 +63,7 @@
Carriers of this gene develop dragon genitalia.
Genes/Icons/Placeholder
RJW_Genes.Gene_DragonGenitalia
- 6
+ 806
@@ -72,7 +72,7 @@
Carriers of this gene have slime genitalia.
Genes/Icons/Placeholder
RJW_Genes.Gene_SlimeGenitalia
- 7
+ 807
@@ -81,7 +81,7 @@
Carriers of this gene have ovipositors similar to insects.
Genes/Icons/Placeholder
RJW_Genes.Gene_OvipositorGenitalia
- 8
+ 808
\ No newline at end of file
diff --git a/Common/Defs/Genes/GeneDefs_SpecifiedGender.xml b/Common/Defs/Genes/GeneDefs_SpecifiedGender.xml
new file mode 100644
index 0000000..521e878
--- /dev/null
+++ b/Common/Defs/Genes/GeneDefs_SpecifiedGender.xml
@@ -0,0 +1,25 @@
+
+
+
+ rjw_genes_female_only
+
+ rjw_genes_gender
+ This Xenotype only has females.
+ 0
+ Genes/Icons/Placeholder
+ RJW_Genes.Gene_FemaleOnly
+ 1
+
+
+
+ rjw_genes_male_only
+ rjw_genes_gender
+
+ This Xenotype only has males.
+ 0
+ Genes/Icons/Placeholder
+ RJW_Genes.Gene_MaleOnly
+ 2
+
+
+
\ No newline at end of file
diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs
index 198a961..cb300cd 100644
--- a/Source/GeneDefOf.cs
+++ b/Source/GeneDefOf.cs
@@ -7,6 +7,7 @@ namespace RJW_Genes
public static class GeneDefOf
{
[MayRequireBiotech] public static readonly GeneCategoryDef rjw_genes_genitalia;
+ [MayRequireBiotech] public static readonly GeneCategoryDef rjw_genes_gender;
// Base Genitalia Types
[MayRequireBiotech] public static readonly GeneDef rjw_genes_human_genitalia;
@@ -43,5 +44,8 @@ namespace RJW_Genes
[MayRequireBiotech] public static readonly GeneDef rjw_genes_normal_anus;
[MayRequireBiotech] public static readonly GeneDef rjw_genes_tight_anus;
+ // Gender
+ [MayRequireBiotech] public static readonly GeneDef rjw_genes_female_only;
+ [MayRequireBiotech] public static readonly GeneDef rjw_genes_male_only;
}
}
diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs
index 7bb5953..cea77f2 100644
--- a/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs
@@ -4,7 +4,7 @@ using RimWorld;
namespace RJW_Genes
{
- public class Gene_ExtraAnus : Gene
+ public class Gene_ExtraAnus : RJW_Gene
{
internal Hediff additional_anus;
@@ -12,8 +12,6 @@ namespace RJW_Genes
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
if (additional_anus == null)
{
diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs
index e8e658f..8829854 100644
--- a/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs
@@ -4,7 +4,7 @@ using RimWorld;
namespace RJW_Genes
{
- public class Gene_ExtraBreasts : Gene
+ public class Gene_ExtraBreasts : RJW_Gene
{
internal Hediff additional_breasts;
@@ -12,13 +12,11 @@ namespace RJW_Genes
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
- // Penis are only added for female pawns!
- if (pawn.gender == Gender.Female && additional_breasts == null)
+ // Tits are only added for female pawns!
+ if (GenderUtility.IsFemale(pawn) && additional_breasts == null)
{
- createAndAddPenis();
+ CreateAndAddBreasts();
}
}
@@ -26,10 +24,10 @@ namespace RJW_Genes
{
base.PostAdd();
- // Penis are only added for female pawns!
- if (pawn.gender == Gender.Female && additional_breasts == null)
+ // Tits are only added for female pawns!
+ if (GenderUtility.IsFemale(pawn) && additional_breasts == null)
{
- createAndAddPenis();
+ CreateAndAddBreasts();
}
}
@@ -40,7 +38,7 @@ namespace RJW_Genes
pawn.health.RemoveHediff(additional_breasts);
}
- internal void createAndAddPenis()
+ internal void CreateAndAddBreasts()
{
var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
var breastDef = GenitaliaUtility.GetBreastsForGene(correctGene);
diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs
index 10dfb57..aee18c7 100644
--- a/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs
@@ -4,7 +4,7 @@ using RimWorld;
namespace RJW_Genes
{
- public class Gene_ExtraPenis : Gene
+ public class Gene_ExtraPenis : RJW_Gene
{
internal Hediff additional_penis;
@@ -12,13 +12,11 @@ namespace RJW_Genes
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
// Penis are only added for male pawns!
- if (pawn.gender == Gender.Male && additional_penis == null)
+ if (GenderUtility.IsMale(pawn) && additional_penis == null)
{
- createAndAddPenis();
+ CreateAndAddPenis();
}
}
@@ -27,9 +25,9 @@ namespace RJW_Genes
base.PostAdd();
// Penis are only added for male pawns!
- if (pawn.gender == Gender.Male && additional_penis == null)
+ if (GenderUtility.IsMale(pawn) && additional_penis == null)
{
- createAndAddPenis();
+ CreateAndAddPenis();
}
}
@@ -40,7 +38,7 @@ namespace RJW_Genes
pawn.health.RemoveHediff(additional_penis);
}
- internal void createAndAddPenis()
+ internal void CreateAndAddPenis()
{
var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
HediffDef penisDef = GenitaliaUtility.GetPenisForGene(correctGene);
diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs
index a6f6bff..9940de0 100644
--- a/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs
@@ -4,7 +4,7 @@ using RimWorld;
namespace RJW_Genes
{
- public class Gene_ExtraVagina : Gene
+ public class Gene_ExtraVagina : RJW_Gene
{
internal Hediff additional_vagina;
@@ -17,11 +17,9 @@ namespace RJW_Genes
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
// Vaginas are only added for female pawns!
- if (pawn.gender == Gender.Female && additional_vagina == null)
+ if (GenderUtility.IsFemale(pawn) && additional_vagina == null)
{
CreateAndAddVagina();
}
@@ -32,7 +30,7 @@ namespace RJW_Genes
base.PostAdd();
// Vaginas are only added for female pawns!
- if (pawn.gender == Gender.Female && additional_vagina == null)
+ if (GenderUtility.IsFemale(pawn) && additional_vagina == null)
{
CreateAndAddVagina();
}
diff --git a/Source/Genes/ExtraGenitalia/Gene_Futa.cs b/Source/Genes/ExtraGenitalia/Gene_Futa.cs
index 76749ff..2d9f367 100644
--- a/Source/Genes/ExtraGenitalia/Gene_Futa.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_Futa.cs
@@ -4,7 +4,7 @@ using RimWorld;
namespace RJW_Genes
{
- public class Gene_Futa : Gene
+ public class Gene_Futa : RJW_Gene
{
internal Hediff additional_genital;
@@ -12,14 +12,12 @@ namespace RJW_Genes
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
- if (pawn.gender == Gender.Female && additional_genital == null)
+ if (GenderUtility.IsFemale(pawn) && additional_genital == null)
{
createAndAddPenis();
}
- if (pawn.gender == Gender.Male && additional_genital == null)
+ if (GenderUtility.IsMale(pawn) && additional_genital == null)
{
CreateAndAddVagina();
}
diff --git a/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs b/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs
index 28ea3ba..d23b2df 100644
--- a/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs
@@ -4,7 +4,7 @@ using RimWorld;
namespace RJW_Genes
{
- public class Gene_NoAnus : Gene
+ public class Gene_NoAnus : RJW_Gene
{
internal Hediff removed_anus;
@@ -15,8 +15,6 @@ namespace RJW_Genes
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
if (removed_anus == null)
{
diff --git a/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs b/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs
index bf1cd40..ddc75a1 100644
--- a/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs
@@ -4,7 +4,7 @@ using RimWorld;
namespace RJW_Genes
{
- public class Gene_NoBreasts : Gene
+ public class Gene_NoBreasts : RJW_Gene
{
internal Hediff removed_breasts;
@@ -15,11 +15,9 @@ namespace RJW_Genes
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
// Breasts are removed for female pawns!
- if (pawn.gender == Gender.Female && removed_breasts == null)
+ if (GenderUtility.IsFemale(pawn) && removed_breasts == null)
{
RemoveButStoreBreasts();
}
@@ -30,7 +28,7 @@ namespace RJW_Genes
base.PostAdd();
// Breasts are removed for female pawns!
- if (pawn.gender == Gender.Female && removed_breasts == null)
+ if (GenderUtility.IsFemale(pawn) && removed_breasts == null)
{
RemoveButStoreBreasts();
}
diff --git a/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs b/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs
index cd7f01f..be67ef4 100644
--- a/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs
@@ -4,7 +4,7 @@ using RimWorld;
namespace RJW_Genes
{
- public class Gene_NoPenis : Gene
+ public class Gene_NoPenis : RJW_Gene
{
internal Hediff removed_penis;
@@ -15,11 +15,9 @@ namespace RJW_Genes
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
- // Penis are only added for male pawns!
- if (pawn.gender == Gender.Male && removed_penis == null)
+ // Penis are only removed for male pawns!
+ if (GenderUtility.IsMale(pawn) && removed_penis == null)
{
RemoveButStorePenis();
}
@@ -29,8 +27,8 @@ namespace RJW_Genes
{
base.PostAdd();
- // Penis are only added for male pawns!
- if (pawn.gender == Gender.Male && removed_penis == null)
+ // Penis are only removed for male pawns!
+ if (GenderUtility.IsMale(pawn) && removed_penis == null)
{
RemoveButStorePenis();
}
diff --git a/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs b/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs
index 920c263..8083f58 100644
--- a/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs
@@ -4,7 +4,7 @@ using RimWorld;
namespace RJW_Genes
{
- public class Gene_NoVagina : Gene
+ public class Gene_NoVagina : RJW_Gene
{
internal Hediff removed_vagina;
@@ -15,11 +15,9 @@ namespace RJW_Genes
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
// Vaginas are only removed for female pawns!
- if (pawn.gender == Gender.Female && removed_vagina == null)
+ if (GenderUtility.IsFemale(pawn) && removed_vagina == null)
{
RemoveButStoreVagina();
}
@@ -30,7 +28,7 @@ namespace RJW_Genes
base.PostAdd();
// Vaginas are only removed for female pawns!
- if (pawn.gender == Gender.Female && removed_vagina == null)
+ if (GenderUtility.IsFemale(pawn) && removed_vagina == null)
{
RemoveButStoreVagina();
}
diff --git a/Source/Genes/Gender/GenderUtility.cs b/Source/Genes/Gender/GenderUtility.cs
new file mode 100644
index 0000000..ea0e1d6
--- /dev/null
+++ b/Source/Genes/Gender/GenderUtility.cs
@@ -0,0 +1,73 @@
+using Verse;
+using rjw;
+using RimWorld;
+using System.Collections;
+using System.Linq;
+using System;
+
+namespace RJW_Genes
+{
+ public class GenderUtility
+ {
+ ///
+ /// Returns if a Pawn is female (Gender==Female) or if it should be (Gene==FemaleOnly)
+ /// This is used as a small helper, as the genes might fire in different orders.
+ ///
+ public static bool IsFemale(Pawn pawn)
+ {
+ return
+ pawn.gender == Gender.Female || pawn.genes.GenesListForReading.Any(gene => gene.def.defName.EqualsIgnoreCase(GeneDefOf.rjw_genes_female_only.defName));
+ }
+
+ ///
+ /// Returns if a Pawn is male (Gender==Male) or if it should be (Gene==MaleOnly)
+ /// This is used as a small helper, as the genes might fire in different orders.
+ ///
+ public static bool IsMale(Pawn pawn)
+ {
+ return
+ pawn.gender == Gender.Male || pawn.genes.GenesListForReading.Any(gene => gene.def.defName.EqualsIgnoreCase(GeneDefOf.rjw_genes_male_only.defName));
+ }
+
+ ///
+ /// Adjusts the Body Type to match the given target gender
+ /// (for male and female only, baby,child and hulks don't change)
+ ///
+ ///
+ ///
+ public static void AdjustBodyToTargetGender(Pawn pawn, Gender targetGender)
+ {
+ if (pawn == null)
+ return;
+ if (pawn.story.bodyType == BodyTypeDefOf.Baby || pawn.story.bodyType == BodyTypeDefOf.Hulk || pawn.story.bodyType == BodyTypeDefOf.Child)
+ return;
+
+ if (targetGender == Gender.Male)
+ {
+ pawn.story.bodyType = BodyTypeDefOf.Male;
+ }
+ else if (targetGender == Gender.Female)
+ {
+ pawn.story.bodyType = BodyTypeDefOf.Female;
+ pawn.style.beardDef = BeardDefOf.NoBeard;
+ }
+
+ // Re-Choose heads if it is wrong gender
+ if (pawn.story.headType.gender == Gender.None || pawn.story.headType.gender == targetGender)
+ {
+ // Do nothing, Gender of Heat is Neutral or matches
+ }
+ else
+ {
+ // Below line tries to get (and set) an available head from the backstory, if it returns true everything worked if it returns false we log it
+ if(! pawn.story.TryGetRandomHeadFromSet(DefDatabase.AllDefs.Where((Func)(x => x.randomChosen))))
+ {
+ Log.Message("Failed to retrieve a correct-gender head for the pawn " + pawn.Name);
+ };
+ }
+
+ // Force Redraw at the spot
+ pawn.Drawer.renderer.graphics.SetAllGraphicsDirty();
+ }
+ }
+}
diff --git a/Source/Genes/Gender/Gene_FemaleOnly.cs b/Source/Genes/Gender/Gene_FemaleOnly.cs
new file mode 100644
index 0000000..0cfbe0d
--- /dev/null
+++ b/Source/Genes/Gender/Gene_FemaleOnly.cs
@@ -0,0 +1,42 @@
+using Verse;
+using rjw;
+
+
+namespace RJW_Genes
+{
+ public class Gene_FemaleOnly : Gene
+ {
+ public override void PostMake()
+ {
+ base.PostMake();
+
+ AdjustPawnToFemale();
+ // Here we call Sexualization after the Sex-Change
+ if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
+ Sexualizer.sexualize_pawn(pawn);
+ }
+
+ public override void PostAdd()
+ {
+ base.PostMake();
+ AdjustPawnToFemale();
+ }
+
+ private void AdjustPawnToFemale()
+ {
+ // Here we really use the Gender.Female and not our helper IsFemale(pawn)
+ if (pawn.gender == Gender.Female)
+ return;
+ else
+ {
+ GenderHelper.ChangeSex(pawn, () => {
+ pawn.gender = Gender.Female;
+ GenitaliaChanger.RemoveAllGenitalia(pawn);
+ Sexualizer.sexualize_pawn(pawn);
+ });
+ GenderUtility.AdjustBodyToTargetGender(pawn, Gender.Female);
+ }
+ }
+
+ }
+}
diff --git a/Source/Genes/Gender/Gene_MaleOnly.cs b/Source/Genes/Gender/Gene_MaleOnly.cs
new file mode 100644
index 0000000..51806cf
--- /dev/null
+++ b/Source/Genes/Gender/Gene_MaleOnly.cs
@@ -0,0 +1,42 @@
+using Verse;
+using rjw;
+
+
+namespace RJW_Genes
+{
+ public class Gene_MaleOnly : Gene
+ {
+ public override void PostMake()
+ {
+ base.PostMake();
+
+ AdjustPawnToMale();
+ // Here we call Sexualization after the Sex-Change
+ if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
+ Sexualizer.sexualize_pawn(pawn);
+ }
+
+ public override void PostAdd()
+ {
+ base.PostMake();
+ AdjustPawnToMale();
+ }
+
+ private void AdjustPawnToMale()
+ {
+ if (pawn.gender == Gender.Male)
+ return;
+ else
+ {
+ GenderHelper.ChangeSex(pawn, () => {
+
+ pawn.gender = Gender.Male;
+ GenitaliaChanger.RemoveAllGenitalia(pawn);
+ Sexualizer.sexualize_pawn(pawn);
+ });
+ GenderUtility.AdjustBodyToTargetGender(pawn, Gender.Male);
+ }
+ }
+
+ }
+}
diff --git a/Source/Genes/Genitalia/Gene_CanineGenitalia.cs b/Source/Genes/Genitalia/Gene_CanineGenitalia.cs
index 1d37041..0f31a11 100644
--- a/Source/Genes/Genitalia/Gene_CanineGenitalia.cs
+++ b/Source/Genes/Genitalia/Gene_CanineGenitalia.cs
@@ -3,13 +3,11 @@ using rjw;
namespace RJW_Genes
{
- public class Gene_CanineGenitalia : Gene
+ public class Gene_CanineGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.canine_penis,Genital_Helper.canine_vagina,Genital_Helper.generic_anus);
}
diff --git a/Source/Genes/Genitalia/Gene_DemonicGenitalia.cs b/Source/Genes/Genitalia/Gene_DemonicGenitalia.cs
index 5d33f84..e4c5805 100644
--- a/Source/Genes/Genitalia/Gene_DemonicGenitalia.cs
+++ b/Source/Genes/Genitalia/Gene_DemonicGenitalia.cs
@@ -4,13 +4,11 @@ using rjw;
namespace RJW_Genes
{
- public class Gene_DemonicGenitalia : Gene
+ public class Gene_DemonicGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.demon_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
index 4e44954..abd930d 100644
--- a/Source/Genes/Genitalia/Gene_DragonGenitalia.cs
+++ b/Source/Genes/Genitalia/Gene_DragonGenitalia.cs
@@ -3,13 +3,11 @@ using rjw;
namespace RJW_Genes
{
- public class Gene_DragonGenitalia : Gene
+ public class Gene_DragonGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
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
index 47eb65a..4ec956b 100644
--- a/Source/Genes/Genitalia/Gene_EquineGenitalia.cs
+++ b/Source/Genes/Genitalia/Gene_EquineGenitalia.cs
@@ -3,13 +3,11 @@ using rjw;
namespace RJW_Genes
{
- public class Gene_EquineGenitalia : Gene
+ public class Gene_EquineGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
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
index 506437c..6c1b987 100644
--- a/Source/Genes/Genitalia/Gene_FelineGenitalia.cs
+++ b/Source/Genes/Genitalia/Gene_FelineGenitalia.cs
@@ -3,13 +3,11 @@ using rjw;
namespace RJW_Genes
{
- public class Gene_FelineGenitalia : Gene
+ public class Gene_FelineGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.feline_penis,Genital_Helper.feline_vagina,Genital_Helper.generic_anus);
}
diff --git a/Source/Genes/Genitalia/Gene_HumanGenitalia.cs b/Source/Genes/Genitalia/Gene_HumanGenitalia.cs
index cd9ee11..077e0c4 100644
--- a/Source/Genes/Genitalia/Gene_HumanGenitalia.cs
+++ b/Source/Genes/Genitalia/Gene_HumanGenitalia.cs
@@ -3,13 +3,11 @@ using rjw;
namespace RJW_Genes
{
- public class Gene_HumanGenitalia : Gene
+ public class Gene_HumanGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.average_penis,Genital_Helper.average_vagina,Genital_Helper.average_anus);
}
diff --git a/Source/Genes/Genitalia/Gene_OvipositorGenitalia.cs b/Source/Genes/Genitalia/Gene_OvipositorGenitalia.cs
index 3cab5d9..2e91c2c 100644
--- a/Source/Genes/Genitalia/Gene_OvipositorGenitalia.cs
+++ b/Source/Genes/Genitalia/Gene_OvipositorGenitalia.cs
@@ -3,13 +3,11 @@ using rjw;
namespace RJW_Genes
{
- public class Gene_OvipositorGenitalia : Gene
+ public class Gene_OvipositorGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.ovipositorM,Genital_Helper.ovipositorF,Genital_Helper.insect_anus);
}
diff --git a/Source/Genes/Genitalia/Gene_SlimeGenitalia.cs b/Source/Genes/Genitalia/Gene_SlimeGenitalia.cs
index 9837271..efbdfcb 100644
--- a/Source/Genes/Genitalia/Gene_SlimeGenitalia.cs
+++ b/Source/Genes/Genitalia/Gene_SlimeGenitalia.cs
@@ -3,13 +3,11 @@ using rjw;
namespace RJW_Genes
{
- public class Gene_SlimeGenitalia : Gene
+ public class Gene_SlimeGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
GenitaliaChanger.ChangeGenitalia(this.pawn,Genital_Helper.slime_penis,Genital_Helper.slime_vagina,Genital_Helper.slime_anus);
}
diff --git a/Source/Genes/Genitalia/GenitaliaChanger.cs b/Source/Genes/Genitalia/GenitaliaChanger.cs
index 84f4fab..48ddc4d 100644
--- a/Source/Genes/Genitalia/GenitaliaChanger.cs
+++ b/Source/Genes/Genitalia/GenitaliaChanger.cs
@@ -79,5 +79,14 @@ namespace RJW_Genes
return candidate.def.defName.ToLower().Contains("bionic") || candidate.def.defName.ToLower().Contains("archo");
}
+ public static void RemoveAllGenitalia(Pawn pawn)
+ {
+ var parts = Genital_Helper.get_AllPartsHediffList(pawn);
+ foreach (var part in parts)
+ {
+ pawn.health.RemoveHediff(part);
+ }
+ }
+
}
}
diff --git a/Source/Genes/GenitaliaSize/Gene_BigBreasts.cs b/Source/Genes/GenitaliaSize/Gene_BigBreasts.cs
index d2a4d05..b0e61ad 100644
--- a/Source/Genes/GenitaliaSize/Gene_BigBreasts.cs
+++ b/Source/Genes/GenitaliaSize/Gene_BigBreasts.cs
@@ -1,17 +1,12 @@
using Verse;
-using rjw;
-using System;
-
namespace RJW_Genes
{
- public class Gene_BigBreasts : Gene
+ public class Gene_BigBreasts : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
if (pawn.gender == Gender.Female)
SizeAdjuster.AdjustAllBreastSizes(pawn,0.5f,1.0f);
diff --git a/Source/Genes/GenitaliaSize/Gene_BigMaleGenitalia.cs b/Source/Genes/GenitaliaSize/Gene_BigMaleGenitalia.cs
index a745ce6..b04df46 100644
--- a/Source/Genes/GenitaliaSize/Gene_BigMaleGenitalia.cs
+++ b/Source/Genes/GenitaliaSize/Gene_BigMaleGenitalia.cs
@@ -1,17 +1,11 @@
-using Verse;
-using rjw;
-using System;
-
-namespace RJW_Genes
+namespace RJW_Genes
{
- public class Gene_BigMaleGenitalia : Gene
+ public class Gene_BigMaleGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
SizeAdjuster.AdjustAllPenisSizes(pawn,0.5f,1.0f);
}
diff --git a/Source/Genes/GenitaliaSize/Gene_LooseAnus.cs b/Source/Genes/GenitaliaSize/Gene_LooseAnus.cs
index 92a237d..f5a5312 100644
--- a/Source/Genes/GenitaliaSize/Gene_LooseAnus.cs
+++ b/Source/Genes/GenitaliaSize/Gene_LooseAnus.cs
@@ -1,17 +1,11 @@
-using Verse;
-using rjw;
-using System;
-
-namespace RJW_Genes
+namespace RJW_Genes
{
- public class Gene_LooseAnus : Gene
+ public class Gene_LooseAnus : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
SizeAdjuster.AdjustAllAnusSizes(pawn, 0.5f, 1.0f);
}
@@ -24,6 +18,5 @@ namespace RJW_Genes
-
}
}
diff --git a/Source/Genes/GenitaliaSize/Gene_LooseFemaleGenitalia.cs b/Source/Genes/GenitaliaSize/Gene_LooseFemaleGenitalia.cs
index c14d5fd..68578b6 100644
--- a/Source/Genes/GenitaliaSize/Gene_LooseFemaleGenitalia.cs
+++ b/Source/Genes/GenitaliaSize/Gene_LooseFemaleGenitalia.cs
@@ -1,17 +1,11 @@
-using Verse;
-using rjw;
-using System;
-
-namespace RJW_Genes
+namespace RJW_Genes
{
- public class Gene_LooseFemaleGenitalia : Gene
+ public class Gene_LooseFemaleGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
SizeAdjuster.AdjustAllVaginaSizes(pawn, 0.5f, 1.0f);
}
diff --git a/Source/Genes/GenitaliaSize/Gene_NormalAnus.cs b/Source/Genes/GenitaliaSize/Gene_NormalAnus.cs
index 85370db..8ee0a45 100644
--- a/Source/Genes/GenitaliaSize/Gene_NormalAnus.cs
+++ b/Source/Genes/GenitaliaSize/Gene_NormalAnus.cs
@@ -6,14 +6,12 @@ namespace RJW_Genes
///
/// Dummy Gene that does not alter the genitalia size. Normal RJW Logic and rolled sizes are kept.
///
- public class Gene_NormalAnus : Gene
+ public class Gene_NormalAnus : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
}
}
diff --git a/Source/Genes/GenitaliaSize/Gene_NormalBreasts.cs b/Source/Genes/GenitaliaSize/Gene_NormalBreasts.cs
index ec71b51..2b8f193 100644
--- a/Source/Genes/GenitaliaSize/Gene_NormalBreasts.cs
+++ b/Source/Genes/GenitaliaSize/Gene_NormalBreasts.cs
@@ -1,19 +1,16 @@
-using Verse;
-using rjw;
+using rjw;
namespace RJW_Genes
{
///
/// Dummy Gene that does not alter the genitalia size. Normal RJW Logic and rolled sizes are kept.
///
- public class Gene_NormalBreasts : Gene
+ public class Gene_NormalBreasts : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
}
}
diff --git a/Source/Genes/GenitaliaSize/Gene_NormalFemaleGenitalia.cs b/Source/Genes/GenitaliaSize/Gene_NormalFemaleGenitalia.cs
index d00278f..fce0c87 100644
--- a/Source/Genes/GenitaliaSize/Gene_NormalFemaleGenitalia.cs
+++ b/Source/Genes/GenitaliaSize/Gene_NormalFemaleGenitalia.cs
@@ -6,14 +6,12 @@ namespace RJW_Genes
///
/// Dummy Gene that does not alter the genitalia size. Normal RJW Logic and rolled sizes are kept.
///
- public class Gene_NormalFemaleGenitalia : Gene
+ public class Gene_NormalFemaleGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
}
diff --git a/Source/Genes/GenitaliaSize/Gene_NormalMaleGenitalia.cs b/Source/Genes/GenitaliaSize/Gene_NormalMaleGenitalia.cs
index 0c3a89c..2fa6247 100644
--- a/Source/Genes/GenitaliaSize/Gene_NormalMaleGenitalia.cs
+++ b/Source/Genes/GenitaliaSize/Gene_NormalMaleGenitalia.cs
@@ -1,19 +1,14 @@
-using Verse;
-using rjw;
-
-namespace RJW_Genes
+namespace RJW_Genes
{
///
/// Dummy Gene that does not alter the genitalia size. Normal RJW Logic and rolled sizes are kept.
///
- public class Gene_NormalMaleGenitalia : Gene
+ public class Gene_NormalMaleGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
}
}
diff --git a/Source/Genes/GenitaliaSize/Gene_SmallBreasts.cs b/Source/Genes/GenitaliaSize/Gene_SmallBreasts.cs
index 01c1b74..d5b4a4e 100644
--- a/Source/Genes/GenitaliaSize/Gene_SmallBreasts.cs
+++ b/Source/Genes/GenitaliaSize/Gene_SmallBreasts.cs
@@ -1,17 +1,11 @@
-using Verse;
-using rjw;
-using System;
-
-namespace RJW_Genes
+namespace RJW_Genes
{
- public class Gene_SmallBreasts : Gene
+ public class Gene_SmallBreasts : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
SizeAdjuster.AdjustAllBreastSizes(pawn, 0.0f, 0.5f);
}
diff --git a/Source/Genes/GenitaliaSize/Gene_SmallMaleGenitalia.cs b/Source/Genes/GenitaliaSize/Gene_SmallMaleGenitalia.cs
index d9faebb..12ba154 100644
--- a/Source/Genes/GenitaliaSize/Gene_SmallMaleGenitalia.cs
+++ b/Source/Genes/GenitaliaSize/Gene_SmallMaleGenitalia.cs
@@ -1,17 +1,11 @@
-using Verse;
-using rjw;
-using System;
-
-namespace RJW_Genes
+namespace RJW_Genes
{
- public class Gene_SmallMaleGenitalia : Gene
+ public class Gene_SmallMaleGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
SizeAdjuster.AdjustAllPenisSizes(pawn,0.0f,0.5f);
}
diff --git a/Source/Genes/GenitaliaSize/Gene_TightAnus.cs b/Source/Genes/GenitaliaSize/Gene_TightAnus.cs
index 3a77026..56f52cd 100644
--- a/Source/Genes/GenitaliaSize/Gene_TightAnus.cs
+++ b/Source/Genes/GenitaliaSize/Gene_TightAnus.cs
@@ -1,17 +1,11 @@
-using Verse;
-using rjw;
-using System;
-
-namespace RJW_Genes
+namespace RJW_Genes
{
- public class Gene_TightAnus : Gene
+ public class Gene_TightAnus : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
SizeAdjuster.AdjustAllAnusSizes(pawn, 0.0f, 0.5f);
}
diff --git a/Source/Genes/GenitaliaSize/Gene_TightFemaleGenitalia.cs b/Source/Genes/GenitaliaSize/Gene_TightFemaleGenitalia.cs
index d7cc216..53ec2a7 100644
--- a/Source/Genes/GenitaliaSize/Gene_TightFemaleGenitalia.cs
+++ b/Source/Genes/GenitaliaSize/Gene_TightFemaleGenitalia.cs
@@ -1,17 +1,11 @@
-using Verse;
-using rjw;
-using System;
-
-namespace RJW_Genes
+namespace RJW_Genes
{
- public class Gene_TightFemaleGenitalia : Gene
+ public class Gene_TightFemaleGenitalia : RJW_Gene
{
public override void PostMake()
{
base.PostMake();
- if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
- Sexualizer.sexualize_pawn(pawn);
SizeAdjuster.AdjustAllVaginaSizes(pawn, 0.0f, 0.5f);
}
diff --git a/Source/Genes/RJW_Gene.cs b/Source/Genes/RJW_Gene.cs
new file mode 100644
index 0000000..d03440c
--- /dev/null
+++ b/Source/Genes/RJW_Gene.cs
@@ -0,0 +1,16 @@
+using rjw;
+using Verse;
+
+namespace RJW_Genes
+{
+ public class RJW_Gene : Gene
+ {
+
+ public override void PostMake()
+ {
+ base.PostMake();
+ if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
+ Sexualizer.sexualize_pawn(pawn);
+ }
+ }
+}
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index 015652e..a284e5d 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -58,6 +58,9 @@
+
+
+
@@ -80,6 +83,7 @@
+