diff --git a/1.4/Assemblies/RJW_Menstruation.dll b/1.4/Assemblies/RJW_Menstruation.dll index 2d0b679..8897ef0 100644 Binary files a/1.4/Assemblies/RJW_Menstruation.dll and b/1.4/Assemblies/RJW_Menstruation.dll differ diff --git a/1.4/Defs/GeneDefs/GeneDefs_Menstruation.xml b/1.4/Defs/GeneDefs/GeneDefs_Menstruation.xml index 9f20c9c..0b788e7 100644 --- a/1.4/Defs/GeneDefs/GeneDefs_Menstruation.xml +++ b/1.4/Defs/GeneDefs/GeneDefs_Menstruation.xml @@ -9,7 +9,8 @@ Menstruation - + UI/Genes/Placeholder +
  • Menstruation_EggLifetime
  • @@ -18,33 +19,49 @@ Menstruation_ShortEggLifetime Unfertilized eggs with this gene last three-quarters as long. - UI/Genes/Placeholder + UI/Genes/ShortEggLifetime 1 10 + +
  • + 0.75 +
  • +
    Menstruation_DoubleEggLifetime Unfertilized eggs with this gene last twice as long. - UI/Genes/Placeholder + UI/Genes/DoubleEggLifetime -1 12 + +
  • + 2.0 +
  • +
    Menstruation_QuadEggLifetime Eggs with this gene last four times as long. - UI/Genes/Placeholder + UI/Genes/QuadEggLifetime -2 1 16 + +
  • + 4.0 +
  • +
    Menstruation - + UI/Genes/Placeholder +
  • Menstruation_Estrus
  • @@ -53,24 +70,35 @@ Menstruation_NeverEstrus Carriers of this gene will never go into estrus. - UI/Genes/Placeholder + UI/Genes/NeverEstrus 1 20 + +
  • + true +
  • +
    Menstruation_FullEstrus Carriers of this gene will enter full estrus every menstrual cycle, regardless of vagina type. - UI/Genes/Placeholder + UI/Genes/FullEstrus -1 1 25 + +
  • + true +
  • +
    Menstruation - + UI/Genes/Placeholder +
  • Menstruation_Ovulation
  • @@ -79,18 +107,28 @@ Menstruation_DoubleOvulation Carriers of this gene will ovulate twice as many eggs. - UI/Genes/Placeholder + UI/Genes/DoubleOvulation -1 30 + +
  • + 2 +
  • +
    Menstruation_QuadOvulation Carriers of this gene will ovulate four times as many eggs. - UI/Genes/Placeholder + UI/Genes/QuadOvulation -1 35 + +
  • + 4 +
  • +
    @@ -98,9 +136,14 @@ Menstruation Carriers of this gene will not bleed at the end of their cycle. - UI/Genes/Placeholder + UI/Genes/NoBleeding -1 40 + +
  • + true +
  • +
    diff --git a/1.4/Languages/Korean/DefInjected/HediffDef/Hediffs_Cum.xml b/1.4/Languages/Korean/DefInjected/HediffDef/Hediffs_Cum.xml new file mode 100644 index 0000000..aa9304d --- /dev/null +++ b/1.4/Languages/Korean/DefInjected/HediffDef/Hediffs_Cum.xml @@ -0,0 +1,11 @@ + + + 항정자 항체 + 항정자 항체 + 항정자 항체. 정자의 생존 시간을 줄입니다. + {0}(은)는 항정자 항체를 가졌습니다. + 좋은 임신률 + 좋은 임신률 + 좋은 임신률 + {0}(은)는 좋은 임신률을 가지고 있습니다. + \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/HediffDef/Hediffs_Menstruation.xml b/1.4/Languages/Korean/DefInjected/HediffDef/Hediffs_Menstruation.xml new file mode 100644 index 0000000..8ff5c76 --- /dev/null +++ b/1.4/Languages/Korean/DefInjected/HediffDef/Hediffs_Menstruation.xml @@ -0,0 +1,20 @@ + + + 생리통 + 생리 주기가 끝날 때 보지에서 출혈이 있습니다. + 종종 고통스럽습니다. + 불편함 + 짜증남 + 아픔 + 고통스러움 + 발정기 + 자궁이 생리 주기의 가장 비옥한 단계로 접어든 상태입니다. 신체가 임신하기를 갈망함에 따라 성적 흥분과 욕망은 극적으로 증가합니다. + 질내 성교의 가능성이 증가하고 잠재적으로 짝짓기 선택의 기준이 낮아집니다. + 발정기(숨김) + 자궁이 생리 주기의 가장 비옥한 단계로 접어든 상태입니다. 성적 흥분과 욕망이 약간 증가합니다. + 질내 성교의 가능성이 약간 증가합니다. + 진통제 + 생리통(및 기타)의 통증을 완화해 줍니다. + 면역 억제제 + 면역 억제제의 영향으로, 감염과 질병을 물리치는 신체의 면역력이 떨어집니다. + \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/HediffDef/RJWMenstruation.xml b/1.4/Languages/Korean/DefInjected/HediffDef/RJWMenstruation.xml deleted file mode 100644 index 0b9539a..0000000 --- a/1.4/Languages/Korean/DefInjected/HediffDef/RJWMenstruation.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - 생리통 - 생리중입니다. - 불편함 - 짜증남 - 아픔 - 고통스러움 - 발정기 - 발정기입니다. - 발정기(숨김) - 발정기입니다. - 진통제 - 약간의 고통을 줄여줍니다. - - - - \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/JobDef/RJWMenstruation.xml b/1.4/Languages/Korean/DefInjected/JobDef/Jobs_CleanSelf.xml similarity index 59% rename from 1.4/Languages/Korean/DefInjected/JobDef/RJWMenstruation.xml rename to 1.4/Languages/Korean/DefInjected/JobDef/Jobs_CleanSelf.xml index 67ae283..797f994 100644 --- a/1.4/Languages/Korean/DefInjected/JobDef/RJWMenstruation.xml +++ b/1.4/Languages/Korean/DefInjected/JobDef/Jobs_CleanSelf.xml @@ -1,7 +1,4 @@ - + 질세척 하는중 - - - \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/JobDef/Jobs_MilkSelf.xml b/1.4/Languages/Korean/DefInjected/JobDef/Jobs_MilkSelf.xml new file mode 100644 index 0000000..8a21fd6 --- /dev/null +++ b/1.4/Languages/Korean/DefInjected/JobDef/Jobs_MilkSelf.xml @@ -0,0 +1,4 @@ + + + 스스로 젖 짜는 중 + \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/KeyBinding/KeyBindings_Menstruation.xml b/1.4/Languages/Korean/DefInjected/KeyBinding/KeyBindings_Menstruation.xml new file mode 100644 index 0000000..8415670 --- /dev/null +++ b/1.4/Languages/Korean/DefInjected/KeyBinding/KeyBindings_Menstruation.xml @@ -0,0 +1,4 @@ + + + 생리: 상태 창을 엽니다. + \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/RecipeDef/BreastSurgeries.xml b/1.4/Languages/Korean/DefInjected/RecipeDef/BreastSurgeries.xml deleted file mode 100644 index 8c501f4..0000000 --- a/1.4/Languages/Korean/DefInjected/RecipeDef/BreastSurgeries.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - 유륜확대 수술 - 유륜을 크게만듭니다. - 유륜확대 수술중 - 유륜축소 수술 - 유륜을 작게만듭니다. - 유륜축소 수술중 - 유두확대 수술 - 유두를 크게만듭니다. - 유두확대 수술중 - 유두축소 수술 - 유두를 작게만듭니다. - 유두축소 수술중 - \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/RecipeDef/Recipes_Surgery_Breast.xml b/1.4/Languages/Korean/DefInjected/RecipeDef/Recipes_Surgery_Breast.xml new file mode 100644 index 0000000..4c6cb9d --- /dev/null +++ b/1.4/Languages/Korean/DefInjected/RecipeDef/Recipes_Surgery_Breast.xml @@ -0,0 +1,21 @@ + + + 유륜 확대 + 유륜을 크게 만듭니다. + 유륜 확대 중 + 유륜 축소 + 유륜을 작게 만듭니다. + 유륜 축소 중 + 유두 확대 + 유두를 크게 만듭니다. + 유두 확대 중 + 유두 축소 + 유두를 작게 만듭니다. + 유두 축소 중 + 유두 흑화 + 유두를 어둡게 만듭니다. + 유두 흑화 중 + 유두 미백 + 유두를 밝게 만듭니다. + 유두 미백 중 + \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/RecordDef/RJWMenstruation.xml b/1.4/Languages/Korean/DefInjected/RecordDef/RJWMenstruation.xml deleted file mode 100644 index b807e13..0000000 --- a/1.4/Languages/Korean/DefInjected/RecordDef/RJWMenstruation.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - 질내사정 - 질내사정당한 정액 양 - \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/RecordDef/Records_Womb.xml b/1.4/Languages/Korean/DefInjected/RecordDef/Records_Womb.xml new file mode 100644 index 0000000..6831206 --- /dev/null +++ b/1.4/Languages/Korean/DefInjected/RecordDef/Records_Womb.xml @@ -0,0 +1,7 @@ + + + 질내사정 + 질내사정당한 정액 양 + 수정된 알 + 정자에 의해 수정된 알의 갯수 + \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/StatDef/RJWMenstruation.xml b/1.4/Languages/Korean/DefInjected/StatDef/Stats_Absorber.xml similarity index 73% rename from 1.4/Languages/Korean/DefInjected/StatDef/RJWMenstruation.xml rename to 1.4/Languages/Korean/DefInjected/StatDef/Stats_Absorber.xml index f92112e..52f4854 100644 --- a/1.4/Languages/Korean/DefInjected/StatDef/RJWMenstruation.xml +++ b/1.4/Languages/Korean/DefInjected/StatDef/Stats_Absorber.xml @@ -1,7 +1,5 @@ - + 흡수량 액체를 흡수할수 있는 정도입니다. - - \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/TaleDef/Tales_Cum.xml b/1.4/Languages/Korean/DefInjected/TaleDef/Tales_Cum.xml new file mode 100644 index 0000000..9709f39 --- /dev/null +++ b/1.4/Languages/Korean/DefInjected/TaleDef/Tales_Cum.xml @@ -0,0 +1,20 @@ + + + 질내사정 + tale_noun->[FUCKER_nameDef](은)는 [FUCKED_nameDef]의 안에 들어갔다. + image->[FUCKER_nameFull]의 자지는 [circumstance_group] [FUCKED_nameFull]의 보지 안에 깊숙히 들어갔다. + image->[FUCKER_nameFull]의 자지는 [circumstance_group] [FUCKED_nameFull]의 보지 속으로 사라졌다. + image->[FUCKED_nameFull]의 보지는 [circumstance_group] [FUCKER_nameFull]의 자지로 꽉 채워졌다. + image->[FUCKED_nameFull]의 보지는 [circumstance_group] [FUCKER_nameFull]의 자지를 꽉꽉 물어대었다. + circumstance_phrase->[FUCKER_nameDef](이)가 흥분에 이를 갈 때 + circumstance_phrase->[FUCKER_nameDef](이)가 만족스런 미소를 짓는 동안 + circumstance_phrase->[FUCKED_nameDef]쾌락에 몸을 떨 때 + circumstance_phrase->[FUCKER_nameDef](이)가 [FUCKED_nameDef]에게 한 발 쌀 동안 + circumstance_phrase->[FUCKED_nameDef](이)가 미소로 [FUCKER_nameDef]의 눈을 마주칠 때 + desc_sentence->[FUCKER_nameDef]의 정액이 [FUCKED_nameDef]의 보지를 넘어 바닥에 넘쳐흘렀다. + desc_sentence->[FUCKER_nameDef]의 정자가 [FUCKED_nameDef]의 자궁에서 경주를 벌이고, 끝내 [FUCKED_possessive]의 난자에 도달했다. + desc_sentence->[FUCKER_nameDef]의 정액이 [FUCKED_nameDef]의 자궁에 쏟아졌다. + desc_sentence->[FUCKED_nameDef]의 자궁은 정액으로 가득찼다. + desc_sentence->[FUCKER_nameDef]의 얼굴에 땀이 흘러내렸다. + desc_sentence->[FUCKED_nameDef](은)는 심하게 헐떡였다. + \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/ApparelLayerDef/RJWMenstruation.xml b/1.4/Languages/Korean/DefInjected/ThingDef/ApparelLayerDefs_Absorber.xml similarity index 50% rename from 1.4/Languages/Korean/DefInjected/ApparelLayerDef/RJWMenstruation.xml rename to 1.4/Languages/Korean/DefInjected/ThingDef/ApparelLayerDefs_Absorber.xml index 9c687e3..771e108 100644 --- a/1.4/Languages/Korean/DefInjected/ApparelLayerDef/RJWMenstruation.xml +++ b/1.4/Languages/Korean/DefInjected/ThingDef/ApparelLayerDefs_Absorber.xml @@ -1,4 +1,4 @@ - + 성기 \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/ThingDef/Apparel_Absorbers.xml b/1.4/Languages/Korean/DefInjected/ThingDef/Apparel_Absorbers.xml new file mode 100644 index 0000000..e568485 --- /dev/null +++ b/1.4/Languages/Korean/DefInjected/ThingDef/Apparel_Absorbers.xml @@ -0,0 +1,13 @@ + + + 탐폰 + 보지에서 나오는 액체를 흡수하는 탐폰입니다. +오래 착용하고 있을 경우 감염이 발생할수도 있습니다. + 더러운 탐폰 + 사용된 축축한 탐폰입니다. + 생리대 + 보지에서 나오는 액체를 흡수하는 생리대입니다. +흡수량 이상의 액체가 나올경우 샐수있습니다. + 젖은 생리대 + 사용된 축축한 생리대입니다. + \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/ThingDef/Filth_Mixture.xml b/1.4/Languages/Korean/DefInjected/ThingDef/Filth_Mixture.xml new file mode 100644 index 0000000..477650e --- /dev/null +++ b/1.4/Languages/Korean/DefInjected/ThingDef/Filth_Mixture.xml @@ -0,0 +1,4 @@ + + + 혼합물 + \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/ThingDef/Pills_Menstruation.xml b/1.4/Languages/Korean/DefInjected/ThingDef/Pills_Menstruation.xml new file mode 100644 index 0000000..5f788e0 --- /dev/null +++ b/1.4/Languages/Korean/DefInjected/ThingDef/Pills_Menstruation.xml @@ -0,0 +1,17 @@ + + + 난소 재생약 + 난소를 재생시켜 평생 배출할 수 있는 난자의 총 양을 복구시킵니다. +난자 소모량이 클수록 효과가 줄어듭니다. +폐경을 회복시키지 않습니다. + 과배란 유도제 + 과배란을 유도하는 약물입니다. 과배란을 유도하여 다음 배란에서 1-4개의 여분의 난자를 배란합니다. +조기폐경을 초래할수도 있습니다. + 진통제 + 24시간 동안 생리통을 완화시켜 줍니다. + +다른 통증에도 효과적입니다. + 면역 억제제 + 면역 억제제. +항정자 항체를 치료할 수 있지만, 24시간 동안 감염과 질병을 퇴치하는 신체의 면역력을 떨어뜨립니다. 복용하면 정자의 생존 시간을 늘립니다. + diff --git a/1.4/Languages/Korean/DefInjected/ThingDef/RJWMenstruation.xml b/1.4/Languages/Korean/DefInjected/ThingDef/RJWMenstruation.xml deleted file mode 100644 index c48a975..0000000 --- a/1.4/Languages/Korean/DefInjected/ThingDef/RJWMenstruation.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - 탐폰 - 보지에서 나오는 액체를 흡수하는 탐폰입니다. 오래 착용하고 있을 경우 감염이 발생할수도 있습니다. - 더러운 탐폰 - 사용된 축축한 탐폰입니다. - 생리대 - 보지에서 나오는 액체를 흡수하는 생리대입니다. 흡수량 이상의 액체가 나올경우 샐수있습니다. - 젖은 생리대 - 사용된 축축한 생리대입니다. - 난소 재생약 - 난소를 재생시켜 배출할수있는 난자의 양을 증가시킵니다. 난자 소모량이 클수록 효과가 줄어듭니다. 폐경을 회복시키지 않습니다. - 과배란 유도제 - 과배란을 유도하는 약물입니다. 조기폐경을 초래할수도 있습니다. - 진통제 - 하루동안 약간의 통증을 줄여줍니다. - 혼합물 - - - \ No newline at end of file diff --git a/1.4/Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml b/1.4/Languages/Korean/DefInjected/ThoughtDef/Thoughts_sex.xml similarity index 50% rename from 1.4/Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml rename to 1.4/Languages/Korean/DefInjected/ThoughtDef/Thoughts_sex.xml index 9509437..6d817ee 100644 --- a/1.4/Languages/Korean/DefInjected/ThoughtDef/RJWMenstruation.xml +++ b/1.4/Languages/Korean/DefInjected/ThoughtDef/Thoughts_sex.xml @@ -1,29 +1,32 @@ - + 가랑이가 축축함 - 찝찝해... - {0}에게 질내사정당함 - 임신할까봐 걱정돼... + 이걸 닦아낼 뭔가가 없을까? + + {0}에게 질내사정함 + 그 년한테 질싸를 했어! + {0}에게 질내사정함 + 질싸를하니 기분이 좋네. + {0}에게 질내사정당함 + 임신하면 좋을 텐데. + {0}에게 질내사정당함 + 나는 그 새끼의 자식을 임신하고 싶지 않아! + {0}에게 질내사정당함 + 아. 이런 일을 당해야 하다니... {0}에게 질내사정당함 확률은 낮겠지만 임신할까봐 걱정돼... - {0}에게 질내사정당함 - 임신할것 같아 + {0}에게 질내사정당함 + 임신할까봐 걱정돼... {0}에게 질내사정당함 - 좋았어... - {0}에게 질내사정함 - 질싸를하니 기분이 좋네 - {0}에게 질내사정당함 - 그새끼의 자식을 임신하고 싶지 않아... + 아마 임신 안할꺼야. 게다가 좋기도 했어... {0}에게 질내사정당함 - 안전일이였지만 기분나빠 - {0}에게 질내사정함 - 그년한테 질싸를했어 + 안전일이였지만, 기분 더러워. 원치않은 임신 - 어떻게 해야하지?... 그년한테 질싸를했어 - 원치않은 임신 - 어떻게 해야하지?... + 어떻게 해야하지?... + 원치않은 임신 + 아이를 가졌어. 하지만 아마 괜찮을꺼야. 피임약 복용 - 괜찮을거야 + 이젠 해도 괜찮아. 피임약 복용 - 임신하고싶어 + 임신하고 싶은데. \ No newline at end of file diff --git a/1.4/Languages/Korean/Keyed/RJW_Menstruation.xml b/1.4/Languages/Korean/Keyed/RJW_Menstruation.xml index 829fcf5..1a80cfd 100644 --- a/1.4/Languages/Korean/Keyed/RJW_Menstruation.xml +++ b/1.4/Languages/Korean/Keyed/RJW_Menstruation.xml @@ -1,18 +1,29 @@ - + - RJW Menstruation Cycle - + RJW 생리 주기 생리혈 - 없음 + 정액 없음 난포기 - 배란 + 배란 황체기 생리중 임신 회복기 - 없음 + 불임 갱년기 + 폐경 휴지기 + 난소가 배란할 준비를 하고 있습니다. 배란은 이 단계가 끝날 때 발생합니다. + 난소가 배란할 준비를 하고 있습니다. 정액이 자궁에 들어가면 배란이 일어날 것입니다. + 난소는 자궁 안으로 난자를 방출하고 있습니다. + 자궁은 수정란을 받을 준비가 되어 있습니다. 이 단계가 끝나기 전에 착상이 되면 임신이 됩니다. + 착상에 실패한 난자와 함께 자궁의 내벽이 허물어지고 있습니다. + 아기가 자궁 안에서 자라고 있습니다. 정성으로 보살핀다면, 이 세상에 새롭게 태어날 것입니다. + 자궁이 최근 임신에서 회복되고 있습니다. + 자궁이 불임으로 임신할 수 없습니다. + 난소가 거의 고갈되어 생리 주기가 불규칙해졌습니다. + 난소가 고갈되어 자궁은 더 이상 난자를 품을 수 없습니다. + 자궁이 번식기가 아닙니다. 조건이 충족되면 주기가 재개됩니다. 상태창 모유 짜기 상태 @@ -24,11 +35,15 @@ 배란 - + 양동이에 정액 모으기 + 자궁의 정액 모으기 + 알려지지 않음 자궁아이콘 활성화 건강탭에 버튼 추가 동물주기 활성화 - 동물의 월경주기를 시뮬레이션합니다. 변경한후에 세이브로드가 필요합니다. not recommended + 동물의 월경주기를 시뮬레이션합니다. +변경한후에 세이브로드가 필요합니다. +추천하지 않음 착상확률 수정란의 착상확률을 설정합니다. 수정확률 @@ -36,10 +51,14 @@ 시간당 정액배출비율 이 비율만큼 매 시간마다 정액이 배출됩니다. 시간당 정자 사망비율 - 이 비율만큼 매 시간마다 정자가 사망해 정액이 생식능력을 잃습니다. 정자 예상수명: 정액이 대부분의 생식능력을 잃는 시간입니다. + 이 비율만큼 매 시간마다 정자가 사망해 정액이 생식능력을 잃습니다. +정자 예상수명: 정액이 대부분의 생식능력을 잃는 시간입니다. 주기 가속 - 월경주기를 더 빠르게합니다. 이 설정은 조기폐경과 난임을 유발할수도 있습니다. 12배속 이하로 설정하는것을 권장합니다. 림월드의 시간배율: x6(default) - Debug + 월경주기를 더 빠르게합니다. +이 설정은 조기폐경과 난임을 유발할수도 있습니다. +12배속 이하로 설정하는것을 권장합니다. +림월드의 시간배율: x6(기본) + 디버그 디버그정보를 보여줍니다. 자궁 그림 상태창에 자궁그림을 표시합니다. @@ -51,9 +70,13 @@ 태아에 대한 정보를 표시하지 않지만, 임신한 이후 태아이미지를 표시합니다. 태아에 대한 어떠한 정보도 표시하지 않습니다. 폐경기 활성화 - 시간이 지남에따라 불임상태로 만드는 폐경기를 활성화합니다. 수명이 긴 종족을 사용할때 문제가 있으면 이 옵션을 끄세요. 변경한후에 세이브로드가 필요합니다. + 시간이 지남에따라 불임상태로 만드는 폐경기를 활성화합니다. +수명이 긴 종족을 사용할때 문제가 있으면 이 옵션을 끄세요. +변경한후에 세이브로드가 필요합니다. 다중임신 - RJW의 기본임신 대신 다중임신을 사용합니다. 임신에 문제가 있다면 이 기능을 끄는것으로 해결될수도 있습니다. RJW 임신이 활성화 되어야 합니다. + RJW의 기본임신 대신 다중임신을 사용합니다. +임신에 문제가 있다면 이 기능을 끄는것으로 해결될수도 있습니다. +RJW 임신이 활성화 되어야 합니다. 이란성 쌍둥이 활성화 다수의 난자가 임신으로 이어지게 합니다. 일란성 쌍둥이 활성화 @@ -66,7 +89,9 @@ 자궁그림 위에 난자그림를 표시합니다. 생리양 예상되는 총 생리양 - 생리혈의 양을 설정합니다. 실제 생리양은 보지에따라 다를수 있습니다. 일반적인 인간 여성의 생리량은 약 20~80ml입니다. + 생리혈의 양을 설정합니다. +실제 생리양은 보지에따라 다를수 있습니다. +일반적인 인간 여성의 생리량은 약 20~80ml입니다. 정착민 죄수 동맹관계 @@ -75,36 +100,54 @@ 표시 대상 아이콘과 버튼을 표시할 대상입니다. 잡종 정의 대체 - RJW와 RaceSupport의 잡종정의를 대체합니다. 우선순위는 누구의 잡종 정의를 우선으로 사용할지 정합니다. 변경하지 않는것을 추천합니다. + RJW와 RaceSupport의 잡종정의를 대체합니다. +우선순위는 누구의 잡종 정의를 우선으로 사용할지 정합니다. 변경하지 않는것을 추천합니다. 우선순위 - 임신후 유두 변화량 - 임신후에 유두가 얼마나 어두워지고 커지는지 설정합니다. - 유두 영구변화량 - 매번 임신할때마다 유두가 얼마나 영구적으로 어두워지고 커지는지 설정합니다. - 최대 변화량 - 유두는 이 값 이상으로 변하지 않습니다. - 유두 변화 속도 - 유두가 얼마나 빨리 변하는지 설정합니다. + 임신 중 유방 크기 변화 + 임신했을 때 가슴이 얼마나 커질지 설정합니다. 폰에 따라 변화 정도가 다릅니다. + 임신 중 유두 변화 + 임신 중에 유두가 얼마나 변할지를 설정합니다. + 임신 후 유두 영구 변화 + 임신한 폰의 유두가 임신이 끝난 후 변화된 상태를 유지할 대략적인 양을 설정합니다. 잡종 정의 변경하기 - 사용자 지정 잡종 편집기를 엽니다. 이 설정은 XML파일의 잡종 정의를 대체합니다. + 사용자 지정 잡종 편집기를 엽니다. +이 설정은 XML파일의 잡종 정의를 대체합니다. 아이콘 축소 허용 아이콘 축소를 허용합니다. 난자 수명 배수 - 난자 수명을 늘립니다. 이 설정에 관계없이 황체기가 끝나면 난자는 죽습니다. + 난자 수명을 늘립니다. +이 설정에 관계없이 황체기가 끝나면 난자는 죽습니다. 출산 이후 보지 변화 활성화 - 출산 이후 보지가 영구적으로 늘어나게 합니다. 만약 이 설정을 다루고있는 다른 모드가 있다면, 이 설정을 끄세요. + 출산 이후 보지가 영구적으로 늘어나게 합니다. +만약 이 설정을 다루고있는 다른 모드가 있다면, 이 설정을 끄세요. 변화 강도 변화 강도를 설정합니다. + 정액 모으기 아이콘을 보이기 + 발정기 시, RJW 유혹 설정 덮어쓰기 + 활성화된 경우 발정기에 있는 폰은 RJW 설정 대신 유혹으로 이 설정을 사용합니다. +모든 설정은 기본적으로 해당 RJW 설정으로 설정됩니다. + 발정기 시 유혹 최소 섹스 가능성 + 발정기 시 유혹 최소 매력 + 발정기 시 유혹 최소 의견 정자 예상수명 난자 예상수명 - 한시간 안에 수정될 확률: {0}% 수정란이 임신으로 진행될 확률입니다. 흰색 오버레이는 정자가 난자를 수정시킬 확률을 표시하는 것입니다. + 한시간 안에 수정될 확률: {0}% +흰색 오버레이는 정자가 난자를 수정시킬 확률을 표시하는 것이고, +분홍색 임신률 그래프는 수정된 난자가 착상되어 임신으로 진행될 확률입니다. + +수정이 되더라도 착상에 실패하면 임신하지 않습니다. + RJW 기본 임신 사용 + 생리 모드 다중 임신 사용 + 바이오테크 임신 사용 + 기본값으로 재설정 + 정액 모으기 질세척 - 사용자 지정 잡종 편집기 {0}의 잡종설정 - {0}이(가) {1}와(과) 교미했을 때, {2}이(가) {3}의 확률로 태어납니다. 만약 두 종족이 서로에 대한 잡종 정의가 있을경우 아버지 쪽의 정의가 우선적으로 사용됩니다. - - \ No newline at end of file + {0}이(가) {1}와(과) 교미했을 때, {2}이(가) {3}의 확률로 태어납니다. +만약 두 종족이 서로에 대한 잡종 정의가 있을경우 아버지 쪽의 정의가 우선적으로 사용됩니다. + 난자 없음 + diff --git a/1.4/Patches/CycleDisabledGenes.xml b/1.4/Patches/CycleDisabledGenes.xml new file mode 100644 index 0000000..01f8827 --- /dev/null +++ b/1.4/Patches/CycleDisabledGenes.xml @@ -0,0 +1,73 @@ + + + + + +
  • Alpha Genes
  • +
    + + /Defs/GeneDef[defName="AG_EggLaying"] + +
  • + true +
  • +
    +
    +
    + + + +
  • Vanilla Races Expanded - Saurid
  • +
    + + /Defs/GeneDef[defName="VRESaurids_Oviparous"] + +
  • + true +
  • +
    +
    +
    + + + +
  • Vanilla Races Expanded - Phytokin
  • +
    + + /Defs/GeneDef[defName="VRE_SaplingBirth"] + +
  • + true +
  • +
    +
    +
    + + + +
  • Erin's Corvyia
  • +
    + + /Defs/GeneDef[defName="ERN_EggLayer"] + +
  • + true +
  • +
    +
    +
    + + + +
  • Outland - Genetics
  • +
    + + /Defs/GeneDef[defName="Outland_EggLayer"] + +
  • + true +
  • +
    +
    +
    +
    \ No newline at end of file diff --git a/1.4/Patches/Hediffs_PrivateParts.xml b/1.4/Patches/Hediffs_PrivateParts.xml index 6b6a570..58bd529 100644 --- a/1.4/Patches/Hediffs_PrivateParts.xml +++ b/1.4/Patches/Hediffs_PrivateParts.xml @@ -144,11 +144,5 @@ - - - - - - - + \ No newline at end of file diff --git a/1.4/Textures/UI/Genes/DoubleEggLifetime.png b/1.4/Textures/UI/Genes/DoubleEggLifetime.png new file mode 100644 index 0000000..a9c5935 Binary files /dev/null and b/1.4/Textures/UI/Genes/DoubleEggLifetime.png differ diff --git a/1.4/Textures/UI/Genes/DoubleOvulation.png b/1.4/Textures/UI/Genes/DoubleOvulation.png new file mode 100644 index 0000000..744e08a Binary files /dev/null and b/1.4/Textures/UI/Genes/DoubleOvulation.png differ diff --git a/1.4/Textures/UI/Genes/Files.zip b/1.4/Textures/UI/Genes/Files.zip new file mode 100644 index 0000000..b569056 Binary files /dev/null and b/1.4/Textures/UI/Genes/Files.zip differ diff --git a/1.4/Textures/UI/Genes/FullEstrus.png b/1.4/Textures/UI/Genes/FullEstrus.png new file mode 100644 index 0000000..dec368b Binary files /dev/null and b/1.4/Textures/UI/Genes/FullEstrus.png differ diff --git a/1.4/Textures/UI/Genes/NeverEstrus.png b/1.4/Textures/UI/Genes/NeverEstrus.png new file mode 100644 index 0000000..c0c552d Binary files /dev/null and b/1.4/Textures/UI/Genes/NeverEstrus.png differ diff --git a/1.4/Textures/UI/Genes/NoBleeding.png b/1.4/Textures/UI/Genes/NoBleeding.png new file mode 100644 index 0000000..4f10886 Binary files /dev/null and b/1.4/Textures/UI/Genes/NoBleeding.png differ diff --git a/1.4/Textures/UI/Genes/QuadEggLifetime.png b/1.4/Textures/UI/Genes/QuadEggLifetime.png new file mode 100644 index 0000000..ba8f144 Binary files /dev/null and b/1.4/Textures/UI/Genes/QuadEggLifetime.png differ diff --git a/1.4/Textures/UI/Genes/QuadOvulation.png b/1.4/Textures/UI/Genes/QuadOvulation.png new file mode 100644 index 0000000..9f76bbb Binary files /dev/null and b/1.4/Textures/UI/Genes/QuadOvulation.png differ diff --git a/1.4/Textures/UI/Genes/ShortEggLifetime.png b/1.4/Textures/UI/Genes/ShortEggLifetime.png new file mode 100644 index 0000000..fe3ce7a Binary files /dev/null and b/1.4/Textures/UI/Genes/ShortEggLifetime.png differ diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Compatibility/HARCompatibility.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Compatibility/HARCompatibility.cs index 7eb1e66..1100c71 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Compatibility/HARCompatibility.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Compatibility/HARCompatibility.cs @@ -1,5 +1,4 @@ using AlienRace; -using System; using System.Collections.Generic; using UnityEngine; using Verse; diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs index 1b1f69c..72724c0 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs @@ -21,7 +21,7 @@ namespace RJW_Menstruation public const int ColonistTickIntervalDefault = GenDate.TicksPerHour; public const int NonColonistTickIntervalDefault = GenDate.TicksPerHour; public const int AnimalTickIntervalDefault = GenDate.TicksPerHour; - public const int TickIntervalMinimum = 20; + public const int TickIntervalMinimum = GenTicks.TicksPerRealSecond / 3; public const int TickIntervalMaximum = 4 * GenDate.TicksPerHour; public const float EnzygoticTwinsChanceDefault = 0.002f; public const int EnzygoticTwinsChanceAdjustDefault = 2; diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Cum.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Cum.cs index eefdfc7..60394b0 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Cum.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Cum.cs @@ -1,7 +1,6 @@ using RimWorld; using System; using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using System.Text; using UnityEngine; using Verse; diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomeDoers.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomeDoers.cs index 33e4e11..5017740 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomeDoers.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomeDoers.cs @@ -1,5 +1,4 @@ using RimWorld; -using rjw; using System.Collections.Generic; using Verse; diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_InducedOvulator.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_InducedOvulator.cs index 08dcf50..3b4ab9c 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_InducedOvulator.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_InducedOvulator.cs @@ -109,5 +109,7 @@ namespace RJW_Menstruation if (curStage == Stage.Luteal && !hadOvulatoryStage) return false; else return base.ShouldBeInEstrus(); } + + protected override float RandomOvulationChance => 0; } } diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs index e5cfef8..3518b5c 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs @@ -123,11 +123,10 @@ namespace RJW_Menstruation protected string customwombtex = null; protected string customvagtex = null; protected bool estrusflag = false; - protected float ovulationChanceCache = -1.0f; // Dirtied every simulation - protected float implantationChanceCache = -1.0f; + protected float? ovulationChanceCache = null; // Dirtied every simulation + protected float? implantationChanceCache = null; protected int opcache = -1; protected float antisperm = 0.0f; - protected float? originvagsize = null; // RJW pregnancy, or Biotech pregnancy/labor/laborpushing protected Hediff pregnancy = null; @@ -179,7 +178,8 @@ namespace RJW_Menstruation public float HoursBetweenSimulations => (float)TickInterval / GenDate.TicksPerHour; - public Hediff Pregnancy { + public Hediff Pregnancy + { get { if (pregnancy == null) return null; @@ -255,11 +255,11 @@ namespace RJW_Menstruation public float TotalCum { - get => cums?.Sum(cum => cum.Volume) ?? 0; + get => cums?.Sum(cum => cum.Volume) ?? 0; } public float TotalFertCum { - get => cums?.Sum(cum => cum.FertVolume) ?? 0; + get => cums?.Where(cum => CumCanFertilize(cum)).Sum(cum => cum.FertVolume) ?? 0; } public float TotalCumPercent { @@ -289,7 +289,7 @@ namespace RJW_Menstruation private bool calculatingOvulationChance = false; public bool CalculatingOvulationChance { get => calculatingOvulationChance; } - protected float CalculatedOvulationChance() + private float CalculatedOvulationChance() { float ovulationChance = 1.0f; if (EggHealth <= 0.0f) return 0.0f; @@ -315,19 +315,20 @@ namespace RJW_Menstruation return ovulationChance; } - protected float CalculatedImplantChance() + private float CalculatedImplantChance() { if (ModsConfig.BiotechActive && xxx.is_human(Pawn)) { // Implant factor will be based solely on pawn age, plus any rollover from ovulation chance float factor = 1.0f; StatDefOf.Fertility.GetStatPart()?.TransformValue(StatRequest.For(Pawn), ref factor); + if (factor <= 0.0f) return 0.0f; if (OvulationChance > 1.0f) factor *= OvulationChance; return Props.baseImplantationChanceFactor * FertilityModifier * factor; } else { - return Pawn.health.capacities.GetLevel(xxx.reproduction) * Props.baseImplantationChanceFactor * FertilityModifier; + return Pawn.health.capacities.GetLevel(xxx.reproduction) * Props.baseImplantationChanceFactor * FertilityModifier * (Pawn.IsBreeder() ? 10.0f : 1.0f); } } @@ -335,8 +336,8 @@ namespace RJW_Menstruation { get { - if (ovulationChanceCache < 0.0f) ovulationChanceCache = CalculatedOvulationChance(); - return ovulationChanceCache; + if (ovulationChanceCache == null) ovulationChanceCache = CalculatedOvulationChance(); + return ovulationChanceCache.Value; } } @@ -345,8 +346,8 @@ namespace RJW_Menstruation { get { - if (implantationChanceCache < 0.0f) implantationChanceCache = CalculatedImplantChance(); - return implantationChanceCache; + if (implantationChanceCache == null) implantationChanceCache = CalculatedImplantChance(); + return implantationChanceCache.Value; } } @@ -356,7 +357,7 @@ namespace RJW_Menstruation { if (cums.NullOrEmpty()) yield return Translations.Info_noCum; else foreach (Cum cum in cums) - yield return string.Format("{0}: {1:0.##}ml", cum.notcum ? cum.notcumLabel : cum.pawn?.Label, cum.Volume); + yield return string.Format("{0}: {1:0.##}ml", cum.notcum ? cum.notcumLabel : cum.pawn?.Label, cum.Volume); } } public Color GetCumMixtureColor @@ -563,19 +564,6 @@ namespace RJW_Menstruation } } - public float OriginVagSize - { - get - { - if (originvagsize == null) - { - originvagsize = parent.Severity; - } - return originvagsize ?? 0.1f; - } - set => originvagsize = value; - } - public int CurStageIntervalTicks { get => currentIntervalTicks; @@ -608,7 +596,7 @@ namespace RJW_Menstruation else if (Pawn.story?.bodyType == BodyTypeDefOf.Female) discoveryTime = 0.35f; // Estimated; there's no way to get the exact value after the fact without writing it into the save float lutealProgressWhenImplanted = Math.Min(0.5f, maxImplantDelayHours / (Props.lutealIntervalDays * GenDate.HoursPerDay)); - + return GenMath.LerpDouble(0, discoveryTime, lutealProgressWhenImplanted, 1.0f, pregnancy.Severity); } } @@ -656,7 +644,6 @@ namespace RJW_Menstruation Scribe_Values.Look(ref ovarypower, "ovarypower", ovarypower, true); Scribe_Values.Look(ref eggstack, "eggstack", 0); Scribe_Values.Look(ref estrusflag, "estrusflag", false); - Scribe_Values.Look(ref originvagsize, "originvagsize", originvagsize, true); Scribe_Values.Look(ref DoCleanWomb, "DoCleanWomb", false); Scribe_References.Look(ref pregnancy, "pregnancy"); if (Scribe.mode == LoadSaveMode.PostLoadInit) @@ -679,23 +666,18 @@ namespace RJW_Menstruation ovulationFactor = 1f; noBleeding = false; opcache = -1; - + if (Pawn.genes == null || !ModsConfig.BiotechActive) return; - - foreach (GeneDef geneDef in Pawn.genes.GenesListForReading.Select(gene => gene.def)) + foreach (MenstruationModExtension extension in Pawn.genes.GenesListForReading.Select(gene => gene.def.GetModExtension()).Where(ext => ext != null)) { - if (geneDef == VariousDefOf.ShortEggLifetime) eggLifeSpanTicks = eggLifeSpanTicks * 3 / 4; - else if (geneDef == VariousDefOf.DoubleEggLifetime) eggLifeSpanTicks *= 2; - else if (geneDef == VariousDefOf.QuadEggLifetime) eggLifeSpanTicks *= 4; - - else if (geneDef == VariousDefOf.NeverEstrus) estrusLevel = EstrusLevel.None; - else if (geneDef == VariousDefOf.FullEstrus) estrusLevel = EstrusLevel.Visible; - - else if (geneDef == VariousDefOf.DoubleOvulation) ovulationFactor = 2f; - else if (geneDef == VariousDefOf.QuadOvulation) ovulationFactor = 4f; - - else if (geneDef == VariousDefOf.NoBleeding) noBleeding = true; + eggLifeSpanTicks = (int)(eggLifeSpanTicks * extension.eggLifeTimeFactor); + if (extension.alwaysEstrus) estrusLevel = EstrusLevel.Visible; + else if (extension.neverEstrus) estrusLevel = EstrusLevel.None; + ovulationFactor *= extension.ovulationFactor; + if (extension.noBleeding) noBleeding = true; } + if (eggLifeSpanTicks < 0) eggLifeSpanTicks = 0; + if (ovulationFactor < 0f) ovulationFactor = 0f; } public bool ShouldSimulate() @@ -724,7 +706,7 @@ namespace RJW_Menstruation { if (Pawn.IsHashIntervalTick(recalculateTickInterval)) TickInterval = -1; // Every so often, force TickInterval to be recalculated in case the pawn's status changed. if (!Pawn.IsHashIntervalTick(TickInterval)) return; - + if (!ShouldSimulate()) return; // Initialize immediately if needed, but if there's an error, then don't spam it every tick @@ -733,7 +715,7 @@ namespace RJW_Menstruation Log.Warning($"{Pawn}'s womb is ticking, but was not initialized first"); Initialize(); } - + if (initError) Log.Warning($"Attempting to process {Pawn}'s womb uninitialized"); if (Pregnancy != null && curStage != Stage.Pregnant) @@ -743,7 +725,7 @@ namespace RJW_Menstruation } BeforeSimulator(); - + if (ShouldBeInfertile()) GoNextStage(Stage.Infertile); switch (curStage) { @@ -820,7 +802,7 @@ namespace RJW_Menstruation tip.Append(": "); tip.Append(GetCurStageLabel); string fertInfo = GetFertilizingInfo; - if(CurrentVisibleStage == Stage.Luteal && fertInfo.Length > 0) + if (CurrentVisibleStage == Stage.Luteal && fertInfo.Length > 0) { tip.AppendLine(); tip.Append(fertInfo); @@ -831,7 +813,7 @@ namespace RJW_Menstruation protected virtual int TicksToNextStage() { - return Math.Max(0,(currentIntervalTicks - curStageTicks) / Configurations.CycleAcceleration); + return Math.Max(0, (currentIntervalTicks - curStageTicks) / Configurations.CycleAcceleration); } public override string CompDebugString() @@ -1176,7 +1158,7 @@ namespace RJW_Menstruation if (cycleSpeed < 0f) cycleSpeed = Utility.RandGaussianLike(0.8f, 1.2f); if (cycleVariability < 0f) cycleVariability = MenstruationUtility.RandomVariabilityPercent(); - + InitOvary(); if (currentIntervalTicks < 0) @@ -1284,8 +1266,8 @@ namespace RJW_Menstruation protected virtual void BeforeSimulator() { - ovulationChanceCache = -1.0f; - implantationChanceCache = -1.0f; + ovulationChanceCache = null; + implantationChanceCache = null; CumOut(); } @@ -1353,10 +1335,18 @@ namespace RJW_Menstruation } } + public bool CumCanFertilize(Cum cum) + { + return !cum.notcum && + cum.FertVolume > 0 && + !(cum.pawn?.Destroyed ?? true) && + (RJWPregnancySettings.bestial_pregnancy_enabled || xxx.is_animal(Pawn) == xxx.is_animal(cum.pawn)); + } + protected Pawn Fertilize() { if (cums.NullOrEmpty()) return null; - List eligibleCum = cums.FindAll(cum => !cum.notcum && cum.FertVolume > 0 && cum.pawn != null && (RJWPregnancySettings.bestial_pregnancy_enabled || xxx.is_animal(Pawn) == xxx.is_animal(cum.pawn))); + List eligibleCum = cums.FindAll(cum => CumCanFertilize(cum)); if (eligibleCum.Count == 0) return null; float totalFertPower = eligibleCum.Sum(cum => cum.FertVolume); @@ -1364,7 +1354,7 @@ namespace RJW_Menstruation //float fertFailChancePerHour = Mathf.Pow(1.0f - Configurations.FertilizeChance, totalFertPower * Props.basefertilizationChanceFactor); //float fertFailChancePerInterval = Mathf.Pow(fertFailChancePerHour, (float)TickInterval / GenDate.TicksPerHour); float fertFailChancePerInterval = Mathf.Pow(1.0f - Configurations.FertilizeChance, totalFertPower * Props.basefertilizationChanceFactor * HoursBetweenSimulations); - + if (Rand.Chance(fertFailChancePerInterval)) return null; Pawn.records.AddTo(VariousDefOf.AmountofFertilizedEggs, 1); @@ -1494,7 +1484,7 @@ namespace RJW_Menstruation float interspeciesFactor = InterspeciesImplantFactor(egg.fertilizer); float implantChance = Configurations.ImplantationChance * ImplantChance * interspeciesFactor; Log.Message($"Fertilized egg of {Pawn} failed to implant (chance {implantChance.ToStringPercent()}, " + - (interspeciesFactor < 1.0f ? $"interspecies factor {interspeciesFactor.ToStringPercent()}, " : "" ) + + (interspeciesFactor < 1.0f ? $"interspecies factor {interspeciesFactor.ToStringPercent()}, " : "") + $"father {egg.fertilizer})"); } deadeggs.Add(egg); @@ -1525,7 +1515,7 @@ namespace RJW_Menstruation protected void BleedOut() { // ~1.5 per hour times acceleration - float bledAmount = 0.03f * Configurations.BleedingAmount * Configurations.CycleAcceleration * Rand.Range(0.5f, 1.5f) * HoursBetweenSimulations; + float bledAmount = Utility.VariationRange(0.03f * Configurations.BleedingAmount * Configurations.CycleAcceleration * HoursBetweenSimulations, 0.5f); CumIn(Pawn, bledAmount, Translations.Menstrual_Blood, -5.0f, Pawn.RaceProps?.BloodDef ?? ThingDefOf.Filth_Blood); Cum blood = GetNotCum(Translations.Menstrual_Blood); if (blood != null) blood.Color = BloodColor; @@ -1580,9 +1570,6 @@ namespace RJW_Menstruation return amount; } - - - protected void EggDecay() { HashSet deadeggs = new HashSet(); @@ -1602,7 +1589,7 @@ namespace RJW_Menstruation protected void AddCrampPain() { Hediff hediff = HediffMaker.MakeHediff(VariousDefOf.Hediff_MenstrualCramp, Pawn); - hediff.Severity = crampPain * Rand.Range(0.9f, 1.1f); + hediff.Severity = Utility.VariationRange(crampPain, 0.1f); HediffCompProperties_SeverityPerDay Prop = (HediffCompProperties_SeverityPerDay)hediff.TryGetComp().props; Prop.severityPerDay = -hediff.Severity / (currentIntervalTicks / GenDate.TicksPerDay) * Configurations.CycleAcceleration; Pawn.health.AddHediff(hediff, parent.Part); @@ -1659,7 +1646,7 @@ namespace RJW_Menstruation eggnum = 1f; } eggnum *= ovulationFactor; - int toOvulate = (int)eggnum + eggstack; + int toOvulate = Math.Max(1, (int)eggnum + eggstack); int ovulated = 0; for (int i = 0; i < toOvulate; i++) @@ -1670,7 +1657,7 @@ namespace RJW_Menstruation } ovarypower -= ovulated; eggstack = 0; - if (Configurations.Debug && ovulated != toOvulate) + if (Configurations.Debug && ovulated < toOvulate) Log.Message($"{Pawn} ovulated {ovulated}/{toOvulate} eggs ({OvulationChance.ToStringPercent()} chance)"); GoNextStage(Stage.Luteal); @@ -1817,10 +1804,10 @@ namespace RJW_Menstruation } else pawnMemories.TryGainMemory(VariousDefOf.CameInsideFFetish, cummer); } - else if (Pawn.relations.OpinionOf(cummer) <= -5) - pawnMemories.TryGainMemory(VariousDefOf.HaterCameInsideF, cummer); - else if (Pawn.IsInEstrus() && Pawn.relations.OpinionOf(cummer) < RJWHookupSettings.MinimumRelationshipToHookup) - pawnMemories.TryGainMemory(VariousDefOf.HaterCameInsideFEstrus, cummer); + else if (Pawn.relations.OpinionOf(cummer) <= -5) + pawnMemories.TryGainMemory(VariousDefOf.HaterCameInsideF, cummer); + else if (Pawn.IsInEstrus() && Pawn.relations.OpinionOf(cummer) < RJWHookupSettings.MinimumRelationshipToHookup) + pawnMemories.TryGainMemory(VariousDefOf.HaterCameInsideFEstrus, cummer); else if (!Pawn.relations.DirectRelationExists(PawnRelationDefOf.Spouse, cummer) && !Pawn.relations.DirectRelationExists(PawnRelationDefOf.Fiance, cummer)) { if (Pawn.health.capacities.GetLevel(xxx.reproduction) < 0.50f) pawnMemories.TryGainMemory(VariousDefOf.CameInsideFLowFert, cummer); @@ -1881,15 +1868,15 @@ namespace RJW_Menstruation switch (stage) { case Stage.Follicular: - return (int)(Props.follicularIntervalDays * GenDate.TicksPerDay * (1 + Rand.Range(-cycleVariability, cycleVariability) * 1.5f * variabilityFactor) / (1 + (cycleSpeed - 1) * 1.5f)); + return (int)(Utility.VariationRange(Props.follicularIntervalDays * GenDate.TicksPerDay, cycleVariability * 1.5f * variabilityFactor) / (1 + (cycleSpeed - 1) * 1.5f)); case Stage.Ovulatory: return Props.ovulationIntervalHours * GenDate.TicksPerHour; // No variability for now case Stage.Luteal: - return (int)(Props.lutealIntervalDays * GenDate.TicksPerDay * (1 + Rand.Range(-cycleVariability, cycleVariability) * 0.5f * variabilityFactor) / (1 + (cycleSpeed - 1) * 0.5f)); + return (int)(Utility.VariationRange(Props.lutealIntervalDays * GenDate.TicksPerDay, cycleVariability * 0.5f * variabilityFactor) / (1 + (cycleSpeed - 1) * 0.5f)); case Stage.Bleeding: - return (int)(Props.bleedingIntervalDays * GenDate.TicksPerDay * (1 + Rand.Range(-cycleVariability, cycleVariability) * 0.5f * variabilityFactor) / (1 + (cycleSpeed - 1) * 0.5f)); + return (int)(Utility.VariationRange(Props.bleedingIntervalDays * GenDate.TicksPerDay, cycleVariability * 0.5f * variabilityFactor) / (1 + (cycleSpeed - 1) * 0.5f)); case Stage.Recover: - return (int)(Props.recoveryIntervalDays * GenDate.TicksPerDay * Rand.Range(0.95f, 1.05f)); + return (int)Utility.VariationRange(Props.recoveryIntervalDays * GenDate.TicksPerDay, 0.05f); case Stage.Pregnant: return (int)(MenstruationUtility.GestationHours(pregnancy) * GenDate.TicksPerHour); default: @@ -1917,10 +1904,13 @@ namespace RJW_Menstruation else return Rand.Range(0.6f, 1.0f); } + protected virtual float RandomOvulationChance => (float)Props.ovulationIntervalHours / GenDate.HoursPerDay; + protected Stage RandomStage() { Stage stage = Rand.ElementByWeight( Stage.Follicular, Props.follicularIntervalDays - Props.bleedingIntervalDays, + Stage.Ovulatory, RandomOvulationChance, Stage.Luteal, Props.lutealIntervalDays, Stage.Bleeding, Props.bleedingIntervalDays); @@ -1929,6 +1919,9 @@ namespace RJW_Menstruation case Stage.Follicular: curStageTicks = Rand.Range(0, (Props.follicularIntervalDays - Props.bleedingIntervalDays) * GenDate.TicksPerDay); break; + case Stage.Ovulatory: + curStageTicks = Rand.Range(0, Props.ovulationIntervalHours * GenDate.TicksPerHour); + break; case Stage.Luteal: curStageTicks = Rand.Range(0, Props.lutealIntervalDays * GenDate.TicksPerDay); break; @@ -2029,28 +2022,6 @@ namespace RJW_Menstruation public class HediffComp_Anus : HediffComp { - protected float? originanussize; - - public float OriginAnusSize - { - get - { - if (originanussize == null) - { - originanussize = parent.Severity; - } - return originanussize ?? 0.1f; - } - } - - public override void CompExposeData() - { - base.CompExposeData(); - Scribe_Values.Look(ref originanussize, "originanussize", originanussize, true); - } - - public override void CompPostTick(ref float severityAdjustment) - { - } + public CompProperties_Anus Props => (CompProperties_Anus)props; } } diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_PeriodicOvulator.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_PeriodicOvulator.cs index eb344c3..cfb9a16 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_PeriodicOvulator.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_PeriodicOvulator.cs @@ -1,5 +1,4 @@ using RimWorld; -using System.Linq; using Verse; namespace RJW_Menstruation @@ -29,14 +28,14 @@ namespace RJW_Menstruation protected override void InitializeExtraValues() { - base.InitializeExtraValues(); + base.InitializeExtraValues(); if (averageCycleIntervalTicks < 0) { averageCycleIntervalTicks = (int)(Props.cycleIntervalDays.RandomInRange * GenDate.TicksPerDay / cycleSpeed); if (ticksToNextCycle < -50000) ticksToNextCycle = Rand.Range(0, averageCycleIntervalTicks); // Make the cutoff halfway into cycle, just to be sure there isn't a double-cycle the first time - if ((curStage == Stage.Follicular || curStage == Stage.Luteal || curStage == Stage.Bleeding) + if ((curStage == Stage.Follicular || curStage == Stage.Ovulatory || curStage == Stage.Luteal || curStage == Stage.Bleeding) && (averageCycleIntervalTicks - ticksToNextCycle) / 2 >= GenDate.TicksPerDay * (Props.follicularIntervalDays + Props.lutealIntervalDays) / cycleSpeed) GoNextStage(Stage.Anestrus); } @@ -99,14 +98,14 @@ namespace RJW_Menstruation base.PregnantAction(); if (curStage != Stage.Pregnant) // Go halfway into the cycle - ticksToNextCycle = (int)(averageCycleIntervalTicks * (1 + Rand.Range(-cycleVariability, cycleVariability))) / 2; + ticksToNextCycle = (int)Utility.VariationRange(averageCycleIntervalTicks, cycleVariability) / 2; } protected override void AnestrusAction() { if (ticksToNextCycle <= 0 && IsBreedingSeason()) { - ticksToNextCycle = (int)(averageCycleIntervalTicks * (1 + Rand.Range(-cycleVariability, cycleVariability))); + ticksToNextCycle = (int)Utility.VariationRange(averageCycleIntervalTicks, cycleVariability); GoNextStage(Stage.Follicular); } } diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Pheromones.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Pheromones.cs index 42b2aac..130edcc 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Pheromones.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Pheromones.cs @@ -1,6 +1,7 @@  using RimWorld; +using RimWorld.Planet; using rjw; using System; using System.Collections.Generic; @@ -46,6 +47,8 @@ namespace RJW_Menstruation protected IEnumerable AffectedPawns() { + if(Pawn.GetCaravan() is Caravan caravan) + foreach (Pawn p in caravan.PawnsListForReading.Where(p => p != Pawn)) yield return p; Map mapHeld = Pawn.MapHeld; if (mapHeld == null) yield break; foreach (Pawn pawn in mapHeld.mapPawns.AllPawnsSpawned) diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_PregeneratedBabies.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_PregeneratedBabies.cs index 79c13a9..4ce241f 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_PregeneratedBabies.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_PregeneratedBabies.cs @@ -1,5 +1,4 @@ using HarmonyLib; -using Mono.Cecil.Cil; using RimWorld; using rjw; using System; @@ -203,7 +202,7 @@ namespace RJW_Menstruation if (comp?.HasBaby ?? false) { OutcomeChance thisOutcome = outcome; - Precept_Ritual precept_Ritual = (Precept_Ritual)comp.Pawn.Ideo.GetPrecept(PreceptDefOf.ChildBirth); + Precept_Ritual precept_Ritual = (Precept_Ritual)comp.Pawn.Ideo.GetPrecept(RimWorld.PreceptDefOf.ChildBirth); float birthQuality = PregnancyUtility.GetBirthQualityFor(mother); do { diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs index 75c796f..394c376 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs @@ -1,14 +1,10 @@ using RimWorld; -using RimWorld.Planet; using rjw; using System; using System.Collections.Generic; -using System.Diagnostics.Eventing.Reader; using System.Linq; -using System.Text; using UnityEngine; using Verse; -using Verse.AI; namespace RJW_Menstruation { @@ -141,7 +137,7 @@ namespace RJW_Menstruation else if (gestationProgress < 0.8f) icon = fetustex + "04"; else icon = fetustex + "05"; - return TryGetTwinsIcon(icon, babycount) ?? ContentFinder.Get((icon), true); + return TryGetTwinsIcon(icon, babycount) ?? ContentFinder.Get(icon, true); } public static Texture2D TryGetTwinsIcon(string path, int babycount) @@ -160,7 +156,7 @@ namespace RJW_Menstruation List insectEggs = new List(); comp.Pawn.health.hediffSet.GetHediffs(ref insectEggs); - if (!insectEggs.NullOrEmpty() && insectEggs.Sum(hediff => hediff.eggssize) > 1.0f) return null; // same logic as "Stuffed" in GetInsectEggedIcon + if (insectEggs?.Sum(hediff => hediff.eggssize) > 1.0f) return null; // same logic as "Stuffed" in GetInsectEggedIcon string icon = comp.WombTex; float cumpercent = comp.TotalCumPercent; @@ -183,7 +179,7 @@ namespace RJW_Menstruation else if (cumpercent < 0.89f) icon += "_Cum_15"; else if (cumpercent < 0.95f) icon += "_Cum_16"; else icon += "_Cum_17"; - Texture2D cumtex = ContentFinder.Get((icon), true); + Texture2D cumtex = ContentFinder.Get(icon, true); return cumtex; } public static Texture2D GetInsectEggedIcon(this HediffComp_Menstruation comp) @@ -306,15 +302,13 @@ namespace RJW_Menstruation } - public static Texture2D GetGenitalIcon(this Pawn pawn, HediffComp_Menstruation comp, bool drawOrigin = false) + public static Texture2D GetGenitalIcon(this Pawn pawn, HediffComp_Menstruation comp) { Hediff hediff = comp?.parent; if (hediff == null) return ContentFinder.Get("Genitals/Vagina00", true); //HediffComp_Menstruation comp = hediff.GetMenstruationComp(); string icon; - float severity; - if (drawOrigin) severity = comp.OriginVagSize; - else severity = hediff.Severity; + float severity = hediff.Severity; if (comp != null) icon = comp.VagTex; else icon = "Genitals/Vagina"; @@ -331,30 +325,18 @@ namespace RJW_Menstruation else if (severity < 1.01f) icon += "10"; //cavernous else icon += "11"; //abyssal - return ContentFinder.Get((icon), true); + return ContentFinder.Get(icon, true); } - public static Texture2D GetAnalIcon(this Pawn pawn, bool drawOrigin = false) + public static Texture2D GetAnalIcon(this Pawn pawn) { Hediff hediff = pawn.health.hediffSet.hediffs.FirstOrDefault(h => VariousDefOf.AllAnuses.Contains(h.def)) ?? pawn.health.hediffSet.hediffs.FirstOrDefault(h => h.def.defName.ToLower().Contains("anus")); - if (hediff == null) return ContentFinder.Get(("Genitals/Anal00"), true); + if (hediff == null) return ContentFinder.Get("Genitals/Anal00", true); + + string icon = ((CompProperties_Anus)hediff.GetAnusComp()?.props)?.analTex ?? "Genitals/Anal"; + float severity = hediff.Severity; - string icon; - float severity; - HediffComp_Anus comp = hediff.GetAnusComp(); - if (comp != null) - { - CompProperties_Anus Props = (CompProperties_Anus)comp.props; - icon = Props.analTex ?? "Genitals/Anal"; - if (drawOrigin) severity = comp.OriginAnusSize; - else severity = hediff.Severity; - } - else - { - icon = "Genitals/Anal"; - severity = hediff.Severity; - } if (severity < 0.20f) icon += "00"; //micro else if (severity < 0.40f) icon += "01"; //tight else if (severity < 0.60f) icon += "02"; //average @@ -362,7 +344,7 @@ namespace RJW_Menstruation else if (severity < 1.01f) icon += "04"; //cavernous else icon += "05"; //abyssal - return ContentFinder.Get((icon), true); + return ContentFinder.Get(icon, true); } public static float GestationHours(this Hediff hediff) @@ -398,7 +380,8 @@ namespace RJW_Menstruation if (!Configurations.EnableAnimalCycle && pawn.IsAnimal()) return false; if (pawn.GetComp() != null) return false; if (pawn.RaceHasOviPregnancy()) return false; - if (ModsConfig.BiotechActive && pawn.genes != null && + + if (ModsConfig.BiotechActive && pawn.genes != null && pawn.genes.GenesListForReading.Select(gene => gene.def).Intersect(VariousDefOf.EggLayerGenes).Any()) return false; return true; @@ -452,7 +435,7 @@ namespace RJW_Menstruation if (precept != null) return true; else return pawn.IsBreeder() || - pawn.HasImpregnationFetish(); + pawn.HasImpregnationFetish(); } public static float DamagePants(this Pawn pawn, float fluidAmount) diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Hediff_Estrus.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Hediff_Estrus.cs index 6c7f462..26fa191 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Hediff_Estrus.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Hediff_Estrus.cs @@ -1,5 +1,4 @@ -using RimWorld; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using Verse; diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs index 61ce541..b7877d2 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs @@ -1,10 +1,7 @@ using RimWorld; using rjw; -using System; using System.Collections.Generic; using System.Linq; -using System.Reflection; -using System.Text; using Verse; namespace RJW_Menstruation diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/MenstruationModExtension.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/MenstruationModExtension.cs new file mode 100644 index 0000000..c3a8fbe --- /dev/null +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/MenstruationModExtension.cs @@ -0,0 +1,15 @@ +using Verse; + +namespace RJW_Menstruation +{ + public class MenstruationModExtension : DefModExtension + { + public float eggLifeTimeFactor = 1.0f; + public bool neverEstrus = false; + public bool alwaysEstrus = false; + public float ovulationFactor = 1.0f; + public bool noBleeding = false; + + public bool disableCycle = false; + } +} diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Biotech_Patch.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Biotech_Patch.cs index eb8777a..0125f26 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Biotech_Patch.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Biotech_Patch.cs @@ -1,11 +1,11 @@ using HarmonyLib; -using System.Linq; using RimWorld; -using Verse; -using System.Collections.Generic; -using System.Reflection; using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; using System.Reflection.Emit; +using Verse; namespace RJW_Menstruation { @@ -195,8 +195,9 @@ namespace RJW_Menstruation [HarmonyPatch(typeof(Pawn_GeneTracker), "Notify_GenesChanged")] public class Notify_GenesChanged_Patch { - public static void Postfix(Pawn_GeneTracker __instance) + public static void Postfix(Pawn_GeneTracker __instance, GeneDef addedOrRemovedGene) { + if (!addedOrRemovedGene.HasModExtension()) return; foreach (HediffComp_Menstruation comp in __instance.pawn.GetMenstruationComps()) comp.Notify_UpdatedGenes(); } diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Gizmo_Patch.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Gizmo_Patch.cs index b0ab1a3..92b8b16 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Gizmo_Patch.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Gizmo_Patch.cs @@ -2,7 +2,6 @@ using RimWorld; using rjw; using System.Collections.Generic; -using System.Linq; using System.Text; using UnityEngine; using Verse; diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Harmony.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Harmony.cs index 7194d0e..6e86da5 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Harmony.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Harmony.cs @@ -1,5 +1,4 @@ -using AlienRace; -using HarmonyLib; +using HarmonyLib; using rjw; using rjw.Modules.Interactions.Internals.Implementation; using rjw.Modules.Interactions.Rules.PartKindUsageRules; diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs index 98e5997..c2f1176 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/Pawn_Patch.cs @@ -1,6 +1,5 @@ using HarmonyLib; using RimWorld; -using rjw; using System; using System.Collections.Generic; using System.Linq; diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/PregnancyCommon.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/PregnancyCommon.cs index 7cbf28c..9b9bdad 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/PregnancyCommon.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/PregnancyCommon.cs @@ -20,9 +20,8 @@ namespace RJW_Menstruation StringBuilder res = new StringBuilder(); - IEnumerable babiesdistinct = babies.Distinct(new RaceComparer()); int iteration = 0; - foreach (Pawn baby in babiesdistinct) + foreach (Pawn baby in babies.Distinct(new RaceComparer())) { int num = babies.Where(x => x.def.Equals(baby.def)).Count(); if (iteration > 0) res.Append(", "); @@ -43,9 +42,8 @@ namespace RJW_Menstruation if (!is_parent_known && Configurations.InfoDetail != Configurations.DetailLevel.All) return res.Append(Translations.Dialog_FatherUnknown).ToString(); - IEnumerable babiesdistinct = babies.Distinct(new FatherComparer(mother)); int iteration = 0; - foreach (Pawn baby in babiesdistinct) + foreach (Pawn baby in babies.Distinct(new FatherComparer(mother))) { if (iteration > 0) res.Append(", "); res.Append(Utility.GetFather(baby, mother)?.LabelShort ?? Translations.Dialog_FatherUnknown); diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj b/1.4/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj index 0c4aa45..2577bb6 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj @@ -74,6 +74,7 @@ + @@ -108,10 +109,6 @@ ..\..\..\..\..\..\..\..\workshop\content\294100\2830943477\1.4\Assemblies\AnimalGenetics.dll False - - ..\..\..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll - False - ..\..\..\..\..\rjw\1.4\Assemblies\RJW.dll False @@ -172,6 +169,9 @@ + + 1.4.3901 + 2.2.2 runtime diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Things.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Things.cs index cfee336..c95454a 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Things.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Things.cs @@ -219,14 +219,14 @@ namespace RJW_Menstruation public void CheckDirty() { - if (absorbedfluids > this.GetStatValue(VariousDefOf.MaxAbsorbable) && !(Wearer?.apparel?.IsLocked(this) ?? false)) + if (absorbedfluids > this.GetStatValue(VariousDefOf.MaxAbsorbable) && !(Wearer?.apparel?.IsLocked(this) ?? false) && DirtyDef != def && DirtyDef != null) { + bool oldHasStats = !def.equippedStatOffsets.NullOrEmpty(); + bool newHasStats = !DirtyDef.equippedStatOffsets.NullOrEmpty(); def = DirtyDef; dirty = true; - OutfitForcedHandler forcedHandler = Wearer.outfits?.forcedHandler; - if (forcedHandler?.IsForced(this) ?? false) - forcedHandler.SetForced(this, false); - if (!def.equippedStatOffsets.NullOrEmpty()) + Wearer.outfits?.forcedHandler?.SetForced(this, false); + if (oldHasStats || newHasStats) Wearer.health.capacities.Notify_CapacityLevelsDirty(); Wearer.apparel.Notify_ApparelChanged(); } @@ -272,7 +272,7 @@ namespace RJW_Menstruation public override void DirtyEffect(int tickInterval) { - if (wearTicks > MinHrstoDirtyEffect * GenDate.TicksPerHour && Rand.MTBEventOccurs(100.0f, GenDate.TicksPerHour, tickInterval) && !Wearer.apparel.IsLocked(this)) + if (wearTicks > MinHrstoDirtyEffect * GenDate.TicksPerHour && Rand.MTBEventOccurs(100.0f, GenDate.TicksPerHour, tickInterval) && !(Wearer.apparel?.IsLocked(this) ?? false)) { Wearer.health.AddHediff(HediffDefOf.WoundInfection, Genital_Helper.get_genitalsBPR(Wearer)); } diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs index 0448aac..2820b53 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs @@ -227,7 +227,7 @@ namespace RJW_Menstruation string feinfo = PregnancyCommon.GetBabyInfo(babiescomp?.babies); string fainfo = PregnancyCommon.GetFatherInfo(babiescomp?.babies, babiescomp.Pawn, true) + " "; // Keep all parents known, for now - if (feinfo == "Null") feinfo = "1 " + p.Mother.def.label + " " + Translations.Dialog_WombInfo02; + if (feinfo == "Null") feinfo = "1 " + (p.Mother ?? pawn).def.label + " " + Translations.Dialog_WombInfo02; if (fainfo == "Null ") { string father = p.Father?.LabelShort ?? Translations.Dialog_FatherUnknown; @@ -388,10 +388,9 @@ namespace RJW_Menstruation Rect genitalIconRect = new Rect(rect.x, rect.y + fontheight, genitalRectWidth, genitalRectHeight); Rect genitalVaginaLabelRect = new Rect(rect.x, rect.y + 10f, genitalRectWidth, fontheight); Rect genitalAnusLabelRect = new Rect(rect.x, rect.y + fontheight + genitalRectHeight, genitalRectWidth, fontheight); - bool showOrigin = Mouse.IsOver(genitalIconRect) && Input.GetMouseButton(0); - vagina = pawn.GetGenitalIcon(comp, showOrigin); - anal = pawn.GetAnalIcon(showOrigin); + vagina = pawn.GetGenitalIcon(comp); + anal = pawn.GetAnalIcon(); GUI.color = new Color(1.00f, 0.47f, 0.47f, 1); GUI.Box(rect, "", boxstyle); GUI.color = Utility.SafeSkinColor(pawn); diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Utility.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Utility.cs index ae2cb4a..0020d86 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Utility.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Utility.cs @@ -80,7 +80,7 @@ namespace RJW_Menstruation try { - res = part.FluidAmmount * part.FluidModifier * pawn.BodySize / pawn.RaceProps.baseBodySize * Rand.Range(0.8f, 1.2f); + res = VariationRange(part.FluidAmmount * part.FluidModifier * pawn.BodySize / pawn.RaceProps.baseBodySize, 0.2f); } catch (NullReferenceException) { diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs index e3f8f66..16903b2 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs @@ -45,14 +45,6 @@ namespace RJW_Menstruation public static readonly RecordDef AmountofCreampied = DefDatabase.GetNamed("AmountofCreampied"); public static readonly RecordDef AmountofFertilizedEggs = DefDatabase.GetNamed("AmountofFertilizedEggs"); public static readonly TaleDef TaleCameInside = DefDatabase.GetNamed("CameInside"); - public static readonly GeneDef ShortEggLifetime = DefDatabase.GetNamed("Menstruation_ShortEggLifetime"); - public static readonly GeneDef DoubleEggLifetime = DefDatabase.GetNamed("Menstruation_DoubleEggLifetime"); - public static readonly GeneDef QuadEggLifetime = DefDatabase.GetNamed("Menstruation_QuadEggLifetime"); - public static readonly GeneDef NeverEstrus = DefDatabase.GetNamed("Menstruation_NeverEstrus"); - public static readonly GeneDef FullEstrus = DefDatabase.GetNamed("Menstruation_FullEstrus"); - public static readonly GeneDef DoubleOvulation = DefDatabase.GetNamed("Menstruation_DoubleOvulation"); - public static readonly GeneDef QuadOvulation = DefDatabase.GetNamed("Menstruation_QuadOvulation"); - public static readonly GeneDef NoBleeding = DefDatabase.GetNamed("Menstruation_NoBleeding"); private static List allraces = null; private static List allkinds = null; @@ -66,9 +58,8 @@ namespace RJW_Menstruation get { if (allraces != null) return allraces; + allraces = DefDatabase.AllDefsListForReading.Where(thingdef => thingdef.race?.IsFlesh ?? false).ToList(); - List allThings = DefDatabase.AllDefsListForReading; - allraces = allThings.FindAll(x => x.race != null && x.race.IsFlesh); return allraces; } } @@ -77,9 +68,8 @@ namespace RJW_Menstruation get { if (allkinds != null) return allkinds; + allkinds = DefDatabase.AllDefsListForReading.Where(pawnkinddef => pawnkinddef.race != null).ToList(); - List allKinds = DefDatabase.AllDefsListForReading; - allkinds = allKinds.FindAll(x => x.race != null); return allkinds; } } @@ -157,13 +147,7 @@ namespace RJW_Menstruation get { if (egglayergenes != null) return egglayergenes; - egglayergenes = new HashSet - { - DefDatabase.GetNamedSilentFail("AG_EggLaying"), // Alpha Genes - DefDatabase.GetNamedSilentFail("VRESaurids_Oviparous"), // VE Saurid - DefDatabase.GetNamedSilentFail("VRE_SaplingBirth"), // VE Phytokin - }; - egglayergenes.Remove(null); + egglayergenes = DefDatabase.AllDefsListForReading.Where(geneDef => geneDef.GetModExtension()?.disableCycle ?? false).ToHashSet(); return egglayergenes; } diff --git a/About/About.xml b/About/About.xml index 9c10224..c4c11a0 100644 --- a/About/About.xml +++ b/About/About.xml @@ -1,7 +1,9 @@ + rjw.menstruation RJW Menstruation Cycle lutepickle + https://gitgud.io/lutepickle/rjw_menstruation/
  • 1.2
  • 1.3
  • @@ -28,13 +30,17 @@
  • Abraxas.RJW.RaceSupport
  • rjw.milk.humanoid
  • - rjw.menstruation + + +
  • conit.thebirdsandthebees
  • +
    +
    Adds menstruation mechanics to vaginas: Wombs cycle between follicular, luteal, and bleeding phases Tracks eggs ovulated and cum in wombs to determine pregnancy Womb icon and status window -Estrus effects +Estrus and pheromone effects Race-specific fetus images for many vanilla animals Pregnancies from multiple eggs and different fathers Identical siblings diff --git a/About/Manifest.xml b/About/Manifest.xml index 6b4c770..09e409c 100644 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,7 +1,7 @@ RJW Menstruation - 1.0.9.3 + 1.0.9.4 diff --git a/changelogs.txt b/changelogs.txt index e6f1bf5..4c92c4f 100644 --- a/changelogs.txt +++ b/changelogs.txt @@ -1,3 +1,8 @@ +Version 1.0.9.4 + - Added graphics for the menstruation genes with thanks to Alpenglow. + - Pawns in estrus now give their pheromones to their caravan-mates. + - Pawns with the egglaying genes from Erin's Corvyia and Outland - Genetics no longer have a menstrual cycle. + Version 1.0.9.3 - The biosculptor egg restoration cycle will now give more eggs to races that ovulate more than one egg at a time. - All pawns can now use all menstruation genes, regardless of gender or having a womb.