diff --git a/.LICENSE.txt.swp b/.LICENSE.txt.swp
deleted file mode 100644
index 02c6893..0000000
Binary files a/.LICENSE.txt.swp and /dev/null differ
diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll
index f5555d1..a93c48d 100644
Binary files a/Common/Assemblies/Rjw-Genes.dll and b/Common/Assemblies/Rjw-Genes.dll differ
diff --git a/Common/Defs/Genes/GeneDefs_ExtraGenitaliaEndogenes.xml b/Common/Defs/Genes/GeneDefs_ExtraGenitaliaEndogenes.xml
index 575a7e0..3242cb6 100644
--- a/Common/Defs/Genes/GeneDefs_ExtraGenitaliaEndogenes.xml
+++ b/Common/Defs/Genes/GeneDefs_ExtraGenitaliaEndogenes.xml
@@ -103,5 +103,17 @@
-
+
+ rjw_genes_futa
+
+ Males of this xenotype grow additional female genitalia, Females grow additional male genitalia.
+ Genes/Icons/Placeholder
+ RJW_Genes.Gene_Futa
+ 29
+
+ PenisAmount
+ VaginaAmount
+
+
+
\ No newline at end of file
diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs
index f83db00..0de205b 100644
--- a/Source/GeneDefOf.cs
+++ b/Source/GeneDefOf.cs
@@ -27,5 +27,7 @@ namespace RJW_Genes
[MayRequireBiotech] public static readonly GeneDef rjw_genes_no_breasts;
[MayRequireBiotech] public static readonly GeneDef rjw_genes_extra_anus;
[MayRequireBiotech] public static readonly GeneDef rjw_genes_no_anus;
+ [MayRequireBiotech] public static readonly GeneDef rjw_genes_futa;
+
}
}
diff --git a/Source/Genes/ExtraGenitalia/Gene_Futa.cs b/Source/Genes/ExtraGenitalia/Gene_Futa.cs
new file mode 100644
index 0000000..76749ff
--- /dev/null
+++ b/Source/Genes/ExtraGenitalia/Gene_Futa.cs
@@ -0,0 +1,85 @@
+using Verse;
+using rjw;
+using RimWorld;
+
+namespace RJW_Genes
+{
+ public class Gene_Futa : Gene
+ {
+
+ internal Hediff additional_genital;
+
+ public override void PostMake()
+ {
+ base.PostMake();
+ if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
+ Sexualizer.sexualize_pawn(pawn);
+
+ if (pawn.gender == Gender.Female && additional_genital == null)
+ {
+ createAndAddPenis();
+ }
+ if (pawn.gender == Gender.Male && additional_genital == null)
+ {
+ CreateAndAddVagina();
+ }
+ }
+
+ public override void PostAdd()
+ {
+ base.PostAdd();
+
+ if (pawn.gender == Gender.Female && additional_genital == null)
+ {
+ createAndAddPenis();
+ }
+ if (pawn.gender == Gender.Male && additional_genital == null)
+ {
+ CreateAndAddVagina();
+ }
+ }
+
+ public override void PostRemove()
+ {
+ base.PostRemove();
+ if(additional_genital != null)
+ pawn.health.RemoveHediff(additional_genital);
+ }
+
+ //TODO: Extract createAndAddXXX to extra class
+ internal void createAndAddPenis()
+ {
+ var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
+ HediffDef penisDef = GenitaliaUtility.GetPenisForGene(correctGene);
+ var partBPR = Genital_Helper.get_genitalsBPR(pawn);
+ additional_genital = HediffMaker.MakeHediff(penisDef, pawn);
+
+ var CompHediff = additional_genital.TryGetComp();
+ if (CompHediff != null)
+ {
+ CompHediff.initComp(pawn);
+ CompHediff.updatesize();
+ }
+
+ pawn.health.AddHediff(additional_genital, partBPR);
+ }
+
+ internal void CreateAndAddVagina()
+ {
+ var correctGene = GenitaliaUtility.GetGenitaliaTypeGeneForPawn(pawn);
+ HediffDef vaginaDef = GenitaliaUtility.GetVaginaForGene(correctGene);
+ var partBPR = Genital_Helper.get_genitalsBPR(pawn);
+ additional_genital = HediffMaker.MakeHediff(vaginaDef, pawn);
+
+ var CompHediff = additional_genital.TryGetComp();
+ if (CompHediff != null)
+ {
+ CompHediff.initComp(pawn);
+ CompHediff.updatesize();
+ }
+
+ pawn.health.AddHediff(additional_genital, partBPR);
+ }
+
+ }
+}
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index fd6b174..c74f409 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -51,6 +51,7 @@
+