diff --git a/.gitignore b/.gitignore index 4ce6fdd..e9c58f7 100644 --- a/.gitignore +++ b/.gitignore @@ -337,4 +337,7 @@ ASALocalRun/ .localhistory/ # BeatPulse healthcheck temp database -healthchecksdb \ No newline at end of file +healthchecksdb + +*.psd +*.dds \ No newline at end of file diff --git a/About/Manifest.xml b/About/Manifest.xml index 169317e..82b62c8 100644 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,7 +1,7 @@ RJW Menstruation - 1.0.2.0 + 1.0.3.0 diff --git a/Assemblies/MilkModule.dll b/Assemblies/MilkModule.dll new file mode 100644 index 0000000..9c0eba6 Binary files /dev/null and b/Assemblies/MilkModule.dll differ diff --git a/Assemblies/RJW_Menstruation.dll b/Assemblies/RJW_Menstruation.dll index 080a78c..91320ca 100644 Binary files a/Assemblies/RJW_Menstruation.dll and b/Assemblies/RJW_Menstruation.dll differ diff --git a/Defs/HediffDef/Hediffs_Menstruation.xml b/Defs/HediffDef/Hediffs_Menstruation.xml index 5c33a91..9d02090 100644 --- a/Defs/HediffDef/Hediffs_Menstruation.xml +++ b/Defs/HediffDef/Hediffs_Menstruation.xml @@ -27,7 +27,7 @@
  • 0.2 - + 0.40 0.95 @@ -36,7 +36,7 @@
  • 0.4 - + 0.20 0.95 diff --git a/Defs/JobDefs/Jobs_MilkSelf.xml b/Defs/JobDefs/Jobs_MilkSelf.xml new file mode 100644 index 0000000..bc2f88c --- /dev/null +++ b/Defs/JobDefs/Jobs_MilkSelf.xml @@ -0,0 +1,9 @@ + + + + LactateSelf + MilkModule.JobDriver_HumanMilkSelf + lactating self + true + + diff --git a/Defs/ThoughtDefs/Thoughts_sex.xml b/Defs/ThoughtDefs/Thoughts_sex.xml index 3d8d1d6..68ece5c 100644 --- a/Defs/ThoughtDefs/Thoughts_sex.xml +++ b/Defs/ThoughtDefs/Thoughts_sex.xml @@ -108,8 +108,8 @@
  • - That son of bitch came inside of me! - -5 + The chance is low. But i don't like it. + -3 -5
  • @@ -125,8 +125,8 @@
  • - That son of bitch came inside of me! I don't want to be pregnant with his baby - -10 + I don't want to be pregnant with his baby + -5 -10
  • diff --git a/Languages/English/Keyed/RJW_Menstruation.xml b/Languages/English/Keyed/RJW_Menstruation.xml index f3201ff..5d077d4 100644 --- a/Languages/English/Keyed/RJW_Menstruation.xml +++ b/Languages/English/Keyed/RJW_Menstruation.xml @@ -15,6 +15,7 @@ Climacteric Anestrus Status + Lactate self State Fetus Father @@ -43,8 +44,8 @@ show debug informations. womb status draw womb icon in status window - vagina status - draw vagina and anus 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 @@ -79,6 +80,16 @@ 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 how fast transition of nipples/areolas. + + Vaginal washing diff --git a/Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml b/Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml index 7d503c0..7d5f7cd 100644 --- a/Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml +++ b/Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml @@ -13,9 +13,9 @@ {0}에게 질내사정함 질싸를하니 기분이 좋네 {0}에게 질내사정당함 - 그 개새끼가 질싸를했어! 그새끼의 자식을 임신하고 싶지 않아... + 그새끼의 자식을 임신하고 싶지 않아... {0}에게 질내사정당함 - 그 개새끼가 질싸를했어! + 안전일이였지만 기분나빠 {0}에게 질내사정함 그 개년한테 질싸를했어 원치않은 임신 diff --git a/Languages/Korean/Keyed/RJW_Menstruation.xml b/Languages/Korean/Keyed/RJW_Menstruation.xml index 8dc34bf..21898ec 100644 --- a/Languages/Korean/Keyed/RJW_Menstruation.xml +++ b/Languages/Korean/Keyed/RJW_Menstruation.xml @@ -15,6 +15,7 @@ 갱년기 휴지기 상태창 + 모유 짜기 상태 태아 @@ -43,8 +44,8 @@ 디버그정보를 보여줍니다. 자궁 그림 상태창에 자궁그림을 표시합니다. - 보지 그림 - 상태창에 보지와 항문그림을 표시합니다. + 가슴, 보지 그림 + 상태창에 가슴, 보지와 항문그림을 표시합니다. 태아 정보 태아에 대한 모든 정보를 표시합니다. 임신을 발견한 이후에 태아에 대한 모든 정보를 표시합니다. @@ -79,6 +80,14 @@ 우선순위 + 임신후 유두 변화량 + 임신후에 유두가 얼마나 어두워지고 커지는지 설정합니다. + 유두 영구변화량 + 매번 임신할때마다 유두가 얼마나 영구적으로 어두워지고 커지는지 설정합니다. + 최대 변화량 + 유두는 이 값 이상으로 변하지 않습니다. + 유두 변화 속도 + 유두가 얼마나 빨리 변하는지 설정합니다. 질세척 diff --git a/Patches/Hediffs_PrivateParts_Breasts.xml b/Patches/Hediffs_PrivateParts_Breasts.xml new file mode 100644 index 0000000..480b7d2 --- /dev/null +++ b/Patches/Hediffs_PrivateParts_Breasts.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + Defs/rjw.HediffDef_PartBase[defName="Breasts"] + + +
  • + Breasts/Breast + (55,20,0) +
  • +
    +
    +
    + +
    \ No newline at end of file diff --git a/Patches/MilkPatch.xml b/Patches/MilkPatch.xml new file mode 100644 index 0000000..5097577 --- /dev/null +++ b/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/Patches/Overlays/Arrow.png b/Patches/Overlays/Arrow.png new file mode 100644 index 0000000..3bfd1c0 Binary files /dev/null and b/Patches/Overlays/Arrow.png differ diff --git a/Patches/Overlays/Barrel.png b/Patches/Overlays/Barrel.png new file mode 100644 index 0000000..bf40616 Binary files /dev/null and b/Patches/Overlays/Barrel.png differ diff --git a/Patches/Overlays/BrokenDown.png b/Patches/Overlays/BrokenDown.png new file mode 100644 index 0000000..42e68d1 Binary files /dev/null and b/Patches/Overlays/BrokenDown.png differ diff --git a/Patches/Overlays/DesignatedGenericTex.png b/Patches/Overlays/DesignatedGenericTex.png new file mode 100644 index 0000000..5aa8de5 Binary files /dev/null and b/Patches/Overlays/DesignatedGenericTex.png differ diff --git a/Patches/Overlays/DragHighlightCell.png b/Patches/Overlays/DragHighlightCell.png new file mode 100644 index 0000000..145bb89 Binary files /dev/null and b/Patches/Overlays/DragHighlightCell.png differ diff --git a/Patches/Overlays/FuelingPort.png b/Patches/Overlays/FuelingPort.png new file mode 100644 index 0000000..daa6802 Binary files /dev/null and b/Patches/Overlays/FuelingPort.png differ diff --git a/Patches/Overlays/GrayTextBG.png b/Patches/Overlays/GrayTextBG.png new file mode 100644 index 0000000..51abaed Binary files /dev/null and b/Patches/Overlays/GrayTextBG.png differ diff --git a/Patches/Overlays/InteractionCell.png b/Patches/Overlays/InteractionCell.png new file mode 100644 index 0000000..0887213 Binary files /dev/null and b/Patches/Overlays/InteractionCell.png differ diff --git a/Patches/Overlays/LaunchableMouseAttachment.png b/Patches/Overlays/LaunchableMouseAttachment.png new file mode 100644 index 0000000..6e9c35b Binary files /dev/null and b/Patches/Overlays/LaunchableMouseAttachment.png differ diff --git a/Patches/Overlays/Locked.png b/Patches/Overlays/Locked.png new file mode 100644 index 0000000..3cc34f3 Binary files /dev/null and b/Patches/Overlays/Locked.png differ diff --git a/Patches/Overlays/MouseoverBracketTex.png b/Patches/Overlays/MouseoverBracketTex.png new file mode 100644 index 0000000..68cfce9 Binary files /dev/null and b/Patches/Overlays/MouseoverBracketTex.png differ diff --git a/Patches/Overlays/NeedsPower.png b/Patches/Overlays/NeedsPower.png new file mode 100644 index 0000000..8c30802 Binary files /dev/null and b/Patches/Overlays/NeedsPower.png differ diff --git a/Patches/Overlays/OneSidedLine.png b/Patches/Overlays/OneSidedLine.png new file mode 100644 index 0000000..1ecc2be Binary files /dev/null and b/Patches/Overlays/OneSidedLine.png differ diff --git a/Patches/Overlays/OutOfFuel.png b/Patches/Overlays/OutOfFuel.png new file mode 100644 index 0000000..c667f33 Binary files /dev/null and b/Patches/Overlays/OutOfFuel.png differ diff --git a/Patches/Overlays/PowerOff.png b/Patches/Overlays/PowerOff.png new file mode 100644 index 0000000..349d30f Binary files /dev/null and b/Patches/Overlays/PowerOff.png differ diff --git a/Patches/Overlays/QuestionMark.png b/Patches/Overlays/QuestionMark.png new file mode 100644 index 0000000..71bd692 Binary files /dev/null and b/Patches/Overlays/QuestionMark.png differ diff --git a/Patches/Overlays/ReservedDestination.png b/Patches/Overlays/ReservedDestination.png new file mode 100644 index 0000000..19ea6ba Binary files /dev/null and b/Patches/Overlays/ReservedDestination.png differ diff --git a/Patches/Overlays/ReservedDestinationSelection.png b/Patches/Overlays/ReservedDestinationSelection.png new file mode 100644 index 0000000..722dffc Binary files /dev/null and b/Patches/Overlays/ReservedDestinationSelection.png differ diff --git a/Patches/Overlays/ReservedForWork.png b/Patches/Overlays/ReservedForWork.png new file mode 100644 index 0000000..364b48f Binary files /dev/null and b/Patches/Overlays/ReservedForWork.png differ diff --git a/Patches/Overlays/SelectionBracket.png b/Patches/Overlays/SelectionBracket.png new file mode 100644 index 0000000..3e46491 Binary files /dev/null and b/Patches/Overlays/SelectionBracket.png differ diff --git a/Patches/Overlays/SelectionBracketGUI.png b/Patches/Overlays/SelectionBracketGUI.png new file mode 100644 index 0000000..3e46491 Binary files /dev/null and b/Patches/Overlays/SelectionBracketGUI.png differ diff --git a/Patches/Overlays/SquadFlag.png b/Patches/Overlays/SquadFlag.png new file mode 100644 index 0000000..b54b6e2 Binary files /dev/null and b/Patches/Overlays/SquadFlag.png differ diff --git a/Patches/Overlays/TargetHighlight_Side.png b/Patches/Overlays/TargetHighlight_Side.png new file mode 100644 index 0000000..35d0d5d Binary files /dev/null and b/Patches/Overlays/TargetHighlight_Side.png differ diff --git a/Patches/Overlays/TargetHighlight_Square.png b/Patches/Overlays/TargetHighlight_Square.png new file mode 100644 index 0000000..1dc98cb Binary files /dev/null and b/Patches/Overlays/TargetHighlight_Square.png differ diff --git a/Patches/Overlays/ThingLine.png b/Patches/Overlays/ThingLine.png new file mode 100644 index 0000000..fb85b5b Binary files /dev/null and b/Patches/Overlays/ThingLine.png differ diff --git a/Patches/Overlays/WaypointMouseAttachment.png b/Patches/Overlays/WaypointMouseAttachment.png new file mode 100644 index 0000000..5c1645b Binary files /dev/null and b/Patches/Overlays/WaypointMouseAttachment.png differ diff --git a/Patches/PawnModExtensions_Animals.xml b/Patches/PawnModExtensions_Animals.xml new file mode 100644 index 0000000..a60c893 --- /dev/null +++ b/Patches/PawnModExtensions_Animals.xml @@ -0,0 +1,202 @@ + + + + + + + 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[@Name="BaseInsect"] + +
  • + Fetus/Insects/Fetus_Insect + (153,212,89,255) + 0.5 + + +
  • +
    +
    + + + +
    \ No newline at end of file diff --git a/Textures/Breasts/Breast_Breast00.png b/Textures/Breasts/Breast_Breast00.png new file mode 100644 index 0000000..beda441 Binary files /dev/null and b/Textures/Breasts/Breast_Breast00.png differ diff --git a/Textures/Breasts/Breast_Breast00_Nipple00.png b/Textures/Breasts/Breast_Breast00_Nipple00.png new file mode 100644 index 0000000..e640a6c Binary files /dev/null and b/Textures/Breasts/Breast_Breast00_Nipple00.png differ diff --git a/Textures/Breasts/Breast_Breast00_Nipple01.png b/Textures/Breasts/Breast_Breast00_Nipple01.png new file mode 100644 index 0000000..30fa6aa Binary files /dev/null and b/Textures/Breasts/Breast_Breast00_Nipple01.png differ diff --git a/Textures/Breasts/Breast_Breast00_Nipple02.png b/Textures/Breasts/Breast_Breast00_Nipple02.png new file mode 100644 index 0000000..e48fdfc Binary files /dev/null and b/Textures/Breasts/Breast_Breast00_Nipple02.png differ diff --git a/Textures/Breasts/Breast_Breast00_Nipple03.png b/Textures/Breasts/Breast_Breast00_Nipple03.png new file mode 100644 index 0000000..02353ad Binary files /dev/null and b/Textures/Breasts/Breast_Breast00_Nipple03.png differ diff --git a/Textures/Breasts/Breast_Breast01.png b/Textures/Breasts/Breast_Breast01.png new file mode 100644 index 0000000..c54c8c8 Binary files /dev/null and b/Textures/Breasts/Breast_Breast01.png differ diff --git a/Textures/Breasts/Breast_Breast01_Nipple00.png b/Textures/Breasts/Breast_Breast01_Nipple00.png new file mode 100644 index 0000000..a0471b8 Binary files /dev/null and b/Textures/Breasts/Breast_Breast01_Nipple00.png differ diff --git a/Textures/Breasts/Breast_Breast01_Nipple01.png b/Textures/Breasts/Breast_Breast01_Nipple01.png new file mode 100644 index 0000000..65cdafd Binary files /dev/null and b/Textures/Breasts/Breast_Breast01_Nipple01.png differ diff --git a/Textures/Breasts/Breast_Breast01_Nipple02.png b/Textures/Breasts/Breast_Breast01_Nipple02.png new file mode 100644 index 0000000..95bb135 Binary files /dev/null and b/Textures/Breasts/Breast_Breast01_Nipple02.png differ diff --git a/Textures/Breasts/Breast_Breast01_Nipple03.png b/Textures/Breasts/Breast_Breast01_Nipple03.png new file mode 100644 index 0000000..9b4c8b0 Binary files /dev/null and b/Textures/Breasts/Breast_Breast01_Nipple03.png differ diff --git a/Textures/Breasts/Breast_Breast02.png b/Textures/Breasts/Breast_Breast02.png new file mode 100644 index 0000000..0932f21 Binary files /dev/null and b/Textures/Breasts/Breast_Breast02.png differ diff --git a/Textures/Breasts/Breast_Breast02_Nipple00.png b/Textures/Breasts/Breast_Breast02_Nipple00.png new file mode 100644 index 0000000..b3dea3e Binary files /dev/null and b/Textures/Breasts/Breast_Breast02_Nipple00.png differ diff --git a/Textures/Breasts/Breast_Breast02_Nipple01.png b/Textures/Breasts/Breast_Breast02_Nipple01.png new file mode 100644 index 0000000..c0cac09 Binary files /dev/null and b/Textures/Breasts/Breast_Breast02_Nipple01.png differ diff --git a/Textures/Breasts/Breast_Breast02_Nipple02.png b/Textures/Breasts/Breast_Breast02_Nipple02.png new file mode 100644 index 0000000..db7cc6f Binary files /dev/null and b/Textures/Breasts/Breast_Breast02_Nipple02.png differ diff --git a/Textures/Breasts/Breast_Breast02_Nipple03.png b/Textures/Breasts/Breast_Breast02_Nipple03.png new file mode 100644 index 0000000..fd84a73 Binary files /dev/null and b/Textures/Breasts/Breast_Breast02_Nipple03.png differ diff --git a/Textures/Breasts/Breast_Breast03.png b/Textures/Breasts/Breast_Breast03.png new file mode 100644 index 0000000..fafd312 Binary files /dev/null and b/Textures/Breasts/Breast_Breast03.png differ diff --git a/Textures/Breasts/Breast_Breast03_Nipple00.png b/Textures/Breasts/Breast_Breast03_Nipple00.png new file mode 100644 index 0000000..0328271 Binary files /dev/null and b/Textures/Breasts/Breast_Breast03_Nipple00.png differ diff --git a/Textures/Breasts/Breast_Breast03_Nipple01.png b/Textures/Breasts/Breast_Breast03_Nipple01.png new file mode 100644 index 0000000..b3e9763 Binary files /dev/null and b/Textures/Breasts/Breast_Breast03_Nipple01.png differ diff --git a/Textures/Breasts/Breast_Breast03_Nipple02.png b/Textures/Breasts/Breast_Breast03_Nipple02.png new file mode 100644 index 0000000..c87e598 Binary files /dev/null and b/Textures/Breasts/Breast_Breast03_Nipple02.png differ diff --git a/Textures/Breasts/Breast_Breast03_Nipple03.png b/Textures/Breasts/Breast_Breast03_Nipple03.png new file mode 100644 index 0000000..baaaf52 Binary files /dev/null and b/Textures/Breasts/Breast_Breast03_Nipple03.png differ diff --git a/Textures/Breasts/Breast_Breast04.png b/Textures/Breasts/Breast_Breast04.png new file mode 100644 index 0000000..18617c0 Binary files /dev/null and b/Textures/Breasts/Breast_Breast04.png differ diff --git a/Textures/Breasts/Breast_Breast04_Nipple00.png b/Textures/Breasts/Breast_Breast04_Nipple00.png new file mode 100644 index 0000000..92a314e Binary files /dev/null and b/Textures/Breasts/Breast_Breast04_Nipple00.png differ diff --git a/Textures/Breasts/Breast_Breast04_Nipple01.png b/Textures/Breasts/Breast_Breast04_Nipple01.png new file mode 100644 index 0000000..5bedd39 Binary files /dev/null and b/Textures/Breasts/Breast_Breast04_Nipple01.png differ diff --git a/Textures/Breasts/Breast_Breast04_Nipple02.png b/Textures/Breasts/Breast_Breast04_Nipple02.png new file mode 100644 index 0000000..9a0a009 Binary files /dev/null and b/Textures/Breasts/Breast_Breast04_Nipple02.png differ diff --git a/Textures/Breasts/Breast_Breast04_Nipple03.png b/Textures/Breasts/Breast_Breast04_Nipple03.png new file mode 100644 index 0000000..df459fe Binary files /dev/null and b/Textures/Breasts/Breast_Breast04_Nipple03.png differ diff --git a/Textures/Breasts/Breast_Breast05.png b/Textures/Breasts/Breast_Breast05.png new file mode 100644 index 0000000..a47cd91 Binary files /dev/null and b/Textures/Breasts/Breast_Breast05.png differ diff --git a/Textures/Breasts/Breast_Breast05_Nipple00.png b/Textures/Breasts/Breast_Breast05_Nipple00.png new file mode 100644 index 0000000..381bf10 Binary files /dev/null and b/Textures/Breasts/Breast_Breast05_Nipple00.png differ diff --git a/Textures/Breasts/Breast_Breast05_Nipple01.png b/Textures/Breasts/Breast_Breast05_Nipple01.png new file mode 100644 index 0000000..319e916 Binary files /dev/null and b/Textures/Breasts/Breast_Breast05_Nipple01.png differ diff --git a/Textures/Breasts/Breast_Breast05_Nipple02.png b/Textures/Breasts/Breast_Breast05_Nipple02.png new file mode 100644 index 0000000..7adcf60 Binary files /dev/null and b/Textures/Breasts/Breast_Breast05_Nipple02.png differ diff --git a/Textures/Breasts/Breast_Breast05_Nipple03.png b/Textures/Breasts/Breast_Breast05_Nipple03.png new file mode 100644 index 0000000..bc3c0a4 Binary files /dev/null and b/Textures/Breasts/Breast_Breast05_Nipple03.png differ diff --git a/Textures/Breasts/average_nip_preg.png b/Textures/Breasts/average_nip_preg.png new file mode 100644 index 0000000..b27916d Binary files /dev/null and b/Textures/Breasts/average_nip_preg.png differ diff --git a/Textures/Breasts/enormous_nip_preg.png b/Textures/Breasts/enormous_nip_preg.png new file mode 100644 index 0000000..2c2c232 Binary files /dev/null and b/Textures/Breasts/enormous_nip_preg.png differ diff --git a/Textures/Breasts/enoromous_nip.png b/Textures/Breasts/enoromous_nip.png new file mode 100644 index 0000000..b9336b0 Binary files /dev/null and b/Textures/Breasts/enoromous_nip.png differ diff --git a/Textures/Breasts/huge_nip_preg.png b/Textures/Breasts/huge_nip_preg.png new file mode 100644 index 0000000..778cfd2 Binary files /dev/null and b/Textures/Breasts/huge_nip_preg.png differ diff --git a/Textures/Breasts/large_nip_preg.png b/Textures/Breasts/large_nip_preg.png new file mode 100644 index 0000000..de7d9dc Binary files /dev/null and b/Textures/Breasts/large_nip_preg.png differ diff --git a/Textures/Breasts/small_nip_preg.png b/Textures/Breasts/small_nip_preg.png new file mode 100644 index 0000000..2644ea3 Binary files /dev/null and b/Textures/Breasts/small_nip_preg.png differ diff --git a/Textures/Breasts/tiny_nip.png b/Textures/Breasts/tiny_nip.png new file mode 100644 index 0000000..6f51a84 Binary files /dev/null and b/Textures/Breasts/tiny_nip.png differ diff --git a/Textures/Breasts/tiny_nip_preg.png b/Textures/Breasts/tiny_nip_preg.png new file mode 100644 index 0000000..a9d261c Binary files /dev/null and b/Textures/Breasts/tiny_nip_preg.png differ diff --git a/Textures/Fetus/Birds/Fetus_Bird00.png b/Textures/Fetus/Birds/Fetus_Bird00.png new file mode 100644 index 0000000..5a2dcdf Binary files /dev/null and b/Textures/Fetus/Birds/Fetus_Bird00.png differ diff --git a/Textures/Fetus/Birds/Fetus_Bird01.png b/Textures/Fetus/Birds/Fetus_Bird01.png new file mode 100644 index 0000000..7a71843 Binary files /dev/null and b/Textures/Fetus/Birds/Fetus_Bird01.png differ diff --git a/Textures/Fetus/Birds/Fetus_Bird02.png b/Textures/Fetus/Birds/Fetus_Bird02.png new file mode 100644 index 0000000..839e29e Binary files /dev/null and b/Textures/Fetus/Birds/Fetus_Bird02.png differ diff --git a/Textures/Fetus/Birds/Fetus_Bird03.png b/Textures/Fetus/Birds/Fetus_Bird03.png new file mode 100644 index 0000000..c3526db Binary files /dev/null and b/Textures/Fetus/Birds/Fetus_Bird03.png differ diff --git a/Textures/Fetus/Birds/Fetus_Bird04.png b/Textures/Fetus/Birds/Fetus_Bird04.png new file mode 100644 index 0000000..1ff0f11 Binary files /dev/null and b/Textures/Fetus/Birds/Fetus_Bird04.png differ diff --git a/Textures/Fetus/Birds/Fetus_Bird05.png b/Textures/Fetus/Birds/Fetus_Bird05.png new file mode 100644 index 0000000..f5e48dd Binary files /dev/null and b/Textures/Fetus/Birds/Fetus_Bird05.png differ diff --git a/Textures/Fetus/Canines/Fetus_Dog00.png b/Textures/Fetus/Canines/Fetus_Dog00.png new file mode 100644 index 0000000..551a845 Binary files /dev/null and b/Textures/Fetus/Canines/Fetus_Dog00.png differ diff --git a/Textures/Fetus/Canines/Fetus_Dog01.png b/Textures/Fetus/Canines/Fetus_Dog01.png new file mode 100644 index 0000000..669cb54 Binary files /dev/null and b/Textures/Fetus/Canines/Fetus_Dog01.png differ diff --git a/Textures/Fetus/Canines/Fetus_Dog02.png b/Textures/Fetus/Canines/Fetus_Dog02.png new file mode 100644 index 0000000..9274c31 Binary files /dev/null and b/Textures/Fetus/Canines/Fetus_Dog02.png differ diff --git a/Textures/Fetus/Canines/Fetus_Dog03.png b/Textures/Fetus/Canines/Fetus_Dog03.png new file mode 100644 index 0000000..d47d7e4 Binary files /dev/null and b/Textures/Fetus/Canines/Fetus_Dog03.png differ diff --git a/Textures/Fetus/Canines/Fetus_Dog04.png b/Textures/Fetus/Canines/Fetus_Dog04.png new file mode 100644 index 0000000..a195fba Binary files /dev/null and b/Textures/Fetus/Canines/Fetus_Dog04.png differ diff --git a/Textures/Fetus/Canines/Fetus_Dog05.png b/Textures/Fetus/Canines/Fetus_Dog05.png new file mode 100644 index 0000000..545e0f1 Binary files /dev/null and b/Textures/Fetus/Canines/Fetus_Dog05.png differ diff --git a/Textures/Fetus/Fetus_Default00.png b/Textures/Fetus/Fetus_Default00.png index 15821cf..ae4ac82 100644 Binary files a/Textures/Fetus/Fetus_Default00.png and b/Textures/Fetus/Fetus_Default00.png differ diff --git a/Textures/Fetus/Fetus_Default00_Multiplet_2.png b/Textures/Fetus/Fetus_Default00_Multiplet_2.png new file mode 100644 index 0000000..4edb83a Binary files /dev/null and b/Textures/Fetus/Fetus_Default00_Multiplet_2.png differ diff --git a/Textures/Fetus/Fetus_Default01.png b/Textures/Fetus/Fetus_Default01.png index c864dc1..9b16b11 100644 Binary files a/Textures/Fetus/Fetus_Default01.png and b/Textures/Fetus/Fetus_Default01.png differ diff --git a/Textures/Fetus/Fetus_Default01_Multiplet_2.png b/Textures/Fetus/Fetus_Default01_Multiplet_2.png new file mode 100644 index 0000000..a48c4b5 Binary files /dev/null and b/Textures/Fetus/Fetus_Default01_Multiplet_2.png differ diff --git a/Textures/Fetus/Fetus_Default02.png b/Textures/Fetus/Fetus_Default02.png index 14ca2d2..2442b67 100644 Binary files a/Textures/Fetus/Fetus_Default02.png and b/Textures/Fetus/Fetus_Default02.png differ diff --git a/Textures/Fetus/Fetus_Default02_Multiplet_2.png b/Textures/Fetus/Fetus_Default02_Multiplet_2.png new file mode 100644 index 0000000..2184325 Binary files /dev/null and b/Textures/Fetus/Fetus_Default02_Multiplet_2.png differ diff --git a/Textures/Fetus/Fetus_Default03.png b/Textures/Fetus/Fetus_Default03.png index 47a3141..63eb53e 100644 Binary files a/Textures/Fetus/Fetus_Default03.png and b/Textures/Fetus/Fetus_Default03.png differ diff --git a/Textures/Fetus/Fetus_Default03_Multiplet_2.png b/Textures/Fetus/Fetus_Default03_Multiplet_2.png new file mode 100644 index 0000000..2877fc2 Binary files /dev/null and b/Textures/Fetus/Fetus_Default03_Multiplet_2.png differ diff --git a/Textures/Fetus/Fetus_Default04.png b/Textures/Fetus/Fetus_Default04.png index 2b04b93..fe77864 100644 Binary files a/Textures/Fetus/Fetus_Default04.png and b/Textures/Fetus/Fetus_Default04.png differ diff --git a/Textures/Fetus/Fetus_Default04_Multiplet_2.png b/Textures/Fetus/Fetus_Default04_Multiplet_2.png new file mode 100644 index 0000000..88aeb39 Binary files /dev/null and b/Textures/Fetus/Fetus_Default04_Multiplet_2.png differ diff --git a/Textures/Fetus/Fetus_Default05.png b/Textures/Fetus/Fetus_Default05.png index 026d575..d0c2426 100644 Binary files a/Textures/Fetus/Fetus_Default05.png and b/Textures/Fetus/Fetus_Default05.png differ diff --git a/Textures/Fetus/Fetus_Default05_Multiplet_2.png b/Textures/Fetus/Fetus_Default05_Multiplet_2.png new file mode 100644 index 0000000..88aeb39 Binary files /dev/null and b/Textures/Fetus/Fetus_Default05_Multiplet_2.png differ diff --git a/Textures/Fetus/Fetus_Early00_Multiplet_2.png b/Textures/Fetus/Fetus_Early00_Multiplet_2.png new file mode 100644 index 0000000..f08b902 Binary files /dev/null and b/Textures/Fetus/Fetus_Early00_Multiplet_2.png differ diff --git a/Textures/Fetus/Fetus.zip b/Textures/Fetus/Fetus_Old.zip similarity index 100% rename from Textures/Fetus/Fetus.zip rename to Textures/Fetus/Fetus_Old.zip diff --git a/Textures/Fetus/Greenskins/Fetus_Orc00.png b/Textures/Fetus/Greenskins/Fetus_Orc00.png new file mode 100644 index 0000000..3d93c32 Binary files /dev/null and b/Textures/Fetus/Greenskins/Fetus_Orc00.png differ diff --git a/Textures/Fetus/Greenskins/Fetus_Orc01.png b/Textures/Fetus/Greenskins/Fetus_Orc01.png new file mode 100644 index 0000000..432d3d5 Binary files /dev/null and b/Textures/Fetus/Greenskins/Fetus_Orc01.png differ diff --git a/Textures/Fetus/Greenskins/Fetus_Orc02.png b/Textures/Fetus/Greenskins/Fetus_Orc02.png new file mode 100644 index 0000000..4d67604 Binary files /dev/null and b/Textures/Fetus/Greenskins/Fetus_Orc02.png differ diff --git a/Textures/Fetus/Greenskins/Fetus_Orc03.png b/Textures/Fetus/Greenskins/Fetus_Orc03.png new file mode 100644 index 0000000..8f5fa15 Binary files /dev/null and b/Textures/Fetus/Greenskins/Fetus_Orc03.png differ diff --git a/Textures/Fetus/Greenskins/Fetus_Orc04.png b/Textures/Fetus/Greenskins/Fetus_Orc04.png new file mode 100644 index 0000000..c7e4bf9 Binary files /dev/null and b/Textures/Fetus/Greenskins/Fetus_Orc04.png differ diff --git a/Textures/Fetus/Greenskins/Fetus_Orc05.png b/Textures/Fetus/Greenskins/Fetus_Orc05.png new file mode 100644 index 0000000..d55088d Binary files /dev/null and b/Textures/Fetus/Greenskins/Fetus_Orc05.png differ diff --git a/Textures/Fetus/Greenskins/unused-orc_0.png b/Textures/Fetus/Greenskins/unused-orc_0.png new file mode 100644 index 0000000..fcc3f88 Binary files /dev/null and b/Textures/Fetus/Greenskins/unused-orc_0.png differ diff --git a/Textures/Fetus/Insects/Fetus_Insect00.png b/Textures/Fetus/Insects/Fetus_Insect00.png new file mode 100644 index 0000000..db2205c Binary files /dev/null and b/Textures/Fetus/Insects/Fetus_Insect00.png differ diff --git a/Textures/Fetus/Insects/Fetus_Insect01.png b/Textures/Fetus/Insects/Fetus_Insect01.png new file mode 100644 index 0000000..6ffb69f Binary files /dev/null and b/Textures/Fetus/Insects/Fetus_Insect01.png differ diff --git a/Textures/Fetus/Insects/Fetus_Insect02.png b/Textures/Fetus/Insects/Fetus_Insect02.png new file mode 100644 index 0000000..cec86fd Binary files /dev/null and b/Textures/Fetus/Insects/Fetus_Insect02.png differ diff --git a/Textures/Fetus/Insects/Fetus_Insect03.png b/Textures/Fetus/Insects/Fetus_Insect03.png new file mode 100644 index 0000000..25a1fef Binary files /dev/null and b/Textures/Fetus/Insects/Fetus_Insect03.png differ diff --git a/Textures/Fetus/Insects/Fetus_Insect04.png b/Textures/Fetus/Insects/Fetus_Insect04.png new file mode 100644 index 0000000..f0cb490 Binary files /dev/null and b/Textures/Fetus/Insects/Fetus_Insect04.png differ diff --git a/Textures/Fetus/Insects/Fetus_Insect05.png b/Textures/Fetus/Insects/Fetus_Insect05.png new file mode 100644 index 0000000..f0cb490 Binary files /dev/null and b/Textures/Fetus/Insects/Fetus_Insect05.png differ diff --git a/Textures/Fetus/Insects/Insect_Early00.png b/Textures/Fetus/Insects/Insect_Early00.png new file mode 100644 index 0000000..2960740 Binary files /dev/null and b/Textures/Fetus/Insects/Insect_Early00.png differ diff --git a/Textures/Fetus/Livestocks/Fetus_Pig00.png b/Textures/Fetus/Livestocks/Fetus_Pig00.png new file mode 100644 index 0000000..796d902 Binary files /dev/null and b/Textures/Fetus/Livestocks/Fetus_Pig00.png differ diff --git a/Textures/Fetus/Livestocks/Fetus_Pig01.png b/Textures/Fetus/Livestocks/Fetus_Pig01.png new file mode 100644 index 0000000..c8de22d Binary files /dev/null and b/Textures/Fetus/Livestocks/Fetus_Pig01.png differ diff --git a/Textures/Fetus/Livestocks/Fetus_Pig02.png b/Textures/Fetus/Livestocks/Fetus_Pig02.png new file mode 100644 index 0000000..2e4a01a Binary files /dev/null and b/Textures/Fetus/Livestocks/Fetus_Pig02.png differ diff --git a/Textures/Fetus/Livestocks/Fetus_Pig03.png b/Textures/Fetus/Livestocks/Fetus_Pig03.png new file mode 100644 index 0000000..cf7563d Binary files /dev/null and b/Textures/Fetus/Livestocks/Fetus_Pig03.png differ diff --git a/Textures/Fetus/Livestocks/Fetus_Pig04.png b/Textures/Fetus/Livestocks/Fetus_Pig04.png new file mode 100644 index 0000000..f48b18c Binary files /dev/null and b/Textures/Fetus/Livestocks/Fetus_Pig04.png differ diff --git a/Textures/Fetus/Livestocks/Fetus_Pig05.png b/Textures/Fetus/Livestocks/Fetus_Pig05.png new file mode 100644 index 0000000..54f7c0d Binary files /dev/null and b/Textures/Fetus/Livestocks/Fetus_Pig05.png differ diff --git a/Textures/Genitals/Anal00.png b/Textures/Genitals/Anal00.png index 4f996e4..966cbf0 100644 Binary files a/Textures/Genitals/Anal00.png and b/Textures/Genitals/Anal00.png differ diff --git a/Textures/Genitals/Anal01.png b/Textures/Genitals/Anal01.png index 4cc4bb8..d6376b8 100644 Binary files a/Textures/Genitals/Anal01.png and b/Textures/Genitals/Anal01.png differ diff --git a/Textures/Genitals/Anal02.png b/Textures/Genitals/Anal02.png index b9d8281..e258cb7 100644 Binary files a/Textures/Genitals/Anal02.png and b/Textures/Genitals/Anal02.png differ diff --git a/Textures/Genitals/Anal03.png b/Textures/Genitals/Anal03.png index c8b1a2a..6760051 100644 Binary files a/Textures/Genitals/Anal03.png and b/Textures/Genitals/Anal03.png differ diff --git a/Textures/Genitals/Anal04.png b/Textures/Genitals/Anal04.png index bffab9c..adb5acc 100644 Binary files a/Textures/Genitals/Anal04.png and b/Textures/Genitals/Anal04.png differ diff --git a/Textures/Genitals/Anal05.png b/Textures/Genitals/Anal05.png index 9703a2c..439966a 100644 Binary files a/Textures/Genitals/Anal05.png and b/Textures/Genitals/Anal05.png differ diff --git a/Textures/Genitals/BionicAnal00.png b/Textures/Genitals/BionicAnal00.png index a2d62e6..17d2aba 100644 Binary files a/Textures/Genitals/BionicAnal00.png and b/Textures/Genitals/BionicAnal00.png differ diff --git a/Textures/Genitals/BionicAnal01.png b/Textures/Genitals/BionicAnal01.png index dcf807c..1decaab 100644 Binary files a/Textures/Genitals/BionicAnal01.png and b/Textures/Genitals/BionicAnal01.png differ diff --git a/Textures/Genitals/BionicAnal02.png b/Textures/Genitals/BionicAnal02.png index b3e2bb1..b8c2398 100644 Binary files a/Textures/Genitals/BionicAnal02.png and b/Textures/Genitals/BionicAnal02.png differ diff --git a/Textures/Genitals/BionicAnal03.png b/Textures/Genitals/BionicAnal03.png index b6f4197..b947669 100644 Binary files a/Textures/Genitals/BionicAnal03.png and b/Textures/Genitals/BionicAnal03.png differ diff --git a/Textures/Genitals/BionicAnal04.png b/Textures/Genitals/BionicAnal04.png index fef6d85..973263f 100644 Binary files a/Textures/Genitals/BionicAnal04.png and b/Textures/Genitals/BionicAnal04.png differ diff --git a/Textures/Genitals/BionicAnal05.png b/Textures/Genitals/BionicAnal05.png index d6b5c29..bd33d48 100644 Binary files a/Textures/Genitals/BionicAnal05.png and b/Textures/Genitals/BionicAnal05.png differ diff --git a/Textures/Genitals/BionicVagina00.png b/Textures/Genitals/BionicVagina00.png index 2287123..e433424 100644 Binary files a/Textures/Genitals/BionicVagina00.png and b/Textures/Genitals/BionicVagina00.png differ diff --git a/Textures/Genitals/BionicVagina01.png b/Textures/Genitals/BionicVagina01.png index e5c76d0..2cb7874 100644 Binary files a/Textures/Genitals/BionicVagina01.png and b/Textures/Genitals/BionicVagina01.png differ diff --git a/Textures/Genitals/BionicVagina02.png b/Textures/Genitals/BionicVagina02.png index 7b6f3a3..6ada1d1 100644 Binary files a/Textures/Genitals/BionicVagina02.png and b/Textures/Genitals/BionicVagina02.png differ diff --git a/Textures/Genitals/BionicVagina03.png b/Textures/Genitals/BionicVagina03.png index bc63432..3d4ee65 100644 Binary files a/Textures/Genitals/BionicVagina03.png and b/Textures/Genitals/BionicVagina03.png differ diff --git a/Textures/Genitals/BionicVagina04.png b/Textures/Genitals/BionicVagina04.png index 0034001..ece1957 100644 Binary files a/Textures/Genitals/BionicVagina04.png and b/Textures/Genitals/BionicVagina04.png differ diff --git a/Textures/Genitals/BionicVagina05.png b/Textures/Genitals/BionicVagina05.png index 42c94d9..7c53581 100644 Binary files a/Textures/Genitals/BionicVagina05.png and b/Textures/Genitals/BionicVagina05.png differ diff --git a/Textures/Genitals/BionicVagina06.png b/Textures/Genitals/BionicVagina06.png index e5ef588..84ea205 100644 Binary files a/Textures/Genitals/BionicVagina06.png and b/Textures/Genitals/BionicVagina06.png differ diff --git a/Textures/Genitals/BionicVagina07.png b/Textures/Genitals/BionicVagina07.png index 8198179..c5d0208 100644 Binary files a/Textures/Genitals/BionicVagina07.png and b/Textures/Genitals/BionicVagina07.png differ diff --git a/Textures/Genitals/BionicVagina08.png b/Textures/Genitals/BionicVagina08.png index a4b81aa..0c9572d 100644 Binary files a/Textures/Genitals/BionicVagina08.png and b/Textures/Genitals/BionicVagina08.png differ diff --git a/Textures/Genitals/BionicVagina09.png b/Textures/Genitals/BionicVagina09.png index f0aac83..52dfd73 100644 Binary files a/Textures/Genitals/BionicVagina09.png and b/Textures/Genitals/BionicVagina09.png differ diff --git a/Textures/Genitals/BionicVagina10.png b/Textures/Genitals/BionicVagina10.png index 9edeba4..23f560c 100644 Binary files a/Textures/Genitals/BionicVagina10.png and b/Textures/Genitals/BionicVagina10.png differ diff --git a/Textures/Genitals/BionicVagina11.png b/Textures/Genitals/BionicVagina11.png index 8577e1b..8ee5a5e 100644 Binary files a/Textures/Genitals/BionicVagina11.png and b/Textures/Genitals/BionicVagina11.png differ diff --git a/Textures/Genitals/Genitals.zip b/Textures/Genitals/Genitals_Old.zip similarity index 100% rename from Textures/Genitals/Genitals.zip rename to Textures/Genitals/Genitals_Old.zip diff --git a/Textures/Genitals/Vagina00.png b/Textures/Genitals/Vagina00.png index ef93c1a..3646007 100644 Binary files a/Textures/Genitals/Vagina00.png and b/Textures/Genitals/Vagina00.png differ diff --git a/Textures/Genitals/Vagina01.png b/Textures/Genitals/Vagina01.png index b245289..4dd0549 100644 Binary files a/Textures/Genitals/Vagina01.png and b/Textures/Genitals/Vagina01.png differ diff --git a/Textures/Genitals/Vagina02.png b/Textures/Genitals/Vagina02.png index 5bdc25f..549422a 100644 Binary files a/Textures/Genitals/Vagina02.png and b/Textures/Genitals/Vagina02.png differ diff --git a/Textures/Genitals/Vagina03.png b/Textures/Genitals/Vagina03.png index 6e36f13..7876f2e 100644 Binary files a/Textures/Genitals/Vagina03.png and b/Textures/Genitals/Vagina03.png differ diff --git a/Textures/Genitals/Vagina04.png b/Textures/Genitals/Vagina04.png index 410d448..e1f6f3b 100644 Binary files a/Textures/Genitals/Vagina04.png and b/Textures/Genitals/Vagina04.png differ diff --git a/Textures/Genitals/Vagina05.png b/Textures/Genitals/Vagina05.png index ffa936b..a86b146 100644 Binary files a/Textures/Genitals/Vagina05.png and b/Textures/Genitals/Vagina05.png differ diff --git a/Textures/Genitals/Vagina06.png b/Textures/Genitals/Vagina06.png index 43a7f0f..29f103a 100644 Binary files a/Textures/Genitals/Vagina06.png and b/Textures/Genitals/Vagina06.png differ diff --git a/Textures/Genitals/Vagina07.png b/Textures/Genitals/Vagina07.png index 8322f98..d020b9f 100644 Binary files a/Textures/Genitals/Vagina07.png and b/Textures/Genitals/Vagina07.png differ diff --git a/Textures/Genitals/Vagina08.png b/Textures/Genitals/Vagina08.png index aec384c..41a1e63 100644 Binary files a/Textures/Genitals/Vagina08.png and b/Textures/Genitals/Vagina08.png differ diff --git a/Textures/Genitals/Vagina09.png b/Textures/Genitals/Vagina09.png index aec384c..96bc301 100644 Binary files a/Textures/Genitals/Vagina09.png and b/Textures/Genitals/Vagina09.png differ diff --git a/Textures/Genitals/Vagina10.png b/Textures/Genitals/Vagina10.png index bf78803..fd5ab20 100644 Binary files a/Textures/Genitals/Vagina10.png and b/Textures/Genitals/Vagina10.png differ diff --git a/Textures/Genitals/Vagina11.png b/Textures/Genitals/Vagina11.png index 4f75054..900e718 100644 Binary files a/Textures/Genitals/Vagina11.png and b/Textures/Genitals/Vagina11.png differ diff --git a/Textures/Milk/Milkbottle_Large.png b/Textures/Milk/Milkbottle_Large.png new file mode 100644 index 0000000..27fde03 Binary files /dev/null and b/Textures/Milk/Milkbottle_Large.png differ diff --git a/Textures/Milk/Milkbottle_Medium.png b/Textures/Milk/Milkbottle_Medium.png new file mode 100644 index 0000000..80f07fb Binary files /dev/null and b/Textures/Milk/Milkbottle_Medium.png differ diff --git a/Textures/Milk/Milkbottle_Small.png b/Textures/Milk/Milkbottle_Small.png new file mode 100644 index 0000000..64f92d9 Binary files /dev/null and b/Textures/Milk/Milkbottle_Small.png differ diff --git a/Textures/Things/Item/Milkbottle/Milkbottle_a.png b/Textures/Things/Item/Milkbottle/Milkbottle_a.png new file mode 100644 index 0000000..c9ac05f Binary files /dev/null and b/Textures/Things/Item/Milkbottle/Milkbottle_a.png differ diff --git a/Textures/Things/Item/Milkbottle/Milkbottle_b.png b/Textures/Things/Item/Milkbottle/Milkbottle_b.png new file mode 100644 index 0000000..9fced73 Binary files /dev/null and b/Textures/Things/Item/Milkbottle/Milkbottle_b.png differ diff --git a/Textures/Things/Item/Milkbottle/Milkbottle_c.png b/Textures/Things/Item/Milkbottle/Milkbottle_c.png new file mode 100644 index 0000000..88a8899 Binary files /dev/null and b/Textures/Things/Item/Milkbottle/Milkbottle_c.png differ diff --git a/Textures/Womb/Womb_Egged.png b/Textures/Womb/Womb_Egged.png new file mode 100644 index 0000000..1c6ac74 Binary files /dev/null and b/Textures/Womb/Womb_Egged.png differ diff --git a/changelogs.txt b/changelogs.txt index 5f5942d..2618543 100644 --- a/changelogs.txt +++ b/changelogs.txt @@ -1,3 +1,17 @@ +Version 1.0.3.0 + - added various fetus images + - added twin fetus image + - male insects can impregnate female + - now insects egg display on womb icon + - added breast to status window + - added milk status bar(milkable colonists compatible) + - added self lactating button + - self lactating enlarges nipple + - initial nipple size is determined by breast size + - added status bars + - you can check when the pawn get breeder/incubator quirk with this + - fixed problems when cycle acceleration is too high + Version 1.0.2.0 - support for RJW Race Support - fixed erros with pawns that the litter size curve is not defined diff --git a/source/RJW_Menstruation/MilkModule/JobDriver_MilkSelf.cs b/source/RJW_Menstruation/MilkModule/JobDriver_MilkSelf.cs new file mode 100644 index 0000000..f06d1f9 --- /dev/null +++ b/source/RJW_Menstruation/MilkModule/JobDriver_MilkSelf.cs @@ -0,0 +1,76 @@ +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_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.001f * Configurations.NipplePermanentTransitionVariance)); + breastcomp.AdjustNippleSize(Rand.Range(0.0f,0.001f * 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/source/RJW_Menstruation/MilkModule/MilkModule.csproj b/source/RJW_Menstruation/MilkModule/MilkModule.csproj new file mode 100644 index 0000000..8007df6 --- /dev/null +++ b/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 + ..\..\..\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/source/RJW_Menstruation/MilkModule/Properties/AssemblyInfo.cs b/source/RJW_Menstruation/MilkModule/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..019d075 --- /dev/null +++ b/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/source/RJW_Menstruation/RJW_Menstruation.sln b/source/RJW_Menstruation/RJW_Menstruation.sln index aa715b2..92a7a11 100644 --- a/source/RJW_Menstruation/RJW_Menstruation.sln +++ b/source/RJW_Menstruation/RJW_Menstruation.sln @@ -5,6 +5,8 @@ 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 @@ -15,6 +17,10 @@ Global {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 diff --git a/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs b/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs index 454721c..5b20c70 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs @@ -19,7 +19,10 @@ namespace RJW_Menstruation 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.1f; public static float ImplantationChance = ImplantationChanceDefault; public static int ImplantationChanceAdjust = ImplantationChanceAdjustDefault; @@ -50,6 +53,19 @@ namespace RJW_Menstruation public static bool UseHybridExtention = true; public static bool MotherFirst = 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 bool HARActivated = false; public static bool LLActivated = false; @@ -127,6 +143,10 @@ namespace RJW_Menstruation 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); base.ExposeData(); } @@ -178,7 +198,7 @@ namespace RJW_Menstruation 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 + 300f); + Rect mainRect = new Rect(0f, 0f, inRect.width - 30f, inRect.height + 480f); Listing_Standard listmain = new Listing_Standard(); listmain.maxOneColumn = true; listmain.BeginScrollView(outRect, ref scroll, ref mainRect); @@ -190,7 +210,7 @@ namespace RJW_Menstruation //listmain.CheckboxLabeled(Translations.Option1_Label, ref Configurations.EnableWombIcon, Translations.Option1_Desc); if (Configurations.EnableWombIcon || Configurations.EnableButtonInHT) { - Listing_Standard wombsection = listmain.BeginSection_NewTemp(186); + Listing_Standard wombsection = listmain.BeginSection_NewTemp(376); wombsection.CheckboxLabeled(Translations.Option9_Label, ref Configurations.DrawWombStatus, Translations.Option9_Desc); if (Configurations.DrawWombStatus) { @@ -246,6 +266,25 @@ namespace RJW_Menstruation 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); } @@ -326,7 +365,12 @@ namespace RJW_Menstruation 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/source/RJW_Menstruation/RJW_Menstruation/Dialog_WombStatus.cs b/source/RJW_Menstruation/RJW_Menstruation/Dialog_WombStatus.cs index eb96828..1d232a9 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/Dialog_WombStatus.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/Dialog_WombStatus.cs @@ -1,4 +1,5 @@ -using RimWorld; +using System; +using RimWorld; using rjw; using System.Linq; using UnityEngine; @@ -19,7 +20,10 @@ namespace RJW_Menstruation 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 Texture2D womb; private Texture2D cum; private Texture2D vagina; @@ -39,10 +43,10 @@ namespace RJW_Menstruation { get { - float width = 300f + 2 * windowMargin; + float width = 450f + 2 * windowMargin; float height = 820f; if (!Configurations.DrawWombStatus) height -= wombRectHeight; - if (!Configurations.DrawVaginaStatus) height -= genitalRectHeight; + if (!Configurations.DrawVaginaStatus) width -= 150f; return new Vector2(width, height); } } @@ -82,7 +86,6 @@ namespace RJW_Menstruation public override void DoWindowContents(Rect inRect) { - bool flag = false; soundClose = SoundDefOf.InfoCard_Close; //closeOnClickedOutside = true; absorbInputAroundWindow = false; @@ -93,7 +96,6 @@ namespace RJW_Menstruation if (Event.current.type == EventType.KeyDown && (Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.Escape)) { - flag = true; Event.current.Use(); } @@ -118,6 +120,8 @@ namespace RJW_Menstruation 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); @@ -228,19 +232,28 @@ namespace RJW_Menstruation //Widgets.Label(wombInfoRect,Translations.Dialog_WombInfo01 + ": " + comp.GetCurStageLabel); + Rect cumlistTitle, cumlistRect; if (Configurations.DrawVaginaStatus && !pawn.IsAnimal()) { - Rect genitalRect = new Rect(24, pawnRectHeight + 2 * fontheight, genitalRectWidth, genitalRectHeight + fontheight * 2); + 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); + - Rect cumlistTitle = new Rect(pawnRectWidth, 0, wombRectWidth - pawnRectWidth, fontheight); GUI.Label(cumlistTitle, Translations.Dialog_WombInfo04); - - - Rect cumlistRect = new Rect(pawnRectWidth, fontheight, wombRectWidth - pawnRectWidth, mainRect.yMax - wombrecth - fontheight); DrawCumlist(cumlistRect); @@ -289,7 +302,7 @@ namespace RJW_Menstruation private void DrawVagina(Rect rect) { Rect genitalIconRect = new Rect(rect.x, rect.y + fontheight, genitalRectWidth, genitalRectHeight); - Rect genitalVaginaLabelRect = new Rect(rect.x, rect.y, genitalRectWidth, fontheight); + 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(); @@ -305,7 +318,70 @@ namespace RJW_Menstruation 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); + lineRect.y += height; + + statvalue = pawn.GetStatValue(xxx.vulnerability_stat); + FillableBarLabeled(lineRect, " " + xxx.vulnerability_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue/2, TextureCache.khorneTexture,Texture2D.blackTexture); + lineRect.y += height; + + statvalue = pawn.GetStatValue(xxx.sex_stat); + FillableBarLabeled(lineRect, " " + xxx.sex_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue / 2, TextureCache.tzeentchTexture, Texture2D.blackTexture); + lineRect.y += height; + + statvalue = pawn.records.GetValue(xxx.CountOfBirthHuman); + FillableBarLabeled(lineRect, " " + xxx.CountOfBirthHuman.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 10, TextureCache.humanTexture, Texture2D.blackTexture); + lineRect.y += height; + + statvalue = pawn.records.GetValue(xxx.CountOfBirthAnimal); + FillableBarLabeled(lineRect, " " + xxx.CountOfBirthAnimal.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 20, TextureCache.animalTexture, Texture2D.blackTexture); + lineRect.y += height; + + statvalue = pawn.records.GetValue(xxx.CountOfBirthEgg); + FillableBarLabeled(lineRect, " " + xxx.CountOfBirthEgg.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 100, TextureCache.nurgleTexture, Texture2D.blackTexture); + lineRect.y += height; + 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); + lineRect.y += height; + } + + private void FillableBarLabeled(Rect rect, string label, float fillPercent, Texture2D filltexture, Texture2D bgtexture) + { + Widgets.FillableBar(rect, Math.Min(fillPercent,1.0f), filltexture, bgtexture, true); + GUI.Label(rect, label, fontstyleleft); + Widgets.DrawHighlightIfMouseover(rect); } diff --git a/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs b/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs new file mode 100644 index 0000000..e7653dd --- /dev/null +++ b/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs @@ -0,0 +1,254 @@ +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 variation = 0.2f; + public const int tickinterval = 1250; + + 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; + + 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); + + } + + public override void CompPostTick(ref float severityAdjustment) { } + + 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(); + 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); + } + + 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(variation)); + areolaSizePermanent = Math.Min(MaxAreola, (areolaSizePermanent + Configurations.NipplePermanentTransitionVariance.VariationRange(variation))/10); + nippleSizePermanent = Math.Min(MaxNipple, (nippleSizePermanent + Configurations.NipplePermanentTransitionVariance.VariationRange(variation))/20); + alpha = Math.Min(MaxAlpha, alpha + Configurations.NippleTransitionVariance.VariationRange(variation)); + areolaSize = Math.Min(MaxAreola, (areolaSize + Configurations.NippleTransitionVariance.VariationRange(variation))/10); + nippleSize = Math.Min(MaxNipple, (nippleSize + Configurations.NippleTransitionVariance.VariationRange(variation))/20); + } + + public void BirthTransition() + { + alpha = alphaPermanent; + areolaSize = areolaSizePermanent; + nippleSize = nippleSizePermanent; + } + + + 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 UpdateColor() + { + cachedcolor = Colors.CMYKLerp(parent.pawn.story.SkinColor, 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/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs b/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs index ff1fe4b..cbaa0cd 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs @@ -41,6 +41,7 @@ namespace RJW_Menstruation public SeasonalBreed breedingSeason = SeasonalBreed.Always; public int estrusDaysBeforeOvulation = 3; + public CompProperties_Menstruation() { @@ -109,6 +110,7 @@ namespace RJW_Menstruation protected string customvagtex = null; protected bool estrusflag = false; protected int opcache = -1; + protected HediffComp_Breast breastcache = null; public int ovarypowerthreshold { @@ -274,7 +276,6 @@ namespace RJW_Menstruation } } - public string wombTex { get @@ -287,7 +288,6 @@ namespace RJW_Menstruation customwombtex = value; } } - public string vagTex { get @@ -300,7 +300,6 @@ namespace RJW_Menstruation customvagtex = value; } } - public string GetFertilizingInfo { get @@ -327,7 +326,6 @@ namespace RJW_Menstruation return res; } } - public bool IsEggFertilizing { get @@ -344,7 +342,6 @@ namespace RJW_Menstruation else return false; } } - /// /// returns fertstage. if not fertilized returns -1 /// @@ -390,7 +387,6 @@ namespace RJW_Menstruation else return eggs.Count; } } - public Color BloodColor { get @@ -407,6 +403,18 @@ namespace RJW_Menstruation } } + public HediffComp_Breast Breast + { + get + { + if (breastcache == null) + { + breastcache = parent.pawn.GetBreastComp(); + } + return breastcache; + } + } + public override void CompExposeData() { @@ -1278,9 +1286,16 @@ namespace RJW_Menstruation { if (!eggs.NullOrEmpty()) { - EggDecay(); FertilizationCheck(); - if (Implant()) GoNextStage(Stage.Pregnant); + EggDecay(); + if (Implant()) + { + if (Breast != null) + { + Breast.PregnancyTransition(); + } + GoNextStage(Stage.Pregnant); + } else { curStageHrs += Configurations.CycleAcceleration; @@ -1332,12 +1347,19 @@ namespace RJW_Menstruation { if (!eggs.NullOrEmpty()) { - EggDecay(); FertilizationCheck(); + EggDecay(); Implant(); } if (parent.pawn.IsPregnant()) StayCurrentStageConst(Stage.Pregnant); - else GoNextStage(Stage.Recover); + else + { + if (Breast != null) + { + Breast.BirthTransition(); + } + GoNextStage(Stage.Recover); + } } protected virtual void YoungAction() @@ -1445,8 +1467,8 @@ namespace RJW_Menstruation { if (!eggs.NullOrEmpty()) { - EggDecay(); FertilizationCheck(); + EggDecay(); if (Implant()) GoNextStage(Stage.Pregnant); else { diff --git a/source/RJW_Menstruation/RJW_Menstruation/JobDrivers.cs b/source/RJW_Menstruation/RJW_Menstruation/JobDrivers.cs index 4af7051..96f4671 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/JobDrivers.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/JobDrivers.cs @@ -1,4 +1,6 @@ using System.Collections.Generic; +using RimWorld; +using Verse; using Verse.AI; namespace RJW_Menstruation @@ -33,7 +35,11 @@ namespace RJW_Menstruation } }; //yield return excreting; - + yield break; } } + + + + } diff --git a/source/RJW_Menstruation/RJW_Menstruation/Patch/GetGizmos.cs b/source/RJW_Menstruation/RJW_Menstruation/Patch/GetGizmos.cs index a519729..d0a5f77 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/Patch/GetGizmos.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/Patch/GetGizmos.cs @@ -57,7 +57,7 @@ namespace RJW_Menstruation if (Utility.ShowFetusImage((Hediff_BasePregnancy)hediff)) { icon = Utility.GetPregnancyIcon(comp, hediff); - if (hediff is Hediff_BasePregnancy && Utility.ShowFetusImage((Hediff_BasePregnancy)hediff)) + if (hediff is Hediff_BasePregnancy) { Hediff_BasePregnancy h = (Hediff_BasePregnancy)hediff; if (h.GestationProgress < 0.2f) icon_overay = comp.GetCumIcon(); @@ -73,8 +73,17 @@ namespace RJW_Menstruation } else { - icon = comp.GetWombIcon(); - icon_overay = comp.GetCumIcon(); + 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"; @@ -95,6 +104,7 @@ namespace RJW_Menstruation Dialog_WombStatus.ToggleWindow(pawn, comp); } }; + return gizmo; } } diff --git a/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs b/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs index 0d9cb19..5a6ad84 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs @@ -21,6 +21,14 @@ namespace RJW_Menstruation HugsLibController.Instance.TickDelayScheduler.TryUnscheduleCallback(comp.actionref); comp.Initialize(); } + HediffComp_Breast bcomp = __instance.GetBreastComp(); + if (bcomp != null) + { + HugsLibController.Instance.TickDelayScheduler.TryUnscheduleCallback(bcomp.action); + bcomp.Initialize(); + } + + } } diff --git a/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs b/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs index 58a5bb4..c3bed0a 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs @@ -14,38 +14,71 @@ namespace RJW_Menstruation if (sextype == xxx.rjwSextype.Vaginal) { var pawnpartBPR = Genital_Helper.get_genitalsBPR(pawn); - var pawnparts = Genital_Helper.get_PartsHediffList(pawn, pawnpartBPR); + var maleparts = Genital_Helper.get_PartsHediffList(pawn, pawnpartBPR); var partnerpartBPR = Genital_Helper.get_genitalsBPR(partner); - var partnerparts = Genital_Helper.get_PartsHediffList(partner, partnerpartBPR); + var femaleparts = Genital_Helper.get_PartsHediffList(partner, partnerpartBPR); - if (Genital_Helper.has_vagina(partner, partnerparts)) + Pawn female = null, male = null; + + if (Genital_Helper.has_vagina(partner, femaleparts)) { - 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); - } + female = partner; + male = pawn; } - else if (Genital_Helper.has_vagina(pawn, pawnparts)) + else if (Genital_Helper.has_vagina(pawn, maleparts)) { - 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); - } + 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 = Utility.GetMenstruationComp(female); + 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(), 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; diff --git a/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj b/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj index ab4ccd1..743f919 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj +++ b/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj @@ -61,6 +61,7 @@ + @@ -71,6 +72,7 @@ + diff --git a/source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs b/source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs new file mode 100644 index 0000000..db4ebfc --- /dev/null +++ b/source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs @@ -0,0 +1,96 @@ +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 +{ + 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; + } + } + + + + + 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; + + + + + } +} diff --git a/source/RJW_Menstruation/RJW_Menstruation/Translations.cs b/source/RJW_Menstruation/RJW_Menstruation/Translations.cs index 47d1249..67b68aa 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/Translations.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/Translations.cs @@ -18,6 +18,7 @@ namespace RJW_Menstruation 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(); @@ -85,6 +86,16 @@ namespace RJW_Menstruation 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_Desc = "Option28_Desc".Translate(); public static readonly string FloatMenu_CleanSelf = "FloatMenu_CleanSelf".Translate(); diff --git a/source/RJW_Menstruation/RJW_Menstruation/Utility.cs b/source/RJW_Menstruation/RJW_Menstruation/Utility.cs index e47f545..aa16df9 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/Utility.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/Utility.cs @@ -2,14 +2,22 @@ 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) @@ -41,8 +49,7 @@ namespace RJW_Menstruation public static class Utility { - - + public static System.Random random = new System.Random(Environment.TickCount); public static float GetCumVolume(this Pawn pawn) { @@ -65,6 +72,7 @@ namespace RJW_Menstruation return res; } + 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")); @@ -90,6 +98,37 @@ namespace RJW_Menstruation return null; } + 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")); @@ -156,6 +195,8 @@ namespace RJW_Menstruation public static Texture2D GetPregnancyIcon(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); @@ -163,9 +204,14 @@ namespace RJW_Menstruation 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) icon += "Fetus/Fetus_Early00"; + 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"; @@ -174,7 +220,22 @@ namespace RJW_Menstruation else icon += fetustex + "05"; } else icon = "Fetus/Slime_Abomi02"; - return ContentFinder.Get((icon), true); + + 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) @@ -206,6 +267,7 @@ namespace RJW_Menstruation 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"; @@ -264,10 +326,130 @@ namespace RJW_Menstruation } } + 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" + GetNippleIndex(comp.AreolaSize); + areolaicon = "Womb/Empty"; + + + 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, 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 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) + { + 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, JobDefOf.Milk, m.Fullness); + } + else + { + 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,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) SoundDefOf.ClickReject.PlayOneShotOnCamera(); + else + { + SoundDefOf.Click.PlayOneShotOnCamera(); + pawn.jobs.TryTakeOrderedJob_NewTemp(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 + ")"; + return hediff.LabelBase.CapitalizeFirst() + "\n(" + hediff.LabelInBrackets + ")" + "\n" + xxx.CountOfSex.LabelCap.CapitalizeFirst() + ": " + pawn.records.GetAsInt(xxx.CountOfSex); } public static string GetAnusLabel(this Pawn pawn) { @@ -275,6 +457,13 @@ namespace RJW_Menstruation 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) { @@ -358,7 +547,23 @@ namespace RJW_Menstruation } } - + 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/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs b/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs index b13ea37..c53ddc7 100644 --- a/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs +++ b/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs @@ -37,6 +37,15 @@ namespace RJW_Menstruation public static readonly CompProperties_Menstruation VaginaCompProperties = (CompProperties_Menstruation)Vagina.comps.FirstOrDefault(x => x is CompProperties_Menstruation); public static readonly KeyBindingDef OpenStatusWindowKey = DefDatabase.GetNamed("OpenStatusWindow"); + + // 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 = DefDatabase.GetNamed("LactateSelf"); + + // Defs from Licentia Labs public static readonly HediffDef Cumflation = DefDatabase.GetNamedSilentFail("Cumflation"); public static readonly ThoughtDef GotOverCumflated = DefDatabase.GetNamedSilentFail("GotOverCumflated");