mirror of
https://gitgud.io/lutepickle/rjw_menstruation.git
synced 2024-08-14 22:46:52 +00:00
Compare commits
32 commits
8022b464bf
...
fb275e6d55
Author | SHA1 | Date | |
---|---|---|---|
|
fb275e6d55 | ||
|
e6d2446376 | ||
|
8de3864a8e | ||
|
2ac4e1f8e5 | ||
|
cb8a001cdf | ||
|
f7e3d6c1c4 | ||
|
310c03a193 | ||
|
9ec87537f8 | ||
|
e5aa310528 | ||
|
130ad4df29 | ||
|
5924c73b2f | ||
|
f7348ccee8 | ||
|
93855c5ee7 | ||
|
b81a07c172 | ||
|
9aab479fe6 | ||
|
699b3aa6d2 | ||
|
de2da85558 | ||
|
c05d8bad79 | ||
|
65b69eaf76 | ||
|
2798d923b1 | ||
|
3646f1135b | ||
|
1aaaf50b64 | ||
|
2bb0871919 | ||
|
4504d02245 | ||
|
98cfa23b88 | ||
|
c8d32f883f | ||
|
7825418da9 | ||
|
325b60b51c | ||
|
8000949752 | ||
|
765b85dc2c | ||
|
6cf5cba76b | ||
|
8768c1b7e7 |
37 changed files with 468 additions and 231 deletions
Binary file not shown.
|
@ -120,6 +120,8 @@
|
|||
<Option_EstrusRelationship_Label>Hookup minimum opinion in estrus</Option_EstrusRelationship_Label>
|
||||
<EstimatedCumLifespan>Estimated sperm lifespan</EstimatedCumLifespan>
|
||||
<EstimatedEggLifespan>Estimated egg lifespan</EstimatedEggLifespan>
|
||||
<OvulationChanceLabel>Ovulation {0}</OvulationChanceLabel>
|
||||
<OvulationChanceDesc>Chance of each egg being released during ovulation.</OvulationChanceDesc>
|
||||
<FertilityDesc>Implantation chance of fertilized eggs. Chance of fertilization this hour: {0}%</FertilityDesc>
|
||||
<Option_PregnancyFromBaseRJW_Label>Use basic RJW pregnancy</Option_PregnancyFromBaseRJW_Label>
|
||||
<Option_PregnancyFromMultiplePregnancy_Label>Use menstruation multiple pregnancy</Option_PregnancyFromMultiplePregnancy_Label>
|
||||
|
|
11
1.4/Languages/Korean/DefInjected/HediffDef/Hediffs_Cum.xml
Normal file
11
1.4/Languages/Korean/DefInjected/HediffDef/Hediffs_Cum.xml
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<Hediff_ASA.label>항정자 항체</Hediff_ASA.label>
|
||||
<Hediff_ASA.labelNoun>항정자 항체</Hediff_ASA.labelNoun>
|
||||
<Hediff_ASA.description>항정자 항체. 정자의 생존 시간을 줄입니다.</Hediff_ASA.description>
|
||||
<Hediff_ASA.labelNounPretty>{0}(은)는 항정자 항체를 가졌습니다.</Hediff_ASA.labelNounPretty>
|
||||
<Hediff_ForceFertile.label>좋은 임신률</Hediff_ForceFertile.label>
|
||||
<Hediff_ForceFertile.labelNoun>좋은 임신률</Hediff_ForceFertile.labelNoun>
|
||||
<Hediff_ForceFertile.description>좋은 임신률</Hediff_ForceFertile.description>
|
||||
<Hediff_ForceFertile.labelNounPretty>{0}(은)는 좋은 임신률을 가지고 있습니다.</Hediff_ForceFertile.labelNounPretty>
|
||||
</LanguageData>
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<Hediff_MenstrualCramp.label>생리통</Hediff_MenstrualCramp.label>
|
||||
<Hediff_MenstrualCramp.description>생리 주기가 끝날 때 보지에서 출혈이 있습니다.
|
||||
종종 고통스럽습니다.</Hediff_MenstrualCramp.description>
|
||||
<Hediff_MenstrualCramp.stages.0.label>불편함</Hediff_MenstrualCramp.stages.0.label>
|
||||
<Hediff_MenstrualCramp.stages.1.label>짜증남</Hediff_MenstrualCramp.stages.1.label>
|
||||
<Hediff_MenstrualCramp.stages.2.label>아픔</Hediff_MenstrualCramp.stages.2.label>
|
||||
<Hediff_MenstrualCramp.stages.3.label>고통스러움</Hediff_MenstrualCramp.stages.3.label>
|
||||
<Hediff_Estrus.label>발정기</Hediff_Estrus.label>
|
||||
<Hediff_Estrus.description>자궁이 생리 주기의 가장 비옥한 단계로 접어든 상태입니다. 신체가 임신하기를 갈망함에 따라 성적 흥분과 욕망은 극적으로 증가합니다.
|
||||
질내 성교의 가능성이 증가하고 잠재적으로 짝짓기 선택의 기준이 낮아집니다.</Hediff_Estrus.description>
|
||||
<Hediff_Estrus_Concealed.label>발정기(숨김)</Hediff_Estrus_Concealed.label>
|
||||
<Hediff_Estrus_Concealed.description>자궁이 생리 주기의 가장 비옥한 단계로 접어든 상태입니다. 성적 흥분과 욕망이 약간 증가합니다.
|
||||
질내 성교의 가능성이 약간 증가합니다.</Hediff_Estrus_Concealed.description>
|
||||
<Hediff_PainReliever.label>진통제</Hediff_PainReliever.label>
|
||||
<Hediff_PainReliever.description>생리통(및 기타)의 통증을 완화해 줍니다.</Hediff_PainReliever.description>
|
||||
<Hediff_Cyclosporine.label>면역 억제제</Hediff_Cyclosporine.label>
|
||||
<Hediff_Cyclosporine.description>면역 억제제의 영향으로, 감염과 질병을 물리치는 신체의 면역력이 떨어집니다.</Hediff_Cyclosporine.description>
|
||||
</LanguageData>
|
|
@ -1,18 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<Hediff_MenstrualCramp.label>생리통</Hediff_MenstrualCramp.label>
|
||||
<Hediff_MenstrualCramp.description>생리중입니다.</Hediff_MenstrualCramp.description>
|
||||
<Hediff_MenstrualCramp.stages.0.label>불편함</Hediff_MenstrualCramp.stages.0.label>
|
||||
<Hediff_MenstrualCramp.stages.1.label>짜증남</Hediff_MenstrualCramp.stages.1.label>
|
||||
<Hediff_MenstrualCramp.stages.2.label>아픔</Hediff_MenstrualCramp.stages.2.label>
|
||||
<Hediff_MenstrualCramp.stages.3.label>고통스러움</Hediff_MenstrualCramp.stages.3.label>
|
||||
<Hediff_Estrus.label>발정기</Hediff_Estrus.label>
|
||||
<Hediff_Estrus.description>발정기입니다.</Hediff_Estrus.description>
|
||||
<Hediff_Estrus_Concealed.label>발정기(숨김)</Hediff_Estrus_Concealed.label>
|
||||
<Hediff_Estrus_Concealed.description>발정기입니다.</Hediff_Estrus_Concealed.description>
|
||||
<Hediff_PainReliever.label>진통제</Hediff_PainReliever.label>
|
||||
<Hediff_PainReliever.description>약간의 고통을 줄여줍니다.</Hediff_PainReliever.description>
|
||||
|
||||
|
||||
|
||||
</LanguageData>
|
|
@ -1,7 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<VaginaWashing.reportString>질세척 하는중</VaginaWashing.reportString>
|
||||
|
||||
|
||||
|
||||
</LanguageData>
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<LactateSelf.reportString>스스로 젖 짜는 중</LactateSelf.reportString>
|
||||
</LanguageData>
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<OpenStatusWindow.label>생리: 상태 창을 엽니다.</OpenStatusWindow.label>
|
||||
</LanguageData>
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<Surgery_ExpandAreola.label>유륜확대 수술</Surgery_ExpandAreola.label>
|
||||
<Surgery_ExpandAreola.description>유륜을 크게만듭니다.</Surgery_ExpandAreola.description>
|
||||
<Surgery_ExpandAreola.jobString>유륜확대 수술중</Surgery_ExpandAreola.jobString>
|
||||
<Surgery_ContractAreola.label>유륜축소 수술</Surgery_ContractAreola.label>
|
||||
<Surgery_ContractAreola.description>유륜을 작게만듭니다.</Surgery_ContractAreola.description>
|
||||
<Surgery_ContractAreola.jobString>유륜축소 수술중</Surgery_ContractAreola.jobString>
|
||||
<Surgery_ExpandNipple.label>유두확대 수술</Surgery_ExpandNipple.label>
|
||||
<Surgery_ExpandNipple.description>유두를 크게만듭니다.</Surgery_ExpandNipple.description>
|
||||
<Surgery_ExpandNipple.jobString>유두확대 수술중</Surgery_ExpandNipple.jobString>
|
||||
<Surgery_ContractNipple.label>유두축소 수술</Surgery_ContractNipple.label>
|
||||
<Surgery_ContractNipple.description>유두를 작게만듭니다.</Surgery_ContractNipple.description>
|
||||
<Surgery_ContractNipple.jobString>유두축소 수술중</Surgery_ContractNipple.jobString>
|
||||
</LanguageData>
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<LanguageData>
|
||||
<Surgery_ExpandAreola.label>유륜 확대</Surgery_ExpandAreola.label>
|
||||
<Surgery_ExpandAreola.description>유륜을 크게 만듭니다.</Surgery_ExpandAreola.description>
|
||||
<Surgery_ExpandAreola.jobString>유륜 확대 중</Surgery_ExpandAreola.jobString>
|
||||
<Surgery_ContractAreola.label>유륜 축소</Surgery_ContractAreola.label>
|
||||
<Surgery_ContractAreola.description>유륜을 작게 만듭니다.</Surgery_ContractAreola.description>
|
||||
<Surgery_ContractAreola.jobString>유륜 축소 중</Surgery_ContractAreola.jobString>
|
||||
<Surgery_ExpandNipple.label>유두 확대</Surgery_ExpandNipple.label>
|
||||
<Surgery_ExpandNipple.description>유두를 크게 만듭니다.</Surgery_ExpandNipple.description>
|
||||
<Surgery_ExpandNipple.jobString>유두 확대 중</Surgery_ExpandNipple.jobString>
|
||||
<Surgery_ContractNipple.label>유두 축소</Surgery_ContractNipple.label>
|
||||
<Surgery_ContractNipple.description>유두를 작게 만듭니다.</Surgery_ContractNipple.description>
|
||||
<Surgery_ContractNipple.jobString>유두 축소 중</Surgery_ContractNipple.jobString>
|
||||
<Surgery_DarkenNipple.label>유두 흑화</Surgery_DarkenNipple.label>
|
||||
<Surgery_DarkenNipple.description>유두를 어둡게 만듭니다.</Surgery_DarkenNipple.description>
|
||||
<Surgery_DarkenNipple.jobString>유두 흑화 중</Surgery_DarkenNipple.jobString>
|
||||
<Surgery_LightenNipple.label>유두 미백</Surgery_LightenNipple.label>
|
||||
<Surgery_LightenNipple.description>유두를 밝게 만듭니다.</Surgery_LightenNipple.description>
|
||||
<Surgery_LightenNipple.jobString>유두 미백 중</Surgery_LightenNipple.jobString>
|
||||
</LanguageData>
|
|
@ -1,5 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<AmountofCreampied.label>질내사정</AmountofCreampied.label>
|
||||
<AmountofCreampied.description>질내사정당한 정액 양</AmountofCreampied.description>
|
||||
</LanguageData>
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<AmountofCreampied.label>질내사정</AmountofCreampied.label>
|
||||
<AmountofCreampied.description>질내사정당한 정액 양</AmountofCreampied.description>
|
||||
<AmountofFertilizedEggs.label>수정된 알</AmountofFertilizedEggs.label>
|
||||
<AmountofFertilizedEggs.description>정자에 의해 수정된 알의 갯수</AmountofFertilizedEggs.description>
|
||||
</LanguageData>
|
|
@ -1,7 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<MaxAbsorbable.label>흡수량</MaxAbsorbable.label>
|
||||
<MaxAbsorbable.description>액체를 흡수할수 있는 정도입니다.</MaxAbsorbable.description>
|
||||
|
||||
|
||||
</LanguageData>
|
20
1.4/Languages/Korean/DefInjected/TaleDef/Tales_Cum.xml
Normal file
20
1.4/Languages/Korean/DefInjected/TaleDef/Tales_Cum.xml
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<CameInside.label>질내사정</CameInside.label>
|
||||
<CameInside.rulePack.rulesStrings.0>tale_noun->[FUCKER_nameDef](은)는 [FUCKED_nameDef]의 안에 들어갔다.</CameInside.rulePack.rulesStrings.0>
|
||||
<CameInside.rulePack.rulesStrings.1>image->[FUCKER_nameFull]의 자지는 [circumstance_group] [FUCKED_nameFull]의 보지 안에 깊숙히 들어갔다.</CameInside.rulePack.rulesStrings.1>
|
||||
<CameInside.rulePack.rulesStrings.2>image->[FUCKER_nameFull]의 자지는 [circumstance_group] [FUCKED_nameFull]의 보지 속으로 사라졌다.</CameInside.rulePack.rulesStrings.2>
|
||||
<CameInside.rulePack.rulesStrings.3>image->[FUCKED_nameFull]의 보지는 [circumstance_group] [FUCKER_nameFull]의 자지로 꽉 채워졌다.</CameInside.rulePack.rulesStrings.3>
|
||||
<CameInside.rulePack.rulesStrings.4>image->[FUCKED_nameFull]의 보지는 [circumstance_group] [FUCKER_nameFull]의 자지를 꽉꽉 물어대었다.</CameInside.rulePack.rulesStrings.4>
|
||||
<CameInside.rulePack.rulesStrings.5>circumstance_phrase->[FUCKER_nameDef](이)가 흥분에 이를 갈 때</CameInside.rulePack.rulesStrings.5>
|
||||
<CameInside.rulePack.rulesStrings.6>circumstance_phrase->[FUCKER_nameDef](이)가 만족스런 미소를 짓는 동안</CameInside.rulePack.rulesStrings.6>
|
||||
<CameInside.rulePack.rulesStrings.7>circumstance_phrase->[FUCKED_nameDef]쾌락에 몸을 떨 때</CameInside.rulePack.rulesStrings.7>
|
||||
<CameInside.rulePack.rulesStrings.8>circumstance_phrase->[FUCKER_nameDef](이)가 [FUCKED_nameDef]에게 한 발 쌀 동안</CameInside.rulePack.rulesStrings.8>
|
||||
<CameInside.rulePack.rulesStrings.9>circumstance_phrase->[FUCKED_nameDef](이)가 미소로 [FUCKER_nameDef]의 눈을 마주칠 때</CameInside.rulePack.rulesStrings.9>
|
||||
<CameInside.rulePack.rulesStrings.10>desc_sentence->[FUCKER_nameDef]의 정액이 [FUCKED_nameDef]의 보지를 넘어 바닥에 넘쳐흘렀다.</CameInside.rulePack.rulesStrings.10>
|
||||
<CameInside.rulePack.rulesStrings.11>desc_sentence->[FUCKER_nameDef]의 정자가 [FUCKED_nameDef]의 자궁에서 경주를 벌이고, 끝내 [FUCKED_possessive]의 난자에 도달했다.</CameInside.rulePack.rulesStrings.11>
|
||||
<CameInside.rulePack.rulesStrings.12>desc_sentence->[FUCKER_nameDef]의 정액이 [FUCKED_nameDef]의 자궁에 쏟아졌다.</CameInside.rulePack.rulesStrings.12>
|
||||
<CameInside.rulePack.rulesStrings.13>desc_sentence->[FUCKED_nameDef]의 자궁은 정액으로 가득찼다.</CameInside.rulePack.rulesStrings.13>
|
||||
<CameInside.rulePack.rulesStrings.14>desc_sentence->[FUCKER_nameDef]의 얼굴에 땀이 흘러내렸다.</CameInside.rulePack.rulesStrings.14>
|
||||
<CameInside.rulePack.rulesStrings.15>desc_sentence->[FUCKED_nameDef](은)는 심하게 헐떡였다.</CameInside.rulePack.rulesStrings.15>
|
||||
</LanguageData>
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<Absorber.label>성기</Absorber.label>
|
||||
</LanguageData>
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<Absorber_Tampon.label>탐폰</Absorber_Tampon.label>
|
||||
<Absorber_Tampon.description>보지에서 나오는 액체를 흡수하는 탐폰입니다.
|
||||
오래 착용하고 있을 경우 감염이 발생할수도 있습니다.</Absorber_Tampon.description>
|
||||
<Absorber_Tampon_Dirty.label>더러운 탐폰</Absorber_Tampon_Dirty.label>
|
||||
<Absorber_Tampon_Dirty.description>사용된 축축한 탐폰입니다.</Absorber_Tampon_Dirty.description>
|
||||
<Absorber_Pad.label>생리대</Absorber_Pad.label>
|
||||
<Absorber_Pad.description>보지에서 나오는 액체를 흡수하는 생리대입니다.
|
||||
흡수량 이상의 액체가 나올경우 샐수있습니다.</Absorber_Pad.description>
|
||||
<Absorber_Pad_Dirty.label>젖은 생리대</Absorber_Pad_Dirty.label>
|
||||
<Absorber_Pad_Dirty.description>사용된 축축한 생리대입니다.</Absorber_Pad_Dirty.description>
|
||||
</LanguageData>
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<FilthMixture.label>혼합물</FilthMixture.label>
|
||||
</LanguageData>
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<OvaryRegenerationPill.label>난소 재생약</OvaryRegenerationPill.label>
|
||||
<OvaryRegenerationPill.description>난소를 재생시켜 평생 배출할 수 있는 난자의 총 양을 복구시킵니다.
|
||||
난자 소모량이 클수록 효과가 줄어듭니다.
|
||||
폐경을 회복시키지 않습니다.</OvaryRegenerationPill.description>
|
||||
<SuperovulationInducingAgent.label>과배란 유도제</SuperovulationInducingAgent.label>
|
||||
<SuperovulationInducingAgent.description>과배란을 유도하는 약물입니다. 과배란을 유도하여 다음 배란에서 1-4개의 여분의 난자를 배란합니다.
|
||||
조기폐경을 초래할수도 있습니다.</SuperovulationInducingAgent.description>
|
||||
<PainReliever.label>진통제</PainReliever.label>
|
||||
<PainReliever.description>24시간 동안 생리통을 완화시켜 줍니다.
|
||||
|
||||
다른 통증에도 효과적입니다.</PainReliever.description>
|
||||
<Cyclosporine.label>면역 억제제</Cyclosporine.label>
|
||||
<Cyclosporine.description>면역 억제제.
|
||||
항정자 항체를 치료할 수 있지만, 24시간 동안 감염과 질병을 퇴치하는 신체의 면역력을 떨어뜨립니다. 복용하면 정자의 생존 시간을 늘립니다.</Cyclosporine.description>
|
||||
</LanguageData>
|
|
@ -1,20 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<Absorber_Tampon.label>탐폰</Absorber_Tampon.label>
|
||||
<Absorber_Tampon.description>보지에서 나오는 액체를 흡수하는 탐폰입니다. 오래 착용하고 있을 경우 감염이 발생할수도 있습니다.</Absorber_Tampon.description>
|
||||
<Absorber_Tampon_Dirty.label>더러운 탐폰</Absorber_Tampon_Dirty.label>
|
||||
<Absorber_Tampon_Dirty.description>사용된 축축한 탐폰입니다.</Absorber_Tampon_Dirty.description>
|
||||
<Absorber_Pad.label>생리대</Absorber_Pad.label>
|
||||
<Absorber_Pad.description>보지에서 나오는 액체를 흡수하는 생리대입니다. 흡수량 이상의 액체가 나올경우 샐수있습니다.</Absorber_Pad.description>
|
||||
<Absorber_Pad_Dirty.label>젖은 생리대</Absorber_Pad_Dirty.label>
|
||||
<Absorber_Pad_Dirty.description>사용된 축축한 생리대입니다.</Absorber_Pad_Dirty.description>
|
||||
<OvaryRegenerationPill.label>난소 재생약</OvaryRegenerationPill.label>
|
||||
<OvaryRegenerationPill.description>난소를 재생시켜 배출할수있는 난자의 양을 증가시킵니다. 난자 소모량이 클수록 효과가 줄어듭니다. 폐경을 회복시키지 않습니다.</OvaryRegenerationPill.description>
|
||||
<SuperovulationInducingAgent.label>과배란 유도제</SuperovulationInducingAgent.label>
|
||||
<SuperovulationInducingAgent.description>과배란을 유도하는 약물입니다. 조기폐경을 초래할수도 있습니다.</SuperovulationInducingAgent.description>
|
||||
<PainReliever.label>진통제</PainReliever.label>
|
||||
<PainReliever.description>하루동안 약간의 통증을 줄여줍니다.</PainReliever.description>
|
||||
<FilthMixture.label>혼합물</FilthMixture.label>
|
||||
|
||||
|
||||
</LanguageData>
|
|
@ -1,29 +1,32 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<LeakingFluids.stages.0.label>가랑이가 축축함</LeakingFluids.stages.0.label>
|
||||
<LeakingFluids.stages.0.description>찝찝해...</LeakingFluids.stages.0.description>
|
||||
<CameInsideF.stages.0.label>{0}에게 질내사정당함</CameInsideF.stages.0.label>
|
||||
<CameInsideF.stages.0.description>임신할까봐 걱정돼...</CameInsideF.stages.0.description>
|
||||
<LeakingFluids.stages.0.description>이걸 닦아낼 뭔가가 없을까?
|
||||
</LeakingFluids.stages.0.description>
|
||||
<HaterCameInsideM.stages.0.label>{0}에게 질내사정함</HaterCameInsideM.stages.0.label>
|
||||
<HaterCameInsideM.stages.0.description>그 년한테 질싸를 했어!</HaterCameInsideM.stages.0.description>
|
||||
<CameInsideM.stages.0.label>{0}에게 질내사정함</CameInsideM.stages.0.label>
|
||||
<CameInsideM.stages.0.description>질싸를하니 기분이 좋네.</CameInsideM.stages.0.description>
|
||||
<CameInsideFFetish.stages.0.label>{0}에게 질내사정당함</CameInsideFFetish.stages.0.label>
|
||||
<CameInsideFFetish.stages.0.description>임신하면 좋을 텐데.</CameInsideFFetish.stages.0.description>
|
||||
<HaterCameInsideF.stages.0.label>{0}에게 질내사정당함</HaterCameInsideF.stages.0.label>
|
||||
<HaterCameInsideF.stages.0.description>나는 그 새끼의 자식을 임신하고 싶지 않아!</HaterCameInsideF.stages.0.description>
|
||||
<HaterCameInsideFEstrus.stages.0.label>{0}에게 질내사정당함</HaterCameInsideFEstrus.stages.0.label>
|
||||
<HaterCameInsideFEstrus.stages.0.description>아. 이런 일을 당해야 하다니...</HaterCameInsideFEstrus.stages.0.description>
|
||||
<CameInsideFLowFert.stages.0.label>{0}에게 질내사정당함</CameInsideFLowFert.stages.0.label>
|
||||
<CameInsideFLowFert.stages.0.description>확률은 낮겠지만 임신할까봐 걱정돼...</CameInsideFLowFert.stages.0.description>
|
||||
<CameInsideFFetish.stages.0.label>{0}에게 질내사정당함</CameInsideFFetish.stages.0.label>
|
||||
<CameInsideFFetish.stages.0.description>임신할것 같아</CameInsideFFetish.stages.0.description>
|
||||
<CameInsideF.stages.0.label>{0}에게 질내사정당함</CameInsideF.stages.0.label>
|
||||
<CameInsideF.stages.0.description>임신할까봐 걱정돼...</CameInsideF.stages.0.description>
|
||||
<CameInsideFFetishSafe.stages.0.label>{0}에게 질내사정당함</CameInsideFFetishSafe.stages.0.label>
|
||||
<CameInsideFFetishSafe.stages.0.description>좋았어...</CameInsideFFetishSafe.stages.0.description>
|
||||
<CameInsideM.stages.0.label>{0}에게 질내사정함</CameInsideM.stages.0.label>
|
||||
<CameInsideM.stages.0.description>질싸를하니 기분이 좋네</CameInsideM.stages.0.description>
|
||||
<HaterCameInsideF.stages.0.label>{0}에게 질내사정당함</HaterCameInsideF.stages.0.label>
|
||||
<HaterCameInsideF.stages.0.description>그새끼의 자식을 임신하고 싶지 않아...</HaterCameInsideF.stages.0.description>
|
||||
<CameInsideFFetishSafe.stages.0.description>아마 임신 안할꺼야. 게다가 좋기도 했어...</CameInsideFFetishSafe.stages.0.description>
|
||||
<HaterCameInsideFSafe.stages.0.label>{0}에게 질내사정당함</HaterCameInsideFSafe.stages.0.label>
|
||||
<HaterCameInsideFSafe.stages.0.description>안전일이였지만 기분나빠</HaterCameInsideFSafe.stages.0.description>
|
||||
<HaterCameInsideM.stages.0.label>{0}에게 질내사정함</HaterCameInsideM.stages.0.label>
|
||||
<HaterCameInsideM.stages.0.description>그년한테 질싸를했어</HaterCameInsideM.stages.0.description>
|
||||
<HaterCameInsideFSafe.stages.0.description>안전일이였지만, 기분 더러워.</HaterCameInsideFSafe.stages.0.description>
|
||||
<UnwantedPregnancy.stages.0.label>원치않은 임신</UnwantedPregnancy.stages.0.label>
|
||||
<UnwantedPregnancy.stages.0.description>어떻게 해야하지?...</UnwantedPregnancy.stages.0.description> <HaterCameInsideM.stages.0.description>그년한테 질싸를했어</HaterCameInsideM.stages.0.description>
|
||||
<UexpectedPregnancyMild.stages.0.label>원치않은 임신</UexpectedPregnancyMild.stages.0.label>
|
||||
<UexpectedPregnancyMild.stages.0.description>어떻게 해야하지?...</UexpectedPregnancyMild.stages.0.description>
|
||||
<UnwantedPregnancy.stages.0.description>어떻게 해야하지?...</UnwantedPregnancy.stages.0.description>
|
||||
<UnwantedPregnancyMild.stages.0.label>원치않은 임신</UnwantedPregnancyMild.stages.0.label>
|
||||
<UnwantedPregnancyMild.stages.0.description>아이를 가졌어. 하지만 아마 괜찮을꺼야.</UnwantedPregnancyMild.stages.0.description>
|
||||
<TookContraceptivePill.stages.0.label>피임약 복용</TookContraceptivePill.stages.0.label>
|
||||
<TookContraceptivePill.stages.0.description>괜찮을거야</TookContraceptivePill.stages.0.description>
|
||||
<TookContraceptivePill.stages.0.description>이젠 해도 괜찮아.</TookContraceptivePill.stages.0.description>
|
||||
<HateTookContraptivePill.stages.0.label>피임약 복용</HateTookContraptivePill.stages.0.label>
|
||||
<HateTookContraptivePill.stages.0.description>임신하고싶어</HateTookContraptivePill.stages.0.description>
|
||||
<HateTookContraptivePill.stages.0.description>임신하고 싶은데.</HateTookContraptivePill.stages.0.description>
|
||||
</LanguageData>
|
|
@ -1,18 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<Mod_Title>RJW Menstruation Cycle</Mod_Title>
|
||||
|
||||
<Mod_Title>RJW 생리 주기</Mod_Title>
|
||||
<Menstrual_Blood>생리혈</Menstrual_Blood>
|
||||
<Info_noCum>없음</Info_noCum>
|
||||
<Info_noCum>정액 없음</Info_noCum>
|
||||
<Stage_Follicular>난포기</Stage_Follicular>
|
||||
<Stage_Ovulatory>배란</Stage_Ovulatory>
|
||||
<Stage_Ovulatory>배란</Stage_Ovulatory>
|
||||
<Stage_Luteal>황체기</Stage_Luteal>
|
||||
<Stage_Bleeding>생리중</Stage_Bleeding>
|
||||
<Stage_Pregnant>임신</Stage_Pregnant>
|
||||
<Stage_Recover>회복기</Stage_Recover>
|
||||
<Stage_None>없음</Stage_None>
|
||||
<Stage_None>불임</Stage_None>
|
||||
<Stage_Climacteric>갱년기</Stage_Climacteric>
|
||||
<Stage_Menopause>폐경</Stage_Menopause>
|
||||
<Stage_Anestrus>휴지기</Stage_Anestrus>
|
||||
<Stage_Follicular_Desc>난소가 배란할 준비를 하고 있습니다. 배란은 이 단계가 끝날 때 발생합니다.</Stage_Follicular_Desc>
|
||||
<Stage_Follicular_Induced_Desc>난소가 배란할 준비를 하고 있습니다. 정액이 자궁에 들어가면 배란이 일어날 것입니다.</Stage_Follicular_Induced_Desc>
|
||||
<Stage_Ovulatory_Desc>난소는 자궁 안으로 난자를 방출하고 있습니다.</Stage_Ovulatory_Desc>
|
||||
<Stage_Luteal_Desc>자궁은 수정란을 받을 준비가 되어 있습니다. 이 단계가 끝나기 전에 착상이 되면 임신이 됩니다.</Stage_Luteal_Desc>
|
||||
<Stage_Bleeding_Desc>착상에 실패한 난자와 함께 자궁의 내벽이 허물어지고 있습니다.</Stage_Bleeding_Desc>
|
||||
<Stage_Pregnant_Desc>아기가 자궁 안에서 자라고 있습니다. 정성으로 보살핀다면, 이 세상에 새롭게 태어날 것입니다.</Stage_Pregnant_Desc>
|
||||
<Stage_Recover_Desc>자궁이 최근 임신에서 회복되고 있습니다.</Stage_Recover_Desc>
|
||||
<Stage_None_Desc>자궁이 불임으로 임신할 수 없습니다.</Stage_None_Desc>
|
||||
<Stage_Climacteric_Desc>난소가 거의 고갈되어 생리 주기가 불규칙해졌습니다.</Stage_Climacteric_Desc>
|
||||
<Stage_Menopause_Desc>난소가 고갈되어 자궁은 더 이상 난자를 품을 수 없습니다.</Stage_Menopause_Desc>
|
||||
<Stage_Anestrus_Desc>자궁이 번식기가 아닙니다. 조건이 충족되면 주기가 재개됩니다.</Stage_Anestrus_Desc>
|
||||
<Button_HealthTab>상태창</Button_HealthTab>
|
||||
<Button_MilkTooltip>모유 짜기</Button_MilkTooltip>
|
||||
<Dialog_WombInfo01>상태</Dialog_WombInfo01>
|
||||
|
@ -24,11 +35,15 @@
|
|||
<Dialog_WombInfo07>배란</Dialog_WombInfo07>
|
||||
<Dialog_WombInfo08></Dialog_WombInfo08>
|
||||
<Dialog_WombInfo09></Dialog_WombInfo09>
|
||||
|
||||
<Dialog_DoCleanWomb_Tooltip>양동이에 정액 모으기</Dialog_DoCleanWomb_Tooltip>
|
||||
<Dialog_DontCleanWomb_Tooltip>자궁의 정액 모으기</Dialog_DontCleanWomb_Tooltip>
|
||||
<Dialog_FatherUnknown>알려지지 않음</Dialog_FatherUnknown>
|
||||
<Option1_Label_1>자궁아이콘 활성화</Option1_Label_1>
|
||||
<Option1_Label_2>건강탭에 버튼 추가</Option1_Label_2>
|
||||
<Option2_Label>동물주기 활성화</Option2_Label>
|
||||
<Option2_Desc>동물의 월경주기를 시뮬레이션합니다. 변경한후에 세이브로드가 필요합니다. not recommended</Option2_Desc>
|
||||
<Option2_Desc>동물의 월경주기를 시뮬레이션합니다.
|
||||
변경한후에 세이브로드가 필요합니다.
|
||||
추천하지 않음</Option2_Desc>
|
||||
<Option3_Label>착상확률</Option3_Label>
|
||||
<Option3_Desc>수정란의 착상확률을 설정합니다.</Option3_Desc>
|
||||
<Option4_Label>수정확률</Option4_Label>
|
||||
|
@ -36,10 +51,14 @@
|
|||
<Option5_Label>시간당 정액배출비율</Option5_Label>
|
||||
<Option5_Desc>이 비율만큼 매 시간마다 정액이 배출됩니다.</Option5_Desc>
|
||||
<Option6_Label>시간당 정자 사망비율</Option6_Label>
|
||||
<Option6_Desc>이 비율만큼 매 시간마다 정자가 사망해 정액이 생식능력을 잃습니다. 정자 예상수명: 정액이 대부분의 생식능력을 잃는 시간입니다.</Option6_Desc>
|
||||
<Option6_Desc>이 비율만큼 매 시간마다 정자가 사망해 정액이 생식능력을 잃습니다.
|
||||
정자 예상수명: 정액이 대부분의 생식능력을 잃는 시간입니다.</Option6_Desc>
|
||||
<Option7_Label>주기 가속</Option7_Label>
|
||||
<Option7_Desc>월경주기를 더 빠르게합니다. 이 설정은 조기폐경과 난임을 유발할수도 있습니다. 12배속 이하로 설정하는것을 권장합니다. 림월드의 시간배율: x6(default)</Option7_Desc>
|
||||
<Option8_Label>Debug</Option8_Label>
|
||||
<Option7_Desc>월경주기를 더 빠르게합니다.
|
||||
이 설정은 조기폐경과 난임을 유발할수도 있습니다.
|
||||
12배속 이하로 설정하는것을 권장합니다.
|
||||
림월드의 시간배율: x6(기본)</Option7_Desc>
|
||||
<Option8_Label>디버그</Option8_Label>
|
||||
<Option8_Desc>디버그정보를 보여줍니다.</Option8_Desc>
|
||||
<Option9_Label>자궁 그림</Option9_Label>
|
||||
<Option9_Desc>상태창에 자궁그림을 표시합니다.</Option9_Desc>
|
||||
|
@ -51,9 +70,13 @@
|
|||
<Option11_Desc_3>태아에 대한 정보를 표시하지 않지만, 임신한 이후 태아이미지를 표시합니다.</Option11_Desc_3>
|
||||
<Option11_Desc_4>태아에 대한 어떠한 정보도 표시하지 않습니다.</Option11_Desc_4>
|
||||
<Option12_Label>폐경기 활성화</Option12_Label>
|
||||
<Option12_Desc>시간이 지남에따라 불임상태로 만드는 폐경기를 활성화합니다. 수명이 긴 종족을 사용할때 문제가 있으면 이 옵션을 끄세요. 변경한후에 세이브로드가 필요합니다.</Option12_Desc>
|
||||
<Option12_Desc>시간이 지남에따라 불임상태로 만드는 폐경기를 활성화합니다.
|
||||
수명이 긴 종족을 사용할때 문제가 있으면 이 옵션을 끄세요.
|
||||
변경한후에 세이브로드가 필요합니다.</Option12_Desc>
|
||||
<Option13_Label>다중임신</Option13_Label>
|
||||
<Option13_Desc>RJW의 기본임신 대신 다중임신을 사용합니다. 임신에 문제가 있다면 이 기능을 끄는것으로 해결될수도 있습니다. RJW 임신이 활성화 되어야 합니다.</Option13_Desc>
|
||||
<Option13_Desc>RJW의 기본임신 대신 다중임신을 사용합니다.
|
||||
임신에 문제가 있다면 이 기능을 끄는것으로 해결될수도 있습니다.
|
||||
RJW 임신이 활성화 되어야 합니다.</Option13_Desc>
|
||||
<Option14_Label>이란성 쌍둥이 활성화</Option14_Label>
|
||||
<Option14_Desc>다수의 난자가 임신으로 이어지게 합니다.</Option14_Desc>
|
||||
<Option15_Label>일란성 쌍둥이 활성화</Option15_Label>
|
||||
|
@ -66,7 +89,9 @@
|
|||
<Option18_Desc>자궁그림 위에 난자그림를 표시합니다.</Option18_Desc>
|
||||
<Option19_Label_1>생리양</Option19_Label_1>
|
||||
<Option19_Label_2>예상되는 총 생리양</Option19_Label_2>
|
||||
<Option19_Desc>생리혈의 양을 설정합니다. 실제 생리양은 보지에따라 다를수 있습니다. 일반적인 인간 여성의 생리량은 약 20~80ml입니다.</Option19_Desc>
|
||||
<Option19_Desc>생리혈의 양을 설정합니다.
|
||||
실제 생리양은 보지에따라 다를수 있습니다.
|
||||
일반적인 인간 여성의 생리량은 약 20~80ml입니다.</Option19_Desc>
|
||||
<Option20_Label_1>정착민</Option20_Label_1>
|
||||
<Option20_Label_2>죄수</Option20_Label_2>
|
||||
<Option20_Label_3>동맹관계</Option20_Label_3>
|
||||
|
@ -75,36 +100,54 @@
|
|||
<Option21_Label>표시 대상</Option21_Label>
|
||||
<Option21_Desc>아이콘과 버튼을 표시할 대상입니다.</Option21_Desc>
|
||||
<Option22_Label>잡종 정의 대체</Option22_Label>
|
||||
<Option22_Desc>RJW와 RaceSupport의 잡종정의를 대체합니다. 우선순위는 누구의 잡종 정의를 우선으로 사용할지 정합니다. 변경하지 않는것을 추천합니다.</Option22_Desc>
|
||||
<Option22_Desc>RJW와 RaceSupport의 잡종정의를 대체합니다.
|
||||
우선순위는 누구의 잡종 정의를 우선으로 사용할지 정합니다. 변경하지 않는것을 추천합니다.</Option22_Desc>
|
||||
<Option23_Label>우선순위</Option23_Label>
|
||||
<Option23_Label_1>모</Option23_Label_1>
|
||||
<Option23_Label_2>부</Option23_Label_2>
|
||||
<Option24_Label>임신후 유두 변화량</Option24_Label>
|
||||
<Option24_Desc>임신후에 유두가 얼마나 어두워지고 커지는지 설정합니다.</Option24_Desc>
|
||||
<Option25_Label>유두 영구변화량</Option25_Label>
|
||||
<Option25_Desc>매번 임신할때마다 유두가 얼마나 영구적으로 어두워지고 커지는지 설정합니다.</Option25_Desc>
|
||||
<Option26_Label>최대 변화량</Option26_Label>
|
||||
<Option26_Desc>유두는 이 값 이상으로 변하지 않습니다.</Option26_Desc>
|
||||
<Option27_Label>유두 변화 속도</Option27_Label>
|
||||
<Option27_Desc>유두가 얼마나 빨리 변하는지 설정합니다.</Option27_Desc>
|
||||
<Option_MaxBreastIncrementFactor_Label>임신 중 유방 크기 변화</Option_MaxBreastIncrementFactor_Label>
|
||||
<Option_MaxBreastIncrementFactor_Desc>임신했을 때 가슴이 얼마나 커질지 설정합니다. 폰에 따라 변화 정도가 다릅니다.</Option_MaxBreastIncrementFactor_Desc>
|
||||
<Option_MaxNippleIncrementFactor_Label>임신 중 유두 변화</Option_MaxNippleIncrementFactor_Label>
|
||||
<Option_MaxNippleIncrementFactor_Desc>임신 중에 유두가 얼마나 변할지를 설정합니다.</Option_MaxNippleIncrementFactor_Desc>
|
||||
<Option_PermanentNippleChange_Label>임신 후 유두 영구 변화</Option_PermanentNippleChange_Label>
|
||||
<Option_PermanentNippleChange_Desc>임신한 폰의 유두가 임신이 끝난 후 변화된 상태를 유지할 대략적인 양을 설정합니다.</Option_PermanentNippleChange_Desc>
|
||||
<Option28_Label>잡종 정의 변경하기</Option28_Label>
|
||||
<Option28_Tooltip>사용자 지정 잡종 편집기를 엽니다. 이 설정은 XML파일의 잡종 정의를 대체합니다.</Option28_Tooltip>
|
||||
<Option28_Tooltip>사용자 지정 잡종 편집기를 엽니다.
|
||||
이 설정은 XML파일의 잡종 정의를 대체합니다.</Option28_Tooltip>
|
||||
<Option29_Label>아이콘 축소 허용</Option29_Label>
|
||||
<Option29_Desc>아이콘 축소를 허용합니다.</Option29_Desc>
|
||||
<Option30_Label>난자 수명 배수</Option30_Label>
|
||||
<Option30_Desc>난자 수명을 늘립니다. 이 설정에 관계없이 황체기가 끝나면 난자는 죽습니다.</Option30_Desc>
|
||||
<Option30_Desc>난자 수명을 늘립니다.
|
||||
이 설정에 관계없이 황체기가 끝나면 난자는 죽습니다.</Option30_Desc>
|
||||
<Option31_Label>출산 이후 보지 변화 활성화</Option31_Label>
|
||||
<Option31_Desc>출산 이후 보지가 영구적으로 늘어나게 합니다. 만약 이 설정을 다루고있는 다른 모드가 있다면, 이 설정을 끄세요.</Option31_Desc>
|
||||
<Option31_Desc>출산 이후 보지가 영구적으로 늘어나게 합니다.
|
||||
만약 이 설정을 다루고있는 다른 모드가 있다면, 이 설정을 끄세요.</Option31_Desc>
|
||||
<Option32_Label>변화 강도</Option32_Label>
|
||||
<Option32_Desc>변화 강도를 설정합니다.</Option32_Desc>
|
||||
<Option_EnableGatherCumGizmo_Label>정액 모으기 아이콘을 보이기</Option_EnableGatherCumGizmo_Label>
|
||||
<Option_EstrusOverride_Label>발정기 시, RJW 유혹 설정 덮어쓰기</Option_EstrusOverride_Label>
|
||||
<Option_EstrusOverride_Desc>활성화된 경우 발정기에 있는 폰은 RJW 설정 대신 유혹으로 이 설정을 사용합니다.
|
||||
모든 설정은 기본적으로 해당 RJW 설정으로 설정됩니다.</Option_EstrusOverride_Desc>
|
||||
<Option_EstrusFuckability_Label>발정기 시 유혹 최소 섹스 가능성</Option_EstrusFuckability_Label>
|
||||
<Option_EstrusAttractability_Label>발정기 시 유혹 최소 매력</Option_EstrusAttractability_Label>
|
||||
<Option_EstrusRelationship_Label>발정기 시 유혹 최소 의견</Option_EstrusRelationship_Label>
|
||||
<EstimatedCumLifespan>정자 예상수명</EstimatedCumLifespan>
|
||||
<EstimatedEggLifespan>난자 예상수명</EstimatedEggLifespan>
|
||||
<FertilityDesc>한시간 안에 수정될 확률: {0}% 수정란이 임신으로 진행될 확률입니다. 흰색 오버레이는 정자가 난자를 수정시킬 확률을 표시하는 것입니다.</FertilityDesc>
|
||||
<FertilityDesc>한시간 안에 수정될 확률: {0}%
|
||||
|
||||
흰색 오버레이는 정자가 난자를 수정시킬 확률을 표시하는 것이고,
|
||||
분홍색 임신률 그래프는 수정된 난자가 착상되어 임신으로 진행될 확률입니다.
|
||||
|
||||
수정이 되더라도 착상에 실패하면 임신하지 않습니다.</FertilityDesc>
|
||||
<Option_PregnancyFromBaseRJW_Label>RJW 기본 임신 사용</Option_PregnancyFromBaseRJW_Label>
|
||||
<Option_PregnancyFromMultiplePregnancy_Label>생리 모드 다중 임신 사용</Option_PregnancyFromMultiplePregnancy_Label>
|
||||
<Option_PregnancyFromBiotech_Label>바이오테크 임신 사용</Option_PregnancyFromBiotech_Label>
|
||||
<Button_ResetToDefault>기본값으로 재설정</Button_ResetToDefault>
|
||||
<Gizmo_GatherCum>정액 모으기</Gizmo_GatherCum>
|
||||
<FloatMenu_CleanSelf>질세척</FloatMenu_CleanSelf>
|
||||
|
||||
<CustomHybrid_List_Title>사용자 지정 잡종 편집기</CustomHybrid_List_Title>
|
||||
<CustomHybrid_Title>{0}의 잡종설정</CustomHybrid_Title>
|
||||
<CustomHybrid_Tooltip>{0}이(가) {1}와(과) 교미했을 때, {2}이(가) {3}의 확률로 태어납니다. 만약 두 종족이 서로에 대한 잡종 정의가 있을경우 아버지 쪽의 정의가 우선적으로 사용됩니다.</CustomHybrid_Tooltip>
|
||||
|
||||
</LanguageData>
|
||||
<CustomHybrid_Tooltip>{0}이(가) {1}와(과) 교미했을 때, {2}이(가) {3}의 확률로 태어납니다.
|
||||
만약 두 종족이 서로에 대한 잡종 정의가 있을경우 아버지 쪽의 정의가 우선적으로 사용됩니다.</CustomHybrid_Tooltip>
|
||||
<CannotNoEggs>난자 없음</CannotNoEggs>
|
||||
</LanguageData>
|
||||
|
|
Binary file not shown.
|
@ -10,7 +10,7 @@ namespace RJW_Menstruation
|
|||
private static void SetFollicular(Pawn p)
|
||||
{
|
||||
foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
|
||||
comp.curStage = HediffComp_Menstruation.Stage.Follicular;
|
||||
comp.GoNextStage(HediffComp_Menstruation.Stage.Follicular);
|
||||
Messages.Message($"{p} is now follicular", p, MessageTypeDefOf.NeutralEvent, false);
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,7 @@ namespace RJW_Menstruation
|
|||
private static void SetOvulatory(Pawn p)
|
||||
{
|
||||
foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
|
||||
comp.curStage = HediffComp_Menstruation.Stage.Ovulatory;
|
||||
comp.GoNextStage(HediffComp_Menstruation.Stage.Ovulatory);
|
||||
Messages.Message($"{p} is now ovulatory", p, MessageTypeDefOf.NeutralEvent, false);
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ namespace RJW_Menstruation
|
|||
private static void SetLuteal(Pawn p)
|
||||
{
|
||||
foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
|
||||
comp.curStage = HediffComp_Menstruation.Stage.Luteal;
|
||||
comp.GoNextStage(HediffComp_Menstruation.Stage.Luteal);
|
||||
Messages.Message($"{p} is now luteal", p, MessageTypeDefOf.NeutralEvent, false);
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ namespace RJW_Menstruation
|
|||
private static void SetBleeding(Pawn p)
|
||||
{
|
||||
foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
|
||||
comp.curStage = HediffComp_Menstruation.Stage.Bleeding;
|
||||
comp.GoNextStage(HediffComp_Menstruation.Stage.Bleeding);
|
||||
Messages.Message($"{p} is now bleeding", p, MessageTypeDefOf.NeutralEvent, false);
|
||||
}
|
||||
/*
|
||||
|
|
|
@ -16,7 +16,7 @@ namespace RJW_Menstruation
|
|||
)
|
||||
{
|
||||
comp.SetEstrus();
|
||||
comp.curStage = HediffComp_Menstruation.Stage.Ovulatory;
|
||||
comp.GoNextStage(HediffComp_Menstruation.Stage.Ovulatory);
|
||||
comp.ovarypower--;
|
||||
}
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ namespace RJW_Menstruation
|
|||
)
|
||||
{
|
||||
comp.SetEstrus();
|
||||
comp.curStage = HediffComp_Menstruation.Stage.Ovulatory;
|
||||
comp.GoNextStage(HediffComp_Menstruation.Stage.Ovulatory);
|
||||
comp.eggstack += ingested.stackCount - 1;
|
||||
}
|
||||
}
|
||||
|
@ -89,7 +89,7 @@ namespace RJW_Menstruation
|
|||
else m.moodPowerFactor = 0.3f;
|
||||
|
||||
}
|
||||
if (pawn.Has(Quirk.Breeder)) pawn.needs.mood.thoughts.memories.TryGainMemoryFast(VariousDefOf.HateTookContraceptivePill);
|
||||
if (pawn.HasQuirk(QuirkUtility.Quirks.Breeder)) pawn.needs.mood.thoughts.memories.TryGainMemoryFast(VariousDefOf.HateTookContraceptivePill);
|
||||
else pawn.needs.mood.thoughts.memories.TryGainMemoryFast(VariousDefOf.TookContraceptivePill);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -203,7 +203,7 @@ namespace RJW_Menstruation
|
|||
get
|
||||
{
|
||||
if (!Configurations.EnableMenopause || Props.infertile) return Mathf.Max(1.0f, ovarypower / OvaryPowerThreshold);
|
||||
else return ovarypower / OvaryPowerThreshold;
|
||||
else return (float)ovarypower / OvaryPowerThreshold;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -280,16 +280,65 @@ namespace RJW_Menstruation
|
|||
return 1.0f;
|
||||
}
|
||||
}
|
||||
//effect on implant chance
|
||||
public float ImplantFactor
|
||||
|
||||
// I hate doing this, but it's the least bad option
|
||||
public bool calculatingOvulationChance = false;
|
||||
|
||||
public float OvulationChance
|
||||
{
|
||||
get
|
||||
{
|
||||
float ovulationChance = 1.0f;
|
||||
if (EggHealth <= 0.0f) return 0.0f;
|
||||
if (EggHealth < 1.0f / 3.0f) ovulationChance = 0.8f;
|
||||
if (ModsConfig.BiotechActive && xxx.is_human(Pawn))
|
||||
{
|
||||
if (Pawn.SterileGenes()) return 0.0f;
|
||||
// Replicate how rjw.PawnCapacityWorker_Fertility.CalculateCapacityLevel does it, but without the age factor
|
||||
if (!Pawn.RaceHasFertility()) return 0.0f;
|
||||
if (AndroidsCompatibility.IsAndroid(Pawn) && parent.def != Genital_Helper.archotech_vagina) return 0.0f;
|
||||
foreach (var part in StatDefOf.Fertility.parts)
|
||||
{
|
||||
if(part is StatPart_FertilityByGenderAge fertilityByAge)
|
||||
{
|
||||
float factor = 1.0f;
|
||||
fertilityByAge.TransformValue(StatRequest.For(Pawn), ref factor);
|
||||
if (factor <= 0.0f) return 0.0f; // Too young or too old
|
||||
}
|
||||
else part.TransformValue(StatRequest.For(Pawn), ref ovulationChance);
|
||||
}
|
||||
if (Pawn.HasQuirk(QuirkUtility.Quirks.Breeder)) ovulationChance *= 10.0f;
|
||||
try
|
||||
{
|
||||
calculatingOvulationChance = true;
|
||||
ovulationChance *= PawnCapacityUtility.CalculateCapacityLevel(Pawn.health.hediffSet, xxx.reproduction);
|
||||
}
|
||||
finally { calculatingOvulationChance = false; }
|
||||
}
|
||||
return ovulationChance;
|
||||
}
|
||||
}
|
||||
public float ImplantChance
|
||||
{
|
||||
get
|
||||
{
|
||||
float factor = 1.0f;
|
||||
if (Pawn.Has(Quirk.Breeder)) factor = 10.0f;
|
||||
return Pawn.health.capacities.GetLevel(xxx.reproduction) * Props.baseImplantationChanceFactor * FertilityModifier * factor;
|
||||
if (ModsConfig.BiotechActive && xxx.is_human(Pawn))
|
||||
{
|
||||
// Implant factor will be based solely on pawn age, plus any rollover from ovulation chance
|
||||
StatPart_FertilityByGenderAge fertilityStatPart = StatDefOf.Fertility.GetStatPart<StatPart_FertilityByGenderAge>();
|
||||
fertilityStatPart?.TransformValue(StatRequest.For(Pawn), ref factor);
|
||||
float ovulationOverflow = OvulationChance;
|
||||
if (ovulationOverflow > 1.0f) factor *= ovulationOverflow;
|
||||
return Props.baseImplantationChanceFactor * FertilityModifier * factor;
|
||||
}
|
||||
else
|
||||
{
|
||||
return Pawn.health.capacities.GetLevel(xxx.reproduction) * Props.baseImplantationChanceFactor * FertilityModifier * factor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<string> GetCumsInfo
|
||||
{
|
||||
get
|
||||
|
@ -345,13 +394,13 @@ namespace RJW_Menstruation
|
|||
switch (CurrentVisibleStage)
|
||||
{
|
||||
case Stage.Follicular:
|
||||
return Translations.Stage_Follicular + (EggHealth < 1f ? Translations.Stage_Climacteric : "");
|
||||
return Translations.Stage_Follicular + (EggHealth < 1f ? " " + Translations.Stage_Climacteric : "");
|
||||
case Stage.Ovulatory:
|
||||
return Translations.Stage_Ovulatory + (EggHealth < 1f ? Translations.Stage_Climacteric : "");
|
||||
return Translations.Stage_Ovulatory + (EggHealth < 1f ? " " + Translations.Stage_Climacteric : "");
|
||||
case Stage.Luteal:
|
||||
return Translations.Stage_Luteal + (EggHealth < 1f ? Translations.Stage_Climacteric : "");
|
||||
return Translations.Stage_Luteal + (EggHealth < 1f ? " " + Translations.Stage_Climacteric : "");
|
||||
case Stage.Bleeding:
|
||||
return Translations.Stage_Bleeding + (EggHealth < 1f ? Translations.Stage_Climacteric : "");
|
||||
return Translations.Stage_Bleeding + (EggHealth < 1f ? " " + Translations.Stage_Climacteric : "");
|
||||
case Stage.Pregnant:
|
||||
return Translations.Stage_Pregnant;
|
||||
case Stage.Recover:
|
||||
|
@ -375,13 +424,13 @@ namespace RJW_Menstruation
|
|||
switch (CurrentVisibleStage)
|
||||
{
|
||||
case Stage.Follicular:
|
||||
return Translations.Stage_Follicular_Desc + (EggHealth < 1f ? Translations.Stage_Climacteric_Desc : "");
|
||||
return Translations.Stage_Follicular_Desc + (EggHealth < 1f ? " " + Translations.Stage_Climacteric_Desc : "");
|
||||
case Stage.Ovulatory:
|
||||
return Translations.Stage_Ovulatory_Desc + (EggHealth < 1f ? Translations.Stage_Climacteric_Desc : "");
|
||||
return Translations.Stage_Ovulatory_Desc + (EggHealth < 1f ? " " + Translations.Stage_Climacteric_Desc : "");
|
||||
case Stage.Luteal:
|
||||
return Translations.Stage_Luteal_Desc + (EggHealth < 1f ? Translations.Stage_Climacteric_Desc : "");
|
||||
return Translations.Stage_Luteal_Desc + (EggHealth < 1f ? " " + Translations.Stage_Climacteric_Desc : "");
|
||||
case Stage.Bleeding:
|
||||
return Translations.Stage_Bleeding_Desc + (EggHealth < 1f ? Translations.Stage_Climacteric_Desc : "");
|
||||
return Translations.Stage_Bleeding_Desc + (EggHealth < 1f ? " " + Translations.Stage_Climacteric_Desc : "");
|
||||
case Stage.Pregnant:
|
||||
return Translations.Stage_Pregnant_Desc;
|
||||
case Stage.Recover:
|
||||
|
@ -651,6 +700,16 @@ namespace RJW_Menstruation
|
|||
return false;
|
||||
}
|
||||
|
||||
public bool ShouldBeInfertile()
|
||||
{
|
||||
if (pregnancy != null) return false;
|
||||
if (ImplantChance <= 0.0f) return true;
|
||||
// Give the last egg ovulated a chance to implant
|
||||
if (curStage == Stage.Luteal || curStage == Stage.Bleeding || curStage == Stage.Recover) return false;
|
||||
if (EggHealth <= 0.0f) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void CompPostTick(ref float severityAdjustment)
|
||||
{
|
||||
base.CompPostTick(ref severityAdjustment);
|
||||
|
@ -678,7 +737,7 @@ namespace RJW_Menstruation
|
|||
|
||||
BeforeSimulator();
|
||||
|
||||
if (pregnancy == null && (Pawn.health.capacities.GetLevel(xxx.reproduction) <= 0 || EggHealth <= 0 || Pawn.SterileGenes())) GoNextStage(Stage.Infertile);
|
||||
if (ShouldBeInfertile()) GoNextStage(Stage.Infertile);
|
||||
switch (curStage)
|
||||
{
|
||||
case Stage.Follicular:
|
||||
|
@ -813,8 +872,8 @@ namespace RJW_Menstruation
|
|||
if (!precum && fertility > 0 && IsDangerDay && pawn.relations.GetPregnancyApproachForPartner(Pawn) == PregnancyApproach.AvoidPregnancy)
|
||||
{
|
||||
float successChance = pulloutSuccessRate;
|
||||
if (pawn.Has(Quirk.ImpregnationFetish)) successChance *= fetishPulloutSuccessModifier;
|
||||
if (Pawn.Has(Quirk.ImpregnationFetish)) successChance *= fetishPulloutSuccessModifier;
|
||||
if (pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish)) successChance *= fetishPulloutSuccessModifier;
|
||||
if (Pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish)) successChance *= fetishPulloutSuccessModifier;
|
||||
if (Rand.Chance(successChance)) return;
|
||||
}
|
||||
if (Pawn.HasIUD()) fertility /= 100f;
|
||||
|
@ -978,7 +1037,7 @@ namespace RJW_Menstruation
|
|||
if (TotalCum > Props.maxCumCapacity * Pawn.BodySize) leakfactor = Math.Min(1 + (TotalCum - Props.maxCumCapacity * Pawn.BodySize) / 10, 2f);
|
||||
if (absorber != null && absorber.dirty && !absorber.LeakAfterDirty) leakfactor = 0f;
|
||||
if (Pawn.CurJobDef == xxx.knotted) leakfactor = 0f;
|
||||
List<Cum> removecums = new List<Cum>();
|
||||
HashSet<Cum> removecums = new HashSet<Cum>();
|
||||
foreach (Cum cum in cums)
|
||||
{
|
||||
cum.CumEffects(Pawn);
|
||||
|
@ -991,10 +1050,7 @@ namespace RJW_Menstruation
|
|||
}
|
||||
if (cums.Count > 1) MakeCumFilthMixture(totalleak, filthlabels);
|
||||
else if (cums.Count == 1) MakeCumFilth(cums.First(), totalleak);
|
||||
foreach (Cum cum in removecums)
|
||||
{
|
||||
cums.Remove(cum);
|
||||
}
|
||||
cums.RemoveAll(cum => removecums.Contains(cum));
|
||||
cumd = TotalCumPercent - cumd;
|
||||
if (totalleak >= 1.0f) AfterCumOut();
|
||||
AfterFluidOut(cumd);
|
||||
|
@ -1014,7 +1070,7 @@ namespace RJW_Menstruation
|
|||
List<string> filthlabels = new List<string>();
|
||||
float outcum = 0;
|
||||
float cumd = TotalCumPercent;
|
||||
List<Cum> removecums = new List<Cum>();
|
||||
HashSet<Cum> removecums = new HashSet<Cum>();
|
||||
foreach (Cum cum in cums)
|
||||
{
|
||||
float vd = cum.DismishForce(portion);
|
||||
|
@ -1027,10 +1083,7 @@ namespace RJW_Menstruation
|
|||
}
|
||||
if (cums.Count > 1) MakeCumFilthMixture(totalleak, filthlabels);
|
||||
else if (cums.Count == 1) MakeCumFilth(cums.First(), totalleak);
|
||||
foreach (Cum cum in removecums)
|
||||
{
|
||||
cums.Remove(cum);
|
||||
}
|
||||
cums.RemoveAll(cum => removecums.Contains(cum));
|
||||
cumd = TotalCumPercent - cumd;
|
||||
AfterFluidOut(cumd);
|
||||
return outcum;
|
||||
|
@ -1048,7 +1101,7 @@ namespace RJW_Menstruation
|
|||
Color color = GetCumMixtureColor;
|
||||
float totalleak = 0;
|
||||
List<string> cumlabels = new List<string>();
|
||||
List<Cum> removecums = new List<Cum>();
|
||||
HashSet<Cum> removecums = new HashSet<Cum>();
|
||||
bool pure = true;
|
||||
foreach (Cum cum in cums)
|
||||
{
|
||||
|
@ -1059,10 +1112,7 @@ namespace RJW_Menstruation
|
|||
if (cum.ShouldRemove()) removecums.Add(cum);
|
||||
if (cum.notcum) pure = false;
|
||||
}
|
||||
foreach (Cum cum in removecums)
|
||||
{
|
||||
cums.Remove(cum);
|
||||
}
|
||||
cums.RemoveAll(cum => removecums.Contains(cum));
|
||||
return new CumMixture(Pawn, totalleak, cumlabels, color, mixtureDef, pure);
|
||||
}
|
||||
|
||||
|
@ -1111,9 +1161,12 @@ namespace RJW_Menstruation
|
|||
|
||||
if (cycleSpeed < 0f) cycleSpeed = Utility.RandGaussianLike(0.8f, 1.2f);
|
||||
if (cycleVariability < 0f) cycleVariability = MenstruationUtility.RandomVariabilityPercent();
|
||||
|
||||
InitOvary();
|
||||
|
||||
if (currentIntervalHours < 0)
|
||||
{
|
||||
if (Pawn.health.capacities.GetLevel(xxx.reproduction) <= 0 || Pawn.SterileGenes()) curStage = Stage.Infertile;
|
||||
if (ShouldBeInfertile()) curStage = Stage.Infertile;
|
||||
else if (!IsBreedingSeason()) curStage = Stage.Anestrus;
|
||||
else curStage = RandomStage();
|
||||
if (curStage == Stage.Follicular)
|
||||
|
@ -1128,8 +1181,6 @@ namespace RJW_Menstruation
|
|||
if (cums == null) cums = new List<Cum>();
|
||||
if (eggs == null) eggs = new List<Egg>();
|
||||
|
||||
|
||||
InitOvary();
|
||||
TakeLoosePregnancy();
|
||||
|
||||
//Log.Message(Pawn.Label + " - Initialized menstruation comp");
|
||||
|
@ -1283,7 +1334,7 @@ namespace RJW_Menstruation
|
|||
|
||||
float totalFertPower = eligibleCum.Sum(cum => cum.FertVolume);
|
||||
|
||||
if (Rand.Range(0.0f, 1.0f) > 1.0f - Mathf.Pow(1.0f - Configurations.FertilizeChance, totalFertPower * Props.basefertilizationChanceFactor))
|
||||
if (Rand.Chance(Mathf.Pow(1.0f - Configurations.FertilizeChance, totalFertPower * Props.basefertilizationChanceFactor)))
|
||||
return null;
|
||||
|
||||
Pawn.records.AddTo(VariousDefOf.AmountofFertilizedEggs, 1);
|
||||
|
@ -1304,7 +1355,7 @@ namespace RJW_Menstruation
|
|||
{
|
||||
if (eggs.NullOrEmpty()) return false;
|
||||
|
||||
List<Egg> deadeggs = new List<Egg>();
|
||||
HashSet<Egg> deadeggs = new HashSet<Egg>();
|
||||
bool pregnant = false;
|
||||
foreach (Egg egg in eggs)
|
||||
{
|
||||
|
@ -1324,7 +1375,7 @@ namespace RJW_Menstruation
|
|||
deadeggs.Add(egg);
|
||||
continue;
|
||||
}
|
||||
else if (Rand.Range(0.0f, 1.0f) <= Configurations.ImplantationChance * ImplantFactor * InterspeciesImplantFactor(egg.fertilizer))
|
||||
else if (Rand.Chance(Configurations.ImplantationChance * ImplantChance * InterspeciesImplantFactor(egg.fertilizer)))
|
||||
{
|
||||
if (Configurations.Debug) Log.Message($"Implanting fertilized egg of {Pawn} into {parent}, father {egg.fertilizer}");
|
||||
if (pregnancy != null)
|
||||
|
@ -1397,9 +1448,7 @@ namespace RJW_Menstruation
|
|||
rjw_preg.p_start_tick -= egg.fertstage / Configurations.CycleAcceleration * GenDate.TicksPerHour;
|
||||
rjw_preg.p_end_tick -= egg.fertstage / Configurations.CycleAcceleration * GenDate.TicksPerHour;
|
||||
}
|
||||
if (!(pregnancy is Hediff_MultiplePregnancy)) break;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1416,12 +1465,7 @@ namespace RJW_Menstruation
|
|||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (Egg egg in deadeggs)
|
||||
{
|
||||
eggs.Remove(egg);
|
||||
}
|
||||
}
|
||||
eggs.RemoveAll(egg => deadeggs.Contains(egg));
|
||||
return pregnant;
|
||||
}
|
||||
|
||||
|
@ -1491,7 +1535,7 @@ namespace RJW_Menstruation
|
|||
|
||||
protected void EggDecay()
|
||||
{
|
||||
List<Egg> deadeggs = new List<Egg>();
|
||||
HashSet<Egg> deadeggs = new HashSet<Egg>();
|
||||
foreach (Egg egg in eggs)
|
||||
{
|
||||
egg.position += Configurations.CycleAcceleration;
|
||||
|
@ -1502,10 +1546,7 @@ namespace RJW_Menstruation
|
|||
if (egg.lifespanhrs < 0) deadeggs.Add(egg);
|
||||
}
|
||||
}
|
||||
foreach (Egg egg in deadeggs)
|
||||
{
|
||||
eggs.Remove(egg);
|
||||
}
|
||||
eggs.RemoveAll(egg => deadeggs.Contains(egg));
|
||||
}
|
||||
|
||||
protected void AddCrampPain()
|
||||
|
@ -1545,7 +1586,6 @@ namespace RJW_Menstruation
|
|||
{
|
||||
estrusflag = false;
|
||||
float eggnum;
|
||||
int ovulated;
|
||||
try
|
||||
{
|
||||
eggnum = Math.Max(Rand.ByCurve(Pawn.def.race.litterSizeCurve), 1f);
|
||||
|
@ -1560,23 +1600,24 @@ namespace RJW_Menstruation
|
|||
eggnum = 1f;
|
||||
}
|
||||
eggnum *= ovulationFactor;
|
||||
ovulated = (int)eggnum + eggstack;
|
||||
int toOvulate = (int)eggnum + eggstack;
|
||||
|
||||
float ovulationChance = OvulationChance;
|
||||
int ovulated = 0;
|
||||
for (int i = 0; i < toOvulate; i++)
|
||||
if (i < eggstack || Rand.Chance(ovulationChance)) // eggstack comes from drugs and are guaranteed ovulated
|
||||
{
|
||||
eggs.Add(new Egg((int)(EggLifespanHours / CycleFactor)));
|
||||
++ovulated;
|
||||
}
|
||||
if(ovulated > ovarypower) ovulated = Math.Min(ovarypower, eggstack);
|
||||
|
||||
for (int i = 0; i < ovulated; i++)
|
||||
eggs.Add(new Egg((int)(EggLifespanHours / CycleFactor)));
|
||||
ovarypower -= ovulated;
|
||||
|
||||
eggstack = 0;
|
||||
if (EggHealth <= 0)
|
||||
{
|
||||
eggs.Clear();
|
||||
ovarypower = 0;
|
||||
GoNextStage(Stage.Infertile);
|
||||
}
|
||||
else
|
||||
{
|
||||
GoNextStage(Stage.Luteal);
|
||||
}
|
||||
if (Configurations.Debug && ovulated != toOvulate)
|
||||
Log.Message($"{Pawn} ovulated {ovulated}/{toOvulate} eggs ({ovulationChance.ToStringPercent()} chance)");
|
||||
|
||||
GoNextStage(Stage.Luteal);
|
||||
}
|
||||
|
||||
protected virtual void LutealAction()
|
||||
|
@ -1584,7 +1625,7 @@ namespace RJW_Menstruation
|
|||
if (curStageHrs >= currentIntervalHours)
|
||||
{
|
||||
eggs.Clear();
|
||||
if (EggHealth < 1f / 4f || (EggHealth < 1f / 3f && Rand.Range(0.0f, 1.0f) < 0.3f)) //skips bleeding
|
||||
if (EggHealth < 1f / 4f || (EggHealth < 1f / 3f && Rand.Chance(0.3f))) //skips bleeding
|
||||
{
|
||||
GoNextStage(Stage.Follicular);
|
||||
}
|
||||
|
@ -1663,7 +1704,7 @@ namespace RJW_Menstruation
|
|||
{
|
||||
if (curStageHrs >= currentIntervalHours)
|
||||
{
|
||||
if (Pawn.health.capacities.GetLevel(xxx.reproduction) == 0 || EggHealth <= 0 || Pawn.SterileGenes())
|
||||
if (ShouldBeInfertile())
|
||||
{
|
||||
GoNextStage(Stage.Infertile);
|
||||
}
|
||||
|
@ -1685,7 +1726,7 @@ namespace RJW_Menstruation
|
|||
|
||||
protected virtual void InfertileAction()
|
||||
{
|
||||
if (Pawn.health.capacities.GetLevel(xxx.reproduction) <= 0 || EggHealth <= 0 || Pawn.SterileGenes())
|
||||
if (ShouldBeInfertile())
|
||||
{
|
||||
StayCurrentStageConst(Stage.Infertile);
|
||||
}
|
||||
|
@ -1712,9 +1753,9 @@ namespace RJW_Menstruation
|
|||
{
|
||||
if (!xxx.is_human(Pawn) || !xxx.is_human(cummer)) return;
|
||||
|
||||
if ((cummer.Has(Quirk.Teratophile) != (Pawn.GetStatValue(StatDefOf.PawnBeauty) >= 0)) ||
|
||||
cummer.Has(Quirk.ImpregnationFetish) ||
|
||||
cummer.Has(Quirk.Breeder))
|
||||
if ((cummer.HasQuirk(QuirkUtility.Quirks.Teratophile) != (Pawn.GetStatValue(StatDefOf.PawnBeauty) >= 0)) ||
|
||||
cummer.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish) ||
|
||||
cummer.HasQuirk(QuirkUtility.Quirks.Breeder))
|
||||
{
|
||||
if (cummer.relations.OpinionOf(Pawn) <= -25)
|
||||
{
|
||||
|
@ -1728,7 +1769,7 @@ namespace RJW_Menstruation
|
|||
|
||||
if (IsDangerDay)
|
||||
{
|
||||
if (Pawn.Has(Quirk.Breeder) || Pawn.Has(Quirk.ImpregnationFetish))
|
||||
if (Pawn.HasQuirk(QuirkUtility.Quirks.Breeder) || Pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish))
|
||||
{
|
||||
Pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.CameInsideFFetish, cummer);
|
||||
}
|
||||
|
@ -1751,7 +1792,7 @@ namespace RJW_Menstruation
|
|||
}
|
||||
else
|
||||
{
|
||||
if (Pawn.Has(Quirk.Breeder) || Pawn.Has(Quirk.ImpregnationFetish))
|
||||
if (Pawn.HasQuirk(QuirkUtility.Quirks.Breeder) || Pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish))
|
||||
{
|
||||
Pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.CameInsideFFetishSafe, cummer);
|
||||
}
|
||||
|
@ -1772,7 +1813,7 @@ namespace RJW_Menstruation
|
|||
TaleRecorder.RecordTale(VariousDefOf.TaleCameInside, new object[] { cummer, Pawn });
|
||||
}
|
||||
|
||||
protected void GoNextStage(Stage nextstage, bool calculateHours = true)
|
||||
public void GoNextStage(Stage nextstage, bool calculateHours = true)
|
||||
{
|
||||
curStageHrs = 0;
|
||||
if (calculateHours) currentIntervalHours = PeriodRandomizer(nextstage);
|
||||
|
@ -1781,12 +1822,7 @@ namespace RJW_Menstruation
|
|||
|
||||
protected virtual void GoOvulatoryStage()
|
||||
{
|
||||
if (EggHealth < 1.0f / 3.0f && Rand.Range(0.0f, 1.0f) < 0.2f) // Skip ovulation if deep into climacteric
|
||||
{
|
||||
estrusflag = false;
|
||||
GoNextStage(Stage.Luteal);
|
||||
}
|
||||
else GoNextStage(Stage.Ovulatory);
|
||||
GoNextStage(Stage.Ovulatory);
|
||||
}
|
||||
|
||||
//stage can be interrupted in other reasons
|
||||
|
|
|
@ -214,6 +214,10 @@ namespace RJW_Menstruation
|
|||
PregnancyUtility.ApplyBirthOutcome(thisOutcome, quality, ritual, genes, geneticMother, birtherThing, thisFather, doctor, lordJobRitual, assignments);
|
||||
// No more babies if mom dies halfway through. Unrealistic maybe, but saves a lot of headache in ApplyBirthOutcome
|
||||
if (mother.health.Dead) break;
|
||||
if (xxx.is_human(baby))
|
||||
mother.records.Increment(xxx.CountOfBirthHuman);
|
||||
else if (xxx.is_animal(baby))
|
||||
mother.records.Increment(xxx.CountOfBirthAnimal);
|
||||
thisOutcome = ((RitualOutcomeEffectWorker_ChildBirth)precept_Ritual.outcomeEffect).GetOutcome(birthQuality, null);
|
||||
} while (comp.HasBaby);
|
||||
|
||||
|
@ -263,6 +267,10 @@ namespace RJW_Menstruation
|
|||
|
||||
PregnancyUtility.ApplyBirthOutcome(outcome, quality, ritual, genes, geneticMother, birtherThing, thisFather, doctor, lordJobRitual, assignments);
|
||||
if (mother.health.Dead) break;
|
||||
if (xxx.is_human(baby))
|
||||
mother.records.Increment(xxx.CountOfBirthHuman);
|
||||
else if (xxx.is_animal(baby))
|
||||
mother.records.Increment(xxx.CountOfBirthAnimal);
|
||||
} while (comp.HasBaby);
|
||||
|
||||
// The ritual version doesn't use the return value, either
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using RimWorld;
|
||||
using RimWorld.Planet;
|
||||
using rjw;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
@ -218,6 +219,8 @@ namespace RJW_Menstruation
|
|||
}
|
||||
public static Texture2D GetEggIcon(this HediffComp_Menstruation comp, bool includeOvary)
|
||||
{
|
||||
const float ovaryChanceToShow_01 = 0.4f;
|
||||
const float ovaryChanceToShow_02 = 1.0f;
|
||||
switch (comp.CurrentVisibleStage)
|
||||
{
|
||||
case HediffComp_Menstruation.Stage.Follicular:
|
||||
|
@ -228,15 +231,20 @@ namespace RJW_Menstruation
|
|||
job.Sexprops != null &&
|
||||
!job.Sexprops.usedCondom &&
|
||||
(job.Sexprops.sexType == xxx.rjwSextype.Vaginal || job.Sexprops.sexType == xxx.rjwSextype.DoublePenetration))
|
||||
return ContentFinder<Texture2D>.Get("Ovaries/Ovary_01", true);
|
||||
return ContentFinder<Texture2D>.Get((comp.OvulationChance >= ovaryChanceToShow_01) ? "Ovaries/Ovary_01" : "Ovaries_Ovary_00", true);
|
||||
else break;
|
||||
}
|
||||
if (comp.curStageHrs > comp.CurStageIntervalHours - 30) // Approximate time for ovulation to occur
|
||||
return ContentFinder<Texture2D>.Get("Ovaries/Ovary_01", true);
|
||||
return ContentFinder<Texture2D>.Get((comp.OvulationChance >= ovaryChanceToShow_01) ? "Ovaries/Ovary_01" : "Ovaries_Ovary_00", true);
|
||||
else break;
|
||||
case HediffComp_Menstruation.Stage.Ovulatory:
|
||||
if (!includeOvary) break;
|
||||
return ContentFinder<Texture2D>.Get("Ovaries/Ovary_02", true);
|
||||
if (comp.OvulationChance >= ovaryChanceToShow_02)
|
||||
return ContentFinder<Texture2D>.Get("Ovaries/Ovary_02", true);
|
||||
else if (comp.OvulationChance >= ovaryChanceToShow_01)
|
||||
return ContentFinder<Texture2D>.Get("Ovaries/Ovary_01", true);
|
||||
else
|
||||
return ContentFinder<Texture2D>.Get("Ovaries/Ovary_00", true);
|
||||
case HediffComp_Menstruation.Stage.Luteal:
|
||||
if (!comp.IsEggExist) break;
|
||||
int fertstage = comp.IsFertilized;
|
||||
|
|
|
@ -23,11 +23,11 @@ namespace RJW_Menstruation
|
|||
{
|
||||
if (is_discovered ||
|
||||
!xxx.is_human(pawn) ||
|
||||
pawn.Has(Quirk.Breeder) ||
|
||||
pawn.HasQuirk(QuirkUtility.Quirks.Breeder) ||
|
||||
(pawn.relations?.DirectRelations?.Find(x => x.def.Equals(PawnRelationDefOf.Spouse) ||
|
||||
x.def.Equals(PawnRelationDefOf.Fiance))) != null)
|
||||
return;
|
||||
if (pawn.Has(Quirk.ImpregnationFetish) || pawn.relations?.DirectRelations?.Find(x => x.def.Equals(PawnRelationDefOf.Lover)) != null)
|
||||
if (pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish) || pawn.relations?.DirectRelations?.Find(x => x.def.Equals(PawnRelationDefOf.Lover)) != null)
|
||||
{
|
||||
pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.UnwantedPregnancyMild);
|
||||
}
|
||||
|
|
|
@ -26,33 +26,28 @@ namespace RJW_Menstruation
|
|||
public static void Postfix(Hediff_Pregnant __instance)
|
||||
{
|
||||
HediffComp_Menstruation comp = __instance.GetMenstruationCompFromPregnancy();
|
||||
if (Configurations.Debug) Log.Message($"{comp.Pawn}'s labor starting, menstruation comp is {comp}");
|
||||
if (comp == null) return;
|
||||
comp.Pregnancy = __instance.pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.PregnancyLabor);
|
||||
if (Configurations.Debug) Log.Message($"New pregnancy Hediff is {comp.Pregnancy}");
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(Hediff_Labor), nameof(Hediff_Labor.PreRemoved))]
|
||||
public class Labor_PreRemoved_Patch
|
||||
{
|
||||
public static void PostFix(Hediff_Labor __instance)
|
||||
public static void Postfix(Hediff_Labor __instance)
|
||||
{
|
||||
HediffComp_Menstruation comp = __instance.GetMenstruationCompFromPregnancy();
|
||||
if (Configurations.Debug) Log.Message($"{comp.Pawn}'s initial labor ending, menstruation comp is {comp}");
|
||||
if (comp == null) return;
|
||||
comp.Pregnancy = __instance.pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.PregnancyLaborPushing);
|
||||
if (Configurations.Debug) Log.Message($"New pregnancy Hediff is {comp.Pregnancy}");
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(Hediff_LaborPushing), nameof(Hediff_LaborPushing.PreRemoved))]
|
||||
public class LaborPushing_PreRemoved_Patch
|
||||
{
|
||||
public static void PostFix(Hediff_LaborPushing __instance)
|
||||
public static void Postfix(Hediff_LaborPushing __instance)
|
||||
{
|
||||
HediffComp_Menstruation comp = __instance.GetMenstruationCompFromPregnancy();
|
||||
if (Configurations.Debug) Log.Message($"{comp.Pawn}'s labor pushing ending, menstruation comp is {comp}");
|
||||
if (comp == null) return;
|
||||
comp.Pregnancy = null;
|
||||
}
|
||||
|
@ -62,7 +57,7 @@ namespace RJW_Menstruation
|
|||
[HarmonyPatch(typeof(Hediff_Pregnant), nameof(Hediff_Pregnant.GestationProgress), MethodType.Getter)]
|
||||
public class Hediff_Pregnant_GestationProgess_Patch
|
||||
{
|
||||
public static void PostFix(Hediff_Pregnant __instance, ref float __result)
|
||||
public static void Postfix(Hediff_Pregnant __instance, ref float __result)
|
||||
{
|
||||
if (__result < 1f) return;
|
||||
Pawn pawn = __instance.pawn;
|
||||
|
@ -74,7 +69,7 @@ namespace RJW_Menstruation
|
|||
[HarmonyPatch(typeof(Recipe_ExtractOvum), nameof(Recipe_ExtractOvum.AvailableReport))]
|
||||
public class ExtractOvum_AvailableReport_Patch
|
||||
{
|
||||
public static void PostFix(Thing thing, ref AcceptanceReport __result)
|
||||
public static void Postfix(Thing thing, ref AcceptanceReport __result)
|
||||
{
|
||||
if (!__result.Accepted) return;
|
||||
Pawn pawn = (Pawn)thing;
|
||||
|
@ -97,7 +92,7 @@ namespace RJW_Menstruation
|
|||
[HarmonyPatch(typeof(Recipe_ExtractOvum), "OnSurgerySuccess")]
|
||||
public class ExtractOvum_OnSurgerySuccess_Patch
|
||||
{
|
||||
public static void PostFix(Pawn pawn)
|
||||
public static void Postfix(Pawn pawn)
|
||||
{
|
||||
List<HediffComp_Menstruation> comps = pawn.GetMenstruationComps().ToList();
|
||||
if (!comps.Any()) return;
|
||||
|
@ -110,7 +105,7 @@ namespace RJW_Menstruation
|
|||
[HarmonyPatch(typeof(Recipe_ImplantEmbryo), nameof(Recipe_ImplantEmbryo.ApplyOnPawn))]
|
||||
public class ImplantEmbryo_ApplyOnPawn_Patch
|
||||
{
|
||||
public static void PostFix(Pawn pawn)
|
||||
public static void Postfix(Pawn pawn)
|
||||
{
|
||||
foreach (HediffComp_Menstruation comp in pawn.GetMenstruationComps())
|
||||
comp.TakeLoosePregnancy();
|
||||
|
@ -120,7 +115,7 @@ namespace RJW_Menstruation
|
|||
[HarmonyPatch(typeof(PregnancyUtility), nameof(PregnancyUtility.ApplyBirthOutcome))]
|
||||
public class ApplyBirthOutcome_Breast_Patch
|
||||
{
|
||||
public static void PostFix(Thing birtherThing)
|
||||
public static void Postfix(Thing birtherThing)
|
||||
{
|
||||
if (birtherThing is Pawn pawn && !pawn.health.Dead)
|
||||
pawn.GetBreastComp()?.GaveBirth();
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace RJW_Menstruation
|
|||
List<Hediff> pawnparts = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn));
|
||||
|
||||
HediffComp_Menstruation comp;
|
||||
if (pawn.Has(Quirk.ImpregnationFetish) || partner.Has(Quirk.ImpregnationFetish) || partner.IsInEstrus())
|
||||
if (pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish) || partner.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish) || partner.IsInEstrus())
|
||||
comp = partner.GetFertileMenstruationComp();
|
||||
else comp = partner.GetRandomMenstruationComp();
|
||||
if (comp == null) return true;
|
||||
|
@ -102,7 +102,7 @@ namespace RJW_Menstruation
|
|||
{
|
||||
if (partner.IsAnimal() && !Configurations.EnableAnimalCycle) return true;
|
||||
HediffComp_Menstruation comp;
|
||||
if (pawn.Has(Quirk.ImpregnationFetish) || partner.Has(Quirk.ImpregnationFetish) || partner.IsInEstrus())
|
||||
if (pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish) || partner.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish) || partner.IsInEstrus())
|
||||
comp = partner.GetFertileMenstruationComp();
|
||||
else comp = partner.GetRandomMenstruationComp();
|
||||
if (comp == null)
|
||||
|
@ -129,11 +129,11 @@ namespace RJW_Menstruation
|
|||
else if (pawn.GetMenstruationComps().Any()) return false;
|
||||
else return pawn.IsPregnant();
|
||||
}
|
||||
private static readonly MethodInfo IsPregnant = AccessTools.Method(typeof(PawnExtensions), nameof(PawnExtensions.IsPregnant), new System.Type[] {typeof(Pawn), typeof(bool)});
|
||||
private static readonly MethodInfo IsPregnant = AccessTools.Method(typeof(PawnExtensions), nameof(PawnExtensions.IsPregnant), new System.Type[] { typeof(Pawn), typeof(bool) });
|
||||
public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
|
||||
{
|
||||
if (IsPregnant == null || IsPregnant.ReturnType != typeof(bool)) throw new System.InvalidOperationException("IsPregnant not found");
|
||||
foreach(CodeInstruction instruction in instructions)
|
||||
foreach (CodeInstruction instruction in instructions)
|
||||
{
|
||||
if (instruction.Calls(IsPregnant))
|
||||
yield return CodeInstruction.Call(typeof(CanImpregnate_Patch), nameof(PregnancyBlocksImpregnation));
|
||||
|
@ -179,7 +179,7 @@ namespace RJW_Menstruation
|
|||
{
|
||||
// Awkward, but it'll have to do
|
||||
Pawn pawn = props.pawn;
|
||||
if (__result == 0 || !pawn.Has(Quirk.ImpregnationFetish) || !props.hasPartner()) return;
|
||||
if (__result == 0 || !pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish) || !props.hasPartner()) return;
|
||||
|
||||
// Check if the existing code would have added the count
|
||||
Pawn partner = props.partner;
|
||||
|
@ -371,4 +371,27 @@ namespace RJW_Menstruation
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(PawnCapacityWorker_Fertility), nameof(PawnCapacityWorker_Fertility.CalculateCapacityLevel))]
|
||||
public static class PawnCapacityWorker_Fertility_Patch
|
||||
{
|
||||
private static float GetFertilityStatOrOne(Thing thing, StatDef stat, bool applyPostProcess, int cacheStaleAfterTicks)
|
||||
{
|
||||
Pawn pawn = (Pawn)thing;
|
||||
if (pawn.GetMenstruationComps().Any(comp => comp.calculatingOvulationChance))
|
||||
return 1.0f;
|
||||
else return thing.GetStatValue(stat, applyPostProcess, cacheStaleAfterTicks);
|
||||
}
|
||||
private static readonly MethodInfo GetStatValue = AccessTools.Method(typeof(StatExtension), "GetStatValue", new System.Type[] { typeof(Thing), typeof(StatDef), typeof(bool), typeof(int) });
|
||||
public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
|
||||
{
|
||||
if (GetStatValue == null || GetStatValue.ReturnType != typeof(float)) throw new System.InvalidOperationException("GetStatValue not found");
|
||||
foreach (CodeInstruction instruction in instructions)
|
||||
{
|
||||
if (instruction.Calls(GetStatValue))
|
||||
yield return CodeInstruction.Call(typeof(PawnCapacityWorker_Fertility_Patch), nameof(GetFertilityStatOrOne));
|
||||
else yield return instruction;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
33
1.4/source/RJW_Menstruation/RJW_Menstruation/QuirkUtility.cs
Normal file
33
1.4/source/RJW_Menstruation/RJW_Menstruation/QuirkUtility.cs
Normal file
|
@ -0,0 +1,33 @@
|
|||
using rjw;
|
||||
using Verse;
|
||||
|
||||
namespace RJW_Menstruation
|
||||
{
|
||||
public static class QuirkUtility
|
||||
{
|
||||
// All quirks used in Menstruation
|
||||
public enum Quirks
|
||||
{
|
||||
Breeder,
|
||||
ImpregnationFetish,
|
||||
Messy,
|
||||
Teratophile,
|
||||
}
|
||||
public static bool HasQuirk(this Pawn pawn, Quirks quirk)
|
||||
{
|
||||
switch (quirk)
|
||||
{
|
||||
case Quirks.Breeder:
|
||||
return pawn.Has(Quirk.Breeder);
|
||||
case Quirks.ImpregnationFetish:
|
||||
return pawn.Has(Quirk.ImpregnationFetish);
|
||||
case Quirks.Messy:
|
||||
return pawn.Has(Quirk.Messy);
|
||||
case Quirks.Teratophile:
|
||||
return pawn.Has(Quirk.Teratophile);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -77,6 +77,7 @@
|
|||
<Compile Include="Patch\GC_Patch.cs" />
|
||||
<Compile Include="Patch\Gizmo_Patch.cs" />
|
||||
<Compile Include="PregnancyCommon.cs" />
|
||||
<Compile Include="QuirkUtility.cs" />
|
||||
<Compile Include="Recipe_Surgery.cs" />
|
||||
<Compile Include="StatParts.cs" />
|
||||
<Compile Include="UI\Dialog_HybridCustom.cs" />
|
||||
|
|
|
@ -134,6 +134,8 @@ namespace RJW_Menstruation
|
|||
|
||||
public static readonly string EstimatedCumLifespan = "EstimatedCumLifespan".Translate();
|
||||
public static readonly string EstimatedEggLifespan = "EstimatedEggLifespan".Translate();
|
||||
public static string OvulationChanceLabel(string value) => "OvulationChanceLabel".Translate(value);
|
||||
public static readonly string OvulationChanceDesc = "OvulationChanceDesc".Translate();
|
||||
public static string FertilityDesc(string value) => "FertilityDesc".Translate(value);
|
||||
|
||||
public static readonly string Gizmo_GatherCum = "Gizmo_GatherCum".Translate();
|
||||
|
|
|
@ -228,7 +228,7 @@ namespace RJW_Menstruation
|
|||
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 (fainfo == "Null")
|
||||
if (fainfo == "Null ")
|
||||
{
|
||||
string father = p.Father?.LabelShort ?? Translations.Dialog_FatherUnknown;
|
||||
fainfo = Translations.Dialog_WombInfo03 + ": " + father + " ";
|
||||
|
@ -450,11 +450,18 @@ namespace RJW_Menstruation
|
|||
|
||||
statvalue = pawn.records.GetValue(xxx.CountOfBirthEgg);
|
||||
FillableBarLabeled(lineRect, " " + xxx.CountOfBirthEgg.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 100, TextureCache.RecoverTexture, Texture2D.blackTexture, xxx.CountOfBirthEgg.description);
|
||||
lineRect.y += height * 4;
|
||||
lineRect.y += height * 3;
|
||||
|
||||
statvalue = Configurations.ImplantationChance * comp.ImplantFactor;
|
||||
if (ModsConfig.BiotechActive && xxx.is_human(pawn))
|
||||
{
|
||||
statvalue = comp.OvulationChance;
|
||||
FillableBarLabeled(lineRect, " " + Translations.OvulationChanceLabel(statvalue.ToStringPercent()), statvalue, TextureCache.LutealTexture, Texture2D.blackTexture, Translations.OvulationChanceDesc);
|
||||
}
|
||||
lineRect.y += height;
|
||||
|
||||
statvalue = Configurations.ImplantationChance * comp.ImplantChance;
|
||||
float fertchance = comp.GetFertilityChance();
|
||||
FillableBarLabeled(lineRect, " " + xxx.reproduction.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue, TextureCache.LutealTexture, Texture2D.blackTexture, Translations.FertilityDesc(String.Format("{0:0.##}", fertchance * 100)));
|
||||
FillableBarLabeled(lineRect, " " + xxx.reproduction.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue, TextureCache.LutealTexture, Texture2D.blackTexture, Translations.FertilityDesc(string.Format("{0:0.##}", fertchance * 100)));
|
||||
Rect overayRect = new Rect(lineRect.x, lineRect.y, lineRect.width * Math.Min(1.0f, fertchance), lineRect.height);
|
||||
GUI.DrawTexture(overayRect, TextureCache.FertChanceTex);
|
||||
lineRect.y += height;
|
||||
|
|
|
@ -86,7 +86,7 @@ namespace RJW_Menstruation
|
|||
{
|
||||
res = 0.0f;
|
||||
}
|
||||
if (pawn.Has(Quirk.Messy)) res *= Rand.Range(4.0f, 8.0f);
|
||||
if (pawn.HasQuirk(QuirkUtility.Quirks.Messy)) res *= Rand.Range(4.0f, 8.0f);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -463,6 +463,10 @@ namespace RJW_Menstruation
|
|||
{
|
||||
return Color.white;
|
||||
}
|
||||
catch (InvalidOperationException) // And sometimes it can try to pull the value of a Nullable without checking, too
|
||||
{
|
||||
return Color.white;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Manifest>
|
||||
<identifier>RJW Menstruation</identifier>
|
||||
<version>1.0.8.7</version>
|
||||
<version>1.0.8.9</version>
|
||||
<dependencies>
|
||||
</dependencies>
|
||||
<incompatibleWith />
|
||||
|
|
|
@ -1,3 +1,17 @@
|
|||
Version 1.0.8.9
|
||||
- Fix bug that sent pawns into menopause very early. Please use the recalculate ovary power dev action to restore lost eggs.
|
||||
|
||||
Version 1.0.8.8
|
||||
- Fix pawns skipping straight to menopause instead of going through climacteric stages.
|
||||
- Fix father appearing as "Null" in womb dialog for some Biotech pregnancies.
|
||||
- Fix Biotech multiple pregnancy births not being tracked in the mother's statistics.
|
||||
- Other bug fixes
|
||||
- Rework ovulation mechanics. A pawn's implantation chance is now dependent only on their age and climacteric effects.
|
||||
- All other fertility-altering effects instead change the odds of ovulation occuring, rolled per-egg. This chance appears in the womb dialog.
|
||||
- If the chance of ovulation goes above 100%, the implantation chance is increased.
|
||||
- Drugs that increase the number of eggs ovulated are still guaranteed to work.
|
||||
- If Biotech is disabled or not installed, the old fertility system will apply instead.
|
||||
|
||||
Version 1.0.8.7
|
||||
- Fix missing texture when using Milkable Colonists.
|
||||
- Fix estrus and egg lifespan lasting far longer than intended.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue