public static void Postfix(PawnRenderer __instance, Pawn ___pawn, Vector3 rootLoc, float angle, bool renderBody, Rot4 bodyFacing, Rot4 headFacing, RotDrawMode bodyDrawType, bool portrait, bool headStump, bool invisible) { Pawn p = ___pawn; if (!Genital_Helper.has_penis_fertile(p) && !Genital_Helper.has_penis_infertile(p) && !Genital_Helper.has_multipenis(p)) { return; } string originalPath = __instance.graphics.nakedGraphic.path; string modifiedPath = originalPath + "_Lewd"; if (ContentFinder <Texture2D> .Get(modifiedPath + "_north", false) != null) { if (p?.jobs?.curDriver != null && p.jobs.curDriver is JobDriver_Sex || (timeSinceSex.ContainsKey(p))) { GraphicData originalGraphicData = p.ageTracker.CurKindLifeStage.bodyGraphicData; Graphic lewdGraphic = CachedGraphics.LewdGraphics.TryGetValue(modifiedPath); if (lewdGraphic != null) { Mesh lewdMesh = lewdGraphic.MeshAt(bodyFacing); rootLoc.y = (AltitudeLayer.LayingPawn - 1).AltitudeFor(); GenDraw.DrawMeshNowOrLater(lewdMesh, rootLoc, Quaternion.AngleAxis(angle, Vector3.up), lewdGraphic.MatAt(bodyFacing), portrait); } } if (p?.jobs?.curDriver != null && p.jobs.curDriver is JobDriver_Sex) { if (p.jobs.curDriver.ticksLeftThisToil <= 30f) { if (timeSinceSex.ContainsKey(p)) { timeSinceSex[p] = GenTicks.TicksGame - Rand.Range(0, 180); } else { timeSinceSex.Add(p, GenTicks.TicksGame); } } } else if (timeSinceSex.ContainsKey(p) && timeSinceSex[p] + 1000 < GenTicks.TicksGame) //time delay to disappearing texture on job end { timeSinceSex.Remove(p); } } }
public static bool Prefix(SexProps props) { xxx.rjwSextype sextype = props.sexType; Pawn pawn = props.pawn; Pawn partner = props.partner; if (sextype == xxx.rjwSextype.Vaginal) { var pawnpartBPR = Genital_Helper.get_genitalsBPR(pawn); var maleparts = Genital_Helper.get_PartsHediffList(pawn, pawnpartBPR); var partnerpartBPR = Genital_Helper.get_genitalsBPR(partner); var femaleparts = Genital_Helper.get_PartsHediffList(partner, partnerpartBPR); Pawn female = null, male = null; if (Genital_Helper.has_vagina(partner, femaleparts)) { female = partner; male = pawn; } else if (Genital_Helper.has_vagina(pawn, maleparts)) { female = pawn; femaleparts = maleparts; male = partner; maleparts = Genital_Helper.get_PartsHediffList(partner, partnerpartBPR); } else { return(true); } if (female.IsAnimal() && !Configurations.EnableAnimalCycle) { return(true); } HediffComp_Menstruation comp = female.GetMenstruationComp(); if (comp != null) { if (Genital_Helper.has_penis_fertile(male, maleparts) && PregnancyHelper.CanImpregnate(male, female, sextype)) { PregnancyHelper.Doimpregnate(male, female); return(false); } else if (Genital_Helper.has_ovipositorM(male, maleparts)) { comp.CumIn(male, Rand.Range(0.5f, 3.0f) * RJWSettings.cum_on_body_amount_adjust * male.BodySize, 1.0f); } else { comp.CumIn(male, male.GetCumVolume(maleparts), 0); } } //if (Genital_Helper.has_vagina(partner, partnerparts)) //{ // if (partner.IsAnimal() && !Configurations.EnableAnimalCycle) return true; // HediffComp_Menstruation comp = Utility.GetMenstruationComp(partner); // if (comp != null) // { // if (Genital_Helper.has_penis_fertile(pawn, pawnparts) && PregnancyHelper.CanImpregnate(pawn, partner, sextype)) // { // PregnancyHelper.Doimpregnate(pawn, partner); // return false; // } // else comp.CumIn(pawn, pawn.GetCumVolume(), 0); // } //} //else if (Genital_Helper.has_vagina(pawn, pawnparts)) //{ // if (pawn.IsAnimal() && !Configurations.EnableAnimalCycle) return true; // HediffComp_Menstruation comp = Utility.GetMenstruationComp(pawn); // if (comp != null) // { // if (Genital_Helper.has_penis_fertile(partner, partnerparts) && PregnancyHelper.CanImpregnate(partner, pawn, sextype)) // { // PregnancyHelper.Doimpregnate(partner, pawn); // return false; // } // else comp.CumIn(partner, partner.GetCumVolume(), 0); // } //} } return(true); }