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 @@ +