mirror of
				https://gitgud.io/lutepickle/rjw_menstruation.git
				synced 2024-08-14 22:46:52 +00:00 
			
		
		
		
	Keep a running total of fluid leaked and emit a filth every 5 ml
This commit is contained in:
		
							parent
							
								
									89a7d410df
								
							
						
					
					
						commit
						80243c78f1
					
				
					 3 changed files with 15 additions and 13 deletions
				
			
		
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -171,7 +171,6 @@ namespace RJW_Menstruation
 | 
				
			||||||
            Scribe_Values.Look(ref useCustomColor, "useCustomColor", false);
 | 
					            Scribe_Values.Look(ref useCustomColor, "useCustomColor", false);
 | 
				
			||||||
            Scribe_Values.Look(ref customColor, "customColor", default);
 | 
					            Scribe_Values.Look(ref customColor, "customColor", default);
 | 
				
			||||||
            Scribe_Defs.Look(ref filthDef, "filthDef");
 | 
					            Scribe_Defs.Look(ref filthDef, "filthDef");
 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public void MakeThinner(float speed)
 | 
					        public void MakeThinner(float speed)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,6 +66,7 @@ namespace RJW_Menstruation
 | 
				
			||||||
        const float minmakefilthvalue = 1.0f;
 | 
					        const float minmakefilthvalue = 1.0f;
 | 
				
			||||||
        const int maxImplantDelayHours = 30 * GenDate.HoursPerDay;
 | 
					        const int maxImplantDelayHours = 30 * GenDate.HoursPerDay;
 | 
				
			||||||
        const int minImplantAgeHours = 3 * GenDate.HoursPerDay;
 | 
					        const int minImplantAgeHours = 3 * GenDate.HoursPerDay;
 | 
				
			||||||
 | 
					        const float fluidLeakThreshold = 5.0f;
 | 
				
			||||||
        const float pulloutSuccessRate = 0.8f;
 | 
					        const float pulloutSuccessRate = 0.8f;
 | 
				
			||||||
        const float fetishPulloutSuccessModifier = 0.25f;
 | 
					        const float fetishPulloutSuccessModifier = 0.25f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -116,6 +117,7 @@ namespace RJW_Menstruation
 | 
				
			||||||
        protected float cycleVariability = -1;
 | 
					        protected float cycleVariability = -1;
 | 
				
			||||||
        protected int currentIntervalTicks = -1;   // Actual number of ticks equals this / cycleAcceleration
 | 
					        protected int currentIntervalTicks = -1;   // Actual number of ticks equals this / cycleAcceleration
 | 
				
			||||||
        protected float crampPain = -1;
 | 
					        protected float crampPain = -1;
 | 
				
			||||||
 | 
					        protected float fluidToLeak = 0;
 | 
				
			||||||
        protected Need sexNeed = null;
 | 
					        protected Need sexNeed = null;
 | 
				
			||||||
        protected string customwombtex = null;
 | 
					        protected string customwombtex = null;
 | 
				
			||||||
        protected string customvagtex = null;
 | 
					        protected string customvagtex = null;
 | 
				
			||||||
| 
						 | 
					@ -641,6 +643,7 @@ namespace RJW_Menstruation
 | 
				
			||||||
            Scribe_Values.Look(ref cycleVariability, "cycleVariability", cycleVariability, true);
 | 
					            Scribe_Values.Look(ref cycleVariability, "cycleVariability", cycleVariability, true);
 | 
				
			||||||
            Scribe_Values.Look(ref currentIntervalTicks, "currentIntervalTicks", currentIntervalTicks, true);
 | 
					            Scribe_Values.Look(ref currentIntervalTicks, "currentIntervalTicks", currentIntervalTicks, true);
 | 
				
			||||||
            Scribe_Values.Look(ref crampPain, "crampPain", crampPain, true);
 | 
					            Scribe_Values.Look(ref crampPain, "crampPain", crampPain, true);
 | 
				
			||||||
 | 
					            Scribe_Values.Look(ref fluidToLeak, "fluidToLeak", 0);
 | 
				
			||||||
            Scribe_Values.Look(ref ovarypower, "ovarypower", ovarypower, true);
 | 
					            Scribe_Values.Look(ref ovarypower, "ovarypower", ovarypower, true);
 | 
				
			||||||
            Scribe_Values.Look(ref eggstack, "eggstack", 0);
 | 
					            Scribe_Values.Look(ref eggstack, "eggstack", 0);
 | 
				
			||||||
            Scribe_Values.Look(ref estrusflag, "estrusflag", false);
 | 
					            Scribe_Values.Look(ref estrusflag, "estrusflag", false);
 | 
				
			||||||
| 
						 | 
					@ -991,9 +994,15 @@ namespace RJW_Menstruation
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// For natural leaking
 | 
					        /// For natural leaking
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        protected virtual void AfterCumOut()
 | 
					        protected virtual void AfterCumOut(float amount, List<string> filthlabels)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Pawn.needs?.mood?.thoughts?.memories?.TryGainMemory(VariousDefOf.LeakingFluids);
 | 
					            fluidToLeak += amount;
 | 
				
			||||||
 | 
					            if (fluidToLeak > fluidLeakThreshold) Pawn.needs?.mood?.thoughts?.memories?.TryGainMemory(VariousDefOf.LeakingFluids);
 | 
				
			||||||
 | 
					            for (; fluidToLeak > fluidLeakThreshold; fluidToLeak -= fluidLeakThreshold)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (cums.Count > 1) MakeCumFilthMixture(fluidLeakThreshold, filthlabels);
 | 
				
			||||||
 | 
					                else if (cums.Count == 1) MakeCumFilth(cums.First(), fluidLeakThreshold);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
| 
						 | 
					@ -1013,11 +1022,9 @@ namespace RJW_Menstruation
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public void CumOut()
 | 
					        public void CumOut()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            const float mlPerFilth = 5.0f;
 | 
					 | 
				
			||||||
            float leakfactor = 1.0f;
 | 
					            float leakfactor = 1.0f;
 | 
				
			||||||
            float totalleak = 0f;
 | 
					            float totalleak = 0f;
 | 
				
			||||||
            float cumd = TotalCumPercent;
 | 
					            float cumd = TotalCumPercent;
 | 
				
			||||||
            int preCumAmount = Mathf.CeilToInt(TotalCum / mlPerFilth);
 | 
					 | 
				
			||||||
            List<string> filthlabels = new List<string>();
 | 
					            List<string> filthlabels = new List<string>();
 | 
				
			||||||
            BeforeCumOut(out Absorber absorber);
 | 
					            BeforeCumOut(out Absorber absorber);
 | 
				
			||||||
            if (cums.NullOrEmpty()) return;
 | 
					            if (cums.NullOrEmpty()) return;
 | 
				
			||||||
| 
						 | 
					@ -1033,17 +1040,11 @@ namespace RJW_Menstruation
 | 
				
			||||||
                string tmp = "FilthLabelWithSource".Translate(cum.FilthDef.label, cum.pawn?.LabelShort ?? "Unknown", 1.ToString());
 | 
					                string tmp = "FilthLabelWithSource".Translate(cum.FilthDef.label, cum.pawn?.LabelShort ?? "Unknown", 1.ToString());
 | 
				
			||||||
                filthlabels.Add(tmp.Replace(" x1", ""));
 | 
					                filthlabels.Add(tmp.Replace(" x1", ""));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            int postCumAmount = Mathf.CeilToInt(TotalCum / mlPerFilth);
 | 
					            AfterCumOut(totalleak, filthlabels);
 | 
				
			||||||
            for (int i = 0; i < preCumAmount - postCumAmount; i++)  // Emit a filth every time the integer cum amount drops
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                if (cums.Count > 1) MakeCumFilthMixture(totalleak, filthlabels);
 | 
					 | 
				
			||||||
                else if (cums.Count == 1) MakeCumFilth(cums.First(), totalleak);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            cums.RemoveAll(cum => cum.ShouldRemove());
 | 
					            cums.RemoveAll(cum => cum.ShouldRemove());
 | 
				
			||||||
 | 
					            if (cums.NullOrEmpty()) fluidToLeak = 0;
 | 
				
			||||||
            cumd = TotalCumPercent - cumd;
 | 
					            cumd = TotalCumPercent - cumd;
 | 
				
			||||||
            if (totalleak >= 1.0f) AfterCumOut();
 | 
					 | 
				
			||||||
            AfterFluidOut(cumd);
 | 
					            AfterFluidOut(cumd);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
| 
						 | 
					@ -1073,6 +1074,7 @@ namespace RJW_Menstruation
 | 
				
			||||||
            if (cums.Count > 1) MakeCumFilthMixture(totalleak, filthlabels);
 | 
					            if (cums.Count > 1) MakeCumFilthMixture(totalleak, filthlabels);
 | 
				
			||||||
            else if (cums.Count == 1) MakeCumFilth(cums.First(), totalleak);
 | 
					            else if (cums.Count == 1) MakeCumFilth(cums.First(), totalleak);
 | 
				
			||||||
            cums.RemoveAll(cum => removecums.Contains(cum));
 | 
					            cums.RemoveAll(cum => removecums.Contains(cum));
 | 
				
			||||||
 | 
					            if (cums.NullOrEmpty()) fluidToLeak = 0;
 | 
				
			||||||
            cumd = TotalCumPercent - cumd;
 | 
					            cumd = TotalCumPercent - cumd;
 | 
				
			||||||
            AfterFluidOut(cumd);
 | 
					            AfterFluidOut(cumd);
 | 
				
			||||||
            return outcum;
 | 
					            return outcum;
 | 
				
			||||||
| 
						 | 
					@ -1102,6 +1104,7 @@ namespace RJW_Menstruation
 | 
				
			||||||
                if (cum.notcum) pure = false;
 | 
					                if (cum.notcum) pure = false;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            cums.RemoveAll(cum => removecums.Contains(cum));
 | 
					            cums.RemoveAll(cum => removecums.Contains(cum));
 | 
				
			||||||
 | 
					            if (cums.NullOrEmpty()) fluidToLeak = 0;
 | 
				
			||||||
            return new CumMixture(Pawn, totalleak, cumlabels, color, mixtureDef, pure);
 | 
					            return new CumMixture(Pawn, totalleak, cumlabels, color, mixtureDef, pure);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue