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); } }