From c9369028fa6fb2644952d79a974299ed147bca96 Mon Sep 17 00:00:00 2001 From: lutepickle <28810-lutepickle@users.noreply.gitgud.io> Date: Wed, 27 Mar 2024 11:44:49 -0700 Subject: [PATCH] RJW tends not to set usedCondom on both participants in sex, so check for both --- .../HediffComps/MenstruationUtility.cs | 12 +++++++++++- .../RJW_Menstruation/Patch/RJW_Patch.cs | 11 ++++++----- changelogs.txt | 1 + 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/1.5/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs b/1.5/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs index 3251459..528989e 100644 --- a/1.5/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs +++ b/1.5/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs @@ -244,7 +244,8 @@ namespace RJW_Menstruation isInduced && comp.Pawn.jobs.curDriver is JobDriver_Sex job && job.Sexprops != null && - !job.Sexprops.usedCondom && + //!job.Sexprops.usedCondom && + !UsingCondom(comp.Pawn, job.Partner) && (job.Sexprops.sexType == xxx.rjwSextype.Vaginal || job.Sexprops.sexType == xxx.rjwSextype.DoublePenetration)) ovulatoryProgress = 0.0f; else if (comp.curStage == HediffComp_Menstruation.Stage.Ovulatory) ovulatoryProgress = isInduced ? Mathf.Max(ovaryChanceToShow_01, comp.StageProgessNextUpdate) : comp.StageProgessNextUpdate; @@ -466,5 +467,14 @@ namespace RJW_Menstruation return damage.totalDamageDealt; } + + // RJW only sets usedCondom on the sexprops of the initiator, so work around that by checking for either pawn having it set + public static bool UsingCondom(Pawn pawn, Pawn partner) + { + return + ((pawn?.jobs?.curDriver as JobDriver_Sex)?.Sexprops.usedCondom ?? false) + || + ((partner?.jobs?.curDriver as JobDriver_Sex)?.Sexprops.usedCondom ?? false); + } } } diff --git a/1.5/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs b/1.5/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs index eb776e3..cf7aaa0 100644 --- a/1.5/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs +++ b/1.5/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs @@ -19,13 +19,11 @@ namespace RJW_Menstruation public static bool Prefix(SexProps props) { xxx.rjwSextype sextype = props.sexType; - Pawn pawn = props.pawn; - Pawn partner = props.partner; + Pawn pawn = props.pawn; // Penis + Pawn partner = props.partner; // Womb if (sextype != xxx.rjwSextype.Vaginal && sextype != xxx.rjwSextype.DoublePenetration) return true; - if (!partner.ShouldCycle()) return true; - if (!InteractionCanCausePregnancy(props)) return false; List pawnparts = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn)); @@ -38,6 +36,8 @@ namespace RJW_Menstruation if (Genital_Helper.has_penis_fertile(pawn, pawnparts) && PregnancyHelper.CanImpregnate(pawn, partner, sextype)) { + if (MenstruationUtility.UsingCondom(pawn, partner)) return false; // Shouldn't be needed, but RJW has a bug in the condom checks + PregnancyHelper.DoImpregnate(pawn, partner); return false; } @@ -344,7 +344,8 @@ namespace RJW_Menstruation xxx.rjwSextype sextype = __instance.Sexprops.sexType; if (!(target is Pawn partner)) return; if (sextype != xxx.rjwSextype.Vaginal && sextype != xxx.rjwSextype.DoublePenetration) return; - if (__instance.Sexprops.usedCondom) return; + //if (__instance.Sexprops.usedCondom) return; + if (MenstruationUtility.UsingCondom(pawn, partner)) return; if (AndroidsCompatibility.IsAndroid(pawn)) return; if (!Impregnate_Patch.InteractionCanCausePregnancy(__instance.Sexprops)) return; if (!partner.ShouldCycle()) return; diff --git a/changelogs.txt b/changelogs.txt index 5be85af..1da13e5 100644 --- a/changelogs.txt +++ b/changelogs.txt @@ -1,5 +1,6 @@ Version 1.5.0.0 - Support for RimWorld 1.5. All future changes to Menstruation will only be for Rimworld 1.5. + - More reliably detect the usage of condoms. Version 1.0.9.4 - Added graphics for the menstruation genes with thanks to Alpenglow.