diff --git a/.gitignore b/.gitignore
index 2236aa5..b14b0f8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -343,3 +343,6 @@ healthchecksdb
*.psd
*.dds
*.pdn
+
+Directory.Build.props
+Directory.Build.targets
diff --git a/1.6/Animal Genetics/Assemblies/Animal Genetics.dll b/1.6/Animal Genetics/Assemblies/Animal Genetics.dll
index 3591631..e28598f 100644
Binary files a/1.6/Animal Genetics/Assemblies/Animal Genetics.dll and b/1.6/Animal Genetics/Assemblies/Animal Genetics.dll differ
diff --git a/1.6/Assemblies/RJW_Menstruation.dll b/1.6/Assemblies/RJW_Menstruation.dll
index 53e512c..86b2376 100644
Binary files a/1.6/Assemblies/RJW_Menstruation.dll and b/1.6/Assemblies/RJW_Menstruation.dll differ
diff --git a/1.6/Defs/RJWTab/PawnColumnDefs_Menstruation.xml b/1.6/Defs/RJWTab/PawnColumnDefs_Menstruation.xml
new file mode 100644
index 0000000..1ef4a86
--- /dev/null
+++ b/1.6/Defs/RJWTab/PawnColumnDefs_Menstruation.xml
@@ -0,0 +1,11 @@
+
+
+
+ RJWMenstruation_Womb
+ Womb/Womb
+ Open womb status. Click the header to sort by womb presence and cycle stage.
+ RJW_Menstruation.MainTab.PawnColumnWorker_WombStatus
+ true
+ 34
+
+
diff --git a/1.6/Humanoid Alien Races/Assemblies/HAR.dll b/1.6/Humanoid Alien Races/Assemblies/HAR.dll
index 90ec171..611da42 100644
Binary files a/1.6/Humanoid Alien Races/Assemblies/HAR.dll and b/1.6/Humanoid Alien Races/Assemblies/HAR.dll differ
diff --git a/1.6/Patches/RJW_PawnTableDefs.xml b/1.6/Patches/RJW_PawnTableDefs.xml
new file mode 100644
index 0000000..edbc555
--- /dev/null
+++ b/1.6/Patches/RJW_PawnTableDefs.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ /Defs/PawnTableDef[defName="RJW_PawnTable_Colonists"]/columns/li[text()="Pregnant"]
+
+ RJWMenstruation_Womb
+
+
+
+ /Defs/PawnTableDef[defName="RJW_PawnTable_Property"]/columns/li[text()="Pregnant"]
+
+ RJWMenstruation_Womb
+
+
+
+
+
diff --git a/1.6/Quirks/Assemblies/Quirks.dll b/1.6/Quirks/Assemblies/Quirks.dll
index 5617250..91a4a19 100644
Binary files a/1.6/Quirks/Assemblies/Quirks.dll and b/1.6/Quirks/Assemblies/Quirks.dll differ
diff --git a/1.6/Vanilla Expanded Core/Assemblies/VECore.dll b/1.6/Vanilla Expanded Core/Assemblies/VECore.dll
index 968020c..f47a501 100644
Binary files a/1.6/Vanilla Expanded Core/Assemblies/VECore.dll and b/1.6/Vanilla Expanded Core/Assemblies/VECore.dll differ
diff --git a/1.6/source/RJW_Menstruation/RJW_Menstruation/Cum.cs b/1.6/source/RJW_Menstruation/RJW_Menstruation/Cum.cs
index b02d683..94eecdb 100644
--- a/1.6/source/RJW_Menstruation/RJW_Menstruation/Cum.cs
+++ b/1.6/source/RJW_Menstruation/RJW_Menstruation/Cum.cs
@@ -169,6 +169,13 @@ namespace RJW_Menstruation
Scribe_Values.Look(ref useCustomColor, "useCustomColor", false);
Scribe_Values.Look(ref customColor, "customColor", default);
Scribe_Defs.Look(ref filthDef, "filthDef");
+ if (Scribe.mode == LoadSaveMode.PostLoadInit &&
+ (Single.IsInfinity(FertVolume) || Single.IsNaN(FertVolume) || volume < 0f))
+ {
+ Log.Error($"Invalid amount of {pawn}'s cum in a womb");
+ volume = 0;
+ fertility = 0;
+ }
}
public void MakeThinner(float speed)
diff --git a/1.6/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs b/1.6/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs
index 81a1cd3..afca25e 100644
--- a/1.6/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs
+++ b/1.6/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs
@@ -126,7 +126,7 @@ namespace RJW_Menstruation
protected int? opcache = null;
protected float antisperm = 0.0f;
// RJW pregnancy, or Biotech pregnancy/labor/laborpushing
- protected Hediff pregnancy = null;
+ protected Hediff pregnancy = null; // Remove, instead reference per-genital pregnancy list
protected int eggLifeSpanTicks = GenDate.DaysToTicks(2);
protected EstrusLevel estrusLevel = EstrusLevel.Visible;
@@ -313,7 +313,7 @@ namespace RJW_Menstruation
{
StatDefOf.Fertility.Worker.ClearCacheForThing(Pawn); // No effect for now, but a future RW update might add caching for this
calculatingOvulationChance = true;
- ovulationChance *= PawnCapacityUtility.CalculateCapacityLevel(Pawn.health.hediffSet, xxx.reproduction);
+ ovulationChance *= PawnCapacityUtility.CalculateCapacityLevel(Pawn.health.hediffSet, xxx.reproduction); // Add genital fertility
}
finally
{
@@ -882,6 +882,11 @@ namespace RJW_Menstruation
return cums?.Find(cum => !cum.notcum && cum.pawn == pawn);
}
+ public IEnumerable GetFluids()
+ {
+ return cums ?? Enumerable.Empty();
+ }
+
public IEnumerable GetFluids(Pawn pawn)
{
return cums?.Where(cum => cum.pawn == pawn) ?? Enumerable.Empty();
@@ -1476,7 +1481,7 @@ namespace RJW_Menstruation
try
{
if (Configurations.Debug) Log.Message($"Implanting fertilized egg of {Pawn} into {parent}, father {egg.fertilizer}");
- if (pregnancy == null)
+ if (pregnancy == null) // Support pregnancy list, maybe split off into function
{
Configurations.PregnancyType usePregnancy = xxx.is_human(Pawn) ? Configurations.PregnancySource : Configurations.PregnancyType.MultiplePregnancy;
switch (usePregnancy)
@@ -1494,7 +1499,7 @@ namespace RJW_Menstruation
case Configurations.PregnancyType.MultiplePregnancy:
if (Configurations.Debug) Log.Message($"Creating new menstruation pregnancy");
- pregnancy = Hediff_BasePregnancy.Create(Pawn, egg.fertilizer);
+ pregnancy = Hediff_BasePregnancy.Create(Pawn, egg.fertilizer); // Add fertility comp of mother
pregnant = true;
deadeggs.Add(egg);
break;
diff --git a/1.6/source/RJW_Menstruation/RJW_Menstruation/MainTab/PawnColumnWorker_WombStatus.cs b/1.6/source/RJW_Menstruation/RJW_Menstruation/MainTab/PawnColumnWorker_WombStatus.cs
new file mode 100644
index 0000000..3c28db8
--- /dev/null
+++ b/1.6/source/RJW_Menstruation/RJW_Menstruation/MainTab/PawnColumnWorker_WombStatus.cs
@@ -0,0 +1,138 @@
+using RimWorld;
+using UnityEngine;
+using Verse;
+
+namespace RJW_Menstruation.MainTab
+{
+ public class PawnColumnWorker_WombStatus : PawnColumnWorker
+ {
+ private const float CellIconSize = 24f;
+ private const float ProgressBarHeight = 2f;
+ private const float IconScale = 0.85f;
+ private const int HasVisibleWombOffset = 100;
+
+ public override void DoCell(Rect rect, Pawn pawn, PawnTable table)
+ {
+ HediffComp_Menstruation comp = GetDisplayComp(pawn);
+ if (comp == null) return;
+
+ Gizmo_Womb gizmo = Pawn_GetGizmos.CreateGizmo_WombStatus(pawn, comp);
+ Rect iconRect = new Rect(
+ rect.x + (rect.width - CellIconSize) / 2f,
+ rect.y + Mathf.Max((rect.height - CellIconSize) / 2f, 0f),
+ CellIconSize,
+ CellIconSize);
+
+ DrawCellIcon(iconRect, gizmo);
+
+ if (Mouse.IsOver(iconRect) && !gizmo.defaultDesc.NullOrEmpty())
+ {
+ TooltipHandler.TipRegion(iconRect, gizmo.defaultDesc);
+ }
+
+ if (Widgets.ButtonInvisible(iconRect, doMouseoverSound: false))
+ {
+ Dialog_WombStatus.ToggleWindow(pawn, comp);
+ }
+ }
+
+ public override int GetMinWidth(PawnTable table)
+ {
+ return 30;
+ }
+
+ public override int GetMaxWidth(PawnTable table)
+ {
+ return GetMinWidth(table);
+ }
+
+ public override int GetMinCellHeight(Pawn pawn)
+ {
+ return 30;
+ }
+
+ public override int Compare(Pawn a, Pawn b)
+ {
+ int result = GetSortValue(a).CompareTo(GetSortValue(b));
+ if (result != 0) return result;
+
+ return string.CompareOrdinal(a.LabelShortCap, b.LabelShortCap);
+ }
+
+ private static HediffComp_Menstruation GetDisplayComp(Pawn pawn)
+ {
+ if (!pawn.ShowStatus() || !pawn.ShouldCycle()) return null;
+
+ HediffComp_Menstruation comp = pawn.GetFirstMenstruationComp();
+ if (comp == null) return null;
+
+ if (!Configurations.ShowInfertileIcon &&
+ (comp.CurrentVisibleStage == HediffComp_Menstruation.Stage.Infertile ||
+ comp.CurrentVisibleStage == HediffComp_Menstruation.Stage.None))
+ {
+ return null;
+ }
+
+ return comp;
+ }
+
+ private static int GetSortValue(Pawn pawn)
+ {
+ if (!pawn.ShowStatus() || !pawn.ShouldCycle()) return int.MinValue;
+
+ HediffComp_Menstruation comp = pawn.GetFirstMenstruationComp();
+ if (comp == null) return int.MinValue + 1;
+
+ return HasVisibleWombOffset + GetStageSortValue(comp.CurrentVisibleStage);
+ }
+
+ private static int GetStageSortValue(HediffComp_Menstruation.Stage stage)
+ {
+ switch (stage)
+ {
+ case HediffComp_Menstruation.Stage.Luteal:
+ return 9;
+ case HediffComp_Menstruation.Stage.Ovulatory:
+ return 8;
+ case HediffComp_Menstruation.Stage.Follicular:
+ return 7;
+ case HediffComp_Menstruation.Stage.Pregnant:
+ return 6;
+ case HediffComp_Menstruation.Stage.Bleeding:
+ return 5;
+ case HediffComp_Menstruation.Stage.Recover:
+ return 4;
+ case HediffComp_Menstruation.Stage.Anestrus:
+ return 3;
+ case HediffComp_Menstruation.Stage.Infertile:
+ return 2;
+ case HediffComp_Menstruation.Stage.None:
+ return 1;
+ default:
+ return 0;
+ }
+ }
+
+ private static void DrawCellIcon(Rect rect, Gizmo_Womb gizmo)
+ {
+ Texture baseIcon = gizmo.icon ?? BaseContent.BadTex;
+ Texture overlay = gizmo.icon_overlay ?? BaseContent.BadTex;
+
+ Widgets.DrawTextureFitted(rect, baseIcon, IconScale);
+
+ Color oldColor = GUI.color;
+ GUI.color = gizmo.cumcolor;
+ Widgets.DrawTextureFitted(rect, overlay, IconScale);
+ GUI.color = Color.white;
+
+ if (Configurations.DrawEggOverlay)
+ {
+ gizmo.comp.DrawEggOverlay(rect, false);
+ }
+
+ Rect progressRect = new Rect(rect.x + 2f, rect.y, rect.width - 4f, ProgressBarHeight);
+ Widgets.FillableBar(progressRect, gizmo.comp.StageProgress, gizmo.comp.GetStageTexture);
+ GUI.color = oldColor;
+ }
+ }
+}
diff --git a/1.6/source/RJW_Menstruation/RJW_Menstruation/Patch/Gizmo_Patch.cs b/1.6/source/RJW_Menstruation/RJW_Menstruation/Patch/Gizmo_Patch.cs
index 7838e01..8c2b59b 100644
--- a/1.6/source/RJW_Menstruation/RJW_Menstruation/Patch/Gizmo_Patch.cs
+++ b/1.6/source/RJW_Menstruation/RJW_Menstruation/Patch/Gizmo_Patch.cs
@@ -46,7 +46,7 @@ namespace RJW_Menstruation
}
- private static Gizmo CreateGizmo_WombStatus(Pawn pawn, HediffComp_Menstruation comp)
+ internal static Gizmo_Womb CreateGizmo_WombStatus(Pawn pawn, HediffComp_Menstruation comp)
{
if (!comp.loaded)
comp.Initialize();
diff --git a/1.6/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs b/1.6/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs
index b1577ec..fa25f4c 100644
--- a/1.6/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs
+++ b/1.6/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs
@@ -23,7 +23,7 @@ namespace RJW_Menstruation
if (sextype != xxx.rjwSextype.Vaginal && sextype != xxx.rjwSextype.DoublePenetration) return true;
if (!mother.ShouldCycle()) return true;
- if (!InteractionCanCausePregnancy(props)) return false;
+ if (!InteractionCanCausePregnancy(props)) return true;
List pawnparts = Genital_Helper.get_PartsHediffList(father, Genital_Helper.get_genitalsBPR(father));
diff --git a/1.6/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj b/1.6/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj
index 0c6dfeb..26593c6 100644
--- a/1.6/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj
+++ b/1.6/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj
@@ -90,6 +90,7 @@
+
@@ -178,4 +179,4 @@
-
\ No newline at end of file
+
diff --git a/1.6/source/RJW_Menstruation/RJW_Menstruation/Utility.cs b/1.6/source/RJW_Menstruation/RJW_Menstruation/Utility.cs
index 218c3fd..854e200 100644
--- a/1.6/source/RJW_Menstruation/RJW_Menstruation/Utility.cs
+++ b/1.6/source/RJW_Menstruation/RJW_Menstruation/Utility.cs
@@ -207,8 +207,8 @@ namespace RJW_Menstruation
Hediff hediff = pawn.GetBreastList().MaxBy(h => h.Severity);
HediffComp_Breast comp = hediff.TryGetComp();
string icon;
- if (breastCount > 1) icon = "Breasts_Udder/Breast_Breast";
- else icon = comp?.BreastTex ?? "Breasts/Breast_Breast";
+ if (breastCount > 1) icon = "Breasts_Udder/Breast";
+ else icon = comp?.BreastTex ?? "Breasts/Breast";
if (hediff.Severity < 0.20f) icon += "_Breast00";
else if (hediff.Severity < 0.40f) icon += "_Breast01";
@@ -339,7 +339,7 @@ namespace RJW_Menstruation
}
public static string GetBreastLabel(this Pawn pawn)
{
- Hediff hediff = pawn.health.hediffSet.hediffs.FirstOrDefault(h => VariousDefOf.AllBreasts.Contains(h.def));
+ Hediff hediff = pawn.health.hediffSet.hediffs.Where(h => VariousDefOf.AllBreasts.Contains(h.def)).MaxByWithFallback(h => h.Severity);
if (hediff != null) return hediff.LabelBase.CapitalizeFirst() + "\n(" + hediff.LabelInBrackets + ")";
else return "";
}
diff --git a/About/Manifest.xml b/About/Manifest.xml
index 9597ee4..bef173d 100644
--- a/About/Manifest.xml
+++ b/About/Manifest.xml
@@ -1,7 +1,7 @@
RJW Menstruation
- 1.6.2.2
+ 1.6.2.4
diff --git a/changelogs.txt b/changelogs.txt
index 3dca13e..7316879 100644
--- a/changelogs.txt
+++ b/changelogs.txt
@@ -1,3 +1,10 @@
+Version 1.6.2.4
+ - Fix error on startup and missing womb status in RJW tab with RJW 6.1.4.
+
+Version 1.6.2.3
+ - Fix multiple breasts not appearing in the menstruation UI.
+ - Status of wombs now appears in RJW main tab, contributed by GhostClinic.
+
Version 1.6.2.2
- Pawns with multiple breasts will now display an udder in the menstruation UI.
- Updated Traditional Chinese translation by Hydrogen.