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 - 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 + + 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 + + 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 + + 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 + (0.70,0.00,0.00) + true + false + false + false + 1 + 0.1 + + true + + +
  • + + + 0.50 + 0.95 + + 0.005 +
  • +
  • + 0.2 + + + 0.40 + 0.95 + + 0.01 +
  • +
  • + 0.4 + + + 0.20 + 0.95 + + 0.10 +
  • +
  • + 0.6 + + + 0.0 + 0.95 + + 0.20 +
  • +
    + +
  • + -0.1 +
  • +
    +
    + + + HediffWithComps + Hediff_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 + (0.70,0.70,0.00) + false + false + false + false + 1 + 0.1 + + true + + +
  • + + + 0.50 + 0.8 + + +
  • + RJW_Fertility + 0.50 +
  • + + +
  • + + 0.2 + + 0.25 + 0.7 + + +
  • + RJW_Fertility + 0.25 +
  • + + +
  • + + 0.4 + + 0.10 + 0.6 + + +
  • + RJW_Fertility + 0.10 +
  • + + +
  • + + 0.6 + + 0.05 + 0.5 + + +
  • + RJW_Fertility + 0.01 +
  • + + +
    + + +
    + + + + HediffWithComps + Hediff_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 + 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 + + 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 + + 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. + RJW_Menstruation.Recipe_ExpandAreola + expanding areola + + + + Surgery_ContractAreola + + contract areola. + RJW_Menstruation.Recipe_ContractAreola + contracting areola + + + + Surgery_ExpandNipple + + expand nipple. + RJW_Menstruation.Recipe_ExpandNipple + expanding nipple + + + + Surgery_ContractNipple + + 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 + + The amount of cums I have been creampied. + Float + + + + AmountofFertilizedEggs + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + +
  • + + It bothers me. + -2 +
  • +
    +
    + + + CameInsideF + Thought_MemorySocial + 7.0 + 5 + 0.1 + 1 + +
  • + + I'm worried i might get pregnant. + -3 + -2 +
  • +
    +
    + + + CameInsideFLowFert + Thought_MemorySocial + 3.0 + 5 + 0.1 + 1 + +
  • + + I'm worried i might get pregnant. The chance is low, but... + -1 +
  • +
    +
    + + + CameInsideFFetish + Thought_MemorySocial + 3.0 + 5 + 0.1 + 1 + +
  • + + I might get pregnant. + 10 + 5 +
  • +
    +
    + + + CameInsideFFetishSafe + Thought_MemorySocial + 3.0 + 5 + 0.1 + 1 + +
  • + + I loved it. + 3 + 1 +
  • +
    +
    + + + CameInsideM + Thought_MemorySocial + 1.0 + 5 + 0.4 + +
  • + + Feel so good. + 2 + 1 +
  • +
    +
    + + + HaterCameInsideFSafe + Thought_MemorySocial + 3.0 + 5 + 0.1 + 1 + +
  • + + The chance is low. But i don't like it. + -2 + -5 +
  • +
    +
    + + + HaterCameInsideF + Thought_MemorySocial + 7.0 + 5 + 0.1 + 1 + +
  • + + I don't want to be pregnant with his baby + -5 + -10 +
  • +
    +
    + + + HaterCameInsideM + Thought_MemorySocial + 1.0 + 5 + 0.4 + +
  • + + i came inside of that bitch + 5 + 1 +
  • +
    +
    + + + UnwantedPregnancy + Thought_Memory + 14.0 + 5 + 0.1 + +
  • + + How do i... + -10 +
  • +
    +
    + + + UnwantedPregnancyMild + Thought_Memory + 14.0 + 5 + 0.1 + +
  • + + How do i... + -3 +
  • +
    +
    + + + TookContraptivePill + Thought_Memory + 7.0 + 5 + 0.1 + +
  • + + It will be okay. + 1 +
  • +
    +
    + + + HateTookContraptivePill + Thought_Memory + 7.0 + 5 + 0.1 + +
  • + + 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