From fb170aacb21607387517955dd33d351bdafa5ba0 Mon Sep 17 00:00:00 2001 From: moreoreganostodump Date: Fri, 12 Feb 2021 13:16:46 +0900 Subject: [PATCH] added multiple pregnancy --- About/Manifest.xml | 2 +- Assemblies/RJW_Menstruation.dll | Bin 52224 -> 65536 bytes Languages/English/Keyed/RJW_Menstruation.xml | 12 +- Languages/Korean/Keyed/RJW_Menstruation.xml | 12 +- Patches/Hediffs.xml | 19 - Patches/Hediffs_PrivateParts.xml | 12 +- changelogs.txt | 17 + .../RJW_Menstruation/Configurations.cs | 75 ++- .../RJW_Menstruation/Dialog_WombStatus.cs | 47 +- .../HediffComp_Menstruation.cs | 81 ++- .../Hediff_MultiplePregnancy.cs | 505 ++++++++++++++++++ .../RJW_Menstruation/RJW_Menstruation.csproj | 3 +- .../RJW_Menstruation/Translations.cs | 8 + .../RJW_Menstruation/Utility.cs | 18 +- .../RJW_Menstruation/VariousDefOf.cs | 2 + 15 files changed, 755 insertions(+), 58 deletions(-) delete mode 100644 Patches/Hediffs.xml create mode 100644 source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs diff --git a/About/Manifest.xml b/About/Manifest.xml index 1a077cf..b0be86c 100644 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,7 +1,7 @@ RJW Menstruation - 1.0.0.8 + 1.0.1.0 diff --git a/Assemblies/RJW_Menstruation.dll b/Assemblies/RJW_Menstruation.dll index ebe0c66992fa7b85f9d94ec8270084ac377b2fff..d4ee69afd3830e5189dcd2cf2f44c24a0b0856cc 100644 GIT binary patch literal 65536 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 X&wrN!{3=wQw)b-6^s~?ZKMMR8H1=>a literal 52224 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 not show fetus image and informations enable menopause enable menopause effect that makes pawn infertile in time progress if you have problems with long life races, turn off this option. this option will apply after save loaded - - + use multiple pregnancy + use multiple pregnancy instead RJW's default pregnancy + enable hetero ovular twins + enable multiple eggs can get pregnant + enable enzygotic twins + enable single egg to result multiple offsprings + enzygotic twins chance + set chance of twins + max enzygotic twins + set max number of twins \ No newline at end of file diff --git a/Languages/Korean/Keyed/RJW_Menstruation.xml b/Languages/Korean/Keyed/RJW_Menstruation.xml index b136765..19a655a 100644 --- a/Languages/Korean/Keyed/RJW_Menstruation.xml +++ b/Languages/Korean/Keyed/RJW_Menstruation.xml @@ -50,8 +50,16 @@ 태아에 대한 어떠한 정보도 표시하지 않습니다. 폐경기 활성화 시간이 지남에따라 불임상태로 만드는 폐경기를 활성화합니다. 수명이 긴 종족을 사용할때 문제가 있으면 이 옵션을 끄세요. 변경한후에 세이브로드가 필요합니다. - - + 다중임신 + RJW의 기본임신 대신 다중임신을 사용합니다. + 이란성 쌍둥이 활성화 + 다수의 난자가 임신으로 이어지게 합니다. + 일란성 쌍둥이 활성화 + 하나의 난자가 다수의 태아로 나뉘게 합니다. + 일란성 쌍둥이 확률 + 일란성 쌍둥이가 발생할 확률을 설정합니다. + 최대 일란성 쌍둥이 수 + 일란성 쌍둥이의 수를 제한합니다. \ No newline at end of file diff --git a/Patches/Hediffs.xml b/Patches/Hediffs.xml deleted file mode 100644 index cbef992..0000000 --- a/Patches/Hediffs.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Defs/HediffDef[defName="RJW_IUD"]/stages - - -
  • - -
  • - RJW_Fertility - 1.0 -
  • - - -
    -
    -
    -
    \ No newline at end of file diff --git a/Patches/Hediffs_PrivateParts.xml b/Patches/Hediffs_PrivateParts.xml index 6860f64..7c0595c 100644 --- a/Patches/Hediffs_PrivateParts.xml +++ b/Patches/Hediffs_PrivateParts.xml @@ -12,7 +12,7 @@
  • - 500 + 15 1.0 1.0 0.05 @@ -34,7 +34,7 @@
  • - 500 + 50 0.5 0.2 0.05 @@ -55,7 +55,7 @@
  • - 500 + 15 1.0 1.0 0.05 @@ -76,7 +76,7 @@
  • - 500 + 15 Womb/Womb Genitals/BionicVagina true @@ -90,7 +90,7 @@
  • - 500 + 15 Womb/Womb Genitals/BionicVagina true @@ -104,7 +104,7 @@
  • - 500 + 15 1.0 1.0 0.05 diff --git a/changelogs.txt b/changelogs.txt index 4b39ce1..274469b 100644 --- a/changelogs.txt +++ b/changelogs.txt @@ -1,3 +1,20 @@ +Version 1.0.1.0 + - requires RJW 4.6.1 or later + - added multiple pregnancy + - added options for twins + - if you turn off both twin options, you will get only one baby on every pregnancy. + - male's litter curve size does not affect to number of offspring + - female can get multiple offsprings with multiple races. + +Version 1.0.0.10 + - fixed cycle acceleration option was not saved. + - cum capacity decreased greatly. + - blood amount during in period decreased. + +Version 1.0.0.9 + - update for RJW 4.6.0 (if you didn't update RJW, you don't need to update this mod) + - removed patch file for IUD. + Version 1.0.0.8 - added option for disable menopause. diff --git a/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs b/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs index 6a98751..842e017 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs @@ -10,16 +10,18 @@ namespace RJW_Menstruation { public class Configurations : ModSettings { - public static readonly float ImplantationChanceDefault = 0.25f; - public static readonly int ImplantationChanceAdjustDefault = 25; - public static readonly float FertilizeChanceDefault = 0.05f; - public static readonly int FertilizeChanceAdjustDefault = 50; - public static readonly float CumDecayRatioDefault = 0.05f; - public static readonly int CumDecayRatioAdjustDefault = 50; - public static readonly float CumFertilityDecayRatioDefault = 0.2f; - public static readonly int CumFertilityDecayRatioAdjustDefault = 200; - public static readonly int CycleAccelerationDefault = 6; - + public const float ImplantationChanceDefault = 0.25f; + public const int ImplantationChanceAdjustDefault = 25; + public const float FertilizeChanceDefault = 0.05f; + public const int FertilizeChanceAdjustDefault = 50; + public const float CumDecayRatioDefault = 0.05f; + public const int CumDecayRatioAdjustDefault = 50; + public const float CumFertilityDecayRatioDefault = 0.2f; + public const int CumFertilityDecayRatioAdjustDefault = 200; + public const int CycleAccelerationDefault = 6; + public const float EnzygoticTwinsChanceDefault = 0.002f; + public const int EnzygoticTwinsChanceAdjustDefault = 2; + public const int MaxEnzygoticTwinsDefault = 9; public static float ImplantationChance = ImplantationChanceDefault; public static int ImplantationChanceAdjust = ImplantationChanceAdjustDefault; @@ -37,6 +39,12 @@ namespace RJW_Menstruation public static bool Debug = false; public static bool EnableMenopause = true; public static DetailLevel InfoDetail = DetailLevel.All; + public static bool UseMultiplePregnancy = true; + public static bool EnableHeteroOvularTwins = true; + public static bool EnableEnzygoticTwins = true; + public static float EnzygoticTwinsChance = EnzygoticTwinsChanceDefault; + public static int EnzygoticTwinsChanceAdjust = EnzygoticTwinsChanceAdjustDefault; + public static int MaxEnzygoticTwins = MaxEnzygoticTwinsDefault; public enum DetailLevel @@ -77,13 +85,19 @@ namespace RJW_Menstruation Scribe_Values.Look(ref CumDecayRatio, "CumDecayRatio", CumDecayRatio, true); Scribe_Values.Look(ref CumFertilityDecayRatioAdjust, "CumFertilityDecayRatioAdjust", CumFertilityDecayRatioAdjust, true); Scribe_Values.Look(ref CumFertilityDecayRatio, "CumFertilityDecayRatio", CumFertilityDecayRatio, true); + Scribe_Values.Look(ref CycleAcceleration, "CycleAcceleration", CycleAcceleration, true); Scribe_Values.Look(ref EnableWombIcon, "EnableWombIcon", EnableWombIcon, true); Scribe_Values.Look(ref EnableAnimalCycle, "EnableAnimalCycle", EnableAnimalCycle, true); Scribe_Values.Look(ref DrawWombStatus, "DrawWombStatus", DrawWombStatus, true); Scribe_Values.Look(ref DrawVaginaStatus, "DrawVaginaStatus", DrawVaginaStatus, true); Scribe_Values.Look(ref Debug, "Debug", Debug, true); Scribe_Values.Look(ref InfoDetail, "InfoDetail", InfoDetail, true); - Scribe_Values.Look(ref EnableMenopause, "EnableMenopause", EnableMenopause, true); + Scribe_Values.Look(ref UseMultiplePregnancy, "UseMultiplePregnancy", UseMultiplePregnancy, true); + Scribe_Values.Look(ref EnableHeteroOvularTwins, "EnableHeteroOvularTwins", EnableHeteroOvularTwins, true); + Scribe_Values.Look(ref EnableEnzygoticTwins, "EnableEnzygoticTwins", EnableEnzygoticTwins, true); + Scribe_Values.Look(ref EnzygoticTwinsChance, "EnzygoticTwinsChance", EnzygoticTwinsChance, true); + Scribe_Values.Look(ref EnzygoticTwinsChanceAdjust, "EnzygoticTwinsChanceAdjust", EnzygoticTwinsChanceAdjust, true); + Scribe_Values.Look(ref MaxEnzygoticTwins, "MaxEnzygoticTwins", MaxEnzygoticTwins, true); base.ExposeData(); } @@ -95,12 +109,16 @@ namespace RJW_Menstruation { private readonly Configurations config; + private static Vector2 scroll; + public RJW_Menstruation(ModContentPack content) : base(content) { config = GetSettings(); } + + public override string SettingsCategory() { return Translations.Mod_Title; @@ -108,10 +126,13 @@ namespace RJW_Menstruation public override void DoSettingsWindowContents(Rect inRect) { - Rect mainRect = inRect.ContractedBy(20f); + Rect outRect = new Rect(0f, 30f, inRect.width, inRect.height - 30f); + Rect mainRect = new Rect(0f, 0f, inRect.width - 30f, inRect.height + 300f); Listing_Standard listmain = new Listing_Standard(); + listmain.maxOneColumn = true; + listmain.BeginScrollView(outRect, ref scroll, ref mainRect); listmain.Begin(mainRect); - + listmain.Gap(20f); listmain.CheckboxLabeled(Translations.Option1_Label, ref Configurations.EnableWombIcon, Translations.Option1_Desc); if (Configurations.EnableWombIcon) { @@ -164,6 +185,28 @@ namespace RJW_Menstruation listmain.Label(Translations.Option7_Label + " x" + Configurations.CycleAcceleration, -1, Translations.Option7_Desc); Configurations.CycleAcceleration = (int)listmain.Slider(Configurations.CycleAcceleration,1,50); + listmain.CheckboxLabeled(Translations.Option13_Label, ref Configurations.UseMultiplePregnancy, Translations.Option13_Desc); + if (Configurations.UseMultiplePregnancy) + { + float sectionheight = 50f; + if (Configurations.EnableEnzygoticTwins) sectionheight += 100; + Listing_Standard twinsection = listmain.BeginSection_NewTemp(sectionheight); + twinsection.CheckboxLabeled(Translations.Option14_Label, ref Configurations.EnableHeteroOvularTwins, Translations.Option14_Desc); + twinsection.CheckboxLabeled(Translations.Option15_Label, ref Configurations.EnableEnzygoticTwins, Translations.Option15_Desc); + if (Configurations.EnableEnzygoticTwins) + { + twinsection.Label(Translations.Option16_Label + " " + Configurations.EnzygoticTwinsChance*100 + "%", -1, Translations.Option16_Desc); + Configurations.EnzygoticTwinsChanceAdjust = (int)twinsection.Slider(Configurations.EnzygoticTwinsChanceAdjust, 0, 1000); + Configurations.EnzygoticTwinsChance = (float)Configurations.EnzygoticTwinsChanceAdjust / 1000; + + twinsection.Label(Translations.Option17_Label + " " + Configurations.MaxEnzygoticTwins, -1, Translations.Option17_Desc); + Configurations.MaxEnzygoticTwins = (int)twinsection.Slider(Configurations.MaxEnzygoticTwins, 2, 100); + } + + + listmain.EndSection(twinsection); + } + listmain.EndScrollView(ref mainRect); listmain.CheckboxLabeled(Translations.Option8_Label, ref Configurations.Debug, Translations.Option8_Desc); if (listmain.ButtonText("reset to default")) @@ -175,9 +218,13 @@ namespace RJW_Menstruation Configurations.EnableWombIcon = true; Configurations.EnableAnimalCycle = false; Configurations.CycleAcceleration = Configurations.CycleAccelerationDefault; + Configurations.EnzygoticTwinsChanceAdjust = Configurations.EnzygoticTwinsChanceAdjustDefault; + Configurations.EnableEnzygoticTwins = true; + Configurations.EnableHeteroOvularTwins = true; + Configurations.UseMultiplePregnancy = true; + Configurations.MaxEnzygoticTwins = Configurations.MaxEnzygoticTwinsDefault; } - listmain.End(); diff --git a/source/RJW_Menstruation/RJW_Menstruation/Dialog_WombStatus.cs b/source/RJW_Menstruation/RJW_Menstruation/Dialog_WombStatus.cs index c60f947..f8bc12d 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/Dialog_WombStatus.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/Dialog_WombStatus.cs @@ -44,7 +44,7 @@ namespace RJW_Menstruation get { float width = 300f + 2 * windowMargin; - float height = 800f; + float height = 820f; if (!Configurations.DrawWombStatus) height -= wombRectHeight; if (!Configurations.DrawVaginaStatus) height -= genitalRectHeight; return new Vector2(width,height); @@ -76,7 +76,7 @@ namespace RJW_Menstruation } Rect windowRect = inRect.ContractedBy(windowMargin); - Rect mainRect = new Rect(windowRect.x, windowRect.y, windowRect.width, windowRect.height - 20f); + Rect mainRect = new Rect(windowRect.x, windowRect.y, windowRect.width, windowRect.height); Rect closeRect = new Rect(windowRect.xMax, 0f, 20f, 20f); MainContents(mainRect); if (Widgets.CloseButtonFor(closeRect)) @@ -101,7 +101,36 @@ namespace RJW_Menstruation if (pawn.IsPregnant() && Utility.ShowFetusImage((Hediff_BasePregnancy)hediff)) { womb = Utility.GetPregnancyIcon(comp, hediff); - if (hediff is Hediff_BasePregnancy) + if (hediff is Hediff_MultiplePregnancy) + { + Hediff_MultiplePregnancy h = (Hediff_MultiplePregnancy)hediff; + if (h.GestationProgress < 0.2f) cum = Utility.GetCumIcon(comp); + else cum = ContentFinder.Get(("Womb/Empty"), true); + Pawn fetus = Utility.GetFetus(pawn); + if (fetus != null && Utility.ShowFetusInfo()) + { + string feinfo = h.GetBabyInfo(); + string fainfo = h.GetFatherInfo() + " "; + if (feinfo.Length + fainfo.Length > 45) + { + preginfoheight = fontheight + 2; + buttonstyle.alignment = TextAnchor.UpperLeft; + fontstyleright.alignment = TextAnchor.LowerRight; + } + else + { + preginfoheight = fontheight; + buttonstyle.alignment = TextAnchor.MiddleLeft; + + } + Rect preginfo = new Rect(0f, mainRect.yMax - wombRectHeight - 2, wombRectWidth, preginfoheight); + fontstyleright.normal.textColor = Color.white; + GUI.Box(preginfo, feinfo, buttonstyle); + GUI.Label(preginfo, fainfo, fontstyleright); + } + + } + else if (hediff is Hediff_BasePregnancy) { Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff; if (h.GestationProgress < 0.2f) cum = Utility.GetCumIcon(comp); @@ -109,10 +138,13 @@ namespace RJW_Menstruation Pawn fetus = Utility.GetFetus(pawn); if (fetus != null && Utility.ShowFetusInfo()) { + preginfoheight = fontheight; Rect preginfo = new Rect(0f, mainRect.yMax - wombRectHeight - 2, wombRectWidth, preginfoheight); fontstyleright.normal.textColor = Color.white; + fontstyleright.alignment = TextAnchor.MiddleRight; buttonstyle.alignment = TextAnchor.MiddleLeft; + GUI.Box(preginfo, h.babies.Count + " " + fetus.def.label + " " + Translations.Dialog_WombInfo02, buttonstyle); GUI.Label(preginfo, Translations.Dialog_WombInfo03 + ": " + h.father.LabelShort + " ", fontstyleright); } @@ -156,9 +188,12 @@ namespace RJW_Menstruation fontstyleright.normal.textColor = Color.red; - if (comp.GetFertilization) GUI.Label(wombInfoRect, Translations.Dialog_WombInfo05 + " ", fontstyleright); - else if (comp.GetEggFertilizing) GUI.Label(wombInfoRect, Translations.Dialog_WombInfo06 + " ", fontstyleright); - else if (comp.GetEgg) GUI.Label(wombInfoRect, Translations.Dialog_WombInfo07 + " ", fontstyleright); + fontstyleright.alignment = TextAnchor.MiddleRight; + //if (comp.GetFertilization) GUI.Label(wombInfoRect, Translations.Dialog_WombInfo05 + " ", fontstyleright); + //else if (comp.GetEggFertilizing) GUI.Label(wombInfoRect, Translations.Dialog_WombInfo06 + " ", fontstyleright); + //else if (comp.GetEgg) GUI.Label(wombInfoRect, Translations.Dialog_WombInfo07 + " ", fontstyleright); + GUI.Label(wombInfoRect, comp.GetFertilizingInfo + " ", fontstyleright); + //Widgets.Label(wombInfoRect,Translations.Dialog_WombInfo01 + ": " + comp.GetCurStageLabel); diff --git a/source/RJW_Menstruation/RJW_Menstruation/HediffComp_Menstruation.cs b/source/RJW_Menstruation/RJW_Menstruation/HediffComp_Menstruation.cs index 4af1068..bb33a1b 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/HediffComp_Menstruation.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/HediffComp_Menstruation.cs @@ -233,6 +233,31 @@ namespace RJW_Menstruation } } + + public string GetFertilizingInfo + { + get + { + string res = ""; + if (!eggs.NullOrEmpty()) + { + if (cums.NullOrEmpty()) return eggs.Count + " " + Translations.Dialog_WombInfo07; + else + { + int fertilized = 0; + foreach (Egg egg in eggs) + { + if (egg.fertilized) fertilized++; + } + if (fertilized != 0) res += fertilized + " " + Translations.Dialog_WombInfo05; + if (fertilized != 0 && eggs.Count - fertilized != 0) res += ", "; + if (eggs.Count - fertilized != 0) res += eggs.Count - fertilized + " " + Translations.Dialog_WombInfo06; + } + } + return res; + } + } + public bool GetEggFertilizing { get @@ -627,6 +652,7 @@ namespace RJW_Menstruation float rand = Rand.Range(0.0f, 1.0f); if (!cum.notcum && rand < cum.fertvolume * cum.fertFactor * Configurations.FertilizeChance * Props.basefertilizationChanceFactor) { + if (!RJWPregnancySettings.bestial_pregnancy_enabled && (xxx.is_animal(parent.pawn) ^ xxx.is_animal(cum.pawn))) continue; return cum.pawn; } } @@ -645,14 +671,48 @@ namespace RJW_Menstruation if (egg.position < 24 || !egg.fertilized) continue; else if (Rand.Range(0.0f, 1.0f) <= Configurations.ImplantationChance * Props.baseImplantationChanceFactor * ImplantFactor * InterspeciesImplantFactor(egg.fertilizer)) { - if (!parent.pawn.IsPregnant()) PregnancyHelper.PregnancyDecider(parent.pawn, egg.fertilizer); - pregnant = true; - break; + if (!parent.pawn.IsPregnant()) + { + if (!Configurations.UseMultiplePregnancy) + { + PregnancyHelper.PregnancyDecider(parent.pawn, egg.fertilizer); + pregnant = true; + break; + } + else + { + Hediff_BasePregnancy.Create(parent.pawn, egg.fertilizer); + Hediff hediff = PregnancyHelper.GetPregnancy(parent.pawn); + if (hediff is Hediff_BasePregnancy) + { + Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff; + if (h.babies.Count > 1) h.babies.RemoveRange(1, h.babies.Count - 1); + } + pregnant = true; + deadeggs.Add(egg); + } + } + else if (Configurations.UseMultiplePregnancy && Configurations.EnableHeteroOvularTwins) + { + Hediff hediff = PregnancyHelper.GetPregnancy(parent.pawn); + if (hediff is Hediff_MultiplePregnancy) + { + Hediff_MultiplePregnancy h = (Hediff_MultiplePregnancy)hediff; + h.AddNewBaby(parent.pawn, egg.fertilizer); + } + pregnant = true; + deadeggs.Add(egg); + } + else + { + pregnant = true; + break; + } } else deadeggs.Add(egg); } - if (pregnant) + if (pregnant && (!Configurations.UseMultiplePregnancy || !Configurations.EnableHeteroOvularTwins)) { eggs.Clear(); deadeggs.Clear(); @@ -666,6 +726,7 @@ namespace RJW_Menstruation } deadeggs.Clear(); } + if (pregnant) return true; } return false; } @@ -673,7 +734,7 @@ namespace RJW_Menstruation private void BleedOut() { //FilthMaker.TryMakeFilth(parent.pawn.Position, parent.pawn.Map, ThingDefOf.Filth_Blood,parent.pawn.Label); - CumIn(parent.pawn, Rand.Range(0f, 15f), Translations.Menstrual_Blood,-4.0f,ThingDefOf.Filth_Blood); + CumIn(parent.pawn, Rand.Range(0f, 5f), Translations.Menstrual_Blood,-5.0f,ThingDefOf.Filth_Blood); GetNotCum(Translations.Menstrual_Blood).color = Colors.blood; } @@ -812,7 +873,7 @@ namespace RJW_Menstruation } else { - if (curStageHrs < bleedingIntervalhours / 6) for (int i = 0; i < Configurations.CycleAcceleration; i++) BleedOut(); + if (curStageHrs < bleedingIntervalhours / 4) for (int i = 0; i < Configurations.CycleAcceleration; i++) BleedOut(); curStageHrs+=Configurations.CycleAcceleration; StayCurrentStage(); } @@ -842,6 +903,12 @@ namespace RJW_Menstruation case Stage.Pregnant: action = delegate { + if (!eggs.NullOrEmpty()) + { + EggDecay(); + FertilizationCheck(); + Implant(); + } if (parent.pawn.IsPregnant()) StayCurrentStageConst(Stage.Pregnant); else GoNextStage(Stage.Recover); }; @@ -1058,6 +1125,8 @@ namespace RJW_Menstruation } + + public class Egg : IExposable { diff --git a/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs b/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs new file mode 100644 index 0000000..eff1dcb --- /dev/null +++ b/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs @@ -0,0 +1,505 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Reflection; +using rjw; +using Verse; +using RimWorld; + + +namespace RJW_Menstruation +{ + public class Hediff_MultiplePregnancy : Hediff_BasePregnancy + { + + + + + public override void GiveBirth() + { + + if (babies.NullOrEmpty()) + { + ModLog.Warning(" no babies (debug?) " + this.GetType().Name); + if (father == null) + { + father = Trytogetfather(ref pawn); + } + Initialize(pawn, father); + } + + List siblings = new List(); + foreach (Pawn baby in babies) + { + if (xxx.is_animal(baby)) + { + BestialBirth(baby, siblings); + } + else + { + HumanlikeBirth(baby, siblings); + } + + } + + pawn.health.RemoveHediff(this); + } + + public string GetBabyInfo() + { + string res = ""; + if (!babies.NullOrEmpty()) + { + var babiesdistinct = babies.Distinct(new RaceComparer()); + int iteration = 0; + foreach (Pawn baby in babiesdistinct) + { + int num = babies.Where(x => x.def.Equals(baby.def)).Count(); + if (iteration > 0) res += ", "; + res += num + " " + baby.def.label; + iteration++; + } + res += " " + Translations.Dialog_WombInfo02; + return res; + } + return "Null"; + } + + public string GetFatherInfo() + { + string res = Translations.Dialog_WombInfo03 + ": "; + if (!babies.NullOrEmpty()) + { + var babiesdistinct = babies.Distinct(new FatherComparer(pawn)); + int iteration = 0; + foreach (Pawn baby in babiesdistinct) + { + if (iteration > 0) res += ", "; + res += Utility.GetFather(baby, pawn)?.LabelShort ?? "Unknown"; + iteration++; + } + return res; + } + return "Null"; + } + + + + + private void HumanlikeBirth(Pawn baby, List siblings) + { + Pawn mother = pawn; Pawn father = Utility.GetFather(baby,pawn); + //backup melanin, LastName for when baby reset by other mod on spawn/backstorychange + //var skin_whiteness = baby.story.melanin; + //var last_name = baby.story.birthLastName; + + PawnUtility.TrySpawnHatchedOrBornPawn(baby, mother); + + var sex_need = mother.needs?.TryGetNeed(); + if (mother.Faction != null && !(mother.Faction?.IsPlayer ?? false) && sex_need != null) + { + sex_need.CurLevel = 1.0f; + } + if (mother.Faction != null) + { + if (mother.Faction != baby.Faction) + baby.SetFaction(mother.Faction); + } + if (mother.IsPrisonerOfColony) + { + baby.guest.CapturedBy(Faction.OfPlayer); + } + + foreach (Pawn sibling in siblings) + { + baby.relations.AddDirectRelation(PawnRelationDefOf.Sibling, sibling); + } + siblings.Add(baby); + + PostBirth(mother, father, baby); + } + + + private void BestialBirth(Pawn baby, List siblings) + { + Pawn mother = pawn; Pawn father = Utility.GetFather(baby,pawn); + //backup melanin, LastName for when baby reset by other mod on spawn/backstorychange + //var skin_whiteness = baby.story.melanin; + //var last_name = baby.story.birthLastName; + + PawnUtility.TrySpawnHatchedOrBornPawn(baby, mother); + + Need_Sex sex_need = mother.needs?.TryGetNeed(); + if (mother.Faction != null && !(mother.Faction?.IsPlayer ?? false) && sex_need != null) + { + sex_need.CurLevel = 1.0f; + } + if (mother.Faction != null) + { + if (mother.Faction != baby.Faction) + baby.SetFaction(mother.Faction); + } + + + foreach (Pawn sibling in siblings) + { + baby.relations.AddDirectRelation(PawnRelationDefOf.Sibling, sibling); + } + siblings.Add(baby); + train(baby, mother, father); + + PostBirth(mother, father, baby); + + //restore melanin, LastName for when baby reset by other mod on spawn/backstorychange + //baby.story.melanin = skin_whiteness; + //baby.story.birthLastName = last_name; + + + + } + + protected override void GenerateBabies() + { + AddNewBaby(pawn, father); + } + + + + protected void train(Pawn baby, Pawn mother, Pawn father) + { + bool _; + if (!xxx.is_human(baby) && baby.Faction == Faction.OfPlayer) + { + if (xxx.is_human(mother) && baby.Faction == Faction.OfPlayer && baby.training.CanAssignToTrain(TrainableDefOf.Obedience, out _).Accepted) + { + baby.training.Train(TrainableDefOf.Obedience, mother); + } + if (xxx.is_human(mother) && baby.Faction == Faction.OfPlayer && baby.training.CanAssignToTrain(TrainableDefOf.Tameness, out _).Accepted) + { + baby.training.Train(TrainableDefOf.Tameness, mother); + } + } + } + + + public bool AddNewBaby(Pawn mother, Pawn father) + { + float melanin; + string lastname; + if (xxx.is_human(mother)) + { + if (xxx.is_human(father)) + { + melanin = (mother.story.melanin + father.story.melanin) / 2; + lastname = NameTriple.FromString(father.Name.ToStringFull).Last; + } + else + { + melanin = mother.story.melanin; + lastname = NameTriple.FromString(mother.Name.ToStringFull).Last; + } + + } + else + { + if (xxx.is_human(father)) + { + melanin = father.story.melanin; + lastname = NameTriple.FromString(father.Name.ToStringFull).Last; + } + else melanin = Rand.Range(0, 1.0f); + } + + PawnGenerationRequest request = new PawnGenerationRequest( + newborn: true, + allowDowned: true, + canGeneratePawnRelations: false, + colonistRelationChanceFactor: 0, + allowFood: false, + allowAddictions: false, + relationWithExtraPawnChanceFactor: 0, + fixedMelanin: melanin, + kind: BabyPawnKindDecider(mother, father) + ); + Pawn baby = PawnGenerator.GeneratePawn(request); + if (baby != null) + { + if (xxx.is_human(baby)) + { + List traitpool = new List(); + baby.SetMother(mother); + if (mother != father) baby.SetFather(father); + + if (xxx.has_traits(pawn) && pawn.RaceProps.Humanlike) + { + foreach (Trait momtrait in pawn.story.traits.allTraits) + { + if (!RJWPregnancySettings.trait_filtering_enabled || !non_genetic_traits.Contains(momtrait.def.defName)) + traitpool.Add(momtrait); + } + } + if (father != null && xxx.has_traits(father) && father.RaceProps.Humanlike) + { + foreach (Trait poptrait in father.story.traits.allTraits) + { + if (!RJWPregnancySettings.trait_filtering_enabled || !non_genetic_traits.Contains(poptrait.def.defName)) + traitpool.Add(poptrait); + } + } + updateTraits(baby, traitpool); + + } + else + { + baby.relations.AddDirectRelation(VariousDefOf.Relation_birthgiver, mother); + mother.relations.AddDirectRelation(VariousDefOf.Relation_spawn, baby); + if (mother != father) + { + baby.relations.AddDirectRelation(VariousDefOf.Relation_birthgiver, father); + father.relations.AddDirectRelation(VariousDefOf.Relation_spawn, baby); + } + } + + int division = 1; + while (Rand.Chance(Configurations.EnzygoticTwinsChance) && division < Configurations.MaxEnzygoticTwins) division++; + for (int i = 0; i < division; i++) babies.Add(baby); + return true; + } + + + return false; + + } + + + + /// + /// Decide pawnkind from mother and father + /// Come from RJW + /// + /// + /// + /// + public PawnKindDef BabyPawnKindDecider(Pawn mother, Pawn father) + { + PawnKindDef spawn_kind_def = mother.kindDef; + int flag = 0; + if (xxx.is_human(mother)) flag += 2; + if (xxx.is_human(father)) flag += 1; + //Mother - Father = Flag + //Human - Human = 3 + //Human - Animal = 2 + //Animal - Human = 1 + //Animal - Animal = 0 + + switch (flag) + { + case 3: + if (!Rand.Chance(RJWPregnancySettings.humanlike_DNA_from_mother)) spawn_kind_def = father.kindDef; + break; + case 2: + if (RJWPregnancySettings.bestiality_DNA_inheritance == 0f) spawn_kind_def = father.kindDef; + else if (!Rand.Chance(RJWPregnancySettings.bestial_DNA_from_mother)) spawn_kind_def = father.kindDef; + break; + case 1: + if (RJWPregnancySettings.bestiality_DNA_inheritance == 1f) spawn_kind_def = father.kindDef; + else if (!Rand.Chance(RJWPregnancySettings.bestial_DNA_from_mother)) spawn_kind_def = father.kindDef; + break; + case 0: + if (!Rand.Chance(RJWPregnancySettings.bestial_DNA_from_mother)) spawn_kind_def = father.kindDef; + break; + } + + bool IsAndroidmother = AndroidsCompatibility.IsAndroid(mother); + bool IsAndroidfather = AndroidsCompatibility.IsAndroid(father); + if (IsAndroidmother && !IsAndroidfather) + { + spawn_kind_def = father.kindDef; + } + else if (!IsAndroidmother && IsAndroidfather) + { + spawn_kind_def = mother.kindDef; + } + + + string MotherRaceName = ""; + string FatherRaceName = ""; + MotherRaceName = mother.kindDef.race.defName; + if (father != null) + FatherRaceName = father.kindDef.race.defName; + if (MotherRaceName != FatherRaceName && FatherRaceName != "") + { + var groups = DefDatabase.AllDefs.Where(x => !(x.hybridRaceParents.NullOrEmpty() || x.hybridChildKindDef.NullOrEmpty())); + + + //ModLog.Message(" found custom RaceGroupDefs " + groups.Count()); + foreach (var t in groups) + { + if ((t.hybridRaceParents.Contains(MotherRaceName) && t.hybridRaceParents.Contains(FatherRaceName)) + || (t.hybridRaceParents.Contains("Any") && (t.hybridRaceParents.Contains(MotherRaceName) || t.hybridRaceParents.Contains(FatherRaceName)))) + { + //ModLog.Message(" has hybridRaceParents"); + if (t.hybridChildKindDef.Contains("MotherKindDef")) + spawn_kind_def = mother.kindDef; + else if (t.hybridChildKindDef.Contains("FatherKindDef") && father != null) + spawn_kind_def = father.kindDef; + else + { + //ModLog.Message(" trying hybridChildKindDef " + t.defName); + var child_kind_def_list = new List(); + child_kind_def_list.AddRange(DefDatabase.AllDefs.Where(x => t.hybridChildKindDef.Contains(x.defName))); + + //ModLog.Message(" found custom hybridChildKindDefs " + t.hybridChildKindDef.Count); + if (!child_kind_def_list.NullOrEmpty()) + spawn_kind_def = child_kind_def_list.RandomElement(); + } + } + } + + + + } + else + { + spawn_kind_def = mother.RaceProps.AnyPawnKind; + } + + + if (spawn_kind_def.defName.Contains("Nymph")) + { + //child is nymph, try to find other PawnKindDef + var spawn_kind_def_list = new List(); + spawn_kind_def_list.AddRange(DefDatabase.AllDefs.Where(x => x.race == spawn_kind_def.race && !x.defName.Contains("Nymph"))); + //no other PawnKindDef found try mother + if (spawn_kind_def_list.NullOrEmpty()) + spawn_kind_def_list.AddRange(DefDatabase.AllDefs.Where(x => x.race == mother.kindDef.race && !x.defName.Contains("Nymph"))); + //no other PawnKindDef found try father + if (spawn_kind_def_list.NullOrEmpty() && father != null) + spawn_kind_def_list.AddRange(DefDatabase.AllDefs.Where(x => x.race == father.kindDef.race && !x.defName.Contains("Nymph"))); + //no other PawnKindDef found fallback to generic colonist + if (spawn_kind_def_list.NullOrEmpty()) + spawn_kind_def = PawnKindDefOf.Colonist; + + spawn_kind_def = spawn_kind_def_list.RandomElement(); + } + + + + + return spawn_kind_def; + + } + + + /// + /// Copy from RJW + /// + /// + /// + public void updateTraits(Pawn pawn, List parenttraits) + { + if (pawn?.story?.traits == null) return; + + List traitlist = new List(pawn.story.traits.allTraits); + if (!parenttraits.NullOrEmpty()) traitlist.AddRange(parenttraits); + else return; + + + var forcedTraits = traitlist + .Where(x => x.ScenForced) + .Distinct(new TraitComparer(ignoreDegree: true)); + + List res = new List(); + res.AddRange(forcedTraits); + + var comparer = new TraitComparer(); // trait comparision implementation, because without game compares traits *by reference*, makeing them all unique. + + while (res.Count < traitlist.Count && traitlist.Count > 0) + { + int index = Rand.Range(0, traitlist.Count); // getting trait and removing from the pull + var trait = traitlist[index]; + traitlist.RemoveAt(index); + + if (!res.Any(x => comparer.Equals(x, trait) || // skipping traits conflicting with already added + x.def.ConflictsWith(trait))) + { + res.Add(new Trait(trait.def, trait.Degree, false)); + } + } + + + pawn.story.traits.allTraits = res; + } + + + + } + + /// + /// Copy from RJW + /// + public class TraitComparer : IEqualityComparer + { + bool ignoreForced; + bool ignoreDegree; + + public TraitComparer(bool ignoreDegree = false, bool ignoreForced = true) + { + this.ignoreDegree = ignoreDegree; + this.ignoreForced = ignoreForced; + } + + public bool Equals(Trait x, Trait y) + { + return + x.def == y.def && + (ignoreDegree || (x.Degree == y.Degree)) && + (ignoreForced || (x.ScenForced == y.ScenForced)); + } + + public int GetHashCode(Trait obj) + { + return + (obj.def.GetHashCode() << 5) + + (ignoreDegree ? 0 : obj.Degree) + + ((ignoreForced || obj.ScenForced) ? 0 : 0x10); + } + } + + public class RaceComparer : IEqualityComparer + { + public bool Equals(Pawn x, Pawn y) + { + return x.def.Equals(y.def); + } + + public int GetHashCode(Pawn obj) + { + return obj.def.GetHashCode(); + } + } + + public class FatherComparer : IEqualityComparer + { + Pawn mother; + + public FatherComparer(Pawn mother) + { + this.mother = mother; + } + + public bool Equals(Pawn x, Pawn y) + { + if (Utility.GetFather(x, mother) == null && Utility.GetFather(y, mother) == null) return true; + return Utility.GetFather(x,mother)?.Label.Equals(Utility.GetFather(y,mother)?.Label) ?? false; + } + + public int GetHashCode(Pawn obj) + { + return obj.def.GetHashCode(); + } + } + +} diff --git a/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj b/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj index 5312bc7..4e97327 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj +++ b/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj @@ -60,6 +60,7 @@ + @@ -84,7 +85,7 @@ False - ..\..\..\..\RJW\1.1\Assemblies\RJW.dll + ..\..\..\..\RJW\1.2\Assemblies\RJW.dll False diff --git a/source/RJW_Menstruation/RJW_Menstruation/Translations.cs b/source/RJW_Menstruation/RJW_Menstruation/Translations.cs index 4ccf982..89b5e84 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/Translations.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/Translations.cs @@ -58,6 +58,14 @@ namespace RJW_Menstruation public static readonly string Option12_Desc = "Option12_Desc".Translate(); public static readonly string Option13_Label = "Option13_Label".Translate(); public static readonly string Option13_Desc = "Option13_Desc".Translate(); + public static readonly string Option14_Label = "Option14_Label".Translate(); + public static readonly string Option14_Desc = "Option14_Desc".Translate(); + public static readonly string Option15_Label = "Option15_Label".Translate(); + public static readonly string Option15_Desc = "Option15_Desc".Translate(); + public static readonly string Option16_Label = "Option16_Label".Translate(); + public static readonly string Option16_Desc = "Option16_Desc".Translate(); + public static readonly string Option17_Label = "Option17_Label".Translate(); + public static readonly string Option17_Desc = "Option17_Desc".Translate(); diff --git a/source/RJW_Menstruation/RJW_Menstruation/Utility.cs b/source/RJW_Menstruation/RJW_Menstruation/Utility.cs index ce81a77..ba248ee 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/Utility.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/Utility.cs @@ -50,7 +50,7 @@ namespace RJW_Menstruation public static bool HasMenstruationComp(Pawn pawn) { - var hedifflist = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn)).FindAll((Hediff h) => h.def.defName.ToLower().Contains("vagina")); + var hedifflist = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn))?.FindAll((Hediff h) => h.def.defName.ToLower().Contains("vagina")); HediffComp_Menstruation result; if (hedifflist.NullOrEmpty()) return false; else @@ -239,6 +239,22 @@ namespace RJW_Menstruation else return false; } + public static Pawn GetFather(Pawn pawn, Pawn mother) + { + Pawn res = pawn.GetFather(); + if (res != null) return res; + else + { + res = pawn.relations?.GetFirstDirectRelationPawn(VariousDefOf.Relation_birthgiver, x => !x.Equals(mother)) ?? null; + return res; + } + + + + + } + + } } diff --git a/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs b/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs index d33dda5..6e2f8c4 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs @@ -24,5 +24,7 @@ namespace RJW_Menstruation public static readonly HediffDef Hediff_Climacteric = DefDatabase.GetNamed("Hediff_Climacteric"); public static readonly HediffDef Hediff_Menopause = DefDatabase.GetNamed("Hediff_Menopause"); + public static readonly PawnRelationDef Relation_birthgiver = DefDatabase.AllDefs.FirstOrDefault(d => d.defName == "RJW_Sire"); + public static readonly PawnRelationDef Relation_spawn = DefDatabase.AllDefs.FirstOrDefault(d => d.defName == "RJW_Pup"); } }