mirror of
				https://gitgud.io/lutepickle/rjw_menstruation.git
				synced 2024-08-14 22:46:52 +00:00 
			
		
		
		
	Eliminate egg if there is an error implanting it.
This commit is contained in:
		
							parent
							
								
									f0c971eba0
								
							
						
					
					
						commit
						0c38513084
					
				
					 4 changed files with 70 additions and 59 deletions
				
			
		
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -1414,77 +1414,85 @@ namespace RJW_Menstruation
 | 
			
		|||
                }
 | 
			
		||||
                else if (Rand.Chance(Configurations.ImplantationChance * ImplantChance * InterspeciesImplantFactor(egg.fertilizer)))
 | 
			
		||||
                {
 | 
			
		||||
                    if (Configurations.Debug) Log.Message($"Implanting fertilized egg of {Pawn} into {parent}, father {egg.fertilizer}");
 | 
			
		||||
                    if (pregnancy != null)
 | 
			
		||||
                    try
 | 
			
		||||
                    {
 | 
			
		||||
                        if (Configurations.PregnancySource == Configurations.PregnancyType.Biotech && Configurations.EnableBiotechTwins && Configurations.EnableHeteroOvularTwins)
 | 
			
		||||
                        if (Configurations.Debug) Log.Message($"Implanting fertilized egg of {Pawn} into {parent}, father {egg.fertilizer}");
 | 
			
		||||
                        if (pregnancy != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (Configurations.Debug) Log.Message($"Adding to existing Biotech pregnancy {pregnancy}");
 | 
			
		||||
                            HediffComp_PregeneratedBabies comp = pregnancy.TryGetComp<HediffComp_PregeneratedBabies>();
 | 
			
		||||
                            if (comp == null) Log.Warning($"Trying to add Biotech egg to {Pawn}'s pregnancy without a pregenerated baby comp: {pregnancy}");
 | 
			
		||||
                            else
 | 
			
		||||
                            if (Configurations.PregnancySource == Configurations.PregnancyType.Biotech && Configurations.EnableBiotechTwins && Configurations.EnableHeteroOvularTwins)
 | 
			
		||||
                            {
 | 
			
		||||
                                comp.AddNewBaby(Pawn, egg.fertilizer);
 | 
			
		||||
                                if (Configurations.Debug) Log.Message($"Adding to existing Biotech pregnancy {pregnancy}");
 | 
			
		||||
                                HediffComp_PregeneratedBabies comp = pregnancy.TryGetComp<HediffComp_PregeneratedBabies>();
 | 
			
		||||
                                if (comp == null) Log.Warning($"Trying to add Biotech egg to {Pawn}'s pregnancy without a pregenerated baby comp: {pregnancy}");
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    comp.AddNewBaby(Pawn, egg.fertilizer);
 | 
			
		||||
                                    pregnant = true;
 | 
			
		||||
                                    deadeggs.Add(egg);
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else if (Configurations.PregnancySource == Configurations.PregnancyType.MultiplePregnancy && Configurations.EnableHeteroOvularTwins)
 | 
			
		||||
                            {
 | 
			
		||||
                                if (pregnancy is Hediff_MultiplePregnancy h)
 | 
			
		||||
                                {
 | 
			
		||||
                                    if (Configurations.Debug) Log.Message($"Adding to existing pregnancy {h}");
 | 
			
		||||
                                    h.AddNewBaby(Pawn, egg.fertilizer);
 | 
			
		||||
                                }
 | 
			
		||||
                                pregnant = true;
 | 
			
		||||
                                deadeggs.Add(egg);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        else if (Configurations.PregnancySource == Configurations.PregnancyType.MultiplePregnancy && Configurations.EnableHeteroOvularTwins)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (pregnancy is Hediff_MultiplePregnancy h)
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                if (Configurations.Debug) Log.Message($"Adding to existing pregnancy {h}");
 | 
			
		||||
                                h.AddNewBaby(Pawn, egg.fertilizer);
 | 
			
		||||
                                pregnant = true;
 | 
			
		||||
                                break;
 | 
			
		||||
                            }
 | 
			
		||||
                            pregnant = true;
 | 
			
		||||
                            deadeggs.Add(egg);
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            pregnant = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                            Configurations.PregnancyType usePregnancy = xxx.is_human(Pawn) ? Configurations.PregnancySource : Configurations.PregnancyType.MultiplePregnancy;
 | 
			
		||||
                            switch (usePregnancy)
 | 
			
		||||
                            {
 | 
			
		||||
                                case Configurations.PregnancyType.BaseRJW:
 | 
			
		||||
 | 
			
		||||
                                    if (Configurations.Debug) Log.Message($"Creating new base RJW pregnancy");
 | 
			
		||||
                                    PregnancyHelper.AddPregnancyHediff(Pawn, egg.fertilizer);
 | 
			
		||||
                                    // I hate having to do this, but it gets the newest pregnancy
 | 
			
		||||
                                    List<Hediff_BasePregnancy> pregnancies = new List<Hediff_BasePregnancy>();
 | 
			
		||||
                                    Pawn.health.hediffSet.GetHediffs(ref pregnancies);
 | 
			
		||||
                                    pregnancy = pregnancies.MaxBy(hediff => hediff.loadID);
 | 
			
		||||
                                    pregnant = true;
 | 
			
		||||
                                    break;
 | 
			
		||||
 | 
			
		||||
                                case Configurations.PregnancyType.MultiplePregnancy:
 | 
			
		||||
                                    if (Configurations.Debug) Log.Message($"Creating new menstruation pregnancy");
 | 
			
		||||
                                    pregnancy = Hediff_BasePregnancy.Create<Hediff_MultiplePregnancy>(Pawn, egg.fertilizer);
 | 
			
		||||
                                    pregnant = true;
 | 
			
		||||
                                    deadeggs.Add(egg);
 | 
			
		||||
                                    break;
 | 
			
		||||
 | 
			
		||||
                                case Configurations.PregnancyType.Biotech:
 | 
			
		||||
                                    if (Configurations.Debug) Log.Message($"Creating new biotech pregnancy");
 | 
			
		||||
                                    pregnancy = HediffMaker.MakeHediff(HediffDefOf.PregnantHuman, Pawn);
 | 
			
		||||
                                    if (Configurations.EnableBiotechTwins)
 | 
			
		||||
                                        pregnancy.TryGetComp<HediffComp_PregeneratedBabies>().AddNewBaby(Pawn, egg.fertilizer);
 | 
			
		||||
                                    ((Hediff_Pregnant)pregnancy).SetParents(Pawn, egg.fertilizer, PregnancyUtility.GetInheritedGeneSet(egg.fertilizer, Pawn));
 | 
			
		||||
                                    Pawn.health.AddHediff(pregnancy);
 | 
			
		||||
                                    pregnant = true;
 | 
			
		||||
                                    deadeggs.Add(egg);
 | 
			
		||||
                                    break;
 | 
			
		||||
                            }
 | 
			
		||||
                            if (pregnancy is Hediff_BasePregnancy rjw_preg)
 | 
			
		||||
                            {
 | 
			
		||||
                                // TODO: advance biotech pregnancy
 | 
			
		||||
                                rjw_preg.p_start_tick -= egg.ticksSinceFertilization / Configurations.CycleAcceleration;
 | 
			
		||||
                                rjw_preg.p_end_tick -= egg.ticksSinceFertilization / Configurations.CycleAcceleration;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    catch (Exception ex)
 | 
			
		||||
                    {
 | 
			
		||||
                        Configurations.PregnancyType usePregnancy = xxx.is_human(Pawn) ? Configurations.PregnancySource : Configurations.PregnancyType.MultiplePregnancy;
 | 
			
		||||
                        switch (usePregnancy)
 | 
			
		||||
                        {
 | 
			
		||||
                            case Configurations.PregnancyType.BaseRJW:
 | 
			
		||||
                                
 | 
			
		||||
                                if (Configurations.Debug) Log.Message($"Creating new base RJW pregnancy");
 | 
			
		||||
                                PregnancyHelper.AddPregnancyHediff(Pawn, egg.fertilizer);
 | 
			
		||||
                                // I hate having to do this, but it gets the newest pregnancy
 | 
			
		||||
                                List<Hediff_BasePregnancy> pregnancies = new List<Hediff_BasePregnancy>();
 | 
			
		||||
                                Pawn.health.hediffSet.GetHediffs(ref pregnancies);
 | 
			
		||||
                                pregnancy = pregnancies.MaxBy(hediff => hediff.loadID);
 | 
			
		||||
                                pregnant = true;
 | 
			
		||||
                                break;                                
 | 
			
		||||
 | 
			
		||||
                            case Configurations.PregnancyType.MultiplePregnancy:
 | 
			
		||||
                                if (Configurations.Debug) Log.Message($"Creating new menstruation pregnancy");
 | 
			
		||||
                                pregnancy = Hediff_BasePregnancy.Create<Hediff_MultiplePregnancy>(Pawn, egg.fertilizer);
 | 
			
		||||
                                pregnant = true;
 | 
			
		||||
                                deadeggs.Add(egg);
 | 
			
		||||
                                break;
 | 
			
		||||
 | 
			
		||||
                            case Configurations.PregnancyType.Biotech:
 | 
			
		||||
                                if (Configurations.Debug) Log.Message($"Creating new biotech pregnancy");
 | 
			
		||||
                                pregnancy = HediffMaker.MakeHediff(HediffDefOf.PregnantHuman, Pawn);
 | 
			
		||||
                                if(Configurations.EnableBiotechTwins)
 | 
			
		||||
                                    pregnancy.TryGetComp<HediffComp_PregeneratedBabies>().AddNewBaby(Pawn, egg.fertilizer);
 | 
			
		||||
                                ((Hediff_Pregnant)pregnancy).SetParents(Pawn, egg.fertilizer, PregnancyUtility.GetInheritedGeneSet(egg.fertilizer, Pawn));
 | 
			
		||||
                                Pawn.health.AddHediff(pregnancy);
 | 
			
		||||
                                pregnant = true;
 | 
			
		||||
                                deadeggs.Add(egg);
 | 
			
		||||
                                break;
 | 
			
		||||
                        }
 | 
			
		||||
                        if (pregnancy is Hediff_BasePregnancy rjw_preg)
 | 
			
		||||
                        {
 | 
			
		||||
                            // TODO: advance biotech pregnancy
 | 
			
		||||
                            rjw_preg.p_start_tick -= egg.ticksSinceFertilization / Configurations.CycleAcceleration;
 | 
			
		||||
                            rjw_preg.p_end_tick -= egg.ticksSinceFertilization / Configurations.CycleAcceleration;
 | 
			
		||||
                        }
 | 
			
		||||
                        Log.Error($"Error creating pregnancy in {Pawn}'s womb, father {egg.fertilizer}: {ex}");
 | 
			
		||||
                        deadeggs.Add(egg);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
| 
						 | 
				
			
			@ -1492,7 +1500,7 @@ namespace RJW_Menstruation
 | 
			
		|||
                    if (Configurations.Debug)
 | 
			
		||||
                    {
 | 
			
		||||
                        float implantChance = Configurations.ImplantationChance * ImplantChance * InterspeciesImplantFactor(egg.fertilizer);
 | 
			
		||||
                        Log.Message($"Fertilized egg of {Pawn} failed to implant (chance {implantChance.ToStringPercent()}, father {egg.fertilizer})");
 | 
			
		||||
                        if (Configurations.Debug) Log.Message($"Fertilized egg of {Pawn} failed to implant (chance {implantChance.ToStringPercent()}, father {egg.fertilizer})");
 | 
			
		||||
                    }
 | 
			
		||||
                    deadeggs.Add(egg);
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 | 
			
		||||
<Manifest>
 | 
			
		||||
	<identifier>RJW Menstruation</identifier>
 | 
			
		||||
	<version>1.0.9.1</version>
 | 
			
		||||
	<version>1.0.9.2</version>
 | 
			
		||||
	<dependencies>
 | 
			
		||||
	</dependencies>
 | 
			
		||||
	<incompatibleWith />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,6 @@
 | 
			
		|||
Version 1.0.9.2
 | 
			
		||||
 - Prevent repeated pregnancies when some errors occur.
 | 
			
		||||
 | 
			
		||||
Version 1.0.9.1
 | 
			
		||||
 - Japanese translation for most text by Lokuzt.
 | 
			
		||||
 - New womb, cum, and fetus graphics by Euldrop.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue