diff --git a/1.2/Assemblies/RJW_Menstruation.dll b/1.2/Assemblies/RJW_Menstruation.dll
new file mode 100644
index 0000000..d5c07a6
Binary files /dev/null and b/1.2/Assemblies/RJW_Menstruation.dll differ
diff --git a/Assemblies/RJW_Menstruation.dll.config b/1.2/Assemblies/RJW_Menstruation.dll.config
similarity index 100%
rename from Assemblies/RJW_Menstruation.dll.config
rename to 1.2/Assemblies/RJW_Menstruation.dll.config
diff --git a/Defs/DNADef/DNADefs.xml b/1.2/Defs/DNADef/DNADefs.xml
similarity index 100%
rename from Defs/DNADef/DNADefs.xml
rename to 1.2/Defs/DNADef/DNADefs.xml
diff --git a/Defs/Drugs/Pills_Menstruation.xml b/1.2/Defs/Drugs/Pills_Menstruation.xml
similarity index 100%
rename from Defs/Drugs/Pills_Menstruation.xml
rename to 1.2/Defs/Drugs/Pills_Menstruation.xml
diff --git a/Defs/HediffDef/Hediffs_Menstruation.xml b/1.2/Defs/HediffDef/Hediffs_Menstruation.xml
similarity index 100%
rename from Defs/HediffDef/Hediffs_Menstruation.xml
rename to 1.2/Defs/HediffDef/Hediffs_Menstruation.xml
diff --git a/Defs/JobDefs/Jobs_CleanSelf.xml b/1.2/Defs/JobDefs/Jobs_CleanSelf.xml
similarity index 100%
rename from Defs/JobDefs/Jobs_CleanSelf.xml
rename to 1.2/Defs/JobDefs/Jobs_CleanSelf.xml
diff --git a/Defs/JobDefs/Jobs_MilkSelf.xml b/1.2/Defs/JobDefs/Jobs_MilkSelf.xml
similarity index 100%
rename from Defs/JobDefs/Jobs_MilkSelf.xml
rename to 1.2/Defs/JobDefs/Jobs_MilkSelf.xml
diff --git a/Defs/KeyBindings/KeyBindings.xml b/1.2/Defs/KeyBindings/KeyBindings.xml
similarity index 100%
rename from Defs/KeyBindings/KeyBindings.xml
rename to 1.2/Defs/KeyBindings/KeyBindings.xml
diff --git a/Defs/Recipe_Surgery/Recipes_Surgery_Breast.xml b/1.2/Defs/Recipe_Surgery/Recipes_Surgery_Breast.xml
similarity index 100%
rename from Defs/Recipe_Surgery/Recipes_Surgery_Breast.xml
rename to 1.2/Defs/Recipe_Surgery/Recipes_Surgery_Breast.xml
diff --git a/Defs/RecordDefs/Records_Womb.xml b/1.2/Defs/RecordDefs/Records_Womb.xml
similarity index 83%
rename from Defs/RecordDefs/Records_Womb.xml
rename to 1.2/Defs/RecordDefs/Records_Womb.xml
index 0a0b693..e42a0a9 100644
--- a/Defs/RecordDefs/Records_Womb.xml
+++ b/1.2/Defs/RecordDefs/Records_Womb.xml
@@ -11,7 +11,7 @@
AmountofFertilizedEggs
fertilized eggs
- The amount of my eggs raped by sperm.
+ The amount of my eggs being raped by sperm.
Int
diff --git a/Defs/Stats/Stats_Absorber.xml b/1.2/Defs/Stats/Stats_Absorber.xml
similarity index 100%
rename from Defs/Stats/Stats_Absorber.xml
rename to 1.2/Defs/Stats/Stats_Absorber.xml
diff --git a/Defs/ThingDefs/ApparelLayerDefs_Absorber.xml b/1.2/Defs/ThingDefs/ApparelLayerDefs_Absorber.xml
similarity index 100%
rename from Defs/ThingDefs/ApparelLayerDefs_Absorber.xml
rename to 1.2/Defs/ThingDefs/ApparelLayerDefs_Absorber.xml
diff --git a/Defs/ThingDefs/Apparel_Absorbers.xml b/1.2/Defs/ThingDefs/Apparel_Absorbers.xml
similarity index 100%
rename from Defs/ThingDefs/Apparel_Absorbers.xml
rename to 1.2/Defs/ThingDefs/Apparel_Absorbers.xml
diff --git a/Defs/ThingDefs/Filth_Mixture.xml b/1.2/Defs/ThingDefs/Filth_Mixture.xml
similarity index 100%
rename from Defs/ThingDefs/Filth_Mixture.xml
rename to 1.2/Defs/ThingDefs/Filth_Mixture.xml
diff --git a/Defs/ThoughtDefs/Thoughts_sex.xml b/1.2/Defs/ThoughtDefs/Thoughts_sex.xml
similarity index 100%
rename from Defs/ThoughtDefs/Thoughts_sex.xml
rename to 1.2/Defs/ThoughtDefs/Thoughts_sex.xml
diff --git a/Languages/ChineseSimplified/DefInjected/ApparelLayerDef/RJWMenstruation.xml b/1.2/Languages/ChineseSimplified/DefInjected/ApparelLayerDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/ChineseSimplified/DefInjected/ApparelLayerDef/RJWMenstruation.xml
rename to 1.2/Languages/ChineseSimplified/DefInjected/ApparelLayerDef/RJWMenstruation.xml
diff --git a/Languages/ChineseSimplified/DefInjected/HediffDef/RJWMenstruation.xml b/1.2/Languages/ChineseSimplified/DefInjected/HediffDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/ChineseSimplified/DefInjected/HediffDef/RJWMenstruation.xml
rename to 1.2/Languages/ChineseSimplified/DefInjected/HediffDef/RJWMenstruation.xml
diff --git a/Languages/ChineseSimplified/DefInjected/JobDef/RJWMenstruation.xml b/1.2/Languages/ChineseSimplified/DefInjected/JobDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/ChineseSimplified/DefInjected/JobDef/RJWMenstruation.xml
rename to 1.2/Languages/ChineseSimplified/DefInjected/JobDef/RJWMenstruation.xml
diff --git a/Languages/ChineseSimplified/DefInjected/StatDef/RJWMenstruation.xml b/1.2/Languages/ChineseSimplified/DefInjected/StatDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/ChineseSimplified/DefInjected/StatDef/RJWMenstruation.xml
rename to 1.2/Languages/ChineseSimplified/DefInjected/StatDef/RJWMenstruation.xml
diff --git a/Languages/ChineseSimplified/DefInjected/ThingDef/RJWMenstruation.xml b/1.2/Languages/ChineseSimplified/DefInjected/ThingDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/ChineseSimplified/DefInjected/ThingDef/RJWMenstruation.xml
rename to 1.2/Languages/ChineseSimplified/DefInjected/ThingDef/RJWMenstruation.xml
diff --git a/Languages/ChineseSimplified/DefInjected/ThoughtDef/RJWMenstruation.xml b/1.2/Languages/ChineseSimplified/DefInjected/ThoughtDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/ChineseSimplified/DefInjected/ThoughtDef/RJWMenstruation.xml
rename to 1.2/Languages/ChineseSimplified/DefInjected/ThoughtDef/RJWMenstruation.xml
diff --git a/Languages/ChineseSimplified/Keyed/RJW_Menstruation.xml b/1.2/Languages/ChineseSimplified/Keyed/RJW_Menstruation.xml
similarity index 100%
rename from Languages/ChineseSimplified/Keyed/RJW_Menstruation.xml
rename to 1.2/Languages/ChineseSimplified/Keyed/RJW_Menstruation.xml
diff --git a/Languages/ChineseTraditional/DefInjected/ApparelLayerDef/RJWMenstruation.xml b/1.2/Languages/ChineseTraditional/DefInjected/ApparelLayerDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/ChineseTraditional/DefInjected/ApparelLayerDef/RJWMenstruation.xml
rename to 1.2/Languages/ChineseTraditional/DefInjected/ApparelLayerDef/RJWMenstruation.xml
diff --git a/Languages/ChineseTraditional/DefInjected/HediffDef/RJWMenstruation.xml b/1.2/Languages/ChineseTraditional/DefInjected/HediffDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/ChineseTraditional/DefInjected/HediffDef/RJWMenstruation.xml
rename to 1.2/Languages/ChineseTraditional/DefInjected/HediffDef/RJWMenstruation.xml
diff --git a/Languages/ChineseTraditional/DefInjected/JobDef/RJWMenstruation.xml b/1.2/Languages/ChineseTraditional/DefInjected/JobDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/ChineseTraditional/DefInjected/JobDef/RJWMenstruation.xml
rename to 1.2/Languages/ChineseTraditional/DefInjected/JobDef/RJWMenstruation.xml
diff --git a/Languages/ChineseTraditional/DefInjected/StatDef/RJWMenstruation.xml b/1.2/Languages/ChineseTraditional/DefInjected/StatDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/ChineseTraditional/DefInjected/StatDef/RJWMenstruation.xml
rename to 1.2/Languages/ChineseTraditional/DefInjected/StatDef/RJWMenstruation.xml
diff --git a/Languages/ChineseTraditional/DefInjected/ThingDef/RJWMenstruation.xml b/1.2/Languages/ChineseTraditional/DefInjected/ThingDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/ChineseTraditional/DefInjected/ThingDef/RJWMenstruation.xml
rename to 1.2/Languages/ChineseTraditional/DefInjected/ThingDef/RJWMenstruation.xml
diff --git a/Languages/ChineseTraditional/DefInjected/ThoughtDef/RJWMenstruation.xml b/1.2/Languages/ChineseTraditional/DefInjected/ThoughtDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/ChineseTraditional/DefInjected/ThoughtDef/RJWMenstruation.xml
rename to 1.2/Languages/ChineseTraditional/DefInjected/ThoughtDef/RJWMenstruation.xml
diff --git a/Languages/ChineseTraditional/Keyed/RJW_Menstruation.xml b/1.2/Languages/ChineseTraditional/Keyed/RJW_Menstruation.xml
similarity index 100%
rename from Languages/ChineseTraditional/Keyed/RJW_Menstruation.xml
rename to 1.2/Languages/ChineseTraditional/Keyed/RJW_Menstruation.xml
diff --git a/Languages/English/Keyed/RJW_Menstruation.xml b/1.2/Languages/English/Keyed/RJW_Menstruation.xml
similarity index 97%
rename from Languages/English/Keyed/RJW_Menstruation.xml
rename to 1.2/Languages/English/Keyed/RJW_Menstruation.xml
index d90c195..b01d614 100644
--- a/Languages/English/Keyed/RJW_Menstruation.xml
+++ b/1.2/Languages/English/Keyed/RJW_Menstruation.xml
@@ -93,6 +93,7 @@
Allow shrink icon
Let icon become smaller If needed.
estimated sperm lifespan
+ The chance of pregnancy of fertilized egg.
The white overlay is indicates fertilization chance of sperms in womb.
Vaginal washing
diff --git a/Languages/Korean/DefInjected/ApparelLayerDef/RJWMenstruation.xml b/1.2/Languages/Korean/DefInjected/ApparelLayerDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/Korean/DefInjected/ApparelLayerDef/RJWMenstruation.xml
rename to 1.2/Languages/Korean/DefInjected/ApparelLayerDef/RJWMenstruation.xml
diff --git a/Languages/Korean/DefInjected/HediffDef/RJWMenstruation.xml b/1.2/Languages/Korean/DefInjected/HediffDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/Korean/DefInjected/HediffDef/RJWMenstruation.xml
rename to 1.2/Languages/Korean/DefInjected/HediffDef/RJWMenstruation.xml
diff --git a/Languages/Korean/DefInjected/JobDef/RJWMenstruation.xml b/1.2/Languages/Korean/DefInjected/JobDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/Korean/DefInjected/JobDef/RJWMenstruation.xml
rename to 1.2/Languages/Korean/DefInjected/JobDef/RJWMenstruation.xml
diff --git a/Languages/Korean/DefInjected/RecipeDef/BreastSurgeries.xml b/1.2/Languages/Korean/DefInjected/RecipeDef/BreastSurgeries.xml
similarity index 100%
rename from Languages/Korean/DefInjected/RecipeDef/BreastSurgeries.xml
rename to 1.2/Languages/Korean/DefInjected/RecipeDef/BreastSurgeries.xml
diff --git a/Languages/Korean/DefInjected/RecordDef/RJWMenstruation.xml b/1.2/Languages/Korean/DefInjected/RecordDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/Korean/DefInjected/RecordDef/RJWMenstruation.xml
rename to 1.2/Languages/Korean/DefInjected/RecordDef/RJWMenstruation.xml
diff --git a/Languages/Korean/DefInjected/StatDef/RJWMenstruation.xml b/1.2/Languages/Korean/DefInjected/StatDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/Korean/DefInjected/StatDef/RJWMenstruation.xml
rename to 1.2/Languages/Korean/DefInjected/StatDef/RJWMenstruation.xml
diff --git a/Languages/Korean/DefInjected/ThingDef/RJWMenstruation.xml b/1.2/Languages/Korean/DefInjected/ThingDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/Korean/DefInjected/ThingDef/RJWMenstruation.xml
rename to 1.2/Languages/Korean/DefInjected/ThingDef/RJWMenstruation.xml
diff --git a/Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml b/1.2/Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml
similarity index 100%
rename from Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml
rename to 1.2/Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml
diff --git a/Languages/Korean/Keyed/RJW_Menstruation.xml b/1.2/Languages/Korean/Keyed/RJW_Menstruation.xml
similarity index 97%
rename from Languages/Korean/Keyed/RJW_Menstruation.xml
rename to 1.2/Languages/Korean/Keyed/RJW_Menstruation.xml
index 2c5d436..196a6a6 100644
--- a/Languages/Korean/Keyed/RJW_Menstruation.xml
+++ b/1.2/Languages/Korean/Keyed/RJW_Menstruation.xml
@@ -93,6 +93,7 @@
아이콘 축소 허용
아이콘 축소를 허용합니다.
정자 예상수명
+ 수정란이 임신으로 진행될 확률입니다.
흰색 오버레이는 정자가 난자를 수정시킬 확률을 표시하는 것입니다.
질세척
diff --git a/Patches/Drugs.xml b/1.2/Patches/Drugs.xml
similarity index 100%
rename from Patches/Drugs.xml
rename to 1.2/Patches/Drugs.xml
diff --git a/Patches/Hediffs_PrivateParts.xml b/1.2/Patches/Hediffs_PrivateParts.xml
similarity index 100%
rename from Patches/Hediffs_PrivateParts.xml
rename to 1.2/Patches/Hediffs_PrivateParts.xml
diff --git a/Patches/Hediffs_PrivateParts_Animal.xml b/1.2/Patches/Hediffs_PrivateParts_Animal.xml
similarity index 100%
rename from Patches/Hediffs_PrivateParts_Animal.xml
rename to 1.2/Patches/Hediffs_PrivateParts_Animal.xml
diff --git a/Patches/Hediffs_PrivateParts_Breasts.xml b/1.2/Patches/Hediffs_PrivateParts_Breasts.xml
similarity index 100%
rename from Patches/Hediffs_PrivateParts_Breasts.xml
rename to 1.2/Patches/Hediffs_PrivateParts_Breasts.xml
diff --git a/Patches/Item_Resource_Stuffs.xml b/1.2/Patches/Item_Resource_Stuffs.xml
similarity index 100%
rename from Patches/Item_Resource_Stuffs.xml
rename to 1.2/Patches/Item_Resource_Stuffs.xml
diff --git a/Patches/MilkPatch.xml b/1.2/Patches/MilkPatch.xml
similarity index 100%
rename from Patches/MilkPatch.xml
rename to 1.2/Patches/MilkPatch.xml
diff --git a/Patches/PawnModExtensions_Animals.xml b/1.2/Patches/PawnModExtensions_Animals.xml
similarity index 100%
rename from Patches/PawnModExtensions_Animals.xml
rename to 1.2/Patches/PawnModExtensions_Animals.xml
diff --git a/Patches/PawnModExtentions.xml b/1.2/Patches/PawnModExtentions.xml
similarity index 100%
rename from Patches/PawnModExtentions.xml
rename to 1.2/Patches/PawnModExtentions.xml
diff --git a/RJW Menstruation Race Support/About/About.xml b/1.2/RJW Menstruation Race Support/About/About.xml
similarity index 100%
rename from RJW Menstruation Race Support/About/About.xml
rename to 1.2/RJW Menstruation Race Support/About/About.xml
diff --git a/RJW Menstruation Race Support/About/Manifest.xml b/1.2/RJW Menstruation Race Support/About/Manifest.xml
similarity index 100%
rename from RJW Menstruation Race Support/About/Manifest.xml
rename to 1.2/RJW Menstruation Race Support/About/Manifest.xml
diff --git a/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Animal_RaceSupport.xml b/1.2/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Animal_RaceSupport.xml
similarity index 100%
rename from RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Animal_RaceSupport.xml
rename to 1.2/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Animal_RaceSupport.xml
diff --git a/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Breasts_RaceSupport.xml b/1.2/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Breasts_RaceSupport.xml
similarity index 100%
rename from RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Breasts_RaceSupport.xml
rename to 1.2/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Breasts_RaceSupport.xml
diff --git a/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Humanlike_RaceSupport.xml b/1.2/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Humanlike_RaceSupport.xml
similarity index 100%
rename from RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Humanlike_RaceSupport.xml
rename to 1.2/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Humanlike_RaceSupport.xml
diff --git a/Textures/Breasts/Breast_Breast00.png b/1.2/Textures/Breasts/Breast_Breast00.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast00.png
rename to 1.2/Textures/Breasts/Breast_Breast00.png
diff --git a/Textures/Breasts/Breast_Breast00_Areola00.png b/1.2/Textures/Breasts/Breast_Breast00_Areola00.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast00_Areola00.png
rename to 1.2/Textures/Breasts/Breast_Breast00_Areola00.png
diff --git a/Textures/Breasts/Breast_Breast00_Areola01.png b/1.2/Textures/Breasts/Breast_Breast00_Areola01.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast00_Areola01.png
rename to 1.2/Textures/Breasts/Breast_Breast00_Areola01.png
diff --git a/Textures/Breasts/Breast_Breast00_Areola02.png b/1.2/Textures/Breasts/Breast_Breast00_Areola02.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast00_Areola02.png
rename to 1.2/Textures/Breasts/Breast_Breast00_Areola02.png
diff --git a/Textures/Breasts/Breast_Breast00_Areola03.png b/1.2/Textures/Breasts/Breast_Breast00_Areola03.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast00_Areola03.png
rename to 1.2/Textures/Breasts/Breast_Breast00_Areola03.png
diff --git a/Textures/Breasts/Breast_Breast00_Areola04.png b/1.2/Textures/Breasts/Breast_Breast00_Areola04.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast00_Areola04.png
rename to 1.2/Textures/Breasts/Breast_Breast00_Areola04.png
diff --git a/Textures/Breasts/Breast_Breast00_Nipple00.png b/1.2/Textures/Breasts/Breast_Breast00_Nipple00.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast00_Nipple00.png
rename to 1.2/Textures/Breasts/Breast_Breast00_Nipple00.png
diff --git a/Textures/Breasts/Breast_Breast00_Nipple01.png b/1.2/Textures/Breasts/Breast_Breast00_Nipple01.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast00_Nipple01.png
rename to 1.2/Textures/Breasts/Breast_Breast00_Nipple01.png
diff --git a/Textures/Breasts/Breast_Breast00_Nipple02.png b/1.2/Textures/Breasts/Breast_Breast00_Nipple02.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast00_Nipple02.png
rename to 1.2/Textures/Breasts/Breast_Breast00_Nipple02.png
diff --git a/Textures/Breasts/Breast_Breast00_Nipple03.png b/1.2/Textures/Breasts/Breast_Breast00_Nipple03.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast00_Nipple03.png
rename to 1.2/Textures/Breasts/Breast_Breast00_Nipple03.png
diff --git a/Textures/Breasts/Breast_Breast01.png b/1.2/Textures/Breasts/Breast_Breast01.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast01.png
rename to 1.2/Textures/Breasts/Breast_Breast01.png
diff --git a/Textures/Breasts/Breast_Breast01_Areola00.png b/1.2/Textures/Breasts/Breast_Breast01_Areola00.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast01_Areola00.png
rename to 1.2/Textures/Breasts/Breast_Breast01_Areola00.png
diff --git a/Textures/Breasts/Breast_Breast01_Areola01.png b/1.2/Textures/Breasts/Breast_Breast01_Areola01.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast01_Areola01.png
rename to 1.2/Textures/Breasts/Breast_Breast01_Areola01.png
diff --git a/Textures/Breasts/Breast_Breast01_Areola02.png b/1.2/Textures/Breasts/Breast_Breast01_Areola02.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast01_Areola02.png
rename to 1.2/Textures/Breasts/Breast_Breast01_Areola02.png
diff --git a/Textures/Breasts/Breast_Breast01_Areola03.png b/1.2/Textures/Breasts/Breast_Breast01_Areola03.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast01_Areola03.png
rename to 1.2/Textures/Breasts/Breast_Breast01_Areola03.png
diff --git a/Textures/Breasts/Breast_Breast01_Areola04.png b/1.2/Textures/Breasts/Breast_Breast01_Areola04.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast01_Areola04.png
rename to 1.2/Textures/Breasts/Breast_Breast01_Areola04.png
diff --git a/Textures/Breasts/Breast_Breast01_Nipple00.png b/1.2/Textures/Breasts/Breast_Breast01_Nipple00.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast01_Nipple00.png
rename to 1.2/Textures/Breasts/Breast_Breast01_Nipple00.png
diff --git a/Textures/Breasts/Breast_Breast01_Nipple01.png b/1.2/Textures/Breasts/Breast_Breast01_Nipple01.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast01_Nipple01.png
rename to 1.2/Textures/Breasts/Breast_Breast01_Nipple01.png
diff --git a/Textures/Breasts/Breast_Breast01_Nipple02.png b/1.2/Textures/Breasts/Breast_Breast01_Nipple02.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast01_Nipple02.png
rename to 1.2/Textures/Breasts/Breast_Breast01_Nipple02.png
diff --git a/Textures/Breasts/Breast_Breast01_Nipple03.png b/1.2/Textures/Breasts/Breast_Breast01_Nipple03.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast01_Nipple03.png
rename to 1.2/Textures/Breasts/Breast_Breast01_Nipple03.png
diff --git a/Textures/Breasts/Breast_Breast02.png b/1.2/Textures/Breasts/Breast_Breast02.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast02.png
rename to 1.2/Textures/Breasts/Breast_Breast02.png
diff --git a/Textures/Breasts/Breast_Breast02_Areola00.png b/1.2/Textures/Breasts/Breast_Breast02_Areola00.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast02_Areola00.png
rename to 1.2/Textures/Breasts/Breast_Breast02_Areola00.png
diff --git a/Textures/Breasts/Breast_Breast02_Areola01.png b/1.2/Textures/Breasts/Breast_Breast02_Areola01.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast02_Areola01.png
rename to 1.2/Textures/Breasts/Breast_Breast02_Areola01.png
diff --git a/Textures/Breasts/Breast_Breast02_Areola02.png b/1.2/Textures/Breasts/Breast_Breast02_Areola02.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast02_Areola02.png
rename to 1.2/Textures/Breasts/Breast_Breast02_Areola02.png
diff --git a/Textures/Breasts/Breast_Breast02_Areola03.png b/1.2/Textures/Breasts/Breast_Breast02_Areola03.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast02_Areola03.png
rename to 1.2/Textures/Breasts/Breast_Breast02_Areola03.png
diff --git a/Textures/Breasts/Breast_Breast02_Areola04.png b/1.2/Textures/Breasts/Breast_Breast02_Areola04.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast02_Areola04.png
rename to 1.2/Textures/Breasts/Breast_Breast02_Areola04.png
diff --git a/Textures/Breasts/Breast_Breast02_Nipple00.png b/1.2/Textures/Breasts/Breast_Breast02_Nipple00.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast02_Nipple00.png
rename to 1.2/Textures/Breasts/Breast_Breast02_Nipple00.png
diff --git a/Textures/Breasts/Breast_Breast02_Nipple01.png b/1.2/Textures/Breasts/Breast_Breast02_Nipple01.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast02_Nipple01.png
rename to 1.2/Textures/Breasts/Breast_Breast02_Nipple01.png
diff --git a/Textures/Breasts/Breast_Breast02_Nipple02.png b/1.2/Textures/Breasts/Breast_Breast02_Nipple02.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast02_Nipple02.png
rename to 1.2/Textures/Breasts/Breast_Breast02_Nipple02.png
diff --git a/Textures/Breasts/Breast_Breast02_Nipple03.png b/1.2/Textures/Breasts/Breast_Breast02_Nipple03.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast02_Nipple03.png
rename to 1.2/Textures/Breasts/Breast_Breast02_Nipple03.png
diff --git a/Textures/Breasts/Breast_Breast03.png b/1.2/Textures/Breasts/Breast_Breast03.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast03.png
rename to 1.2/Textures/Breasts/Breast_Breast03.png
diff --git a/Textures/Breasts/Breast_Breast03_Areola00.png b/1.2/Textures/Breasts/Breast_Breast03_Areola00.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast03_Areola00.png
rename to 1.2/Textures/Breasts/Breast_Breast03_Areola00.png
diff --git a/Textures/Breasts/Breast_Breast03_Areola01.png b/1.2/Textures/Breasts/Breast_Breast03_Areola01.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast03_Areola01.png
rename to 1.2/Textures/Breasts/Breast_Breast03_Areola01.png
diff --git a/Textures/Breasts/Breast_Breast03_Areola02.png b/1.2/Textures/Breasts/Breast_Breast03_Areola02.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast03_Areola02.png
rename to 1.2/Textures/Breasts/Breast_Breast03_Areola02.png
diff --git a/Textures/Breasts/Breast_Breast03_Areola03.png b/1.2/Textures/Breasts/Breast_Breast03_Areola03.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast03_Areola03.png
rename to 1.2/Textures/Breasts/Breast_Breast03_Areola03.png
diff --git a/Textures/Breasts/Breast_Breast03_Areola04.png b/1.2/Textures/Breasts/Breast_Breast03_Areola04.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast03_Areola04.png
rename to 1.2/Textures/Breasts/Breast_Breast03_Areola04.png
diff --git a/Textures/Breasts/Breast_Breast03_Nipple00.png b/1.2/Textures/Breasts/Breast_Breast03_Nipple00.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast03_Nipple00.png
rename to 1.2/Textures/Breasts/Breast_Breast03_Nipple00.png
diff --git a/Textures/Breasts/Breast_Breast03_Nipple01.png b/1.2/Textures/Breasts/Breast_Breast03_Nipple01.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast03_Nipple01.png
rename to 1.2/Textures/Breasts/Breast_Breast03_Nipple01.png
diff --git a/Textures/Breasts/Breast_Breast03_Nipple02.png b/1.2/Textures/Breasts/Breast_Breast03_Nipple02.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast03_Nipple02.png
rename to 1.2/Textures/Breasts/Breast_Breast03_Nipple02.png
diff --git a/Textures/Breasts/Breast_Breast03_Nipple03.png b/1.2/Textures/Breasts/Breast_Breast03_Nipple03.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast03_Nipple03.png
rename to 1.2/Textures/Breasts/Breast_Breast03_Nipple03.png
diff --git a/Textures/Breasts/Breast_Breast04.png b/1.2/Textures/Breasts/Breast_Breast04.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast04.png
rename to 1.2/Textures/Breasts/Breast_Breast04.png
diff --git a/Textures/Breasts/Breast_Breast04_Areola00.png b/1.2/Textures/Breasts/Breast_Breast04_Areola00.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast04_Areola00.png
rename to 1.2/Textures/Breasts/Breast_Breast04_Areola00.png
diff --git a/Textures/Breasts/Breast_Breast04_Areola01.png b/1.2/Textures/Breasts/Breast_Breast04_Areola01.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast04_Areola01.png
rename to 1.2/Textures/Breasts/Breast_Breast04_Areola01.png
diff --git a/Textures/Breasts/Breast_Breast04_Areola02.png b/1.2/Textures/Breasts/Breast_Breast04_Areola02.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast04_Areola02.png
rename to 1.2/Textures/Breasts/Breast_Breast04_Areola02.png
diff --git a/Textures/Breasts/Breast_Breast04_Areola03.png b/1.2/Textures/Breasts/Breast_Breast04_Areola03.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast04_Areola03.png
rename to 1.2/Textures/Breasts/Breast_Breast04_Areola03.png
diff --git a/Textures/Breasts/Breast_Breast04_Areola04.png b/1.2/Textures/Breasts/Breast_Breast04_Areola04.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast04_Areola04.png
rename to 1.2/Textures/Breasts/Breast_Breast04_Areola04.png
diff --git a/Textures/Breasts/Breast_Breast04_Nipple00.png b/1.2/Textures/Breasts/Breast_Breast04_Nipple00.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast04_Nipple00.png
rename to 1.2/Textures/Breasts/Breast_Breast04_Nipple00.png
diff --git a/Textures/Breasts/Breast_Breast04_Nipple01.png b/1.2/Textures/Breasts/Breast_Breast04_Nipple01.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast04_Nipple01.png
rename to 1.2/Textures/Breasts/Breast_Breast04_Nipple01.png
diff --git a/Textures/Breasts/Breast_Breast04_Nipple02.png b/1.2/Textures/Breasts/Breast_Breast04_Nipple02.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast04_Nipple02.png
rename to 1.2/Textures/Breasts/Breast_Breast04_Nipple02.png
diff --git a/Textures/Breasts/Breast_Breast04_Nipple03.png b/1.2/Textures/Breasts/Breast_Breast04_Nipple03.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast04_Nipple03.png
rename to 1.2/Textures/Breasts/Breast_Breast04_Nipple03.png
diff --git a/Textures/Breasts/Breast_Breast05.png b/1.2/Textures/Breasts/Breast_Breast05.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast05.png
rename to 1.2/Textures/Breasts/Breast_Breast05.png
diff --git a/Textures/Breasts/Breast_Breast05_Areola00.png b/1.2/Textures/Breasts/Breast_Breast05_Areola00.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast05_Areola00.png
rename to 1.2/Textures/Breasts/Breast_Breast05_Areola00.png
diff --git a/Textures/Breasts/Breast_Breast05_Areola01.png b/1.2/Textures/Breasts/Breast_Breast05_Areola01.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast05_Areola01.png
rename to 1.2/Textures/Breasts/Breast_Breast05_Areola01.png
diff --git a/Textures/Breasts/Breast_Breast05_Areola02.png b/1.2/Textures/Breasts/Breast_Breast05_Areola02.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast05_Areola02.png
rename to 1.2/Textures/Breasts/Breast_Breast05_Areola02.png
diff --git a/Textures/Breasts/Breast_Breast05_Areola03.png b/1.2/Textures/Breasts/Breast_Breast05_Areola03.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast05_Areola03.png
rename to 1.2/Textures/Breasts/Breast_Breast05_Areola03.png
diff --git a/Textures/Breasts/Breast_Breast05_Areola04.png b/1.2/Textures/Breasts/Breast_Breast05_Areola04.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast05_Areola04.png
rename to 1.2/Textures/Breasts/Breast_Breast05_Areola04.png
diff --git a/Textures/Breasts/Breast_Breast05_Nipple00.png b/1.2/Textures/Breasts/Breast_Breast05_Nipple00.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast05_Nipple00.png
rename to 1.2/Textures/Breasts/Breast_Breast05_Nipple00.png
diff --git a/Textures/Breasts/Breast_Breast05_Nipple01.png b/1.2/Textures/Breasts/Breast_Breast05_Nipple01.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast05_Nipple01.png
rename to 1.2/Textures/Breasts/Breast_Breast05_Nipple01.png
diff --git a/Textures/Breasts/Breast_Breast05_Nipple02.png b/1.2/Textures/Breasts/Breast_Breast05_Nipple02.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast05_Nipple02.png
rename to 1.2/Textures/Breasts/Breast_Breast05_Nipple02.png
diff --git a/Textures/Breasts/Breast_Breast05_Nipple03.png b/1.2/Textures/Breasts/Breast_Breast05_Nipple03.png
similarity index 100%
rename from Textures/Breasts/Breast_Breast05_Nipple03.png
rename to 1.2/Textures/Breasts/Breast_Breast05_Nipple03.png
diff --git a/Textures/Breasts/average_nip_2.png b/1.2/Textures/Breasts/average_nip_2.png
similarity index 100%
rename from Textures/Breasts/average_nip_2.png
rename to 1.2/Textures/Breasts/average_nip_2.png
diff --git a/Textures/Breasts/average_nip_preg.png b/1.2/Textures/Breasts/average_nip_preg.png
similarity index 100%
rename from Textures/Breasts/average_nip_preg.png
rename to 1.2/Textures/Breasts/average_nip_preg.png
diff --git a/Textures/Breasts/enormous_nip_gray.png b/1.2/Textures/Breasts/enormous_nip_gray.png
similarity index 100%
rename from Textures/Breasts/enormous_nip_gray.png
rename to 1.2/Textures/Breasts/enormous_nip_gray.png
diff --git a/Textures/Breasts/enormous_nip_pink.png b/1.2/Textures/Breasts/enormous_nip_pink.png
similarity index 100%
rename from Textures/Breasts/enormous_nip_pink.png
rename to 1.2/Textures/Breasts/enormous_nip_pink.png
diff --git a/Textures/Breasts/enormous_nip_preg.png b/1.2/Textures/Breasts/enormous_nip_preg.png
similarity index 100%
rename from Textures/Breasts/enormous_nip_preg.png
rename to 1.2/Textures/Breasts/enormous_nip_preg.png
diff --git a/Textures/Breasts/enoromous_nip.png b/1.2/Textures/Breasts/enoromous_nip.png
similarity index 100%
rename from Textures/Breasts/enoromous_nip.png
rename to 1.2/Textures/Breasts/enoromous_nip.png
diff --git a/Textures/Breasts/huge_nip_preg.png b/1.2/Textures/Breasts/huge_nip_preg.png
similarity index 100%
rename from Textures/Breasts/huge_nip_preg.png
rename to 1.2/Textures/Breasts/huge_nip_preg.png
diff --git a/Textures/Breasts/large_nip_2.png b/1.2/Textures/Breasts/large_nip_2.png
similarity index 100%
rename from Textures/Breasts/large_nip_2.png
rename to 1.2/Textures/Breasts/large_nip_2.png
diff --git a/Textures/Breasts/large_nip_preg.png b/1.2/Textures/Breasts/large_nip_preg.png
similarity index 100%
rename from Textures/Breasts/large_nip_preg.png
rename to 1.2/Textures/Breasts/large_nip_preg.png
diff --git a/Textures/Breasts/small_nip_2.png b/1.2/Textures/Breasts/small_nip_2.png
similarity index 100%
rename from Textures/Breasts/small_nip_2.png
rename to 1.2/Textures/Breasts/small_nip_2.png
diff --git a/Textures/Breasts/small_nip_preg.png b/1.2/Textures/Breasts/small_nip_preg.png
similarity index 100%
rename from Textures/Breasts/small_nip_preg.png
rename to 1.2/Textures/Breasts/small_nip_preg.png
diff --git a/Textures/Breasts/tiny_nip.png b/1.2/Textures/Breasts/tiny_nip.png
similarity index 100%
rename from Textures/Breasts/tiny_nip.png
rename to 1.2/Textures/Breasts/tiny_nip.png
diff --git a/Textures/Breasts/tiny_nip_2.png b/1.2/Textures/Breasts/tiny_nip_2.png
similarity index 100%
rename from Textures/Breasts/tiny_nip_2.png
rename to 1.2/Textures/Breasts/tiny_nip_2.png
diff --git a/Textures/Breasts/tiny_nip_preg.png b/1.2/Textures/Breasts/tiny_nip_preg.png
similarity index 100%
rename from Textures/Breasts/tiny_nip_preg.png
rename to 1.2/Textures/Breasts/tiny_nip_preg.png
diff --git a/Textures/Eggs/Egg.png b/1.2/Textures/Eggs/Egg.png
similarity index 100%
rename from Textures/Eggs/Egg.png
rename to 1.2/Textures/Eggs/Egg.png
diff --git a/Textures/Eggs/Egg_Fertilized00.png b/1.2/Textures/Eggs/Egg_Fertilized00.png
similarity index 100%
rename from Textures/Eggs/Egg_Fertilized00.png
rename to 1.2/Textures/Eggs/Egg_Fertilized00.png
diff --git a/Textures/Eggs/Egg_Fertilized01.png b/1.2/Textures/Eggs/Egg_Fertilized01.png
similarity index 100%
rename from Textures/Eggs/Egg_Fertilized01.png
rename to 1.2/Textures/Eggs/Egg_Fertilized01.png
diff --git a/Textures/Eggs/Egg_Fertilized02.png b/1.2/Textures/Eggs/Egg_Fertilized02.png
similarity index 100%
rename from Textures/Eggs/Egg_Fertilized02.png
rename to 1.2/Textures/Eggs/Egg_Fertilized02.png
diff --git a/Textures/Eggs/Egg_Fertilizing00.png b/1.2/Textures/Eggs/Egg_Fertilizing00.png
similarity index 100%
rename from Textures/Eggs/Egg_Fertilizing00.png
rename to 1.2/Textures/Eggs/Egg_Fertilizing00.png
diff --git a/Textures/Eggs/Egg_Fertilizing01.png b/1.2/Textures/Eggs/Egg_Fertilizing01.png
similarity index 100%
rename from Textures/Eggs/Egg_Fertilizing01.png
rename to 1.2/Textures/Eggs/Egg_Fertilizing01.png
diff --git a/Textures/Eggs/Egg_Fertilizing02.png b/1.2/Textures/Eggs/Egg_Fertilizing02.png
similarity index 100%
rename from Textures/Eggs/Egg_Fertilizing02.png
rename to 1.2/Textures/Eggs/Egg_Fertilizing02.png
diff --git a/Textures/Eggs/Egg_Implanted00.png b/1.2/Textures/Eggs/Egg_Implanted00.png
similarity index 100%
rename from Textures/Eggs/Egg_Implanted00.png
rename to 1.2/Textures/Eggs/Egg_Implanted00.png
diff --git a/Textures/Eggs/Eggs.zip b/1.2/Textures/Eggs/Eggs.zip
similarity index 100%
rename from Textures/Eggs/Eggs.zip
rename to 1.2/Textures/Eggs/Eggs.zip
diff --git a/Textures/Fetus/Birds/Fetus_Bird00.png b/1.2/Textures/Fetus/Birds/Fetus_Bird00.png
similarity index 100%
rename from Textures/Fetus/Birds/Fetus_Bird00.png
rename to 1.2/Textures/Fetus/Birds/Fetus_Bird00.png
diff --git a/Textures/Fetus/Birds/Fetus_Bird01.png b/1.2/Textures/Fetus/Birds/Fetus_Bird01.png
similarity index 100%
rename from Textures/Fetus/Birds/Fetus_Bird01.png
rename to 1.2/Textures/Fetus/Birds/Fetus_Bird01.png
diff --git a/Textures/Fetus/Birds/Fetus_Bird02.png b/1.2/Textures/Fetus/Birds/Fetus_Bird02.png
similarity index 100%
rename from Textures/Fetus/Birds/Fetus_Bird02.png
rename to 1.2/Textures/Fetus/Birds/Fetus_Bird02.png
diff --git a/Textures/Fetus/Birds/Fetus_Bird03.png b/1.2/Textures/Fetus/Birds/Fetus_Bird03.png
similarity index 100%
rename from Textures/Fetus/Birds/Fetus_Bird03.png
rename to 1.2/Textures/Fetus/Birds/Fetus_Bird03.png
diff --git a/Textures/Fetus/Birds/Fetus_Bird04.png b/1.2/Textures/Fetus/Birds/Fetus_Bird04.png
similarity index 100%
rename from Textures/Fetus/Birds/Fetus_Bird04.png
rename to 1.2/Textures/Fetus/Birds/Fetus_Bird04.png
diff --git a/Textures/Fetus/Birds/Fetus_Bird05.png b/1.2/Textures/Fetus/Birds/Fetus_Bird05.png
similarity index 100%
rename from Textures/Fetus/Birds/Fetus_Bird05.png
rename to 1.2/Textures/Fetus/Birds/Fetus_Bird05.png
diff --git a/Textures/Fetus/Canines/Fetus_Dog00.png b/1.2/Textures/Fetus/Canines/Fetus_Dog00.png
similarity index 100%
rename from Textures/Fetus/Canines/Fetus_Dog00.png
rename to 1.2/Textures/Fetus/Canines/Fetus_Dog00.png
diff --git a/Textures/Fetus/Canines/Fetus_Dog01.png b/1.2/Textures/Fetus/Canines/Fetus_Dog01.png
similarity index 100%
rename from Textures/Fetus/Canines/Fetus_Dog01.png
rename to 1.2/Textures/Fetus/Canines/Fetus_Dog01.png
diff --git a/Textures/Fetus/Canines/Fetus_Dog02.png b/1.2/Textures/Fetus/Canines/Fetus_Dog02.png
similarity index 100%
rename from Textures/Fetus/Canines/Fetus_Dog02.png
rename to 1.2/Textures/Fetus/Canines/Fetus_Dog02.png
diff --git a/Textures/Fetus/Canines/Fetus_Dog03.png b/1.2/Textures/Fetus/Canines/Fetus_Dog03.png
similarity index 100%
rename from Textures/Fetus/Canines/Fetus_Dog03.png
rename to 1.2/Textures/Fetus/Canines/Fetus_Dog03.png
diff --git a/Textures/Fetus/Canines/Fetus_Dog04.png b/1.2/Textures/Fetus/Canines/Fetus_Dog04.png
similarity index 100%
rename from Textures/Fetus/Canines/Fetus_Dog04.png
rename to 1.2/Textures/Fetus/Canines/Fetus_Dog04.png
diff --git a/Textures/Fetus/Canines/Fetus_Dog05.png b/1.2/Textures/Fetus/Canines/Fetus_Dog05.png
similarity index 100%
rename from Textures/Fetus/Canines/Fetus_Dog05.png
rename to 1.2/Textures/Fetus/Canines/Fetus_Dog05.png
diff --git a/Textures/Fetus/Fetus_Default00.png b/1.2/Textures/Fetus/Fetus_Default00.png
similarity index 100%
rename from Textures/Fetus/Fetus_Default00.png
rename to 1.2/Textures/Fetus/Fetus_Default00.png
diff --git a/Textures/Fetus/Fetus_Default00_Multiplet_2.png b/1.2/Textures/Fetus/Fetus_Default00_Multiplet_2.png
similarity index 100%
rename from Textures/Fetus/Fetus_Default00_Multiplet_2.png
rename to 1.2/Textures/Fetus/Fetus_Default00_Multiplet_2.png
diff --git a/Textures/Fetus/Fetus_Default01.png b/1.2/Textures/Fetus/Fetus_Default01.png
similarity index 100%
rename from Textures/Fetus/Fetus_Default01.png
rename to 1.2/Textures/Fetus/Fetus_Default01.png
diff --git a/Textures/Fetus/Fetus_Default01_Multiplet_2.png b/1.2/Textures/Fetus/Fetus_Default01_Multiplet_2.png
similarity index 100%
rename from Textures/Fetus/Fetus_Default01_Multiplet_2.png
rename to 1.2/Textures/Fetus/Fetus_Default01_Multiplet_2.png
diff --git a/Textures/Fetus/Fetus_Default02.png b/1.2/Textures/Fetus/Fetus_Default02.png
similarity index 100%
rename from Textures/Fetus/Fetus_Default02.png
rename to 1.2/Textures/Fetus/Fetus_Default02.png
diff --git a/Textures/Fetus/Fetus_Default02_Multiplet_2.png b/1.2/Textures/Fetus/Fetus_Default02_Multiplet_2.png
similarity index 100%
rename from Textures/Fetus/Fetus_Default02_Multiplet_2.png
rename to 1.2/Textures/Fetus/Fetus_Default02_Multiplet_2.png
diff --git a/Textures/Fetus/Fetus_Default03.png b/1.2/Textures/Fetus/Fetus_Default03.png
similarity index 100%
rename from Textures/Fetus/Fetus_Default03.png
rename to 1.2/Textures/Fetus/Fetus_Default03.png
diff --git a/Textures/Fetus/Fetus_Default03_Multiplet_2.png b/1.2/Textures/Fetus/Fetus_Default03_Multiplet_2.png
similarity index 100%
rename from Textures/Fetus/Fetus_Default03_Multiplet_2.png
rename to 1.2/Textures/Fetus/Fetus_Default03_Multiplet_2.png
diff --git a/Textures/Fetus/Fetus_Default04.png b/1.2/Textures/Fetus/Fetus_Default04.png
similarity index 100%
rename from Textures/Fetus/Fetus_Default04.png
rename to 1.2/Textures/Fetus/Fetus_Default04.png
diff --git a/Textures/Fetus/Fetus_Default04_Multiplet_2.png b/1.2/Textures/Fetus/Fetus_Default04_Multiplet_2.png
similarity index 100%
rename from Textures/Fetus/Fetus_Default04_Multiplet_2.png
rename to 1.2/Textures/Fetus/Fetus_Default04_Multiplet_2.png
diff --git a/Textures/Fetus/Fetus_Default05.png b/1.2/Textures/Fetus/Fetus_Default05.png
similarity index 100%
rename from Textures/Fetus/Fetus_Default05.png
rename to 1.2/Textures/Fetus/Fetus_Default05.png
diff --git a/Textures/Fetus/Fetus_Default05_Multiplet_2.png b/1.2/Textures/Fetus/Fetus_Default05_Multiplet_2.png
similarity index 100%
rename from Textures/Fetus/Fetus_Default05_Multiplet_2.png
rename to 1.2/Textures/Fetus/Fetus_Default05_Multiplet_2.png
diff --git a/Textures/Fetus/Fetus_Early00.png b/1.2/Textures/Fetus/Fetus_Early00.png
similarity index 100%
rename from Textures/Fetus/Fetus_Early00.png
rename to 1.2/Textures/Fetus/Fetus_Early00.png
diff --git a/Textures/Fetus/Fetus_Early00_Multiplet_2.png b/1.2/Textures/Fetus/Fetus_Early00_Multiplet_2.png
similarity index 100%
rename from Textures/Fetus/Fetus_Early00_Multiplet_2.png
rename to 1.2/Textures/Fetus/Fetus_Early00_Multiplet_2.png
diff --git a/Textures/Fetus/Fetus_Old.zip b/1.2/Textures/Fetus/Fetus_Old.zip
similarity index 100%
rename from Textures/Fetus/Fetus_Old.zip
rename to 1.2/Textures/Fetus/Fetus_Old.zip
diff --git a/Textures/Fetus/Greenskins/Fetus_Orc00.png b/1.2/Textures/Fetus/Greenskins/Fetus_Orc00.png
similarity index 100%
rename from Textures/Fetus/Greenskins/Fetus_Orc00.png
rename to 1.2/Textures/Fetus/Greenskins/Fetus_Orc00.png
diff --git a/Textures/Fetus/Greenskins/Fetus_Orc01.png b/1.2/Textures/Fetus/Greenskins/Fetus_Orc01.png
similarity index 100%
rename from Textures/Fetus/Greenskins/Fetus_Orc01.png
rename to 1.2/Textures/Fetus/Greenskins/Fetus_Orc01.png
diff --git a/Textures/Fetus/Greenskins/Fetus_Orc02.png b/1.2/Textures/Fetus/Greenskins/Fetus_Orc02.png
similarity index 100%
rename from Textures/Fetus/Greenskins/Fetus_Orc02.png
rename to 1.2/Textures/Fetus/Greenskins/Fetus_Orc02.png
diff --git a/Textures/Fetus/Greenskins/Fetus_Orc03.png b/1.2/Textures/Fetus/Greenskins/Fetus_Orc03.png
similarity index 100%
rename from Textures/Fetus/Greenskins/Fetus_Orc03.png
rename to 1.2/Textures/Fetus/Greenskins/Fetus_Orc03.png
diff --git a/Textures/Fetus/Greenskins/Fetus_Orc04.png b/1.2/Textures/Fetus/Greenskins/Fetus_Orc04.png
similarity index 100%
rename from Textures/Fetus/Greenskins/Fetus_Orc04.png
rename to 1.2/Textures/Fetus/Greenskins/Fetus_Orc04.png
diff --git a/Textures/Fetus/Greenskins/Fetus_Orc05.png b/1.2/Textures/Fetus/Greenskins/Fetus_Orc05.png
similarity index 100%
rename from Textures/Fetus/Greenskins/Fetus_Orc05.png
rename to 1.2/Textures/Fetus/Greenskins/Fetus_Orc05.png
diff --git a/Textures/Fetus/Greenskins/unused-orc_0.png b/1.2/Textures/Fetus/Greenskins/unused-orc_0.png
similarity index 100%
rename from Textures/Fetus/Greenskins/unused-orc_0.png
rename to 1.2/Textures/Fetus/Greenskins/unused-orc_0.png
diff --git a/Textures/Fetus/Insects/Fetus_Insect00.png b/1.2/Textures/Fetus/Insects/Fetus_Insect00.png
similarity index 100%
rename from Textures/Fetus/Insects/Fetus_Insect00.png
rename to 1.2/Textures/Fetus/Insects/Fetus_Insect00.png
diff --git a/Textures/Fetus/Insects/Fetus_Insect01.png b/1.2/Textures/Fetus/Insects/Fetus_Insect01.png
similarity index 100%
rename from Textures/Fetus/Insects/Fetus_Insect01.png
rename to 1.2/Textures/Fetus/Insects/Fetus_Insect01.png
diff --git a/Textures/Fetus/Insects/Fetus_Insect02.png b/1.2/Textures/Fetus/Insects/Fetus_Insect02.png
similarity index 100%
rename from Textures/Fetus/Insects/Fetus_Insect02.png
rename to 1.2/Textures/Fetus/Insects/Fetus_Insect02.png
diff --git a/Textures/Fetus/Insects/Fetus_Insect03.png b/1.2/Textures/Fetus/Insects/Fetus_Insect03.png
similarity index 100%
rename from Textures/Fetus/Insects/Fetus_Insect03.png
rename to 1.2/Textures/Fetus/Insects/Fetus_Insect03.png
diff --git a/Textures/Fetus/Insects/Fetus_Insect04.png b/1.2/Textures/Fetus/Insects/Fetus_Insect04.png
similarity index 100%
rename from Textures/Fetus/Insects/Fetus_Insect04.png
rename to 1.2/Textures/Fetus/Insects/Fetus_Insect04.png
diff --git a/Textures/Fetus/Insects/Fetus_Insect05.png b/1.2/Textures/Fetus/Insects/Fetus_Insect05.png
similarity index 100%
rename from Textures/Fetus/Insects/Fetus_Insect05.png
rename to 1.2/Textures/Fetus/Insects/Fetus_Insect05.png
diff --git a/Textures/Fetus/Insects/Insect_Early00.png b/1.2/Textures/Fetus/Insects/Insect_Early00.png
similarity index 100%
rename from Textures/Fetus/Insects/Insect_Early00.png
rename to 1.2/Textures/Fetus/Insects/Insect_Early00.png
diff --git a/Textures/Fetus/Livestocks/Fetus_Pig00.png b/1.2/Textures/Fetus/Livestocks/Fetus_Pig00.png
similarity index 100%
rename from Textures/Fetus/Livestocks/Fetus_Pig00.png
rename to 1.2/Textures/Fetus/Livestocks/Fetus_Pig00.png
diff --git a/Textures/Fetus/Livestocks/Fetus_Pig01.png b/1.2/Textures/Fetus/Livestocks/Fetus_Pig01.png
similarity index 100%
rename from Textures/Fetus/Livestocks/Fetus_Pig01.png
rename to 1.2/Textures/Fetus/Livestocks/Fetus_Pig01.png
diff --git a/Textures/Fetus/Livestocks/Fetus_Pig02.png b/1.2/Textures/Fetus/Livestocks/Fetus_Pig02.png
similarity index 100%
rename from Textures/Fetus/Livestocks/Fetus_Pig02.png
rename to 1.2/Textures/Fetus/Livestocks/Fetus_Pig02.png
diff --git a/Textures/Fetus/Livestocks/Fetus_Pig03.png b/1.2/Textures/Fetus/Livestocks/Fetus_Pig03.png
similarity index 100%
rename from Textures/Fetus/Livestocks/Fetus_Pig03.png
rename to 1.2/Textures/Fetus/Livestocks/Fetus_Pig03.png
diff --git a/Textures/Fetus/Livestocks/Fetus_Pig04.png b/1.2/Textures/Fetus/Livestocks/Fetus_Pig04.png
similarity index 100%
rename from Textures/Fetus/Livestocks/Fetus_Pig04.png
rename to 1.2/Textures/Fetus/Livestocks/Fetus_Pig04.png
diff --git a/Textures/Fetus/Livestocks/Fetus_Pig05.png b/1.2/Textures/Fetus/Livestocks/Fetus_Pig05.png
similarity index 100%
rename from Textures/Fetus/Livestocks/Fetus_Pig05.png
rename to 1.2/Textures/Fetus/Livestocks/Fetus_Pig05.png
diff --git a/Textures/Fetus/Slime_Abomi02.png b/1.2/Textures/Fetus/Slime_Abomi02.png
similarity index 100%
rename from Textures/Fetus/Slime_Abomi02.png
rename to 1.2/Textures/Fetus/Slime_Abomi02.png
diff --git a/Textures/Genitals/Anal00.png b/1.2/Textures/Genitals/Anal00.png
similarity index 100%
rename from Textures/Genitals/Anal00.png
rename to 1.2/Textures/Genitals/Anal00.png
diff --git a/Textures/Genitals/Anal01.png b/1.2/Textures/Genitals/Anal01.png
similarity index 100%
rename from Textures/Genitals/Anal01.png
rename to 1.2/Textures/Genitals/Anal01.png
diff --git a/Textures/Genitals/Anal02.png b/1.2/Textures/Genitals/Anal02.png
similarity index 100%
rename from Textures/Genitals/Anal02.png
rename to 1.2/Textures/Genitals/Anal02.png
diff --git a/Textures/Genitals/Anal03.png b/1.2/Textures/Genitals/Anal03.png
similarity index 100%
rename from Textures/Genitals/Anal03.png
rename to 1.2/Textures/Genitals/Anal03.png
diff --git a/Textures/Genitals/Anal04.png b/1.2/Textures/Genitals/Anal04.png
similarity index 100%
rename from Textures/Genitals/Anal04.png
rename to 1.2/Textures/Genitals/Anal04.png
diff --git a/Textures/Genitals/Anal05.png b/1.2/Textures/Genitals/Anal05.png
similarity index 100%
rename from Textures/Genitals/Anal05.png
rename to 1.2/Textures/Genitals/Anal05.png
diff --git a/Textures/Genitals/BionicAnal00.png b/1.2/Textures/Genitals/BionicAnal00.png
similarity index 100%
rename from Textures/Genitals/BionicAnal00.png
rename to 1.2/Textures/Genitals/BionicAnal00.png
diff --git a/Textures/Genitals/BionicAnal01.png b/1.2/Textures/Genitals/BionicAnal01.png
similarity index 100%
rename from Textures/Genitals/BionicAnal01.png
rename to 1.2/Textures/Genitals/BionicAnal01.png
diff --git a/Textures/Genitals/BionicAnal02.png b/1.2/Textures/Genitals/BionicAnal02.png
similarity index 100%
rename from Textures/Genitals/BionicAnal02.png
rename to 1.2/Textures/Genitals/BionicAnal02.png
diff --git a/Textures/Genitals/BionicAnal03.png b/1.2/Textures/Genitals/BionicAnal03.png
similarity index 100%
rename from Textures/Genitals/BionicAnal03.png
rename to 1.2/Textures/Genitals/BionicAnal03.png
diff --git a/Textures/Genitals/BionicAnal04.png b/1.2/Textures/Genitals/BionicAnal04.png
similarity index 100%
rename from Textures/Genitals/BionicAnal04.png
rename to 1.2/Textures/Genitals/BionicAnal04.png
diff --git a/Textures/Genitals/BionicAnal05.png b/1.2/Textures/Genitals/BionicAnal05.png
similarity index 100%
rename from Textures/Genitals/BionicAnal05.png
rename to 1.2/Textures/Genitals/BionicAnal05.png
diff --git a/Textures/Genitals/BionicVagina00.png b/1.2/Textures/Genitals/BionicVagina00.png
similarity index 100%
rename from Textures/Genitals/BionicVagina00.png
rename to 1.2/Textures/Genitals/BionicVagina00.png
diff --git a/Textures/Genitals/BionicVagina01.png b/1.2/Textures/Genitals/BionicVagina01.png
similarity index 100%
rename from Textures/Genitals/BionicVagina01.png
rename to 1.2/Textures/Genitals/BionicVagina01.png
diff --git a/Textures/Genitals/BionicVagina02.png b/1.2/Textures/Genitals/BionicVagina02.png
similarity index 100%
rename from Textures/Genitals/BionicVagina02.png
rename to 1.2/Textures/Genitals/BionicVagina02.png
diff --git a/Textures/Genitals/BionicVagina03.png b/1.2/Textures/Genitals/BionicVagina03.png
similarity index 100%
rename from Textures/Genitals/BionicVagina03.png
rename to 1.2/Textures/Genitals/BionicVagina03.png
diff --git a/Textures/Genitals/BionicVagina04.png b/1.2/Textures/Genitals/BionicVagina04.png
similarity index 100%
rename from Textures/Genitals/BionicVagina04.png
rename to 1.2/Textures/Genitals/BionicVagina04.png
diff --git a/Textures/Genitals/BionicVagina05.png b/1.2/Textures/Genitals/BionicVagina05.png
similarity index 100%
rename from Textures/Genitals/BionicVagina05.png
rename to 1.2/Textures/Genitals/BionicVagina05.png
diff --git a/Textures/Genitals/BionicVagina06.png b/1.2/Textures/Genitals/BionicVagina06.png
similarity index 100%
rename from Textures/Genitals/BionicVagina06.png
rename to 1.2/Textures/Genitals/BionicVagina06.png
diff --git a/Textures/Genitals/BionicVagina07.png b/1.2/Textures/Genitals/BionicVagina07.png
similarity index 100%
rename from Textures/Genitals/BionicVagina07.png
rename to 1.2/Textures/Genitals/BionicVagina07.png
diff --git a/Textures/Genitals/BionicVagina08.png b/1.2/Textures/Genitals/BionicVagina08.png
similarity index 100%
rename from Textures/Genitals/BionicVagina08.png
rename to 1.2/Textures/Genitals/BionicVagina08.png
diff --git a/Textures/Genitals/BionicVagina09.png b/1.2/Textures/Genitals/BionicVagina09.png
similarity index 100%
rename from Textures/Genitals/BionicVagina09.png
rename to 1.2/Textures/Genitals/BionicVagina09.png
diff --git a/Textures/Genitals/BionicVagina10.png b/1.2/Textures/Genitals/BionicVagina10.png
similarity index 100%
rename from Textures/Genitals/BionicVagina10.png
rename to 1.2/Textures/Genitals/BionicVagina10.png
diff --git a/Textures/Genitals/BionicVagina11.png b/1.2/Textures/Genitals/BionicVagina11.png
similarity index 100%
rename from Textures/Genitals/BionicVagina11.png
rename to 1.2/Textures/Genitals/BionicVagina11.png
diff --git a/Textures/Genitals/Genitals_Old.zip b/1.2/Textures/Genitals/Genitals_Old.zip
similarity index 100%
rename from Textures/Genitals/Genitals_Old.zip
rename to 1.2/Textures/Genitals/Genitals_Old.zip
diff --git a/Textures/Genitals/Vagina00.png b/1.2/Textures/Genitals/Vagina00.png
similarity index 100%
rename from Textures/Genitals/Vagina00.png
rename to 1.2/Textures/Genitals/Vagina00.png
diff --git a/Textures/Genitals/Vagina01.png b/1.2/Textures/Genitals/Vagina01.png
similarity index 100%
rename from Textures/Genitals/Vagina01.png
rename to 1.2/Textures/Genitals/Vagina01.png
diff --git a/Textures/Genitals/Vagina02.png b/1.2/Textures/Genitals/Vagina02.png
similarity index 100%
rename from Textures/Genitals/Vagina02.png
rename to 1.2/Textures/Genitals/Vagina02.png
diff --git a/Textures/Genitals/Vagina03.png b/1.2/Textures/Genitals/Vagina03.png
similarity index 100%
rename from Textures/Genitals/Vagina03.png
rename to 1.2/Textures/Genitals/Vagina03.png
diff --git a/Textures/Genitals/Vagina04.png b/1.2/Textures/Genitals/Vagina04.png
similarity index 100%
rename from Textures/Genitals/Vagina04.png
rename to 1.2/Textures/Genitals/Vagina04.png
diff --git a/Textures/Genitals/Vagina05.png b/1.2/Textures/Genitals/Vagina05.png
similarity index 100%
rename from Textures/Genitals/Vagina05.png
rename to 1.2/Textures/Genitals/Vagina05.png
diff --git a/Textures/Genitals/Vagina06.png b/1.2/Textures/Genitals/Vagina06.png
similarity index 100%
rename from Textures/Genitals/Vagina06.png
rename to 1.2/Textures/Genitals/Vagina06.png
diff --git a/Textures/Genitals/Vagina07.png b/1.2/Textures/Genitals/Vagina07.png
similarity index 100%
rename from Textures/Genitals/Vagina07.png
rename to 1.2/Textures/Genitals/Vagina07.png
diff --git a/Textures/Genitals/Vagina08.png b/1.2/Textures/Genitals/Vagina08.png
similarity index 100%
rename from Textures/Genitals/Vagina08.png
rename to 1.2/Textures/Genitals/Vagina08.png
diff --git a/Textures/Genitals/Vagina09.png b/1.2/Textures/Genitals/Vagina09.png
similarity index 100%
rename from Textures/Genitals/Vagina09.png
rename to 1.2/Textures/Genitals/Vagina09.png
diff --git a/Textures/Genitals/Vagina10.png b/1.2/Textures/Genitals/Vagina10.png
similarity index 100%
rename from Textures/Genitals/Vagina10.png
rename to 1.2/Textures/Genitals/Vagina10.png
diff --git a/Textures/Genitals/Vagina11.png b/1.2/Textures/Genitals/Vagina11.png
similarity index 100%
rename from Textures/Genitals/Vagina11.png
rename to 1.2/Textures/Genitals/Vagina11.png
diff --git a/Textures/Milk/Milkbottle_Large.png b/1.2/Textures/Milk/Milkbottle_Large.png
similarity index 100%
rename from Textures/Milk/Milkbottle_Large.png
rename to 1.2/Textures/Milk/Milkbottle_Large.png
diff --git a/Textures/Milk/Milkbottle_Medium.png b/1.2/Textures/Milk/Milkbottle_Medium.png
similarity index 100%
rename from Textures/Milk/Milkbottle_Medium.png
rename to 1.2/Textures/Milk/Milkbottle_Medium.png
diff --git a/Textures/Milk/Milkbottle_Small.png b/1.2/Textures/Milk/Milkbottle_Small.png
similarity index 100%
rename from Textures/Milk/Milkbottle_Small.png
rename to 1.2/Textures/Milk/Milkbottle_Small.png
diff --git a/Textures/Textures_old.7z b/1.2/Textures/Textures_old.7z
similarity index 100%
rename from Textures/Textures_old.7z
rename to 1.2/Textures/Textures_old.7z
diff --git a/Textures/Things/Item/Milkbottle/Milkbottle_a.png b/1.2/Textures/Things/Item/Milkbottle/Milkbottle_a.png
similarity index 100%
rename from Textures/Things/Item/Milkbottle/Milkbottle_a.png
rename to 1.2/Textures/Things/Item/Milkbottle/Milkbottle_a.png
diff --git a/Textures/Things/Item/Milkbottle/Milkbottle_b.png b/1.2/Textures/Things/Item/Milkbottle/Milkbottle_b.png
similarity index 100%
rename from Textures/Things/Item/Milkbottle/Milkbottle_b.png
rename to 1.2/Textures/Things/Item/Milkbottle/Milkbottle_b.png
diff --git a/Textures/Things/Item/Milkbottle/Milkbottle_c.png b/1.2/Textures/Things/Item/Milkbottle/Milkbottle_c.png
similarity index 100%
rename from Textures/Things/Item/Milkbottle/Milkbottle_c.png
rename to 1.2/Textures/Things/Item/Milkbottle/Milkbottle_c.png
diff --git a/Textures/Things/Item/ORPill/ORPill_a.png b/1.2/Textures/Things/Item/ORPill/ORPill_a.png
similarity index 100%
rename from Textures/Things/Item/ORPill/ORPill_a.png
rename to 1.2/Textures/Things/Item/ORPill/ORPill_a.png
diff --git a/Textures/Things/Item/ORPill/ORPill_b.png b/1.2/Textures/Things/Item/ORPill/ORPill_b.png
similarity index 100%
rename from Textures/Things/Item/ORPill/ORPill_b.png
rename to 1.2/Textures/Things/Item/ORPill/ORPill_b.png
diff --git a/Textures/Things/Item/Pad.png b/1.2/Textures/Things/Item/Pad.png
similarity index 100%
rename from Textures/Things/Item/Pad.png
rename to 1.2/Textures/Things/Item/Pad.png
diff --git a/Textures/Things/Item/PainReliever/PainReliever_a.png b/1.2/Textures/Things/Item/PainReliever/PainReliever_a.png
similarity index 100%
rename from Textures/Things/Item/PainReliever/PainReliever_a.png
rename to 1.2/Textures/Things/Item/PainReliever/PainReliever_a.png
diff --git a/Textures/Things/Item/PainReliever/PainReliever_b.png b/1.2/Textures/Things/Item/PainReliever/PainReliever_b.png
similarity index 100%
rename from Textures/Things/Item/PainReliever/PainReliever_b.png
rename to 1.2/Textures/Things/Item/PainReliever/PainReliever_b.png
diff --git a/Textures/Things/Item/SIA/SIA_a.png b/1.2/Textures/Things/Item/SIA/SIA_a.png
similarity index 100%
rename from Textures/Things/Item/SIA/SIA_a.png
rename to 1.2/Textures/Things/Item/SIA/SIA_a.png
diff --git a/Textures/Things/Item/SIA/SIA_b.png b/1.2/Textures/Things/Item/SIA/SIA_b.png
similarity index 100%
rename from Textures/Things/Item/SIA/SIA_b.png
rename to 1.2/Textures/Things/Item/SIA/SIA_b.png
diff --git a/Textures/Things/Item/Tampon.png b/1.2/Textures/Things/Item/Tampon.png
similarity index 100%
rename from Textures/Things/Item/Tampon.png
rename to 1.2/Textures/Things/Item/Tampon.png
diff --git a/Textures/Things/Item/Tampon/Tampon_a.png b/1.2/Textures/Things/Item/Tampon/Tampon_a.png
similarity index 100%
rename from Textures/Things/Item/Tampon/Tampon_a.png
rename to 1.2/Textures/Things/Item/Tampon/Tampon_a.png
diff --git a/Textures/Things/Item/Tampon/Tampon_b.png b/1.2/Textures/Things/Item/Tampon/Tampon_b.png
similarity index 100%
rename from Textures/Things/Item/Tampon/Tampon_b.png
rename to 1.2/Textures/Things/Item/Tampon/Tampon_b.png
diff --git a/Textures/Womb/Empty.png b/1.2/Textures/Womb/Empty.png
similarity index 100%
rename from Textures/Womb/Empty.png
rename to 1.2/Textures/Womb/Empty.png
diff --git a/Textures/Womb/ImplantedEgg.png b/1.2/Textures/Womb/ImplantedEgg.png
similarity index 100%
rename from Textures/Womb/ImplantedEgg.png
rename to 1.2/Textures/Womb/ImplantedEgg.png
diff --git a/Textures/Womb/Mechanoid_Fluid.png b/1.2/Textures/Womb/Mechanoid_Fluid.png
similarity index 100%
rename from Textures/Womb/Mechanoid_Fluid.png
rename to 1.2/Textures/Womb/Mechanoid_Fluid.png
diff --git a/Textures/Womb/Womb.png b/1.2/Textures/Womb/Womb.png
similarity index 100%
rename from Textures/Womb/Womb.png
rename to 1.2/Textures/Womb/Womb.png
diff --git a/Textures/Womb/Womb.zip b/1.2/Textures/Womb/Womb.zip
similarity index 100%
rename from Textures/Womb/Womb.zip
rename to 1.2/Textures/Womb/Womb.zip
diff --git a/Textures/Womb/Womb_Bleeding.png b/1.2/Textures/Womb/Womb_Bleeding.png
similarity index 100%
rename from Textures/Womb/Womb_Bleeding.png
rename to 1.2/Textures/Womb/Womb_Bleeding.png
diff --git a/Textures/Womb/Womb_Cum_00.png b/1.2/Textures/Womb/Womb_Cum_00.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_00.png
rename to 1.2/Textures/Womb/Womb_Cum_00.png
diff --git a/Textures/Womb/Womb_Cum_01.png b/1.2/Textures/Womb/Womb_Cum_01.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_01.png
rename to 1.2/Textures/Womb/Womb_Cum_01.png
diff --git a/Textures/Womb/Womb_Cum_02.png b/1.2/Textures/Womb/Womb_Cum_02.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_02.png
rename to 1.2/Textures/Womb/Womb_Cum_02.png
diff --git a/Textures/Womb/Womb_Cum_03.png b/1.2/Textures/Womb/Womb_Cum_03.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_03.png
rename to 1.2/Textures/Womb/Womb_Cum_03.png
diff --git a/Textures/Womb/Womb_Cum_04.png b/1.2/Textures/Womb/Womb_Cum_04.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_04.png
rename to 1.2/Textures/Womb/Womb_Cum_04.png
diff --git a/Textures/Womb/Womb_Cum_05.png b/1.2/Textures/Womb/Womb_Cum_05.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_05.png
rename to 1.2/Textures/Womb/Womb_Cum_05.png
diff --git a/Textures/Womb/Womb_Cum_06.png b/1.2/Textures/Womb/Womb_Cum_06.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_06.png
rename to 1.2/Textures/Womb/Womb_Cum_06.png
diff --git a/Textures/Womb/Womb_Cum_07.png b/1.2/Textures/Womb/Womb_Cum_07.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_07.png
rename to 1.2/Textures/Womb/Womb_Cum_07.png
diff --git a/Textures/Womb/Womb_Cum_08.png b/1.2/Textures/Womb/Womb_Cum_08.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_08.png
rename to 1.2/Textures/Womb/Womb_Cum_08.png
diff --git a/Textures/Womb/Womb_Cum_09.png b/1.2/Textures/Womb/Womb_Cum_09.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_09.png
rename to 1.2/Textures/Womb/Womb_Cum_09.png
diff --git a/Textures/Womb/Womb_Cum_10.png b/1.2/Textures/Womb/Womb_Cum_10.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_10.png
rename to 1.2/Textures/Womb/Womb_Cum_10.png
diff --git a/Textures/Womb/Womb_Cum_11.png b/1.2/Textures/Womb/Womb_Cum_11.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_11.png
rename to 1.2/Textures/Womb/Womb_Cum_11.png
diff --git a/Textures/Womb/Womb_Cum_12.png b/1.2/Textures/Womb/Womb_Cum_12.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_12.png
rename to 1.2/Textures/Womb/Womb_Cum_12.png
diff --git a/Textures/Womb/Womb_Cum_13.png b/1.2/Textures/Womb/Womb_Cum_13.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_13.png
rename to 1.2/Textures/Womb/Womb_Cum_13.png
diff --git a/Textures/Womb/Womb_Cum_14.png b/1.2/Textures/Womb/Womb_Cum_14.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_14.png
rename to 1.2/Textures/Womb/Womb_Cum_14.png
diff --git a/Textures/Womb/Womb_Cum_15.png b/1.2/Textures/Womb/Womb_Cum_15.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_15.png
rename to 1.2/Textures/Womb/Womb_Cum_15.png
diff --git a/Textures/Womb/Womb_Cum_16.png b/1.2/Textures/Womb/Womb_Cum_16.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_16.png
rename to 1.2/Textures/Womb/Womb_Cum_16.png
diff --git a/Textures/Womb/Womb_Cum_17.png b/1.2/Textures/Womb/Womb_Cum_17.png
similarity index 100%
rename from Textures/Womb/Womb_Cum_17.png
rename to 1.2/Textures/Womb/Womb_Cum_17.png
diff --git a/Textures/Womb/Womb_Egged.png b/1.2/Textures/Womb/Womb_Egged.png
similarity index 100%
rename from Textures/Womb/Womb_Egged.png
rename to 1.2/Textures/Womb/Womb_Egged.png
diff --git a/Textures/Womb/Womb_Implanted.png b/1.2/Textures/Womb/Womb_Implanted.png
similarity index 100%
rename from Textures/Womb/Womb_Implanted.png
rename to 1.2/Textures/Womb/Womb_Implanted.png
diff --git a/source/RJW_Menstruation/MilkModule/JobDriver_MilkSelf.cs b/1.2/source/RJW_Menstruation/MilkModule/JobDriver_MilkSelf.cs
similarity index 100%
rename from source/RJW_Menstruation/MilkModule/JobDriver_MilkSelf.cs
rename to 1.2/source/RJW_Menstruation/MilkModule/JobDriver_MilkSelf.cs
diff --git a/source/RJW_Menstruation/MilkModule/MilkModule.csproj b/1.2/source/RJW_Menstruation/MilkModule/MilkModule.csproj
similarity index 100%
rename from source/RJW_Menstruation/MilkModule/MilkModule.csproj
rename to 1.2/source/RJW_Menstruation/MilkModule/MilkModule.csproj
diff --git a/source/RJW_Menstruation/MilkModule/Properties/AssemblyInfo.cs b/1.2/source/RJW_Menstruation/MilkModule/Properties/AssemblyInfo.cs
similarity index 100%
rename from source/RJW_Menstruation/MilkModule/Properties/AssemblyInfo.cs
rename to 1.2/source/RJW_Menstruation/MilkModule/Properties/AssemblyInfo.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation.sln b/1.2/source/RJW_Menstruation/RJW_Menstruation.sln
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation.sln
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation.sln
diff --git a/source/RJW_Menstruation/RJW_Menstruation/App.config b/1.2/source/RJW_Menstruation/RJW_Menstruation/App.config
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/App.config
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/App.config
diff --git a/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/Configurations.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/Cum.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/Cum.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/Cum.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/Cum.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomDoers.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomDoers.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/DrugOutcomDoers.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomDoers.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/FilthMaker_Colored.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/FilthMaker_Colored.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/FilthMaker_Colored.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/FilthMaker_Colored.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/HARCompatibility.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/HARCompatibility.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/HARCompatibility.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/HARCompatibility.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_InducedOvaulator.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_InducedOvaulator.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_InducedOvaulator.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_InducedOvaulator.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs
similarity index 99%
rename from source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs
index d514ac9..558862e 100644
--- a/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs
+++ b/1.2/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs
@@ -440,8 +440,6 @@ namespace RJW_Menstruation
{
if (!loaded)
{
- Props = (CompProperties_Menstruation)props;
- InitOvary((int)Utility.RandGaussianLike(18,40));
Initialize();
}
}
@@ -932,6 +930,7 @@ namespace RJW_Menstruation
if (cum.pawn != null && !cum.notcum && rand < cum.FertVolume * cum.fertFactor * Configurations.FertilizeChance * Props.basefertilizationChanceFactor)
{
if (!RJWPregnancySettings.bestial_pregnancy_enabled && (xxx.is_animal(parent.pawn) ^ xxx.is_animal(cum.pawn))) continue;
+ parent.pawn.records.AddTo(VariousDefOf.AmountofFertilizedEggs, 1);
return cum.pawn;
}
}
diff --git a/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/JobDrivers.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/JobDrivers.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/JobDrivers.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/JobDrivers.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/Patch/GetGizmos.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/Patch/GetGizmos.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/Patch/GetGizmos.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/Patch/GetGizmos.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/Patch/Harmony.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/Patch/Harmony.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/Patch/Harmony.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/Patch/Harmony.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj b/1.2/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj
diff --git a/source/RJW_Menstruation/RJW_Menstruation/Recipe_Surgery.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/Recipe_Surgery.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/Recipe_Surgery.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/Recipe_Surgery.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/Reflect.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/Reflect.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/Reflect.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/Reflect.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/Things.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/Things.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/Things.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/Things.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/Translations.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/Translations.cs
similarity index 99%
rename from source/RJW_Menstruation/RJW_Menstruation/Translations.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/Translations.cs
index 8e211a1..12476ae 100644
--- a/source/RJW_Menstruation/RJW_Menstruation/Translations.cs
+++ b/1.2/source/RJW_Menstruation/RJW_Menstruation/Translations.cs
@@ -100,6 +100,7 @@ namespace RJW_Menstruation
public static readonly string Option29_Desc = "Option29_Desc".Translate();
public static readonly string EstimatedCumLifespan = "EstimatedCumLifespan".Translate();
+ public static readonly string FertilityDesc = "FertilityDesc".Translate();
public static readonly string FloatMenu_CleanSelf = "FloatMenu_CleanSelf".Translate();
diff --git a/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_HybridCustom.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_HybridCustom.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_HybridCustom.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_HybridCustom.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs
similarity index 96%
rename from source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs
index 5d5a952..0958cab 100644
--- a/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs
+++ b/1.2/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs
@@ -351,35 +351,34 @@ namespace RJW_Menstruation
Rect lineRect = new Rect(rect.x, rect.y, rect.width, 20f);
float statvalue;
const float height = 24f;
-
statvalue = pawn.GetStatValue(xxx.sex_drive_stat);
- FillableBarLabeled(lineRect, " " + xxx.sex_drive_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue/2 ,TextureCache.slaaneshTexture,Texture2D.blackTexture);
+ FillableBarLabeled(lineRect, " " + xxx.sex_drive_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue/2 ,TextureCache.slaaneshTexture,Texture2D.blackTexture, xxx.sex_drive_stat.description);
lineRect.y += height;
statvalue = pawn.GetStatValue(xxx.vulnerability_stat);
- FillableBarLabeled(lineRect, " " + xxx.vulnerability_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue/2, TextureCache.khorneTexture,Texture2D.blackTexture);
+ FillableBarLabeled(lineRect, " " + xxx.vulnerability_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue/2, TextureCache.khorneTexture,Texture2D.blackTexture, xxx.vulnerability_stat.description);
lineRect.y += height;
statvalue = pawn.GetStatValue(xxx.sex_stat);
- FillableBarLabeled(lineRect, " " + xxx.sex_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue / 2, TextureCache.tzeentchTexture, Texture2D.blackTexture);
+ FillableBarLabeled(lineRect, " " + xxx.sex_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue / 2, TextureCache.tzeentchTexture, Texture2D.blackTexture, xxx.sex_stat.description);
lineRect.y += height;
statvalue = pawn.records.GetValue(xxx.CountOfBirthHuman);
- FillableBarLabeled(lineRect, " " + xxx.CountOfBirthHuman.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 10, TextureCache.humanTexture, Texture2D.blackTexture);
+ FillableBarLabeled(lineRect, " " + xxx.CountOfBirthHuman.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 10, TextureCache.humanTexture, Texture2D.blackTexture, xxx.CountOfBirthHuman.description);
lineRect.y += height;
statvalue = pawn.records.GetValue(xxx.CountOfBirthAnimal);
- FillableBarLabeled(lineRect, " " + xxx.CountOfBirthAnimal.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 20, TextureCache.animalTexture, Texture2D.blackTexture);
+ FillableBarLabeled(lineRect, " " + xxx.CountOfBirthAnimal.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 20, TextureCache.animalTexture, Texture2D.blackTexture, xxx.CountOfBirthAnimal.description);
lineRect.y += height;
statvalue = pawn.records.GetValue(xxx.CountOfBirthEgg);
- FillableBarLabeled(lineRect, " " + xxx.CountOfBirthEgg.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 100, TextureCache.nurgleTexture, Texture2D.blackTexture);
+ FillableBarLabeled(lineRect, " " + xxx.CountOfBirthEgg.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 100, TextureCache.nurgleTexture, Texture2D.blackTexture, xxx.CountOfBirthEgg.description);
lineRect.y += height;
statvalue = pawn.records.GetValue(xxx.CountOfWhore);
if (statvalue > 0)
{
- FillableBarLabeled(lineRect, " " + xxx.CountOfWhore.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 50, TextureCache.slaaneshTexture, Texture2D.blackTexture);
+ FillableBarLabeled(lineRect, " " + xxx.CountOfWhore.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 50, TextureCache.slaaneshTexture, Texture2D.blackTexture, xxx.CountOfWhore.description);
statvalue = pawn.records.GetValue(xxx.EarnedMoneyByWhore);
lineRect.y += height;
FillableBarLabeled(lineRect, " " + VariousDefOf.RJW_EarnedMoneyByWhore.label.CapitalizeFirst() + " " + statvalue, statvalue / 10000, TextureCache.ghalmarazTexture, Texture2D.blackTexture);
@@ -393,17 +392,18 @@ namespace RJW_Menstruation
}
statvalue = Configurations.ImplantationChance * comp.Props.baseImplantationChanceFactor * comp.ImplantFactor;
- FillableBarLabeled(lineRect, " " + xxx.reproduction.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue, TextureCache.fertilityTexture, Texture2D.blackTexture);
+ FillableBarLabeled(lineRect, " " + xxx.reproduction.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue, TextureCache.fertilityTexture, Texture2D.blackTexture, Translations.FertilityDesc);
Rect overayRect = new Rect(lineRect.x, lineRect.y, lineRect.width * Math.Min(1.0f, comp.GetFertilityChance()), lineRect.height);
GUI.DrawTexture(overayRect, TextureCache.FertChanceTex);
lineRect.y += height;
}
- private void FillableBarLabeled(Rect rect, string label, float fillPercent, Texture2D filltexture, Texture2D bgtexture)
+ private void FillableBarLabeled(Rect rect, string label, float fillPercent, Texture2D filltexture, Texture2D bgtexture, string tooltip = null)
{
Widgets.FillableBar(rect, Math.Min(fillPercent,1.0f), filltexture, bgtexture, true);
GUI.Label(rect, label, fontstyleleft);
Widgets.DrawHighlightIfMouseover(rect);
+ if (tooltip != null) TooltipHandler.TipRegion(rect, tooltip);
}
diff --git a/source/RJW_Menstruation/RJW_Menstruation/UI/Gizmo_Womb.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/UI/Gizmo_Womb.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/UI/Gizmo_Womb.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/UI/Gizmo_Womb.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/Utility.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/Utility.cs
similarity index 100%
rename from source/RJW_Menstruation/RJW_Menstruation/Utility.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/Utility.cs
diff --git a/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs b/1.2/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs
similarity index 97%
rename from source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs
rename to 1.2/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs
index aea4196..140543d 100644
--- a/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs
+++ b/1.2/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs
@@ -44,6 +44,8 @@ namespace RJW_Menstruation
public static readonly KeyBindingDef OpenStatusWindowKey = DefDatabase.GetNamed("OpenStatusWindow");
public static readonly PawnColumnDef RJW_EarnedMoneyByWhore = DefDatabase.GetNamed("RJW_EarnedMoneyByWhore");
public static readonly RecordDef AmountofCreampied = DefDatabase.GetNamed("AmountofCreampied");
+ public static readonly RecordDef AmountofFertilizedEggs = DefDatabase.GetNamed("AmountofFertilizedEggs");
+
private static List allraces = null;
diff --git a/source/RJW_Menstruation/TextFile1.txt b/1.2/source/RJW_Menstruation/TextFile1.txt
similarity index 100%
rename from source/RJW_Menstruation/TextFile1.txt
rename to 1.2/source/RJW_Menstruation/TextFile1.txt
diff --git a/1.3/Assemblies/RJW_Menstruation.dll b/1.3/Assemblies/RJW_Menstruation.dll
new file mode 100644
index 0000000..ea610d3
Binary files /dev/null and b/1.3/Assemblies/RJW_Menstruation.dll differ
diff --git a/1.3/Assemblies/RJW_Menstruation.dll.config b/1.3/Assemblies/RJW_Menstruation.dll.config
new file mode 100644
index 0000000..56efbc7
--- /dev/null
+++ b/1.3/Assemblies/RJW_Menstruation.dll.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Defs/DNADef/DNADefs.xml b/1.3/Defs/DNADef/DNADefs.xml
new file mode 100644
index 0000000..09b3a1c
--- /dev/null
+++ b/1.3/Defs/DNADef/DNADefs.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Defs/Drugs/Pills_Menstruation.xml b/1.3/Defs/Drugs/Pills_Menstruation.xml
new file mode 100644
index 0000000..0c387ce
--- /dev/null
+++ b/1.3/Defs/Drugs/Pills_Menstruation.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ OvaryRegenerationPill
+ Ovary regeneration pill
+ Recovers ovary's health.
Less effective on unhealthy ovary.
Does not recover menopause.
+
+ Things/Item/ORPill
+ Graphic_StackCount
+
+ false
+
+ 2400
+ 160
+ 0.05
+
+ Industrial
+
+ Medical
+
+
+ 0.3
+
+
+
+
+ DrugProduction
+
+ DrugLab
+
+
+
+ 10
+ 4
+ 8
+
+
+
+ 0
+ 1000
+
+ 0.08
+ 0.14
+
+
+
+
+
+
+ SuperovulationInducingAgent
+ Superovulation inducing agent
+ Induce superovulation
May cause early menopause
+
+ Things/Item/SIA
+ Graphic_StackCount
+
+ false
+
+ 2400
+ 140
+ 0.05
+
+ Industrial
+
+ Medical
+
+
+
+
+
+
+ DrugProduction
+
+ DrugLab
+
+
+
+ 12
+ 6
+
+
+
+ 0
+ 1000
+
+ 0.08
+ 0.14
+
+
+
+
+
+
+ PainReliever
+ Pain reliever
+ Relieves menstrual pain for a day.
Also effective on generic pain.
+
+ Things/Item/PainReliever
+ Graphic_StackCount
+
+ false
+
+ 1000
+ 12
+ 0.01
+
+ Industrial
+
+ Medical
+
+
+ Hediff_PainReliever
+ 1.0
+
+
+
+
+ DrugProduction
+
+ DrugLab
+
+
+
+ 1
+
+
+
+ 0
+ 1000
+
+ 0.08
+ 0.14
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Defs/HediffDef/Hediffs_Menstruation.xml b/1.3/Defs/HediffDef/Hediffs_Menstruation.xml
new file mode 100644
index 0000000..9d02090
--- /dev/null
+++ b/1.3/Defs/HediffDef/Hediffs_Menstruation.xml
@@ -0,0 +1,263 @@
+
+
+
+ HediffWithComps
+ Hediff_MenstrualCramp
+ In period
+ in period
+ in period
+ (0.70,0.00,0.00)
+ true
+ false
+ false
+ false
+ 1
+ 0.1
+
+ true
+
+
+
+ unpleasant
+
+ 0.50
+ 0.95
+
+ 0.005
+
+
+ 0.2
+ annoying
+
+ 0.40
+ 0.95
+
+ 0.01
+
+
+ 0.4
+ aching
+
+ 0.20
+ 0.95
+
+ 0.10
+
+
+ 0.6
+ painful
+
+ 0.0
+ 0.95
+
+ 0.20
+
+
+
+
+ -0.1
+
+
+
+
+
+ HediffWithComps
+ Hediff_Menopause
+ Menopause
+ menopause
+ reached menopause
+ {0} reached menopause
+ (0.70,0.70,0.00)
+ false
+ false
+ false
+ true
+ 1
+ 0.1
+
+ true
+
+
+
+
+ 0.01
+ 0.50
+
+
+
+ RJW_Fertility
+ 0.00
+
+
+
+
+
+
+
+
+
+ HediffWithComps
+ Hediff_Climacteric
+ Climacteric
+ climacteric
+ climacteric
+ (0.70,0.70,0.00)
+ false
+ false
+ false
+ false
+ 1
+ 0.1
+
+ true
+
+
+
+ early
+
+ 0.50
+ 0.8
+
+
+
+ RJW_Fertility
+ 0.50
+
+
+
+
+ middle
+ 0.2
+
+ 0.25
+ 0.7
+
+
+
+ RJW_Fertility
+ 0.25
+
+
+
+
+ latter
+ 0.4
+
+ 0.10
+ 0.6
+
+
+
+ RJW_Fertility
+ 0.10
+
+
+
+
+ end
+ 0.6
+
+ 0.05
+ 0.5
+
+
+
+ RJW_Fertility
+ 0.01
+
+
+
+
+
+
+
+
+
+
+ HediffWithComps
+ Hediff_Estrus
+ Estrus
+ estrus
+ estrus
+ (1.00,0.60,0.75)
+ false
+ false
+ false
+ false
+ 10000
+ 1.0
+
+ true
+
+
+
+
+ 5.0
+ 1.5
+
+
+
+
+
+ -1.0
+
+
+
+
+
+ HediffWithComps
+ Hediff_Estrus_Consealed
+ Estrus(consealed)
+ estrus
+ estrus
+ (1.00,0.60,0.75)
+ false
+ false
+ false
+ false
+ 10000
+ 1.0
+
+ true
+
+
+
+ false
+
+ 1.10
+ 1.05
+
+
+
+
+
+ -1.0
+
+
+
+
+
+
+ HediffWithComps
+ Hediff_PainReliever
+ Pain reliever
+ relieves pain.
+ (0.75,0.75,1.0)
+ false
+ false
+ false
+ false
+ 5
+ 1.0
+
+
+ -0.1
+
+
+
+
+ -1.0
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Defs/JobDefs/Jobs_CleanSelf.xml b/1.3/Defs/JobDefs/Jobs_CleanSelf.xml
new file mode 100644
index 0000000..fbfaad1
--- /dev/null
+++ b/1.3/Defs/JobDefs/Jobs_CleanSelf.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ VaginaWashing
+ RJW_Menstruation.JobDriver_VaginaWashing
+ washing vagina
+ true
+
+
\ No newline at end of file
diff --git a/1.3/Defs/JobDefs/Jobs_MilkSelf.xml b/1.3/Defs/JobDefs/Jobs_MilkSelf.xml
new file mode 100644
index 0000000..79df022
--- /dev/null
+++ b/1.3/Defs/JobDefs/Jobs_MilkSelf.xml
@@ -0,0 +1,9 @@
+
+
+
+ LactateSelf
+ RJW_Menstruation.JobDriver_MilkSelf
+ lactating self
+ true
+
+
diff --git a/1.3/Defs/KeyBindings/KeyBindings.xml b/1.3/Defs/KeyBindings/KeyBindings.xml
new file mode 100644
index 0000000..1c4bcdf
--- /dev/null
+++ b/1.3/Defs/KeyBindings/KeyBindings.xml
@@ -0,0 +1,9 @@
+
+
+
+
+ OpenStatusWindow
+ menstruation: open status window
+ Q
+
+
diff --git a/1.3/Defs/Recipe_Surgery/Recipes_Surgery_Breast.xml b/1.3/Defs/Recipe_Surgery/Recipes_Surgery_Breast.xml
new file mode 100644
index 0000000..4041c52
--- /dev/null
+++ b/1.3/Defs/Recipe_Surgery/Recipes_Surgery_Breast.xml
@@ -0,0 +1,65 @@
+
+
+
+ Surgery
+ Recipe_Surgery
+ MedicalOperationSpeed
+ Medicine
+ 0.2
+ 400
+ false
+
+ Human
+
+ 100
+
+
+
+
+ Medicine
+
+
+ 1
+
+
+
+
+ Medicine
+
+
+
+
+
+ Surgery_ExpandAreola
+ expand areola
+ expand areola.
+ RJW_Menstruation.Recipe_ExpandAreola
+ expanding areola
+
+
+
+ Surgery_ContractAreola
+ contract areola
+ contract areola.
+ RJW_Menstruation.Recipe_ContractAreola
+ contracting areola
+
+
+
+ Surgery_ExpandNipple
+ expand nipple
+ expand nipple.
+ RJW_Menstruation.Recipe_ExpandNipple
+ expanding nipple
+
+
+
+ Surgery_ContractNipple
+ contract nipple
+ contract nipple.
+ RJW_Menstruation.Recipe_ContractNipple
+ contracting nipple
+
+
+
+
diff --git a/1.3/Defs/RecordDefs/Records_Womb.xml b/1.3/Defs/RecordDefs/Records_Womb.xml
new file mode 100644
index 0000000..e42a0a9
--- /dev/null
+++ b/1.3/Defs/RecordDefs/Records_Womb.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ AmountofCreampied
+ creampied
+ The amount of cums I have been creampied.
+ Float
+
+
+
+ AmountofFertilizedEggs
+ fertilized eggs
+ The amount of my eggs being raped by sperm.
+ Int
+
+
+
+
diff --git a/1.3/Defs/Stats/Stats_Absorber.xml b/1.3/Defs/Stats/Stats_Absorber.xml
new file mode 100644
index 0000000..5a6521d
--- /dev/null
+++ b/1.3/Defs/Stats/Stats_Absorber.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ MaxAbsorbable
+ Absorbable
+ Maximum fluids can be absorbed.
+ Apparel
+ 0
+ FloatOne
+ {0} ml
+ false
+ 60
+
+
+ 0.5
+ 0.8
+ 1
+ 1.2
+ 1.4
+ 2.0
+ 5.0
+
+
+
+
+
diff --git a/1.3/Defs/ThingDefs/ApparelLayerDefs_Absorber.xml b/1.3/Defs/ThingDefs/ApparelLayerDefs_Absorber.xml
new file mode 100644
index 0000000..85fec8c
--- /dev/null
+++ b/1.3/Defs/ThingDefs/ApparelLayerDefs_Absorber.xml
@@ -0,0 +1,8 @@
+
+
+
+ Absorber
+ genital
+ 500
+
+
diff --git a/1.3/Defs/ThingDefs/Apparel_Absorbers.xml b/1.3/Defs/ThingDefs/Apparel_Absorbers.xml
new file mode 100644
index 0000000..81239da
--- /dev/null
+++ b/1.3/Defs/ThingDefs/Apparel_Absorbers.xml
@@ -0,0 +1,243 @@
+
+
+
+
+ Absorber_Tampon
+ tampon
+ A tampon for absorbing fluids from vagina.
May cause infection if using too long.
+ RJW_Menstruation.Absorber_Tampon
+
+ Things/Item/Tampon
+ Graphic_Single
+
+ Never
+ false
+ Sellable
+
+ 20
+ 0.01
+ 1000
+ 1.0
+ 2
+ 10
+
+ 5
+
+ Fabric
+
+
+ UnfinishedApparel
+ ComplexClothing
+ GeneralLaborSpeed
+ Crafting
+ Tailor
+ Recipe_Tailor
+
+ ElectricTailoringBench
+ HandTailoringBench
+
+ true
+
+ 4
+
+
+
+ ApparelUtility
+
+
+ true
+ false
+ 0
+ Female
+
+ Torso
+
+
+ Absorber
+
+
+ Absorber
+
+
+
+
+ false
+ true
+ 10
+ Absorber_Tampon_Dirty
+
+
+
+
+
+ Absorber_Tampon_Dirty
+ dirty tampon
+ An wet used tampon.
May cause infection.
+ RJW_Menstruation.Absorber_Tampon
+
+ Things/Item/Tampon
+ Graphic_Single
+
+ Never
+ false
+ None
+
+ 20
+ 0.05
+ 0
+ 1000
+ 0.2
+ 2
+ 10
+ -5
+
+
+ Fabric
+
+
+ ApparelUtility
+
+
+ true
+ false
+ 0
+ Female
+
+ Torso
+
+
+ Absorber
+
+
+ Absorber
+
+
+
+
+ false
+ true
+ 8
+ Absorber_Tampon_Dirty
+
+
+
+
+
+
+ Absorber_Pad
+ sanitary pad
+ A pad for absorbing fluids from vagina.
+ RJW_Menstruation.Absorber
+
+ Things/Item/Pad
+ Graphic_Single
+
+ Never
+ false
+ Sellable
+
+ 40
+ 0.02
+ 1000
+ 1.0
+ 4
+ 25
+
+ 10
+
+ Fabric
+
+
+ UnfinishedApparel
+ GeneralLaborSpeed
+ Crafting
+ Tailor
+ Recipe_Tailor
+
+ ElectricTailoringBench
+ HandTailoringBench
+
+ true
+
+ 4
+
+
+
+ ApparelUtility
+
+
+ true
+ false
+ 0
+ Female
+
+ Torso
+
+
+ Absorber
+
+
+ Absorber
+
+
+
+
+ true
+ false
+ Absorber_Pad_Dirty
+
+
+
+
+
+ Absorber_Pad_Dirty
+ wet sanitary pad
+ An wet used pad.
+ RJW_Menstruation.Absorber
+
+ Things/Item/Pad
+ Graphic_Single
+
+ Never
+ false
+ None
+
+ 40
+ 0.10
+ 0
+ 1000
+ 0.2
+ 4
+ 25
+ -5
+
+
+ Fabric
+
+
+ ApparelUtility
+
+
+ true
+ false
+ 0
+ Female
+
+ Torso
+
+
+ Absorber
+
+
+ Absorber
+
+
+
+
+ true
+ false
+ Absorber_Pad_Dirty
+
+
+
+
diff --git a/1.3/Defs/ThingDefs/Filth_Mixture.xml b/1.3/Defs/ThingDefs/Filth_Mixture.xml
new file mode 100644
index 0000000..fda4e41
--- /dev/null
+++ b/1.3/Defs/ThingDefs/Filth_Mixture.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ FilthMixture
+ mixture
+ RJW_Menstruation.Filth_Colored
+
+ -30
+ -10
+
+
+ Graphic_Random
+ Things/Filth/PoolSoft
+ (255, 255, 255, 180)
+
+
+ true
+ 40
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Defs/ThoughtDefs/Thoughts_sex.xml b/1.3/Defs/ThoughtDefs/Thoughts_sex.xml
new file mode 100644
index 0000000..710baf9
--- /dev/null
+++ b/1.3/Defs/ThoughtDefs/Thoughts_sex.xml
@@ -0,0 +1,214 @@
+
+
+
+
+ LeakingFluids
+ Thought_Memory
+ 0.05
+ 1
+ 0.4
+
+
+ dripping fluids
+ It bothers me.
+ -2
+
+
+
+
+
+ CameInsideF
+ Thought_MemorySocial
+ 7.0
+ 5
+ 0.1
+ 1
+
+
+ {0} came inside
+ I'm worried i might get pregnant.
+ -3
+ -2
+
+
+
+
+
+ CameInsideFLowFert
+ Thought_MemorySocial
+ 3.0
+ 5
+ 0.1
+ 1
+
+
+ {0} came inside
+ I'm worried i might get pregnant.
The chance is low, but...
+ -1
+
+
+
+
+
+ CameInsideFFetish
+ Thought_MemorySocial
+ 3.0
+ 5
+ 0.1
+ 1
+
+
+ {0} came inside
+ I might get pregnant.
+ 10
+ 5
+
+
+
+
+
+ CameInsideFFetishSafe
+ Thought_MemorySocial
+ 3.0
+ 5
+ 0.1
+ 1
+
+
+ {0} came inside
+ I loved it.
+ 3
+ 1
+
+
+
+
+
+ CameInsideM
+ Thought_MemorySocial
+ 1.0
+ 5
+ 0.4
+
+
+ came inside of {0}
+ Feel so good.
+ 2
+ 1
+
+
+
+
+
+ HaterCameInsideFSafe
+ Thought_MemorySocial
+ 3.0
+ 5
+ 0.1
+ 1
+
+
+ {0} came inside
+ The chance is low. But i don't like it.
+ -2
+ -5
+
+
+
+
+
+ HaterCameInsideF
+ Thought_MemorySocial
+ 7.0
+ 5
+ 0.1
+ 1
+
+
+ {0} came inside
+ I don't want to be pregnant with his baby
+ -5
+ -10
+
+
+
+
+
+ HaterCameInsideM
+ Thought_MemorySocial
+ 1.0
+ 5
+ 0.4
+
+
+ came inside of {0}
+ i came inside of that bitch
+ 5
+ 1
+
+
+
+
+
+ UnwantedPregnancy
+ Thought_Memory
+ 14.0
+ 5
+ 0.1
+
+
+ unwanted pregnancy
+ How do i...
+ -10
+
+
+
+
+
+ UnwantedPregnancyMild
+ Thought_Memory
+ 14.0
+ 5
+ 0.1
+
+
+ unwanted pregnancy
+ How do i...
+ -3
+
+
+
+
+
+ TookContraptivePill
+ Thought_Memory
+ 7.0
+ 5
+ 0.1
+
+
+ took contraptive pill
+ It will be okay.
+ 1
+
+
+
+
+
+ HateTookContraptivePill
+ Thought_Memory
+ 7.0
+ 5
+ 0.1
+
+
+ took contraptive pill
+ I want to get pregnant.
+ -3
+
+
+
+
+
+
+
diff --git a/1.3/Languages/ChineseSimplified/DefInjected/ApparelLayerDef/RJWMenstruation.xml b/1.3/Languages/ChineseSimplified/DefInjected/ApparelLayerDef/RJWMenstruation.xml
new file mode 100644
index 0000000..bd0c960
--- /dev/null
+++ b/1.3/Languages/ChineseSimplified/DefInjected/ApparelLayerDef/RJWMenstruation.xml
@@ -0,0 +1,4 @@
+
+
+ 生殖器
+
\ No newline at end of file
diff --git a/1.3/Languages/ChineseSimplified/DefInjected/HediffDef/RJWMenstruation.xml b/1.3/Languages/ChineseSimplified/DefInjected/HediffDef/RJWMenstruation.xml
new file mode 100644
index 0000000..a880d69
--- /dev/null
+++ b/1.3/Languages/ChineseSimplified/DefInjected/HediffDef/RJWMenstruation.xml
@@ -0,0 +1,22 @@
+
+
+
+ 中枢性疼痛
+ 经期中
+ 不快
+ 恼人
+ 疼痛
+ 痛苦
+ 更年期
+ 到了更年期
+ 初期
+ 中期
+ 后期
+ 更年期
+ 更年期
+ 不孕
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Languages/ChineseSimplified/DefInjected/JobDef/RJWMenstruation.xml b/1.3/Languages/ChineseSimplified/DefInjected/JobDef/RJWMenstruation.xml
new file mode 100644
index 0000000..6d73d1d
--- /dev/null
+++ b/1.3/Languages/ChineseSimplified/DefInjected/JobDef/RJWMenstruation.xml
@@ -0,0 +1,7 @@
+
+
+ 清洗阴道
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Languages/ChineseSimplified/DefInjected/StatDef/RJWMenstruation.xml b/1.3/Languages/ChineseSimplified/DefInjected/StatDef/RJWMenstruation.xml
new file mode 100644
index 0000000..6c2c93a
--- /dev/null
+++ b/1.3/Languages/ChineseSimplified/DefInjected/StatDef/RJWMenstruation.xml
@@ -0,0 +1,7 @@
+
+
+ 可吸收量
+ 最大可吸收的液体量
+
+
+
\ No newline at end of file
diff --git a/1.3/Languages/ChineseSimplified/DefInjected/ThingDef/RJWMenstruation.xml b/1.3/Languages/ChineseSimplified/DefInjected/ThingDef/RJWMenstruation.xml
new file mode 100644
index 0000000..75ebeeb
--- /dev/null
+++ b/1.3/Languages/ChineseSimplified/DefInjected/ThingDef/RJWMenstruation.xml
@@ -0,0 +1,31 @@
+
+
+
+
+卫生棉条
+
+从阴道吸收液体的卫生棉条
+
+湿的卫生棉条
+
+使用过的湿卫生棉条
+
+卫生棉
+
+从阴道吸收液体的卫生棉
+
+湿的卫生棉
+
+使用过的湿卫生棉
+
+卵巢再生药物
+
+使卵巢再生以增加可排卵的卵子
卵子消耗量越大,效果越差
不能缓解更年期症状
+
+排卵药
+
+诱导排卵的药物
可导致更年期提前
+
+混合物
+
+
\ No newline at end of file
diff --git a/1.3/Languages/ChineseSimplified/DefInjected/ThoughtDef/RJWMenstruation.xml b/1.3/Languages/ChineseSimplified/DefInjected/ThoughtDef/RJWMenstruation.xml
new file mode 100644
index 0000000..48c020b
--- /dev/null
+++ b/1.3/Languages/ChineseSimplified/DefInjected/ThoughtDef/RJWMenstruation.xml
@@ -0,0 +1,23 @@
+
+
+ 裤湿啦
+ 真让人困恼...
+ 被{0}中出了
+ 我担心我可能会怀孕...
+ 被{0}中出了
+ 虽然几率很低,但我还是担心怀孕...
+ 被{0}中出了
+ 我想我怀孕了
+ 被{0}中出了
+ 我爱做爱
+ 中出了{0}
+ 超爽的
+ 被{0}中出了
+ 那龟孙子上了我,我不想怀上他的孩子...
+ 被{0}中出了
+ 那龟孙子上了我....
+ 中出了{0}
+ 我上了一个婊子
+ 不想要的怀孕
+ 我该怎麽办?...
+
\ No newline at end of file
diff --git a/1.3/Languages/ChineseSimplified/Keyed/RJW_Menstruation.xml b/1.3/Languages/ChineseSimplified/Keyed/RJW_Menstruation.xml
new file mode 100644
index 0000000..466ae28
--- /dev/null
+++ b/1.3/Languages/ChineseSimplified/Keyed/RJW_Menstruation.xml
@@ -0,0 +1,66 @@
+
+
+ RJW Menstruation Cycle
+
+ 月经血
+ 清空
+ 卵泡期
+ 排卵
+ 黄体期
+ 月经来潮
+ 已受精
+ 怀孕
+ 从出生中恢复
+ 无
+ 更年期
+ 状态
+ 胎儿
+ 父亲
+ 阴道精液列表
+ 已受精
+ 受精中
+ 排卵
+
+
+
+ 激活子宫图标
+ 激活子宫图标框
+ 激活动物经期
+ 仿真动物的经期.
此选项将在保存读取后生效
不推荐开启此选项
+ 植入机会
+ 设置受精卵的植入机会
+ 受精的机会
+ 设置每小时受精的机会
+ 每小时阴道中的精液量衰减率
+ 阴道中的精液量将以这个比率减少
+ 每小时生育率衰减率
+ 精液列表的生育率将以这个比率减少
+ 循环加速
+ 加快月经周期
+ 调试
+ 显示调试信息
+ 子宫状态
+ 在状态窗口中绘制子宫图标
+ 阴道状态
+ 在状态窗口中绘制阴道和肛门图标
+ 胎儿信息级别
+ 显示有关胎儿的所有信息
+ 显示妊娠後胎儿的所有信息
+ 不显示有关胎儿的信息,但显示怀孕後胎儿的图象
+ 不显示胎儿图象和信息
+ 激活更年期
+ 激活更年期效果,使小人随着时间的推移而变得不育
如果您较长寿的外星人种族有碰到任何问题,请关闭此选项.
此选项将在保存读取后生效
+ 多重怀孕
+ 使用多重怀孕代替RJW的默认怀孕
+ 激活异卵双胞胎
+ 激活复数个卵子可以个别受精
+ 激活双胞胎
+ 允许单个卵子生成多个后代
+ 双胞胎出现率
+ 设置双胞胎的出现率
+ 最大双胞胎数量
+ 设置最大双胞胎数量
+
+ 清洗阴道
+
+
\ No newline at end of file
diff --git a/1.3/Languages/ChineseTraditional/DefInjected/ApparelLayerDef/RJWMenstruation.xml b/1.3/Languages/ChineseTraditional/DefInjected/ApparelLayerDef/RJWMenstruation.xml
new file mode 100644
index 0000000..a90d863
--- /dev/null
+++ b/1.3/Languages/ChineseTraditional/DefInjected/ApparelLayerDef/RJWMenstruation.xml
@@ -0,0 +1,4 @@
+
+
+ 生殖器
+
\ No newline at end of file
diff --git a/1.3/Languages/ChineseTraditional/DefInjected/HediffDef/RJWMenstruation.xml b/1.3/Languages/ChineseTraditional/DefInjected/HediffDef/RJWMenstruation.xml
new file mode 100644
index 0000000..07e22bd
--- /dev/null
+++ b/1.3/Languages/ChineseTraditional/DefInjected/HediffDef/RJWMenstruation.xml
@@ -0,0 +1,22 @@
+
+
+
+ 中樞性疼痛
+ 經期中
+ 不快
+ 惱人
+ 疼痛
+ 痛苦
+ 更年期
+ 到了更年期
+ 初期
+ 中期
+ 後期
+ 更年期
+ 更年期
+ 不孕
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Languages/ChineseTraditional/DefInjected/JobDef/RJWMenstruation.xml b/1.3/Languages/ChineseTraditional/DefInjected/JobDef/RJWMenstruation.xml
new file mode 100644
index 0000000..fc04f3d
--- /dev/null
+++ b/1.3/Languages/ChineseTraditional/DefInjected/JobDef/RJWMenstruation.xml
@@ -0,0 +1,7 @@
+
+
+ 清洗陰道
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Languages/ChineseTraditional/DefInjected/StatDef/RJWMenstruation.xml b/1.3/Languages/ChineseTraditional/DefInjected/StatDef/RJWMenstruation.xml
new file mode 100644
index 0000000..d485637
--- /dev/null
+++ b/1.3/Languages/ChineseTraditional/DefInjected/StatDef/RJWMenstruation.xml
@@ -0,0 +1,7 @@
+
+
+ 可吸收量
+ 最大可吸收的液體量
+
+
+
\ No newline at end of file
diff --git a/1.3/Languages/ChineseTraditional/DefInjected/ThingDef/RJWMenstruation.xml b/1.3/Languages/ChineseTraditional/DefInjected/ThingDef/RJWMenstruation.xml
new file mode 100644
index 0000000..9404fb7
--- /dev/null
+++ b/1.3/Languages/ChineseTraditional/DefInjected/ThingDef/RJWMenstruation.xml
@@ -0,0 +1,31 @@
+
+
+
+
+衛生棉條
+
+從陰道吸收液體的衛生棉條
+
+濕的衛生棉條
+
+使用過的濕衛生棉條
+
+衛生棉
+
+從陰道吸收液體的衛生棉
+
+濕的衛生棉
+
+使用過的濕衛生棉
+
+卵巢再生藥物
+
+使卵巢再生以增加可排卵的卵子
卵子消耗量越大,效果越差
不能緩解更年期症狀
+
+排卵藥
+
+誘導排卵的藥物
可導致更年期提前
+
+混合物
+
+
\ No newline at end of file
diff --git a/1.3/Languages/ChineseTraditional/DefInjected/ThoughtDef/RJWMenstruation.xml b/1.3/Languages/ChineseTraditional/DefInjected/ThoughtDef/RJWMenstruation.xml
new file mode 100644
index 0000000..f83a56a
--- /dev/null
+++ b/1.3/Languages/ChineseTraditional/DefInjected/ThoughtDef/RJWMenstruation.xml
@@ -0,0 +1,23 @@
+
+
+ 褲濕啦
+ 真讓人困惱...
+ 被{0}中出了
+ 我擔心我可能會懷孕...
+ 被{0}中出了
+ 雖然機率很低,但我還是擔心懷孕...
+ 被{0}中出了
+ 我想我懷孕了
+ 被{0}中出了
+ 我愛做愛
+ 中出了{0}
+ 超爽的
+ 被{0}中出了
+ 那龜孫子上了我,我不想懷上他的孩子...
+ 被{0}中出了
+ 那龜孫子上了我....
+ 中出了{0}
+ 我上了一個婊子
+ 不想要的懷孕
+ 我該怎麼辦?...
+
\ No newline at end of file
diff --git a/1.3/Languages/ChineseTraditional/Keyed/RJW_Menstruation.xml b/1.3/Languages/ChineseTraditional/Keyed/RJW_Menstruation.xml
new file mode 100644
index 0000000..eb4314f
--- /dev/null
+++ b/1.3/Languages/ChineseTraditional/Keyed/RJW_Menstruation.xml
@@ -0,0 +1,66 @@
+
+
+ RJW Menstruation Cycle
+
+ 月經血
+ 清空
+ 卵泡期
+ 排卵
+ 黃體期
+ 月經來潮
+ 已受精
+ 懷孕
+ 從出生中恢復
+ 無
+ 更年期
+ 狀態
+ 胎兒
+ 父親
+ 陰道精液列表
+ 已受精
+ 受精中
+ 排卵
+
+
+
+ 啟用子宮圖標
+ 啟用子宮圖標框
+ 啟用動物經期
+ 模擬動物的經期.
此選項將在保存讀取後生效
不推薦開啟此選項
+ 植入機會
+ 設置受精卵的植入機會
+ 受精的機會
+ 設置每小時受精的機會
+ 每小時陰道中的精液量衰減率
+ 陰道中的精液量將以這個比率減少
+ 每小時生育率衰減率
+ 精液列表的生育率將以這個比率減少
+ 循環加速
+ 加快月經週期
+ 除錯
+ 顯示除錯資訊
+ 子宮狀態
+ 在狀態窗口中繪製子宮圖標
+ 陰道狀態
+ 在狀態窗口中繪製陰道和肛門圖標
+ 胎兒信息級別
+ 顯示有關胎兒的所有信息
+ 顯示妊娠後胎兒的所有信息
+ 不顯示有關胎兒的信息,但顯示懷孕後胎兒的圖像
+ 不顯示胎兒圖像和信息
+ 啟用更年期
+ 啟用更年期效果,使小人隨著時間的推移而變得不育
如果您較長壽的外星人種族有碰到任何問題,請關閉此選項.
此選項將在保存讀取後生效
+ 多重懷孕
+ 使用多重懷孕代替RJW的默認懷孕
+ 啟用異卵雙胞胎
+ 啟用複數個卵子可以個別受精
+ 啟用雙胞胎
+ 允許單個卵子產生多個後代
+ 雙胞胎出現率
+ 設置雙胞胎的出現率
+ 最大雙胞胎數量
+ 設置最大雙胞胎數量
+
+ 清洗陰道
+
+
\ No newline at end of file
diff --git a/1.3/Languages/English/Keyed/RJW_Menstruation.xml b/1.3/Languages/English/Keyed/RJW_Menstruation.xml
new file mode 100644
index 0000000..b01d614
--- /dev/null
+++ b/1.3/Languages/English/Keyed/RJW_Menstruation.xml
@@ -0,0 +1,105 @@
+
+
+ RJW Menstruation Cycle
+
+ menstrual blood
+ Empty
+ Follicular
+ Ovulation
+ Luteal
+ In period
+ Luteal
+ Pregnant
+ Recovering from birth
+ None
+ Climacteric
+ Anestrus
+ Status
+ Lactate self
+ State
+ Fetus
+ Father
+ Cum list
+ Fertilized
+ Fertilizing
+ Ovulation
+
+
+
+ enable womb icon
+ enable button in health tab
+ enable animal cycle
+ simulate animal's cycle.
this option will apply after save loaded
not recommended
+ implantation chance
+ set implantation chance of fertilized egg
this value determines finalizing chacne of impregnation
+ fertilization chance
+ set fertilize chance of 1mL of sperm on every hour
this value determines beginning chance of impregnation
+ cum decay ratio per hour
+ cum will decrease about this ratio
this value affects on the fertility chacne indirectly
+ cum fertility decay ratio per hour
+ cum will lose fertility about this ratio
this value affects on the fertility chance indirectly
estimated sperm lifespan: cum lose most of fertility at this time.
+ cycle accelerate
+ accelerate menstrution cycle
+ Debug
+ show debug informations.
+ womb status
+ draw womb icon in status window
+ vagina and breast status
+ draw vagina, anus and breast icon in status window
+ Fetus information level
+ Show all informations about fetus
+ Show all informations about fetus after noticed pregnancy
+ Do not show informations about fetus, but display image of fetus after noticed pregnancy
+ Do not show fetus image and informations
+ enable menopause
+ enable menopause effect that makes pawn infertile in time progress
if you have problems with long life races, turn off this option.
this option will apply after save loaded
+ use multiple pregnancy
+ use multiple pregnancy instead RJW's default pregnancy
disable this option if you are in trouble with impregnation
+ enable hetero ovular twins
+ enable multiple eggs can get pregnant
+ enable enzygotic twins
+ enable single egg to result multiple offsprings
+ enzygotic twins chance
+ set chance of twins
+ max enzygotic twins
+ set max number of twins
+ enable egg overlay
+ enable egg overlay on womb icon
+ bleeding amount
+ estimated total bleeding amount
+ set bleeding amount
actual bleeding amount can be different depending on vagina
the generic bleeding amount of human female is about 20~80ml per month
+ Colonist
+ Prisoner
+ Ally Faction
+ Neutral
+ Hostile Faction
+ target pawns
+ the gizmo and button will appear for these pawns
+ use hybrid extension
+ overrides RJW and RaceSupport's hybrid definition
Dominant hybrid extension determines whose definition used first. Not recommended to change this
+ Dominant hybrid extension
+ Mother
+ Father
+ Transition variance of nipples after pregnancy
+ Set how much nipples/areolas be darker/wider on every pregnancy.
+ Permanent transition variance of Nipples
+ Set how much nipples/areolas be darker/wider permanently on every pregnancy.
+ Maximum transition
+ Nipples/areolas won't be darker/wider than this value.
+ Transition speed of nipples
+ Set speed of transition of nipples/areolas.
1 = instant transition
+ Customize Hybrids
+ Open custom hybrid editor.
This will overrides hybrid definitions of XML files.
+ Allow shrink icon
+ Let icon become smaller If needed.
+ estimated sperm lifespan
+ The chance of pregnancy of fertilized egg.
The white overlay is indicates fertilization chance of sperms in womb.
+
+ Vaginal washing
+
+ Custom Hybrid Editor
+ Hybrids of {0}
+ When {0} breed with {1}, {2} will be born at {3} chance.
If both races have hybrid definitions for each other, the father's definition will be used.
+
+
+
\ No newline at end of file
diff --git a/1.3/Languages/Korean/DefInjected/ApparelLayerDef/RJWMenstruation.xml b/1.3/Languages/Korean/DefInjected/ApparelLayerDef/RJWMenstruation.xml
new file mode 100644
index 0000000..9c687e3
--- /dev/null
+++ b/1.3/Languages/Korean/DefInjected/ApparelLayerDef/RJWMenstruation.xml
@@ -0,0 +1,4 @@
+
+
+ 성기
+
\ No newline at end of file
diff --git a/1.3/Languages/Korean/DefInjected/HediffDef/RJWMenstruation.xml b/1.3/Languages/Korean/DefInjected/HediffDef/RJWMenstruation.xml
new file mode 100644
index 0000000..02a1238
--- /dev/null
+++ b/1.3/Languages/Korean/DefInjected/HediffDef/RJWMenstruation.xml
@@ -0,0 +1,26 @@
+
+
+ 생리통
+ 생리중입니다.
+ 불편함
+ 짜증남
+ 아픔
+ 고통스러움
+ 갱년기
+ 갱년기입니다.
+ 초기
+ 중기
+ 후기
+ 폐경
+ 폐경
+ 임신할수 없습니다.
+ 발정기
+ 발정기입니다.
+ 발정기(숨김)
+ 발정기입니다.
+ 진통제
+ 약간의 고통을 줄여줍니다.
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Languages/Korean/DefInjected/JobDef/RJWMenstruation.xml b/1.3/Languages/Korean/DefInjected/JobDef/RJWMenstruation.xml
new file mode 100644
index 0000000..67ae283
--- /dev/null
+++ b/1.3/Languages/Korean/DefInjected/JobDef/RJWMenstruation.xml
@@ -0,0 +1,7 @@
+
+
+ 질세척 하는중
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Languages/Korean/DefInjected/RecipeDef/BreastSurgeries.xml b/1.3/Languages/Korean/DefInjected/RecipeDef/BreastSurgeries.xml
new file mode 100644
index 0000000..8c501f4
--- /dev/null
+++ b/1.3/Languages/Korean/DefInjected/RecipeDef/BreastSurgeries.xml
@@ -0,0 +1,15 @@
+
+
+ 유륜확대 수술
+ 유륜을 크게만듭니다.
+ 유륜확대 수술중
+ 유륜축소 수술
+ 유륜을 작게만듭니다.
+ 유륜축소 수술중
+ 유두확대 수술
+ 유두를 크게만듭니다.
+ 유두확대 수술중
+ 유두축소 수술
+ 유두를 작게만듭니다.
+ 유두축소 수술중
+
\ No newline at end of file
diff --git a/1.3/Languages/Korean/DefInjected/RecordDef/RJWMenstruation.xml b/1.3/Languages/Korean/DefInjected/RecordDef/RJWMenstruation.xml
new file mode 100644
index 0000000..b807e13
--- /dev/null
+++ b/1.3/Languages/Korean/DefInjected/RecordDef/RJWMenstruation.xml
@@ -0,0 +1,5 @@
+
+
+ 질내사정
+ 질내사정당한 정액 양
+
\ No newline at end of file
diff --git a/1.3/Languages/Korean/DefInjected/StatDef/RJWMenstruation.xml b/1.3/Languages/Korean/DefInjected/StatDef/RJWMenstruation.xml
new file mode 100644
index 0000000..f92112e
--- /dev/null
+++ b/1.3/Languages/Korean/DefInjected/StatDef/RJWMenstruation.xml
@@ -0,0 +1,7 @@
+
+
+ 흡수량
+ 액체를 흡수할수 있는 정도입니다.
+
+
+
\ No newline at end of file
diff --git a/1.3/Languages/Korean/DefInjected/ThingDef/RJWMenstruation.xml b/1.3/Languages/Korean/DefInjected/ThingDef/RJWMenstruation.xml
new file mode 100644
index 0000000..c48a975
--- /dev/null
+++ b/1.3/Languages/Korean/DefInjected/ThingDef/RJWMenstruation.xml
@@ -0,0 +1,20 @@
+
+
+ 탐폰
+ 보지에서 나오는 액체를 흡수하는 탐폰입니다.
오래 착용하고 있을 경우 감염이 발생할수도 있습니다.
+ 더러운 탐폰
+ 사용된 축축한 탐폰입니다.
+ 생리대
+ 보지에서 나오는 액체를 흡수하는 생리대입니다.
흡수량 이상의 액체가 나올경우 샐수있습니다.
+ 젖은 생리대
+ 사용된 축축한 생리대입니다.
+ 난소 재생약
+ 난소를 재생시켜 배출할수있는 난자의 양을 증가시킵니다.
난자 소모량이 클수록 효과가 줄어듭니다.
폐경을 회복시키지 않습니다.
+ 과배란 유도제
+ 과배란을 유도하는 약물입니다.
조기폐경을 초래할수도 있습니다.
+ 진통제
+ 하루동안 약간의 통증을 줄여줍니다.
+ 혼합물
+
+
+
\ No newline at end of file
diff --git a/1.3/Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml b/1.3/Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml
new file mode 100644
index 0000000..046a17e
--- /dev/null
+++ b/1.3/Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml
@@ -0,0 +1,29 @@
+
+
+ 가랑이가 축축함
+ 찝찝해...
+ {0}에게 질내사정당함
+ 임신할까봐 걱정돼...
+ {0}에게 질내사정당함
+ 확률은 낮겠지만 임신할까봐 걱정돼...
+ {0}에게 질내사정당함
+ 임신할것 같아
+ {0}에게 질내사정당함
+ 좋았어...
+ {0}에게 질내사정함
+ 질싸를하니 기분이 좋네
+ {0}에게 질내사정당함
+ 그새끼의 자식을 임신하고 싶지 않아...
+ {0}에게 질내사정당함
+ 안전일이였지만 기분나빠
+ {0}에게 질내사정함
+ 그년한테 질싸를했어
+ 원치않은 임신
+ 어떻게 해야하지?... 그년한테 질싸를했어
+ 원치않은 임신
+ 어떻게 해야하지?...
+ 피임약 복용
+ 괜찮을거야
+ 피임약 복용
+ 임신하고싶어
+
\ No newline at end of file
diff --git a/1.3/Languages/Korean/Keyed/RJW_Menstruation.xml b/1.3/Languages/Korean/Keyed/RJW_Menstruation.xml
new file mode 100644
index 0000000..196a6a6
--- /dev/null
+++ b/1.3/Languages/Korean/Keyed/RJW_Menstruation.xml
@@ -0,0 +1,104 @@
+
+
+ RJW Menstruation Cycle
+
+ 생리혈
+ 없음
+ 난포기
+ 배란
+ 황체기
+ 생리중
+ 황체기
+ 임신
+ 회복기
+ 없음
+ 갱년기
+ 휴지기
+ 상태창
+ 모유 짜기
+ 상태
+ 태아
+ 부
+ 정액목록
+ 수정됨
+ 수정중
+ 배란
+
+
+
+ 자궁아이콘 활성화
+ 건강탭에 버튼 추가
+ 동물주기 활성화
+ 동물의 월경주기를 시뮬레이션합니다.
변경한후에 세이브로드가 필요합니다.
not recommended
+ 착상확률
+ 수정란의 착상확률을 설정합니다.
+ 수정확률
+ 1시간마다 정자가 난자를 수정시킬확률을 설정합니다.
+ 시간당 정액배출비율
+ 이 비율만큼 매 시간마다 정액이 배출됩니다.
+ 시간당 정자 사망비율
+ 이 비율만큼 매 시간마다 정자가 사망해 정액이 생식능력을 잃습니다.
정자 예상수명: 정액이 대부분의 생식능력을 잃는 시간입니다.
+ 주기 가속
+ 월경주기를 더 빠르게합니다.
+ Debug
+ 디버그정보를 보여줍니다.
+ 자궁 그림
+ 상태창에 자궁그림을 표시합니다.
+ 가슴, 보지 그림
+ 상태창에 가슴, 보지와 항문그림을 표시합니다.
+ 태아 정보
+ 태아에 대한 모든 정보를 표시합니다.
+ 임신을 발견한 이후에 태아에 대한 모든 정보를 표시합니다.
+ 태아에 대한 정보를 표시하지 않지만, 임신한 이후 태아이미지를 표시합니다.
+ 태아에 대한 어떠한 정보도 표시하지 않습니다.
+ 폐경기 활성화
+ 시간이 지남에따라 불임상태로 만드는 폐경기를 활성화합니다.
수명이 긴 종족을 사용할때 문제가 있으면 이 옵션을 끄세요.
변경한후에 세이브로드가 필요합니다.
+ 다중임신
+ RJW의 기본임신 대신 다중임신을 사용합니다.
+ 이란성 쌍둥이 활성화
+ 다수의 난자가 임신으로 이어지게 합니다.
+ 일란성 쌍둥이 활성화
+ 하나의 난자가 다수의 태아로 나뉘게 합니다.
+ 일란성 쌍둥이 확률
+ 일란성 쌍둥이가 발생할 확률을 설정합니다.
+ 최대 일란성 쌍둥이 수
+ 일란성 쌍둥이의 수를 제한합니다.
+ 난자 오버레이
+ 자궁그림 위에 난자그림를 표시합니다.
+ 생리양
+ 예상되는 총 생리양
+ 생리혈의 양을 설정합니다.
실제 생리양은 보지에따라 다를수 있습니다.
일반적인 인간 여성의 생리량은 약 20~80ml입니다.
+ 정착민
+ 죄수
+ 동맹관계
+ 중립
+ 적대관계
+ 표시 대상
+ 아이콘과 버튼을 표시할 대상입니다.
+ 잡종 정의 대체
+ RJW와 RaceSupport의 잡종정의를 대체합니다.
우선순위는 누구의 잡종 정의를 우선으로 사용할지 정합니다. 변경하지 않는것을 추천합니다.
+ 우선순위
+ 모
+ 부
+ 임신후 유두 변화량
+ 임신후에 유두가 얼마나 어두워지고 커지는지 설정합니다.
+ 유두 영구변화량
+ 매번 임신할때마다 유두가 얼마나 영구적으로 어두워지고 커지는지 설정합니다.
+ 최대 변화량
+ 유두는 이 값 이상으로 변하지 않습니다.
+ 유두 변화 속도
+ 유두가 얼마나 빨리 변하는지 설정합니다.
+ 잡종 정의 변경하기
+ 사용자 지정 잡종 편집기를 엽니다.
이 설정은 XML파일의 잡종 정의를 대체합니다.
+ 아이콘 축소 허용
+ 아이콘 축소를 허용합니다.
+ 정자 예상수명
+ 수정란이 임신으로 진행될 확률입니다.
흰색 오버레이는 정자가 난자를 수정시킬 확률을 표시하는 것입니다.
+
+ 질세척
+
+ 사용자 지정 잡종 편집기
+ {0}의 잡종설정
+ {0}이(가) {1}와(과) 교미했을 때, {2}이(가) {3}의 확률로 태어납니다.
만약 두 종족이 서로에 대한 잡종 정의가 있을경우 아버지 쪽의 정의가 우선적으로 사용됩니다.
+
+
\ No newline at end of file
diff --git a/MilkModule/Assemblies/MilkModule.dll b/1.3/MilkModule/1.2/Assemblies/MilkModule.dll
similarity index 100%
rename from MilkModule/Assemblies/MilkModule.dll
rename to 1.3/MilkModule/1.2/Assemblies/MilkModule.dll
diff --git a/MilkModule/Defs/JobDefs/Jobs_MilkSelf_MC.xml b/1.3/MilkModule/1.2/Defs/JobDefs/Jobs_MilkSelf_MC.xml
similarity index 100%
rename from MilkModule/Defs/JobDefs/Jobs_MilkSelf_MC.xml
rename to 1.3/MilkModule/1.2/Defs/JobDefs/Jobs_MilkSelf_MC.xml
diff --git a/1.3/MilkModule/Assemblies/MilkModule.dll b/1.3/MilkModule/Assemblies/MilkModule.dll
new file mode 100644
index 0000000..c2cbfc8
Binary files /dev/null and b/1.3/MilkModule/Assemblies/MilkModule.dll differ
diff --git a/1.3/MilkModule/Defs/JobDefs/Jobs_MilkSelf_MC.xml b/1.3/MilkModule/Defs/JobDefs/Jobs_MilkSelf_MC.xml
new file mode 100644
index 0000000..69cdc4d
--- /dev/null
+++ b/1.3/MilkModule/Defs/JobDefs/Jobs_MilkSelf_MC.xml
@@ -0,0 +1,9 @@
+
+
+
+ LactateSelf_MC
+ MilkModule.JobDriver_MilkSelf_MC
+ lactating self
+ true
+
+
diff --git a/1.3/Patches/Drugs.xml b/1.3/Patches/Drugs.xml
new file mode 100644
index 0000000..ff03d15
--- /dev/null
+++ b/1.3/Patches/Drugs.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ Defs/ThingDef[defName="RJW_FertPill"]/ingestible/outcomeDoers
+
+
+
+
+
+
+ Defs/ThingDef[defName="RJW_Contraceptive"]/ingestible/outcomeDoers
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Patches/Hediffs_PrivateParts.xml b/1.3/Patches/Hediffs_PrivateParts.xml
new file mode 100644
index 0000000..7a316c3
--- /dev/null
+++ b/1.3/Patches/Hediffs_PrivateParts.xml
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="Vagina"]
+
+
+
+ 10
+ 1.0
+ 1.0
+ 0.05
+ 14
+ 14
+ 6
+ 30
+ 1
+ Womb/Womb
+ Genitals/Vagina
+ 420
+ true
+
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="GenericVagina"]
+
+
+
+ 10
+ 1.0
+ 1.0
+ 0.05
+ 14
+ 14
+ 0
+ 30
+ 3
+ Womb/Womb
+ Genitals/Vagina
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="HydraulicVagina"]
+
+
+
+ 10
+ Womb/Womb
+ Genitals/BionicVagina
+ true
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="BionicVagina"]
+
+
+
+ 10
+ Womb/Womb
+ Genitals/BionicVagina
+ true
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="ArchotechVagina"]
+
+
+
+ 10
+ 2.0
+ 2.0
+ 0.05
+ 14
+ 14
+ 0
+ 0
+ 3
+ Womb/Womb
+ Genitals/Vagina
+ true
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="Anus"]
+
+
+
+ Genitals/Anal
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="HydraulicAnus"]
+
+
+
+ Genitals/BionicAnal
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="BionicAnus"]
+
+
+
+ Genitals/BionicAnal
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="ArchotechAnus"]
+
+
+
+ Genitals/Anal
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Patches/Hediffs_PrivateParts_Animal.xml b/1.3/Patches/Hediffs_PrivateParts_Animal.xml
new file mode 100644
index 0000000..adfb808
--- /dev/null
+++ b/1.3/Patches/Hediffs_PrivateParts_Animal.xml
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="DogVagina"]
+
+
+
+ 8
+ 1.0
+ 1.0
+ 0.05
+ 14
+ 166
+ 8
+ 15
+ 4
+ Womb/Womb
+ Genitals/Vagina
+ 9
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="CatVagina"]
+
+
+
+ 6
+ 1.0
+ 2.0
+ 0.05
+ 9
+ 10
+ 0
+ 15
+ 1
+ Womb/Womb
+ Genitals/Vagina
+ FirstHalf
+ 9
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="HorseVagina"]
+
+
+
+ 25
+ 1.0
+ 1.0
+ 0.05
+ 7
+ 14
+ 0
+ 30
+ 1
+ Womb/Womb
+ Genitals/Vagina
+ FirstHalf
+ 5
+
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="DragonVagina"]
+
+
+
+ 50
+ 0.5
+ 0.2
+ 0.05
+ 270
+ 30
+ 0
+ 300
+ 30
+ Womb/Womb
+ Genitals/Vagina
+ 0
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="NarrowVagina"]
+
+
+
+ 10
+ 1.0
+ 1.0
+ 0.05
+ 5
+ 16
+ 0
+ 15
+ 2
+ Womb/Womb
+ Genitals/Vagina
+ 1
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="RodentVagina"]
+
+
+
+ 5
+ 1.0
+ 2.0
+ 0.05
+ 6
+ 9
+ 0
+ 3
+ 1
+ Womb/Womb
+ Genitals/Vagina
+ 6
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="SlimeVagina"]
+
+
+
+ 5
+ 2.0
+ 2.0
+ 0.05
+ 12
+ 9
+ 0
+ 3
+ 1
+ Womb/Womb
+ Genitals/Vagina
+ 6
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="DemonVagina"]
+
+
+
+ 10
+ 2.0
+ 2.0
+ 0.05
+ 14
+ 14
+ 0
+ 3
+ 1
+ Womb/Womb
+ Genitals/Vagina
+ 6
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Patches/Hediffs_PrivateParts_Breasts.xml b/1.3/Patches/Hediffs_PrivateParts_Breasts.xml
new file mode 100644
index 0000000..b3ad1e3
--- /dev/null
+++ b/1.3/Patches/Hediffs_PrivateParts_Breasts.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="Breasts"]
+
+
+
+ Breasts/Breast
+ (55,20,0)
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="HydraulicBreasts"]
+
+
+
+ Breasts/Breast
+ (55,20,0)
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="BionicBreasts"]
+
+
+
+ Breasts/Breast
+ (55,20,0)
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="ArchotechBreasts"]
+
+
+
+ Breasts/Breast
+ (55,20,0)
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="SlimeBreasts"]
+
+
+
+ Breasts/Breast
+ (55,20,0)
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Patches/Item_Resource_Stuffs.xml b/1.3/Patches/Item_Resource_Stuffs.xml
new file mode 100644
index 0000000..9a4a571
--- /dev/null
+++ b/1.3/Patches/Item_Resource_Stuffs.xml
@@ -0,0 +1,38 @@
+
+
+
+
+ Defs/ThingDef[defName="Cloth"]/stuffProps/statFactors
+
+ 1.0
+
+
+
+
+ Defs/ThingDef[defName="Synthread"]/stuffProps/statFactors
+
+ 2.0
+
+
+
+
+ Defs/ThingDef[defName="DevilstrandCloth"]/stuffProps/statFactors
+
+ 0.5
+
+
+
+
+ Defs/ThingDef[defName="Hyperweave"]/stuffProps/statFactors
+
+ 0.25
+
+
+
+
+ Defs/ThingDef[@Name="WoolBase"]/stuffProps/statFactors
+
+ 1.5
+
+
+
\ No newline at end of file
diff --git a/1.3/Patches/MilkPatch.xml b/1.3/Patches/MilkPatch.xml
new file mode 100644
index 0000000..5097577
--- /dev/null
+++ b/1.3/Patches/MilkPatch.xml
@@ -0,0 +1,17 @@
+
+
+
+ /Defs/ThingDef[defName="HumanMilk" or defName="HumanoidMilk"]/graphicData
+
+ /Defs/ThingDef[defName="HumanMilk" or defName="HumanoidMilk"]/graphicData
+
+
+ Things/Item/Milkbottle
+ Graphic_StackCount
+
+
+
+
+
+
+
diff --git a/1.3/Patches/PawnModExtensions_Animals.xml b/1.3/Patches/PawnModExtensions_Animals.xml
new file mode 100644
index 0000000..0a7547b
--- /dev/null
+++ b/1.3/Patches/PawnModExtensions_Animals.xml
@@ -0,0 +1,215 @@
+
+
+
+
+
+
+ Defs/ThingDef[@Name="BigBirdThingBase"]
+
+
+ Fetus/Birds/Fetus_Bird
+ (255,255,255,255)
+ 0.2
+
+
+
+
+
+
+
+ Defs/ThingDef[defName="Chicken"]
+
+
+ Fetus/Birds/Fetus_Bird
+ (255,255,255,255)
+ 0.2
+
+
+
+
+
+
+
+ Defs/ThingDef[defName="Duck"]
+
+
+ Fetus/Birds/Fetus_Bird
+ (255,255,255,255)
+ 0.2
+
+
+
+
+
+
+
+ Defs/ThingDef[defName="Goose"]
+
+
+ Fetus/Birds/Fetus_Bird
+ (255,255,255,255)
+ 0.2
+
+
+
+
+
+
+
+ Defs/ThingDef[defName="YorkshireTerrier"]
+
+
+ Fetus/Canines/Fetus_Dog
+ (255,255,255,255)
+ 0.05
+
+
+
+
+
+
+
+
+ Defs/ThingDef[defName="Husky"]
+
+
+ Fetus/Canines/Fetus_Dog
+ (255,255,255,255)
+ 0.05
+
+
+
+
+
+
+
+ Defs/ThingDef[defName="LabradorRetriever"]
+
+
+ Fetus/Canines/Fetus_Dog
+ (255,255,255,255)
+ 0.05
+
+
+
+
+
+
+
+ Defs/ThingDef[defName="YorkshireTerrier"]
+
+
+ Fetus/Canines/Fetus_Dog
+ (255,255,255,255)
+ 0.05
+
+
+
+
+
+
+
+
+ Defs/ThingDef[defName="Warg"]
+
+
+ Fetus/Canines/Fetus_Dog
+ (255,255,255,255)
+ 0.05
+
+
+
+
+
+
+
+ Defs/ThingDef[@Name="ThingBaseWolf"]
+
+
+ Fetus/Canines/Fetus_Dog
+ (255,255,255,255)
+ 0.05
+
+
+
+
+
+
+
+ Defs/ThingDef[@Name="ThingBaseFox"]
+
+
+ Fetus/Canines/Fetus_Dog
+ (255,255,255,255)
+ 0.05
+
+
+
+
+
+
+
+ Defs/ThingDef[defName="Pig"]
+
+
+ Fetus/Livestocks/Fetus_Pig
+ (255,255,255,255)
+ 0.8
+
+
+
+
+
+
+
+ Defs/ThingDef[defName="WildBoar"]
+
+
+ Fetus/Livestocks/Fetus_Pig
+ (255,255,255,255)
+ 0.8
+
+
+
+
+
+
+
+ Defs/ThingDef[@Name="BaseInsect"]
+
+
+ Fetus/Insects/Fetus_Insect
+ (153,212,89,255)
+ 0.5
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Patches/PawnModExtentions.xml b/1.3/Patches/PawnModExtentions.xml
new file mode 100644
index 0000000..1942869
--- /dev/null
+++ b/1.3/Patches/PawnModExtentions.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+ Defs/ThingDef[defName="Human"]
+
+
+ Fetus/Fetus_Default
+ (255,255,255,255)
+ 0.2
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/RJW Menstruation Race Support/About/About.xml b/1.3/RJW Menstruation Race Support/About/About.xml
new file mode 100644
index 0000000..b3aa6ce
--- /dev/null
+++ b/1.3/RJW Menstruation Race Support/About/About.xml
@@ -0,0 +1,26 @@
+
+
+ RJW Menstruation Cycle Race Support
+ a
+
+ 1.2
+
+
+
+ rjw.menstruation
+ RJW Menstruation
+ https://github.com/moreoreganostodump/RJW_Menstruation
+
+
+ Abraxas.RJW.RaceSupport
+ RJW - RaceSupport
+ https://gitgud.io/Abraxas/rjw-race-support
+
+
+
+ Abraxas.RJW.RaceSupport
+ rjw.menstruation
+
+ rjw.menstruation.racesupport
+ good good
+
\ No newline at end of file
diff --git a/1.3/RJW Menstruation Race Support/About/Manifest.xml b/1.3/RJW Menstruation Race Support/About/Manifest.xml
new file mode 100644
index 0000000..1904137
--- /dev/null
+++ b/1.3/RJW Menstruation Race Support/About/Manifest.xml
@@ -0,0 +1,12 @@
+
+
+ RJW Menstruation Race Support
+ 8.9.0
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Animal_RaceSupport.xml b/1.3/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Animal_RaceSupport.xml
new file mode 100644
index 0000000..eb7c72c
--- /dev/null
+++ b/1.3/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Animal_RaceSupport.xml
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="CervineVagina"]
+
+
+
+ 18
+ 1.0
+ 1.0
+ 0.05
+ 10
+ 10
+ 4
+ 30
+ 2
+ Womb/Womb
+ Genitals/Vagina
+ SecondHalf
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="CactoidVagina"]
+
+
+
+ 8
+ 1.0
+ 1.0
+ 0.05
+ 8
+ 12
+ 0
+ 0
+ 2
+ Womb/Womb
+ Genitals/Vagina
+ Summer
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="TreeVagina"]
+
+
+
+ 15
+ 1.0
+ 1.0
+ 0.05
+ 10
+ 12
+ 0
+ 30
+ 2
+ Womb/Womb
+ Genitals/Vagina
+ Fall
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="PistilVagina"]
+
+
+
+ 8
+ 1.0
+ 1.0
+ 0.05
+ 6
+ 12
+ 0
+ 30
+ 2
+ Womb/Womb
+ Genitals/Vagina
+ Fall
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="NephilaSlimeVagina"]
+
+
+
+ 12
+ 1.0
+ 1.0
+ 0.05
+ 14
+ 20
+ 0
+ 30
+ 8
+ Womb/Womb
+ Genitals/Vagina
+
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="GhostVagina"]
+
+
+
+ 2
+ 0.1
+ 0.1
+ 0.05
+ 14
+ 14
+ 0
+ 0
+ 1
+ Womb/Womb
+ Genitals/Vagina
+ true
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="NecroVagina"]
+
+
+
+ 10
+ 0.1
+ 0.1
+ 0.05
+ 14
+ 14
+ 0
+ 0
+ 1
+ Womb/Womb
+ Genitals/Vagina
+ true
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Breasts_RaceSupport.xml b/1.3/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Breasts_RaceSupport.xml
new file mode 100644
index 0000000..e2c5708
--- /dev/null
+++ b/1.3/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Breasts_RaceSupport.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="BigRaceBreats"]
+
+
+
+ Breasts/Breast
+ (55,20,0)
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="OrcBreasts"]
+
+
+
+ Breasts/Breast
+ (55,20,0)
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="GhoulBreasts"]
+
+
+
+ Breasts/Breast
+ (55,20,0)
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="GhostBreasts"]
+
+
+
+ Breasts/Breast
+ (55,20,0)
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="NecroBreasts"]
+
+
+
+ Breasts/Breast
+ (55,20,0)
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="NephilaBreasts"]
+
+
+
+ Breasts/Breast
+ (55,20,0)
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="NephilaSlimeBreasts"]
+
+
+
+ Breasts/Breast
+ (55,20,0)
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Humanlike_RaceSupport.xml b/1.3/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Humanlike_RaceSupport.xml
new file mode 100644
index 0000000..d7fc0fc
--- /dev/null
+++ b/1.3/RJW Menstruation Race Support/Patches/Hediffs_PrivateParts_Humanlike_RaceSupport.xml
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="ElfVagina"]
+
+
+
+ 10
+ 1.0
+ 1.0
+ 0.05
+ 1800
+ 1800
+ 6
+ 30
+ 1
+ Womb/Womb
+ Genitals/Vagina
+ 620
+ true
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="ElfAnus"]
+
+
+
+ Genitals/Anal
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="OrcVagina"]
+
+
+
+ 10
+ 1.0
+ 1.0
+ 0.05
+ 7
+ 10
+ 0
+ 10
+ 1
+ Womb/Womb
+ Genitals/Vagina
+ 620
+ true
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="OrcAnus"]
+
+
+
+ Genitals/Anal
+
+
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="GhoulVagina"]
+
+
+
+ 10
+ 0.2
+ 0.2
+ 0.05
+ 14
+ 14
+ 0
+ 10
+ 1
+ Womb/Womb
+ Genitals/Vagina
+ 420
+ true
+
+
+
+
+
+
+ Defs/rjw.HediffDef_PartBase[defName="GhoulAnus"]
+
+
+
+ Genitals/Anal
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/Textures/Breasts/Breast_Breast00.png b/1.3/Textures/Breasts/Breast_Breast00.png
new file mode 100644
index 0000000..beda441
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast00.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast00_Areola00.png b/1.3/Textures/Breasts/Breast_Breast00_Areola00.png
new file mode 100644
index 0000000..be79e56
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast00_Areola00.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast00_Areola01.png b/1.3/Textures/Breasts/Breast_Breast00_Areola01.png
new file mode 100644
index 0000000..c42ee6f
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast00_Areola01.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast00_Areola02.png b/1.3/Textures/Breasts/Breast_Breast00_Areola02.png
new file mode 100644
index 0000000..8598345
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast00_Areola02.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast00_Areola03.png b/1.3/Textures/Breasts/Breast_Breast00_Areola03.png
new file mode 100644
index 0000000..9dbd415
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast00_Areola03.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast00_Areola04.png b/1.3/Textures/Breasts/Breast_Breast00_Areola04.png
new file mode 100644
index 0000000..9dbd415
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast00_Areola04.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast00_Nipple00.png b/1.3/Textures/Breasts/Breast_Breast00_Nipple00.png
new file mode 100644
index 0000000..13d7e47
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast00_Nipple00.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast00_Nipple01.png b/1.3/Textures/Breasts/Breast_Breast00_Nipple01.png
new file mode 100644
index 0000000..f845647
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast00_Nipple01.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast00_Nipple02.png b/1.3/Textures/Breasts/Breast_Breast00_Nipple02.png
new file mode 100644
index 0000000..e3aa6ce
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast00_Nipple02.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast00_Nipple03.png b/1.3/Textures/Breasts/Breast_Breast00_Nipple03.png
new file mode 100644
index 0000000..45a1d9c
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast00_Nipple03.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast01.png b/1.3/Textures/Breasts/Breast_Breast01.png
new file mode 100644
index 0000000..c54c8c8
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast01.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast01_Areola00.png b/1.3/Textures/Breasts/Breast_Breast01_Areola00.png
new file mode 100644
index 0000000..5b401c5
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast01_Areola00.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast01_Areola01.png b/1.3/Textures/Breasts/Breast_Breast01_Areola01.png
new file mode 100644
index 0000000..46f6d83
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast01_Areola01.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast01_Areola02.png b/1.3/Textures/Breasts/Breast_Breast01_Areola02.png
new file mode 100644
index 0000000..025df96
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast01_Areola02.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast01_Areola03.png b/1.3/Textures/Breasts/Breast_Breast01_Areola03.png
new file mode 100644
index 0000000..7461883
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast01_Areola03.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast01_Areola04.png b/1.3/Textures/Breasts/Breast_Breast01_Areola04.png
new file mode 100644
index 0000000..7461883
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast01_Areola04.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast01_Nipple00.png b/1.3/Textures/Breasts/Breast_Breast01_Nipple00.png
new file mode 100644
index 0000000..a0471b8
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast01_Nipple00.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast01_Nipple01.png b/1.3/Textures/Breasts/Breast_Breast01_Nipple01.png
new file mode 100644
index 0000000..65cdafd
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast01_Nipple01.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast01_Nipple02.png b/1.3/Textures/Breasts/Breast_Breast01_Nipple02.png
new file mode 100644
index 0000000..95bb135
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast01_Nipple02.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast01_Nipple03.png b/1.3/Textures/Breasts/Breast_Breast01_Nipple03.png
new file mode 100644
index 0000000..9b4c8b0
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast01_Nipple03.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast02.png b/1.3/Textures/Breasts/Breast_Breast02.png
new file mode 100644
index 0000000..0932f21
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast02.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast02_Areola00.png b/1.3/Textures/Breasts/Breast_Breast02_Areola00.png
new file mode 100644
index 0000000..f858076
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast02_Areola00.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast02_Areola01.png b/1.3/Textures/Breasts/Breast_Breast02_Areola01.png
new file mode 100644
index 0000000..4789c27
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast02_Areola01.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast02_Areola02.png b/1.3/Textures/Breasts/Breast_Breast02_Areola02.png
new file mode 100644
index 0000000..697d89b
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast02_Areola02.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast02_Areola03.png b/1.3/Textures/Breasts/Breast_Breast02_Areola03.png
new file mode 100644
index 0000000..af901c4
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast02_Areola03.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast02_Areola04.png b/1.3/Textures/Breasts/Breast_Breast02_Areola04.png
new file mode 100644
index 0000000..af901c4
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast02_Areola04.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast02_Nipple00.png b/1.3/Textures/Breasts/Breast_Breast02_Nipple00.png
new file mode 100644
index 0000000..b3dea3e
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast02_Nipple00.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast02_Nipple01.png b/1.3/Textures/Breasts/Breast_Breast02_Nipple01.png
new file mode 100644
index 0000000..22491c0
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast02_Nipple01.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast02_Nipple02.png b/1.3/Textures/Breasts/Breast_Breast02_Nipple02.png
new file mode 100644
index 0000000..2fe26ca
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast02_Nipple02.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast02_Nipple03.png b/1.3/Textures/Breasts/Breast_Breast02_Nipple03.png
new file mode 100644
index 0000000..a0784f3
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast02_Nipple03.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast03.png b/1.3/Textures/Breasts/Breast_Breast03.png
new file mode 100644
index 0000000..fafd312
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast03.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast03_Areola00.png b/1.3/Textures/Breasts/Breast_Breast03_Areola00.png
new file mode 100644
index 0000000..16b8635
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast03_Areola00.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast03_Areola01.png b/1.3/Textures/Breasts/Breast_Breast03_Areola01.png
new file mode 100644
index 0000000..17403b5
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast03_Areola01.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast03_Areola02.png b/1.3/Textures/Breasts/Breast_Breast03_Areola02.png
new file mode 100644
index 0000000..2faf922
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast03_Areola02.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast03_Areola03.png b/1.3/Textures/Breasts/Breast_Breast03_Areola03.png
new file mode 100644
index 0000000..d1e9a2e
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast03_Areola03.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast03_Areola04.png b/1.3/Textures/Breasts/Breast_Breast03_Areola04.png
new file mode 100644
index 0000000..7934cf7
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast03_Areola04.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast03_Nipple00.png b/1.3/Textures/Breasts/Breast_Breast03_Nipple00.png
new file mode 100644
index 0000000..0328271
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast03_Nipple00.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast03_Nipple01.png b/1.3/Textures/Breasts/Breast_Breast03_Nipple01.png
new file mode 100644
index 0000000..b3e9763
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast03_Nipple01.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast03_Nipple02.png b/1.3/Textures/Breasts/Breast_Breast03_Nipple02.png
new file mode 100644
index 0000000..cc2815a
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast03_Nipple02.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast03_Nipple03.png b/1.3/Textures/Breasts/Breast_Breast03_Nipple03.png
new file mode 100644
index 0000000..c535d7c
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast03_Nipple03.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast04.png b/1.3/Textures/Breasts/Breast_Breast04.png
new file mode 100644
index 0000000..18617c0
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast04.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast04_Areola00.png b/1.3/Textures/Breasts/Breast_Breast04_Areola00.png
new file mode 100644
index 0000000..5d8b969
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast04_Areola00.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast04_Areola01.png b/1.3/Textures/Breasts/Breast_Breast04_Areola01.png
new file mode 100644
index 0000000..58928d4
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast04_Areola01.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast04_Areola02.png b/1.3/Textures/Breasts/Breast_Breast04_Areola02.png
new file mode 100644
index 0000000..a33ce42
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast04_Areola02.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast04_Areola03.png b/1.3/Textures/Breasts/Breast_Breast04_Areola03.png
new file mode 100644
index 0000000..6ffa519
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast04_Areola03.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast04_Areola04.png b/1.3/Textures/Breasts/Breast_Breast04_Areola04.png
new file mode 100644
index 0000000..88ec009
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast04_Areola04.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast04_Nipple00.png b/1.3/Textures/Breasts/Breast_Breast04_Nipple00.png
new file mode 100644
index 0000000..92a314e
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast04_Nipple00.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast04_Nipple01.png b/1.3/Textures/Breasts/Breast_Breast04_Nipple01.png
new file mode 100644
index 0000000..5bedd39
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast04_Nipple01.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast04_Nipple02.png b/1.3/Textures/Breasts/Breast_Breast04_Nipple02.png
new file mode 100644
index 0000000..9a0a009
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast04_Nipple02.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast04_Nipple03.png b/1.3/Textures/Breasts/Breast_Breast04_Nipple03.png
new file mode 100644
index 0000000..df459fe
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast04_Nipple03.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast05.png b/1.3/Textures/Breasts/Breast_Breast05.png
new file mode 100644
index 0000000..a47cd91
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast05.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast05_Areola00.png b/1.3/Textures/Breasts/Breast_Breast05_Areola00.png
new file mode 100644
index 0000000..cdbe3fe
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast05_Areola00.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast05_Areola01.png b/1.3/Textures/Breasts/Breast_Breast05_Areola01.png
new file mode 100644
index 0000000..47a2f3e
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast05_Areola01.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast05_Areola02.png b/1.3/Textures/Breasts/Breast_Breast05_Areola02.png
new file mode 100644
index 0000000..3806769
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast05_Areola02.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast05_Areola03.png b/1.3/Textures/Breasts/Breast_Breast05_Areola03.png
new file mode 100644
index 0000000..8d71895
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast05_Areola03.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast05_Areola04.png b/1.3/Textures/Breasts/Breast_Breast05_Areola04.png
new file mode 100644
index 0000000..7ed0605
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast05_Areola04.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast05_Nipple00.png b/1.3/Textures/Breasts/Breast_Breast05_Nipple00.png
new file mode 100644
index 0000000..381bf10
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast05_Nipple00.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast05_Nipple01.png b/1.3/Textures/Breasts/Breast_Breast05_Nipple01.png
new file mode 100644
index 0000000..319e916
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast05_Nipple01.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast05_Nipple02.png b/1.3/Textures/Breasts/Breast_Breast05_Nipple02.png
new file mode 100644
index 0000000..ba23c95
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast05_Nipple02.png differ
diff --git a/1.3/Textures/Breasts/Breast_Breast05_Nipple03.png b/1.3/Textures/Breasts/Breast_Breast05_Nipple03.png
new file mode 100644
index 0000000..bc3c0a4
Binary files /dev/null and b/1.3/Textures/Breasts/Breast_Breast05_Nipple03.png differ
diff --git a/1.3/Textures/Breasts/average_nip_2.png b/1.3/Textures/Breasts/average_nip_2.png
new file mode 100644
index 0000000..64dcf78
Binary files /dev/null and b/1.3/Textures/Breasts/average_nip_2.png differ
diff --git a/1.3/Textures/Breasts/average_nip_preg.png b/1.3/Textures/Breasts/average_nip_preg.png
new file mode 100644
index 0000000..b27916d
Binary files /dev/null and b/1.3/Textures/Breasts/average_nip_preg.png differ
diff --git a/1.3/Textures/Breasts/enormous_nip_gray.png b/1.3/Textures/Breasts/enormous_nip_gray.png
new file mode 100644
index 0000000..e89ebd2
Binary files /dev/null and b/1.3/Textures/Breasts/enormous_nip_gray.png differ
diff --git a/1.3/Textures/Breasts/enormous_nip_pink.png b/1.3/Textures/Breasts/enormous_nip_pink.png
new file mode 100644
index 0000000..7092748
Binary files /dev/null and b/1.3/Textures/Breasts/enormous_nip_pink.png differ
diff --git a/1.3/Textures/Breasts/enormous_nip_preg.png b/1.3/Textures/Breasts/enormous_nip_preg.png
new file mode 100644
index 0000000..2c2c232
Binary files /dev/null and b/1.3/Textures/Breasts/enormous_nip_preg.png differ
diff --git a/1.3/Textures/Breasts/enoromous_nip.png b/1.3/Textures/Breasts/enoromous_nip.png
new file mode 100644
index 0000000..b9336b0
Binary files /dev/null and b/1.3/Textures/Breasts/enoromous_nip.png differ
diff --git a/1.3/Textures/Breasts/huge_nip_preg.png b/1.3/Textures/Breasts/huge_nip_preg.png
new file mode 100644
index 0000000..778cfd2
Binary files /dev/null and b/1.3/Textures/Breasts/huge_nip_preg.png differ
diff --git a/1.3/Textures/Breasts/large_nip_2.png b/1.3/Textures/Breasts/large_nip_2.png
new file mode 100644
index 0000000..b0e654f
Binary files /dev/null and b/1.3/Textures/Breasts/large_nip_2.png differ
diff --git a/1.3/Textures/Breasts/large_nip_preg.png b/1.3/Textures/Breasts/large_nip_preg.png
new file mode 100644
index 0000000..de7d9dc
Binary files /dev/null and b/1.3/Textures/Breasts/large_nip_preg.png differ
diff --git a/1.3/Textures/Breasts/small_nip_2.png b/1.3/Textures/Breasts/small_nip_2.png
new file mode 100644
index 0000000..119551d
Binary files /dev/null and b/1.3/Textures/Breasts/small_nip_2.png differ
diff --git a/1.3/Textures/Breasts/small_nip_preg.png b/1.3/Textures/Breasts/small_nip_preg.png
new file mode 100644
index 0000000..2644ea3
Binary files /dev/null and b/1.3/Textures/Breasts/small_nip_preg.png differ
diff --git a/1.3/Textures/Breasts/tiny_nip.png b/1.3/Textures/Breasts/tiny_nip.png
new file mode 100644
index 0000000..6f51a84
Binary files /dev/null and b/1.3/Textures/Breasts/tiny_nip.png differ
diff --git a/1.3/Textures/Breasts/tiny_nip_2.png b/1.3/Textures/Breasts/tiny_nip_2.png
new file mode 100644
index 0000000..278fb1e
Binary files /dev/null and b/1.3/Textures/Breasts/tiny_nip_2.png differ
diff --git a/1.3/Textures/Breasts/tiny_nip_preg.png b/1.3/Textures/Breasts/tiny_nip_preg.png
new file mode 100644
index 0000000..a9d261c
Binary files /dev/null and b/1.3/Textures/Breasts/tiny_nip_preg.png differ
diff --git a/1.3/Textures/Eggs/Egg.png b/1.3/Textures/Eggs/Egg.png
new file mode 100644
index 0000000..8c10e1e
Binary files /dev/null and b/1.3/Textures/Eggs/Egg.png differ
diff --git a/1.3/Textures/Eggs/Egg_Fertilized00.png b/1.3/Textures/Eggs/Egg_Fertilized00.png
new file mode 100644
index 0000000..f613a47
Binary files /dev/null and b/1.3/Textures/Eggs/Egg_Fertilized00.png differ
diff --git a/1.3/Textures/Eggs/Egg_Fertilized01.png b/1.3/Textures/Eggs/Egg_Fertilized01.png
new file mode 100644
index 0000000..4d8a6fd
Binary files /dev/null and b/1.3/Textures/Eggs/Egg_Fertilized01.png differ
diff --git a/1.3/Textures/Eggs/Egg_Fertilized02.png b/1.3/Textures/Eggs/Egg_Fertilized02.png
new file mode 100644
index 0000000..cee7dc5
Binary files /dev/null and b/1.3/Textures/Eggs/Egg_Fertilized02.png differ
diff --git a/1.3/Textures/Eggs/Egg_Fertilizing00.png b/1.3/Textures/Eggs/Egg_Fertilizing00.png
new file mode 100644
index 0000000..7aa6375
Binary files /dev/null and b/1.3/Textures/Eggs/Egg_Fertilizing00.png differ
diff --git a/1.3/Textures/Eggs/Egg_Fertilizing01.png b/1.3/Textures/Eggs/Egg_Fertilizing01.png
new file mode 100644
index 0000000..9920103
Binary files /dev/null and b/1.3/Textures/Eggs/Egg_Fertilizing01.png differ
diff --git a/1.3/Textures/Eggs/Egg_Fertilizing02.png b/1.3/Textures/Eggs/Egg_Fertilizing02.png
new file mode 100644
index 0000000..2b7eecc
Binary files /dev/null and b/1.3/Textures/Eggs/Egg_Fertilizing02.png differ
diff --git a/1.3/Textures/Eggs/Egg_Implanted00.png b/1.3/Textures/Eggs/Egg_Implanted00.png
new file mode 100644
index 0000000..0fe1934
Binary files /dev/null and b/1.3/Textures/Eggs/Egg_Implanted00.png differ
diff --git a/1.3/Textures/Eggs/Eggs.zip b/1.3/Textures/Eggs/Eggs.zip
new file mode 100644
index 0000000..7d60763
Binary files /dev/null and b/1.3/Textures/Eggs/Eggs.zip differ
diff --git a/1.3/Textures/Fetus/Birds/Fetus_Bird00.png b/1.3/Textures/Fetus/Birds/Fetus_Bird00.png
new file mode 100644
index 0000000..5a2dcdf
Binary files /dev/null and b/1.3/Textures/Fetus/Birds/Fetus_Bird00.png differ
diff --git a/1.3/Textures/Fetus/Birds/Fetus_Bird01.png b/1.3/Textures/Fetus/Birds/Fetus_Bird01.png
new file mode 100644
index 0000000..7a71843
Binary files /dev/null and b/1.3/Textures/Fetus/Birds/Fetus_Bird01.png differ
diff --git a/1.3/Textures/Fetus/Birds/Fetus_Bird02.png b/1.3/Textures/Fetus/Birds/Fetus_Bird02.png
new file mode 100644
index 0000000..839e29e
Binary files /dev/null and b/1.3/Textures/Fetus/Birds/Fetus_Bird02.png differ
diff --git a/1.3/Textures/Fetus/Birds/Fetus_Bird03.png b/1.3/Textures/Fetus/Birds/Fetus_Bird03.png
new file mode 100644
index 0000000..c3526db
Binary files /dev/null and b/1.3/Textures/Fetus/Birds/Fetus_Bird03.png differ
diff --git a/1.3/Textures/Fetus/Birds/Fetus_Bird04.png b/1.3/Textures/Fetus/Birds/Fetus_Bird04.png
new file mode 100644
index 0000000..1ff0f11
Binary files /dev/null and b/1.3/Textures/Fetus/Birds/Fetus_Bird04.png differ
diff --git a/1.3/Textures/Fetus/Birds/Fetus_Bird05.png b/1.3/Textures/Fetus/Birds/Fetus_Bird05.png
new file mode 100644
index 0000000..f5e48dd
Binary files /dev/null and b/1.3/Textures/Fetus/Birds/Fetus_Bird05.png differ
diff --git a/1.3/Textures/Fetus/Canines/Fetus_Dog00.png b/1.3/Textures/Fetus/Canines/Fetus_Dog00.png
new file mode 100644
index 0000000..551a845
Binary files /dev/null and b/1.3/Textures/Fetus/Canines/Fetus_Dog00.png differ
diff --git a/1.3/Textures/Fetus/Canines/Fetus_Dog01.png b/1.3/Textures/Fetus/Canines/Fetus_Dog01.png
new file mode 100644
index 0000000..669cb54
Binary files /dev/null and b/1.3/Textures/Fetus/Canines/Fetus_Dog01.png differ
diff --git a/1.3/Textures/Fetus/Canines/Fetus_Dog02.png b/1.3/Textures/Fetus/Canines/Fetus_Dog02.png
new file mode 100644
index 0000000..9274c31
Binary files /dev/null and b/1.3/Textures/Fetus/Canines/Fetus_Dog02.png differ
diff --git a/1.3/Textures/Fetus/Canines/Fetus_Dog03.png b/1.3/Textures/Fetus/Canines/Fetus_Dog03.png
new file mode 100644
index 0000000..d47d7e4
Binary files /dev/null and b/1.3/Textures/Fetus/Canines/Fetus_Dog03.png differ
diff --git a/1.3/Textures/Fetus/Canines/Fetus_Dog04.png b/1.3/Textures/Fetus/Canines/Fetus_Dog04.png
new file mode 100644
index 0000000..a195fba
Binary files /dev/null and b/1.3/Textures/Fetus/Canines/Fetus_Dog04.png differ
diff --git a/1.3/Textures/Fetus/Canines/Fetus_Dog05.png b/1.3/Textures/Fetus/Canines/Fetus_Dog05.png
new file mode 100644
index 0000000..545e0f1
Binary files /dev/null and b/1.3/Textures/Fetus/Canines/Fetus_Dog05.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Default00.png b/1.3/Textures/Fetus/Fetus_Default00.png
new file mode 100644
index 0000000..ae4ac82
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Default00.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Default00_Multiplet_2.png b/1.3/Textures/Fetus/Fetus_Default00_Multiplet_2.png
new file mode 100644
index 0000000..4edb83a
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Default00_Multiplet_2.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Default01.png b/1.3/Textures/Fetus/Fetus_Default01.png
new file mode 100644
index 0000000..9b16b11
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Default01.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Default01_Multiplet_2.png b/1.3/Textures/Fetus/Fetus_Default01_Multiplet_2.png
new file mode 100644
index 0000000..a48c4b5
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Default01_Multiplet_2.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Default02.png b/1.3/Textures/Fetus/Fetus_Default02.png
new file mode 100644
index 0000000..2442b67
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Default02.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Default02_Multiplet_2.png b/1.3/Textures/Fetus/Fetus_Default02_Multiplet_2.png
new file mode 100644
index 0000000..2184325
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Default02_Multiplet_2.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Default03.png b/1.3/Textures/Fetus/Fetus_Default03.png
new file mode 100644
index 0000000..63eb53e
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Default03.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Default03_Multiplet_2.png b/1.3/Textures/Fetus/Fetus_Default03_Multiplet_2.png
new file mode 100644
index 0000000..2877fc2
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Default03_Multiplet_2.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Default04.png b/1.3/Textures/Fetus/Fetus_Default04.png
new file mode 100644
index 0000000..fe77864
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Default04.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Default04_Multiplet_2.png b/1.3/Textures/Fetus/Fetus_Default04_Multiplet_2.png
new file mode 100644
index 0000000..88aeb39
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Default04_Multiplet_2.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Default05.png b/1.3/Textures/Fetus/Fetus_Default05.png
new file mode 100644
index 0000000..d0c2426
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Default05.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Default05_Multiplet_2.png b/1.3/Textures/Fetus/Fetus_Default05_Multiplet_2.png
new file mode 100644
index 0000000..88aeb39
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Default05_Multiplet_2.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Early00.png b/1.3/Textures/Fetus/Fetus_Early00.png
new file mode 100644
index 0000000..9ac60a6
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Early00.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Early00_Multiplet_2.png b/1.3/Textures/Fetus/Fetus_Early00_Multiplet_2.png
new file mode 100644
index 0000000..f08b902
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Early00_Multiplet_2.png differ
diff --git a/1.3/Textures/Fetus/Fetus_Old.zip b/1.3/Textures/Fetus/Fetus_Old.zip
new file mode 100644
index 0000000..90f4e17
Binary files /dev/null and b/1.3/Textures/Fetus/Fetus_Old.zip differ
diff --git a/1.3/Textures/Fetus/Greenskins/Fetus_Orc00.png b/1.3/Textures/Fetus/Greenskins/Fetus_Orc00.png
new file mode 100644
index 0000000..3d93c32
Binary files /dev/null and b/1.3/Textures/Fetus/Greenskins/Fetus_Orc00.png differ
diff --git a/1.3/Textures/Fetus/Greenskins/Fetus_Orc01.png b/1.3/Textures/Fetus/Greenskins/Fetus_Orc01.png
new file mode 100644
index 0000000..432d3d5
Binary files /dev/null and b/1.3/Textures/Fetus/Greenskins/Fetus_Orc01.png differ
diff --git a/1.3/Textures/Fetus/Greenskins/Fetus_Orc02.png b/1.3/Textures/Fetus/Greenskins/Fetus_Orc02.png
new file mode 100644
index 0000000..4d67604
Binary files /dev/null and b/1.3/Textures/Fetus/Greenskins/Fetus_Orc02.png differ
diff --git a/1.3/Textures/Fetus/Greenskins/Fetus_Orc03.png b/1.3/Textures/Fetus/Greenskins/Fetus_Orc03.png
new file mode 100644
index 0000000..8f5fa15
Binary files /dev/null and b/1.3/Textures/Fetus/Greenskins/Fetus_Orc03.png differ
diff --git a/1.3/Textures/Fetus/Greenskins/Fetus_Orc04.png b/1.3/Textures/Fetus/Greenskins/Fetus_Orc04.png
new file mode 100644
index 0000000..c7e4bf9
Binary files /dev/null and b/1.3/Textures/Fetus/Greenskins/Fetus_Orc04.png differ
diff --git a/1.3/Textures/Fetus/Greenskins/Fetus_Orc05.png b/1.3/Textures/Fetus/Greenskins/Fetus_Orc05.png
new file mode 100644
index 0000000..d55088d
Binary files /dev/null and b/1.3/Textures/Fetus/Greenskins/Fetus_Orc05.png differ
diff --git a/1.3/Textures/Fetus/Greenskins/unused-orc_0.png b/1.3/Textures/Fetus/Greenskins/unused-orc_0.png
new file mode 100644
index 0000000..fcc3f88
Binary files /dev/null and b/1.3/Textures/Fetus/Greenskins/unused-orc_0.png differ
diff --git a/1.3/Textures/Fetus/Insects/Fetus_Insect00.png b/1.3/Textures/Fetus/Insects/Fetus_Insect00.png
new file mode 100644
index 0000000..db2205c
Binary files /dev/null and b/1.3/Textures/Fetus/Insects/Fetus_Insect00.png differ
diff --git a/1.3/Textures/Fetus/Insects/Fetus_Insect01.png b/1.3/Textures/Fetus/Insects/Fetus_Insect01.png
new file mode 100644
index 0000000..6ffb69f
Binary files /dev/null and b/1.3/Textures/Fetus/Insects/Fetus_Insect01.png differ
diff --git a/1.3/Textures/Fetus/Insects/Fetus_Insect02.png b/1.3/Textures/Fetus/Insects/Fetus_Insect02.png
new file mode 100644
index 0000000..cec86fd
Binary files /dev/null and b/1.3/Textures/Fetus/Insects/Fetus_Insect02.png differ
diff --git a/1.3/Textures/Fetus/Insects/Fetus_Insect03.png b/1.3/Textures/Fetus/Insects/Fetus_Insect03.png
new file mode 100644
index 0000000..25a1fef
Binary files /dev/null and b/1.3/Textures/Fetus/Insects/Fetus_Insect03.png differ
diff --git a/1.3/Textures/Fetus/Insects/Fetus_Insect04.png b/1.3/Textures/Fetus/Insects/Fetus_Insect04.png
new file mode 100644
index 0000000..f0cb490
Binary files /dev/null and b/1.3/Textures/Fetus/Insects/Fetus_Insect04.png differ
diff --git a/1.3/Textures/Fetus/Insects/Fetus_Insect05.png b/1.3/Textures/Fetus/Insects/Fetus_Insect05.png
new file mode 100644
index 0000000..f0cb490
Binary files /dev/null and b/1.3/Textures/Fetus/Insects/Fetus_Insect05.png differ
diff --git a/1.3/Textures/Fetus/Insects/Insect_Early00.png b/1.3/Textures/Fetus/Insects/Insect_Early00.png
new file mode 100644
index 0000000..2960740
Binary files /dev/null and b/1.3/Textures/Fetus/Insects/Insect_Early00.png differ
diff --git a/1.3/Textures/Fetus/Livestocks/Fetus_Pig00.png b/1.3/Textures/Fetus/Livestocks/Fetus_Pig00.png
new file mode 100644
index 0000000..796d902
Binary files /dev/null and b/1.3/Textures/Fetus/Livestocks/Fetus_Pig00.png differ
diff --git a/1.3/Textures/Fetus/Livestocks/Fetus_Pig01.png b/1.3/Textures/Fetus/Livestocks/Fetus_Pig01.png
new file mode 100644
index 0000000..c8de22d
Binary files /dev/null and b/1.3/Textures/Fetus/Livestocks/Fetus_Pig01.png differ
diff --git a/1.3/Textures/Fetus/Livestocks/Fetus_Pig02.png b/1.3/Textures/Fetus/Livestocks/Fetus_Pig02.png
new file mode 100644
index 0000000..2e4a01a
Binary files /dev/null and b/1.3/Textures/Fetus/Livestocks/Fetus_Pig02.png differ
diff --git a/1.3/Textures/Fetus/Livestocks/Fetus_Pig03.png b/1.3/Textures/Fetus/Livestocks/Fetus_Pig03.png
new file mode 100644
index 0000000..cf7563d
Binary files /dev/null and b/1.3/Textures/Fetus/Livestocks/Fetus_Pig03.png differ
diff --git a/1.3/Textures/Fetus/Livestocks/Fetus_Pig04.png b/1.3/Textures/Fetus/Livestocks/Fetus_Pig04.png
new file mode 100644
index 0000000..f48b18c
Binary files /dev/null and b/1.3/Textures/Fetus/Livestocks/Fetus_Pig04.png differ
diff --git a/1.3/Textures/Fetus/Livestocks/Fetus_Pig05.png b/1.3/Textures/Fetus/Livestocks/Fetus_Pig05.png
new file mode 100644
index 0000000..54f7c0d
Binary files /dev/null and b/1.3/Textures/Fetus/Livestocks/Fetus_Pig05.png differ
diff --git a/1.3/Textures/Fetus/Slime_Abomi02.png b/1.3/Textures/Fetus/Slime_Abomi02.png
new file mode 100644
index 0000000..4974ab4
Binary files /dev/null and b/1.3/Textures/Fetus/Slime_Abomi02.png differ
diff --git a/1.3/Textures/Genitals/Anal00.png b/1.3/Textures/Genitals/Anal00.png
new file mode 100644
index 0000000..966cbf0
Binary files /dev/null and b/1.3/Textures/Genitals/Anal00.png differ
diff --git a/1.3/Textures/Genitals/Anal01.png b/1.3/Textures/Genitals/Anal01.png
new file mode 100644
index 0000000..d6376b8
Binary files /dev/null and b/1.3/Textures/Genitals/Anal01.png differ
diff --git a/1.3/Textures/Genitals/Anal02.png b/1.3/Textures/Genitals/Anal02.png
new file mode 100644
index 0000000..e258cb7
Binary files /dev/null and b/1.3/Textures/Genitals/Anal02.png differ
diff --git a/1.3/Textures/Genitals/Anal03.png b/1.3/Textures/Genitals/Anal03.png
new file mode 100644
index 0000000..6760051
Binary files /dev/null and b/1.3/Textures/Genitals/Anal03.png differ
diff --git a/1.3/Textures/Genitals/Anal04.png b/1.3/Textures/Genitals/Anal04.png
new file mode 100644
index 0000000..adb5acc
Binary files /dev/null and b/1.3/Textures/Genitals/Anal04.png differ
diff --git a/1.3/Textures/Genitals/Anal05.png b/1.3/Textures/Genitals/Anal05.png
new file mode 100644
index 0000000..439966a
Binary files /dev/null and b/1.3/Textures/Genitals/Anal05.png differ
diff --git a/1.3/Textures/Genitals/BionicAnal00.png b/1.3/Textures/Genitals/BionicAnal00.png
new file mode 100644
index 0000000..17d2aba
Binary files /dev/null and b/1.3/Textures/Genitals/BionicAnal00.png differ
diff --git a/1.3/Textures/Genitals/BionicAnal01.png b/1.3/Textures/Genitals/BionicAnal01.png
new file mode 100644
index 0000000..1decaab
Binary files /dev/null and b/1.3/Textures/Genitals/BionicAnal01.png differ
diff --git a/1.3/Textures/Genitals/BionicAnal02.png b/1.3/Textures/Genitals/BionicAnal02.png
new file mode 100644
index 0000000..b8c2398
Binary files /dev/null and b/1.3/Textures/Genitals/BionicAnal02.png differ
diff --git a/1.3/Textures/Genitals/BionicAnal03.png b/1.3/Textures/Genitals/BionicAnal03.png
new file mode 100644
index 0000000..b947669
Binary files /dev/null and b/1.3/Textures/Genitals/BionicAnal03.png differ
diff --git a/1.3/Textures/Genitals/BionicAnal04.png b/1.3/Textures/Genitals/BionicAnal04.png
new file mode 100644
index 0000000..973263f
Binary files /dev/null and b/1.3/Textures/Genitals/BionicAnal04.png differ
diff --git a/1.3/Textures/Genitals/BionicAnal05.png b/1.3/Textures/Genitals/BionicAnal05.png
new file mode 100644
index 0000000..bd33d48
Binary files /dev/null and b/1.3/Textures/Genitals/BionicAnal05.png differ
diff --git a/1.3/Textures/Genitals/BionicVagina00.png b/1.3/Textures/Genitals/BionicVagina00.png
new file mode 100644
index 0000000..e433424
Binary files /dev/null and b/1.3/Textures/Genitals/BionicVagina00.png differ
diff --git a/1.3/Textures/Genitals/BionicVagina01.png b/1.3/Textures/Genitals/BionicVagina01.png
new file mode 100644
index 0000000..2cb7874
Binary files /dev/null and b/1.3/Textures/Genitals/BionicVagina01.png differ
diff --git a/1.3/Textures/Genitals/BionicVagina02.png b/1.3/Textures/Genitals/BionicVagina02.png
new file mode 100644
index 0000000..6ada1d1
Binary files /dev/null and b/1.3/Textures/Genitals/BionicVagina02.png differ
diff --git a/1.3/Textures/Genitals/BionicVagina03.png b/1.3/Textures/Genitals/BionicVagina03.png
new file mode 100644
index 0000000..3d4ee65
Binary files /dev/null and b/1.3/Textures/Genitals/BionicVagina03.png differ
diff --git a/1.3/Textures/Genitals/BionicVagina04.png b/1.3/Textures/Genitals/BionicVagina04.png
new file mode 100644
index 0000000..ece1957
Binary files /dev/null and b/1.3/Textures/Genitals/BionicVagina04.png differ
diff --git a/1.3/Textures/Genitals/BionicVagina05.png b/1.3/Textures/Genitals/BionicVagina05.png
new file mode 100644
index 0000000..7c53581
Binary files /dev/null and b/1.3/Textures/Genitals/BionicVagina05.png differ
diff --git a/1.3/Textures/Genitals/BionicVagina06.png b/1.3/Textures/Genitals/BionicVagina06.png
new file mode 100644
index 0000000..84ea205
Binary files /dev/null and b/1.3/Textures/Genitals/BionicVagina06.png differ
diff --git a/1.3/Textures/Genitals/BionicVagina07.png b/1.3/Textures/Genitals/BionicVagina07.png
new file mode 100644
index 0000000..c5d0208
Binary files /dev/null and b/1.3/Textures/Genitals/BionicVagina07.png differ
diff --git a/1.3/Textures/Genitals/BionicVagina08.png b/1.3/Textures/Genitals/BionicVagina08.png
new file mode 100644
index 0000000..0c9572d
Binary files /dev/null and b/1.3/Textures/Genitals/BionicVagina08.png differ
diff --git a/1.3/Textures/Genitals/BionicVagina09.png b/1.3/Textures/Genitals/BionicVagina09.png
new file mode 100644
index 0000000..52dfd73
Binary files /dev/null and b/1.3/Textures/Genitals/BionicVagina09.png differ
diff --git a/1.3/Textures/Genitals/BionicVagina10.png b/1.3/Textures/Genitals/BionicVagina10.png
new file mode 100644
index 0000000..23f560c
Binary files /dev/null and b/1.3/Textures/Genitals/BionicVagina10.png differ
diff --git a/1.3/Textures/Genitals/BionicVagina11.png b/1.3/Textures/Genitals/BionicVagina11.png
new file mode 100644
index 0000000..8ee5a5e
Binary files /dev/null and b/1.3/Textures/Genitals/BionicVagina11.png differ
diff --git a/1.3/Textures/Genitals/Genitals_Old.zip b/1.3/Textures/Genitals/Genitals_Old.zip
new file mode 100644
index 0000000..bda9dd3
Binary files /dev/null and b/1.3/Textures/Genitals/Genitals_Old.zip differ
diff --git a/1.3/Textures/Genitals/Vagina00.png b/1.3/Textures/Genitals/Vagina00.png
new file mode 100644
index 0000000..3646007
Binary files /dev/null and b/1.3/Textures/Genitals/Vagina00.png differ
diff --git a/1.3/Textures/Genitals/Vagina01.png b/1.3/Textures/Genitals/Vagina01.png
new file mode 100644
index 0000000..4dd0549
Binary files /dev/null and b/1.3/Textures/Genitals/Vagina01.png differ
diff --git a/1.3/Textures/Genitals/Vagina02.png b/1.3/Textures/Genitals/Vagina02.png
new file mode 100644
index 0000000..549422a
Binary files /dev/null and b/1.3/Textures/Genitals/Vagina02.png differ
diff --git a/1.3/Textures/Genitals/Vagina03.png b/1.3/Textures/Genitals/Vagina03.png
new file mode 100644
index 0000000..7876f2e
Binary files /dev/null and b/1.3/Textures/Genitals/Vagina03.png differ
diff --git a/1.3/Textures/Genitals/Vagina04.png b/1.3/Textures/Genitals/Vagina04.png
new file mode 100644
index 0000000..e1f6f3b
Binary files /dev/null and b/1.3/Textures/Genitals/Vagina04.png differ
diff --git a/1.3/Textures/Genitals/Vagina05.png b/1.3/Textures/Genitals/Vagina05.png
new file mode 100644
index 0000000..a86b146
Binary files /dev/null and b/1.3/Textures/Genitals/Vagina05.png differ
diff --git a/1.3/Textures/Genitals/Vagina06.png b/1.3/Textures/Genitals/Vagina06.png
new file mode 100644
index 0000000..29f103a
Binary files /dev/null and b/1.3/Textures/Genitals/Vagina06.png differ
diff --git a/1.3/Textures/Genitals/Vagina07.png b/1.3/Textures/Genitals/Vagina07.png
new file mode 100644
index 0000000..d020b9f
Binary files /dev/null and b/1.3/Textures/Genitals/Vagina07.png differ
diff --git a/1.3/Textures/Genitals/Vagina08.png b/1.3/Textures/Genitals/Vagina08.png
new file mode 100644
index 0000000..41a1e63
Binary files /dev/null and b/1.3/Textures/Genitals/Vagina08.png differ
diff --git a/1.3/Textures/Genitals/Vagina09.png b/1.3/Textures/Genitals/Vagina09.png
new file mode 100644
index 0000000..96bc301
Binary files /dev/null and b/1.3/Textures/Genitals/Vagina09.png differ
diff --git a/1.3/Textures/Genitals/Vagina10.png b/1.3/Textures/Genitals/Vagina10.png
new file mode 100644
index 0000000..fd5ab20
Binary files /dev/null and b/1.3/Textures/Genitals/Vagina10.png differ
diff --git a/1.3/Textures/Genitals/Vagina11.png b/1.3/Textures/Genitals/Vagina11.png
new file mode 100644
index 0000000..900e718
Binary files /dev/null and b/1.3/Textures/Genitals/Vagina11.png differ
diff --git a/1.3/Textures/Milk/Milkbottle_Large.png b/1.3/Textures/Milk/Milkbottle_Large.png
new file mode 100644
index 0000000..88a8899
Binary files /dev/null and b/1.3/Textures/Milk/Milkbottle_Large.png differ
diff --git a/1.3/Textures/Milk/Milkbottle_Medium.png b/1.3/Textures/Milk/Milkbottle_Medium.png
new file mode 100644
index 0000000..9fced73
Binary files /dev/null and b/1.3/Textures/Milk/Milkbottle_Medium.png differ
diff --git a/1.3/Textures/Milk/Milkbottle_Small.png b/1.3/Textures/Milk/Milkbottle_Small.png
new file mode 100644
index 0000000..c9ac05f
Binary files /dev/null and b/1.3/Textures/Milk/Milkbottle_Small.png differ
diff --git a/1.3/Textures/Textures_old.7z b/1.3/Textures/Textures_old.7z
new file mode 100644
index 0000000..a967dfb
Binary files /dev/null and b/1.3/Textures/Textures_old.7z differ
diff --git a/1.3/Textures/Things/Item/Milkbottle/Milkbottle_a.png b/1.3/Textures/Things/Item/Milkbottle/Milkbottle_a.png
new file mode 100644
index 0000000..c9ac05f
Binary files /dev/null and b/1.3/Textures/Things/Item/Milkbottle/Milkbottle_a.png differ
diff --git a/1.3/Textures/Things/Item/Milkbottle/Milkbottle_b.png b/1.3/Textures/Things/Item/Milkbottle/Milkbottle_b.png
new file mode 100644
index 0000000..9fced73
Binary files /dev/null and b/1.3/Textures/Things/Item/Milkbottle/Milkbottle_b.png differ
diff --git a/1.3/Textures/Things/Item/Milkbottle/Milkbottle_c.png b/1.3/Textures/Things/Item/Milkbottle/Milkbottle_c.png
new file mode 100644
index 0000000..88a8899
Binary files /dev/null and b/1.3/Textures/Things/Item/Milkbottle/Milkbottle_c.png differ
diff --git a/1.3/Textures/Things/Item/ORPill/ORPill_a.png b/1.3/Textures/Things/Item/ORPill/ORPill_a.png
new file mode 100644
index 0000000..b2eaeaa
Binary files /dev/null and b/1.3/Textures/Things/Item/ORPill/ORPill_a.png differ
diff --git a/1.3/Textures/Things/Item/ORPill/ORPill_b.png b/1.3/Textures/Things/Item/ORPill/ORPill_b.png
new file mode 100644
index 0000000..b3f0dbd
Binary files /dev/null and b/1.3/Textures/Things/Item/ORPill/ORPill_b.png differ
diff --git a/1.3/Textures/Things/Item/Pad.png b/1.3/Textures/Things/Item/Pad.png
new file mode 100644
index 0000000..e58d6d6
Binary files /dev/null and b/1.3/Textures/Things/Item/Pad.png differ
diff --git a/1.3/Textures/Things/Item/PainReliever/PainReliever_a.png b/1.3/Textures/Things/Item/PainReliever/PainReliever_a.png
new file mode 100644
index 0000000..bad8d0b
Binary files /dev/null and b/1.3/Textures/Things/Item/PainReliever/PainReliever_a.png differ
diff --git a/1.3/Textures/Things/Item/PainReliever/PainReliever_b.png b/1.3/Textures/Things/Item/PainReliever/PainReliever_b.png
new file mode 100644
index 0000000..3e8d7c3
Binary files /dev/null and b/1.3/Textures/Things/Item/PainReliever/PainReliever_b.png differ
diff --git a/1.3/Textures/Things/Item/SIA/SIA_a.png b/1.3/Textures/Things/Item/SIA/SIA_a.png
new file mode 100644
index 0000000..8788c7f
Binary files /dev/null and b/1.3/Textures/Things/Item/SIA/SIA_a.png differ
diff --git a/1.3/Textures/Things/Item/SIA/SIA_b.png b/1.3/Textures/Things/Item/SIA/SIA_b.png
new file mode 100644
index 0000000..b78ca67
Binary files /dev/null and b/1.3/Textures/Things/Item/SIA/SIA_b.png differ
diff --git a/1.3/Textures/Things/Item/Tampon.png b/1.3/Textures/Things/Item/Tampon.png
new file mode 100644
index 0000000..a2f10bd
Binary files /dev/null and b/1.3/Textures/Things/Item/Tampon.png differ
diff --git a/1.3/Textures/Things/Item/Tampon/Tampon_a.png b/1.3/Textures/Things/Item/Tampon/Tampon_a.png
new file mode 100644
index 0000000..a2f10bd
Binary files /dev/null and b/1.3/Textures/Things/Item/Tampon/Tampon_a.png differ
diff --git a/1.3/Textures/Things/Item/Tampon/Tampon_b.png b/1.3/Textures/Things/Item/Tampon/Tampon_b.png
new file mode 100644
index 0000000..6b5ed45
Binary files /dev/null and b/1.3/Textures/Things/Item/Tampon/Tampon_b.png differ
diff --git a/1.3/Textures/Womb/Empty.png b/1.3/Textures/Womb/Empty.png
new file mode 100644
index 0000000..1aa9036
Binary files /dev/null and b/1.3/Textures/Womb/Empty.png differ
diff --git a/1.3/Textures/Womb/ImplantedEgg.png b/1.3/Textures/Womb/ImplantedEgg.png
new file mode 100644
index 0000000..a109402
Binary files /dev/null and b/1.3/Textures/Womb/ImplantedEgg.png differ
diff --git a/1.3/Textures/Womb/Mechanoid_Fluid.png b/1.3/Textures/Womb/Mechanoid_Fluid.png
new file mode 100644
index 0000000..6ee8a45
Binary files /dev/null and b/1.3/Textures/Womb/Mechanoid_Fluid.png differ
diff --git a/1.3/Textures/Womb/Womb.png b/1.3/Textures/Womb/Womb.png
new file mode 100644
index 0000000..3341c14
Binary files /dev/null and b/1.3/Textures/Womb/Womb.png differ
diff --git a/1.3/Textures/Womb/Womb.zip b/1.3/Textures/Womb/Womb.zip
new file mode 100644
index 0000000..475b690
Binary files /dev/null and b/1.3/Textures/Womb/Womb.zip differ
diff --git a/1.3/Textures/Womb/Womb_Bleeding.png b/1.3/Textures/Womb/Womb_Bleeding.png
new file mode 100644
index 0000000..1af20dc
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Bleeding.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_00.png b/1.3/Textures/Womb/Womb_Cum_00.png
new file mode 100644
index 0000000..a74ae70
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_00.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_01.png b/1.3/Textures/Womb/Womb_Cum_01.png
new file mode 100644
index 0000000..f77ddd3
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_01.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_02.png b/1.3/Textures/Womb/Womb_Cum_02.png
new file mode 100644
index 0000000..c8c95f4
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_02.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_03.png b/1.3/Textures/Womb/Womb_Cum_03.png
new file mode 100644
index 0000000..0fe5eb9
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_03.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_04.png b/1.3/Textures/Womb/Womb_Cum_04.png
new file mode 100644
index 0000000..75f7691
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_04.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_05.png b/1.3/Textures/Womb/Womb_Cum_05.png
new file mode 100644
index 0000000..97c8794
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_05.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_06.png b/1.3/Textures/Womb/Womb_Cum_06.png
new file mode 100644
index 0000000..fa50a59
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_06.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_07.png b/1.3/Textures/Womb/Womb_Cum_07.png
new file mode 100644
index 0000000..06b1687
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_07.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_08.png b/1.3/Textures/Womb/Womb_Cum_08.png
new file mode 100644
index 0000000..941dd3c
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_08.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_09.png b/1.3/Textures/Womb/Womb_Cum_09.png
new file mode 100644
index 0000000..cfe1e35
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_09.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_10.png b/1.3/Textures/Womb/Womb_Cum_10.png
new file mode 100644
index 0000000..c27e4c5
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_10.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_11.png b/1.3/Textures/Womb/Womb_Cum_11.png
new file mode 100644
index 0000000..4005794
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_11.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_12.png b/1.3/Textures/Womb/Womb_Cum_12.png
new file mode 100644
index 0000000..1a4644a
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_12.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_13.png b/1.3/Textures/Womb/Womb_Cum_13.png
new file mode 100644
index 0000000..33d34e5
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_13.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_14.png b/1.3/Textures/Womb/Womb_Cum_14.png
new file mode 100644
index 0000000..9cdde2d
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_14.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_15.png b/1.3/Textures/Womb/Womb_Cum_15.png
new file mode 100644
index 0000000..a941ed4
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_15.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_16.png b/1.3/Textures/Womb/Womb_Cum_16.png
new file mode 100644
index 0000000..8650155
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_16.png differ
diff --git a/1.3/Textures/Womb/Womb_Cum_17.png b/1.3/Textures/Womb/Womb_Cum_17.png
new file mode 100644
index 0000000..4904d44
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Cum_17.png differ
diff --git a/1.3/Textures/Womb/Womb_Egged.png b/1.3/Textures/Womb/Womb_Egged.png
new file mode 100644
index 0000000..1c6ac74
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Egged.png differ
diff --git a/1.3/Textures/Womb/Womb_Implanted.png b/1.3/Textures/Womb/Womb_Implanted.png
new file mode 100644
index 0000000..bc97522
Binary files /dev/null and b/1.3/Textures/Womb/Womb_Implanted.png differ
diff --git a/1.3/source/RJW_Menstruation/MilkModule/JobDriver_MilkSelf.cs b/1.3/source/RJW_Menstruation/MilkModule/JobDriver_MilkSelf.cs
new file mode 100644
index 0000000..6e65b8a
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/MilkModule/JobDriver_MilkSelf.cs
@@ -0,0 +1,130 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using Verse.AI;
+using RimWorld;
+using Milk;
+using RJW_Menstruation;
+
+namespace MilkModule
+{
+ public class JobDriver_MilkSelf_MC : JobDriver_MilkSelf
+ {
+ HumanCompHasGatherableBodyResource comp;
+ HediffComp_Breast breastcomp;
+
+ protected override float Fullness
+ {
+ get
+ {
+ return comp.Fullness;
+ }
+ }
+
+ protected override void PreMakeNewToils()
+ {
+ comp = GetMilkComp(pawn);
+ breastcomp = pawn.GetBreastComp();
+ }
+
+ protected override void Gathered()
+ {
+ comp.Gathered(pawn);
+ }
+
+ protected override void PostTickAction()
+ {
+ if (breastcomp != null)
+ {
+ breastcomp.AdjustAreolaSize(Rand.Range(0.0f, 0.0001f * Configurations.NipplePermanentTransitionVariance));
+ breastcomp.AdjustNippleSize(Rand.Range(0.0f, 0.0001f * Configurations.NipplePermanentTransitionVariance));
+ }
+ }
+
+
+ public static HumanCompHasGatherableBodyResource GetMilkComp(Pawn pawn)
+ {
+ HumanCompHasGatherableBodyResource result;
+ if (pawn.health.hediffSet.HasHediff(VariousDefOf.Hediff_Heavy_Lactating_Permanent))
+ {
+ result = pawn.TryGetComp();
+
+ }
+ else
+ {
+ result = pawn.TryGetComp();
+ }
+ return result;
+ }
+
+
+
+ }
+
+
+ //public class JobDriver_HumanMilkSelf : JobDriver
+ //{
+ // const float milkingTime = 250f;//ticks - 120 = 2 real seconds, 3 in-game minutes
+ //
+ // public override bool TryMakePreToilReservations(bool errorOnFailed)
+ // {
+ // return pawn.Reserve(pawn, job, 1, -1, null, errorOnFailed);
+ // }
+ //
+ // protected override IEnumerable MakeNewToils()
+ // {
+ //
+ // HumanCompHasGatherableBodyResource Comp = GetMilkComp(pawn);
+ // HediffComp_Breast breastcomp = pawn.GetBreastComp();
+ // this.FailOn(delegate
+ // {
+ // return !(Comp.Fullness > 0.01f);
+ // });
+ // Toil milking = Toils_General.Wait((int)(50 + milkingTime * Comp.Fullness), TargetIndex.None);//duration of
+ //
+ // milking.WithProgressBarToilDelay(TargetIndex.A);
+ // milking.tickAction = delegate ()
+ // {
+ // if (breastcomp != null)
+ // {
+ // breastcomp.AdjustAreolaSize(Rand.Range(0.0f,0.0001f * Configurations.NipplePermanentTransitionVariance));
+ // breastcomp.AdjustNippleSize(Rand.Range(0.0f,0.0001f * Configurations.NipplePermanentTransitionVariance));
+ // }
+ //
+ // };
+ // yield return milking;
+ // yield return new Toil()
+ // {
+ // initAction = delegate ()
+ // {
+ // Comp.Gathered(pawn);
+ // }
+ // };
+ // //yield return excreting;
+ // yield break;
+ //
+ // }
+ //
+ //
+ // public static HumanCompHasGatherableBodyResource GetMilkComp(Pawn pawn)
+ // {
+ // HumanCompHasGatherableBodyResource result;
+ // if (pawn.health.hediffSet.HasHediff(VariousDefOf.Hediff_Heavy_Lactating_Permanent))
+ // {
+ // result = pawn.TryGetComp();
+ // }
+ // else
+ // {
+ // result = pawn.TryGetComp();
+ // }
+ // return result;
+ // }
+ //
+ //
+ //}
+
+
+}
diff --git a/1.3/source/RJW_Menstruation/MilkModule/MilkModule.csproj b/1.3/source/RJW_Menstruation/MilkModule/MilkModule.csproj
new file mode 100644
index 0000000..5d06a89
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/MilkModule/MilkModule.csproj
@@ -0,0 +1,99 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {3591B3C1-EB57-44BF-AB69-A613E097A7F8}
+ Library
+ Properties
+ MilkModule
+ MilkModule
+ v4.7.2
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ ..\..\..\MilkModule\Assemblies\
+ TRACE
+ prompt
+ 4
+
+
+
+ D:\잉어\Lib\Harmony.2.0.4.0\net472\0Harmony.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll
+ False
+
+
+ ..\..\..\..\rjw-mc-master\1.2\Assemblies\Milk.dll
+ False
+
+
+
+
+
+
+
+
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TextCoreModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TextRenderingModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UI.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UIElementsModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UIModule.dll
+ False
+
+
+
+
+
+
+
+
+ {eed2f3b9-8c20-4194-919e-8d151b29f70b}
+ RJW_Menstruation
+ False
+
+
+
+
\ No newline at end of file
diff --git a/1.3/source/RJW_Menstruation/MilkModule/Properties/AssemblyInfo.cs b/1.3/source/RJW_Menstruation/MilkModule/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..019d075
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/MilkModule/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("MilkModule")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MilkModule")]
+[assembly: AssemblyCopyright("Copyright © 2021")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("3591b3c1-eb57-44bf-ab69-a613e097a7f8")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+// 주 버전
+// 부 버전
+// 빌드 번호
+// 수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
+// 기본값으로 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation.sln b/1.3/source/RJW_Menstruation/RJW_Menstruation.sln
new file mode 100644
index 0000000..92a7a11
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30907.101
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RJW_Menstruation", "RJW_Menstruation\RJW_Menstruation.csproj", "{EED2F3B9-8C20-4194-919E-8D151B29F70B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MilkModule", "MilkModule\MilkModule.csproj", "{3591B3C1-EB57-44BF-AB69-A613E097A7F8}"
+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
+ {3591B3C1-EB57-44BF-AB69-A613E097A7F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3591B3C1-EB57-44BF-AB69-A613E097A7F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3591B3C1-EB57-44BF-AB69-A613E097A7F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3591B3C1-EB57-44BF-AB69-A613E097A7F8}.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
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/App.config b/1.3/source/RJW_Menstruation/RJW_Menstruation/App.config
new file mode 100644
index 0000000..56efbc7
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs
new file mode 100644
index 0000000..73dbb78
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs
@@ -0,0 +1,429 @@
+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.30f;
+ public const int CumDecayRatioAdjustDefault = 300;
+ public const float CumFertilityDecayRatioDefault = 0.2f;
+ public const int CumFertilityDecayRatioAdjustDefault = 200;
+ public const int CycleAccelerationDefault = 6;
+ public const float EnzygoticTwinsChanceDefault = 0.002f;
+ public const int EnzygoticTwinsChanceAdjustDefault = 2;
+ public const int MaxEnzygoticTwinsDefault = 9;
+ public const int BleedingAmountDefault = 50;
+ public const float NippleTransitionVarianceDefault = 0.2f;
+ public const float NipplePermanentTransitionVarianceDefault = 0.02f;
+ public const float NippleMaximumTransitionDefault = 0.4f;
+ public const float NippleTransitionSpeedDefault = 0.035f;
+
+ 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 bool EnableWombIcon = 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 DetailLevel InfoDetail = DetailLevel.All;
+ public static bool UseMultiplePregnancy = true;
+ public static bool EnableHeteroOvularTwins = true;
+ public static bool EnableEnzygoticTwins = true;
+ public static float EnzygoticTwinsChance = EnzygoticTwinsChanceDefault;
+ public static int EnzygoticTwinsChanceAdjust = EnzygoticTwinsChanceAdjustDefault;
+ public static int MaxEnzygoticTwins = MaxEnzygoticTwinsDefault;
+ public 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 MotherFirst = false;
+ public static bool AllowShrinkIcon = false;
+
+ public static float NippleTransitionVariance = NippleTransitionVarianceDefault;
+ public static float NipplePermanentTransitionVariance = NipplePermanentTransitionVarianceDefault;
+ public static float NippleMaximumTransition = NippleMaximumTransitionDefault;
+ public static float NippleTransitionSpeed = NippleTransitionSpeedDefault;
+ public static float NippleTransitionRatio
+ {
+ get
+ {
+ return NippleTransitionVariance * NippleTransitionSpeed;
+ }
+ }
+
+
+
+ public static List HybridOverride = new List();
+
+
+ public static bool HARActivated = false;
+ public static bool LLActivated = false;
+
+ public enum DetailLevel
+ {
+ All,
+ OnReveal,
+ HideFetusInfo,
+ Hide
+ }
+
+ public static string LevelString(DetailLevel level)
+ {
+ switch (level)
+ {
+ case DetailLevel.All:
+ return "All";
+ case DetailLevel.OnReveal:
+ return "On reveal";
+ case DetailLevel.HideFetusInfo:
+ return "Hide fetus info";
+ case DetailLevel.Hide:
+ return "Hide";
+ default:
+ return "";
+ }
+
+
+ }
+ public static string HybridString(bool b)
+ {
+ if (b) return Translations.Option23_Label_1;
+ else return Translations.Option23_Label_2;
+ }
+
+ public static bool IsOverrideExist(ThingDef def)
+ {
+ List removeList = new List();
+ if (!HybridOverride.NullOrEmpty())
+ foreach(HybridInformations o in HybridOverride)
+ {
+ if (o.IsNull) removeList.Add(o);
+ if (o.defName == def.defName) return true;
+ }
+ if (!removeList.NullOrEmpty())
+ {
+ foreach(HybridInformations o in removeList)
+ {
+ HybridOverride.Remove(o);
+ }
+ }
+ removeList.Clear();
+ return false;
+ }
+
+ [Flags]
+ public enum PawnFlags
+ {
+ None = 0,
+ Colonist = 1,
+ Prisoner = 2,
+ Ally = 4,
+ Neutral = 8,
+ Hostile = 16
+ }
+
+ public override void ExposeData()
+ {
+ Scribe_Values.Look(ref ImplantationChanceAdjust, "ImplantationChanceAdjust", ImplantationChanceAdjust, true);
+ Scribe_Values.Look(ref ImplantationChance, "ImplantationChance", ImplantationChance, true);
+ Scribe_Values.Look(ref FertilizeChanceAdjust, "FertilizeChanceAdjust", FertilizeChanceAdjust, true);
+ Scribe_Values.Look(ref FertilizeChance, "FertilizeChance", FertilizeChance, true);
+ Scribe_Values.Look(ref CumDecayRatioAdjust, "CumDecayRatioAdjust", CumDecayRatioAdjust, true);
+ Scribe_Values.Look(ref CumDecayRatio, "CumDecayRatio", CumDecayRatio, true);
+ Scribe_Values.Look(ref CumFertilityDecayRatioAdjust, "CumFertilityDecayRatioAdjust", CumFertilityDecayRatioAdjust, true);
+ Scribe_Values.Look(ref CumFertilityDecayRatio, "CumFertilityDecayRatio", CumFertilityDecayRatio, true);
+ Scribe_Values.Look(ref CycleAcceleration, "CycleAcceleration", CycleAcceleration, true);
+ Scribe_Values.Look(ref EnableWombIcon, "EnableWombIcon", EnableWombIcon, true);
+ Scribe_Values.Look(ref EnableAnimalCycle, "EnableAnimalCycle", EnableAnimalCycle, true);
+ Scribe_Values.Look(ref DrawWombStatus, "DrawWombStatus", DrawWombStatus, true);
+ Scribe_Values.Look(ref DrawVaginaStatus, "DrawVaginaStatus", DrawVaginaStatus, true);
+ Scribe_Values.Look(ref DrawEggOverlay, "DrawEggOvray", DrawEggOverlay, true);
+ Scribe_Values.Look(ref Debug, "Debug", Debug, true);
+ Scribe_Values.Look(ref InfoDetail, "InfoDetail", InfoDetail, true);
+ Scribe_Values.Look(ref EnableMenopause, "EnableMenopause", EnableMenopause, true);
+ Scribe_Values.Look(ref UseMultiplePregnancy, "UseMultiplePregnancy", UseMultiplePregnancy, true);
+ Scribe_Values.Look(ref EnableHeteroOvularTwins, "EnableHeteroOvularTwins", EnableHeteroOvularTwins, true);
+ Scribe_Values.Look(ref EnableEnzygoticTwins, "EnableEnzygoticTwins", EnableEnzygoticTwins, true);
+ Scribe_Values.Look(ref EnzygoticTwinsChance, "EnzygoticTwinsChance", EnzygoticTwinsChance, true);
+ Scribe_Values.Look(ref EnzygoticTwinsChanceAdjust, "EnzygoticTwinsChanceAdjust", EnzygoticTwinsChanceAdjust, true);
+ Scribe_Values.Look(ref MaxEnzygoticTwins, "MaxEnzygoticTwins", MaxEnzygoticTwins, true);
+ Scribe_Values.Look(ref BleedingAmount, "BleedingAmount", BleedingAmount, true);
+ Scribe_Values.Look(ref EnableButtonInHT, "EnableButtonInHT", EnableButtonInHT, true);
+ Scribe_Values.Look(ref ShowFlag, "ShowFlag", ShowFlag, true);
+ Scribe_Values.Look(ref UseHybridExtention, "UseHybridExtention", UseHybridExtention, true);
+ Scribe_Values.Look(ref MotherFirst, "MotherFirst", MotherFirst, true);
+ Scribe_Values.Look(ref NippleTransitionVariance, "NippleTransitionVariance", NippleTransitionVariance, true);
+ Scribe_Values.Look(ref NipplePermanentTransitionVariance, "NipplePermanentTransitionVariance", NipplePermanentTransitionVariance, true);
+ Scribe_Values.Look(ref NippleMaximumTransition, "NippleMaximumTransition", NippleMaximumTransition, true);
+ Scribe_Values.Look(ref NippleTransitionSpeed, "NippleTransitionSpeed", NippleTransitionSpeed, true);
+ Scribe_Values.Look(ref AllowShrinkIcon, "AllowShrinkIcon", AllowShrinkIcon, true);
+ Scribe_Collections.Look(ref HybridOverride, saveDestroyedThings: true, label: "HybridOverride", lookMode: LookMode.Deep, ctorArgs: new object[0]);
+ base.ExposeData();
+ }
+
+
+
+ }
+
+
+ public class RJW_Menstruation : Mod
+ {
+
+ private readonly Configurations config;
+ private static Vector2 scroll;
+
+
+
+ public static float EstimatedBleedingAmount
+ {
+ get
+ {
+ int days = VariousDefOf.VaginaCompProperties.bleedingIntervalDays;
+ return days * 0.03f * Configurations.BleedingAmount * 6;
+ }
+ }
+
+ public static float EstimatedBleedingAmountPerHour
+ {
+ get
+ {
+ int days = VariousDefOf.VaginaCompProperties.bleedingIntervalDays;
+ return 0.03f * Configurations.BleedingAmount * Configurations.CycleAcceleration;
+ }
+ }
+
+
+ public RJW_Menstruation(ModContentPack content) : base(content)
+ {
+ config = GetSettings();
+ Configurations.HARActivated = ModLister.HasActiveModWithName("Humanoid Alien Races 2.0");
+ Configurations.LLActivated = ModLister.HasActiveModWithName("RimJobWorld - Licentia Labs");
+ }
+
+
+
+ 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);
+ Rect mainRect = new Rect(0f, 0f, inRect.width - 30f, inRect.height + 480f);
+
+ Listing_Standard listmain = new Listing_Standard();
+ listmain.maxOneColumn = true;
+ Widgets.BeginScrollView(outRect, ref scroll, mainRect);
+ listmain.Begin(mainRect);
+ listmain.Gap(20f);
+ Rect optionrect1 = listmain.GetRect(30f);
+ Widgets.CheckboxLabeled(optionrect1.LeftHalf(), Translations.Option1_Label_1, ref Configurations.EnableWombIcon,false,null,null,true);
+ Widgets.CheckboxLabeled(optionrect1.RightHalf(), Translations.Option1_Label_2, ref Configurations.EnableButtonInHT, false, null, null, true);
+ //listmain.CheckboxLabeled(Translations.Option1_Label, ref Configurations.EnableWombIcon, Translations.Option1_Desc);
+ if (Configurations.EnableWombIcon || Configurations.EnableButtonInHT)
+ {
+ Listing_Standard wombsection = listmain.BeginSection(400);
+ 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);
+ 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;
+ }
+
+ int Adjust = (int)(Configurations.NippleTransitionVariance * 1000);
+ wombsection.Label(Translations.Option24_Label + " " + Configurations.NippleTransitionVariance* 100 + " / 100", -1,Translations.Option24_Desc);
+ Adjust = (int)wombsection.Slider(Adjust,0,1000);
+ Configurations.NippleTransitionVariance = (float)Adjust / 1000;
+
+ Adjust = (int)(Configurations.NipplePermanentTransitionVariance * 1000);
+ wombsection.Label(Translations.Option25_Label + " " + Configurations.NipplePermanentTransitionVariance*100 + " / 100", -1, Translations.Option25_Desc);
+ Adjust = (int)wombsection.Slider(Adjust, 0, 1000);
+ Configurations.NipplePermanentTransitionVariance = (float)Adjust / 1000;
+
+ Adjust = (int)(Configurations.NippleMaximumTransition * 1000);
+ wombsection.Label(Translations.Option26_Label + " " + Configurations.NippleMaximumTransition* 100 + " / 100", -1, Translations.Option26_Desc);
+ Adjust = (int)wombsection.Slider(Adjust, 0, 1000);
+ Configurations.NippleMaximumTransition = (float)Adjust / 1000;
+
+ Adjust = (int)(Configurations.NippleTransitionSpeed * 1000);
+ wombsection.Label(Translations.Option27_Label + " " + Configurations.NippleTransitionSpeed, -1, Translations.Option27_Desc);
+ Adjust = (int)wombsection.Slider(Adjust, 0, 1000);
+ Configurations.NippleTransitionSpeed = (float)Adjust / 1000;
+
+ 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.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;
+
+ listmain.Label(Translations.Option4_Label + " " + Configurations.FertilizeChance * 100 + "%", -1, 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;
+
+ int semenlifespan = (int)(-5 / ((float)Math.Log10((1 - Configurations.CumFertilityDecayRatio)*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);
+
+
+ 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.Option13_Label, ref Configurations.UseMultiplePregnancy, Translations.Option13_Desc);
+ if (Configurations.UseMultiplePregnancy)
+ {
+ 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);
+ }
+
+
+ Widgets.EndScrollView();
+
+ listmain.CheckboxLabeled(Translations.Option8_Label, ref Configurations.Debug, Translations.Option8_Desc);
+ if (listmain.ButtonText("reset to default"))
+ {
+ Configurations.ImplantationChanceAdjust = Configurations.ImplantationChanceAdjustDefault;
+ Configurations.FertilizeChanceAdjust = Configurations.FertilizeChanceAdjustDefault;
+ Configurations.CumDecayRatioAdjust = Configurations.CumDecayRatioAdjustDefault;
+ Configurations.CumFertilityDecayRatioAdjust = Configurations.CumFertilityDecayRatioAdjustDefault;
+ Configurations.EnableWombIcon = true;
+ Configurations.EnableAnimalCycle = false;
+ Configurations.CycleAcceleration = Configurations.CycleAccelerationDefault;
+ Configurations.EnzygoticTwinsChanceAdjust = Configurations.EnzygoticTwinsChanceAdjustDefault;
+ Configurations.EnableEnzygoticTwins = true;
+ Configurations.EnableHeteroOvularTwins = true;
+ Configurations.UseMultiplePregnancy = true;
+ Configurations.MaxEnzygoticTwins = Configurations.MaxEnzygoticTwinsDefault;
+ Configurations.BleedingAmount = Configurations.BleedingAmountDefault;
+ Configurations.MotherFirst = false;
+ Configurations.NippleTransitionVariance = Configurations.NippleTransitionVarianceDefault;
+ Configurations.NipplePermanentTransitionVariance = Configurations.NipplePermanentTransitionVarianceDefault;
+ Configurations.NippleMaximumTransition = Configurations.NippleMaximumTransitionDefault;
+ Configurations.NippleTransitionSpeed = Configurations.NippleTransitionSpeedDefault;
+
+ }
+
+ listmain.End();
+
+
+ }
+
+
+ }
+
+
+
+
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/Cum.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/Cum.cs
new file mode 100644
index 0000000..b73645b
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/Cum.cs
@@ -0,0 +1,275 @@
+using RimWorld;
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using Verse;
+
+namespace RJW_Menstruation
+{
+ public class Cum : IExposable
+ {
+ public Pawn pawn;
+
+ protected float volume; // ml
+ protected float fertvolume;
+ public float fertFactor = 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;
+
+ public float Volume
+ {
+ get
+ {
+ return volume;
+ }
+ }
+
+ public float FertVolume
+ {
+ get
+ {
+ return fertvolume;
+ }
+ }
+
+ 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)
+ {
+ try
+ {
+ DNAcache = pawn.def.GetModExtension();
+ }
+ catch (NullReferenceException)
+ {
+ DNAcache = ThingDefOf.Human.GetModExtension();
+ }
+ if (DNAcache == null)
+ {
+ DNAcache = ThingDefOf.Human.GetModExtension();
+ }
+ return DNAcache;
+ }
+ else 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 Cum() { }
+
+ public Cum(Pawn pawn)
+ {
+ this.pawn = pawn;
+ volume = 1.0f;
+ fertvolume = 1.0f;
+ }
+
+ ///
+ /// Not Cum
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public Cum(Pawn pawn, float volume, string notcumlabel, float decayresist = 0, ThingDef filthDef = null)
+ {
+ this.pawn = pawn;
+ this.volume = volume;
+ this.fertvolume = volume;
+ 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.fertvolume = volume * 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 fertvolume, "fertvolume", fertvolume, true);
+ Scribe_Values.Look(ref notcumthickness, "notcumthickness", notcumthickness, true);
+ Scribe_Values.Look(ref fertFactor, "fertFactor", fertFactor, true);
+ Scribe_Values.Look(ref notcum, "notcum", notcum, true);
+ Scribe_Values.Look(ref notcumLabel, "notcumLabel", notcumLabel, true);
+ Scribe_Values.Look(ref useCustomColor, "useCustomColor", useCustomColor, true);
+ Scribe_Values.Look(ref customColor, "customColor", customColor, true);
+ Scribe_Defs.Look(ref filthDef, "filthDef");
+
+ }
+
+ public void MakeThinner(int speed)
+ {
+ for (int i=0; i cums;
+
+
+ public CumMixture()
+ {
+ notcum = true;
+ cums = new List();
+ }
+
+ public CumMixture(Pawn pawn, float volume, List cums, Color color, ThingDef mixtureDef)
+ {
+ this.pawn = pawn;
+ this.volume = volume;
+ this.cums = cums;
+ this.customColor = color;
+ this.useCustomColor = true;
+ }
+
+ public void Dispose()
+ {
+ cums.Clear();
+
+ }
+
+ public override void ExposeData()
+ {
+ base.ExposeData();
+ Scribe_Collections.Look(ref cums, "cumslabel", LookMode.Value, new object[0]);
+ }
+
+ public string GetIngredients()
+ {
+ string res = "";
+ if (!cums.NullOrEmpty()) for(int i=0; i memories = pawn.needs?.mood?.thoughts?.memories?.Memories.FindAll(
+ x =>
+ x.def == VariousDefOf.CameInsideF
+ || x.def == VariousDefOf.CameInsideFFetish
+ || x.def == VariousDefOf.HaterCameInsideF);
+ if (!memories.NullOrEmpty())
+ {
+ foreach (Thought_Memory m in memories)
+ {
+ if (m.def == VariousDefOf.HaterCameInsideF) m.moodPowerFactor = 0.5f;
+ else m.moodPowerFactor = 0.3f;
+
+ }
+ if (pawn.Has(Quirk.Breeder)) pawn.needs.mood.thoughts.memories.TryGainMemoryFast(VariousDefOf.HateTookContraptivePill);
+ else pawn.needs.mood.thoughts.memories.TryGainMemoryFast(VariousDefOf.TookContraptivePill);
+ }
+ }
+
+ }
+
+
+
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/FilthMaker_Colored.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/FilthMaker_Colored.cs
new file mode 100644
index 0000000..a14e186
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/FilthMaker_Colored.cs
@@ -0,0 +1,59 @@
+using RimWorld;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using Verse;
+
+namespace RJW_Menstruation
+{
+ public class FilthMaker_Colored
+ {
+
+ public static bool TryMakeFilth(IntVec3 c, Map map, ThingDef filthDef, IEnumerable sources, Color color, bool shouldPropagate, FilthSourceFlags additionalFlags = FilthSourceFlags.None)
+ {
+ Filth_Colored filth = (Filth_Colored)(from t in c.GetThingList(map)
+ where t.def == filthDef
+ select t).FirstOrDefault();
+ if (!c.Walkable(map) || (filth != null && !filth.CanBeThickened))
+ {
+ if (shouldPropagate)
+ {
+ List list = GenAdj.AdjacentCells8WayRandomized();
+ for (int i = 0; i < 8; i++)
+ {
+ IntVec3 c2 = c + list[i];
+ if (c2.InBounds(map) && TryMakeFilth(c2, map, filthDef, sources, color, false, FilthSourceFlags.None))
+ {
+ return true;
+ }
+ }
+ }
+ if (filth != null)
+ {
+ filth.AddSources(sources);
+ }
+ return false;
+ }
+ if (filth != null)
+ {
+ filth.ThickenFilth();
+ filth.AddSources(sources);
+ }
+ else
+ {
+ if (!FilthMaker.CanMakeFilth(c, map, filthDef, additionalFlags))
+ {
+ return false;
+ }
+ Filth_Colored filth2 = (Filth_Colored)ThingMaker.MakeThing(filthDef, null);
+ filth2.DrawColor = color;
+ filth2.AddSources(sources);
+ GenSpawn.Spawn(filth2, c, map, WipeMode.Vanish);
+ }
+ //FilthMonitor.Notify_FilthSpawned();
+ return true;
+ }
+
+
+ }
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/HARCompatibility.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/HARCompatibility.cs
new file mode 100644
index 0000000..c274d8d
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/HARCompatibility.cs
@@ -0,0 +1,31 @@
+using System.Linq;
+using Verse;
+
+namespace RJW_Menstruation
+{
+ public static class HARCompatibility
+ {
+
+ public static bool IsHAR(this Pawn pawn)
+ {
+ return pawn.def.GetType().ToString().StartsWith("AlienRace");
+ }
+
+ public static ThingComp GetHARComp(this Pawn pawn)
+ {
+ return pawn?.GetComps()?.First(x => x.GetType().Namespace.EqualsIgnoreCase("AlienRace") && x.GetType().Name.EndsWith("AlienComp"));
+ }
+
+ public static string GetHARCrown(this Pawn pawn)
+ {
+ return (string)pawn.GetHARComp().GetMemberValue("crownType");
+ }
+
+ public static void SetHARCrown(this Pawn pawn, string crown)
+ {
+ pawn.GetHARComp().SetMemberValue("crownType", crown);
+ }
+
+
+ }
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs
new file mode 100644
index 0000000..2dcc603
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs
@@ -0,0 +1,309 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using RimWorld;
+using UnityEngine;
+using HugsLib;
+using rjw;
+
+namespace RJW_Menstruation
+{
+ public class CompProperties_Breast : HediffCompProperties
+ {
+ public string BreastTex = "Breasts/Breast";
+ public ColorInt BlacknippleColor = new ColorInt(55,20,0);
+
+
+ public Color BlackNippleColor
+ {
+ get
+ {
+ return BlacknippleColor.ToColor;
+ }
+ }
+
+
+ public CompProperties_Breast()
+ {
+ compClass = typeof(HediffComp_Breast);
+ }
+ }
+
+ public class HediffComp_Breast : HediffComp
+ {
+ public const float DEFAULTALPHA = -1;
+ public const float DEFAULTAREOLA = -1;
+ public const float DEFAULTNIPPLE = -1;
+ public const float VARIANT = 0.2f;
+ public const int TICKINTERVAL = 3750;
+ public const float MAX_BREAST_INCREMENT = 0.10f;
+
+ public CompProperties_Breast Props;
+
+ protected float alphaPermanent = -1;
+ protected float alphaCurrent = -1;
+ protected float alpha = -1;
+ protected float areolaSizePermanent = -1f;
+ protected float areolaSizeCurrent = -1f;
+ protected float areolaSize = -1f;
+ protected float nippleSizePermanent = -1f;
+ protected float nippleSizeCurrent = -1f;
+ protected float nippleSize = -1f;
+ protected float breastSizeIncreased = 0f;
+ protected float originalpha = -1f;
+ protected float originareola = -1f;
+ protected float originnipple = -1f;
+ protected Color cachedcolor;
+ protected bool loaded = false;
+ protected bool pregnant = false;
+ public Action action;
+
+ public float MaxAlpha
+ {
+ get
+ {
+ return originalpha + Configurations.NippleMaximumTransition;
+ }
+ }
+ public float MaxAreola
+ {
+ get
+ {
+ return originareola + Configurations.NippleMaximumTransition;
+ }
+ }
+ public float MaxNipple
+ {
+ get
+ {
+ return originnipple + Configurations.NippleMaximumTransition;
+ }
+ }
+
+
+ public Color NippleColor
+ {
+ get
+ {
+ return cachedcolor;
+ }
+ }
+ public float Alpha
+ {
+ get
+ {
+ return alphaCurrent;
+ }
+ }
+ public float NippleSize
+ {
+ get
+ {
+ return nippleSizeCurrent;
+ }
+ }
+ public float AreolaSize
+ {
+ get
+ {
+ return areolaSizeCurrent;
+ }
+ }
+
+
+
+ public override void CompExposeData()
+ {
+ base.CompExposeData();
+ Scribe_Values.Look(ref alphaPermanent, "alphaPermanent", DEFAULTALPHA, true);
+ Scribe_Values.Look(ref alphaCurrent, "alphaCurrent", DEFAULTALPHA, true);
+ Scribe_Values.Look(ref alpha, "alpha", DEFAULTALPHA, true);
+ Scribe_Values.Look(ref areolaSizePermanent, "areolaSizePermanent", DEFAULTAREOLA, true);
+ Scribe_Values.Look(ref areolaSizeCurrent, "areolaSizeCurrent", DEFAULTAREOLA, true);
+ Scribe_Values.Look(ref areolaSize, "areolaSize", DEFAULTAREOLA, true);
+ Scribe_Values.Look(ref nippleSizePermanent, "nippleSizePermanent", DEFAULTNIPPLE, true);
+ Scribe_Values.Look(ref nippleSizeCurrent, "nippleSizeCurrent", DEFAULTNIPPLE, true);
+ Scribe_Values.Look(ref nippleSize, "nippleSize", DEFAULTNIPPLE, true);
+ Scribe_Values.Look(ref breastSizeIncreased, "breastSizeIncreased", breastSizeIncreased, true);
+ Scribe_Values.Look(ref originalpha, "originalpha", originalpha, true);
+ Scribe_Values.Look(ref originareola, "originareola", originareola, true);
+ Scribe_Values.Look(ref originnipple, "originnipple", originnipple, true);
+ Scribe_Values.Look(ref pregnant, "pregnant", pregnant, true);
+
+ }
+
+ public override void CompPostTick(ref float severityAdjustment) { }
+
+ public override void CompPostPostAdd(DamageInfo? dinfo)
+ {
+ if (!loaded) Initialize();
+ }
+
+ public override void CompPostPostRemoved()
+ {
+ HugsLibController.Instance.TickDelayScheduler.TryUnscheduleCallback(action);
+ ModLog.Message(parent.pawn.Label + "breast tick scheduler removed");
+ base.CompPostPostRemoved();
+ }
+
+ public void Initialize()
+ {
+ Props = (CompProperties_Breast)props;
+ action = Transition;
+ if (alphaPermanent < 0f)
+ {
+ alphaPermanent = (Utility.RandGaussianLike(0.0f, 0.3f) + Rand.Range(0.0f,0.5f))/2;
+ originalpha = alphaPermanent;
+ alpha = alphaPermanent;
+ alphaCurrent = alphaPermanent;
+ }
+ if (areolaSizePermanent < 0f)
+ {
+ areolaSizePermanent = Utility.RandGaussianLike(0f, parent.Severity);
+ originareola = areolaSizePermanent;
+ areolaSize = areolaSizePermanent;
+ areolaSizeCurrent = areolaSizePermanent;
+ }
+ if (nippleSizePermanent < 0f)
+ {
+ nippleSizePermanent = Utility.RandGaussianLike(0f, parent.Severity);
+ originnipple = nippleSizePermanent;
+ nippleSize = nippleSizePermanent;
+ nippleSizeCurrent = nippleSizePermanent;
+ }
+ UpdateColor();
+ loaded = true;
+ HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(action, TICKINTERVAL, parent.pawn);
+ }
+
+
+
+ public void Transition()
+ {
+ alphaCurrent = Mathf.Lerp(alphaCurrent, alpha, Configurations.NippleTransitionRatio);
+ areolaSizeCurrent = Mathf.Lerp(areolaSizeCurrent, areolaSize, Configurations.NippleTransitionRatio);
+ nippleSizeCurrent = Mathf.Lerp(nippleSizeCurrent, nippleSize, Configurations.NippleTransitionRatio);
+ UpdateColor();
+ HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(action, TICKINTERVAL, parent.pawn);
+ if (pregnant)
+ {
+ if (breastSizeIncreased < MAX_BREAST_INCREMENT)
+ {
+ breastSizeIncreased += 0.02f;
+ parent.Severity += 0.02f;
+ }
+ }
+ else
+ {
+ if (breastSizeIncreased > 0)
+ {
+ breastSizeIncreased -= 0.02f;
+ parent.Severity -= 0.02f;
+ }
+ }
+
+ }
+
+ public void ChangeColorFermanant(float alpha)
+ {
+ alphaPermanent = alpha;
+ }
+
+ public void ChangeColor(float alpha)
+ {
+ this.alpha = alpha;
+ }
+
+ public void PregnancyTransition()
+ {
+ alphaPermanent = Math.Min(MaxAlpha, alphaPermanent + Configurations.NipplePermanentTransitionVariance.VariationRange(VARIANT));
+ areolaSizePermanent = Math.Min(MaxAreola, areolaSizePermanent + Configurations.NipplePermanentTransitionVariance.VariationRange(VARIANT));
+ nippleSizePermanent = Math.Min(MaxNipple, nippleSizePermanent + Configurations.NipplePermanentTransitionVariance.VariationRange(VARIANT));
+ alpha = Math.Min(MaxAlpha, alpha + Configurations.NippleTransitionVariance.VariationRange(VARIANT));
+ areolaSize = Math.Min(MaxAreola, areolaSize + Configurations.NippleTransitionVariance.VariationRange(VARIANT));
+ nippleSize = Math.Min(MaxNipple, nippleSize + Configurations.NippleTransitionVariance.VariationRange(VARIANT));
+ pregnant = true;
+ }
+
+ public void BirthTransition()
+ {
+ alpha = alphaPermanent;
+ areolaSize = areolaSizePermanent;
+ nippleSize = nippleSizePermanent;
+ pregnant = false;
+ }
+
+
+ public void AdjustBreastSize(float amount)
+ {
+ parent.Severity += amount;
+ breastSizeIncreased += amount;
+ }
+
+ public void AdjustNippleSize(float amount)
+ {
+ nippleSizePermanent = Math.Min(MaxNipple, nippleSizePermanent + amount);
+ nippleSize = Math.Min(MaxNipple, nippleSize + amount);
+ }
+
+ public void AdjustAreolaSize(float amount)
+ {
+ areolaSizePermanent = Math.Min(MaxAreola, areolaSizePermanent + amount);
+ areolaSize = Math.Min(MaxAreola, areolaSize + amount);
+ }
+
+ public void RestoreBreastSize(float ratio)
+ {
+ float variance = breastSizeIncreased * Math.Min(ratio, 1.0f);
+ breastSizeIncreased -= variance;
+ parent.Severity -= variance;
+ }
+
+ public void AdjustNippleSizeImmidiately(float amount)
+ {
+ originnipple = Math.Max(0, originnipple + amount);
+ nippleSizePermanent = Math.Min(MaxNipple, nippleSizePermanent + amount);
+ nippleSize = Math.Min(MaxNipple, nippleSize + amount);
+ nippleSizeCurrent = nippleSize;
+ }
+
+ public void AdjustAreolaSizeImmidiately(float amount)
+ {
+ originareola = Math.Max(0, originareola + amount);
+ areolaSizePermanent = Math.Min(MaxAreola, areolaSizePermanent + amount);
+ areolaSize = Math.Min(MaxAreola, areolaSize + amount);
+ areolaSizeCurrent = areolaSize;
+ }
+
+
+
+ public void UpdateColor()
+ {
+ cachedcolor = Colors.CMYKLerp(parent?.pawn?.story?.SkinColor ?? Color.white, Props.BlackNippleColor, Alpha);
+ }
+
+ public string DebugInfo()
+ {
+ return "Alpha: " + alpha +
+ "\nNippleSize: " + nippleSize +
+ "\nAreolaSize: " + areolaSize +
+ "\nAlphaCurrent: " + alphaCurrent +
+ "\nNippleSizeCurrent: " + nippleSizeCurrent +
+ "\nAreolaSizeCurrent: " + areolaSizeCurrent +
+ "\nAlphaOrigin: " + originalpha +
+ "\nNippleSizeOrigin: " + originnipple +
+ "\nAreolaSizeOrigin: " + originareola +
+ "\nAlphaMax: " + MaxAlpha +
+ "\nNippleSizeMax: " + MaxNipple +
+ "\nAreolaSizeMax: " + MaxAreola +
+ "\nPermanentAlpha:" + alphaPermanent +
+ "\nPermanentNipple:" + nippleSizePermanent +
+ "\nPermanentAreola:" + areolaSizePermanent;
+ }
+
+ }
+
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_InducedOvaulator.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_InducedOvaulator.cs
new file mode 100644
index 0000000..d20cff6
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_InducedOvaulator.cs
@@ -0,0 +1,64 @@
+using HugsLib;
+using RimWorld;
+using rjw;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using Verse;
+
+namespace RJW_Menstruation
+{
+ public class CompProperties_InducedOvulator : CompProperties_Menstruation
+ {
+ public CompProperties_InducedOvulator()
+ {
+ compClass = typeof(HediffComp_InducedOvulator);
+ }
+
+ }
+
+ public class HediffComp_InducedOvulator : HediffComp_Menstruation
+ {
+ protected override void FollicularAction()
+ {
+ if (!IsBreedingSeason())
+ {
+ GoNextStage(Stage.Anestrus);
+ return;
+ }
+ if (curStageHrs >= FollicularIntervalHours)
+ {
+ GoNextStage(Stage.Luteal);
+ }
+ else
+ {
+ curStageHrs += Configurations.CycleAcceleration;
+ if (!estrusflag && curStageHrs > FollicularIntervalHours - Props.estrusDaysBeforeOvulation * 24)
+ {
+ estrusflag = true;
+ SetEstrus(Props.eggLifespanDays + Props.estrusDaysBeforeOvulation);
+ }
+ StayCurrentStage();
+ }
+ }
+
+ protected override void AfterCumIn(Pawn cummer)
+ {
+ base.AfterCumIn(cummer);
+ if (curStage == Stage.Follicular) curStage = Stage.Ovulatory;
+ }
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs
new file mode 100644
index 0000000..558862e
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs
@@ -0,0 +1,1667 @@
+using HugsLib;
+using RimWorld;
+using rjw;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using Verse;
+
+namespace RJW_Menstruation
+{
+ [Flags]
+ public enum SeasonalBreed
+ {
+ Always = 0,
+ Spring = 1,
+ Summer = 2,
+ Fall = 4,
+ Winter = 8,
+ FirstHalf = Spring | Summer,
+ SecondHalf = Fall | Winter
+ }
+
+
+ public class CompProperties_Menstruation : HediffCompProperties
+ {
+ public float maxCumCapacity; // ml
+ public float baseImplantationChanceFactor;
+ public float basefertilizationChanceFactor;
+ public float deviationFactor;
+ public int folicularIntervalDays = 14; //before ovulation including beginning of bleeding
+ public int lutealIntervalDays = 14; //after ovulation until bleeding
+ public int bleedingIntervalDays = 6; //must be less than folicularIntervalDays
+ public int recoveryIntervalDays = 10; //additional infertile days after gave birth
+ public int eggLifespanDays = 2; //fertiledays = ovaluationday - spermlifespan ~ ovaluationday + egglifespanday
+ public string wombTex = "Womb/Womb"; //fertiledays = ovaluationday - spermlifespan ~ ovaluationday + egglifespanday
+ public string vagTex = "Genitals/Vagina"; //fertiledays = ovaluationday - spermlifespan ~ ovaluationday + egglifespanday
+ public bool infertile = false;
+ public int ovaryPower = 600000000; // default: almost unlimited ovulation
+ public bool consealedEstrus = false;
+ public SeasonalBreed breedingSeason = SeasonalBreed.Always;
+ public int estrusDaysBeforeOvulation = 3;
+
+
+ public CompProperties_Menstruation()
+ {
+
+ compClass = typeof(HediffComp_Menstruation);
+ }
+ }
+
+
+ public class CompProperties_Anus : HediffCompProperties
+ {
+ public string analTex = "Genitals/Anal";
+
+ public CompProperties_Anus()
+ {
+ compClass = typeof(HediffComp_Anus);
+ }
+ }
+
+ public class HediffComp_Menstruation : HediffComp
+ {
+ const float minmakefilthvalue = 1.0f;
+ //const int ovarypowerthreshold = 72;
+
+ public static readonly int tickInterval = 2500; // an hour
+ public CompProperties_Menstruation Props;
+ public Stage curStage = Stage.Follicular;
+ public int curStageHrs = 0;
+ public Action actionref;
+ public bool loaded = false;
+ public int ovarypower = -100000;
+ public int eggstack = 0;
+
+
+ public enum Stage
+ {
+ Follicular,
+ Ovulatory,
+ Luteal,
+ Bleeding,
+ Fertilized, //Obsoleted
+ Pregnant,
+ Recover,
+ None,
+ Young,
+ ClimactericFollicular,
+ ClimactericLuteal,
+ ClimactericBleeding,
+ Anestrus
+ }
+
+ protected List cums;
+ protected List eggs;
+ protected int follicularIntervalhours = -1;
+ protected int lutealIntervalhours = -1;
+ protected int bleedingIntervalhours = -1;
+ protected int recoveryIntervalhours = -1;
+ protected float crampPain = -1;
+ protected Need sexNeed = null;
+ protected string customwombtex = null;
+ protected string customvagtex = null;
+ protected bool estrusflag = false;
+ protected int opcache = -1;
+ protected HediffComp_Breast breastcache = null;
+ protected float antisperm = 0.0f;
+
+ public int ovarypowerthreshold
+ {
+ get
+ {
+ if (opcache < 0) opcache = (int)(72f * ThingDefOf.Human.race.lifeExpectancy / parent.pawn.def.race.lifeExpectancy);
+ return opcache;
+ }
+ }
+
+ public int FollicularIntervalHours
+ {
+ get
+ {
+ return (int)((follicularIntervalhours - bleedingIntervalhours) * CycleFactor);
+ }
+ }
+
+ public float TotalCum
+ {
+ get
+ {
+ float res = 0;
+ if (cums.NullOrEmpty()) return 0;
+ foreach (Cum cum in cums)
+ {
+ res += cum.Volume;
+ }
+ return res;
+ }
+ }
+ public float TotalFertCum
+ {
+ get
+ {
+ float res = 0;
+ if (cums.NullOrEmpty()) return 0;
+ foreach (Cum cum in cums)
+ {
+ if (!cum.notcum) res += cum.FertVolume;
+ }
+ return res;
+ }
+ }
+ public float TotalCumPercent
+ {
+ get
+ {
+ float res = 0;
+ if (cums.NullOrEmpty()) return 0;
+ foreach (Cum cum in cums)
+ {
+ res += cum.Volume;
+ }
+ return res / Props.maxCumCapacity;
+ }
+ }
+ public float CumCapacity
+ {
+ get
+ {
+ float res = Props.maxCumCapacity * parent.pawn.BodySize;
+ if (curStage != Stage.Pregnant) res *= 500f;
+ return res;
+ }
+ }
+ public float CumInFactor
+ {
+ get
+ {
+ float res = 1.0f;
+ if (parent.pawn.health.hediffSet.HasHediff(VariousDefOf.RJW_IUD)) res = 0.01f;
+ return res;
+ }
+ }
+ //make follicular interval into half and double egg lifespan
+ public float CycleFactor
+ {
+ get
+ {
+ if (xxx.has_quirk(parent.pawn, "Breeder")) return 0.5f;
+
+ return 1.0f;
+ }
+ }
+ //effect on implant chance
+ public float ImplantFactor
+ {
+ get
+ {
+ float factor = 1.0f;
+ if (parent.pawn.Has(Quirk.Breeder)) factor = 10.0f;
+ //if (xxx.is_animal(parent.pawn)) factor *= RJWPregnancySettings.animal_impregnation_chance / 100f;
+ //else factor *= RJWPregnancySettings.humanlike_impregnation_chance / 100f;
+ return parent.pawn.health.capacities.GetLevel(xxx.reproduction) * factor;
+ }
+ }
+ public IEnumerable GetCumsInfo
+ {
+ get
+ {
+ if (!cums.NullOrEmpty()) foreach (Cum cum in cums)
+ {
+ if (!cum.notcum) yield return String.Format(cum.pawn?.Label + ": {0:0.##}ml", cum.Volume);
+ else yield return String.Format(cum.notcumLabel + ": {0:0.##}ml", cum.Volume);
+ }
+ else yield return Translations.Info_noCum;
+ }
+ }
+ public Color GetCumMixtureColor
+ {
+ get
+ {
+ Color mixedcolor = Color.white;
+
+ if (!cums.NullOrEmpty())
+ {
+ float mixedsofar = 0;
+ foreach (Cum cum in cums)
+ {
+ if (cum.Volume > 0)
+ {
+ mixedcolor = Colors.CMYKLerp(mixedcolor, cum.color, cum.Volume / (mixedsofar + cum.Volume));
+ mixedsofar += cum.Volume;
+ }
+ }
+ }
+ return mixedcolor;
+ }
+ }
+ public string GetCurStageLabel
+ {
+ get
+ {
+ switch (curStage)
+ {
+ case Stage.Follicular:
+ return Translations.Stage_Follicular;
+ case Stage.Ovulatory:
+ return Translations.Stage_Ovulatory;
+ case Stage.Luteal:
+ return Translations.Stage_Luteal;
+ case Stage.Bleeding:
+ return Translations.Stage_Bleeding;
+ case Stage.Fertilized:
+ return Translations.Stage_Fertilized;
+ case Stage.Pregnant:
+ if (Configurations.InfoDetail == Configurations.DetailLevel.All || (PregnancyHelper.GetPregnancy(parent.pawn)?.Visible ?? false)) return Translations.Stage_Pregnant;
+ else return Translations.Stage_Luteal;
+ case Stage.Recover:
+ return Translations.Stage_Recover;
+ case Stage.None:
+ case Stage.Young:
+ return Translations.Stage_None;
+ case Stage.ClimactericFollicular:
+ return Translations.Stage_Follicular + " - " + Translations.Stage_Climacteric;
+ case Stage.ClimactericLuteal:
+ return Translations.Stage_Luteal + " - " + Translations.Stage_Climacteric;
+ case Stage.ClimactericBleeding:
+ return Translations.Stage_Bleeding + " - " + Translations.Stage_Climacteric;
+ case Stage.Anestrus:
+ return Translations.Stage_Anestrus;
+ default:
+ return "";
+ }
+ }
+
+ }
+ public string wombTex
+ {
+ get
+ {
+ if (customwombtex == null) return Props.wombTex;
+ else return customwombtex;
+ }
+ set
+ {
+ customwombtex = value;
+ }
+ }
+ public string vagTex
+ {
+ get
+ {
+ if (customvagtex == null) return Props.vagTex;
+ else return customvagtex;
+ }
+ set
+ {
+ customvagtex = value;
+ }
+ }
+ public string GetFertilizingInfo
+ {
+ get
+ {
+ string res = "";
+ if (!eggs.NullOrEmpty())
+ {
+ int fertilized = 0;
+ foreach (Egg egg in eggs)
+ {
+ if (egg.fertilized) fertilized++;
+ }
+ if (fertilized != 0) res += fertilized + " " + Translations.Dialog_WombInfo05;
+ if (fertilized != 0 && eggs.Count - fertilized != 0) res += ", ";
+ if (cums.NullOrEmpty() || TotalFertCum == 0)
+ {
+ if (eggs.Count - fertilized != 0) res += eggs.Count - fertilized + " " + Translations.Dialog_WombInfo07;
+ }
+ else
+ {
+ if (eggs.Count - fertilized != 0) res += eggs.Count - fertilized + " " + Translations.Dialog_WombInfo06;
+ }
+ }
+ return res;
+ }
+ }
+ public bool IsEggFertilizing
+ {
+ get
+ {
+ if (!eggs.NullOrEmpty())
+ {
+ if (!cums.NullOrEmpty()) foreach (Cum cum in cums)
+ {
+ if (cum.FertVolume > 0) return true;
+ }
+ return false;
+
+ }
+ else return false;
+ }
+ }
+ ///
+ /// returns fertstage. if not fertilized returns -1
+ ///
+ public int IsFertilized
+ {
+ get
+ {
+ if (!eggs.NullOrEmpty()) foreach (Egg egg in eggs)
+ {
+ if (egg.fertilized) return egg.fertstage;
+ }
+ return -1;
+ }
+ }
+ public bool IsEggExist
+ {
+ get
+ {
+ return !eggs.NullOrEmpty();
+ }
+ }
+ public bool IsDangerDay
+ {
+ get
+ {
+ if (parent.pawn.health.hediffSet.HasHediff(VariousDefOf.RJW_IUD)) return false;
+
+ if (curStage == Stage.Follicular || curStage == Stage.ClimactericFollicular)
+ {
+ if (curStageHrs > 0.7f * (follicularIntervalhours - bleedingIntervalhours)) return true;
+ }
+ else if (curStage == Stage.Luteal || curStage == Stage.ClimactericLuteal)
+ {
+ if (curStageHrs < Props.eggLifespanDays * 24) return true;
+ }
+ else if (curStage == Stage.Ovulatory) return true;
+ return false;
+ }
+ }
+ public int GetNumofEggs
+ {
+ get
+ {
+ if (eggs.NullOrEmpty()) return 0;
+ else return eggs.Count;
+ }
+ }
+ public Color BloodColor
+ {
+ get
+ {
+ try
+ {
+ Color c = parent.pawn.def.race.BloodDef.graphicData.color;
+ return c;
+ }
+ catch
+ {
+ return Colors.blood;
+ }
+
+ }
+ }
+ public HediffComp_Breast Breast
+ {
+ get
+ {
+ if (breastcache == null)
+ {
+ breastcache = parent.pawn.GetBreastComp();
+ }
+ return breastcache;
+ }
+ }
+
+
+ public override void CompExposeData()
+ {
+ base.CompExposeData();
+ Scribe_Collections.Look(ref cums, saveDestroyedThings: true, label: "cums", lookMode: LookMode.Deep, ctorArgs: new object[0]);
+ Scribe_Collections.Look(ref eggs, saveDestroyedThings: true, label: "eggs", lookMode: LookMode.Deep, ctorArgs: new object[0]);
+ Scribe_Values.Look(ref curStage, "curStage", curStage, true);
+ Scribe_Values.Look(ref curStageHrs, "curStageHrs", curStageHrs, true);
+ Scribe_Values.Look(ref follicularIntervalhours, "follicularIntervalhours", follicularIntervalhours, true);
+ Scribe_Values.Look(ref lutealIntervalhours, "lutealIntervalhours", lutealIntervalhours, true);
+ Scribe_Values.Look(ref bleedingIntervalhours, "bleedingIntervalhours", bleedingIntervalhours, true);
+ Scribe_Values.Look(ref recoveryIntervalhours, "recoveryIntervalhours", recoveryIntervalhours, true);
+ Scribe_Values.Look(ref crampPain, "crampPain", crampPain, true);
+ Scribe_Values.Look(ref ovarypower, "ovarypower", ovarypower, true);
+ Scribe_Values.Look(ref eggstack, "eggstack", eggstack, true);
+ Scribe_Values.Look(ref estrusflag, "estrusflag", estrusflag, true);
+
+
+ }
+
+
+ public override void CompPostPostAdd(DamageInfo? dinfo)
+ {
+ if (!loaded)
+ {
+ Initialize();
+ }
+ }
+
+ public override void CompPostTick(ref float severityAdjustment)
+ {
+ //initializer moved to SpawnSetup
+ //if (!loaded)
+ //{
+ // Initialize();
+ //}
+ }
+
+ public override void CompPostPostRemoved()
+ {
+ HugsLibController.Instance.TickDelayScheduler.TryUnscheduleCallback(actionref);
+ Log.Message(parent.pawn.Label + "tick scheduler removed");
+ base.CompPostPostRemoved();
+ }
+
+
+
+
+
+ ///
+ /// Get fluid in womb that not a cum
+ ///
+ ///
+ ///
+ public Cum GetNotCum(string notcumlabel)
+ {
+ if (!cums.NullOrEmpty()) foreach (Cum cum in cums)
+ {
+ if (cum.notcum && cum.notcumLabel.Equals(notcumlabel)) return cum;
+ }
+ return null;
+ }
+
+ ///
+ /// Get pawn's cum in womb
+ ///
+ ///
+ ///
+ public Cum GetCum(Pawn pawn)
+ {
+ if (!cums.NullOrEmpty()) foreach (Cum cum in cums)
+ {
+ if (!cum.notcum && cum.pawn.Equals(pawn)) return cum;
+ }
+ return null;
+ }
+
+ ///
+ /// Inject pawn's cum into womb
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void CumIn(Pawn pawn, float injectedvolume, float fertility = 1.0f, ThingDef filthdef = null)
+ {
+ float volume = injectedvolume * CumInFactor;
+ float cumd = TotalCumPercent;
+ float tmp = TotalCum + volume;
+ if (tmp > CumCapacity)
+ {
+ float cumoutrate = 1 - (CumCapacity / tmp);
+ bool merged = false;
+ if (!cums.NullOrEmpty()) foreach (Cum cum in cums)
+ {
+ if (cum.pawn.Equals(pawn))
+ {
+ cum.MergeWithCum(volume, fertility, filthdef);
+ merged = true;
+ }
+ cum.DismishForce(cumoutrate);
+ }
+ if (!merged) cums.Add(new Cum(pawn, volume * (1 - cumoutrate), fertility, filthdef));
+ }
+ else
+ {
+
+ bool merged = false;
+ if (!cums.NullOrEmpty()) foreach (Cum cum in cums)
+ {
+ if (cum.pawn.Equals(pawn))
+ {
+ cum.MergeWithCum(volume, fertility, filthdef);
+ merged = true;
+ }
+ }
+ if (!merged) cums.Add(new Cum(pawn, volume, fertility, filthdef));
+ }
+ cumd = TotalCumPercent - cumd;
+
+ parent.pawn.records.AddTo(VariousDefOf.AmountofCreampied, injectedvolume);
+ AfterCumIn(pawn);
+ AfterFluidIn(cumd);
+ }
+
+ ///
+ /// Inject pawn's fluid into womb
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void CumIn(Pawn pawn, float volume, string notcumlabel, float decayresist = 0, ThingDef filthdef = null)
+ {
+ float tmp = TotalCum + volume;
+ float cumd = TotalCumPercent;
+ if (tmp > CumCapacity)
+ {
+ float cumoutrate = 1 - (CumCapacity / tmp);
+ bool merged = false;
+ if (!cums.NullOrEmpty()) foreach (Cum cum in cums)
+ {
+ if (cum.notcum && cum.pawn.Equals(pawn) && cum.notcumLabel.Equals(notcumlabel))
+ {
+ cum.MergeWithFluid(volume, decayresist, filthdef);
+ merged = true;
+ }
+ cum.DismishForce(cumoutrate);
+ }
+ if (!merged) cums.Add(new Cum(pawn, volume * (1 - cumoutrate), notcumlabel, decayresist, filthdef));
+ }
+ else
+ {
+
+ bool merged = false;
+ if (!cums.NullOrEmpty()) foreach (Cum cum in cums)
+ {
+ if (cum.notcum && cum.pawn.Equals(pawn) && cum.notcumLabel.Equals(notcumlabel))
+ {
+ cum.MergeWithFluid(volume, decayresist, filthdef);
+ merged = true;
+ }
+ }
+ if (!merged) cums.Add(new Cum(pawn, volume, notcumlabel, decayresist, filthdef));
+ }
+ cumd = TotalCumPercent - cumd;
+ AfterNotCumIn();
+ AfterFluidIn(cumd);
+ }
+
+ protected virtual void AfterCumIn(Pawn cummer)
+ {
+ ThoughtCumInside(cummer);
+
+ }
+
+ protected virtual void AfterNotCumIn()
+ {
+
+ }
+
+ ///
+ /// Action for both Cum and NotCum
+ ///
+ /// Fluid deviation
+ protected virtual void AfterFluidIn(float fd)
+ {
+
+
+ }
+
+
+ protected void BeforeCumOut(out Absorber absorber)
+ {
+
+ if (parent.pawn.health.hediffSet.HasHediff(VariousDefOf.RJW_IUD)) antisperm = 0.70f;
+ else antisperm = 0.0f;
+
+ absorber = (Absorber)parent.pawn.apparel?.WornApparel?.Find(x => x is Absorber);
+ if (absorber != null)
+ {
+ absorber.WearEffect();
+ if (absorber.dirty && absorber.EffectAfterDirty) absorber.DirtyEffect();
+ }
+ }
+
+ ///
+ /// For natural leaking
+ ///
+ protected virtual void AfterCumOut()
+ {
+ parent.pawn.needs?.mood?.thoughts?.memories?.TryGainMemory(VariousDefOf.LeakingFluids);
+ }
+
+ ///
+ /// For all type of leaking
+ ///
+ ///
+ protected virtual void AfterFluidOut(float fd)
+ {
+
+ }
+
+
+
+
+ ///
+ /// Excrete cums in womb naturally
+ ///
+ public void CumOut()
+ {
+ float leakfactor = 1.0f;
+ float totalleak = 0f;
+ float cumd = TotalCumPercent;
+ List filthlabels = new List();
+ BeforeCumOut(out Absorber absorber);
+ if (cums.NullOrEmpty()) return;
+ else if (absorber != null && absorber.dirty && !absorber.LeakAfterDirty) leakfactor = 0f;
+ List removecums = new List();
+ foreach (Cum cum in cums)
+ {
+ float vd = cum.DismishNatural(leakfactor, antisperm);
+ cum.MakeThinner(Configurations.CycleAcceleration);
+ totalleak += AbsorbCum(cum, vd, absorber);
+ string tmp = "FilthLabelWithSource".Translate(cum.FilthDef.label, cum.pawn?.LabelShort ?? "Unknown", 1.ToString());
+ filthlabels.Add(tmp.Replace(" x1", ""));
+ if (cum.ShouldRemove()) removecums.Add(cum);
+ }
+ if (cums.Count > 1) MakeCumFilthMixture(totalleak, filthlabels);
+ else if (cums.Count == 1) MakeCumFilth(cums.First(), totalleak);
+ foreach (Cum cum in removecums)
+ {
+ cums.Remove(cum);
+ }
+ removecums.Clear();
+ cumd = TotalCumPercent - cumd;
+ if (totalleak >= 1.0f) AfterCumOut();
+ AfterFluidOut(cumd);
+
+ }
+
+ ///
+ /// Force excrete cums in womb and get excreted amount of specific cum.
+ ///
+ ///
+ ///
+ ///
+ public float CumOut(Cum targetcum, float portion = 0.1f)
+ {
+ if (cums.NullOrEmpty()) return 0;
+ float totalleak = 0;
+ List filthlabels = new List();
+ float outcum = 0;
+ float cumd = TotalCumPercent;
+ List removecums = new List();
+ foreach (Cum cum in cums)
+ {
+ float vd = cum.DismishForce(portion);
+ if (cum.Equals(targetcum)) outcum = vd;
+ //MakeCumFilth(cum, vd - cum.volume);
+ string tmp = "FilthLabelWithSource".Translate(cum.FilthDef.label, cum.pawn?.LabelShort ?? "Unknown", 1.ToString());
+ filthlabels.Add(tmp.Replace(" x1", ""));
+ totalleak += vd;
+ if (cum.ShouldRemove()) removecums.Add(cum);
+ }
+ if (cums.Count > 1) MakeCumFilthMixture(totalleak, filthlabels);
+ else if (cums.Count == 1) MakeCumFilth(cums.First(), totalleak);
+ foreach (Cum cum in removecums)
+ {
+ cums.Remove(cum);
+ }
+ removecums.Clear();
+ cumd = TotalCumPercent - cumd;
+ AfterFluidOut(cumd);
+ return outcum;
+ }
+
+ ///
+ /// Force excrete cums in womb and get mixture of cum.
+ ///
+ ///
+ ///
+ ///
+ public Cum MixtureOut(ThingDef mixtureDef ,float portion = 0.1f)
+ {
+ if (cums.NullOrEmpty()) return null;
+ Color color = GetCumMixtureColor;
+ float totalleak = 0;
+ List cumlabels = new List();
+ float cumd = TotalCumPercent;
+ List removecums = new List();
+ foreach (Cum cum in cums)
+ {
+ float vd = cum.DismishForce(portion);
+ string tmp = "FilthLabelWithSource".Translate(cum.FilthDef.label, cum.pawn?.LabelShort ?? "Unknown", 1.ToString());
+ cumlabels.Add(tmp.Replace(" x1", ""));
+ totalleak += vd;
+ if (cum.ShouldRemove()) removecums.Add(cum);
+ }
+ foreach (Cum cum in removecums)
+ {
+ cums.Remove(cum);
+ }
+ removecums.Clear();
+ return new CumMixture(parent.pawn, totalleak, cumlabels, color, mixtureDef);
+ }
+
+
+ ///
+ /// Fertilize eggs and return the result
+ ///
+ ///
+ protected bool FertilizationCheck()
+ {
+ if (!eggs.NullOrEmpty())
+ {
+ bool onefertilized = false;
+ foreach (Egg egg in eggs)
+ {
+ if (!egg.fertilized) egg.fertilizer = Fertilize();
+ if (egg.fertilizer != null)
+ {
+ egg.fertilized = true;
+ egg.lifespanhrs += 240;
+ onefertilized = true;
+ }
+ }
+ return onefertilized;
+ }
+ else return false;
+ }
+
+ public void Initialize()
+ {
+ Props = (CompProperties_Menstruation)props;
+
+ if (!Props.infertile)
+ {
+ if (follicularIntervalhours < 0)
+ {
+ follicularIntervalhours = PeriodRandomizer(Props.folicularIntervalDays * 24, Props.deviationFactor);
+ curStage = RandomStage();
+ }
+
+ if (lutealIntervalhours < 0) lutealIntervalhours = PeriodRandomizer(Props.lutealIntervalDays * 24, Props.deviationFactor);
+ if (bleedingIntervalhours < 0) bleedingIntervalhours = PeriodRandomizer(Props.bleedingIntervalDays * 24, Props.deviationFactor);
+ if (recoveryIntervalhours < 0) recoveryIntervalhours = PeriodRandomizer(Props.recoveryIntervalDays * 24, Props.deviationFactor);
+ if (crampPain < 0) crampPain = PainRandomizer();
+ if (cums == null) cums = new List();
+ if (eggs == null) eggs = new List();
+
+
+ InitOvary(parent.pawn.ageTracker.AgeBiologicalYears);
+
+ if (parent.pawn.IsPregnant()) curStage = Stage.Pregnant;
+ if (parent.pawn.IsAnimal())
+ {
+ if (Configurations.EnableAnimalCycle)
+ {
+ HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(curStage), tickInterval, parent.pawn, false);
+ }
+ }
+ else
+ {
+ if (!parent.pawn.IsPregnant() && parent.pawn.health.capacities.GetLevel(xxx.reproduction) <= 0) HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(Stage.Young), tickInterval, parent.pawn, false);
+ else HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(curStage), tickInterval, parent.pawn, false);
+ }
+ }
+ else
+ {
+ if (cums == null) cums = new List();
+ curStage = Stage.None;
+ HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(curStage), tickInterval, parent.pawn, false);
+ }
+ //Log.Message(parent.pawn.Label + " - Initialized menstruation comp");
+ loaded = true;
+ }
+
+ protected void InitOvary(int ageYear)
+ {
+ if (!Configurations.EnableMenopause)
+ {
+ RemoveClimactericEffect();
+ }
+ else if (ovarypower < -50000)
+ {
+ if (Props.ovaryPower > 10000000) ovarypower = Props.ovaryPower;
+ else
+ {
+ float avglittersize;
+ try
+ {
+ avglittersize = Rand.ByCurveAverage(parent.pawn.def.race.litterSizeCurve);
+ }
+ catch (NullReferenceException)
+ {
+ avglittersize = 1;
+ }
+
+ ovarypower = (int)(((Props.ovaryPower * Utility.RandGaussianLike(0.70f, 1.30f) * parent.pawn.def.race.lifeExpectancy / ThingDefOf.Human.race.lifeExpectancy)
+ - (Math.Max(0, ageYear - RJWSettings.sex_minimum_age * parent.pawn.def.race.lifeExpectancy / ThingDefOf.Human.race.lifeExpectancy))
+ * (60 / (Props.folicularIntervalDays + Props.lutealIntervalDays) * Configurations.CycleAcceleration)) * avglittersize);
+ if (ovarypower < 1)
+ {
+ Hediff hediff = HediffMaker.MakeHediff(VariousDefOf.Hediff_Menopause, parent.pawn);
+ hediff.Severity = 0.2f;
+ parent.pawn.health.AddHediff(hediff, Genital_Helper.get_genitalsBPR(parent.pawn));
+ curStage = Stage.Young;
+ }
+ else if (ovarypower < ovarypowerthreshold)
+ {
+ Hediff hediff = HediffMaker.MakeHediff(VariousDefOf.Hediff_Climacteric, parent.pawn);
+ hediff.Severity = 0.008f * (ovarypowerthreshold - ovarypower);
+ parent.pawn.health.AddHediff(hediff, Genital_Helper.get_genitalsBPR(parent.pawn));
+ }
+ }
+ }
+ }
+
+ public void RecoverOvary(float multiply = 0.2f)
+ {
+ ovarypower = Math.Max(0, (int)(ovarypower * multiply));
+ if (ovarypower >= ovarypowerthreshold)
+ {
+ RemoveClimactericEffect();
+ }
+ }
+
+
+ protected void AfterSimulator()
+ {
+ if (Configurations.EnableMenopause && ovarypower < ovarypowerthreshold)
+ {
+ if (sexNeed == null) sexNeed = parent.pawn.needs.TryGetNeed(VariousDefOf.SexNeed);
+ else
+ {
+ if (sexNeed.CurLevel < 0.5) sexNeed.CurLevel += 0.01f;
+ }
+ }
+ }
+
+ public void SetEstrus(int days)
+ {
+ HediffDef estrusdef;
+ if (Props.consealedEstrus) estrusdef = VariousDefOf.Hediff_Estrus_Consealed;
+ else estrusdef = VariousDefOf.Hediff_Estrus;
+
+ HediffWithComps hediff = (HediffWithComps)parent.pawn.health.hediffSet.GetFirstHediffOfDef(estrusdef);
+ if (hediff != null)
+ {
+ hediff.Severity = (float)days / Configurations.CycleAcceleration + 0.2f;
+ }
+ else
+ {
+ hediff = (HediffWithComps)HediffMaker.MakeHediff(estrusdef, parent.pawn);
+ hediff.Severity = (float)days / Configurations.CycleAcceleration + 0.2f;
+ parent.pawn.health.AddHediff(hediff);
+ }
+ }
+
+ public bool IsBreedingSeason()
+ {
+ if (Props.breedingSeason == SeasonalBreed.Always) return true;
+ switch (GenLocalDate.Season(parent.pawn.Map))
+ {
+ case Season.Spring:
+ if ((Props.breedingSeason & SeasonalBreed.Spring) != 0) return true;
+ break;
+ case Season.Summer:
+ case Season.PermanentSummer:
+ if ((Props.breedingSeason & SeasonalBreed.Summer) != 0) return true;
+ break;
+ case Season.Fall:
+ if ((Props.breedingSeason & SeasonalBreed.Fall) != 0) return true;
+ break;
+ case Season.Winter:
+ case Season.PermanentWinter:
+ if ((Props.breedingSeason & SeasonalBreed.Winter) != 0) return true;
+ break;
+ default:
+ return false;
+ }
+ return false;
+ }
+
+ protected Pawn Fertilize()
+ {
+ if (cums.NullOrEmpty()) return null;
+ foreach (Cum cum in cums)
+ {
+ float rand = Rand.Range(0.0f, 1.0f);
+ if (cum.pawn != null && !cum.notcum && rand < cum.FertVolume * cum.fertFactor * Configurations.FertilizeChance * Props.basefertilizationChanceFactor)
+ {
+ if (!RJWPregnancySettings.bestial_pregnancy_enabled && (xxx.is_animal(parent.pawn) ^ xxx.is_animal(cum.pawn))) continue;
+ parent.pawn.records.AddTo(VariousDefOf.AmountofFertilizedEggs, 1);
+ return cum.pawn;
+ }
+ }
+ return null;
+ }
+
+ //for now, only one egg can be implanted
+ protected bool Implant()
+ {
+ if (!eggs.NullOrEmpty())
+ {
+ List deadeggs = new List();
+ bool pregnant = false;
+ foreach (Egg egg in eggs)
+ {
+ if (!egg.fertilized || egg.fertstage < 168) continue;
+ else if (Rand.Range(0.0f, 1.0f) <= Configurations.ImplantationChance * Props.baseImplantationChanceFactor * ImplantFactor * InterspeciesImplantFactor(egg.fertilizer))
+ {
+ if (!parent.pawn.IsPregnant())
+ {
+ if (!Configurations.UseMultiplePregnancy)
+ {
+ PregnancyHelper.PregnancyDecider(parent.pawn, egg.fertilizer);
+ pregnant = true;
+ break;
+ }
+ else
+ {
+ Hediff_BasePregnancy.Create(parent.pawn, egg.fertilizer);
+ Hediff hediff = PregnancyHelper.GetPregnancy(parent.pawn);
+ //if (hediff is Hediff_BasePregnancy)
+ //{
+ // Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff;
+ // if (h.babies.Count > 1) h.babies.RemoveRange(1, h.babies.Count - 1);
+ //}
+ pregnant = true;
+ deadeggs.Add(egg);
+ }
+ }
+ else if (Configurations.UseMultiplePregnancy && Configurations.EnableHeteroOvularTwins)
+ {
+ Hediff hediff = PregnancyHelper.GetPregnancy(parent.pawn);
+ if (hediff is Hediff_MultiplePregnancy)
+ {
+ Hediff_MultiplePregnancy h = (Hediff_MultiplePregnancy)hediff;
+ h.AddNewBaby(parent.pawn, egg.fertilizer);
+ }
+ pregnant = true;
+ deadeggs.Add(egg);
+ }
+ else
+ {
+ pregnant = true;
+ break;
+ }
+ }
+ else deadeggs.Add(egg);
+ }
+
+ if (pregnant && (!Configurations.UseMultiplePregnancy || !Configurations.EnableHeteroOvularTwins))
+ {
+ eggs.Clear();
+ deadeggs.Clear();
+ return true;
+ }
+ else if (!deadeggs.NullOrEmpty())
+ {
+ foreach (Egg egg in deadeggs)
+ {
+ eggs.Remove(egg);
+ }
+ deadeggs.Clear();
+ }
+ if (pregnant) return true;
+ }
+ return false;
+ }
+
+ protected void BleedOut()
+ {
+ //FilthMaker.TryMakeFilth(parent.pawn.Position, parent.pawn.Map, ThingDefOf.Filth_Blood,parent.pawn.Label);
+ CumIn(parent.pawn, Rand.Range(0.02f * Configurations.BleedingAmount, 0.04f * Configurations.BleedingAmount), Translations.Menstrual_Blood, -5.0f, parent.pawn.def.race?.BloodDef ?? ThingDefOf.Filth_Blood);
+ GetNotCum(Translations.Menstrual_Blood).color = BloodColor;
+ }
+
+ ///
+ /// Make filth ignoring absorber
+ ///
+ ///
+ ///
+ protected void MakeCumFilth(Cum cum, float amount)
+ {
+ if (amount >= minmakefilthvalue) FilthMaker.TryMakeFilth(parent.pawn.Position, parent.pawn.Map, cum.FilthDef, cum.pawn?.LabelShort ?? "Unknown");
+ }
+
+ ///
+ /// Absorb cum and return leaked amount
+ ///
+ ///
+ ///
+ ///
+ ///
+ protected float AbsorbCum(Cum cum, float amount, Absorber absorber)
+ {
+
+ if (absorber != null)
+ {
+ float absorbable = absorber.GetStatValue(VariousDefOf.MaxAbsorbable);
+ absorber.SetColor(Colors.CMYKLerp(GetCumMixtureColor, absorber.DrawColor, 1f - amount / absorbable));
+ if (!absorber.dirty)
+ {
+ absorber.absorbedfluids += amount;
+ if (absorber.absorbedfluids > absorbable)
+ {
+ absorber.def = absorber.DirtyDef;
+ //absorber.fluidColor = GetCumMixtureColor;
+ absorber.dirty = true;
+ }
+ }
+ else
+ {
+
+ //if (absorber.LeakAfterDirty) FilthMaker.TryMakeFilth(parent.pawn.Position, parent.pawn.Map, cum.FilthDef, cum.pawn.LabelShort);
+ return amount;
+ }
+ }
+ else
+ {
+ //if (amount >= minmakefilthvalue) FilthMaker.TryMakeFilth(parent.pawn.Position, parent.pawn.Map, cum.FilthDef, cum.pawn.LabelShort);
+ return amount;
+ }
+ return 0;
+ }
+
+ protected float MakeCumFilthMixture(float amount, List cumlabels)
+ {
+
+ if (amount >= minmakefilthvalue)
+ {
+ FilthMaker_Colored.TryMakeFilth(parent.pawn.Position, parent.pawn.Map, VariousDefOf.FilthMixture, cumlabels, GetCumMixtureColor, false);
+ }
+ return amount;
+ }
+
+
+
+
+ protected void EggDecay()
+ {
+ List deadeggs = new List();
+ foreach (Egg egg in eggs)
+ {
+ egg.lifespanhrs -= Configurations.CycleAcceleration;
+ egg.position += Configurations.CycleAcceleration;
+ if (egg.lifespanhrs < 0) deadeggs.Add(egg);
+ if (egg.fertilized) egg.fertstage += Configurations.CycleAcceleration;
+ }
+ if (!deadeggs.NullOrEmpty())
+ {
+ foreach (Egg egg in deadeggs)
+ {
+ eggs.Remove(egg);
+ }
+ deadeggs.Clear();
+ }
+ }
+
+ protected void AddCrampPain()
+ {
+ Hediff hediff = HediffMaker.MakeHediff(VariousDefOf.Hediff_MenstrualCramp, parent.pawn);
+ hediff.Severity = crampPain * Rand.Range(0.9f, 1.1f);
+ HediffCompProperties_SeverityPerDay Prop = (HediffCompProperties_SeverityPerDay)hediff.TryGetComp().props;
+ Prop.severityPerDay = -hediff.Severity / (bleedingIntervalhours / 24) * Configurations.CycleAcceleration;
+ parent.pawn.health.AddHediff(hediff, Genital_Helper.get_genitalsBPR(parent.pawn));
+ }
+
+ protected virtual void FollicularAction()
+ {
+ if (!IsBreedingSeason())
+ {
+ GoNextStage(Stage.Anestrus);
+ return;
+ }
+ if (curStageHrs >= FollicularIntervalHours)
+ {
+ GoNextStage(Stage.Ovulatory);
+ }
+ else
+ {
+ curStageHrs += Configurations.CycleAcceleration;
+ if (!estrusflag && curStageHrs > FollicularIntervalHours - Props.estrusDaysBeforeOvulation * 24)
+ {
+ estrusflag = true;
+ SetEstrus(Props.eggLifespanDays + Props.estrusDaysBeforeOvulation);
+ }
+ StayCurrentStage();
+ }
+ }
+
+ protected virtual void OvulatoryAction()
+ {
+ estrusflag = false;
+ int i = 0;
+ float eggnum;
+ try
+ {
+ eggnum = Rand.ByCurve(parent.pawn.RaceProps.litterSizeCurve) + eggstack;
+ }
+ catch(NullReferenceException)
+ {
+ eggnum = 1 + eggstack;
+ }
+
+ do
+ {
+ ovarypower--;
+ eggs.Add(new Egg((int)(Props.eggLifespanDays * 24 / CycleFactor)));
+ i++;
+ } while (i < (int)eggnum);
+ eggstack = 0;
+ if (Configurations.EnableMenopause && ovarypower < 1)
+ {
+ eggs.Clear();
+ Hediff hediff = parent.pawn.health.hediffSet.GetFirstHediffOfDef(VariousDefOf.Hediff_Climacteric);
+ if (hediff != null) parent.pawn.health.RemoveHediff(hediff);
+ hediff = HediffMaker.MakeHediff(VariousDefOf.Hediff_Menopause, parent.pawn);
+ hediff.Severity = 0.2f;
+ parent.pawn.health.AddHediff(hediff, Genital_Helper.get_genitalsBPR(parent.pawn));
+ ovarypower = 0;
+ GoNextStage(Stage.Young);
+ }
+ else if (Configurations.EnableMenopause && ovarypower < ovarypowerthreshold)
+ {
+ Hediff hediff = HediffMaker.MakeHediff(VariousDefOf.Hediff_Climacteric, parent.pawn);
+ hediff.Severity = 0.008f * i;
+ parent.pawn.health.AddHediff(hediff, Genital_Helper.get_genitalsBPR(parent.pawn));
+ lutealIntervalhours = PeriodRandomizer(lutealIntervalhours, Props.deviationFactor * 6);
+ GoNextStage(Stage.ClimactericLuteal);
+ }
+ else
+ {
+ lutealIntervalhours = PeriodRandomizer(lutealIntervalhours, Props.deviationFactor);
+ GoNextStage(Stage.Luteal);
+ }
+ }
+
+ protected virtual void LutealAction()
+ {
+ if (!eggs.NullOrEmpty())
+ {
+ FertilizationCheck();
+ EggDecay();
+ if (Implant())
+ {
+ if (Breast != null)
+ {
+ Breast.PregnancyTransition();
+ }
+ GoNextStage(Stage.Pregnant);
+ }
+ else
+ {
+ curStageHrs += Configurations.CycleAcceleration;
+ StayCurrentStage();
+ }
+ }
+ else if (curStageHrs <= lutealIntervalhours)
+ {
+ curStageHrs += Configurations.CycleAcceleration;
+ StayCurrentStage();
+ }
+ else
+ {
+ if (Props.bleedingIntervalDays == 0)
+ {
+ follicularIntervalhours = PeriodRandomizer(follicularIntervalhours, Props.deviationFactor);
+ GoNextStage(Stage.Follicular);
+ }
+ else
+ {
+ bleedingIntervalhours = PeriodRandomizer(bleedingIntervalhours, Props.deviationFactor);
+ if (crampPain >= 0.05f)
+ {
+ AddCrampPain();
+ }
+ GoNextStage(Stage.Bleeding);
+ }
+ }
+ }
+
+ protected virtual void BleedingAction()
+ {
+ if (curStageHrs >= bleedingIntervalhours)
+ {
+ follicularIntervalhours = PeriodRandomizer(follicularIntervalhours, Props.deviationFactor);
+ Hediff hediff = parent.pawn.health.hediffSet.GetFirstHediffOfDef(VariousDefOf.Hediff_MenstrualCramp);
+ if (hediff != null) parent.pawn.health.RemoveHediff(hediff);
+ GoNextStage(Stage.Follicular);
+ }
+ else
+ {
+ if (curStageHrs < bleedingIntervalhours / 4) for (int i = 0; i < Configurations.CycleAcceleration; i++) BleedOut();
+ curStageHrs += Configurations.CycleAcceleration;
+ StayCurrentStage();
+ }
+ }
+
+ protected virtual void PregnantAction()
+ {
+ if (!eggs.NullOrEmpty())
+ {
+ FertilizationCheck();
+ EggDecay();
+ Implant();
+ }
+ if (parent.pawn.IsPregnant()) StayCurrentStageConst(Stage.Pregnant);
+ else
+ {
+ if (Breast != null)
+ {
+ Breast.BirthTransition();
+ }
+ GoNextStage(Stage.Recover);
+ }
+ }
+
+ protected virtual void YoungAction()
+ {
+ if (!Configurations.EnableMenopause && ovarypower < 0 && ovarypower > -10000)
+ {
+ RemoveClimactericEffect();
+ }
+ if (parent.pawn.health.capacities.GetLevel(xxx.reproduction) <= 0)
+ {
+ StayCurrentStageConst(Stage.Young);
+ }
+ else GoNextStage(Stage.Follicular);
+ }
+
+ protected virtual void AnestrusAction()
+ {
+ if (IsBreedingSeason())
+ {
+ GoFollicularOrBleeding();
+ }
+ else
+ {
+ StayCurrentStage();
+ }
+ }
+
+ protected virtual void ThoughtCumInside(Pawn cummer)
+ {
+ if (xxx.is_human(parent.pawn) && xxx.is_human(cummer))
+ {
+ if (parent.pawn.GetStatValue(StatDefOf.PawnBeauty) >= 0 || cummer.Has(Quirk.ImpregnationFetish) || cummer.Has(Quirk.Breeder))
+ {
+ if (cummer.relations.OpinionOf(parent.pawn) <= -25)
+ {
+ cummer.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.HaterCameInsideM, parent.pawn);
+ }
+ else
+ {
+ cummer.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.CameInsideM, parent.pawn);
+ }
+ }
+
+ if (IsDangerDay)
+ {
+ if (parent.pawn.Has(Quirk.Breeder) || parent.pawn.Has(Quirk.ImpregnationFetish))
+ {
+ parent.pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.CameInsideFFetish, cummer);
+ }
+ else if (!parent.pawn.relations.DirectRelationExists(PawnRelationDefOf.Spouse, cummer) && !parent.pawn.relations.DirectRelationExists(PawnRelationDefOf.Fiance, cummer))
+ {
+ if (parent.pawn.health.capacities.GetLevel(xxx.reproduction) < 0.50f) parent.pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.CameInsideFLowFert, cummer);
+ else parent.pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.CameInsideF, cummer);
+ }
+ else if (parent.pawn.relations.OpinionOf(cummer) <= -5)
+ {
+ parent.pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.HaterCameInsideF, cummer);
+ }
+ }
+ else
+ {
+ if (parent.pawn.Has(Quirk.Breeder) || parent.pawn.Has(Quirk.ImpregnationFetish))
+ {
+ parent.pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.CameInsideFFetishSafe, cummer);
+ }
+ else if (parent.pawn.relations.OpinionOf(cummer) <= -5)
+ {
+ parent.pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.HaterCameInsideFSafe, cummer);
+ }
+ }
+ }
+ }
+
+
+
+ private Action PeriodSimulator(Stage targetstage)
+ {
+ Action action = null;
+ switch (targetstage)
+ {
+ case Stage.Follicular:
+ action = FollicularAction;
+ break;
+ case Stage.Ovulatory:
+ action = OvulatoryAction;
+ break;
+ case Stage.Luteal:
+ action = LutealAction;
+ break;
+ case Stage.Bleeding:
+ action = BleedingAction;
+ break;
+ case Stage.Fertilized: //Obsoleted stage. merged in luteal stage
+ action = delegate
+ {
+ ModLog.Message("Obsoleted stage. skipping...");
+ GoNextStage(Stage.Luteal);
+ };
+ break;
+ case Stage.Pregnant:
+ action = PregnantAction;
+ break;
+ case Stage.Recover:
+ action = delegate
+ {
+ if (curStageHrs >= recoveryIntervalhours)
+ {
+ if (Configurations.EnableMenopause && ovarypower < ovarypowerthreshold)
+ {
+ GoNextStage(Stage.ClimactericFollicular);
+ }
+ else if (parent.pawn.health.capacities.GetLevel(xxx.reproduction) == 0)
+ {
+ GoNextStage(Stage.Young);
+ }
+ else
+ {
+ follicularIntervalhours = PeriodRandomizer(follicularIntervalhours, Props.deviationFactor);
+ GoNextStage(Stage.Follicular);
+ }
+ }
+ else
+ {
+ curStageHrs += Configurations.CycleAcceleration;
+ StayCurrentStage();
+ }
+ };
+ break;
+ case Stage.None:
+ action = delegate
+ {
+ StayCurrentStageConst(Stage.None);
+ };
+ break;
+ case Stage.Young:
+ action = YoungAction;
+ break;
+ case Stage.ClimactericFollicular:
+ action = delegate
+ {
+ if (!Configurations.EnableMenopause)
+ {
+ RemoveClimactericEffect();
+ StayCurrentStage();
+ }
+ else if (curStageHrs >= (follicularIntervalhours - bleedingIntervalhours) * CycleFactor)
+ {
+ GoNextStage(Stage.Ovulatory);
+ }
+ else if (ovarypower < ovarypowerthreshold / 3 && Rand.Range(0.0f, 1.0f) < 0.2f) //skips ovulatory
+ {
+ follicularIntervalhours = PeriodRandomizer(follicularIntervalhours, Props.deviationFactor * 6);
+ GoNextStage(Stage.ClimactericFollicular);
+ }
+ else
+ {
+ curStageHrs += Configurations.CycleAcceleration;
+ StayCurrentStage();
+ }
+ };
+ break;
+ case Stage.ClimactericLuteal:
+ action = delegate
+ {
+ if (!Configurations.EnableMenopause)
+ {
+ RemoveClimactericEffect();
+ StayCurrentStage();
+ }
+ else if (!eggs.NullOrEmpty())
+ {
+ FertilizationCheck();
+ EggDecay();
+ if (Implant()) GoNextStage(Stage.Pregnant);
+ else
+ {
+ curStageHrs += Configurations.CycleAcceleration;
+ StayCurrentStage();
+ }
+ }
+ else if (curStageHrs <= lutealIntervalhours)
+ {
+ curStageHrs += Configurations.CycleAcceleration;
+ StayCurrentStage();
+ }
+ else
+ {
+ if (Props.bleedingIntervalDays == 0)
+ {
+ follicularIntervalhours = PeriodRandomizer(follicularIntervalhours, Props.deviationFactor * 6);
+ GoNextStage(Stage.ClimactericFollicular);
+ }
+ else if (ovarypower < ovarypowerthreshold / 4 || (ovarypower < ovarypowerthreshold / 3 && Rand.Range(0.0f, 1.0f) < 0.3f)) //skips bleeding
+ {
+ follicularIntervalhours = PeriodRandomizer(follicularIntervalhours, Props.deviationFactor * 6);
+ GoNextStage(Stage.ClimactericFollicular);
+ }
+ else
+ {
+ bleedingIntervalhours = PeriodRandomizer(bleedingIntervalhours, Props.deviationFactor);
+ if (crampPain >= 0.05f)
+ {
+ AddCrampPain();
+ }
+ GoNextStage(Stage.ClimactericBleeding);
+ }
+ }
+
+ };
+ break;
+ case Stage.ClimactericBleeding:
+ action = delegate
+ {
+ if (!Configurations.EnableMenopause)
+ {
+ RemoveClimactericEffect();
+ StayCurrentStage();
+ }
+ else if (curStageHrs >= bleedingIntervalhours)
+ {
+ follicularIntervalhours = PeriodRandomizer(follicularIntervalhours, Props.deviationFactor * 6);
+ GoNextStage(Stage.ClimactericFollicular);
+ }
+ else
+ {
+ if (curStageHrs < bleedingIntervalhours / 6) for (int i = 0; i < Configurations.CycleAcceleration; i++) BleedOut();
+ curStageHrs += Configurations.CycleAcceleration;
+ StayCurrentStage();
+ }
+ };
+ break;
+ case Stage.Anestrus:
+ action = AnestrusAction;
+ break;
+ default:
+ curStage = Stage.Follicular;
+ curStageHrs = 0;
+ if (follicularIntervalhours < 0) follicularIntervalhours = PeriodRandomizer(Props.folicularIntervalDays * 24, Props.deviationFactor);
+ HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(Stage.Follicular), tickInterval, parent.pawn, false);
+ break;
+ }
+ action += delegate
+ {
+ if (parent.pawn.health.capacities.GetLevel(xxx.reproduction) <= 0) curStage = Stage.Young;
+ CumOut();
+ AfterSimulator();
+ };
+
+ actionref = action;
+ return actionref;
+
+
+
+
+ }
+
+ protected void GoNextStage(Stage nextstage, float factor = 1.0f)
+ {
+ curStageHrs = 0;
+ curStage = nextstage;
+ HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(nextstage), (int)(tickInterval * factor), parent.pawn, false);
+ }
+
+
+ protected void GoNextStageSetHour(Stage nextstage, int hour, float factor = 1.0f)
+ {
+ curStageHrs = hour;
+ curStage = nextstage;
+ HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(nextstage), (int)(tickInterval * factor), parent.pawn, false);
+ }
+
+ //stage can be interrupted in other reasons
+ protected void StayCurrentStage(float factor = 1.0f)
+ {
+ HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(curStage), (int)(tickInterval * factor), parent.pawn, false);
+ }
+
+ //stage never changes
+ protected void StayCurrentStageConst(Stage curstage, float factor = 1.0f)
+ {
+ HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(curstage), (int)(tickInterval * factor), parent.pawn, false);
+ }
+
+ protected void GoFollicularOrBleeding()
+ {
+ if (Props.bleedingIntervalDays == 0)
+ {
+ follicularIntervalhours = PeriodRandomizer(follicularIntervalhours, Props.deviationFactor);
+ GoNextStage(Stage.Follicular);
+ }
+ else
+ {
+ bleedingIntervalhours = PeriodRandomizer(bleedingIntervalhours, Props.deviationFactor);
+ GoNextStage(Stage.Bleeding);
+ }
+ }
+
+ protected void RemoveClimactericEffect()
+ {
+ Hediff hediff = parent.pawn.health.hediffSet.GetFirstHediffOfDef(VariousDefOf.Hediff_Climacteric);
+ if (hediff != null) parent.pawn.health.RemoveHediff(hediff);
+ hediff = parent.pawn.health.hediffSet.GetFirstHediffOfDef(VariousDefOf.Hediff_Menopause);
+ if (hediff != null) parent.pawn.health.RemoveHediff(hediff);
+ if (curStage == Stage.ClimactericBleeding) curStage = Stage.Bleeding;
+ else if (curStage == Stage.ClimactericFollicular) curStage = Stage.Follicular;
+ else if (curStage == Stage.ClimactericLuteal) curStage = Stage.Luteal;
+ }
+
+ protected int PeriodRandomizer(int intervalhours, float deviation)
+ {
+ return intervalhours + (int)(intervalhours * Rand.Range(-deviation, deviation));
+ }
+
+ protected float InterspeciesImplantFactor(Pawn fertilizer)
+ {
+ if (fertilizer.def.defName == parent.pawn.def.defName) return 1.0f;
+ else
+ {
+ if (RJWPregnancySettings.complex_interspecies) return SexUtility.BodySimilarity(parent.pawn, fertilizer);
+ else return RJWPregnancySettings.interspecies_impregnation_modifier;
+ }
+ }
+
+ protected float PainRandomizer()
+ {
+ float rand = Rand.Range(0.0f, 1.0f);
+ if (rand < 0.01f) return Rand.Range(0.0f, 0.2f);
+ else if (rand < 0.2f) return Rand.Range(0.1f, 0.2f);
+ else if (rand < 0.8f) return Rand.Range(0.2f, 0.4f);
+ else if (rand < 0.95f) return Rand.Range(0.4f, 0.6f);
+ else return Rand.Range(0.6f, 1.0f);
+ }
+
+ protected Stage RandomStage()
+ {
+ int rand = Rand.Range(0, 2);
+
+ switch (rand)
+ {
+ case 0:
+ curStageHrs = Rand.Range(0, (Props.folicularIntervalDays - Props.bleedingIntervalDays) * 24);
+ return Stage.Follicular;
+ case 1:
+ curStageHrs = Rand.Range(0, Props.eggLifespanDays * 24);
+ return Stage.Luteal;
+ case 2:
+ curStageHrs = Rand.Range(0, Props.bleedingIntervalDays * 24);
+ return Stage.Bleeding;
+ default: return Stage.Follicular;
+ }
+
+
+ }
+
+
+
+
+
+ public class Egg : IExposable
+ {
+ public bool fertilized;
+ public int lifespanhrs;
+ public Pawn fertilizer;
+ public int position;
+ public int fertstage = 0;
+
+ public Egg()
+ {
+ fertilized = false;
+ lifespanhrs = 96;
+ fertilizer = null;
+ position = 0;
+ }
+
+ public Egg(int lifespanhrs)
+ {
+ fertilized = false;
+ this.lifespanhrs = lifespanhrs;
+ fertilizer = null;
+ position = 0;
+ }
+
+ public void ExposeData()
+ {
+ Scribe_References.Look(ref fertilizer, "fertilizer", true);
+ Scribe_Values.Look(ref fertilized, "fertilized", fertilized, true);
+ Scribe_Values.Look(ref lifespanhrs, "lifespanhrs", lifespanhrs, true);
+ Scribe_Values.Look(ref position, "position", position, true);
+ Scribe_Values.Look(ref fertstage, "fertstage", fertstage, true);
+ }
+ }
+
+
+ }
+
+ public class HediffComp_Anus : HediffComp
+ {
+ public override void CompPostTick(ref float severityAdjustment)
+ {
+ }
+ }
+
+
+
+
+
+
+
+
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs
new file mode 100644
index 0000000..3155d68
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs
@@ -0,0 +1,165 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using Verse;
+using rjw;
+using UnityEngine;
+
+namespace RJW_Menstruation
+{
+ public static class MenstruationUtility
+ {
+ public static HediffComp_Menstruation GetMenstruationComp(this Pawn pawn)
+ {
+ var hedifflist = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn))?.FindAll((Hediff h) => h.def.defName.ToLower().Contains("vagina"));
+ HediffComp_Menstruation result;
+ if (hedifflist.NullOrEmpty()) return null;
+ else
+ {
+ foreach (Hediff h in hedifflist)
+ {
+ result = h.TryGetComp();
+ if (result != null) return result;
+ }
+ }
+ return null;
+ }
+
+ public static HediffComp_Menstruation GetMenstruationComp(this Hediff hediff)
+ {
+ if (hediff is Hediff_PartBaseNatural || hediff is Hediff_PartBaseArtifical)
+ {
+ return hediff.TryGetComp();
+ }
+ return null;
+ }
+
+ public static float GetFertilityChance(this HediffComp_Menstruation comp)
+ {
+ return comp.TotalFertCum * Configurations.FertilizeChance;
+ }
+
+ public static HediffComp_Menstruation.Stage GetCurStage(this Pawn pawn)
+ {
+ return GetMenstruationComp(pawn)?.curStage ?? HediffComp_Menstruation.Stage.Bleeding;
+ }
+
+
+ public static Texture2D GetPregnancyIcon(this HediffComp_Menstruation comp, Hediff hediff)
+ {
+ string icon = "";
+ Texture2D result = null;
+ int babycount = 1;
+ if (hediff is Hediff_MechanoidPregnancy)
+ {
+ return ContentFinder.Get(("Womb/Mechanoid_Fluid"), true);
+ }
+ else if (hediff is Hediff_BasePregnancy)
+ {
+ Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff;
+ babycount = h.babies.Count;
+ string fetustex = h.babies?.FirstOrDefault()?.def.GetModExtension()?.fetusTexPath ?? "Fetus/Fetus_Default";
+ if (h.GestationProgress < 0.2f) icon = comp.wombTex + "_Implanted";
+ else if (h.GestationProgress < 0.3f)
+ {
+ if (h.babies?.First()?.def?.race?.FleshType == FleshTypeDefOf.Insectoid) icon += "Fetus/Insects/Insect_Early00";
+ else icon += "Fetus/Fetus_Early00";
+ }
+ else if (h.GestationProgress < 0.4f) icon += fetustex + "00";
+ else if (h.GestationProgress < 0.5f) icon += fetustex + "01";
+ else if (h.GestationProgress < 0.6f) icon += fetustex + "02";
+ else if (h.GestationProgress < 0.7f) icon += fetustex + "03";
+ else if (h.GestationProgress < 0.8f) icon += fetustex + "04";
+ else icon += fetustex + "05";
+ }
+ else icon = "Fetus/Slime_Abomi02";
+
+ result = TryGetTwinsIcon(icon, babycount);
+
+ if (result == null) result = ContentFinder.Get((icon), true);
+ return result;
+ }
+
+ public static Texture2D TryGetTwinsIcon(string path, int babycount)
+ {
+ Texture2D result = null;
+ for (int i = babycount; i > 1; i--)
+ {
+ result = ContentFinder.Get((path + "_Multiplet_" + i), false);
+ if (result != null) return result;
+ }
+ return null;
+ }
+
+ public static Texture2D GetCumIcon(this HediffComp_Menstruation comp)
+ {
+ string icon = comp.wombTex;
+ float cumpercent = comp.TotalCumPercent;
+ if (cumpercent < 0.001f) return ContentFinder.Get("Womb/Empty", true);
+ else if (cumpercent < 0.01f) icon += "_Cum_00";
+ else if (cumpercent < 0.05f) icon += "_Cum_01";
+ else if (cumpercent < 0.11f) icon += "_Cum_02";
+ else if (cumpercent < 0.17f) icon += "_Cum_03";
+ else if (cumpercent < 0.23f) icon += "_Cum_04";
+ else if (cumpercent < 0.29f) icon += "_Cum_05";
+ else if (cumpercent < 0.35f) icon += "_Cum_06";
+ else if (cumpercent < 0.41f) icon += "_Cum_07";
+ else if (cumpercent < 0.47f) icon += "_Cum_08";
+ else if (cumpercent < 0.53f) icon += "_Cum_09";
+ else if (cumpercent < 0.59f) icon += "_Cum_10";
+ else if (cumpercent < 0.65f) icon += "_Cum_11";
+ else if (cumpercent < 0.71f) icon += "_Cum_12";
+ else if (cumpercent < 0.77f) icon += "_Cum_13";
+ else if (cumpercent < 0.83f) icon += "_Cum_14";
+ else if (cumpercent < 0.89f) icon += "_Cum_15";
+ else if (cumpercent < 0.95f) icon += "_Cum_16";
+ else icon += "_Cum_17";
+ Texture2D cumtex = ContentFinder.Get((icon), true);
+ return cumtex;
+ }
+
+ public static Texture2D GetWombIcon(this HediffComp_Menstruation comp)
+ {
+ if (comp.Pawn.health.hediffSet.GetHediffs().FirstOrDefault() != null) return ContentFinder.Get(("Womb/Womb_Egged"), true);
+ string icon = comp.wombTex;
+ HediffComp_Menstruation.Stage stage = comp.curStage;
+ if (stage == HediffComp_Menstruation.Stage.Bleeding) icon += "_Bleeding";
+
+ Texture2D wombtex = ContentFinder.Get((icon), true);
+
+ return wombtex;
+ }
+ public static Texture2D GetEggIcon(this HediffComp_Menstruation comp)
+ {
+ if (comp.parent.pawn.IsPregnant())
+ {
+ if (comp.parent.pawn.GetPregnancyProgress() < 0.2f) return ContentFinder.Get("Eggs/Egg_Implanted00", true);
+ else return ContentFinder.Get("Womb/Empty", true);
+ }
+ else if (!comp.IsEggExist) return ContentFinder.Get("Womb/Empty", true);
+ else
+ {
+ int fertstage = comp.IsFertilized;
+ if (fertstage >= 0)
+ {
+ if (fertstage < 1) return ContentFinder.Get("Eggs/Egg_Fertilized00", true);
+ else if (fertstage < 24) return ContentFinder.Get("Eggs/Egg_Fertilized01", true);
+ else return ContentFinder.Get("Eggs/Egg_Fertilized02", true);
+ }
+ else if (comp.IsEggFertilizing) return ContentFinder.Get("Eggs/Egg_Fertilizing01", true);
+ else return ContentFinder.Get("Eggs/Egg", true);
+ }
+ }
+
+ public static void DrawEggOverlay(this HediffComp_Menstruation comp, Rect wombRect)
+ {
+ Rect rect = new Rect(wombRect.xMax - wombRect.width / 3, wombRect.y, wombRect.width / 3, wombRect.width / 3);
+ GUI.color = Color.white;
+ GUI.DrawTexture(rect, comp.GetEggIcon(), ScaleMode.ScaleToFit);
+ }
+
+ }
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs
new file mode 100644
index 0000000..ea8b3c2
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs
@@ -0,0 +1,639 @@
+using RimWorld;
+using rjw;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using Verse;
+
+namespace RJW_Menstruation
+{
+ public class Hediff_MultiplePregnancy : Hediff_BasePregnancy
+ {
+ public override void DiscoverPregnancy()
+ {
+ PregnancyThought();
+ base.DiscoverPregnancy();
+ }
+
+ protected void PregnancyThought()
+ {
+ if (!is_discovered && xxx.is_human(pawn))
+ {
+ if (!pawn.Has(Quirk.Breeder) && pawn.relations?.DirectRelations?.Find(x => x.def.Equals(PawnRelationDefOf.Spouse) || x.def.Equals(PawnRelationDefOf.Fiance)) == null)
+ {
+ if (pawn.Has(Quirk.ImpregnationFetish) || pawn.relations?.DirectRelations?.Find(x => x.def.Equals(PawnRelationDefOf.Lover)) != null)
+ {
+ pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.UnwantedPregnancyMild);
+ }
+ else
+ {
+ pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.UnwantedPregnancy);
+ }
+ }
+
+ }
+ }
+
+ public override void GiveBirth()
+ {
+
+ if (babies.NullOrEmpty())
+ {
+ ModLog.Warning(" no babies (debug?) " + this.GetType().Name);
+ if (father == null)
+ {
+ father = Trytogetfather(ref pawn);
+ }
+ Initialize(pawn, father);
+ }
+
+ List siblings = new List();
+ foreach (Pawn baby in babies)
+ {
+ if (xxx.is_animal(baby))
+ {
+ BestialBirth(baby, siblings);
+ }
+ else
+ {
+ HumanlikeBirth(baby, siblings);
+ }
+
+ }
+
+ pawn.health.RemoveHediff(this);
+ }
+
+ public string GetBabyInfo()
+ {
+ string res = "";
+ if (!babies.NullOrEmpty())
+ {
+ var babiesdistinct = babies.Distinct(new RaceComparer());
+ int iteration = 0;
+ foreach (Pawn baby in babiesdistinct)
+ {
+ int num = babies.Where(x => x.def.Equals(baby.def)).Count();
+ if (iteration > 0) res += ", ";
+ res += num + " " + baby.def.label;
+ iteration++;
+ }
+ res += " " + Translations.Dialog_WombInfo02;
+ return res;
+ }
+ return "Null";
+ }
+
+ public string GetFatherInfo()
+ {
+ string res = Translations.Dialog_WombInfo03 + ": ";
+ if (!babies.NullOrEmpty())
+ {
+ var babiesdistinct = babies.Distinct(new FatherComparer(pawn));
+ int iteration = 0;
+ foreach (Pawn baby in babiesdistinct)
+ {
+ if (iteration > 0) res += ", ";
+ res += Utility.GetFather(baby, pawn)?.LabelShort ?? "Unknown";
+ iteration++;
+ }
+ return res;
+ }
+ return "Null";
+ }
+
+
+
+
+ private void HumanlikeBirth(Pawn baby, List siblings)
+ {
+ Pawn mother = pawn; Pawn father = Utility.GetFather(baby, pawn);
+ //backup melanin, LastName for when baby reset by other mod on spawn/backstorychange
+ //var skin_whiteness = baby.story.melanin;
+ //var last_name = baby.story.birthLastName;
+
+ PawnUtility.TrySpawnHatchedOrBornPawn(baby, mother);
+
+ var sex_need = mother.needs?.TryGetNeed();
+ if (mother.Faction != null && !(mother.Faction?.IsPlayer ?? false) && sex_need != null)
+ {
+ sex_need.CurLevel = 1.0f;
+ }
+ if (mother.Faction != null)
+ {
+ if (mother.Faction != baby.Faction)
+ baby.SetFaction(mother.Faction);
+ }
+ if (mother.IsPrisonerOfColony)
+ {
+ baby.guest.CapturedBy(Faction.OfPlayer);
+ }
+
+ foreach (Pawn sibling in siblings)
+ {
+ baby.relations.AddDirectRelation(PawnRelationDefOf.Sibling, sibling);
+ }
+ siblings.Add(baby);
+
+ PostBirth(mother, father, baby);
+ }
+
+
+ private void BestialBirth(Pawn baby, List siblings)
+ {
+ Pawn mother = pawn; Pawn father = Utility.GetFather(baby, pawn);
+ //backup melanin, LastName for when baby reset by other mod on spawn/backstorychange
+ //var skin_whiteness = baby.story.melanin;
+ //var last_name = baby.story.birthLastName;
+
+ PawnUtility.TrySpawnHatchedOrBornPawn(baby, mother);
+
+ Need_Sex sex_need = mother.needs?.TryGetNeed();
+ if (mother.Faction != null && !(mother.Faction?.IsPlayer ?? false) && sex_need != null)
+ {
+ sex_need.CurLevel = 1.0f;
+ }
+ if (mother.Faction != null)
+ {
+ if (mother.Faction != baby.Faction)
+ baby.SetFaction(mother.Faction);
+ }
+
+
+ foreach (Pawn sibling in siblings)
+ {
+ baby.relations.AddDirectRelation(PawnRelationDefOf.Sibling, sibling);
+ }
+ siblings.Add(baby);
+ train(baby, mother, father);
+
+ PostBirth(mother, father, baby);
+
+ //restore melanin, LastName for when baby reset by other mod on spawn/backstorychange
+ //baby.story.melanin = skin_whiteness;
+ //baby.story.birthLastName = last_name;
+ }
+
+ protected override void GenerateBabies()
+ {
+ AddNewBaby(pawn, father);
+ }
+
+
+
+ protected void train(Pawn baby, Pawn mother, Pawn father)
+ {
+ bool _;
+ if (!xxx.is_human(baby) && baby.Faction == Faction.OfPlayer)
+ {
+ if (xxx.is_human(mother) && baby.Faction == Faction.OfPlayer && baby.training.CanAssignToTrain(TrainableDefOf.Obedience, out _).Accepted)
+ {
+ baby.training.Train(TrainableDefOf.Obedience, mother);
+ }
+ if (xxx.is_human(mother) && baby.Faction == Faction.OfPlayer && baby.training.CanAssignToTrain(TrainableDefOf.Tameness, out _).Accepted)
+ {
+ baby.training.Train(TrainableDefOf.Tameness, mother);
+ }
+ }
+ }
+
+
+ public bool AddNewBaby(Pawn mother, Pawn father)
+ {
+ float melanin;
+ string lastname;
+ if (xxx.is_human(mother))
+ {
+ if (xxx.is_human(father))
+ {
+ melanin = (mother.story?.melanin ?? 0f + father.story?.melanin ?? 0f) / 2;
+ lastname = NameTriple.FromString(father.Name.ToStringFull).Last;
+ }
+ else
+ {
+ melanin = mother.story?.melanin ?? 0f;
+ lastname = NameTriple.FromString(mother.Name.ToStringFull).Last;
+ }
+
+ }
+ else
+ {
+ if (xxx.is_human(father))
+ {
+ melanin = father.story?.melanin ?? 0f;
+ lastname = NameTriple.FromString(father.Name.ToStringFull).Last;
+ }
+ else
+ {
+ melanin = Rand.Range(0, 1.0f);
+ lastname = NameTriple.FromString(mother.Name.ToStringFull).Last;
+ }
+ }
+
+
+
+ PawnGenerationRequest request = new PawnGenerationRequest(
+ newborn: true,
+ allowDowned: true,
+ faction: mother.IsPrisoner ? null : mother.Faction,
+ canGeneratePawnRelations: false,
+ forceGenerateNewPawn: true,
+ colonistRelationChanceFactor: 0,
+ allowFood: false,
+ allowAddictions: false,
+ relationWithExtraPawnChanceFactor: 0,
+ fixedMelanin: melanin,
+ fixedLastName: lastname,
+ kind: BabyPawnKindDecider(mother, father)
+ );
+
+ int division = 1;
+ HairDef firsthair = null;
+ Color firsthaircolor = Color.white;
+ BodyTypeDef firstbody = null;
+ CrownType firstcrown = CrownType.Undefined;
+ string firstheadpath = null;
+ string firstHARcrown = null;
+ while (Rand.Chance(Configurations.EnzygoticTwinsChance) && division < Configurations.MaxEnzygoticTwins) division++;
+ for (int i = 0; i < division; i++)
+ {
+ Pawn baby = GenerateBaby(request, mother, father);
+ if (division > 1)
+ {
+ if (i == 0 && baby.story != null)
+ {
+ firsthair = baby.story.hairDef;
+ firsthaircolor = baby.story.hairColor;
+ request.FixedGender = baby.gender;
+ firstbody = baby.story.bodyType;
+ firstcrown = baby.story.crownType;
+ firstheadpath = (string)baby.story.GetMemberValue("headGraphicPath");
+ if (firstheadpath == null)
+ {
+ baby.story.SetMemberValue("headGraphicPath", GraphicDatabaseHeadRecords.GetHeadRandom(baby.gender, baby.story.SkinColor, baby.story.crownType, true).GraphicPath);
+ firstheadpath = (string)baby.story.GetMemberValue("headGraphicPath");
+ }
+ if (Configurations.HARActivated && baby.IsHAR())
+ {
+ firstHARcrown = baby.GetHARCrown();
+ }
+
+ }
+ else
+ {
+ if (baby.story != null)
+ {
+ baby.story.hairDef = firsthair;
+ baby.story.hairColor = firsthaircolor;
+ baby.story.bodyType = firstbody;
+ baby.story.crownType = firstcrown;
+ baby.story.SetMemberValue("headGraphicPath", firstheadpath);
+
+ if (Configurations.HARActivated && baby.IsHAR())
+ {
+ baby.SetHARCrown(firstHARcrown);
+ }
+ }
+ }
+ }
+
+ if (baby != null) babies.Add(baby);
+ }
+
+
+
+
+ return true;
+
+ }
+
+ public Pawn GenerateBaby(PawnGenerationRequest request, Pawn mother, Pawn father)
+ {
+
+ Pawn baby = PawnGenerator.GeneratePawn(request);
+ if (baby != null)
+ {
+ if (xxx.is_human(baby))
+ {
+ List traitpool = new List();
+ baby.SetMother(mother);
+ if (mother != father)
+ {
+ if (father.gender != Gender.Female) baby.SetFather(father);
+ else
+ {
+ baby.relations.AddDirectRelation(PawnRelationDefOf.Parent, father);
+ }
+ }
+
+ if (xxx.has_traits(pawn) && pawn.RaceProps.Humanlike)
+ {
+ foreach (Trait momtrait in pawn.story.traits.allTraits)
+ {
+ if (!RJWPregnancySettings.trait_filtering_enabled || !non_genetic_traits.Contains(momtrait.def.defName))
+ traitpool.Add(momtrait);
+ }
+ }
+ if (father != null && xxx.has_traits(father) && father.RaceProps.Humanlike)
+ {
+ foreach (Trait poptrait in father.story.traits.allTraits)
+ {
+ if (!RJWPregnancySettings.trait_filtering_enabled || !non_genetic_traits.Contains(poptrait.def.defName))
+ traitpool.Add(poptrait);
+ }
+ }
+ updateTraits(baby, traitpool);
+
+ }
+ else if (baby.relations != null)
+ {
+ baby.relations.AddDirectRelation(VariousDefOf.Relation_birthgiver, mother);
+ mother.relations.AddDirectRelation(VariousDefOf.Relation_spawn, baby);
+ if (mother != father)
+ {
+ baby.relations.AddDirectRelation(VariousDefOf.Relation_birthgiver, father);
+ father.relations.AddDirectRelation(VariousDefOf.Relation_spawn, baby);
+ }
+ }
+ }
+ return baby;
+ }
+
+ ///
+ /// Decide pawnkind from mother and father
+ /// Come from RJW
+ ///
+ ///
+ ///
+ ///
+ public PawnKindDef BabyPawnKindDecider(Pawn mother, Pawn father)
+ {
+ PawnKindDef spawn_kind_def = mother.kindDef;
+
+ int flag = 0;
+ if (xxx.is_human(mother)) flag += 2;
+ if (xxx.is_human(father)) flag += 1;
+ //Mother - Father = Flag
+ //Human - Human = 3
+ //Human - Animal = 2
+ //Animal - Human = 1
+ //Animal - Animal = 0
+
+ switch (flag)
+ {
+ case 3:
+ if (!Rand.Chance(RJWPregnancySettings.humanlike_DNA_from_mother)) spawn_kind_def = father.kindDef;
+ break;
+ case 2:
+ if (RJWPregnancySettings.bestiality_DNA_inheritance == 0f) spawn_kind_def = father.kindDef;
+ else if (!Rand.Chance(RJWPregnancySettings.bestial_DNA_from_mother)) spawn_kind_def = father.kindDef;
+ break;
+ case 1:
+ if (RJWPregnancySettings.bestiality_DNA_inheritance == 1f) spawn_kind_def = father.kindDef;
+ else if (!Rand.Chance(RJWPregnancySettings.bestial_DNA_from_mother)) spawn_kind_def = father.kindDef;
+ break;
+ case 0:
+ if (!Rand.Chance(RJWPregnancySettings.bestial_DNA_from_mother)) spawn_kind_def = father.kindDef;
+ break;
+ }
+
+ bool IsAndroidmother = AndroidsCompatibility.IsAndroid(mother);
+ bool IsAndroidfather = AndroidsCompatibility.IsAndroid(father);
+ if (IsAndroidmother && !IsAndroidfather)
+ {
+ spawn_kind_def = father.kindDef;
+ }
+ else if (!IsAndroidmother && IsAndroidfather)
+ {
+ spawn_kind_def = mother.kindDef;
+ }
+
+ string MotherRaceName = "";
+ string FatherRaceName = "";
+ MotherRaceName = mother.kindDef?.race?.defName;
+ PawnKindDef tmp = spawn_kind_def;
+ if (father != null)
+ FatherRaceName = father.kindDef?.race?.defName;
+
+
+ if (FatherRaceName != "" && Configurations.UseHybridExtention)
+ {
+ spawn_kind_def = GetHybrid(father, mother);
+ //Log.Message("pawnkind: " + spawn_kind_def?.defName);
+ }
+
+ if (MotherRaceName != FatherRaceName && FatherRaceName != "")
+ {
+ if (!Configurations.UseHybridExtention || spawn_kind_def == null)
+ {
+ spawn_kind_def = tmp;
+ var groups = DefDatabase.AllDefs.Where(x => !(x.hybridRaceParents.NullOrEmpty() || x.hybridChildKindDef.NullOrEmpty()));
+
+
+ //ModLog.Message(" found custom RaceGroupDefs " + groups.Count());
+ foreach (var t in groups)
+ {
+ if ((t.hybridRaceParents.Contains(MotherRaceName) && t.hybridRaceParents.Contains(FatherRaceName))
+ || (t.hybridRaceParents.Contains("Any") && (t.hybridRaceParents.Contains(MotherRaceName) || t.hybridRaceParents.Contains(FatherRaceName))))
+ {
+ //ModLog.Message(" has hybridRaceParents");
+ if (t.hybridChildKindDef.Contains("MotherKindDef"))
+ spawn_kind_def = mother.kindDef;
+ else if (t.hybridChildKindDef.Contains("FatherKindDef") && father != null)
+ spawn_kind_def = father.kindDef;
+ else
+ {
+ //ModLog.Message(" trying hybridChildKindDef " + t.defName);
+ var child_kind_def_list = new List();
+ child_kind_def_list.AddRange(DefDatabase.AllDefs.Where(x => t.hybridChildKindDef.Contains(x.defName)));
+
+ //ModLog.Message(" found custom hybridChildKindDefs " + t.hybridChildKindDef.Count);
+ if (!child_kind_def_list.NullOrEmpty())
+ spawn_kind_def = child_kind_def_list.RandomElement();
+ }
+ }
+ }
+ }
+
+ }
+ else if (!Configurations.UseHybridExtention || spawn_kind_def == null)
+ {
+ spawn_kind_def = mother.RaceProps?.AnyPawnKind ?? mother.kindDef;
+ }
+
+ if (spawn_kind_def.defName.Contains("Nymph"))
+ {
+ //child is nymph, try to find other PawnKindDef
+ var spawn_kind_def_list = new List();
+ spawn_kind_def_list.AddRange(DefDatabase.AllDefs.Where(x => x.race == spawn_kind_def.race && !x.defName.Contains("Nymph")));
+ //no other PawnKindDef found try mother
+ if (spawn_kind_def_list.NullOrEmpty())
+ spawn_kind_def_list.AddRange(DefDatabase.AllDefs.Where(x => x.race == mother.kindDef.race && !x.defName.Contains("Nymph")));
+ //no other PawnKindDef found try father
+ if (spawn_kind_def_list.NullOrEmpty() && father != null)
+ spawn_kind_def_list.AddRange(DefDatabase.AllDefs.Where(x => x.race == father.kindDef.race && !x.defName.Contains("Nymph")));
+ //no other PawnKindDef found fallback to generic colonist
+ if (spawn_kind_def_list.NullOrEmpty())
+ spawn_kind_def = PawnKindDefOf.Colonist;
+
+ if (!spawn_kind_def_list.NullOrEmpty()) spawn_kind_def = spawn_kind_def_list.RandomElement();
+ }
+
+
+
+
+ return spawn_kind_def;
+
+ }
+
+ public PawnKindDef GetHybrid(Pawn first, Pawn second)
+ {
+ PawnKindDef res = null;
+ Pawn opposite = second;
+ HybridInformations info = null;
+
+
+ if (!Configurations.HybridOverride.NullOrEmpty())
+ {
+ info = Configurations.HybridOverride.FirstOrDefault(x => x.defName == first.def?.defName && (x.hybridExtension?.Exists(y => y.defName == second.def?.defName) ?? false));
+ if (info == null)
+ {
+ info = Configurations.HybridOverride.FirstOrDefault(x => x.defName == second.def?.defName && (x.hybridExtension?.Exists(y => y.defName == first.def?.defName) ?? false));
+ opposite = first;
+ }
+ }
+
+ if (info != null)
+ {
+ res = info.GetHybridWith(opposite.def.defName) ?? null;
+ }
+ if (res != null) return res;
+
+
+ PawnDNAModExtension dna;
+ dna = first.def.GetModExtension();
+ if (dna != null)
+ {
+ res = dna.GetHybridWith(second.def.defName) ?? null;
+ }
+ else
+ {
+ dna = second.def.GetModExtension();
+ if (dna != null)
+ {
+ res = dna.GetHybridWith(first.def.defName) ?? null;
+ }
+ }
+ return res;
+ }
+
+ ///
+ /// Copy from RJW
+ ///
+ ///
+ ///
+ public void updateTraits(Pawn pawn, List parenttraits)
+ {
+ if (pawn?.story?.traits == null) return;
+
+ List traitlist = new List(pawn.story.traits.allTraits);
+ if (!parenttraits.NullOrEmpty()) traitlist.AddRange(parenttraits);
+ else return;
+
+
+ var forcedTraits = traitlist
+ .Where(x => x.ScenForced)
+ .Distinct(new TraitComparer(ignoreDegree: true));
+
+ List res = new List();
+ res.AddRange(forcedTraits);
+
+ var comparer = new TraitComparer(); // trait comparision implementation, because without game compares traits *by reference*, makeing them all unique.
+
+ while (res.Count < traitlist.Count && traitlist.Count > 0)
+ {
+ int index = Rand.Range(0, traitlist.Count); // getting trait and removing from the pull
+ var trait = traitlist[index];
+ traitlist.RemoveAt(index);
+
+ if (!res.Any(x => comparer.Equals(x, trait) || // skipping traits conflicting with already added
+ x.def.ConflictsWith(trait)))
+ {
+ res.Add(new Trait(trait.def, trait.Degree, false));
+ }
+ }
+
+
+ pawn.story.traits.allTraits = res;
+ }
+
+
+
+ }
+
+ ///
+ /// Copy from RJW
+ ///
+ public class TraitComparer : IEqualityComparer
+ {
+ bool ignoreForced;
+ bool ignoreDegree;
+
+ public TraitComparer(bool ignoreDegree = false, bool ignoreForced = true)
+ {
+ this.ignoreDegree = ignoreDegree;
+ this.ignoreForced = ignoreForced;
+ }
+
+ public bool Equals(Trait x, Trait y)
+ {
+ return
+ x.def == y.def &&
+ (ignoreDegree || (x.Degree == y.Degree)) &&
+ (ignoreForced || (x.ScenForced == y.ScenForced));
+ }
+
+ public int GetHashCode(Trait obj)
+ {
+ return
+ (obj.def.GetHashCode() << 5) +
+ (ignoreDegree ? 0 : obj.Degree) +
+ ((ignoreForced || obj.ScenForced) ? 0 : 0x10);
+ }
+ }
+
+ public class RaceComparer : IEqualityComparer
+ {
+ public bool Equals(Pawn x, Pawn y)
+ {
+ return x.def.Equals(y.def);
+ }
+
+ public int GetHashCode(Pawn obj)
+ {
+ return obj.def.GetHashCode();
+ }
+ }
+
+ public class FatherComparer : IEqualityComparer
+ {
+ Pawn mother;
+
+ public FatherComparer(Pawn mother)
+ {
+ this.mother = mother;
+ }
+
+ public bool Equals(Pawn x, Pawn y)
+ {
+ if (Utility.GetFather(x, mother) == null && Utility.GetFather(y, mother) == null) return true;
+ return Utility.GetFather(x, mother)?.Label.Equals(Utility.GetFather(y, mother)?.Label) ?? false;
+ }
+
+ public int GetHashCode(Pawn obj)
+ {
+ return obj.def.GetHashCode();
+ }
+ }
+
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/JobDrivers.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/JobDrivers.cs
new file mode 100644
index 0000000..e28a9f6
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/JobDrivers.cs
@@ -0,0 +1,122 @@
+using System.Collections.Generic;
+using RimWorld;
+using Verse;
+using Verse.AI;
+
+namespace RJW_Menstruation
+{
+ public class JobDriver_VaginaWashing : JobDriver
+ {
+ const int excretingTime = 300;//ticks - 120 = 2 real seconds, 3 in-game minutes
+
+ public override bool TryMakePreToilReservations(bool errorOnFailed)
+ {
+ return pawn.Reserve(pawn, job, 1, -1, null, errorOnFailed);
+ }
+
+ protected override IEnumerable MakeNewToils()
+ {
+
+ HediffComp_Menstruation Comp = pawn.GetMenstruationComp();
+ this.FailOn(delegate
+ {
+ return !(Comp.TotalCumPercent > 0.001);
+ });
+ Toil excreting = Toils_General.Wait(excretingTime, TargetIndex.None);//duration of
+
+ excreting.WithProgressBarToilDelay(TargetIndex.A);
+ yield return excreting;
+ yield return new Toil()
+ {
+ initAction = delegate ()
+ {
+ Comp.CumOut(null, 0.5f);
+ if (Comp.TotalCumPercent > 0.001) JumpToToil(excreting);
+ }
+ };
+ //yield return excreting;
+ yield break;
+ }
+ }
+
+ public class JobDriver_MilkSelf : JobDriver
+ {
+ protected float progress = 0;
+ protected float MilkingTime
+ {
+ get
+ {
+ return 250f * Fullness + 50f;
+ }
+ }
+ protected virtual float Fullness
+ {
+ get
+ {
+ return comp?.Fullness ?? 0;
+ }
+ }
+
+ private CompMilkable comp;
+
+ public override bool TryMakePreToilReservations(bool errorOnFailed)
+ {
+ return pawn.Reserve(pawn, job, 1, -1, null, errorOnFailed);
+ }
+
+ protected virtual void PreMakeNewToils()
+ {
+ comp = pawn.GetComp();
+ }
+
+ protected override IEnumerable MakeNewToils()
+ {
+ PreMakeNewToils();
+ this.FailOnDespawnedNullOrForbidden(TargetIndex.A);
+ this.FailOnNotCasualInterruptible(TargetIndex.A);
+ Toil milking = new Toil();
+ milking.initAction = delegate ()
+ {
+ pawn.pather.StopDead();
+ };
+ milking.tickAction = MilkingTick;
+ milking.AddFinishAction(Finish);
+ milking.defaultCompleteMode = ToilCompleteMode.Never;
+ milking.WithProgressBar(TargetIndex.A, () => progress / MilkingTime);
+ yield return milking;
+ yield break;
+ }
+
+ protected void MilkingTick()
+ {
+ progress += pawn.GetStatValue(StatDefOf.AnimalGatherSpeed);
+ if (progress > MilkingTime)
+ {
+ Gathered();
+ pawn.jobs.EndCurrentJob(JobCondition.Succeeded);
+ }
+ PostTickAction();
+ }
+
+ protected virtual void Gathered()
+ {
+ pawn.GetComp().Gathered(pawn);
+ }
+
+ protected virtual void Finish()
+ {
+ if(pawn.CurJobDef == JobDefOf.Wait_MaintainPosture)
+ {
+ pawn.jobs.EndCurrentJob(JobCondition.InterruptForced);
+ }
+ }
+
+ protected virtual void PostTickAction()
+ {
+ }
+
+
+ }
+
+
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/Patch/GetGizmos.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/Patch/GetGizmos.cs
new file mode 100644
index 0000000..a602aeb
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/Patch/GetGizmos.cs
@@ -0,0 +1,118 @@
+using HarmonyLib;
+using rjw;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using Verse;
+
+namespace RJW_Menstruation
+{
+ [HarmonyPatch(typeof(Pawn), "GetGizmos")]
+ public class Pawn_GetGizmos
+ {
+ public static void Postfix(ref IEnumerable __result, Pawn __instance)
+ {
+ List gizmoList = __result.ToList();
+
+ if (!__instance.ShowStatus())
+ {
+ return;
+ }
+
+ if (Configurations.EnableWombIcon && __instance.gender == Gender.Female)
+ {
+ if (!__instance.IsAnimal())
+ {
+ AddWombGizmos(__instance, ref gizmoList);
+ }
+ else if (Configurations.EnableAnimalCycle)
+ {
+ AddWombGizmos(__instance, ref gizmoList);
+ }
+ }
+
+
+
+
+ __result = gizmoList;
+ }
+
+
+ private static void AddWombGizmos(Pawn __instance, ref List gizmoList)
+ {
+ HediffComp_Menstruation comp = __instance.GetMenstruationComp();
+ if (comp != null) gizmoList.Add(CreateGizmo_WombStatus(__instance, comp));
+
+ }
+
+ private static Gizmo CreateGizmo_WombStatus(Pawn pawn, HediffComp_Menstruation comp)
+ {
+ Texture2D icon, icon_overay;
+ string description = "";
+ if (Configurations.Debug) description += comp.curStage + ": " + comp.curStageHrs + "\n" + "fertcums: " + comp.TotalFertCum + "\n" + "ovarypower: " + comp.ovarypower + "\n" + "eggs: " + comp.GetNumofEggs + "\n";
+ else description += comp.GetCurStageLabel + "\n";
+ if (pawn.IsPregnant())
+ {
+ Hediff hediff = PregnancyHelper.GetPregnancy(pawn);
+ if (Utility.ShowFetusImage((Hediff_BasePregnancy)hediff))
+ {
+ icon = comp.GetPregnancyIcon(hediff);
+ if (hediff is Hediff_BasePregnancy)
+ {
+ Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff;
+ if (h.GestationProgress < 0.2f) icon_overay = comp.GetCumIcon();
+ else icon_overay = ContentFinder.Get(("Womb/Empty"), true);
+ }
+ else icon_overay = ContentFinder.Get(("Womb/Empty"), true);
+ }
+ else
+ {
+ icon = comp.GetWombIcon();
+ icon_overay = comp.GetCumIcon();
+ }
+ }
+ else
+ {
+ Hediff hediff = pawn.health.hediffSet.GetHediffs().FirstOrDefault();
+ if (hediff != null)
+ {
+ icon = ContentFinder.Get(("Womb/Womb_Egged"), true);
+ icon_overay = ContentFinder.Get(("Womb/Empty"), true);
+ }
+ else
+ {
+ icon = comp.GetWombIcon();
+ icon_overay = comp.GetCumIcon();
+ }
+ }
+ foreach (string s in comp.GetCumsInfo) description += s + "\n";
+
+ Color c = comp.GetCumMixtureColor;
+
+ Gizmo gizmo = new Gizmo_Womb
+ {
+ defaultLabel = pawn.LabelShort,
+ defaultDesc = description,
+ icon = icon,
+ icon_overay = icon_overay,
+ shrinkable = Configurations.AllowShrinkIcon,
+ cumcolor = c,
+ comp = comp,
+ order = 100,
+ hotKey = VariousDefOf.OpenStatusWindowKey,
+ action = delegate
+ {
+ Dialog_WombStatus.ToggleWindow(pawn, comp);
+ }
+ };
+
+ return gizmo;
+ }
+ }
+
+
+
+
+
+
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/Patch/Harmony.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/Patch/Harmony.cs
new file mode 100644
index 0000000..69ad681
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/Patch/Harmony.cs
@@ -0,0 +1,20 @@
+using HarmonyLib;
+using System.Reflection;
+using Verse;
+
+namespace RJW_Menstruation
+{
+ [StaticConstructorOnStartup]
+ internal static class First
+ {
+ static First()
+ {
+ var har = new Harmony("RJW_Menstruation");
+ har.PatchAll(Assembly.GetExecutingAssembly());
+ }
+ }
+
+
+
+
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs
new file mode 100644
index 0000000..7770873
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs
@@ -0,0 +1,166 @@
+using HarmonyLib;
+using HugsLib;
+using RimWorld;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using Verse;
+using rjw;
+
+namespace RJW_Menstruation
+{
+
+ [HarmonyPatch(typeof(Pawn), "SpawnSetup")]
+ public class Pawn_Patch
+ {
+ public static void Postfix(Map map, bool respawningAfterLoad, Pawn __instance)
+ {
+ //Log.Message("Initialize on spawnsetup");
+ HediffComp_Menstruation comp = __instance.GetMenstruationComp();
+ if (comp != null)
+ {
+ HugsLibController.Instance.TickDelayScheduler.TryUnscheduleCallback(comp.actionref);
+ comp.Initialize();
+ }
+ HediffComp_Breast bcomp = __instance.GetBreastComp();
+ if (bcomp != null)
+ {
+ HugsLibController.Instance.TickDelayScheduler.TryUnscheduleCallback(bcomp.action);
+ bcomp.Initialize();
+ }
+
+
+ }
+ }
+
+ [HarmonyPatch(typeof(FloatMenuMakerMap), "AddHumanlikeOrders")]
+ public class HumanlikeOrder_Patch
+ {
+ public static void Postfix(Vector3 clickPos, Pawn pawn, List opts)
+ {
+ var selftargets = GenUI.TargetsAt(clickPos, TargetingParameters.ForSelf(pawn));
+
+ foreach (LocalTargetInfo t in selftargets)
+ {
+ if (pawn.HasMenstruationComp()) opts.AddDistinct(MakeSelfMenu(pawn, t));
+ break;
+ }
+
+
+
+
+ }
+
+ public static FloatMenuOption MakeSelfMenu(Pawn pawn, LocalTargetInfo target)
+ {
+ FloatMenuOption option = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(Translations.FloatMenu_CleanSelf, delegate ()
+ {
+ pawn.jobs.TryTakeOrderedJob(new Verse.AI.Job(VariousDefOf.VaginaWashing, null, null, target.Cell));
+ }, MenuOptionPriority.Low), pawn, target);
+
+ return option;
+ }
+
+
+
+ }
+
+ //[HarmonyPatch(typeof(HealthCardUtility), "DrawHediffListing")]
+ //public class DrawHediffListing_Patch
+ //{
+ // public const float buttonWidth = 80f;
+ // public const float buttonHeight = 20f;
+ //
+ // public static void Postfix(Rect rect, Pawn pawn, bool showBloodLoss)
+ // {
+ // if (Configurations.EnableButtonInHT && pawn.HasMenstruationComp())
+ // {
+ // Rect buttonrect = new Rect(rect.xMax - buttonWidth, rect.yMax - buttonHeight, buttonWidth, buttonHeight);
+ // if (Widgets.ButtonText(buttonrect, "Status"))
+ // {
+ // Dialog_WombStatus.ToggleWindow(pawn,pawn.GetMenstruationComp());
+ // }
+ // }
+ //
+ //
+ // }
+ //}
+
+ [HarmonyPatch(typeof(HealthCardUtility), "DrawHediffRow")]
+ public class DrawHediffRow_Patch
+ {
+ public const float buttonWidth = 50f;
+ public const float buttonHeight = 20f;
+
+ public static void Prefix(Rect rect, Pawn pawn, IEnumerable diffs, ref float curY)
+ {
+ if (Configurations.EnableButtonInHT && pawn.ShowStatus())
+ {
+ HediffComp_Menstruation comp = diffs.First().GetMenstruationComp();
+ if (comp != null)
+ {
+ Rect buttonrect = new Rect((rect.xMax) / 2 - 5f, curY + 2f, buttonWidth, buttonHeight);
+ if (Widgets.ButtonText(buttonrect, Translations.Button_HealthTab))
+ {
+ Dialog_WombStatus.ToggleWindow(pawn, comp);
+ }
+ }
+ }
+
+ }
+
+ }
+
+
+ //Merged to RJW
+ //[HarmonyPatch(typeof(PawnColumnWorker_Pregnant), "GetIconFor")]
+ //public class PawnColumnWorker_Patch_Icon
+ //{
+ // public static void Postfix(Pawn pawn, ref Texture2D __result)
+ // {
+ // if (pawn.IsVisiblyPregnant()) __result = ContentFinder.Get("UI/Icons/Animal/Pregnant", true);
+ // }
+ //
+ //}
+ //
+ //[HarmonyPatch(typeof(PawnColumnWorker_Pregnant), "GetTooltipText")]
+ //public class PawnColumnWorker_Patch_Tooltip
+ //{
+ // public static bool Prefix(Pawn pawn, ref string __result)
+ // {
+ // float gestationProgress = PregnancyHelper.GetPregnancy(pawn).Severity;
+ // int num = (int)(pawn.RaceProps.gestationPeriodDays * 60000f);
+ // int numTicks = (int)(gestationProgress * (float)num);
+ // __result = "PregnantIconDesc".Translate(numTicks.ToStringTicksToDays("F0"), num.ToStringTicksToDays("F0"));
+ // return false;
+ // }
+ //
+ //}
+ //
+ //[HarmonyPatch(typeof(TransferableUIUtility), "DoExtraAnimalIcons")]
+ //public class TransferableUIUtility_Patch_Icon
+ //{
+ // //private static readonly Texture2D PregnantIcon = ContentFinder.Get("UI/Icons/Animal/Pregnant", true);
+ //
+ //
+ //
+ // public static void Postfix(Transferable trad, Rect rect, ref float curX, Texture2D ___PregnantIcon)
+ // {
+ // Pawn pawn = trad.AnyThing as Pawn;
+ // if (pawn?.health?.hediffSet != null && pawn.IsVisiblyPregnant())
+ // {
+ // Rect rect3 = new Rect(curX - 24f, (rect.height - 24f) / 2f, 24f, 24f);
+ // curX -= 24f;
+ // if (Mouse.IsOver(rect3))
+ // {
+ // TooltipHandler.TipRegion(rect3, PawnColumnWorker_Pregnant.GetTooltipText(pawn));
+ // }
+ // GUI.DrawTexture(rect3, ___PregnantIcon);
+ // }
+ // }
+ //}
+
+
+
+
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs
new file mode 100644
index 0000000..3c606f2
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs
@@ -0,0 +1,120 @@
+using HarmonyLib;
+using rjw;
+using Verse;
+
+
+namespace RJW_Menstruation
+{
+
+ [HarmonyPatch(typeof(PregnancyHelper), "impregnate")]
+ public static class impregnate_Patch
+ {
+ public static bool Prefix(Pawn pawn, Pawn partner, xxx.rjwSextype sextype = xxx.rjwSextype.None)
+ {
+ if (sextype == xxx.rjwSextype.Vaginal)
+ {
+ var pawnpartBPR = Genital_Helper.get_genitalsBPR(pawn);
+ var maleparts = Genital_Helper.get_PartsHediffList(pawn, pawnpartBPR);
+ var partnerpartBPR = Genital_Helper.get_genitalsBPR(partner);
+ var femaleparts = Genital_Helper.get_PartsHediffList(partner, partnerpartBPR);
+
+ Pawn female = null, male = null;
+
+ if (Genital_Helper.has_vagina(partner, femaleparts))
+ {
+ female = partner;
+ male = pawn;
+ }
+ else if (Genital_Helper.has_vagina(pawn, maleparts))
+ {
+ female = pawn;
+ femaleparts = maleparts;
+ male = partner;
+ maleparts = Genital_Helper.get_PartsHediffList(partner, partnerpartBPR);
+ }
+ else return true;
+
+ if (female.IsAnimal() && !Configurations.EnableAnimalCycle) return true;
+ HediffComp_Menstruation comp = female.GetMenstruationComp();
+ if (comp != null)
+ {
+ if (Genital_Helper.has_penis_fertile(male, maleparts) && PregnancyHelper.CanImpregnate(male, female, sextype))
+ {
+ PregnancyHelper.Doimpregnate(male, female);
+ return false;
+ }
+ else if (Genital_Helper.has_ovipositorM(male, maleparts))
+ {
+ comp.CumIn(male, Rand.Range(0.5f,3.0f) * RJWSettings.cum_on_body_amount_adjust * male.BodySize, 1.0f);
+ }
+ else comp.CumIn(male, male.GetCumVolume(maleparts), 0);
+ }
+
+ //if (Genital_Helper.has_vagina(partner, partnerparts))
+ //{
+ // if (partner.IsAnimal() && !Configurations.EnableAnimalCycle) return true;
+ // HediffComp_Menstruation comp = Utility.GetMenstruationComp(partner);
+ // if (comp != null)
+ // {
+ // if (Genital_Helper.has_penis_fertile(pawn, pawnparts) && PregnancyHelper.CanImpregnate(pawn, partner, sextype))
+ // {
+ // PregnancyHelper.Doimpregnate(pawn, partner);
+ // return false;
+ // }
+ // else comp.CumIn(pawn, pawn.GetCumVolume(), 0);
+ // }
+ //}
+ //else if (Genital_Helper.has_vagina(pawn, pawnparts))
+ //{
+ // if (pawn.IsAnimal() && !Configurations.EnableAnimalCycle) return true;
+ // HediffComp_Menstruation comp = Utility.GetMenstruationComp(pawn);
+ // if (comp != null)
+ // {
+ // if (Genital_Helper.has_penis_fertile(partner, partnerparts) && PregnancyHelper.CanImpregnate(partner, pawn, sextype))
+ // {
+ // PregnancyHelper.Doimpregnate(partner, pawn);
+ // return false;
+ // }
+ // else comp.CumIn(partner, partner.GetCumVolume(), 0);
+ // }
+ //}
+ }
+ return true;
+
+
+ }
+ }
+
+ [HarmonyPatch(typeof(PregnancyHelper), "Doimpregnate")]
+ public static class Doimpregnate_Patch
+ {
+ public static bool Prefix(Pawn pawn, Pawn partner) // partner has vagina
+ {
+ if (partner.IsAnimal() && !Configurations.EnableAnimalCycle) return true;
+ HediffComp_Menstruation comp = partner.GetMenstruationComp();
+ if (comp != null)
+ {
+ if (AndroidsCompatibility.IsAndroid(pawn) && !AndroidsCompatibility.AndroidPenisFertility(pawn))
+ {
+ comp.CumIn(pawn, pawn.GetCumVolume(), 0);
+ return false;
+ }
+ else comp.CumIn(pawn, pawn.GetCumVolume(), pawn.health.capacities.GetLevel(xxx.reproduction));
+ return false;
+ }
+ ModLog.Message("used original rjw method: Comp missing");
+ return true;
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj b/1.3/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj
new file mode 100644
index 0000000..c757a46
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj
@@ -0,0 +1,364 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {EED2F3B9-8C20-4194-919E-8D151B29F70B}
+ Library
+ RJW_Menstruation
+ RJW_Menstruation
+ v4.7.2
+ 512
+ true
+ true
+ 게시\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ ..\..\..\Assemblies\
+ DEBUG;TRACE
+ prompt
+ 4
+ false
+
+
+ AnyCPU
+ pdbonly
+ true
+ ..\..\..\Assemblies\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ D:\잉어\Lib\Harmony.2.0.4.0\net472\0Harmony.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll
+ False
+
+
+ ..\..\..\..\..\..\..\workshop\content\294100\818773962\v1.2\Assemblies\HugsLib.dll
+ False
+
+
+ ..\..\..\..\RJW\1.2\Assemblies\RJW.dll
+ False
+
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\Unity.TextMeshPro.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.AccessibilityModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.AIModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.AndroidJNIModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.AnimationModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ARModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.AssetBundleModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.AudioModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ClothModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ClusterInputModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ClusterRendererModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CrashReportingModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.DirectorModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.DSPGraphModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.FileSystemHttpModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.GameCenterModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.GridModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.HotReloadModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ImageConversionModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.InputLegacyModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.InputModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.JSONSerializeModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.LocalizationModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ParticleSystemModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.PerformanceReportingModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.Physics2DModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.PhysicsModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ProfilerModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.ScreenCaptureModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.SharedInternalsModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.SpriteMaskModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.SpriteShapeModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.StreamingModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.SubstanceModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TerrainModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TerrainPhysicsModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TextCoreModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TextRenderingModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TilemapModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TLSModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UI.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UIElementsModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UIModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UmbraModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UNETModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityAnalyticsModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityConnectModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityTestProtocolModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestAssetBundleModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestTextureModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UnityWebRequestWWWModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.VehiclesModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.VFXModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.VideoModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.VRModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.WindModule.dll
+ False
+
+
+ ..\..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.XRModule.dll
+ False
+
+
+
+
+ False
+ Microsoft .NET Framework 4.7.2%28x86 및 x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
\ No newline at end of file
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/Recipe_Surgery.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/Recipe_Surgery.cs
new file mode 100644
index 0000000..89ed888
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/Recipe_Surgery.cs
@@ -0,0 +1,82 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using Verse;
+using rjw;
+
+
+namespace RJW_Menstruation
+{
+ public class Recipe_BreastSurgery : Recipe_Surgery
+ {
+ public override IEnumerable GetPartsToApplyOn(Pawn pawn, RecipeDef recipe)
+ {
+
+ if (pawn.gender != Gender.Female)
+ {
+ yield break;
+ }
+
+ BodyPartRecord part = Genital_Helper.get_breastsBPR(pawn);
+ if (part != null)
+ {
+
+ if (pawn.GetBreastComp() != null) yield return part;
+ }
+ }
+
+ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, Bill bill)
+ {
+ HediffComp_Breast breast = pawn.GetBreastComp();
+ if (billDoer != null && breast != null)
+ {
+ TaleRecorder.RecordTale(TaleDefOf.DidSurgery, new object[]
+ {
+ billDoer,
+ pawn
+ });
+ SurgeryResult(breast);
+ }
+ }
+
+ protected virtual void SurgeryResult(HediffComp_Breast breast)
+ {
+ }
+ }
+
+
+ public class Recipe_ExpandAreola : Recipe_BreastSurgery
+ {
+ protected override void SurgeryResult(HediffComp_Breast breast)
+ {
+ breast.AdjustAreolaSizeImmidiately(0.1f);
+ }
+ }
+
+ public class Recipe_ContractAreola : Recipe_BreastSurgery
+ {
+ protected override void SurgeryResult(HediffComp_Breast breast)
+ {
+ breast.AdjustAreolaSizeImmidiately(-0.1f);
+ }
+ }
+
+ public class Recipe_ExpandNipple : Recipe_BreastSurgery
+ {
+ protected override void SurgeryResult(HediffComp_Breast breast)
+ {
+ breast.AdjustNippleSizeImmidiately(0.1f);
+ }
+ }
+
+ public class Recipe_ContractNipple : Recipe_BreastSurgery
+ {
+ protected override void SurgeryResult(HediffComp_Breast breast)
+ {
+ breast.AdjustNippleSizeImmidiately(-0.1f);
+ }
+ }
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/Reflect.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/Reflect.cs
new file mode 100644
index 0000000..1289c0f
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/Reflect.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Reflection;
+
+namespace RJW_Menstruation
+{
+ public static class Reflector
+ {
+ public static object GetMemberValue(this Type type, string name)
+ {
+ BindingFlags flags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
+ FieldInfo fieldInfo = type?.GetField(name, flags);
+ return fieldInfo?.GetValue(null);
+ }
+
+ public static object GetMemberValue(this object obj, string name)
+ {
+ BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
+ FieldInfo fieldInfo = obj?.GetType().GetField(name, flags);
+ return fieldInfo?.GetValue(obj);
+ }
+
+ public static object GetPropertyValue(this Type type, string name)
+ {
+ BindingFlags flags = BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
+ PropertyInfo propertyInfo = type?.GetProperty(name,flags);
+ return propertyInfo?.GetValue(null);
+ }
+
+ public static object GetPropertyValue(this object obj, string name)
+ {
+ BindingFlags flags = BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
+ PropertyInfo propertyInfo = obj?.GetType().GetProperty(name,flags);
+ return propertyInfo?.GetValue(obj);
+ }
+
+ public static void SetMemberValue(this Type type, string name, object value)
+ {
+ BindingFlags flags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
+ FieldInfo fieldInfo = type?.GetField(name, flags);
+ if (fieldInfo != null)
+ {
+ fieldInfo.SetValue(null, value);
+ }
+ }
+
+ public static void SetMemberValue(this object obj, string name, object value)
+ {
+ BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
+ FieldInfo fieldInfo = obj?.GetType().GetField(name, flags);
+ if (fieldInfo != null)
+ {
+ fieldInfo.SetValue(obj, value);
+ }
+ }
+
+
+ }
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs
new file mode 100644
index 0000000..685a151
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs
@@ -0,0 +1,106 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using Verse;
+using UnityEngine;
+
+namespace RJW_Menstruation
+{
+ [StaticConstructorOnStartup]
+ public static class TextureCache
+ {
+
+ public static Texture2D milkTexture
+ {
+ get
+ {
+ if (milktexturecache == null) milktexturecache = SolidColorMaterials.NewSolidColorTexture(0.992f, 1.0f, 0.960f, 1.0f);
+ return milktexturecache;
+ }
+ }
+ public static Texture2D slaaneshTexture
+ {
+ get
+ {
+ if (slaaneshtexturecache == null) slaaneshtexturecache = SolidColorMaterials.NewSolidColorTexture(0.686f, 0.062f, 0.698f, 1.0f);
+ return slaaneshtexturecache;
+ }
+ }
+ public static Texture2D khorneTexture
+ {
+ get
+ {
+ if (khornetexturecache == null) khornetexturecache = SolidColorMaterials.NewSolidColorTexture(0.415f, 0.0f, 0.003f, 1.0f);
+ return khornetexturecache;
+ }
+ }
+ public static Texture2D tzeentchTexture
+ {
+ get
+ {
+ if (tzeentchtexturecache == null) tzeentchtexturecache = SolidColorMaterials.NewSolidColorTexture(0.082f, 0.453f, 0.6f, 1.0f);
+ return tzeentchtexturecache;
+ }
+ }
+ public static Texture2D nurgleTexture
+ {
+ get
+ {
+ if (nurgletexturecache == null) nurgletexturecache = SolidColorMaterials.NewSolidColorTexture(0.6f, 0.83f, 0.35f, 1.0f);
+ return nurgletexturecache;
+ }
+ }
+ public static Texture2D humanTexture
+ {
+ get
+ {
+ if (humantexturecache == null) humantexturecache = SolidColorMaterials.NewSolidColorTexture(0.878f, 0.674f, 0.411f, 1.0f);
+ return humantexturecache;
+ }
+ }
+ public static Texture2D animalTexture
+ {
+ get
+ {
+ if (animaltexturecache == null) animaltexturecache = SolidColorMaterials.NewSolidColorTexture(0.411f, 0.521f, 0.878f, 1.0f);
+ return animaltexturecache;
+ }
+ }
+ public static Texture2D fertilityTexture
+ {
+ get
+ {
+ if (fertilitytexturecache == null) fertilitytexturecache = SolidColorMaterials.NewSolidColorTexture(0.843f, 0.474f, 0.6f, 1.0f);
+ return fertilitytexturecache;
+ }
+ }
+ public static Texture2D ghalmarazTexture
+ {
+ get
+ {
+ if (ghalmaraztexturecache == null) ghalmaraztexturecache = SolidColorMaterials.NewSolidColorTexture(0.7f, 0.7f, 0.0f, 1.0f);
+ return ghalmaraztexturecache;
+ }
+ }
+
+ public static readonly Texture2D FertChanceTex = SolidColorMaterials.NewSolidColorTexture(new Color(1f, 1f, 1f, 0.4f));
+
+
+ private static Texture2D milktexturecache = null;
+ private static Texture2D slaaneshtexturecache = null;
+ private static Texture2D khornetexturecache = null;
+ private static Texture2D tzeentchtexturecache = null;
+ private static Texture2D nurgletexturecache = null;
+ private static Texture2D humantexturecache = null;
+ private static Texture2D animaltexturecache = null;
+ private static Texture2D fertilitytexturecache = null;
+ private static Texture2D ghalmaraztexturecache = null;
+
+
+
+
+ }
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/Things.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/Things.cs
new file mode 100644
index 0000000..343e57c
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/Things.cs
@@ -0,0 +1,306 @@
+using System;
+using System.Xml;
+using System.Collections.Generic;
+using RimWorld;
+using rjw;
+using UnityEngine;
+using Verse;
+
+namespace RJW_Menstruation
+{
+ public class PawnDNAModExtension : DefModExtension
+ {
+ public string fetusTexPath;
+ public ColorInt cumColor;
+ public Color CumColor => cumColor.ToColor;
+ public float cumThickness = 0f;
+ public List hybridExtension;
+
+ public HybridExtension GetHybridExtension(string race)
+ {
+ if (hybridExtension.NullOrEmpty()) return null;
+ else
+ {
+ return hybridExtension.Find(x => x.thingDef.defName.Equals(race));
+ }
+ }
+
+ public PawnKindDef GetHybridWith(string race)
+ {
+ return GetHybridExtension(race)?.ChooseOne() ?? null;
+ }
+ }
+
+ public class HybridExtension
+ {
+
+ public Dictionary hybridInfo = new Dictionary();
+ public ThingDef thingDef;
+
+ public HybridExtension() { }
+
+
+ public PawnKindDef ChooseOne()
+ {
+
+ if (hybridInfo.EnumerableNullOrEmpty()) return null;
+ PawnKindDef res = null;
+ do
+ {
+ string key = hybridInfo.RandomElementByWeight(x => x.Value).Key;
+ res = DefDatabase.GetNamedSilentFail(key);
+ if (res == null) res = DefDatabase.GetNamedSilentFail(key).race.AnyPawnKind;
+
+ if (res == null) hybridInfo.Remove(key);
+ } while (res == null && !hybridInfo.EnumerableNullOrEmpty());
+
+ return res;
+ }
+
+
+ public void LoadDataFromXmlCustom(XmlNode xmlRoot)
+ {
+ DirectXmlCrossRefLoader.RegisterObjectWantsCrossRef(this, "thingDef", xmlRoot.Name);
+ XmlNodeList childNodes = xmlRoot.ChildNodes;
+
+ if (childNodes.Count >= 1) foreach (XmlNode node in childNodes)
+ {
+ #if DEBUG
+ Log.Message(xmlRoot.Name + "HybridInfo: " + node.Name + " " + node.InnerText);
+ #endif
+ hybridInfo.Add(node.Name, ParseHelper.FromString(node.InnerText));
+ }
+
+
+
+ }
+
+
+
+ }
+
+ public class HybridInformations : IExposable
+ {
+ public List hybridExtension = new List();
+
+ private ThingDef thingDef;
+ private string thingDefName;
+
+ public string defName
+ {
+ get
+ {
+ return thingDefName;
+ }
+ }
+ public bool IsNull
+ {
+ get
+ {
+ return thingDefName?.Length < 1;
+ }
+ }
+ public ThingDef GetDef
+ {
+ get
+ {
+ if (thingDef != null) return thingDef;
+ else
+ {
+ thingDef = DefDatabase.GetNamedSilentFail(thingDefName);
+ return thingDef;
+ }
+ }
+ }
+
+ public HybridInformations() { }
+
+ public HybridInformations(ThingDef def)
+ {
+ thingDef = def;
+ thingDefName = def.defName;
+ }
+
+ public HybridExtensionExposable GetHybridExtension(string race)
+ {
+ if (hybridExtension.NullOrEmpty()) return null;
+ else
+ {
+ return hybridExtension.Find(x => x.GetDef.defName?.Equals(race) ?? false);
+ }
+ }
+
+ public PawnKindDef GetHybridWith(string race)
+ {
+ return GetHybridExtension(race)?.ChooseOne() ?? null;
+ }
+
+ public void ExposeData()
+ {
+ Scribe_Values.Look(ref thingDefName, "thingDefName");
+ Scribe_Collections.Look(ref hybridExtension, "hybridExtension", LookMode.Deep, new object[0]);
+ }
+
+
+
+ }
+
+ public class HybridExtensionExposable : HybridExtension, IExposable
+ {
+ private string thingDefName;
+
+ public string defName
+ {
+ get
+ {
+ return thingDefName;
+ }
+ }
+ public bool IsNull
+ {
+ get
+ {
+ return thingDefName?.Length < 1;
+ }
+ }
+ public ThingDef GetDef
+ {
+ get
+ {
+ if (thingDef != null) return thingDef;
+ else
+ {
+ thingDef = DefDatabase.GetNamedSilentFail(thingDefName);
+ return thingDef;
+ }
+ }
+ }
+
+ public HybridExtensionExposable() { }
+
+ public HybridExtensionExposable(ThingDef def)
+ {
+ thingDef = def;
+ thingDefName = def.defName;
+ hybridInfo = new Dictionary();
+ }
+
+ public void ExposeData()
+ {
+ Scribe_Values.Look(ref thingDefName, "thingDefName");
+ Scribe_Collections.Look(ref hybridInfo, "hybridInfo", LookMode.Value, LookMode.Value);
+
+ }
+ }
+
+
+
+
+ public class AbsorberModExtension : DefModExtension
+ {
+ public bool leakAfterDirty = false;
+ public bool effectsAfterDirty = false;
+ public ThingDef dirtyDef = null;
+ public int minHourstoDirtyEffect = 0;
+ }
+
+ public class Absorber : Apparel
+ {
+
+ public float absorbedfluids = 0;
+ public bool dirty = false;
+ public int wearhours = 0;
+ public virtual bool LeakAfterDirty => def.GetModExtension().leakAfterDirty;
+ public virtual bool EffectAfterDirty => def.GetModExtension().effectsAfterDirty;
+ public virtual ThingDef DirtyDef => def.GetModExtension().dirtyDef;
+ public virtual int MinHrstoDirtyEffect => def.GetModExtension().minHourstoDirtyEffect;
+
+ public Color fluidColor = Color.white;
+
+
+
+ public virtual void DirtyEffect() { }
+
+ public virtual void WearEffect()
+ {
+ absorbedfluids += 0.1f;
+ wearhours++;
+ }
+
+ public override Color DrawColorTwo => fluidColor;
+
+ public override void ExposeData()
+ {
+ base.ExposeData();
+ Scribe_Values.Look(ref absorbedfluids, "absorbedfluids", absorbedfluids, true);
+ Scribe_Values.Look(ref dirty, "dirty", dirty, true);
+ Scribe_Values.Look(ref wearhours, "wearhours", wearhours, true);
+ Scribe_Values.Look(ref fluidColor, "fluidColor", fluidColor, true);
+ }
+
+ }
+
+ public class Absorber_Tampon : Absorber
+ {
+
+ public override void WearEffect()
+ {
+ wearhours++;
+ absorbedfluids += 0.5f;
+ }
+
+ public override void DirtyEffect()
+ {
+ if (wearhours > MinHrstoDirtyEffect && Rand.Chance(0.01f))
+ {
+ Wearer.health.AddHediff(HediffDefOf.WoundInfection, Genital_Helper.get_genitalsBPR(Wearer));
+ }
+ }
+
+ }
+
+
+ public class Filth_Colored : Filth
+ {
+
+ private Color color = Color.white;
+
+ public override void ExposeData()
+ {
+ base.ExposeData();
+ Scribe_Values.Look(ref color, "color", color, true);
+ }
+
+ public override Color DrawColor
+ {
+ get
+ {
+ if (color != Color.white)
+ {
+ return color;
+ }
+ if (Stuff != null)
+ {
+ return def.GetColorForStuff(Stuff);
+ }
+ if (def.graphicData != null)
+ {
+ return def.graphicData.color;
+ }
+ return color;
+ }
+ set
+ {
+ color = value;
+ }
+ }
+
+
+
+ }
+
+
+
+
+
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/Translations.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/Translations.cs
new file mode 100644
index 0000000..12476ae
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/Translations.cs
@@ -0,0 +1,111 @@
+using Verse;
+
+namespace RJW_Menstruation
+{
+ public static class Translations
+ {
+ public static readonly string Mod_Title = "Mod_Title".Translate();
+ public static readonly string Info_noCum = "Info_noCum".Translate();
+ public static readonly string Menstrual_Blood = "Menstrual_Blood".Translate();
+ public static readonly string Stage_Follicular = "Stage_Follicular".Translate();
+ public static readonly string Stage_Ovulatory = "Stage_Ovulatory".Translate();
+ public static readonly string Stage_Luteal = "Stage_Luteal".Translate();
+ public static readonly string Stage_Bleeding = "Stage_Bleeding".Translate();
+ public static readonly string Stage_Fertilized = "Stage_Fertilized".Translate();
+ public static readonly string Stage_Pregnant = "Stage_Pregnant".Translate();
+ public static readonly string Stage_Recover = "Stage_Recover".Translate();
+ public static readonly string Stage_None = "Stage_None".Translate();
+ public static readonly string Stage_Climacteric = "Stage_Climacteric".Translate();
+ public static readonly string Stage_Anestrus = "Stage_Anestrus".Translate();
+ public static readonly string Button_HealthTab = "Button_HealthTab".Translate();
+ public static readonly string Button_MilkTooltip = "Button_MilkTooltip".Translate();
+
+ public static readonly string Dialog_WombInfo01 = "Dialog_WombInfo01".Translate();
+ public static readonly string Dialog_WombInfo02 = "Dialog_WombInfo02".Translate();
+ public static readonly string Dialog_WombInfo03 = "Dialog_WombInfo03".Translate();
+ public static readonly string Dialog_WombInfo04 = "Dialog_WombInfo04".Translate();
+ public static readonly string Dialog_WombInfo05 = "Dialog_WombInfo05".Translate();
+ public static readonly string Dialog_WombInfo06 = "Dialog_WombInfo06".Translate();
+ public static readonly string Dialog_WombInfo07 = "Dialog_WombInfo07".Translate();
+ public static readonly string Dialog_WombInfo08 = "Dialog_WombInfo08".Translate();
+ public static readonly string Dialog_WombInfo09 = "Dialog_WombInfo09".Translate();
+ public static readonly string Dialog_WombInfo10 = "Dialog_WombInfo10".Translate();
+
+
+ public static readonly string Option1_Label_1 = "Option1_Label_1".Translate();
+ public static readonly string Option1_Label_2 = "Option1_Label_2".Translate();
+ public static readonly string Option2_Label = "Option2_Label".Translate();
+ public static readonly string Option2_Desc = "Option2_Desc".Translate();
+ public static readonly string Option3_Label = "Option3_Label".Translate();
+ public static readonly string Option3_Desc = "Option3_Desc".Translate();
+ public static readonly string Option4_Label = "Option4_Label".Translate();
+ public static readonly string Option4_Desc = "Option4_Desc".Translate();
+ public static readonly string Option5_Label = "Option5_Label".Translate();
+ public static readonly string Option5_Desc = "Option5_Desc".Translate();
+ public static readonly string Option6_Label = "Option6_Label".Translate();
+ public static readonly string Option6_Desc = "Option6_Desc".Translate();
+ public static readonly string Option7_Label = "Option7_Label".Translate();
+ public static readonly string Option7_Desc = "Option7_Desc".Translate();
+ public static readonly string Option8_Label = "Option8_Label".Translate();
+ public static readonly string Option8_Desc = "Option8_Desc".Translate();
+ public static readonly string Option9_Label = "Option9_Label".Translate();
+ public static readonly string Option9_Desc = "Option9_Desc".Translate();
+ public static readonly string Option10_Label = "Option10_Label".Translate();
+ public static readonly string Option10_Desc = "Option10_Desc".Translate();
+ public static readonly string Option11_Label = "Option11_Label".Translate();
+ public static readonly string Option11_Desc_1 = "Option11_Desc_1".Translate();
+ public static readonly string Option11_Desc_2 = "Option11_Desc_2".Translate();
+ public static readonly string Option11_Desc_3 = "Option11_Desc_3".Translate();
+ public static readonly string Option11_Desc_4 = "Option11_Desc_4".Translate();
+ public static readonly string Option12_Label = "Option12_Label".Translate();
+ public static readonly string Option12_Desc = "Option12_Desc".Translate();
+ public static readonly string Option13_Label = "Option13_Label".Translate();
+ public static readonly string Option13_Desc = "Option13_Desc".Translate();
+ public static readonly string Option14_Label = "Option14_Label".Translate();
+ public static readonly string Option14_Desc = "Option14_Desc".Translate();
+ public static readonly string Option15_Label = "Option15_Label".Translate();
+ public static readonly string Option15_Desc = "Option15_Desc".Translate();
+ public static readonly string Option16_Label = "Option16_Label".Translate();
+ public static readonly string Option16_Desc = "Option16_Desc".Translate();
+ public static readonly string Option17_Label = "Option17_Label".Translate();
+ public static readonly string Option17_Desc = "Option17_Desc".Translate();
+ public static readonly string Option18_Label = "Option18_Label".Translate();
+ public static readonly string Option18_Desc = "Option18_Desc".Translate();
+ public static readonly string Option19_Label_1 = "Option19_Label_1".Translate();
+ public static readonly string Option19_Label_2 = "Option19_Label_2".Translate();
+ public static readonly string Option19_Desc = "Option19_Desc".Translate();
+ public static readonly string Option20_Label_1 = "Option20_Label_1".Translate();
+ public static readonly string Option20_Label_2 = "Option20_Label_2".Translate();
+ public static readonly string Option20_Label_3 = "Option20_Label_3".Translate();
+ public static readonly string Option20_Label_4 = "Option20_Label_4".Translate();
+ public static readonly string Option20_Label_5 = "Option20_Label_5".Translate();
+ public static readonly string Option21_Label = "Option21_Label".Translate();
+ public static readonly string Option21_Desc = "Option21_Desc".Translate();
+ public static readonly string Option22_Label = "Option22_Label".Translate();
+ public static readonly string Option22_Desc = "Option22_Desc".Translate();
+ public static readonly string Option23_Label = "Option23_Label".Translate();
+ public static readonly string Option23_Label_1 = "Option23_Label_1".Translate();
+ public static readonly string Option23_Label_2 = "Option23_Label_2".Translate();
+ public static readonly string Option24_Label = "Option24_Label".Translate();
+ public static readonly string Option24_Desc = "Option24_Desc".Translate();
+ public static readonly string Option25_Label = "Option25_Label".Translate();
+ public static readonly string Option25_Desc = "Option25_Desc".Translate();
+ public static readonly string Option26_Label = "Option26_Label".Translate();
+ public static readonly string Option26_Desc = "Option26_Desc".Translate();
+ public static readonly string Option27_Label = "Option27_Label".Translate();
+ public static readonly string Option27_Desc = "Option27_Desc".Translate();
+ public static readonly string Option28_Label = "Option28_Label".Translate();
+ public static readonly string Option28_Tooltip = "Option28_Tooltip".Translate();
+ public static readonly string Option29_Label = "Option29_Label".Translate();
+ public static readonly string Option29_Desc = "Option29_Desc".Translate();
+
+ public static readonly string EstimatedCumLifespan = "EstimatedCumLifespan".Translate();
+ public static readonly string FertilityDesc = "FertilityDesc".Translate();
+
+ public static readonly string FloatMenu_CleanSelf = "FloatMenu_CleanSelf".Translate();
+
+ public static readonly string CustomHybrid_List_Title = "CustomHybrid_List_Title".Translate();
+ static public string CustomHybrid_Title(string label) { return TranslatorFormattedStringExtensions.Translate("CustomHybrid_Title", label); }
+ static public string CustomHybrid_Tooltip(string label, string breedee, string baby, string chance) { return TranslatorFormattedStringExtensions.Translate("CustomHybrid_Tooltip", label, breedee, baby, chance); }
+ }
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_HybridCustom.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_HybridCustom.cs
new file mode 100644
index 0000000..61ca325
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_HybridCustom.cs
@@ -0,0 +1,487 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using rjw;
+using UnityEngine;
+using Verse;
+using Verse.Sound;
+
+namespace RJW_Menstruation
+{
+ public class Dialog_HybridCustom : Window
+ {
+ private static Vector2 scroll;
+ private const float windowMargin = 20f;
+ static private List raceList = new List();
+ static private List removeList = new List();
+
+ public Dialog_HybridCustom()
+ {
+ BuildRaceList();
+ }
+
+ public void BuildRaceList()
+ {
+ raceList.Clear();
+ if (!VariousDefOf.AllRaces.NullOrEmpty())
+ foreach(ThingDef def in VariousDefOf.AllRaces)
+ {
+ if (def.race != null)
+ {
+ if (Configurations.IsOverrideExist(def)) continue;
+ else
+ {
+ raceList.Add(new FloatMenuOption(def.label, delegate { AddHybridOverride(def); } ));
+ }
+ }
+ }
+ raceList.SortBy(x => x.Label);
+ }
+
+ public void AddHybridOverride(ThingDef def)
+ {
+ FloatMenuOption option = raceList.FirstOrDefault(x => x.Label.Equals(def?.label));
+ if (option != null)
+ {
+ raceList.Remove(option);
+ if (Configurations.HybridOverride.NullOrEmpty())
+ {
+ Configurations.HybridOverride = new List();
+ }
+ Configurations.HybridOverride.Add(new HybridInformations(def));
+ Configurations.HybridOverride.SortBy(x => x.GetDef?.label ?? "Undefined");
+ }
+
+ }
+
+ public override Vector2 InitialSize
+ {
+ get
+ {
+ float width = 480f;
+ float height = 640f;
+ return new Vector2(width, height);
+ }
+ }
+
+
+ public override void DoWindowContents(Rect inRect)
+ {
+ soundClose = SoundDefOf.CommsWindow_Close;
+ //closeOnClickedOutside = true;
+ absorbInputAroundWindow = false;
+ forcePause = false;
+ preventCameraMotion = false;
+ draggable = true;
+ //resizeable = true;
+
+ if (Event.current.type == EventType.KeyDown && (Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.Escape))
+ {
+ Event.current.Use();
+ }
+
+ Rect windowRect = inRect.ContractedBy(windowMargin);
+ Rect mainRect = new Rect(windowRect.x, windowRect.y, windowRect.width, windowRect.height);
+ Rect closeRect = new Rect(windowRect.xMax, 0f, 20f, 20f);
+
+ DoMainContents(mainRect);
+
+ if (Widgets.CloseButtonFor(closeRect))
+ {
+ Close();
+ }
+ }
+
+ public override void PostClose()
+ {
+ base.PostClose();
+ if (!removeList.NullOrEmpty())
+ {
+ foreach (HybridInformations extension in removeList)
+ {
+ Configurations.HybridOverride.Remove(extension);
+ }
+ raceList.SortBy(x => x.Label);
+ }
+ removeList.Clear();
+ }
+
+ protected void DoMainContents(Rect inRect)
+ {
+ Rect buttonRect = new Rect(inRect.xMax - 120, 0, 100, 30);
+ Rect titleRect = new Rect(inRect.x, 0, 200, 30);
+ Widgets.Label(titleRect, Translations.CustomHybrid_List_Title);
+ Widgets.DrawLineHorizontal(titleRect.x, titleRect.yMax + 12f, inRect.width);
+ if (Widgets.ButtonText(buttonRect, "Add"))
+ {
+ if (!raceList.NullOrEmpty()) Find.WindowStack.Add(new FloatMenu(raceList));
+ }
+ if (!removeList.NullOrEmpty())
+ {
+ buttonRect.x -= 100;
+ if (Widgets.ButtonText(buttonRect, "Undo"))
+ {
+ var element = removeList.Last();
+ Configurations.HybridOverride.Add(element);
+ Configurations.HybridOverride.SortBy(x => x.GetDef?.label ?? "Undefined");
+ removeList.Remove(element);
+ }
+
+ foreach (HybridInformations extension in removeList)
+ {
+ Configurations.HybridOverride.Remove(extension);
+ }
+ raceList.SortBy(x => x.Label);
+ }
+
+
+
+ Rect outRect = new Rect(inRect.x, inRect.y + 30f, inRect.width, inRect.height - 30f);
+ Rect mainRect = new Rect(inRect.x, inRect.y + 30f, inRect.width - 30f, Math.Max(24f*Configurations.HybridOverride?.Count() ?? 1,10f));
+ Listing_Standard listmain = new Listing_Standard();
+
+ Widgets.BeginScrollView(outRect, ref scroll, mainRect);
+ listmain.Begin(mainRect);
+ int i = 0;
+ if (!Configurations.HybridOverride.NullOrEmpty())
+ foreach(HybridInformations extension in Configurations.HybridOverride)
+ {
+ if (extension.GetDef != null) DoRow(listmain.GetRect(24f),extension, i++);
+ }
+ Widgets.EndScrollView();
+ listmain.End();
+
+
+ }
+
+ protected void DoRow(Rect rect, HybridInformations extension, int index)
+ {
+ Rect buttonRect = new Rect(rect.xMax - 90f, rect.y, 80f, rect.height);
+ Widgets.Label(rect, extension.GetDef?.label ?? "Undefined");
+ if (Widgets.ButtonText(buttonRect, "Delete"))
+ {
+ removeList.Add(extension);
+ //raceList.Add(new FloatMenuOption(extension.GetDef.label, delegate { AddHybridOverride(extension.GetDef); }));
+ }
+ buttonRect.x -= 80f;
+ if (Widgets.ButtonText(buttonRect, "Edit"))
+ {
+ Dialog_EditHybrid.OpenWindow(extension);
+ }
+
+
+ Widgets.DrawHighlightIfMouseover(rect);
+ }
+
+
+ public static void ToggleWindow()
+ {
+ Dialog_HybridCustom window = (Dialog_HybridCustom)Find.WindowStack.Windows.FirstOrDefault(x => x.GetType().Equals(typeof(Dialog_HybridCustom)));
+ if (window != null)
+ {
+ Find.WindowStack.TryRemove(typeof(Dialog_HybridCustom), true);
+ }
+ else
+ {
+ SoundDefOf.CommsWindow_Open.PlayOneShotOnCamera();
+ Find.WindowStack.Add(new Dialog_HybridCustom());
+ }
+
+
+ }
+
+ }
+
+ public class Dialog_EditHybrid : Window
+ {
+ private const float windowMargin = 20f;
+ private const float rowH = 24f;
+ private HybridInformations info;
+ private Vector2 scroll;
+ protected List raceList = new List();
+ protected List removeList = new List();
+ protected float totalWeight = 0;
+
+ public Dialog_EditHybrid(HybridInformations info)
+ {
+ this.info = info;
+ BuildRaceList();
+ }
+
+
+
+ public override Vector2 InitialSize
+ {
+ get
+ {
+ float width = 840f;
+ float height = 640f;
+ return new Vector2(width, height);
+ }
+ }
+
+
+ public override void DoWindowContents(Rect inRect)
+ {
+ soundClose = SoundDefOf.CommsWindow_Close;
+ //closeOnClickedOutside = true;
+ absorbInputAroundWindow = false;
+ forcePause = false;
+ preventCameraMotion = false;
+ draggable = true;
+ //resizeable = true;
+
+ if (Event.current.type == EventType.KeyDown && (Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.Escape))
+ {
+ Event.current.Use();
+ }
+
+ Rect windowRect = inRect.ContractedBy(windowMargin);
+ Rect mainRect = new Rect(windowRect.x, windowRect.y, windowRect.width, windowRect.height);
+ Rect closeRect = new Rect(windowRect.xMax, 0f, 20f, 20f);
+
+ DoMainContents(mainRect);
+
+ if (Widgets.CloseButtonFor(closeRect))
+ {
+ Close();
+ }
+ }
+
+ public static void OpenWindow(HybridInformations info)
+ {
+ Dialog_EditHybrid window = (Dialog_EditHybrid)Find.WindowStack.Windows.FirstOrDefault(x => x.GetType().Equals(typeof(Dialog_EditHybrid)));
+ if (window != null)
+ {
+ if (window.info != info)
+ {
+ SoundDefOf.TabOpen.PlayOneShotOnCamera();
+ window.ChangeExtension(info);
+ }
+ }
+ else
+ {
+ SoundDefOf.TabClose.PlayOneShotOnCamera();
+ Find.WindowStack.Add(new Dialog_EditHybrid(info));
+ }
+
+
+ }
+
+ protected void ChangeExtension(HybridInformations info)
+ {
+ this.info = info;
+ BuildRaceList();
+ }
+
+ protected void BuildRaceList()
+ {
+ raceList.Clear();
+ if (!VariousDefOf.AllRaces.NullOrEmpty())
+ foreach (ThingDef def in VariousDefOf.AllRaces)
+ {
+ if (def.race != null)
+ {
+ if (info.hybridExtension.Exists(x => x.defName == def.defName)) continue;
+ else
+ {
+ raceList.Add(new FloatMenuOption(def.label, delegate { AddHybridInfo(def); }));
+ }
+ }
+ }
+ raceList.SortBy(x => x.Label);
+ }
+
+ protected void AddHybridInfo(ThingDef def)
+ {
+ FloatMenuOption option = raceList.FirstOrDefault(x => x.Label == def.label);
+ if (option != null)
+ {
+ raceList.Remove(option);
+ }
+ info.hybridExtension.Add(new HybridExtensionExposable(def));
+ }
+
+ protected void DoMainContents(Rect inRect)
+ {
+ Rect labelRect = new Rect(inRect.xMin, inRect.yMin, 300, 24);
+ Rect buttonRect = new Rect(inRect.xMax - 120, 0, 100, 30);
+
+ Widgets.Label(labelRect, Translations.CustomHybrid_Title(info.GetDef?.label ?? "Undefined"));
+ Widgets.DrawLineHorizontal(inRect.x, labelRect.yMax, inRect.width);
+ if (Widgets.ButtonText(buttonRect, "Add"))
+ {
+ if (!raceList.NullOrEmpty()) Find.WindowStack.Add(new FloatMenu(raceList));
+ }
+ if (!removeList.EnumerableNullOrEmpty())
+ {
+ buttonRect.x -= 100;
+ if (Widgets.ButtonText(buttonRect, "Undo"))
+ {
+ var element = removeList.Last();
+ info.hybridExtension.Add(element);
+ removeList.Remove(element);
+ }
+
+ foreach (HybridExtensionExposable element in removeList)
+ {
+ info.hybridExtension.Remove(element);
+ }
+ }
+
+
+ float additionalHeight = 0f;
+ if (!info.hybridExtension.NullOrEmpty()) foreach(HybridExtensionExposable e in info.hybridExtension)
+ {
+ additionalHeight += (e.hybridInfo?.Count() ?? 1) * rowH;
+ }
+
+
+ Rect outRect = new Rect(inRect.x, inRect.y + 30f, inRect.width, inRect.height - 30f);
+ Rect mainRect = new Rect(inRect.x, inRect.y + 30f, inRect.width - 30f, rowH * (info.hybridExtension?.Count() ?? 1) + additionalHeight);
+ Listing_Standard listmain = new Listing_Standard();
+
+ Widgets.BeginScrollView(outRect, ref scroll, mainRect);
+ listmain.Begin(mainRect);
+
+ if (!info.hybridExtension.NullOrEmpty())
+ {
+ foreach (HybridExtensionExposable extension in info.hybridExtension)
+ {
+ DoRow(listmain.GetRect(rowH + rowH * (extension.hybridInfo?.Count() ?? 1)), extension);
+ }
+
+ }
+
+
+
+ Widgets.EndScrollView();
+ listmain.End();
+ }
+
+ protected void DoRow(Rect rect, HybridExtensionExposable extension)
+ {
+ Rect mainRect = new Rect(rect.x, rect.y, rect.width, rowH);
+ Rect subRect = new Rect(rect.x, rect.y + rowH, rect.width, rect.height - rowH);
+ Rect buttonRect = new Rect(rect.xMax - 90f, rect.y, 80f, rowH);
+ Widgets.Label(mainRect, extension.GetDef?.label ?? "Undefined");
+
+ if (Widgets.ButtonText(buttonRect, "Delete"))
+ {
+ removeList.Add(extension);
+ }
+ buttonRect.x -= 80f;
+ if (Widgets.ButtonText(buttonRect, "Add"))
+ {
+ List list = new List();
+ if (!VariousDefOf.AllRaces.NullOrEmpty()) foreach(ThingDef def in VariousDefOf.AllRaces)
+ {
+ if (def.race != null)
+ {
+ if (extension.hybridInfo.ContainsKey(def.defName)) continue;
+ else
+ {
+ list.Add(new FloatMenuOption(def.label, delegate { extension.hybridInfo.Add(def.defName, 1.0f); }));
+ }
+ }
+ }
+ if (!list.NullOrEmpty())
+ {
+ list.SortBy(x => x.Label);
+ Find.WindowStack.Add(new FloatMenu(list));
+ }
+
+ }
+ buttonRect.x -= 80f;
+
+ Listing_Standard sublist = new Listing_Standard();
+ sublist.Begin(subRect);
+
+ List removeelements = new List();
+ if (!extension.hybridInfo.EnumerableNullOrEmpty())
+ {
+ totalWeight = 0;
+ foreach(KeyValuePair element in extension.hybridInfo)
+ {
+ totalWeight += element.Value;
+ }
+
+ List keys = new List(extension.hybridInfo.Keys);
+ foreach (string key in keys)
+ {
+ DoSubRow(sublist.GetRect(rowH), key, extension, removeelements);
+ }
+ }
+ if(!removeelements.NullOrEmpty()) foreach(string key in removeelements)
+ {
+ extension.hybridInfo.Remove(key);
+ }
+
+ sublist.End();
+ Widgets.DrawHighlightIfMouseover(rect);
+
+
+ }
+
+ protected void DoSubRow(Rect rect, string key, HybridExtensionExposable extension , List removeelements)
+ {
+ bool isPawnKind = false;
+ int value = (int)extension.hybridInfo.TryGetValue(key);
+ string valuestr = value.ToString();
+ string label = null;
+ label = DefDatabase.GetNamedSilentFail(key)?.label;
+ if (label == null)
+ {
+ label = DefDatabase.GetNamedSilentFail(key)?.label ?? "Undefined";
+ isPawnKind = true;
+ }
+ Rect buttonRect = new Rect(rect.xMax - 90f, rect.y, 80f, rect.height);
+ if (Widgets.ButtonText(buttonRect, "Delete"))
+ {
+ removeelements.Add(key);
+ }
+ buttonRect.x -= 80f;
+ if (!isPawnKind)
+ {
+ if (Widgets.ButtonText(buttonRect, "PawnKind"))
+ {
+ List list = new List();
+ if (!VariousDefOf.AllKinds.NullOrEmpty()) foreach (PawnKindDef def in VariousDefOf.AllKinds)
+ {
+ if (def.race.defName == key)
+ {
+ if (extension.hybridInfo.ContainsKey(def.defName)) continue;
+ else
+ {
+ list.Add(new FloatMenuOption(def.label, delegate { extension.hybridInfo.Add(def.defName, 1.0f); }));
+ }
+ }
+ }
+ if (!list.NullOrEmpty()) Find.WindowStack.Add(new FloatMenu(list));
+ else SoundDefOf.ClickReject.PlayOneShotOnCamera();
+ }
+ buttonRect.x -= 80f;
+ }
+ else
+ {
+ Widgets.Label(buttonRect, " PawnKind");
+ buttonRect.x -= 80f;
+ }
+ label += ": " + key;
+ Widgets.Label(rect, " - " + label);
+ Widgets.TextFieldNumeric(buttonRect, ref value, ref valuestr,0,9999999);
+ extension.hybridInfo.SetOrAdd(key, value);
+ buttonRect.x -= 80f;
+ Widgets.Label(buttonRect, String.Format("{0,0:P2}", value / totalWeight));
+ Widgets.DrawHighlightIfMouseover(rect);
+ TooltipHandler.TipRegion(rect, Translations.CustomHybrid_Tooltip(info.GetDef?.label ?? "Undefined", extension.GetDef?.label ?? "Undefined", label, String.Format("{0,0:0.########%}", value/totalWeight)));
+ }
+
+
+ }
+
+
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs
new file mode 100644
index 0000000..2edb78e
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs
@@ -0,0 +1,418 @@
+using System;
+using RimWorld;
+using rjw;
+using System.Linq;
+using UnityEngine;
+using Verse;
+using Verse.Sound;
+
+namespace RJW_Menstruation
+{
+ public class Dialog_WombStatus : Window
+ {
+ public Pawn pawn;
+ private HediffComp_Menstruation comp;
+ private const float windowMargin = 20f;
+ private const float pawnRectWidth = 150f;
+ private const float pawnRectHeight = 150f;
+ private const float wombRectHeight = 300f;
+ private const float wombRectWidth = 300f;
+ private const float fontheight = 30;
+ private const float genitalRectWidth = 102;
+ private const float genitalRectHeight = 140;
+ private const float breastRectWidth = 102;
+ private const float breastRectHeight = 100;
+
+ private static bool naked = false;
+
+ private Texture2D womb;
+ private Texture2D cum;
+ private Texture2D vagina;
+ private Texture2D anal;
+ private Color cumcolor;
+
+ private GUIStyle fontstylecenter = new GUIStyle() { alignment = TextAnchor.MiddleCenter };
+ private GUIStyle fontstyleright = new GUIStyle() { alignment = TextAnchor.MiddleRight };
+ private GUIStyle fontstyleleft = new GUIStyle() { alignment = TextAnchor.MiddleLeft };
+ private GUIStyle boxstyle = new GUIStyle(GUI.skin.textArea);
+ private GUIStyle buttonstyle = new GUIStyle(GUI.skin.button);
+
+
+
+
+ public override Vector2 InitialSize
+ {
+ get
+ {
+ float width = 450f + 2 * windowMargin;
+ float height = 780f + 2 * windowMargin;
+ if (!Configurations.DrawWombStatus) height -= wombRectHeight;
+ if (!Configurations.DrawVaginaStatus || pawn.IsAnimal()) width -= 150f;
+ return new Vector2(width, height);
+ }
+ }
+
+ public Dialog_WombStatus(Pawn pawn, HediffComp_Menstruation comp)
+ {
+ this.pawn = pawn;
+ this.comp = comp;
+ }
+
+ public void ChangePawn(Pawn pawn, HediffComp_Menstruation comp)
+ {
+
+ if (this.pawn.IsAnimal() && !pawn.IsAnimal()) windowRect.width += 150f;
+ else if (!this.pawn.IsAnimal() && pawn.IsAnimal()) windowRect.width -= 150f;
+ this.pawn = pawn;
+ this.comp = comp;
+ }
+
+ public static void ToggleWindow(Pawn pawn, HediffComp_Menstruation comp)
+ {
+ Dialog_WombStatus window = (Dialog_WombStatus)Find.WindowStack.Windows.FirstOrDefault(x => x.GetType().Equals(typeof(Dialog_WombStatus)));
+ if (window != null)
+ {
+ if (window.pawn != pawn)
+ {
+ SoundDefOf.TabOpen.PlayOneShotOnCamera();
+ window.ChangePawn(pawn, comp);
+ }
+ else Find.WindowStack.TryRemove(typeof(Dialog_WombStatus), true);
+ }
+ else
+ {
+ SoundDefOf.InfoCard_Open.PlayOneShotOnCamera();
+ Find.WindowStack.Add(new Dialog_WombStatus(pawn, comp));
+ }
+
+
+ }
+
+ public override void DoWindowContents(Rect inRect)
+ {
+ soundClose = SoundDefOf.InfoCard_Close;
+ //closeOnClickedOutside = true;
+ absorbInputAroundWindow = false;
+ forcePause = false;
+ preventCameraMotion = false;
+ draggable = true;
+ //resizeable = true;
+
+ if (Event.current.type == EventType.KeyDown && (Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.Escape))
+ {
+ Event.current.Use();
+ }
+
+ Rect windowRect = inRect.ContractedBy(windowMargin);
+ Rect mainRect = new Rect(windowRect.x, windowRect.y, windowRect.width, windowRect.height);
+ Rect closeRect = new Rect(windowRect.xMax, 0f, 20f, 20f);
+ MainContents(mainRect);
+ if (Widgets.CloseButtonFor(closeRect))
+ {
+ Close();
+ }
+ closeRect.x -= 20f;
+
+ }
+
+ private void MainContents(Rect mainRect)
+ {
+
+ boxstyle.hover = boxstyle.normal;
+ boxstyle.onHover = boxstyle.normal;
+ boxstyle.onNormal = boxstyle.normal;
+
+ buttonstyle.onHover = buttonstyle.onNormal;
+ buttonstyle.hover = buttonstyle.normal;
+ boxstyle.border.left = 4; boxstyle.border.right = 4; boxstyle.border.bottom = 4; boxstyle.border.top = 4;
+
+ fontstyleleft.normal.textColor = Color.white;
+
+ float preginfoheight = 0f;
+ bool pregnant = pawn.IsPregnant();
+ Hediff hediff = PregnancyHelper.GetPregnancy(pawn);
+ if (pregnant && Utility.ShowFetusImage((Hediff_BasePregnancy)hediff))
+ {
+ womb = comp.GetPregnancyIcon(hediff);
+ if (hediff is Hediff_MultiplePregnancy)
+ {
+ Hediff_MultiplePregnancy h = (Hediff_MultiplePregnancy)hediff;
+ if (h.GestationProgress < 0.2f) cum = comp.GetCumIcon();
+ else cum = ContentFinder.Get(("Womb/Empty"), true);
+ Pawn fetus = pawn.GetFetus();
+ if (fetus != null && Utility.ShowFetusInfo())
+ {
+ string feinfo = h.GetBabyInfo();
+ string fainfo = h.GetFatherInfo() + " ";
+ if (feinfo.Length + fainfo.Length > 45)
+ {
+ preginfoheight = fontheight + 2;
+ buttonstyle.alignment = TextAnchor.UpperLeft;
+ fontstyleright.alignment = TextAnchor.LowerRight;
+ }
+ else
+ {
+ preginfoheight = fontheight;
+ buttonstyle.alignment = TextAnchor.MiddleLeft;
+
+ }
+ Rect preginfo = new Rect(0f, mainRect.yMax - wombRectHeight - 2, wombRectWidth, preginfoheight);
+ fontstyleright.normal.textColor = Color.white;
+ GUI.Box(preginfo, feinfo, buttonstyle);
+ GUI.Label(preginfo, fainfo, fontstyleright);
+ }
+
+ }
+ else if (hediff is Hediff_BasePregnancy)
+ {
+ Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff;
+ if (h.GestationProgress < 0.2f) cum = comp.GetCumIcon();
+ else cum = ContentFinder.Get(("Womb/Empty"), true);
+ Pawn fetus = pawn.GetFetus();
+ if (fetus != null && Utility.ShowFetusInfo())
+ {
+
+ preginfoheight = fontheight;
+ Rect preginfo = new Rect(0f, mainRect.yMax - wombRectHeight - 2, wombRectWidth, preginfoheight);
+ fontstyleright.normal.textColor = Color.white;
+ fontstyleright.alignment = TextAnchor.MiddleRight;
+ buttonstyle.alignment = TextAnchor.MiddleLeft;
+
+ GUI.Box(preginfo, h.babies.Count + " " + fetus.def.label + " " + Translations.Dialog_WombInfo02, buttonstyle);
+ GUI.Label(preginfo, Translations.Dialog_WombInfo03 + ": " + h.father.LabelShort + " ", fontstyleright);
+ }
+
+ }
+ else cum = ContentFinder.Get(("Womb/Empty"), true);
+ }
+ else
+ {
+ womb = comp.GetWombIcon();
+ cum = comp.GetCumIcon();
+ }
+
+
+ Rect pawnRect = new Rect(0, 0, pawnRectWidth, pawnRectHeight);
+ Widgets.DrawTextureFitted(pawnRect, PortraitsCache.Get(pawn, pawnRect.size, Rot4.South, default, 1, true, true, false, !naked), 1.0f);
+ if (Widgets.ButtonInvisible(pawnRect))
+ {
+ naked = !naked;
+ }
+ Rect pawnLabelRect = new Rect(0, pawnRectHeight, pawnRectWidth, fontheight - 10);
+ Rect pawnLabel2Rect = new Rect(0, pawnRectHeight + fontheight - 10, pawnRectWidth, fontheight - 10);
+ fontstylecenter.normal.textColor = pawn.DrawColor;
+ GUI.Label(pawnLabelRect, pawn.Name.ToStringFull, fontstylecenter);
+ if (pawn.story != null) GUI.Label(pawnLabel2Rect, pawn.story.Title, fontstylecenter);
+ GUI.color = Color.white;
+
+
+
+ float wombrecth = 0;
+ if (Configurations.DrawWombStatus)
+ {
+ wombrecth = wombRectHeight;
+ cumcolor = comp.GetCumMixtureColor;
+ Rect wombRect = new Rect(0f, mainRect.yMax - wombRectHeight + preginfoheight, wombRectWidth, wombRectWidth * 0.9f);
+ DrawWomb(wombRect);
+
+
+ if (Configurations.DrawEggOverlay)
+ {
+ comp.DrawEggOverlay(wombRect);
+ }
+
+
+ }
+
+ Rect wombInfoRect = new Rect(0f, mainRect.yMax - wombrecth - fontheight - 2, wombRectWidth, fontheight);
+
+ buttonstyle.normal.textColor = Color.white;
+ //boxstyle.normal.background = Texture2D.whiteTexture;
+ buttonstyle.alignment = TextAnchor.MiddleLeft;
+ GUI.backgroundColor = new Color(0.24f, 0.29f, 0.35f, 1);
+ GUI.Box(wombInfoRect, Translations.Dialog_WombInfo01 + ": " + comp.GetCurStageLabel, buttonstyle);
+ GUI.color = Color.white;
+
+
+ fontstyleright.normal.textColor = Color.red;
+ fontstyleright.alignment = TextAnchor.MiddleRight;
+ //if (comp.GetFertilization) GUI.Label(wombInfoRect, Translations.Dialog_WombInfo05 + " ", fontstyleright);
+ //else if (comp.GetEggFertilizing) GUI.Label(wombInfoRect, Translations.Dialog_WombInfo06 + " ", fontstyleright);
+ //else if (comp.GetEgg) GUI.Label(wombInfoRect, Translations.Dialog_WombInfo07 + " ", fontstyleright);
+ GUI.Label(wombInfoRect, comp.GetFertilizingInfo + " ", fontstyleright);
+
+
+ //Widgets.Label(wombInfoRect,Translations.Dialog_WombInfo01 + ": " + comp.GetCurStageLabel);
+
+ Rect cumlistTitle, cumlistRect;
+ if (Configurations.DrawVaginaStatus && !pawn.IsAnimal())
+ {
+ Rect genitalRect = new Rect(pawnRectWidth + 24, pawnRectHeight + 2 * fontheight, genitalRectWidth, genitalRectHeight + fontheight * 2);
+ Rect breastRect = new Rect(pawnRectWidth + 24, 40f, breastRectWidth, breastRectHeight + fontheight);
+ DrawVagina(genitalRect);
+ DrawBreast(breastRect);
+ cumlistTitle = new Rect(wombRectWidth + 4f, 0, 150f, fontheight);
+ cumlistRect = new Rect(wombRectWidth + 4f, fontheight, 150f, mainRect.yMax - fontheight + preginfoheight + 3);
+ }
+ else
+ {
+ cumlistTitle = new Rect(pawnRectWidth, 0, 150f, fontheight);
+ cumlistRect = new Rect(pawnRectWidth, fontheight, 150f, mainRect.yMax - wombRectHeight - fontheight);
+ }
+
+ Rect infoRect = new Rect(0, pawnRectHeight + 2*fontheight, pawnRectWidth, pawnRect.yMax + 2*fontheight - wombInfoRect.y);
+ DrawInfos(infoRect);
+
+
+
+ GUI.Label(cumlistTitle, Translations.Dialog_WombInfo04);
+ DrawCumlist(cumlistRect);
+
+
+
+
+
+ }
+
+
+
+
+ private void DrawCumlist(Rect rect)
+ {
+ Listing_Standard cumlist = new Listing_Standard
+ {
+ maxOneColumn = true,
+ ColumnWidth = wombRectWidth - pawnRectWidth
+ };
+ cumlist.Begin(rect);
+ Listing_Standard cumlistsection = cumlist.BeginSection(rect.height - fontheight - 12f);
+ foreach (string s in comp.GetCumsInfo)
+ {
+ cumlistsection.Label(s);
+ }
+ cumlist.EndSection(cumlistsection);
+ cumlist.End();
+ }
+
+ private void DrawWomb(Rect rect)
+ {
+ GUI.color = new Color(1.00f, 0.47f, 0.47f, 1);
+ GUI.Box(rect, "", boxstyle);
+ //GUI.color = Color.white;
+ //Widgets.DrawTextureFitted(wombRect, womb,1.0f);
+ //GUI.color = cumcolor;
+ //Widgets.DrawTextureFitted(wombRect, cum,1.0f);
+ GUI.DrawTexture(rect, womb, ScaleMode.ScaleToFit, true, 0, Color.white, 0, 0);
+ GUI.DrawTexture(rect, cum, ScaleMode.ScaleToFit, true, 0, cumcolor, 0, 0);
+
+ GUI.color = Color.white;
+
+
+ }
+
+
+
+ private void DrawVagina(Rect rect)
+ {
+ Rect genitalIconRect = new Rect(rect.x, rect.y + fontheight, genitalRectWidth, genitalRectHeight);
+ Rect genitalVaginaLabelRect = new Rect(rect.x, rect.y + 10f, genitalRectWidth, fontheight);
+ Rect genitalAnusLabelRect = new Rect(rect.x, rect.y + fontheight + genitalRectHeight, genitalRectWidth, fontheight);
+
+ vagina = pawn.GetGenitalIcon();
+ anal = pawn.GetAnalIcon();
+ GUI.color = new Color(1.00f, 0.47f, 0.47f, 1);
+ GUI.Box(rect, "", boxstyle);
+ GUI.color = pawn.story.SkinColor;
+ //Widgets.DrawTextureFitted(genitalIconRect, anal, 1.0f);
+ //Widgets.DrawTextureFitted(genitalIconRect, vagina, 1.0f);
+ GUI.DrawTexture(genitalIconRect, anal, ScaleMode.ScaleToFit);
+ GUI.DrawTexture(genitalIconRect, vagina, ScaleMode.ScaleToFit);
+
+ GUI.color = Color.white;
+ GUI.Label(genitalVaginaLabelRect, pawn.GetVaginaLabel(), fontstylecenter);
+ GUI.Label(genitalAnusLabelRect, pawn.GetAnusLabel(), fontstylecenter);
+ }
+
+ private void DrawBreast(Rect rect)
+ {
+ Rect BreastIconRect = new Rect(rect.x, rect.y + fontheight, breastRectWidth, breastRectHeight);
+ Rect BreastLabelRect = new Rect(rect.x, rect.y, breastRectWidth, fontheight);
+ Rect MilkGaugeRect = new Rect(rect.x, rect.yMax, breastRectWidth, 20f);
+
+ GUI.color = new Color(1.00f, 0.47f, 0.47f, 1);
+ GUI.Box(rect, "", boxstyle);
+
+ pawn.DrawBreastIcon(BreastIconRect);
+
+
+ GUI.color = Color.white;
+ GUI.Label(BreastLabelRect, pawn.GetBreastLabel(), fontstylecenter);
+
+ pawn.DrawMilkBars(MilkGaugeRect);
+
+
+ }
+
+ private void DrawInfos(Rect rect)
+ {
+ Rect lineRect = new Rect(rect.x, rect.y, rect.width, 20f);
+ float statvalue;
+ const float height = 24f;
+ statvalue = pawn.GetStatValue(xxx.sex_drive_stat);
+ FillableBarLabeled(lineRect, " " + xxx.sex_drive_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue/2 ,TextureCache.slaaneshTexture,Texture2D.blackTexture, xxx.sex_drive_stat.description);
+ lineRect.y += height;
+
+ statvalue = pawn.GetStatValue(xxx.vulnerability_stat);
+ FillableBarLabeled(lineRect, " " + xxx.vulnerability_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue/2, TextureCache.khorneTexture,Texture2D.blackTexture, xxx.vulnerability_stat.description);
+ lineRect.y += height;
+
+ statvalue = pawn.GetStatValue(xxx.sex_stat);
+ FillableBarLabeled(lineRect, " " + xxx.sex_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue / 2, TextureCache.tzeentchTexture, Texture2D.blackTexture, xxx.sex_stat.description);
+ lineRect.y += height;
+
+ statvalue = pawn.records.GetValue(xxx.CountOfBirthHuman);
+ FillableBarLabeled(lineRect, " " + xxx.CountOfBirthHuman.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 10, TextureCache.humanTexture, Texture2D.blackTexture, xxx.CountOfBirthHuman.description);
+ lineRect.y += height;
+
+ statvalue = pawn.records.GetValue(xxx.CountOfBirthAnimal);
+ FillableBarLabeled(lineRect, " " + xxx.CountOfBirthAnimal.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 20, TextureCache.animalTexture, Texture2D.blackTexture, xxx.CountOfBirthAnimal.description);
+ lineRect.y += height;
+
+ statvalue = pawn.records.GetValue(xxx.CountOfBirthEgg);
+ FillableBarLabeled(lineRect, " " + xxx.CountOfBirthEgg.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 100, TextureCache.nurgleTexture, Texture2D.blackTexture, xxx.CountOfBirthEgg.description);
+ lineRect.y += height;
+
+ statvalue = pawn.records.GetValue(xxx.CountOfWhore);
+ if (statvalue > 0)
+ {
+ FillableBarLabeled(lineRect, " " + xxx.CountOfWhore.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 50, TextureCache.slaaneshTexture, Texture2D.blackTexture, xxx.CountOfWhore.description);
+ statvalue = pawn.records.GetValue(xxx.EarnedMoneyByWhore);
+ lineRect.y += height;
+ FillableBarLabeled(lineRect, " " + VariousDefOf.RJW_EarnedMoneyByWhore.label.CapitalizeFirst() + " " + statvalue, statvalue / 10000, TextureCache.ghalmarazTexture, Texture2D.blackTexture);
+
+ lineRect.y += height;
+ }
+ else
+ {
+ lineRect.y += height;
+ lineRect.y += height;
+ }
+
+ statvalue = Configurations.ImplantationChance * comp.Props.baseImplantationChanceFactor * comp.ImplantFactor;
+ FillableBarLabeled(lineRect, " " + xxx.reproduction.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue, TextureCache.fertilityTexture, Texture2D.blackTexture, Translations.FertilityDesc);
+ Rect overayRect = new Rect(lineRect.x, lineRect.y, lineRect.width * Math.Min(1.0f, comp.GetFertilityChance()), lineRect.height);
+ GUI.DrawTexture(overayRect, TextureCache.FertChanceTex);
+ lineRect.y += height;
+ }
+
+ private void FillableBarLabeled(Rect rect, string label, float fillPercent, Texture2D filltexture, Texture2D bgtexture, string tooltip = null)
+ {
+ Widgets.FillableBar(rect, Math.Min(fillPercent,1.0f), filltexture, bgtexture, true);
+ GUI.Label(rect, label, fontstyleleft);
+ Widgets.DrawHighlightIfMouseover(rect);
+ if (tooltip != null) TooltipHandler.TipRegion(rect, tooltip);
+ }
+
+
+ }
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/UI/Gizmo_Womb.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/UI/Gizmo_Womb.cs
new file mode 100644
index 0000000..e076a42
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/UI/Gizmo_Womb.cs
@@ -0,0 +1,41 @@
+using UnityEngine;
+using Verse;
+
+namespace RJW_Menstruation
+{
+ public class Gizmo_Womb : Command_Action
+ {
+ public Texture2D icon_overay;
+ public Color cumcolor;
+ public HediffComp_Menstruation comp;
+
+ protected override void DrawIcon(Rect rect, Material buttonMat, GizmoRenderParms parms)
+ {
+ Texture2D badTex = icon;
+ Texture2D overay = icon_overay;
+ Color color = cumcolor;
+
+ if (badTex == null)
+ {
+ badTex = BaseContent.BadTex;
+ }
+ if (overay == null)
+ {
+ overay = BaseContent.BadTex;
+ }
+ if (color == null) color = Color.white;
+ rect.position += new Vector2(iconOffset.x * rect.size.x, iconOffset.y * rect.size.y);
+ GUI.color = IconDrawColor;
+ Widgets.DrawTextureFitted(rect, badTex, this.iconDrawScale * 0.85f, this.iconProportions, this.iconTexCoords, this.iconAngle, buttonMat);
+ GUI.color = color;
+ Widgets.DrawTextureFitted(rect, overay, iconDrawScale * 0.85f, iconProportions, iconTexCoords, iconAngle, buttonMat);
+ GUI.color = Color.white;
+ if (Configurations.DrawEggOverlay) comp.DrawEggOverlay(rect);
+
+ }
+
+
+
+
+ }
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/Utility.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/Utility.cs
new file mode 100644
index 0000000..0f86ed7
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/Utility.cs
@@ -0,0 +1,463 @@
+using RimWorld;
+using rjw;
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using UnityEngine;
+using Verse;
+using Verse.Sound;
+using System.Threading;
+using System.Threading.Tasks;
+
+
+namespace RJW_Menstruation
+{
+ public static class Colors
+ {
+ public static Color blood = new Color(0.78f, 0, 0);
+ //public static Color nippleblack = new Color(0.215f, 0.078f, 0); // 81,20,0
+ public static ColorInt white = new ColorInt(255,255,255,255);
+
+
+
+ public static Color CMYKLerp(Color a, Color b, float t)
+ {
+ RGBtoCMYK(a, out float ac, out float am, out float ay, out float ak);
+ RGBtoCMYK(b, out float bc, out float bm, out float by, out float bk);
+
+ return CMYKtoRGB(Mathf.Lerp(ac, bc, t), Mathf.Lerp(am, bm, t), Mathf.Lerp(ay, by, t), Mathf.Lerp(ak, bk, t));
+ }
+
+ public static void RGBtoCMYK(Color rgb, out float c, out float m, out float y, out float k)
+ {
+ k = 1 - Math.Max(rgb.r, Math.Max(rgb.g, rgb.b));
+ c = (1 - rgb.r - k) / (1 - k);
+ m = (1 - rgb.g - k) / (1 - k);
+ y = (1 - rgb.b - k) / (1 - k);
+
+ }
+
+ public static Color CMYKtoRGB(float c, float m, float y, float k)
+ {
+ return new Color((1 - c) * (1 - k), (1 - m) * (1 - k), (1 - y) * (1 - k));
+ }
+
+
+
+ }
+
+
+ public static class Utility
+ {
+ public static System.Random random = new System.Random(Environment.TickCount);
+
+
+
+
+ public static float GetCumVolume(this Pawn pawn)
+ {
+ List hediffs = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn));
+ if (hediffs.NullOrEmpty()) return 0;
+ else return pawn.GetCumVolume(hediffs);
+ }
+
+ public static float GetCumVolume(this Pawn pawn, List hediffs)
+ {
+ CompHediffBodyPart part = hediffs?.FindAll((Hediff hed) => hed.def.defName.ToLower().Contains("penis")).InRandomOrder().FirstOrDefault()?.TryGetComp();
+ if (part == null) part = hediffs?.FindAll((Hediff hed) => hed.def.defName.ToLower().Contains("ovipositorf")).InRandomOrder().FirstOrDefault()?.TryGetComp();
+ if (part == null) part = hediffs?.FindAll((Hediff hed) => hed.def.defName.ToLower().Contains("ovipositorm")).InRandomOrder().FirstOrDefault()?.TryGetComp();
+ if (part == null) part = hediffs?.FindAll((Hediff hed) => hed.def.defName.ToLower().Contains("tentacle")).InRandomOrder().FirstOrDefault()?.TryGetComp();
+
+
+ return pawn.GetCumVolume(part);
+ }
+
+
+ public static float GetCumVolume(this Pawn pawn, CompHediffBodyPart part)
+ {
+ float res;
+
+ try
+ {
+ res = part.FluidAmmount * part.FluidModifier * pawn.BodySize / pawn.RaceProps.baseBodySize * Rand.Range(0.8f, 1.2f) * RJWSettings.cum_on_body_amount_adjust * 0.3f;
+ }
+ catch (NullReferenceException)
+ {
+ res = 0.0f;
+ }
+ if (pawn.Has(Quirk.Messy)) res *= Rand.Range(4.0f, 8.0f);
+
+ return res;
+ }
+
+
+
+ public static HediffComp_Breast GetBreastComp(this Pawn pawn)
+ {
+ var hedifflist = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_breastsBPR(pawn))?.FindAll((Hediff h) => h is Hediff_PartBaseNatural || h is Hediff_PartBaseArtifical);
+ HediffComp_Breast result;
+ if (hedifflist.NullOrEmpty()) return null;
+ else
+ {
+ foreach(Hediff h in hedifflist)
+ {
+ result = h.TryGetComp();
+ if (result != null) return result;
+ }
+ }
+ return null;
+ }
+
+ public static HediffComp_Breast GetBreastComp(this Hediff hediff)
+ {
+ if (hediff is Hediff_PartBaseNatural)
+ {
+ return hediff.TryGetComp();
+ }
+ return null;
+ }
+
+ public static List GetMilkComps(this Pawn pawn)
+ {
+ List milkcomp = pawn.AllComps.FindAll(x => x is CompMilkable || x.GetType().ToString().ToLower().Contains("milkable"));
+ return milkcomp;
+ }
+
+ public static bool HasMenstruationComp(this Pawn pawn)
+ {
+ var hedifflist = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn))?.FindAll((Hediff h) => h.def.defName.ToLower().Contains("vagina"));
+ HediffComp_Menstruation result;
+ if (hedifflist.NullOrEmpty()) return false;
+ else
+ {
+ foreach (Hediff h in hedifflist)
+ {
+ result = h.TryGetComp();
+ if (result != null) return true;
+ }
+ }
+ return false;
+ }
+
+ public static bool HasMenstruationComp(this Hediff hediff)
+ {
+ if (hediff is Hediff_PartBaseNatural || hediff is Hediff_PartBaseArtifical)
+ {
+ if (hediff.TryGetComp() != null) return true;
+ }
+ return false;
+ }
+
+
+ public static float GetPregnancyProgress(this Pawn pawn)
+ {
+ Hediff hediff = PregnancyHelper.GetPregnancy(pawn);
+ if (hediff is Hediff_BasePregnancy)
+ {
+ Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff;
+ return h.GestationProgress;
+ }
+ return -1;
+ }
+
+ public static Pawn GetFetus(this Pawn pawn)
+ {
+ Hediff hediff = PregnancyHelper.GetPregnancy(pawn);
+ if (hediff is Hediff_BasePregnancy)
+ {
+ Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff;
+ if (!h.babies.NullOrEmpty()) return h.babies.First();
+ else
+ {
+ Log.Error("Baby not exist: baby was not created or removed. Remove pregnancy.");
+ pawn.health.RemoveHediff(hediff);
+ return null;
+ }
+ }
+
+
+ return null;
+ }
+
+ public static Texture2D GetGenitalIcon(this Pawn pawn)
+ {
+ var hediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn))?.Find((Hediff h) => h.def.defName.ToLower().Contains("vagina"));
+ if (hediff == null) return ContentFinder.Get("Genitals/Vagina00", true);
+ HediffComp_Menstruation comp = hediff.GetMenstruationComp();
+ string icon;
+ if (comp != null) icon = comp.vagTex;
+ else icon = "Genitals/Vagina";
+
+ if (hediff.Severity < 0.20f) icon += "00"; //micro
+ else if (hediff.Severity < 0.30f) icon += "01"; //tight
+ else if (hediff.Severity < 0.40f) icon += "02"; //tight
+ else if (hediff.Severity < 0.47f) icon += "03"; //average
+ else if (hediff.Severity < 0.53f) icon += "04"; //average
+ else if (hediff.Severity < 0.60f) icon += "05"; //average
+ else if (hediff.Severity < 0.70f) icon += "06"; //accomodating
+ else if (hediff.Severity < 0.80f) icon += "07"; //accomodating
+ else if (hediff.Severity < 0.87f) icon += "08"; //cavernous
+ else if (hediff.Severity < 0.94f) icon += "09"; //cavernous
+ else if (hediff.Severity < 1.01f) icon += "10"; //cavernous
+ else icon += "11"; //abyssal
+
+ return ContentFinder.Get((icon), true);
+ }
+
+ public static Texture2D GetAnalIcon(this Pawn pawn)
+ {
+ var hediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_anusBPR(pawn)).FirstOrDefault((Hediff h) => h.def.defName.ToLower().Contains("anus"));
+ if (hediff != null)
+ {
+ CompProperties_Anus Props = (CompProperties_Anus)hediff.TryGetComp()?.props;
+ string icon;
+ if (Props != null) icon = Props.analTex ?? "Genitals/Anal";
+ else icon = "Genitals/Anal";
+ if (hediff.Severity < 0.20f) icon += "00"; //micro
+ else if (hediff.Severity < 0.40f) icon += "01"; //tight
+ else if (hediff.Severity < 0.60f) icon += "02"; //average
+ else if (hediff.Severity < 0.80f) icon += "03"; //accomodating
+ else if (hediff.Severity < 1.01f) icon += "04"; //cavernous
+ else icon += "05"; //abyssal
+
+ return ContentFinder.Get((icon), true);
+ }
+ else
+ {
+ return ContentFinder.Get(("Genitals/Anal00"), true);
+ }
+ }
+
+ public static void DrawBreastIcon(this Pawn pawn, Rect rect)
+ {
+ var hediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_breastsBPR(pawn)).FirstOrDefault((Hediff h) => h.def.defName.ToLower().Contains("breast"));
+ Texture2D breast, nipple, areola;
+ if (hediff != null)
+ {
+ HediffComp_Breast comp = hediff.TryGetComp();
+ string icon;
+ if (comp != null) icon = comp.Props.BreastTex ?? "Breasts/Breast_Breast";
+ else icon = "Breasts/Breast_Breast";
+ if (hediff.Severity < 0.20f) icon += "_Breast00";
+ else if (hediff.Severity < 0.40f) icon += "_Breast01";
+ else if (hediff.Severity < 0.60f) icon += "_Breast02";
+ else if (hediff.Severity < 0.80f) icon += "_Breast03";
+ else if (hediff.Severity < 1.00f) icon += "_Breast04";
+ else icon += "_Breast05";
+
+ string nippleicon, areolaicon;
+
+ nippleicon = icon + "_Nipple0" + GetNippleIndex(comp.NippleSize);
+ areolaicon = icon + "_Areola0" + GetAreolaIndex(comp.AreolaSize);
+
+
+ breast = ContentFinder.Get(icon, false);
+ areola = ContentFinder.Get(areolaicon, false);
+ nipple = ContentFinder.Get(nippleicon, false);
+ GUI.color = pawn.story.SkinColor;
+ GUI.DrawTexture(rect, breast, ScaleMode.ScaleToFit);
+
+ GUI.color = comp.NippleColor;
+ GUI.DrawTexture(rect, areola, ScaleMode.ScaleToFit);
+
+ GUI.DrawTexture(rect, nipple, ScaleMode.ScaleToFit);
+
+
+ if (Configurations.Debug) TooltipHandler.TipRegion(rect, comp.DebugInfo());
+ }
+ else
+ {
+ breast = ContentFinder.Get("Breasts/Breast_Breast00", false);
+ nipple = ContentFinder.Get("Breasts/Breast_Breast00_Nipple00", false);
+ areola = ContentFinder.Get("Breasts/Breast_Breast00_Areola00", false);
+
+ GUI.color = pawn.story.SkinColor;
+ GUI.DrawTexture(rect, breast, ScaleMode.ScaleToFit);
+ GUI.color = Color.white;
+ GUI.DrawTexture(rect, areola, ScaleMode.ScaleToFit);
+ GUI.DrawTexture(rect, nipple, ScaleMode.ScaleToFit);
+ }
+ }
+
+ public static int GetNippleIndex(float nipplesize)
+ {
+ if (nipplesize < 0.25f) return 0;
+ else if (nipplesize < 0.50f) return 1;
+ else if (nipplesize < 0.75f) return 2;
+ else return 3;
+ }
+
+ public static int GetAreolaIndex(float nipplesize)
+ {
+ if (nipplesize < 0.15f) return 0;
+ else if (nipplesize < 0.30f) return 1;
+ else if (nipplesize < 0.45f) return 2;
+ else if (nipplesize < 0.70f) return 3;
+ else return 4;
+ }
+
+ public static void DrawMilkBars(this Pawn pawn, Rect rect)
+ {
+ //List milkcomp = pawn.AllComps.FindAll(x => x is CompMilkable || x.GetType().ToString().ToLower().Contains("milkable"));
+ ThingComp milkcomp = null;
+ float res = 0;
+ if (VariousDefOf.Hediff_Heavy_Lactating_Permanent != null)
+ {
+ if (pawn.health.hediffSet.HasHediff(VariousDefOf.Hediff_Heavy_Lactating_Permanent)) milkcomp = pawn.AllComps.FirstOrDefault(x => x.GetType().ToString().ToLower().Contains("hypermilkable"));
+ else milkcomp = pawn.AllComps.FirstOrDefault(x => x.GetType().ToString().ToLower().Contains("milkable"));
+ }
+ else
+ {
+ milkcomp = pawn.GetComp();
+ }
+
+ if (milkcomp != null)
+ {
+ if (milkcomp is CompMilkable)
+ {
+ bool active = (bool)milkcomp.GetPropertyValue("Active");
+ if (active)
+ {
+ CompMilkable m = (CompMilkable)milkcomp;
+ res = Math.Max(m.Fullness, res);
+ Widgets.FillableBar(rect, Math.Min(res, 1.0f), TextureCache.milkTexture, Texture2D.blackTexture, true);
+ DrawMilkBottle(rect, pawn, VariousDefOf.Job_LactateSelf, m.Fullness);
+ }
+ }
+ else
+ {
+ bool active = (bool)milkcomp.GetPropertyValue("Active");
+ if (active)
+ {
+ float fullness = (float)milkcomp.GetMemberValue("fullness");
+ res = Math.Max(fullness, res);
+ Widgets.FillableBar(rect, Math.Min(res, 1.0f), TextureCache.milkTexture, Texture2D.blackTexture, true);
+ DrawMilkBottle(rect, pawn, VariousDefOf.Job_LactateSelf_MC, fullness);
+ }
+ }
+ }
+ }
+
+ public static void DrawMilkBottle(Rect rect, Pawn pawn, JobDef milkjob,float fullness)
+ {
+ Texture2D texture;
+ Rect buttonrect = new Rect(rect.x, rect.y, rect.height, rect.height);
+ if (fullness > 0.0f)
+ {
+ if (fullness < 0.3f) texture = ContentFinder.Get("Milk/Milkbottle_Small", false);
+ else if (fullness < 0.7f) texture = ContentFinder.Get("Milk/Milkbottle_Medium", false);
+ else texture = ContentFinder.Get("Milk/Milkbottle_Large", false);
+ GUIContent icon = new GUIContent(texture);
+ GUIStyle style = GUIStyle.none;
+ style.normal.background = texture;
+ string tooltip = Translations.Button_MilkTooltip;
+
+ TooltipHandler.TipRegion(buttonrect, tooltip);
+ if (GUI.Button(buttonrect, icon, style))
+ {
+ if (fullness < 0.1f
+ || !pawn.IsColonistPlayerControlled
+ || pawn.Downed) SoundDefOf.ClickReject.PlayOneShotOnCamera();
+ else
+ {
+ SoundDefOf.Click.PlayOneShotOnCamera();
+ pawn.jobs.TryTakeOrderedJob(new Verse.AI.Job(milkjob, pawn));
+ }
+ }
+ Widgets.DrawHighlightIfMouseover(buttonrect);
+ }
+ }
+
+
+ public static string GetVaginaLabel(this Pawn pawn)
+ {
+ var hediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn)).Find((Hediff h) => h.def.defName.ToLower().Contains("vagina"));
+ return hediff.LabelBase.CapitalizeFirst() + "\n(" + hediff.LabelInBrackets + ")" + "\n" + xxx.CountOfSex.LabelCap.CapitalizeFirst() + ": " + pawn.records.GetAsInt(xxx.CountOfSex);
+ }
+ public static string GetAnusLabel(this Pawn pawn)
+ {
+ var hediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_anusBPR(pawn)).FirstOrDefault((Hediff h) => h.def.defName.ToLower().Contains("anus"));
+ if (hediff != null) return hediff.LabelBase.CapitalizeFirst() + "\n(" + hediff.LabelInBrackets + ")";
+ else return "";
+ }
+ public static string GetBreastLabel(this Pawn pawn)
+ {
+ var hediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_breastsBPR(pawn)).FirstOrDefault((Hediff h) => h.def.defName.ToLower().Contains("breast"));
+ if (hediff != null) return hediff.LabelBase.CapitalizeFirst() + "\n(" + hediff.LabelInBrackets + ")";
+ else return "";
+ }
+
+
+ public static bool ShowFetusImage(this Hediff_BasePregnancy hediff)
+ {
+ if (Configurations.InfoDetail == Configurations.DetailLevel.All) return true;
+ else if (Configurations.InfoDetail == Configurations.DetailLevel.Hide) return false;
+ else if (hediff.Visible) return true;
+ else return false;
+ }
+
+ public static bool ShowFetusInfo()
+ {
+ if (Configurations.InfoDetail == Configurations.DetailLevel.All || Configurations.InfoDetail == Configurations.DetailLevel.OnReveal) return true;
+ else return false;
+ }
+
+ public static bool ShowStatus(this Pawn pawn)
+ {
+ if (pawn.Faction != null && Configurations.ShowFlag != Configurations.PawnFlags.None)
+ {
+ if (pawn.Faction.IsPlayer)
+ {
+ if ((Configurations.ShowFlag & Configurations.PawnFlags.Colonist) != 0) return true;
+ }
+ else if (pawn.IsPrisonerOfColony)
+ {
+ if ((Configurations.ShowFlag & Configurations.PawnFlags.Prisoner) != 0) return true;
+ }
+ else if (pawn.Faction.PlayerRelationKind == FactionRelationKind.Ally)
+ {
+ if ((Configurations.ShowFlag & Configurations.PawnFlags.Ally) != 0) return true;
+ }
+ else if (pawn.Faction.PlayerRelationKind == FactionRelationKind.Hostile)
+ {
+ if ((Configurations.ShowFlag & Configurations.PawnFlags.Hostile) != 0) return true;
+ }
+ else if ((Configurations.ShowFlag & Configurations.PawnFlags.Neutral) != 0) return true;
+ else return false;
+ }
+ else if ((Configurations.ShowFlag & Configurations.PawnFlags.Neutral) != 0) return true;
+
+ return false;
+ }
+
+ public static Pawn GetFather(Pawn pawn, Pawn mother)
+ {
+ Pawn res = pawn.GetFather();
+ if (res != null) return res;
+ else
+ {
+ res = pawn.relations?.GetFirstDirectRelationPawn(VariousDefOf.Relation_birthgiver, x => !x.Equals(mother)) ?? null;
+ return res;
+ }
+ }
+
+ public static float RandGaussianLike(float min, float max, int iterations = 3)
+ {
+ double res = 0;
+ for (int i = 0; i < iterations; i++)
+ {
+ res += random.NextDouble();
+ }
+ res = res / iterations;
+
+ return (float)res*(max-min) + min;
+
+ }
+
+ public static float VariationRange(this float num, float variant)
+ {
+ return num * Rand.Range(1.0f - variant, 1.0f + variant);
+ }
+
+ }
+}
diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs
new file mode 100644
index 0000000..140543d
--- /dev/null
+++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs
@@ -0,0 +1,96 @@
+using RimWorld;
+using rjw;
+using System.Linq;
+using System;
+using System.Collections.Generic;
+using Verse;
+
+namespace RJW_Menstruation
+{
+ public static class VariousDefOf
+ {
+
+ public static readonly ThingDef CumFilth = DefDatabase.GetNamed("FilthCum");
+ public static readonly ThingDef Tampon = DefDatabase.GetNamed("Absorber_Tampon");
+ public static readonly ThingDef Tampon_Dirty = DefDatabase.GetNamed("Absorber_Tampon_Dirty");
+ public static readonly ThingDef FilthMixture = DefDatabase.GetNamed("FilthMixture");
+ public static readonly HediffDef RJW_IUD = DefDatabase.GetNamed("RJW_IUD");
+ public static readonly HediffDef Hediff_MenstrualCramp = DefDatabase.GetNamed("Hediff_MenstrualCramp");
+ public static readonly HediffDef Hediff_Climacteric = DefDatabase.GetNamed("Hediff_Climacteric");
+ public static readonly HediffDef Hediff_Menopause = DefDatabase.GetNamed("Hediff_Menopause");
+ public static readonly HediffDef Hediff_Estrus = DefDatabase.GetNamed("Hediff_Estrus");
+ public static readonly HediffDef Hediff_Estrus_Consealed = DefDatabase.GetNamed("Hediff_Estrus_Consealed");
+ public static readonly StatDef MaxAbsorbable = DefDatabase.GetNamed("MaxAbsorbable");
+ public static readonly PawnRelationDef Relation_birthgiver = DefDatabase.AllDefs.FirstOrDefault(d => d.defName == "RJW_Sire");
+ public static readonly PawnRelationDef Relation_spawn = DefDatabase.AllDefs.FirstOrDefault(d => d.defName == "RJW_Pup");
+ public static readonly NeedDef SexNeed = DefDatabase.GetNamed("Sex");
+ public static readonly JobDef VaginaWashing = DefDatabase.GetNamed("VaginaWashing");
+ public static readonly JobDef Job_LactateSelf = DefDatabase.GetNamed("LactateSelf");
+ public static readonly ThoughtDef LeakingFluids = DefDatabase.GetNamed("LeakingFluids");
+ public static readonly ThoughtDef CameInsideF = DefDatabase.GetNamed("CameInsideF");
+ public static readonly ThoughtDef CameInsideFLowFert = DefDatabase.GetNamed("CameInsideFLowFert");
+ public static readonly ThoughtDef CameInsideFFetish = DefDatabase.GetNamed("CameInsideFFetish");
+ public static readonly ThoughtDef CameInsideFFetishSafe = DefDatabase.GetNamed("CameInsideFFetishSafe");
+ public static readonly ThoughtDef HaterCameInsideFSafe = DefDatabase.GetNamed("HaterCameInsideFSafe");
+ public static readonly ThoughtDef HaterCameInsideF = DefDatabase.GetNamed("HaterCameInsideF");
+ public static readonly ThoughtDef CameInsideM = DefDatabase.GetNamed("CameInsideM");
+ public static readonly ThoughtDef HaterCameInsideM = DefDatabase.GetNamed("HaterCameInsideM");
+ public static readonly ThoughtDef UnwantedPregnancy = DefDatabase.GetNamed("UnwantedPregnancy");
+ public static readonly ThoughtDef UnwantedPregnancyMild = DefDatabase.GetNamed("UnwantedPregnancyMild");
+ public static readonly ThoughtDef TookContraptivePill = DefDatabase.GetNamed("TookContraptivePill");
+ public static readonly ThoughtDef HateTookContraptivePill = DefDatabase.GetNamed("HateTookContraptivePill");
+ public static readonly HediffDef_PartBase Vagina = DefDatabase.GetNamed("Vagina");
+ public static readonly CompProperties_Menstruation VaginaCompProperties = (CompProperties_Menstruation)Vagina.comps.FirstOrDefault(x => x is CompProperties_Menstruation);
+ public static readonly KeyBindingDef OpenStatusWindowKey = DefDatabase.GetNamed("OpenStatusWindow");
+ public static readonly PawnColumnDef RJW_EarnedMoneyByWhore = DefDatabase.GetNamed("RJW_EarnedMoneyByWhore");
+ public static readonly RecordDef AmountofCreampied = DefDatabase.GetNamed("AmountofCreampied");
+ public static readonly RecordDef AmountofFertilizedEggs = DefDatabase.GetNamed("AmountofFertilizedEggs");
+
+
+
+ private static List allraces = null;
+ private static List allkinds = null;
+
+ public static List AllRaces
+ {
+ get
+ {
+ if (allraces == null)
+ {
+
+ List allThings = DefDatabase.AllDefsListForReading;
+ allraces = allThings.FindAll(x => x.race != null && x.race.IsFlesh);
+ }
+ return allraces;
+ }
+ }
+ public static List AllKinds
+ {
+ get
+ {
+ if (allkinds == null)
+ {
+ List allKinds = DefDatabase.AllDefsListForReading;
+ allkinds = allKinds.FindAll(x => x.race != null);
+ }
+ return allkinds;
+ }
+ }
+
+
+
+ // Defs from Milkable Colonists
+ public static readonly HediffDef Hediff_Lactating_Drug = DefDatabase.GetNamedSilentFail("Lactating_Drug");
+ public static readonly HediffDef Hediff_Lactating_Natural = DefDatabase.GetNamedSilentFail("Lactating_Natural");
+ public static readonly HediffDef Hediff_Lactating_Permanent = DefDatabase.GetNamedSilentFail("Lactating_Permanent");
+ public static readonly HediffDef Hediff_Heavy_Lactating_Permanent = DefDatabase.GetNamedSilentFail("Heavy_Lactating_Permanent");
+ public static readonly JobDef Job_LactateSelf_MC = DefDatabase.GetNamedSilentFail("LactateSelf_MC");
+
+
+
+
+
+
+
+ }
+}
diff --git a/1.3/source/RJW_Menstruation/TextFile1.txt b/1.3/source/RJW_Menstruation/TextFile1.txt
new file mode 100644
index 0000000..e69de29
diff --git a/About/About.xml b/About/About.xml
index 35023f0..491d97c 100644
--- a/About/About.xml
+++ b/About/About.xml
@@ -4,6 +4,7 @@
a
1.2
+ 1.3
diff --git a/About/Manifest.xml b/About/Manifest.xml
index d023f5c..7f72bb0 100644
--- a/About/Manifest.xml
+++ b/About/Manifest.xml
@@ -1,7 +1,7 @@
RJW Menstruation
- 1.0.4.4a
+ 1.1.0.0
diff --git a/Assemblies/RJW_Menstruation.dll b/Assemblies/RJW_Menstruation.dll
deleted file mode 100644
index f76a551..0000000
Binary files a/Assemblies/RJW_Menstruation.dll and /dev/null differ
diff --git a/LoadFolders.xml b/LoadFolders.xml
index 2307295..3f91d1a 100644
--- a/LoadFolders.xml
+++ b/LoadFolders.xml
@@ -1,9 +1,13 @@
-
- /
- RJW Menstruation Race Support
- MilkModule
-
-
+
+ 1.2
+ 1.2\RJW Menstruation Race Support
+ 1.2\MilkModule
+
+
+ 1.3
+ 1.3\RJW Menstruation Race Support
+ 1.3\MilkModule
+
\ No newline at end of file
diff --git a/changelogs.txt b/changelogs.txt
index 197cf06..a16a593 100644
--- a/changelogs.txt
+++ b/changelogs.txt
@@ -1,3 +1,9 @@
+Version 1.1.0.0
+ - 1.3 support
+ - added tooltips on status window
+ -
+
+----Last update for 1.2----
Version 1.0.4.4a
- added records
- fixed errors on initializing