Esempio n. 1
0
        protected override void Impregnate(Pawn pawn, Pawn part, bool isAnalSex)
        {
            if (pawn.RaceProps.IsMechanoid && xxx.is_human(part))
            {
                //--Log.Message("[RJW]JobDriver_RapeEnemyByMech::aftersex - mech raped humans");

                /*foreach (var item in DefDatabase<HediffDef_MechImplants>.AllDefs)
                 * {
                 *      //--Log.Message(pawn.def.defName + "Getting Implants\n" +item.defName + "\nParentDef:" + item.parentDef + "\nParentDefs:" + String.Join(",",item.parentDefs.ToArray()) );
                 * }*/
                HediffDef_MechImplants egg = (from x in DefDatabase <HediffDef_MechImplants> .AllDefs where x.IsParent(pawn.def.defName) select x).RandomElement <HediffDef_MechImplants>();

                PlantSomething(egg, part, isAnalSex, 1);
            }
        }
        //called by aftersex (including rape, breed, etc)
        //called by mcevent

        //pawn - "father"; partner = mother
        public static void impregnate(Pawn pawn, Pawn partner, xxx.rjwSextype sextype = xxx.rjwSextype.None)
        {
            if (RJWSettings.DevMode)
            {
                Log.Message("Rimjobworld::impregnate(" + sextype + "):: " + xxx.get_pawnname(pawn) + " + " + xxx.get_pawnname(partner) + ":");
            }

            //"mech" pregnancy
            if (sextype == xxx.rjwSextype.MechImplant)
            {
                if (RJWPregnancySettings.mechanoid_pregnancy_enabled)
                {
                    if (RJWSettings.DevMode)
                    {
                        Log.Message(" mechanoid pregnancy");
                    }

                    //new pregnancy
                    Hediff_MechanoidPregnancy.Create(partner, pawn);
                    Hediff_MechanoidPregnancy hediff = (Hediff_MechanoidPregnancy)partner.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("RJW_pregnancy_mech"));
                    if (RJWSettings.DevMode)
                    {
                        Log.Message("[RJW] removing other pregnancies");
                    }
                    if (partner.health.hediffSet.HasHediff(HediffDef.Named("RJW_pregnancy")))
                    {
                        partner.health.RemoveHediff(partner.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("RJW_pregnancy")));
                    }
                    if (partner.health.hediffSet.HasHediff(HediffDef.Named("RJW_pregnancy_beast")))
                    {
                        partner.health.RemoveHediff(partner.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("RJW_pregnancy_beast")));
                    }
                    if (partner.health.hediffSet.HasHediff(HediffDef.Named("Pregnant")))
                    {
                        partner.health.RemoveHediff(partner.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("Pregnant")));
                    }
                    return;

                    // Not an actual pregnancy. This implants mechanoid tech into the target.
                    //may lead to pregnancy
                    //old  "chip pregnancies", maybe integrate them somehow?
                    //Rand.PopState();
                    //Rand.PushState(RJW_Multiplayer.PredictableSeed());
                    HediffDef_MechImplants egg = (from x in DefDatabase <HediffDef_MechImplants> .AllDefs select x).RandomElement();
                    if (egg != null)
                    {
                        if (RJWSettings.DevMode)
                        {
                            Log.Message(" planting MechImplants:" + egg.ToString());
                        }
                        PlantSomething(egg, partner, !Genital_Helper.has_vagina(partner), 1);
                        return;
                    }
                    else
                    {
                        if (RJWSettings.DevMode)
                        {
                            Log.Message(" no mech implant found");
                        }
                    }
                }
                return;
            }

            // Sextype can result in pregnancy.
            if (!(sextype == xxx.rjwSextype.Vaginal || sextype == xxx.rjwSextype.DoublePenetration))
            {
                return;
            }

            //Log.Message("[RJW] RaceImplantEggs()" + pawn.RaceImplantEggs());
            //"insect" pregnancy
            //straight, female (partner) recives egg insertion from other/sex starter (pawn)
            if (Genital_Helper.has_vagina(partner) &&
                (Genital_Helper.has_ovipositorF(pawn) ||
                 (Genital_Helper.has_ovipositorM(pawn) ||
                  (Genital_Helper.has_penis(pawn) && pawn.RaceImplantEggs())))
                )
            {
                DoEgg(pawn, partner);
                return;
            }
            //reverse, female (pawn) starts sex/passive bestiality and fills herself with eggs - this is likely f****d up and needs fixing at jobdriver, processsex and aftersex levels
            else
            if (Genital_Helper.has_vagina(pawn) &&
                (Genital_Helper.has_ovipositorF(partner) ||
                 (Genital_Helper.has_ovipositorM(partner) ||
                  (Genital_Helper.has_penis(partner) && pawn.RaceImplantEggs())))
                )
            {
                DoEgg(partner, pawn);
                return;
            }

            //"normal" and "beastial" pregnancy
            if (RJWSettings.DevMode)
            {
                Log.Message(" 'normal' pregnancy checks");
            }

            //futa-futa docking?
            //if (CanImpregnate(partner, pawn, sextype) && CanImpregnate(pawn, partner, sextype))
            //{
            //Log.Message("[RJW] futa-futa docking...");
            //return;
            //Doimpregnate(pawn, partner);
            //Doimpregnate(partner, pawn);
            //}
            //normal, when female is passive/recives interaction
            if (Genital_Helper.has_penis(pawn) && Genital_Helper.has_vagina(partner) && CanImpregnate(pawn, partner, sextype))
            {
                if (RJWSettings.DevMode)
                {
                    Log.Message(" impregnate forward");
                }
                Doimpregnate(pawn, partner);
            }
            //reverse, when female active/starts interaction
            else if (Genital_Helper.has_vagina(pawn) && Genital_Helper.has_penis(partner) && CanImpregnate(partner, pawn, sextype))
            {
                if (RJWSettings.DevMode)
                {
                    Log.Message(" impregnate reverse");
                }
                Doimpregnate(partner, pawn);
            }
        }