-
+
\ 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
+ spelopedeCarriers of this gene can generate tame spelopedes. Higher psychic-sensitivity will spawn more spelopedes.World/WorldObjects/Expanding/Insects12
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 @@
+