using RimWorld; using rjw; using System; using System.Collections.Generic; using UnityEngine; using Verse; namespace RJW_Menstruation { public class Configurations : ModSettings { public const float ImplantationChanceDefault = 0.65f; public const int ImplantationChanceAdjustDefault = 65; public const float FertilizeChanceDefault = 0.15f; public const int FertilizeChanceAdjustDefault = 150; public const float CumDecayRatioDefault = 0.15f; public const int CumDecayRatioAdjustDefault = 150; public const float CumFertilityDecayRatioDefault = 0.05f; public const int CumFertilityDecayRatioAdjustDefault = 50; public const int CycleAccelerationDefault = 6; public const int ColonistTickIntervalDefault = GenDate.TicksPerHour; public const int NonColonistTickIntervalDefault = GenDate.TicksPerHour; public const int AnimalTickIntervalDefault = GenDate.TicksPerHour; public const int TickIntervalMinimum = GenTicks.TicksPerRealSecond / 3; public const int TickIntervalMaximum = 4 * GenDate.TicksPerHour; public const float EnzygoticTwinsChanceDefault = 0.002f; public const int EnzygoticTwinsChanceAdjustDefault = 2; public const int MaxEnzygoticTwinsDefault = 9; public const int BleedingAmountDefault = 50; public const float MaxBreastIncrementFactorDefault = 1.0f; public const float MaxBreastIncrementFactorMax = 2.5f; public const float MaxNippleIncrementFactorDefault = 1.0f; public const float MaxNippleIncrementFactorMax = 2.5f; public const float PermanentNippleChangeDefault = 0.1f; public const float PermanentNippleChangeMax = 0.25f; public const float EggLifespanMultiplierDefault = 1.0f; public const float VaginaMorphPowerDefault = 0.2f; public static DetailLevel infoDetail = DetailLevel.All; public static float ImplantationChance = ImplantationChanceDefault; public static int ImplantationChanceAdjust = ImplantationChanceAdjustDefault; public static float FertilizeChance = FertilizeChanceDefault; public static int FertilizeChanceAdjust = FertilizeChanceAdjustDefault; public static float CumDecayRatio = CumDecayRatioDefault; public static int CumDecayRatioAdjust = CumDecayRatioAdjustDefault; public static float CumFertilityDecayRatio = CumFertilityDecayRatioDefault; public static int CumFertilityDecayRatioAdjust = CumFertilityDecayRatioAdjustDefault; public static int CycleAcceleration = CycleAccelerationDefault; public static int ColonistTickInterval = ColonistTickIntervalDefault; public static int NonColonistTickInterval = NonColonistTickIntervalDefault; public static int AnimalTickInterval = AnimalTickIntervalDefault; public static bool EnableWombIcon = true; public static bool EnableDraftedIcon = true; public static bool EnableAnimalCycle = false; public static bool DrawWombStatus = true; public static bool DrawVaginaStatus = true; public static bool DrawEggOverlay = true; public static bool Debug = false; public static bool EnableMenopause = true; public static bool EnablePheromones = true; public static float AnimalPheromoneEffect = 0.0f; public static DetailLevel InfoDetail => infoDetail; public static bool EstrusOverridesHookupSettings = false; public static float EstrusFuckabilityToHookup = RJWHookupSettings.MinimumFuckabilityToHookup; public static float EstrusAttractivenessToHookup = RJWHookupSettings.MinimumAttractivenessToHookup; public static float EstrusRelationshipToHookup = RJWHookupSettings.MinimumRelationshipToHookup; public static PregnancyType PregnancySource = PregnancyType.MultiplePregnancy; public static bool EnableBiotechTwins = false; 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 static int BleedingAmount = BleedingAmountDefault; public static bool EnableButtonInHT = false; public static PawnFlags ShowFlag = PawnFlags.Colonist | PawnFlags.Prisoner; public static bool UseHybridExtention = true; public static bool AllowShrinkIcon = false; public static float EggLifespanMultiplier = EggLifespanMultiplierDefault; public static bool EnableBirthVaginaMorph = false; public static float VaginaMorphPower = VaginaMorphPowerDefault; public static float MaxBreastIncrementFactor = MaxBreastIncrementFactorDefault; public static float MaxNippleIncrementFactor = MaxNippleIncrementFactorDefault; public static float PermanentNippleChange = PermanentNippleChangeDefault; public static void SetToDefault() { ImplantationChanceAdjust = ImplantationChanceAdjustDefault; FertilizeChanceAdjust = FertilizeChanceAdjustDefault; CumDecayRatioAdjust = CumDecayRatioAdjustDefault; CumFertilityDecayRatioAdjust = CumFertilityDecayRatioAdjustDefault; EnableWombIcon = true; EnableDraftedIcon = true; EnableAnimalCycle = false; EnableMenopause = true; EnablePheromones = true; AnimalPheromoneEffect = 0.0f; CycleAcceleration = CycleAccelerationDefault; ColonistTickInterval = ColonistTickIntervalDefault; NonColonistTickInterval = NonColonistTickIntervalDefault; AnimalTickInterval = AnimalTickIntervalDefault; EstrusOverridesHookupSettings = false; EstrusFuckabilityToHookup = RJWHookupSettings.MinimumFuckabilityToHookup; EstrusAttractivenessToHookup = RJWHookupSettings.MinimumAttractivenessToHookup; EstrusRelationshipToHookup = RJWHookupSettings.MinimumRelationshipToHookup; EnzygoticTwinsChanceAdjust = EnzygoticTwinsChanceAdjustDefault; EnableBiotechTwins = false; EnableEnzygoticTwins = true; EnableHeteroOvularTwins = true; PregnancySource = PregnancyType.MultiplePregnancy; MaxEnzygoticTwins = MaxEnzygoticTwinsDefault; BleedingAmount = BleedingAmountDefault; MaxBreastIncrementFactor = MaxBreastIncrementFactorDefault; MaxNippleIncrementFactor= MaxNippleIncrementFactorDefault; PermanentNippleChange = PermanentNippleChangeDefault; EggLifespanMultiplier = EggLifespanMultiplierDefault; VaginaMorphPower = VaginaMorphPowerDefault; } public static List HybridOverride = new List(); public static bool HARActivated = false; public static bool AnimalGeneticsActivated = false; public enum DetailLevel { All, OnReveal, HideFetusInfo, Hide } public static string LevelString(DetailLevel level) { switch (level) { case DetailLevel.All: return "All"; case DetailLevel.OnReveal: return "On reveal"; case DetailLevel.HideFetusInfo: return "Hide fetus info"; case DetailLevel.Hide: return "Hide"; default: return ""; } } public static string HybridString(bool b) { if (b) return Translations.Option23_Label_1; else return Translations.Option23_Label_2; } public static bool IsOverrideExist(ThingDef def) { List removeList = new List(); if (!HybridOverride.NullOrEmpty()) foreach (HybridInformations o in HybridOverride) { if (o.IsNull) removeList.Add(o); if (o.DefName == def.defName) return true; } foreach (HybridInformations o in removeList) { HybridOverride.Remove(o); } return false; } [Flags] public enum PawnFlags { None = 0, Colonist = 1, Prisoner = 2, Ally = 4, Neutral = 8, Hostile = 16 } public enum PregnancyType { BaseRJW, MultiplePregnancy, Biotech } public override void ExposeData() { Scribe_Values.Look(ref ImplantationChanceAdjust, "ImplantationChanceAdjust", ImplantationChanceAdjustDefault); Scribe_Values.Look(ref ImplantationChance, "ImplantationChance", ImplantationChanceDefault); Scribe_Values.Look(ref FertilizeChanceAdjust, "FertilizeChanceAdjust", FertilizeChanceAdjustDefault); Scribe_Values.Look(ref FertilizeChance, "FertilizeChance", FertilizeChanceDefault); Scribe_Values.Look(ref CumDecayRatioAdjust, "CumDecayRatioAdjust", CumDecayRatioAdjustDefault); Scribe_Values.Look(ref CumDecayRatio, "CumDecayRatio", CumDecayRatioDefault); Scribe_Values.Look(ref CumFertilityDecayRatioAdjust, "CumFertilityDecayRatioAdjust", CumFertilityDecayRatioAdjustDefault); Scribe_Values.Look(ref CumFertilityDecayRatio, "CumFertilityDecayRatio", CumFertilityDecayRatioDefault); Scribe_Values.Look(ref CycleAcceleration, "CycleAcceleration", CycleAccelerationDefault); Scribe_Values.Look(ref ColonistTickInterval, "ColonistTickInterval", ColonistTickIntervalDefault); Scribe_Values.Look(ref NonColonistTickInterval, "NonColonistTickInterval", NonColonistTickIntervalDefault); Scribe_Values.Look(ref AnimalTickInterval, "AnimalTickInterval", AnimalTickIntervalDefault); Scribe_Values.Look(ref EnableWombIcon, "EnableWombIcon", true); Scribe_Values.Look(ref EnableDraftedIcon, "EnableDraftedIcon", true); Scribe_Values.Look(ref EnableAnimalCycle, "EnableAnimalCycle", false); Scribe_Values.Look(ref DrawWombStatus, "DrawWombStatus", true); Scribe_Values.Look(ref DrawVaginaStatus, "DrawVaginaStatus", true); Scribe_Values.Look(ref DrawEggOverlay, "DrawEggOvray", true); Scribe_Values.Look(ref Debug, "Debug", false); Scribe_Values.Look(ref infoDetail, "InfoDetail", DetailLevel.All); Scribe_Values.Look(ref EnableMenopause, "EnableMenopause", true); Scribe_Values.Look(ref EnablePheromones, "EnablePheromones", true); Scribe_Values.Look(ref AnimalPheromoneEffect, "AnimalPheromoneEffect", 0.0f); Scribe_Values.Look(ref EstrusOverridesHookupSettings, "EstrusOverridesHookupSettings", false); Scribe_Values.Look(ref EstrusFuckabilityToHookup, "EstrusFuckabilityToHookup", EstrusFuckabilityToHookup, true); Scribe_Values.Look(ref EstrusAttractivenessToHookup, "EstrusAttractivenessToHookup", EstrusAttractivenessToHookup, true); Scribe_Values.Look(ref EstrusRelationshipToHookup, "EstrusRelationshipToHookup", EstrusRelationshipToHookup, true); Scribe_Values.Look(ref PregnancySource, "PregnancySource", PregnancyType.MultiplePregnancy); Scribe_Values.Look(ref EnableBiotechTwins, "EnableBiotechTwins", false); Scribe_Values.Look(ref EnableHeteroOvularTwins, "EnableHeteroOvularTwins", true); Scribe_Values.Look(ref EnableEnzygoticTwins, "EnableEnzygoticTwins", true); Scribe_Values.Look(ref EnzygoticTwinsChance, "EnzygoticTwinsChance", EnzygoticTwinsChanceDefault); Scribe_Values.Look(ref EnzygoticTwinsChanceAdjust, "EnzygoticTwinsChanceAdjust", EnzygoticTwinsChanceAdjustDefault); Scribe_Values.Look(ref MaxEnzygoticTwins, "MaxEnzygoticTwins", MaxEnzygoticTwinsDefault); Scribe_Values.Look(ref BleedingAmount, "BleedingAmount", BleedingAmountDefault); Scribe_Values.Look(ref EnableButtonInHT, "EnableButtonInHT", false); Scribe_Values.Look(ref ShowFlag, "ShowFlag", PawnFlags.Colonist | PawnFlags.Prisoner); Scribe_Values.Look(ref UseHybridExtention, "UseHybridExtention", true); Scribe_Values.Look(ref MaxBreastIncrementFactor, "MaxBreastIncrementFactor", MaxBreastIncrementFactorDefault); Scribe_Values.Look(ref MaxNippleIncrementFactor, "MaxNippleIncrementFactor", MaxNippleIncrementFactorDefault); Scribe_Values.Look(ref PermanentNippleChange, "PermanentNippleChange", PermanentNippleChangeDefault); Scribe_Values.Look(ref AllowShrinkIcon, "AllowShrinkIcon", false); Scribe_Values.Look(ref EggLifespanMultiplier, "EggLifespanMultiplier", EggLifespanMultiplierDefault); Scribe_Values.Look(ref EnableBirthVaginaMorph, "EnableBirthVaginaMorph", false); Scribe_Values.Look(ref VaginaMorphPower, "VaginaMorphPower", VaginaMorphPowerDefault); Scribe_Collections.Look(ref HybridOverride, saveDestroyedThings: true, label: "HybridOverride", lookMode: LookMode.Deep, ctorArgs: new object[0]); base.ExposeData(); } } public class RJW_Menstruation : Mod { private static Vector2 scroll; public static float EstimatedBleedingAmount { get { int days = VariousDefOf.HumanVaginaCompProperties.bleedingIntervalDays; return days * 0.03f * Configurations.BleedingAmount * 6; } } public static float EstimatedBleedingAmountPerHour { get { return 0.03f * Configurations.BleedingAmount * Configurations.CycleAcceleration; } } public RJW_Menstruation(ModContentPack content) : base(content) { GetSettings(); if (!ModsConfig.BiotechActive && Configurations.PregnancySource == Configurations.PregnancyType.Biotech) Configurations.PregnancySource = Configurations.PregnancyType.MultiplePregnancy; Configurations.HARActivated = ModsConfig.IsActive("erdelf.HumanoidAlienRaces"); Configurations.AnimalGeneticsActivated = ModsConfig.IsActive("Mlie.AnimalGenetics"); } public override string SettingsCategory() { return Translations.Mod_Title; } public override void DoSettingsWindowContents(Rect inRect) { Rect outRect = new Rect(0f, 30f, inRect.width, inRect.height - 30f); float mainRectHeight = 126f + (Configurations.EnableWombIcon || Configurations.EnableButtonInHT ? 400f : 0f) + (Configurations.EnableAnimalCycle ? 48f : 0f) + (Configurations.EnableAnimalCycle && Configurations.EnablePheromones ? 48f : 0f) + (Configurations.EstrusOverridesHookupSettings ? 144f : 0f) + (Configurations.PregnancySource == Configurations.PregnancyType.MultiplePregnancy ? (Configurations.EnableEnzygoticTwins ? 175f : 75f) : 0f) + (Configurations.PregnancySource == Configurations.PregnancyType.Biotech ? 75f : 0f) + (Configurations.PregnancySource == Configurations.PregnancyType.Biotech ? (Configurations.EnableBiotechTwins ? 175f : 75f) : 0f) + (Configurations.EnableBirthVaginaMorph ? 48f : 0f); Rect mainRect = new Rect(0f, 0f, inRect.width - 30f, Math.Max(inRect.height + mainRectHeight, 1f)); int Adjust; Listing_Standard listmain = new Listing_Standard { maxOneColumn = true }; Widgets.BeginScrollView(outRect, ref scroll, mainRect); listmain.Begin(mainRect); listmain.Gap(20f); Rect firstLine = listmain.GetRect(30f); firstLine.SplitVertically(firstLine.width / 3, out Rect leftCell, out Rect middleAndRightCells); Widgets.CheckboxLabeled(leftCell, Translations.Option1_Label_1, ref Configurations.EnableWombIcon, false, null, null, true); Widgets.CheckboxLabeled(middleAndRightCells.LeftHalf(), Translations.Option1_Label_2, ref Configurations.EnableButtonInHT, false, null, null, true); if (Configurations.EnableWombIcon || Configurations.EnableButtonInHT) { Listing_Standard wombsection = listmain.BeginSection(380); wombsection.CheckboxLabeled(Translations.Option9_Label, ref Configurations.DrawWombStatus, Translations.Option9_Desc); if (Configurations.DrawWombStatus) { wombsection.CheckboxLabeled(Translations.Option18_Label, ref Configurations.DrawEggOverlay, Translations.Option18_Desc); } wombsection.CheckboxLabeled(Translations.Option10_Label, ref Configurations.DrawVaginaStatus, Translations.Option10_Desc); wombsection.CheckboxLabeled(Translations.Option29_Label, ref Configurations.AllowShrinkIcon, Translations.Option29_Desc); wombsection.CheckboxLabeled(Translations.Option_EnableDraftedIcon_Label, ref Configurations.EnableDraftedIcon, Translations.Option_EnableDraftedIcon_Desc); if (wombsection.ButtonText(Translations.Option11_Label + ": " + Configurations.LevelString(Configurations.infoDetail))) { if (Configurations.infoDetail == Configurations.DetailLevel.Hide) Configurations.infoDetail = Configurations.DetailLevel.All; else Configurations.infoDetail++; } switch (Configurations.infoDetail) { case Configurations.DetailLevel.All: wombsection.Label(Translations.Option11_Desc_1); break; case Configurations.DetailLevel.OnReveal: wombsection.Label(Translations.Option11_Desc_2); break; case Configurations.DetailLevel.HideFetusInfo: wombsection.Label(Translations.Option11_Desc_3); break; case Configurations.DetailLevel.Hide: wombsection.Label(Translations.Option11_Desc_4); break; } wombsection.Label(Translations.Option21_Label + " " + Configurations.ShowFlag, -1, Translations.Option21_Desc); Rect flagrect = wombsection.GetRect(30f); Rect[] flagrects = new Rect[5]; for (int i = 0; i < 5; i++) { flagrects[i] = new Rect(flagrect.x + (flagrect.width / 5) * i, flagrect.y, flagrect.width / 5, flagrect.height); } if (Widgets.ButtonText(flagrects[0], Translations.Option20_Label_1 + ": " + Configurations.ShowFlag.HasFlag(Configurations.PawnFlags.Colonist))) { Configurations.ShowFlag ^= Configurations.PawnFlags.Colonist; } if (Widgets.ButtonText(flagrects[1], Translations.Option20_Label_2 + ": " + Configurations.ShowFlag.HasFlag(Configurations.PawnFlags.Prisoner))) { Configurations.ShowFlag ^= Configurations.PawnFlags.Prisoner; } if (Widgets.ButtonText(flagrects[2], Translations.Option20_Label_3 + ": " + Configurations.ShowFlag.HasFlag(Configurations.PawnFlags.Ally))) { Configurations.ShowFlag ^= Configurations.PawnFlags.Ally; } if (Widgets.ButtonText(flagrects[3], Translations.Option20_Label_4 + ": " + Configurations.ShowFlag.HasFlag(Configurations.PawnFlags.Neutral))) { Configurations.ShowFlag ^= Configurations.PawnFlags.Neutral; } if (Widgets.ButtonText(flagrects[4], Translations.Option20_Label_5 + ": " + Configurations.ShowFlag.HasFlag(Configurations.PawnFlags.Hostile))) { Configurations.ShowFlag ^= Configurations.PawnFlags.Hostile; } Adjust = (int)(Configurations.MaxBreastIncrementFactor * 1000 / Configurations.MaxBreastIncrementFactorMax); wombsection.Label(Translations.Option_MaxBreastIncrementFactor_Label + " " + Configurations.MaxBreastIncrementFactor * 100 + "%", -1, Translations.Option_MaxBreastIncrementFactor_Desc); Adjust = (int)wombsection.Slider(Adjust, 0, 1000); Configurations.MaxBreastIncrementFactor = (float)Adjust / (1000 / Configurations.MaxBreastIncrementFactorMax); Adjust = (int)(Configurations.MaxNippleIncrementFactor * 1000 / Configurations.MaxNippleIncrementFactorMax); wombsection.Label(Translations.Option_MaxNippleIncrementFactor_Label + " " + Configurations.MaxNippleIncrementFactor * 100 + "%", -1, Translations.Option_MaxNippleIncrementFactor_Desc); Adjust = (int)wombsection.Slider(Adjust, 0, 1000); Configurations.MaxNippleIncrementFactor = (float)Adjust / (1000 / Configurations.MaxNippleIncrementFactorMax); Adjust = (int)(Configurations.PermanentNippleChange * 1000 / Configurations.PermanentNippleChangeMax); wombsection.Label(Translations.Option_PermanentNippleChange_Label + " " + Configurations.PermanentNippleChange, -1, Translations.Option_PermanentNippleChange_Desc); Adjust = (int)wombsection.Slider(Adjust, 0, 1000); Configurations.PermanentNippleChange = (float)Adjust / (1000 / Configurations.PermanentNippleChangeMax); listmain.EndSection(wombsection); } listmain.CheckboxLabeled(Translations.Option2_Label, ref Configurations.EnableAnimalCycle, Translations.Option2_Desc); listmain.CheckboxLabeled(Translations.Option12_Label, ref Configurations.EnableMenopause, Translations.Option12_Desc); listmain.CheckboxLabeled(Translations.Option_EnablePheromones_Label, ref Configurations.EnablePheromones, Translations.Option_EnablePheromones_Desc); if (Configurations.EnablePheromones && Configurations.EnableAnimalCycle) { Adjust = (int)(Configurations.AnimalPheromoneEffect * 1000); listmain.Label(Translations.Option_AnimalPheromoneEffect_Label + " " + Configurations.AnimalPheromoneEffect * 100 + "%", -1, Translations.Option_AnimalPheromoneEffect_Desc); Adjust = (int)listmain.Slider(Adjust, 0, 1000); Configurations.AnimalPheromoneEffect = (float)Adjust / 1000f; } else Configurations.AnimalPheromoneEffect = 0.0f; listmain.Label(Translations.Option3_Label + " " + Configurations.ImplantationChance * 100 + "%", -1, Translations.Option3_Desc); Configurations.ImplantationChanceAdjust = (int)listmain.Slider(Configurations.ImplantationChanceAdjust, 0, 1000); Configurations.ImplantationChance = (float)Configurations.ImplantationChanceAdjust / 100; string tenMl = String.Format("10 ml: {0:0}%", (1.0f - Mathf.Pow(1.0f - Configurations.FertilizeChance, 10)) * 100f); listmain.LabelDouble(Translations.Option4_Label + " " + Configurations.FertilizeChance * 100 + "%", tenMl, Translations.Option4_Desc); Configurations.FertilizeChanceAdjust = (int)listmain.Slider(Configurations.FertilizeChanceAdjust, 0, 1000); Configurations.FertilizeChance = (float)Configurations.FertilizeChanceAdjust / 1000; listmain.Label(Translations.Option5_Label + " " + Configurations.CumDecayRatio * 100 + "%", -1, Translations.Option5_Desc); Configurations.CumDecayRatioAdjust = (int)listmain.Slider(Configurations.CumDecayRatioAdjust, 0, 1000); Configurations.CumDecayRatio = (float)Configurations.CumDecayRatioAdjust / 1000; Adjust = (int)(Configurations.EggLifespanMultiplier * 20); float lifespan = (24f / Configurations.CycleAcceleration * Configurations.EggLifespanMultiplier); listmain.LabelDouble(Translations.Option30_Label + " x" + Configurations.EggLifespanMultiplier, Translations.EstimatedEggLifespan + String.Format(": {0:0}h", (int)lifespan), Translations.Option30_Desc); Adjust = (int)listmain.Slider(Adjust, 20, 1000); Configurations.EggLifespanMultiplier = (float)Adjust / 20; int semenlifespan = (int)(-5 / ((float)Math.Log10((1 - Configurations.CumFertilityDecayRatio) * (1 - Configurations.CumDecayRatio) * 10) - 1)) + 1; string estimatedlifespan; if (semenlifespan < 0) { estimatedlifespan = string.Format(": Infinite", semenlifespan); } else { estimatedlifespan = string.Format(": {0:0}h", semenlifespan); } listmain.LabelDouble(Translations.Option6_Label + " " + Configurations.CumFertilityDecayRatio * 100 + "%", Translations.EstimatedCumLifespan + estimatedlifespan, Translations.Option6_Desc); Configurations.CumFertilityDecayRatioAdjust = (int)listmain.Slider(Configurations.CumFertilityDecayRatioAdjust, 0, 1000); Configurations.CumFertilityDecayRatio = (float)Configurations.CumFertilityDecayRatioAdjust / 1000; listmain.Label(Translations.Option7_Label + " x" + Configurations.CycleAcceleration, -1, Translations.Option7_Desc); Configurations.CycleAcceleration = (int)listmain.Slider(Configurations.CycleAcceleration, 1, 50); listmain.LabelDouble(Translations.Option_ColonistUpdateInterval_Label, GenDate.ToStringTicksToPeriod(Configurations.ColonistTickInterval), Translations.Option_ColonistUpdateInterval_Desc); Configurations.ColonistTickInterval = (int)Mathf.Exp(listmain.Slider(Mathf.Log(Configurations.ColonistTickInterval), Mathf.Log(Configurations.TickIntervalMinimum), Mathf.Log(Configurations.TickIntervalMaximum))); listmain.LabelDouble(Translations.Option_NonColonistUpdateInterval_Label, GenDate.ToStringTicksToPeriod(Configurations.NonColonistTickInterval), Translations.Option_NonColonistUpdateInterval_Desc); Configurations.NonColonistTickInterval = (int)Mathf.Exp(listmain.Slider(Mathf.Log(Configurations.NonColonistTickInterval), Mathf.Log(Configurations.TickIntervalMinimum), Mathf.Log(Configurations.TickIntervalMaximum))); if(Configurations.EnableAnimalCycle) { listmain.LabelDouble(Translations.Option_AnimalUpdateInterval_Label, GenDate.ToStringTicksToPeriod(Configurations.AnimalTickInterval), Translations.Option_AnimalUpdateInterval_Desc); Configurations.AnimalTickInterval = (int)Mathf.Exp(listmain.Slider(Mathf.Log(Configurations.AnimalTickInterval), Mathf.Log(Configurations.TickIntervalMinimum), Mathf.Log(Configurations.TickIntervalMaximum))); } float var2 = EstimatedBleedingAmountPerHour; float var1 = Math.Max(EstimatedBleedingAmount, var2); listmain.LabelDouble(Translations.Option19_Label_1, Translations.Option19_Label_2 + ": " + var1 + "ml, " + var2 + "ml/h", Translations.Option19_Desc); Configurations.BleedingAmount = (int)listmain.Slider(Configurations.BleedingAmount, 0, 200); listmain.CheckboxLabeled(Translations.Option_EstrusOverride_Label, ref Configurations.EstrusOverridesHookupSettings, Translations.Option_EstrusOverride_Desc); if (Configurations.EstrusOverridesHookupSettings) { listmain.Label(Translations.Option_EstrusFuckability_Label + ": " + (int)(Configurations.EstrusFuckabilityToHookup * 100) + "%"); Configurations.EstrusFuckabilityToHookup = listmain.Slider(Configurations.EstrusFuckabilityToHookup, 0.1f, 1.0f); listmain.Label(Translations.Option_EstrusAttractability_Label + ": " + (int)(Configurations.EstrusAttractivenessToHookup * 100) + "%"); Configurations.EstrusAttractivenessToHookup = listmain.Slider(Configurations.EstrusAttractivenessToHookup, 0.0f, 1.0f); listmain.Label(Translations.Option_EstrusRelationship_Label + ": " + Configurations.EstrusRelationshipToHookup); Configurations.EstrusRelationshipToHookup = listmain.Slider((int)Configurations.EstrusRelationshipToHookup, -100f, 100f); } if (listmain.RadioButton(Translations.Option_PregnancyFromBaseRJW_Label, Configurations.PregnancySource == Configurations.PregnancyType.BaseRJW)) Configurations.PregnancySource = Configurations.PregnancyType.BaseRJW; if (listmain.RadioButton(Translations.Option_PregnancyFromMultiplePregnancy_Label, Configurations.PregnancySource == Configurations.PregnancyType.MultiplePregnancy)) Configurations.PregnancySource = Configurations.PregnancyType.MultiplePregnancy; if (ModsConfig.BiotechActive && listmain.RadioButton(Translations.Option_PregnancyFromBiotech_Label, Configurations.PregnancySource == Configurations.PregnancyType.Biotech)) Configurations.PregnancySource = Configurations.PregnancyType.Biotech; if (Configurations.PregnancySource == Configurations.PregnancyType.Biotech) listmain.CheckboxLabeled(Translations.Option_EnableBiotechTwins_Label, ref Configurations.EnableBiotechTwins, Translations.Option_EnableBiotechTwins_Desc); if (Configurations.PregnancySource == Configurations.PregnancyType.MultiplePregnancy || (Configurations.PregnancySource == Configurations.PregnancyType.Biotech && Configurations.EnableBiotechTwins)) { float sectionheight = 75f; if (Configurations.EnableEnzygoticTwins) sectionheight += 100; Listing_Standard twinsection = listmain.BeginSection(sectionheight); Rect hybridrect = twinsection.GetRect(25); Widgets.CheckboxLabeled(hybridrect.LeftHalf(), Translations.Option22_Label, ref Configurations.UseHybridExtention, false, null, null, true); if (Widgets.ButtonText(hybridrect.RightHalf(), Translations.Option28_Label)) { Dialog_HybridCustom.ToggleWindow(); //Configurations.MotherFirst = !Configurations.MotherFirst; } TooltipHandler.TipRegion(hybridrect, Translations.Option28_Tooltip); 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.CheckboxLabeled(Translations.Option31_Label, ref Configurations.EnableBirthVaginaMorph, Translations.Option31_Desc); if (Configurations.EnableBirthVaginaMorph) { float sectionheight = 48f; Listing_Standard vmsection = listmain.BeginSection(sectionheight); LabelwithTextfield(vmsection.GetRect(24f), Translations.Option32_Label, Translations.Option32_Desc, ref Configurations.VaginaMorphPower, 0, 100f); Adjust = (int)(Configurations.VaginaMorphPower * 1000); Adjust = (int)vmsection.Slider(Adjust, 0, 1000); Configurations.VaginaMorphPower = Adjust / 1000f; listmain.EndSection(vmsection); } listmain.CheckboxLabeled(Translations.Option8_Label, ref Configurations.Debug, Translations.Option8_Desc); if (listmain.ButtonText(Translations.Button_ResetToDefault)) { Configurations.SetToDefault(); } listmain.End(); Widgets.EndScrollView(); } public void LabelwithTextfield(Rect rect, string label, string tooltip, ref float value, float min, float max) { Rect textfieldRect = new Rect(rect.xMax - 100f, rect.y, 100f, rect.height); string valuestr = value.ToString(); Widgets.Label(rect, label); Widgets.TextFieldNumeric(textfieldRect, ref value, ref valuestr, min, max); Widgets.DrawHighlightIfMouseover(rect); TooltipHandler.TipRegion(rect, tooltip); } } }