From 41a95c3c5e473646e41280a6b0596a21331a1a46 Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Fri, 28 Apr 2023 08:24:18 +0200 Subject: [PATCH] Cleanups and Draft for #27 --- .../Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml | 19 ++++- .../Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml | 1 + Common/Defs/GeneDefs/GeneDefs_Hive.xml | 2 +- .../ExtraGenitalia/Gene_FeaturelessChest.cs | 3 +- Source/Genes/ExtraGenitalia/Gene_NoAnus.cs | 3 - Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs | 10 --- Source/Genes/ExtraGenitalia/Gene_NoPenis.cs | 3 - Source/Genes/ExtraGenitalia/Gene_NoVagina.cs | 5 +- .../Genes/ExtraGenitalia/Gene_UdderBreasts.cs | 78 +++++++++++++++++++ Source/Genes/Genitalia/GenitaliaUtility.cs | 1 + Source/Rjw-Genes.csproj | 1 + 11 files changed, 100 insertions(+), 26 deletions(-) create mode 100644 Source/Genes/ExtraGenitalia/Gene_UdderBreasts.cs diff --git a/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml b/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml index 22764ea..616c72c 100644 --- a/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml +++ b/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml @@ -1,10 +1,9 @@ - + rjw_genes_genitalia_extras - rjw_genes_extra_penis @@ -127,5 +126,19 @@
  • BreastAmount
  • - +
    \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml b/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml index 7333a5e..e0d8e39 100644 --- a/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml +++ b/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml @@ -72,4 +72,5 @@ 808 + \ No newline at end of file diff --git a/Common/Defs/GeneDefs/GeneDefs_Hive.xml b/Common/Defs/GeneDefs/GeneDefs_Hive.xml index 33ec3a2..84b6940 100644 --- a/Common/Defs/GeneDefs/GeneDefs_Hive.xml +++ b/Common/Defs/GeneDefs/GeneDefs_Hive.xml @@ -151,7 +151,7 @@ rjw_genes_spawn_spelopede - cocooner + spelopede Carriers of this gene can generate tame spelopedes. Higher psychic-sensitivity will spawn more spelopedes. World/WorldObjects/Expanding/Insects 12 diff --git a/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs b/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs index 8a93c51..00b4c82 100644 --- a/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs +++ b/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs @@ -1,6 +1,5 @@ using Verse; using rjw; -using RimWorld; namespace RJW_Genes { @@ -54,7 +53,7 @@ namespace RJW_Genes internal void AddFeaturelessBreast() { var partBPR = Genital_Helper.get_breastsBPR(pawn); - this.added_nipples = pawn.health.AddHediff(Genital_Helper.featureless_chest, partBPR); + added_nipples = pawn.health.AddHediff(Genital_Helper.featureless_chest, partBPR); } } diff --git a/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs b/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs index d23b2df..8aad9ab 100644 --- a/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs +++ b/Source/Genes/ExtraGenitalia/Gene_NoAnus.cs @@ -9,9 +9,6 @@ namespace RJW_Genes internal Hediff removed_anus; - // TODO: This gene only works if another Gene was set specifying the genitalia. - // If it is added later, it still works, but on creation it needs a different - // TODO: If all Genitalia are removed by genes, RJW adds some to the pawns at spawn public override void PostMake() { base.PostMake(); diff --git a/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs b/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs index 874ff5f..caa0a5c 100644 --- a/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs +++ b/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs @@ -52,15 +52,5 @@ namespace RJW_Genes } } - /* - /// - /// Adds a "rjw.featurelesschest", which means nipples but nothing else (like male human pawns do). - /// - internal void AddFeaturelessBreast() - { - var partBPR = Genital_Helper.get_breastsBPR(pawn); - //this.added_nipples = pawn.health.AddHediff(Genital_Helper.featureless_chest, partBPR); - } - */ } } diff --git a/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs b/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs index be67ef4..b107a5a 100644 --- a/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs +++ b/Source/Genes/ExtraGenitalia/Gene_NoPenis.cs @@ -9,9 +9,6 @@ namespace RJW_Genes internal Hediff removed_penis; - // TODO: This gene only works if another Gene was set specifying the genitalia. - // If it is added later, it still works, but on creation it needs a different - // TODO: If all Genitalia are removed by genes, RJW adds some to the pawns at spawn public override void PostMake() { base.PostMake(); diff --git a/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs b/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs index 8083f58..438d76e 100644 --- a/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs +++ b/Source/Genes/ExtraGenitalia/Gene_NoVagina.cs @@ -8,10 +8,7 @@ namespace RJW_Genes { internal Hediff removed_vagina; - - // TODO: This gene only works if another Gene was set specifying the genitalia. - // If it is added later, it still works, but on creation it needs a different - // TODO: If all Genitalia are removed by genes, RJW adds some to the pawns at spawn + public override void PostMake() { base.PostMake(); diff --git a/Source/Genes/ExtraGenitalia/Gene_UdderBreasts.cs b/Source/Genes/ExtraGenitalia/Gene_UdderBreasts.cs new file mode 100644 index 0000000..e098a8c --- /dev/null +++ b/Source/Genes/ExtraGenitalia/Gene_UdderBreasts.cs @@ -0,0 +1,78 @@ +using rjw; +using Verse; + +namespace RJW_Genes +{ + + /// + /// Removes breasts for female (and trap, futa) pawns and adds Udders. + /// Wished for in Issue #27. + /// + /// TODO: Currently, the sexualizer over-writes the added udders and just adds another pair of breasts! + /// I commented out the gene in .xml for now. + /// + public class Gene_UdderBreasts : RJW_Gene + { + + Hediff removed_breasts; + Hediff added_udders; + + public override void PostMake() + { + base.PostMake(); + + // Breasts are replaced for female,trap and futa pawns + if ( removed_breasts == null + && (GenderUtility.IsFemale(pawn) || GenderHelper.GetSex(pawn) == GenderHelper.Sex.futa || GenderHelper.GetSex(pawn) == GenderHelper.Sex.trap) + ) + { + RemoveButStoreBreasts(); + AddUdders(); + } + + } + + public override void PostAdd() + { + base.PostAdd(); + + // Breasts are replaced for female,trap and futa pawns + if (removed_breasts == null + && (GenderUtility.IsFemale(pawn) || GenderHelper.GetSex(pawn) == GenderHelper.Sex.futa || GenderHelper.GetSex(pawn) == GenderHelper.Sex.trap) + ) + { + RemoveButStoreBreasts(); + AddUdders(); + } + } + + public override void PostRemove() + { + base.PostRemove(); + // Re-Add the old breasts + if (removed_breasts != null) + pawn.health.AddHediff(removed_breasts); + if (added_udders != null) + pawn.health.RemoveHediff(added_udders); + } + + internal void RemoveButStoreBreasts() + { + var partBPR = Genital_Helper.get_breastsBPR(pawn); + Hediff breastsToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaUtility.IsBreasts(x)); + + if (breastsToRemove != null) + { + removed_breasts = breastsToRemove; + pawn.health.RemoveHediff(breastsToRemove); + } + } + + internal void AddUdders() + { + BodyPartRecord bpr = Genital_Helper.get_uddersBPR(pawn); + added_udders = pawn.health.AddHediff(Genital_Helper.udder_breasts, bpr); + } + } + +} \ No newline at end of file diff --git a/Source/Genes/Genitalia/GenitaliaUtility.cs b/Source/Genes/Genitalia/GenitaliaUtility.cs index 4dc289a..c762071 100644 --- a/Source/Genes/Genitalia/GenitaliaUtility.cs +++ b/Source/Genes/Genitalia/GenitaliaUtility.cs @@ -99,6 +99,7 @@ namespace RJW_Genes case "rjw_genes_demonic_genitalia": return Genital_Helper.average_breasts; case "rjw_genes_dragon_genitalia": return Genital_Helper.average_breasts; case "rjw_genes_slime_genitalia": return Genital_Helper.slime_breasts; + case "rjw_genes_udder_breasts": return Genital_Helper.udder_breasts; case "rjw_genes_ovipositor_genitalia": return Genital_Helper.average_breasts; default: return Genital_Helper.generic_breasts; diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index 30baf90..b48b36c 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -43,6 +43,7 @@ +