public static void Doimpregnate(Pawn pawn, Pawn partner)
        {
            if (RJWSettings.DevMode)
            {
                Log.Message("[RJW] Doimpregnate " + xxx.get_pawnname(pawn) + " is a father, " + xxx.get_pawnname(partner) + " is a mother");
            }

            if (AndroidsCompatibility.IsAndroid(pawn) && !AndroidsCompatibility.AndroidPenisFertility(pawn))
            {
                if (RJWSettings.DevMode)
                {
                    Log.Message(" Father is android with no arcotech penis, abort");
                }
                return;
            }
            if (AndroidsCompatibility.IsAndroid(partner) && !AndroidsCompatibility.AndroidVaginaFertility(partner))
            {
                if (RJWSettings.DevMode)
                {
                    Log.Message(" Mother is android with no arcotech v****a, abort");
                }
                return;
            }

            // fertility check
            float fertility = RJWPregnancySettings.humanlike_impregnation_chance / 100f;

            if (xxx.is_animal(partner))
            {
                fertility = RJWPregnancySettings.animal_impregnation_chance / 100f;
            }

            // Interspecies modifier
            if (pawn.def.defName != partner.def.defName)
            {
                if (RJWPregnancySettings.complex_interspecies)
                {
                    fertility *= SexUtility.BodySimilarity(pawn, partner);
                }
                else
                {
                    fertility *= RJWPregnancySettings.interspecies_impregnation_modifier;
                }
            }

            //Rand.PopState();
            //Rand.PushState(RJW_Multiplayer.PredictableSeed());
            float          ReproductionFactor   = Math.Min(pawn.health.capacities.GetLevel(xxx.reproduction), partner.health.capacities.GetLevel(xxx.reproduction));
            float          pregnancy_threshold  = fertility * ReproductionFactor;
            float          non_pregnancy_chance = Rand.Value;
            BodyPartRecord torso = partner.RaceProps.body.AllParts.Find(x => x.def == BodyPartDefOf.Torso);

            if (non_pregnancy_chance > pregnancy_threshold || pregnancy_threshold == 0)
            {
                if (RJWSettings.DevMode)
                {
                    Log.Message(" Impregnation failed. Chance: " + pregnancy_threshold.ToStringPercent() + " roll: " + non_pregnancy_chance.ToStringPercent());
                }
                return;
            }
            if (RJWSettings.DevMode)
            {
                Log.Message(" Impregnation succeeded. Chance: " + pregnancy_threshold.ToStringPercent() + " roll: " + non_pregnancy_chance.ToStringPercent());
            }

            PregnancyDecider(partner, pawn);
        }