code:
<?xml version="1.0" encoding="UTF-8"?>

<Patch>
	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="DogVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>8</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>14</follicularIntervalDays>
					<lutealIntervalDays>36</lutealIntervalDays>
					<bleedingIntervalDays>8</bleedingIntervalDays>
					<recoveryIntervalDays>15</recoveryIntervalDays>
					<eggLifespanDays>4</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<estrusDaysBeforeOvulation>9</estrusDaysBeforeOvulation>
					<cycleIntervalDays>180~360</cycleIntervalDays>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="CatVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>6</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>2.0</basefertilizationChanceFactor>
					<follicularIntervalDays>9</follicularIntervalDays>
					<lutealIntervalDays>10</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>15</recoveryIntervalDays>
					<eggLifespanDays>1</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<breedingSeason>FirstHalf</breedingSeason>
					<estrusDaysBeforeOvulation>9</estrusDaysBeforeOvulation>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="HorseVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>25</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>7</follicularIntervalDays>
					<lutealIntervalDays>14</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>30</recoveryIntervalDays>
					<eggLifespanDays>1</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<breedingSeason>FirstHalf</breedingSeason>
					<estrusDaysBeforeOvulation>5</estrusDaysBeforeOvulation>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="DragonVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>50</maxCumCapacity>
					<baseImplantationChanceFactor>0.5</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>0.2</basefertilizationChanceFactor>
					<follicularIntervalDays>270</follicularIntervalDays>
					<lutealIntervalDays>30</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>300</recoveryIntervalDays>
					<eggLifespanDays>30</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<estrusDaysBeforeOvulation>0</estrusDaysBeforeOvulation>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="NarrowVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>10</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>5</follicularIntervalDays>
					<lutealIntervalDays>16</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>15</recoveryIntervalDays>
					<eggLifespanDays>2</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<estrusDaysBeforeOvulation>1</estrusDaysBeforeOvulation>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="RodentVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>5</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>2.0</basefertilizationChanceFactor>
					<follicularIntervalDays>6</follicularIntervalDays>
					<lutealIntervalDays>9</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>3</recoveryIntervalDays>
					<eggLifespanDays>1</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<estrusDaysBeforeOvulation>6</estrusDaysBeforeOvulation>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="SlimeVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>5</maxCumCapacity>
					<baseImplantationChanceFactor>2.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>2.0</basefertilizationChanceFactor>
					<follicularIntervalDays>12</follicularIntervalDays>
					<lutealIntervalDays>9</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>3</recoveryIntervalDays>
					<eggLifespanDays>1</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<estrusDaysBeforeOvulation>6</estrusDaysBeforeOvulation>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="DemonVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>10</maxCumCapacity>
					<baseImplantationChanceFactor>2.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>2.0</basefertilizationChanceFactor>
					<follicularIntervalDays>14</follicularIntervalDays>
					<lutealIntervalDays>14</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>3</recoveryIntervalDays>
					<eggLifespanDays>1</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<estrusDaysBeforeOvulation>6</estrusDaysBeforeOvulation>

			</comps>
		</value>
	</Operation>

</Patch>


code:
<?xml version="1.0" encoding="UTF-8"?>

<Patch>
	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="Breasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts/Breast</BreastTex>
					<BlacknippleColor>(55,20,0)</BlacknippleColor>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="HydraulicBreasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts_Artificial/Breast</BreastTex>
					<BlacknippleColor>(255,255,255)</BlacknippleColor>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="BionicBreasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts_Artificial/Breast</BreastTex>
					<BlacknippleColor>(255,255,255)</BlacknippleColor>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="ArchotechBreasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts/Breast</BreastTex>
					<BlacknippleColor>(255,255,255)</BlacknippleColor>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="SlimeBreasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts/Breast</BreastTex>
					<BlacknippleColor>(55,20,0)</BlacknippleColor>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="UdderBreasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts_Udder/Breast</BreastTex>
					<BlacknippleColor>(55,20,0)</BlacknippleColor>

			</comps>
		</value>
	</Operation>
</Patch>

license: unknown


code:
<?xml version="1.0" encoding="UTF-8"?>

<Patch>
	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/ThingDef[defName="Cloth"]/stuffProps/statFactors</xpath>
		<value>
			<MaxAbsorbable>1.0</MaxAbsorbable>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/ThingDef[defName="Synthread"]/stuffProps/statFactors</xpath>
		<value>
			<MaxAbsorbable>2.0</MaxAbsorbable>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/ThingDef[defName="DevilstrandCloth"]/stuffProps/statFactors</xpath>
		<value>
			<MaxAbsorbable>0.5</MaxAbsorbable>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/ThingDef[defName="Hyperweave"]/stuffProps/statFactors</xpath>
		<value>
			<MaxAbsorbable>0.25</MaxAbsorbable>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/ThingDef[@Name="WoolBase"]/stuffProps/statFactors</xpath>
		<value>
			<MaxAbsorbable>1.5</MaxAbsorbable>
		</value>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="UTF-8"?>

<Patch>
	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[defName="Human"]</xpath>
		<value>

					<fetusTexPath>Fetus/Fetus_Default</fetusTexPath>
					<cumColor>(255,255,255,255)</cumColor>
					<cumThickness>0.2</cumThickness>
					<ingestionOutcomeDoers>

							<chance>0.005</chance>
							<hediffDef>Hediff_ASA</hediffDef>
							<severity>0.01</severity>

					</ingestionOutcomeDoers>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="UTF-8"?>

<Patch>
	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[@Name="BigBirdThingBase"]</xpath>
		<value>

					<fetusTexPath>Fetus/Birds/Fetus_Bird</fetusTexPath>
					<cumColor>(255,255,255,255)</cumColor>
					<cumThickness>0.2</cumThickness>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[defName="Chicken"]</xpath>
		<value>

					<fetusTexPath>Fetus/Birds/Fetus_Bird</fetusTexPath>
					<cumColor>(255,255,255,255)</cumColor>
					<cumThickness>0.2</cumThickness>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[defName="Duck"]</xpath>
		<value>

					<fetusTexPath>Fetus/Birds/Fetus_Bird</fetusTexPath>
					<cumColor>(255,255,255,255)</cumColor>
					<cumThickness>0.2</cumThickness>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[defName="Goose"]</xpath>
		<value>

					<fetusTexPath>Fetus/Birds/Fetus_Bird</fetusTexPath>
					<cumColor>(255,255,255,255)</cumColor>
					<cumThickness>0.2</cumThickness>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[defName="Husky"]</xpath>
		<value>

					<fetusTexPath>Fetus/Canines/Fetus_Canine</fetusTexPath>
					<cumColor>(255,255,255,255)</cumColor>
					<cumThickness>0.05</cumThickness>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[defName="LabradorRetriever"]</xpath>
		<value>

					<fetusTexPath>Fetus/Canines/Fetus_Canine</fetusTexPath>
					<cumColor>(255,255,255,255)</cumColor>
					<cumThickness>0.05</cumThickness>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[defName="YorkshireTerrier"]</xpath>
		<value>

					<fetusTexPath>Fetus/Canines/Fetus_Canine</fetusTexPath>
					<cumColor>(255,255,255,255)</cumColor>
					<cumThickness>0.05</cumThickness>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[defName="Warg"]</xpath>
		<value>

					<fetusTexPath>Fetus/Canines/Fetus_Canine</fetusTexPath>
					<cumColor>(255,255,255,255)</cumColor>
					<cumThickness>0.05</cumThickness>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[@Name="ThingBaseWolf"]</xpath>
		<value>

					<fetusTexPath>Fetus/Canines/Fetus_Canine</fetusTexPath>
					<cumColor>(255,255,255,255)</cumColor>
					<cumThickness>0.05</cumThickness>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[@Name="ThingBaseFox"]</xpath>
		<value>

					<fetusTexPath>Fetus/Canines/Fetus_Canine_V</fetusTexPath>
					<cumColor>(255,255,255,255)</cumColor>
					<cumThickness>0.05</cumThickness>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[defName="Pig"]</xpath>
		<value>

					<fetusTexPath>Fetus/Pigs/Fetus_Pig</fetusTexPath>
					<cumColor>(255,255,255,255)</cumColor>
					<cumThickness>0.8</cumThickness>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[defName="WildBoar"]</xpath>
		<value>

					<fetusTexPath>Fetus/Pigs/Fetus_Pig</fetusTexPath>
					<cumColor>(255,255,255,255)</cumColor>
					<cumThickness>0.8</cumThickness>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>/Defs/ThingDef[@Name="BaseInsect"]</xpath>
		<value>

					<fetusTexPath>Fetus/Insects/Fetus_Insect</fetusTexPath>
					<cumColor>(153,212,89,255)</cumColor>
					<cumThickness>0.5</cumThickness>
					<hybridExtension>
					</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Turkey"]</xpath>
		<value>

				<fetusTexPath>Fetus/Birds/Fetus_Bird</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Sheep"]</xpath>
		<value>

				<fetusTexPath>Fetus/Bovines/Fetus_Bovine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.3</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Goat"]</xpath>
		<value>

				<fetusTexPath>Fetus/Bovines/Fetus_Bovine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.3</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Ibex"]</xpath>
		<value>

				<fetusTexPath>Fetus/Cervines/Fetus_Cervine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.3</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Deer"]</xpath>
		<value>

				<fetusTexPath>Fetus/Cervines/Fetus_Cervine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.3</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Gazelle"]</xpath>
		<value>

				<fetusTexPath>Fetus/Cervines/Fetus_Cervine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.3</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Alpaca"]</xpath>
		<value>

				<fetusTexPath>Fetus/Bovines/Fetus_Bovine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.3</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Yak"]</xpath>
		<value>

				<fetusTexPath>Fetus/Bovines/Fetus_Bovine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.3</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Elk"]</xpath>
		<value>

				<fetusTexPath>Fetus/Cervines/Fetus_Cervine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Caribou"]</xpath>
		<value>

				<fetusTexPath>Fetus/Cervines/Fetus_Cervine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Horse"]</xpath>
		<value>

				<fetusTexPath>Fetus/Bovines/Fetus_Bovine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Donkey"]</xpath>
		<value>

				<fetusTexPath>Fetus/Bovines/Fetus_Bovine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Cow"]</xpath>
		<value>

				<fetusTexPath>Fetus/Bovines/Fetus_Bovine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Boomalope"]</xpath>
		<value>

				<fetusTexPath>Fetus/Boomies/Fetus_Boomalope</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Muffalo"]</xpath>
		<value>

				<fetusTexPath>Fetus/Muffalos/Fetus_Muffalo</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Bison"]</xpath>
		<value>

				<fetusTexPath>Fetus/Bovines/Fetus_Bovine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Dromedary"]</xpath>
		<value>

				<fetusTexPath>Fetus/Bovines/Fetus_Bovine</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Elephant"]</xpath>
		<value>

				<fetusTexPath>Fetus/Elephants/Fetus_Elephant</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.5</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Rhinoceros"]</xpath>
		<value>

				<fetusTexPath>Fetus/Rhinoceroses/Fetus_Rhinoceros</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.5</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Cat"]</xpath>
		<value>

				<fetusTexPath>Fetus/Felines/Fetus_Feline_D</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.1</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[@Name="BigCatThingBase"]</xpath>
		<value>

				<fetusTexPath>Fetus/Felines/Fetus_Feline_W</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.2</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Cougar"]</xpath>
		<value>

				<fetusTexPath>Fetus/Felines/Fetus_Feline_W</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.2</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Panther"]</xpath>
		<value>

				<fetusTexPath>Fetus/Felines/Fetus_Feline_D</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.2</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Iguana"]</xpath>
		<value>

				<fetusTexPath>Fetus/Reptiles/Fetus_Reptile</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.5</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Tortoise"]</xpath>
		<value>

				<fetusTexPath>Fetus/Reptiles/Fetus_Reptile</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.5</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Cobra"]</xpath>
		<value>

				<fetusTexPath>Fetus/Snakes/Fetus_Snake</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.5</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[@Name="BaseHare"]</xpath>
		<value>

				<fetusTexPath>Fetus/Lagomorphs/Fetus_Lagomorph</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Rat"]</xpath>
		<value>

				<fetusTexPath>Fetus/Rodents/Fetus_Rodent</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Boomrat"]</xpath>
		<value>

				<fetusTexPath>Fetus/Boomies/Fetus_Boomrat</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="GuineaPig"]</xpath>
		<value>

				<fetusTexPath>Fetus/Rodents/Fetus_Rodent</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Chinchilla"]</xpath>
		<value>

				<fetusTexPath>Fetus/Rodents/Fetus_Rodent</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Snowhare"]</xpath>
		<value>

				<fetusTexPath>Fetus/Lagomorphs/Fetus_Lagomorph</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Capybara"]</xpath>
		<value>

				<fetusTexPath>Fetus/Rodents/Fetus_Rodent</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Raccoon"]</xpath>
		<value>

				<fetusTexPath>Fetus/Rodents/Fetus_Rodent</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Alphabeaver"]</xpath>
		<value>

				<fetusTexPath>Fetus/Rodents/Fetus_Rodent</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Squirrel"]</xpath>
		<value>

				<fetusTexPath>Fetus/Rodents/Fetus_Rodent</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Monkey"]</xpath>
		<value>

				<fetusTexPath>Fetus/Primate/Fetus_Primate</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.2</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Megasloth"]</xpath>
		<value>

				<fetusTexPath>Fetus/Megasloths/Fetus_Megasloth</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.9</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Thrumbo"]</xpath>
		<value>

				<fetusTexPath>Fetus/Thrumbos/Fetus_Thrumbo</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.7</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[@Name="BaseMechanoid"]</xpath>
		<value>

				<fetusTexPath>Fetus/Mechanoids/Fetus_Mechanoid</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.9</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[@Name="BaseMechanoidWalker"]</xpath>
		<value>

				<fetusTexPath>Fetus/Mechanoids/Fetus_Mechanoid</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.9</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Cassowary"]</xpath>
		<value>

				<fetusTexPath>Fetus/Birds/Fetus_Bird</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

	<Operation Class="PatchOperationAddModExtension">
		<xpath>Defs/ThingDef[defName="Emu"]</xpath>
		<value>

				<fetusTexPath>Fetus/Birds/Fetus_Bird</fetusTexPath>
				<cumColor>(255,255,255,255)</cumColor>
				<cumThickness>0.4</cumThickness>
				<ingestionOutcomeDoers>
				</ingestionOutcomeDoers>
				<hybridExtension>
				</hybridExtension>

		</value>
	</Operation>

  <Operation Class="PatchOperationAddModExtension">
    <xpath>/Defs/ThingDef[@Name="BaseBear"]</xpath>
    <value>

        <fetusTexPath>Fetus/Ursids/Fetus_Ursid</fetusTexPath>
        <cumColor>(255,255,255,255)</cumColor>
        <cumThickness>0.05</cumThickness>
        <ingestionOutcomeDoers>
        </ingestionOutcomeDoers>
        <hybridExtension>
        </hybridExtension>

    </value>
  </Operation>

</Patch>


code:
<?xml version="1.0" encoding="utf-8"?>
<Patch>
	<Operation Class="PatchOperationFindMod">
		<mods>

Biotech

		</mods>
		<match Class="PatchOperationAdd">
			<xpath>/Defs/HediffDef[defName="PregnantHuman" or defName="PregnancyLabor" or defName="PregnancyLaborPushing"]/comps</xpath>
			<value>

					<compClass>RJW_Menstruation.HediffComp_PregeneratedBabies</compClass>

			</value>
		</match>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8"?>

<Patch>
	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/StatDef[defName="SexFrequency"]/parts</xpath>
		<value>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/StatDef[defName="SexSatisfaction"]/parts</xpath>
		<value>

		</value>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8"?>
<ModMetaData>
	<name>RJW Menstruation Cycle Race Support</name>
	<author>a</author>
	<supportedVersions>

1.2

	</supportedVersions>
	<modDependencies>

			<packageId>rjw.menstruation</packageId>
			<displayName>RJW Menstruation</displayName>
			<downloadUrl>https://github.com/moreoreganostodump/RJW_Menstruation</downloadUrl>

			<packageId>Abraxas.RJW.RaceSupport</packageId>
			<displayName>RJW - RaceSupport</displayName>
			<downloadUrl>https://gitgud.io/Abraxas/rjw-race-support</downloadUrl>

	</modDependencies>
	<loadAfter>

Abraxas.RJW.RaceSupport

rjw.menstruation

	</loadAfter>
	<packageId>rjw.menstruation.racesupport</packageId>
	<description>good good</description>
</ModMetaData>

path: 1.5/RJW Menstruation Race Support/About/About.xml


code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Manifest>
	<identifier>RJW Menstruation Race Support</identifier>
	<version>8.9.0</version>
	<dependencies>
	</dependencies>
	<incompatibleWith />
	<loadAfter>
	</loadAfter>
	<suggests>
	</suggests>
</Manifest>

path: 1.5/RJW Menstruation Race Support/About/Manifest.xml


code:
<?xml version="1.0" encoding="UTF-8"?>

<Patch>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="BovineVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>10</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>4</follicularIntervalDays>
					<lutealIntervalDays>17</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>90</recoveryIntervalDays>
					<eggLifespanDays>2</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="CactoidVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>8</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>8</follicularIntervalDays>
					<lutealIntervalDays>12</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>0</recoveryIntervalDays>
					<eggLifespanDays>2</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<breedingSeason>Summer</breedingSeason>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="ElephantVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>18</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>35</follicularIntervalDays>
					<lutealIntervalDays>63</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>30</recoveryIntervalDays>
					<eggLifespanDays>3</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="HyenaVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>18</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>7</follicularIntervalDays>
					<lutealIntervalDays>7</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>30</recoveryIntervalDays>
					<eggLifespanDays>1</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<concealedEstrus>true</concealedEstrus>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="MammalVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>10</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>14</follicularIntervalDays>
					<lutealIntervalDays>14</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>30</recoveryIntervalDays>
					<eggLifespanDays>3</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="MarineVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>10</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>10</follicularIntervalDays>
					<lutealIntervalDays>20</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>30</recoveryIntervalDays>
					<eggLifespanDays>2</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="PigVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>18</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>6</follicularIntervalDays>
					<lutealIntervalDays>14</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>24</recoveryIntervalDays>
					<eggLifespanDays>2</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="PistilVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>8</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>6</follicularIntervalDays>
					<lutealIntervalDays>12</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>30</recoveryIntervalDays>
					<eggLifespanDays>2</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<breedingSeason>Fall</breedingSeason>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="GhostVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>2</maxCumCapacity>
					<baseImplantationChanceFactor>0.1</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>0.1</basefertilizationChanceFactor>
					<follicularIntervalDays>14</follicularIntervalDays>
					<lutealIntervalDays>14</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>0</recoveryIntervalDays>
					<eggLifespanDays>1</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<concealedEstrus>true</concealedEstrus>

			</comps>
		</value>
	</Operation>
</Patch>

path: 1.5/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Animal_RaceSupport.xml


code:
<?xml version="1.0" encoding="UTF-8"?>

<Patch>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="MammalBreasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts/Breast</BreastTex>
					<BlacknippleColor>(55,20,0)</BlacknippleColor>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="GhostBreasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts/Breast</BreastTex>
					<BlacknippleColor>(55,20,0)</BlacknippleColor>

			</comps>
		</value>
	</Operation>
	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="CactoidBreasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts/Breast</BreastTex>
					<BlacknippleColor>(55,20,0)</BlacknippleColor>

			</comps>
		</value>
	</Operation>
	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="GhoulBreasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts/Breast</BreastTex>
					<BlacknippleColor>(55,20,0)</BlacknippleColor>

			</comps>
		</value>
	</Operation>
	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="NecroBreasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts/Breast</BreastTex>
					<BlacknippleColor>(55,20,0)</BlacknippleColor>

			</comps>
		</value>
	</Operation>
	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="OrcBreasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts/Breast</BreastTex>
					<BlacknippleColor>(55,20,0)</BlacknippleColor>

			</comps>
		</value>
	</Operation>
	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="ScaleBreasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts/Breast</BreastTex>
					<BlacknippleColor>(55,20,0)</BlacknippleColor>

			</comps>
		</value>
	</Operation>
	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="TreeBreasts"]</xpath>
		<value>
			<comps>

					<BreastTex>Breasts/Breast</BreastTex>
					<BlacknippleColor>(55,20,0)</BlacknippleColor>

			</comps>
		</value>
	</Operation>

</Patch>

path: 1.5/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Breasts_RaceSupport.xml


code:
<?xml version="1.0" encoding="UTF-8"?>

<Patch>
	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="ElfVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>10</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>1800</follicularIntervalDays>
					<lutealIntervalDays>1800</lutealIntervalDays>
					<bleedingIntervalDays>6</bleedingIntervalDays>
					<recoveryIntervalDays>30</recoveryIntervalDays>
					<eggLifespanDays>1</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<concealedEstrus>true</concealedEstrus>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="ElfAnus"]</xpath>
		<value>
			<comps>

					<analTex>Genitals/Anal</analTex>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="OrcVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>10</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>7</follicularIntervalDays>
					<lutealIntervalDays>10</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>10</recoveryIntervalDays>
					<eggLifespanDays>1</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<concealedEstrus>true</concealedEstrus>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="OrcAnus"]</xpath>
		<value>
			<comps>

					<analTex>Genitals/Anal</analTex>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="GhoulVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>10</maxCumCapacity>
					<baseImplantationChanceFactor>0.2</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>0.2</basefertilizationChanceFactor>
					<follicularIntervalDays>14</follicularIntervalDays>
					<lutealIntervalDays>14</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>10</recoveryIntervalDays>
					<eggLifespanDays>1</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<concealedEstrus>true</concealedEstrus>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="GhoulAnus"]</xpath>
		<value>
			<comps>

					<analTex>Genitals/Anal</analTex>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="NecroVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>10</maxCumCapacity>
					<baseImplantationChanceFactor>0.1</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>0.1</basefertilizationChanceFactor>
					<follicularIntervalDays>14</follicularIntervalDays>
					<lutealIntervalDays>14</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>0</recoveryIntervalDays>
					<eggLifespanDays>1</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<concealedEstrus>true</concealedEstrus>

			</comps>
		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>/Defs/rjw.HediffDef_SexPart[defName="TreeVagina"]</xpath>
		<value>
			<comps>

					<maxCumCapacity>15</maxCumCapacity>
					<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
					<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
					<follicularIntervalDays>10</follicularIntervalDays>
					<lutealIntervalDays>12</lutealIntervalDays>
					<bleedingIntervalDays>0</bleedingIntervalDays>
					<recoveryIntervalDays>30</recoveryIntervalDays>
					<eggLifespanDays>2</eggLifespanDays>
					<wombTex>Womb/Womb</wombTex>
					<vagTex>Genitals/Vagina</vagTex>
					<breedingSeason>Fall</breedingSeason>

			</comps>
		</value>
	</Operation>
</Patch>

path: 1.5/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Humanlike_RaceSupport.xml


code:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32929.385
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RJW_Menstruation", "RJW_Menstruation\RJW_Menstruation.csproj", "{EED2F3B9-8C20-4194-919E-8D151B29F70B}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{EED2F3B9-8C20-4194-919E-8D151B29F70B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{EED2F3B9-8C20-4194-919E-8D151B29F70B}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{EED2F3B9-8C20-4194-919E-8D151B29F70B}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{EED2F3B9-8C20-4194-919E-8D151B29F70B}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {0E4B1D09-2A81-4440-AC1E-32ACCECBEE0B}
	EndGlobalSection
EndGlobal


code:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
    </startup>
</configuration>


code:
using RimWorld;
using System.Linq;
using Verse;

namespace RJW_Menstruation
{
    public class CompProperties_BiosculpterPod_EggRestorationCycle : CompProperties_BiosculpterPod_BaseCycle
    {
        public CompProperties_BiosculpterPod_EggRestorationCycle()
        {
            compClass = typeof(CompBiosculpterPod_EggRestorationCycle);
        }

        public float yearsToRestore;
    }

    public class CompBiosculpterPod_EggRestorationCycle : CompBiosculpterPod_Cycle
    {

        public override void CycleCompleted(Pawn occupant)
        {
            foreach (HediffComp_Menstruation comp in occupant.GetMenstruationComps())
                comp.RestoreEggs(((CompProperties_BiosculpterPod_EggRestorationCycle)Props).yearsToRestore);

            Messages.Message(Translations.EggRestorationCompleted(occupant.Named("PAWN")), occupant, MessageTypeDefOf.PositiveEvent);
            if (occupant.GetMenstruationComps().Any())
                occupant.needs.mood?.thoughts?.memories?.TryGainMemoryFast(VariousDefOf.EggRestorationReceived);
        }
    }
}


code:
using AnimalGenetics;
using RimWorld;
using System.Collections.Generic;
using Verse;

namespace RJW_Menstruation
{
    public static class AnimalGeneticsCompatibility
    {
        public static void PreConception(Pawn mother, Pawn father)
        {
            GeneticInformation motherGeneticInformation = mother?.AnimalGenetics();
            GeneticInformation fatherGeneticInformation = father?.AnimalGenetics();

            ParentReferences.Push(new ParentReferences.Record { Mother = motherGeneticInformation, Father = fatherGeneticInformation });
        }

        public static void PostConception()
        {
            ParentReferences.Pop();
        }

        public static void CopyGenes(Pawn baby, Pawn original)
        {
            Dictionary<StatDef, GeneRecord> babyRecords = baby.AnimalGenetics()?.GeneRecords;
            Dictionary<StatDef, GeneRecord> originalRecords = original.AnimalGenetics()?.GeneRecords;

            if (babyRecords == null || originalRecords == null) return;

            foreach(KeyValuePair<StatDef, GeneRecord> record in originalRecords)
            {
                GeneRecord originalRecord = record.Value;
                if (!babyRecords.TryGetValue(record.Key, out GeneRecord babyRecord)) continue;  // Shouldn't fail, but best to be safe

                babyRecord.Parent = originalRecord.Parent;
                babyRecord.Value = originalRecord.Value;
            }
        }
    }
}


code:
using AlienRace;
using Verse;

namespace RJW_Menstruation
{
    public static class HARCompatibility
    {

        public static bool IsHAR(this Pawn pawn)
        {
            if (!Configurations.HARActivated) return false;
            return GenTypes.GetTypeInAnyAssembly("AlienRace.ThingDef_AlienRace").IsInstanceOfType(pawn?.def);
        }

        public static void CopyHARProperties(Pawn baby, Pawn original)
        {
            if (!baby.HasComp<AlienPartGenerator.AlienComp>() || !original.HasComp<AlienPartGenerator.AlienComp>()) return;
            AlienPartGenerator.AlienComp.CopyAlienData(original, baby);
        }
    }
}


code:
using System.Linq;
using VanillaGenesExpanded;
using Verse;

namespace RJW_Menstruation
{
    public static class VECompatibility
    {
        public static ThingDef VEGeneBloodDef(Pawn pawn)
        {
            if (!ModsConfig.BiotechActive || pawn.genes == null) return null;
            foreach(Gene gene in pawn.genes.GenesListForReading.Where(gene => gene.Active))
            {
                ThingDef bloodDef = gene.def.GetModExtension<GeneExtension>()?.customBloodThingDef;
                if (bloodDef != null) return bloodDef;
            }
            return null;
        }
    }
}


code:
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<HybridInformations> HybridOverride = new List<HybridInformations>();

        public static bool HARActivated = false;
        public static bool VEFActivated = 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<HybridInformations> removeList = new List<HybridInformations>();
            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<Configurations>();
            if (!ModsConfig.BiotechActive && Configurations.PregnancySource == Configurations.PregnancyType.Biotech)
                Configurations.PregnancySource = Configurations.PregnancyType.MultiplePregnancy;
            Configurations.HARActivated = ModsConfig.IsActive("erdelf.HumanoidAlienRaces");
            Configurations.VEFActivated = ModsConfig.IsActive("oskarpotocki.vanillafactionsexpanded.core");
            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);
        }

    }

}


code:
using RimWorld;
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using Verse;

namespace RJW_Menstruation
{
    public class Cum : IExposable
    {
        public Pawn pawn;

        protected float volume; // ml
        public float fertility = 1.0f;
        public bool notcum = false; // for other fluids
        public string notcumLabel = "";
        protected bool useCustomColor = false;
        protected float notcumthickness = 0;
        protected float cumthickness = 1.0f;
        protected Thing internalThing;

        public float Volume
        {
            get
            {
                return volume;
            }
        }

        public float FertVolume
        {
            get
            {
                return volume * fertility;
            }
        }

        public float CumThickness
        {
            get
            {
                return cumthickness;
            }
        }

        public float DecayResist
        {
            get
            {
                if (!notcum) return DNA.cumThickness;
                else return notcumthickness;
            }
            set
            {
                notcumthickness = value;
            }
        }
        protected Color customColor;

        public PawnDNAModExtension DNA
        {
            get
            {
                if (DNAcache != null) return DNAcache;
                try
                {
                    DNAcache = pawn.def.GetModExtension<PawnDNAModExtension>();
                }
                catch (NullReferenceException)
                {
                    DNAcache = ThingDefOf.Human.GetModExtension<PawnDNAModExtension>();
                }
                if (DNAcache == null)
                {
                    DNAcache = ThingDefOf.Human.GetModExtension<PawnDNAModExtension>();
                }
                return DNAcache;
            }
        }
        protected PawnDNAModExtension DNAcache = null;
        public ThingDef FilthDef
        {
            get
            {
                if (filthDef == null) return VariousDefOf.CumFilth;
                else return filthDef;
            }
            set
            {
                filthDef = value;
            }
        }
        protected ThingDef filthDef = null;
        public Color Color
        {
            get
            {
                if (!useCustomColor) return DNA.CumColor;
                else return customColor;
            }

            set
            {
                useCustomColor = true;
                customColor = value;
            }
        }

        public Thing CumThing
        {
            get
            {
                if (internalThing == null)
                {
                    internalThing = ThingMaker.MakeThing(VariousDefOf.CumFilth);
                    internalThing.stackCount = (int)volume;
                }
                internalThing.stackCount = (int)volume;
                return internalThing;
            }
        }

        public Cum() { }

        public Cum(Pawn pawn)
        {
            this.pawn = pawn;
            volume = 1.0f;
            fertility = 1.0f;
        }

        /// <summary>
        /// Not Cum
        /// </summary>
        /// <param name="pawn"></param>
        /// <param name="volume"></param>
        /// <param name="notcumlabel"></param>
        /// <param name="decayresist"></param>
        /// <param name="filthDef"></param>
        public Cum(Pawn pawn, float volume, string notcumlabel, float decayresist = 0, ThingDef filthDef = null)
        {
            this.pawn = pawn;
            this.volume = volume;
            this.fertility = 0f;
            this.notcum = true;
            this.notcumLabel = notcumlabel;
            this.notcumthickness = decayresist;
            this.filthDef = filthDef;
        }

        public Cum(Pawn pawn, float volume, float fertility, ThingDef filthDef = null)
        {
            this.pawn = pawn;
            this.volume = volume;
            this.fertility = fertility;
            this.filthDef = filthDef;
        }

        public virtual void ExposeData()
        {
            Scribe_References.Look(ref pawn, "pawn", true);
            Scribe_Values.Look(ref volume, "volume", volume, true);
            Scribe_Values.Look(ref fertility, "fertility", fertility, true);
            Scribe_Values.Look(ref notcumthickness, "notcumthickness", 0);
            Scribe_Values.Look(ref notcum, "notcum", false);
            Scribe_Values.Look(ref notcumLabel, "notcumLabel", "");
            Scribe_Values.Look(ref useCustomColor, "useCustomColor", false);
            Scribe_Values.Look(ref customColor, "customColor", default);
            Scribe_Defs.Look(ref filthDef, "filthDef");
        }

        public void MakeThinner(float speed)
        {
            cumthickness = cumthickness.LerpMultiple(DecayResist, 0.3f, speed);
        }

        public void MergeWithCum(float volumein, float fertility, ThingDef updatefilthDef = null)
        {
            if (updatefilthDef != null) filthDef = updatefilthDef;
            volume += volumein;
            this.fertility = (this.volume * this.fertility + volumein * fertility) / (this.volume + volumein);
            cumthickness = Mathf.Lerp(cumthickness, 1.0f, volumein / volume);
        }

        public void MergeWithFluid(float volumein, float thickness, ThingDef updatefilthDef = null)
        {
            if (updatefilthDef != null) filthDef = updatefilthDef;
            volume += volumein;
            fertility = volume * fertility / (volume + volumein);
            notcumthickness = Mathf.Lerp(notcumthickness, thickness, volumein / volume);
        }

        public bool ShouldRemove()
        {
            if ((notcum || FertVolume < 0.001f) && volume < 0.01f) return true;
            return false;
        }

        public float DismishNatural(float leakfactor, HediffComp_Menstruation comp, float antisperm = 0.0f)
        {
            // comp is used for Hydrogen's RJW Muscle Injury
            float totalleak = volume;
            float decayPerInterval = 1 - Mathf.Pow(1 - Configurations.CumDecayRatio, comp.HoursBetweenSimulations);
            float fertilityDecayPerInterval = 1 - Mathf.Pow(1 - Configurations.CumFertilityDecayRatio, comp.HoursBetweenSimulations);
            antisperm *= comp.HoursBetweenSimulations;
            volume *= Math.Max(0, 1 - decayPerInterval * (1 - DecayResist) * leakfactor);
            fertility *= Math.Max(0, 1 - (fertilityDecayPerInterval * (1 - DecayResist) + antisperm));
            CutMinor();
            totalleak -= volume;
            return totalleak;
        }

        public float DismishForce(float portion, float leakfactor = 1.0f)
        {
            float totalleak = volume;
            volume *= Math.Max(0, 1 - (portion * (1 - DecayResist / 10)) * leakfactor);
            CutMinor();
            totalleak -= volume;
            return totalleak;
        }

        public void CumEffects(Pawn pawn)
        {
            if (notcum || DNA?.ingestionOutcomeDoers == null || volume < 1.0f) return;

            foreach (IngestionOutcomeDoer doer in DNA.ingestionOutcomeDoers)
                doer.DoIngestionOutcome(pawn, CumThing, 1);
        }

        protected void CutMinor()
        {
            if (volume < 0.01f) volume = 0f;
        }
    }

    public class CumMixture : Cum
    {
        protected List<string> cums;
        public bool ispurecum = true;
        public List<string> Getingredients => cums;

        public CumMixture()
        {
            notcum = true;
            cums = new List<string>();
        }

        public CumMixture(Pawn pawn, float volume, List<string> cums, Color color, ThingDef mixtureDef, bool pure)
        {
            this.pawn = pawn;
            this.volume = volume;
            this.cums = cums;
            this.customColor = color;
            this.useCustomColor = true;
            ispurecum = pure;
        }

        public override void ExposeData()
        {
            base.ExposeData();
            Scribe_Collections.Look(ref cums, "cumslabel", LookMode.Value, new object[0]);
        }

        public string GetIngredients()
        {
            StringBuilder res = new StringBuilder();

            if (!cums.NullOrEmpty()) for (int i = 0; i < cums.Count; i++)
                {
                    res.Append(cums[i]);
                    if (i < cums.Count - 1) res.Append(", ");
                }
            return res.ToString();
        }
    }
}


code:
using LudeonTK;
using RimWorld;
using Verse;

#pragma warning disable IDE0051 // Remove unused private members
namespace RJW_Menstruation
{
    public static class DebugToolsMenstruation
    {
        [DebugAction("RJW Menstruation", "Set pawn's state to follicular", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)]
        private static void SetFollicular(Pawn p)
        {
            foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
            {
                comp.GoNextStage(HediffComp_Menstruation.Stage.Follicular);
                comp.RemoveAllEggs();
            }
            Messages.Message($"{p} is now follicular", p, MessageTypeDefOf.NeutralEvent, false);
        }

        [DebugAction("RJW Menstruation", "Set pawn's state to ovulatory", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)]
        private static void SetOvulatory(Pawn p)
        {
            foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
                comp.GoNextStage(HediffComp_Menstruation.Stage.Ovulatory);
            Messages.Message($"{p} is now ovulatory", p, MessageTypeDefOf.NeutralEvent, false);
        }

        [DebugAction("RJW Menstruation", "Set pawn's state to luteal", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)]
        private static void SetLuteal(Pawn p)
        {
            foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
                comp.GoNextStage(HediffComp_Menstruation.Stage.Luteal);
            Messages.Message($"{p} is now luteal", p, MessageTypeDefOf.NeutralEvent, false);
        }

        [DebugAction("RJW Menstruation", "Set pawn's state to bleeding", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)]
        private static void SetBleeding(Pawn p)
        {
            foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
            {
                comp.GoNextStage(HediffComp_Menstruation.Stage.Bleeding);
                comp.RemoveAllEggs();
            }
            Messages.Message($"{p} is now bleeding", p, MessageTypeDefOf.NeutralEvent, false);
        }
        /*
        [DebugAction("RJW Menstruation", "Set pawn's state to recovering", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)]
        private static void setRecover(Pawn p)
        {
            p.GetMenstruationComp().curStage = HediffComp_Menstruation.Stage.Recover;
        }

        [DebugAction("RJW Menstruation", "Set pawn's state to young", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)]
        private static void setYoung(Pawn p)
        {
            p.GetMenstruationComp().curStage = HediffComp_Menstruation.Stage.Young;
        }
        */
        [DebugAction("RJW Menstruation", "Remove all cum from pawn's womb", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)]
        private static void RemoveCums(Pawn p)
        {
            foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
                comp.RemoveAllCums();
            Messages.Message($"All cum removed from {p}'s womb", p, MessageTypeDefOf.NeutralEvent, false);
        }
        [DebugAction("RJW Menstruation", "Remove all eggs from pawn's womb", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)]
        private static void RemoveEggs(Pawn p)
        {
            foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
                comp.RemoveAllEggs();
            Messages.Message($"All eggs removed from {p}'s womb", p, MessageTypeDefOf.NeutralEvent, false);
        }
        [DebugAction("RJW Menstruation", "Add egg to pawn's next ovulation", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)]
        private static void AddEgg(Pawn p)
        {
            foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
                comp.eggstack++;
            Messages.Message($"1 egg added to {p}'s next ovulation ({p.GetFirstMenstruationComp().eggstack})", p, MessageTypeDefOf.NeutralEvent, false);
        }

        [DebugAction("RJW Menstruation", "Recalculate pawn's ovary power", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)]
        private static void RecalculateOvaryPower(Pawn p)
        {
            foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
                comp.ovarypower = comp.GetOvaryPowerByAge();
            Messages.Message($"{p}'s ovarypower recalculated ({p.GetFirstMenstruationComp().ovarypower})", p, MessageTypeDefOf.NeutralEvent, false);
        }
    }
}
#pragma warning restore IDE0051 // Remove unused private members