diff --git a/1.4/Assemblies/RJW_Menstruation.dll b/1.4/Assemblies/RJW_Menstruation.dll index 2ac459a..2d0b679 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/DNADef/DNADefs.xml b/1.4/Defs/DNADef/DNADefs.xml deleted file mode 100644 index 09b3a1c..0000000 --- a/1.4/Defs/DNADef/DNADefs.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/1.4/Defs/GeneDefs/GeneDefs_Menstruation.xml b/1.4/Defs/GeneDefs/GeneDefs_Menstruation.xml index d430d3f..9f20c9c 100644 --- a/1.4/Defs/GeneDefs/GeneDefs_Menstruation.xml +++ b/1.4/Defs/GeneDefs/GeneDefs_Menstruation.xml @@ -99,7 +99,7 @@ Menstruation Carriers of this gene will not bleed at the end of their cycle. UI/Genes/Placeholder - 1 + -1 40 diff --git a/1.4/Defs/HediffDef/Hediffs_Menstruation.xml b/1.4/Defs/HediffDef/Hediffs_Menstruation.xml index 375d63d..7fe11f7 100644 --- a/1.4/Defs/HediffDef/Hediffs_Menstruation.xml +++ b/1.4/Defs/HediffDef/Hediffs_Menstruation.xml @@ -83,7 +83,13 @@ 1.5 - + + +
  • + 0.25 + 6 +
  • +
    @@ -113,6 +119,51 @@ + + HediffWithComps + Hediff_AffectedByPheromones + + A condition caused by being around someone in estrus. Sex drive and satisfaction is increased by the scent of heat. + (1.00,0.60,0.75) + false + false + false + false + 1.0 + + true + + +
  • + + + 1.1 + +
  • +
  • + 0.4 + + + 1.4 + 1.1 + +
  • +
  • + 0.8 + + + 2.0 + 1.2 + +
  • +
    + +
  • + -1.0 +
  • +
    +
    + HediffWithComps diff --git a/1.4/Defs/ThingDefs/Apparel_Absorbers.xml b/1.4/Defs/ThingDefs/Apparel_Absorbers.xml index c27e718..87fa765 100644 --- a/1.4/Defs/ThingDefs/Apparel_Absorbers.xml +++ b/1.4/Defs/ThingDefs/Apparel_Absorbers.xml @@ -59,9 +59,16 @@
  • Absorber
  • + +
  • Worker
  • +
  • Soldier
  • +
  • Nudist
  • +
  • Slave
  • +
  • + 0.2 false true 10 @@ -116,6 +123,7 @@
  • + 0.2 false true 8 @@ -190,9 +198,15 @@
  • Absorber
  • + +
  • Worker
  • +
  • Soldier
  • +
  • Slave
  • +
  • + 0.04 true false Absorber_Pad_Dirty @@ -254,6 +268,7 @@
  • + 0.04 true false Absorber_Pad_Dirty diff --git a/1.4/Defs/ThoughtDefs/Thoughts_sex.xml b/1.4/Defs/ThoughtDefs/Thoughts_sex.xml index e35d3e8..0b0bf12 100644 --- a/1.4/Defs/ThoughtDefs/Thoughts_sex.xml +++ b/1.4/Defs/ThoughtDefs/Thoughts_sex.xml @@ -30,6 +30,10 @@ 1
  • + +
  • CameInsideMIdeo
  • +
  • CameInsideM
  • +
    @@ -63,6 +67,9 @@ 5 + +
  • CameInsideFIdeo
  • +
    @@ -80,6 +87,16 @@ -10 + +
  • HaterCameInsideFEstrus
  • +
  • CameInsideF
  • +
  • HaterCameInsideFSafe
  • +
  • CameInsideFLowFert
  • +
  • CameInsideFFetishSafe
  • +
  • HaterCameInsideFIdeo
  • +
  • CameInsideFFetish
  • +
  • CameInsideFIdeo
  • +
    @@ -93,10 +110,19 @@
  • What was I thinking, letting him do that? - -2 + -3 -5
  • + +
  • CameInsideF
  • +
  • HaterCameInsideFSafe
  • +
  • CameInsideFLowFert
  • +
  • CameInsideFFetishSafe
  • +
  • HaterCameInsideFIdeo
  • +
  • CameInsideFFetish
  • +
  • CameInsideFIdeo
  • +
    @@ -113,6 +139,12 @@ -1 + +
  • CameInsideFFetishSafe
  • +
  • HaterCameInsideFIdeo
  • +
  • CameInsideFFetish
  • +
  • CameInsideFIdeo
  • +
    @@ -130,6 +162,14 @@ -2 + +
  • HaterCameInsideFSafe
  • +
  • CameInsideFLowFert
  • +
  • CameInsideFFetishSafe
  • +
  • HaterCameInsideFIdeo
  • +
  • CameInsideFFetish
  • +
  • CameInsideFIdeo
  • +
    @@ -147,6 +187,11 @@ 1 + +
  • HaterCameInsideFIdeo
  • +
  • CameInsideFFetish
  • +
  • CameInsideFIdeo
  • +
    @@ -164,6 +209,13 @@ -5 + +
  • CameInsideFLowFert
  • +
  • CameInsideFFetishSafe
  • +
  • HaterCameInsideFIdeo
  • +
  • CameInsideFFetish
  • +
  • CameInsideFIdeo
  • +
    @@ -226,7 +278,7 @@ - + EggRestorationReceived Thought_Memory 4 @@ -239,6 +291,77 @@ - - + + + CameInsideMIdeo + Thought_MemorySocial + 1.0 + 5 + 0.4 + +
  • + + It is my duty to make her pregnant. + 3 + 2 +
  • +
    + +
  • CameInsideM
  • +
    +
    + + + CameInsideFIdeo + Thought_MemorySocial + 3.0 + 5 + 0.1 + 1 + +
  • + + I hope this makes me pregnant like should be. + 15 + 10 +
  • +
    +
    + + + HaterCameInsideFIdeo + Thought_MemorySocial + 3.0 + 5 + 0.1 + 1 + +
  • + + I know I should become pregnant, but does it have to be his? + 5 + 2 +
  • +
    + +
  • CameInsideFFetish
  • +
  • CameInsideFIdeo
  • +
    +
    + + + HateTookContraceptivePillIdeo + Thought_Memory + 7.0 + 5 + 0.1 + +
  • + + My beliefs demand I become pregnant. + -5 +
  • +
    +
    + diff --git a/1.4/Languages/ChineseTraditional/DefInjected/HediffDef/Hediffs_Menstruation.xml b/1.4/Languages/ChineseTraditional/DefInjected/HediffDef/Hediffs_Menstruation.xml index df23159..fef8db8 100644 --- a/1.4/Languages/ChineseTraditional/DefInjected/HediffDef/Hediffs_Menstruation.xml +++ b/1.4/Languages/ChineseTraditional/DefInjected/HediffDef/Hediffs_Menstruation.xml @@ -13,4 +13,10 @@ 緩解源自於痛經及此類神經痛的苦楚。 環孢素 由於免疫抑製劑的作用,身體抵抗感染和疾病的能力受扼制。 + + 受費洛蒙影響 + 受附近某人處於發情期之故,此人的性需求及娛樂需求正急遽上升。 + + + diff --git a/1.4/Languages/ChineseTraditional/DefInjected/ThoughtDefs/Thoughts_sex.xml b/1.4/Languages/ChineseTraditional/DefInjected/ThoughtDefs/Thoughts_sex.xml index b1eeb56..86e27de 100644 --- a/1.4/Languages/ChineseTraditional/DefInjected/ThoughtDefs/Thoughts_sex.xml +++ b/1.4/Languages/ChineseTraditional/DefInjected/ThoughtDefs/Thoughts_sex.xml @@ -11,4 +11,13 @@ 卵母細胞再生術 我可以繼續繁衍一小段時間了! + + 內射了{0} + 讓她懷孕正是我的職責所在。 + {0}內射了我 + 我希望這次能懷上,讓我盡到責任。 + {0}內射了我 + 我知道我有生育的義務,但是難道非他不可嗎? + 服用避孕藥 + 我的信仰要求我能夠懷孕。 diff --git a/1.4/Languages/ChineseTraditional/Keyed/RJW_Menstruation.xml b/1.4/Languages/ChineseTraditional/Keyed/RJW_Menstruation.xml index 9e5a55e..d190877 100644 --- a/1.4/Languages/ChineseTraditional/Keyed/RJW_Menstruation.xml +++ b/1.4/Languages/ChineseTraditional/Keyed/RJW_Menstruation.xml @@ -154,4 +154,18 @@ (測試中!) 允許在「生機」(Biotech)追加的懷孕機制中出現多胞胎。 啟用這個選項將允許同卵或異卵雙胞胎出現在「生機」(Biotech)追加的懷孕機制中。 一併將啟用雜交系統;然而兩個類人(humanlikes)生物絕不可能生出動物。 + + 玩家小人刷新間隔 + 殖民者、囚犯和奴隸的子宮狀態應該每隔多久刷新一次? +較小的刷新間隔可以更精確地模擬真實子宮;較大的刷新間隔可以提升遊戲流暢度 + 非玩家小人刷新間隔 + 非玩家勢力控制下的小人的子宮應該每隔多久刷新一次? +較小的刷新間隔可以更精確地模擬真實子宮;較大的刷新間隔可以提升遊戲流暢度 + 動物子宮刷新間隔 + 動物們的子宮應該多久刷新一次? +較小的刷新間隔可以更精確地模擬真實子宮;較大的刷新間隔可以提升遊戲流暢度 + 啟用費洛蒙機制 + 擁有發情期的類人生物在發情期將刺激附近的雄性類人生物,使其性慾大增。 + 動物費洛蒙效果 + 選定擁有發情期的動物在發情期內對類人生物的影響。 diff --git a/1.4/Languages/English/Keyed/RJW_Menstruation.xml b/1.4/Languages/English/Keyed/RJW_Menstruation.xml index 18611bd..7aa650e 100644 --- a/1.4/Languages/English/Keyed/RJW_Menstruation.xml +++ b/1.4/Languages/English/Keyed/RJW_Menstruation.xml @@ -36,10 +36,8 @@ Ovulated - Gather cum into bucket - Store cum in womb Unknown - + Absorbed Enable womb icon @@ -74,7 +72,11 @@ Show only image of a fetus after discovered pregnancy. Do not show any information about a fetus. Enable menopause - Enable menopause effect that makes pawn infertile when they run out of eggs If you have problems with long lived races, turn off this option. + Enable menopause effect that makes pawn infertile when they run out of eggs. If you have problems with long lived races, turn off this option. + Enable pheromones + Allow humanlikes in visible estrus to increase the sex drive of nearby humanlike males. + Animal pheromone effect + Set the effect that animals in visible estrus have on humanlikes. Use multiple pregnancy Use multiple pregnancy instead RJW's default pregnancy Disable this option if you are in trouble with impregnation RJW pregnancy should be turned on. Enable hetero ovular twins @@ -118,7 +120,6 @@ Enable permanent vagina stretch after birth. If you are using another mod handling this, turn off this option. Morph power Set morph power. - Enable gather cum gizmo Estrus overrides RJW hookup settings If enabled, a pawn in visible estrus will use these settings for potential impregnation hookups instead of the RJW settings. All settings default to their RJW counterparts. Hookup minimum fuckability in estrus @@ -138,7 +139,6 @@ Draw womb icon for drafted pawns Reset to default - Gather cum Vaginal washing Custom Hybrid Editor diff --git a/1.4/Languages/Japanese/DefInjected/ApparelLayerDef/RJWMenstruation.xml b/1.4/Languages/Japanese/DefInjected/ApparelLayerDef/RJWMenstruation.xml new file mode 100644 index 0000000..cf5232e --- /dev/null +++ b/1.4/Languages/Japanese/DefInjected/ApparelLayerDef/RJWMenstruation.xml @@ -0,0 +1,4 @@ + + + 性器 + \ No newline at end of file diff --git a/1.4/Languages/Japanese/DefInjected/Drugs/Pills_Menstruation.xml b/1.4/Languages/Japanese/DefInjected/Drugs/Pills_Menstruation.xml new file mode 100644 index 0000000..a801670 --- /dev/null +++ b/1.4/Languages/Japanese/DefInjected/Drugs/Pills_Menstruation.xml @@ -0,0 +1,7 @@ + + + 鎮痛剤 + 生理痛を24時間和らげます。 その他の痛みにも効果あり。 + シクロスポリン + 免疫抑制剤。 抗精子抗体を直すことができるが、24時間の間、体の免疫力は低下する。 + diff --git a/1.4/Languages/Japanese/DefInjected/HediffDef/RJWMenstruation.xml b/1.4/Languages/Japanese/DefInjected/HediffDef/RJWMenstruation.xml new file mode 100644 index 0000000..e066065 --- /dev/null +++ b/1.4/Languages/Japanese/DefInjected/HediffDef/RJWMenstruation.xml @@ -0,0 +1,14 @@ + + + + 生理中 + 月経周期の終わりに膣からの出血。よく痛い。 + 不快 + 痒い + 痛い + 苦痛 + + + + + \ No newline at end of file diff --git a/1.4/Languages/Japanese/DefInjected/JobDef/RJWMenstruation.xml b/1.4/Languages/Japanese/DefInjected/JobDef/RJWMenstruation.xml new file mode 100644 index 0000000..abd8a16 --- /dev/null +++ b/1.4/Languages/Japanese/DefInjected/JobDef/RJWMenstruation.xml @@ -0,0 +1,7 @@ + + + 膣を洗っている + + + + \ No newline at end of file diff --git a/1.4/Languages/Japanese/DefInjected/StatDef/RJWMenstruation.xml b/1.4/Languages/Japanese/DefInjected/StatDef/RJWMenstruation.xml new file mode 100644 index 0000000..c5ce3d0 --- /dev/null +++ b/1.4/Languages/Japanese/DefInjected/StatDef/RJWMenstruation.xml @@ -0,0 +1,7 @@ + + + 吸収量 + 吸収可能な液体の最大量。 + + + \ No newline at end of file diff --git a/1.4/Languages/Japanese/DefInjected/ThingDef/RJWMenstruation.xml b/1.4/Languages/Japanese/DefInjected/ThingDef/RJWMenstruation.xml new file mode 100644 index 0000000..76f4ba9 --- /dev/null +++ b/1.4/Languages/Japanese/DefInjected/ThingDef/RJWMenstruation.xml @@ -0,0 +1,31 @@ + + + + +タンポン + +膣内の体液を吸収するタンポン。長時間に着けて感染症を引き起こすことがある。 + +汚れたタンポン + +濡れた使用済みタンポン。そのままにしておくと感染症を引き起こす可能性がある。 + +生理用品 + +膣からの体液を吸収するためのナプキン。 + +汚れた生理用品 + +濡れた使用済みナプキン + +卵巣再生薬 + +卵巣を回復させ、卵子の数をある程度を回復させる。 卵子がほとんど残っていない卵巣にはあまり効果がない。 更年期の回復はできない。 + +排卵剤 + +過排卵を誘発し、次の排卵で卵子を1~4個余分に産生させる。 更年期を早める可能性がある。 + +混じった物 + + \ No newline at end of file diff --git a/1.4/Languages/Japanese/DefInjected/ThoughtDefs/RJWMenstruation.xml b/1.4/Languages/Japanese/DefInjected/ThoughtDefs/RJWMenstruation.xml new file mode 100644 index 0000000..7092dde --- /dev/null +++ b/1.4/Languages/Japanese/DefInjected/ThoughtDefs/RJWMenstruation.xml @@ -0,0 +1,33 @@ + + + ぽたぽた + これを吸収するものはないのかな? + {0}に中出した + ライバルに中出した + {0}に中出した + 気持ちよかった。 + {0}に中出した + 妊娠するといいな。 + {0}に中出された + あいつの子を妊娠したくない! + {0}に中出された + そんなことをさせるなんて、私は何を考えていたんだろう? + {0}に中出された + 可能性は低いけど、妊娠できるかどうか心配で... + {0}に中出された + 妊娠しないか心配なんだ。 + {0}に中出された + 妊娠するとは思わないけど、妄想するのは楽しい。 + {0}に中出された + 妊娠することはないだろうけど、やっぱり嫌だ。 + 望まない妊娠 + 赤ん坊の世話なんてできるか?どうすればいい? + 望まない妊娠 + 赤ちゃんが生まれる。なんとかなるといいな。 + 避妊ピルを飲んだ + もう大丈夫です。 + 避妊ピルを飲んだ + 妊娠したい。 + 卵巣復活を得た + もう少しの間、繁殖ことができる。 + diff --git a/1.4/Languages/Japanese/Keyed/RJW_Menstruation.xml b/1.4/Languages/Japanese/Keyed/RJW_Menstruation.xml new file mode 100644 index 0000000..538bdc3 --- /dev/null +++ b/1.4/Languages/Japanese/Keyed/RJW_Menstruation.xml @@ -0,0 +1,152 @@ + + + RJW Menstruation Cycle + + 経血 + 空っぽ + 卵胞期 + 排卵期 + 黄体期 + 月経期 + 妊娠 + 出産後 + 無し + クリマクテリック + 更年期 + 無発情期 + 卵巣は卵子を放出するの準備をしています。この時期の終わりに排卵が起こります。 + 卵巣は卵子を放出するの準備をしています。精液が子宮に入ると排卵が起こります。 + 卵巣が卵子を子宮に放出しています。 + 子宮は受精卵を受け入れる準備ができている。この時期が終る前に受精卵が着床すれば妊娠となります。 + 子宮内膜は剥がれ落ち、着床できなかった受精卵を排出します。 + 子宮に赤ちゃんがいます。時間とケアによって、この世界の新しい住人となる。 + 子宮は最近の妊娠から回復しています。 + 子宮は繁殖能力がなく、妊娠することはできない。 + 卵巣が枯渇すると、月経周期が不規則になる。 + 。卵巣が枯渇し、子宮が卵子を産み出せなくなる。 + 繁殖期を過ぎた。時期が来れば発情周期は再開する。 + ステータス + 自分を搾乳する + ステータス + 胎児 + 父親 + 精液リスト + 受精卵 + 受精中 + 排卵済み + + + 精液をバケッツに集める + 子宮に精液をためる + 不明 + + + + Enable womb icon + Enable button in health tab + Enable animal cycle + Simulate animal cycles. Not recommended. + Implantation chance + Base implantation chance of fertilized egg This value affects the chance of impregnation. + Fertilization chance + The fertilization chance per ml of sperm per hour This value affects the chance of impregnation. + Cum decay ratio per hour + The amount of cum in the womb will drop by this amount every hour This value affects the chance of impregnation. + Cum fertility decay ratio per hour + Cum will lose fertility by this amount every hour This value affects fertilization chance indirectly. + Cycle acceleration + Accelerate menstruation cycle This can cause early menopause and infertility. Setting this lower than x12 is recommended. Rimworld's timescale: x6(default) + Colonist update interval + How often the womb of each of your colonists, prisoners, and slaves update. Lowering this will improve accuracy, increasing this can improve performance. + Non-colonist update interval + How often the womb of humans you don't control update. Lowering this will improve accuracy, increasing this can improve performance. + Animal update interval + How often the womb of animals update. Lowering this will improve accuracy, increasing this can improve performance. + Debug + Show debug information. + Womb status + Draw womb icon in status window. + Vagina and breast status + Draw vagina, anus and breast icons in the status window. + Fetus information level + Show all information about a fetus. + Show all information about a fetus after discovered pregnancy. + Show only image of a fetus after discovered pregnancy. + Do not show any information about a fetus. + Enable menopause + Enable menopause effect that makes pawn infertile when they run out of eggs If you have problems with long lived races, turn off this option. + Use multiple pregnancy + Use multiple pregnancy instead RJW's default pregnancy Disable this option if you are in trouble with impregnation RJW pregnancy should be turned on. + Enable hetero ovular twins + Allow pregnancy from multiple eggs at the same time. + Enable enzygotic twins + Enable a single egg to result in multiple identical offspring. + Enzygotic twins chance + The chance of identical twins. + Max enzygotic twins + The maximum number of identical siblings. + Enable egg overlay + Enable egg overlay on womb icon. + Bleeding amount + Estimated total bleeding amount + The approximate bleeding amount. The normal bleeding amount of a human is about 20~80ml per cycle. + Colonist + Prisoner + Allied Faction + Neutral + Hostile Faction + Target pawns: + The gizmo and button will appear for these pawns + Use hybrid extension + Overrides RJW and RaceSupport's hybrid definition. Dominant hybrid extension determines whose definition used first. Not recommended to change this. + Dominant hybrid extension + + + Breast growth during pregnancy + Change how much a pregnant pawn's breasts will grow when pregnant. Some pawns will grow more than others. + Nipple change during pregnancy + Change how much a pregnant pawn's nipples will change during pregnancy. + Permanent nipple change after pregnancy + Adjusts approximately how much of a pregnant pawn's nipples will remain changed after the pregnancy ends. + Customize Hybrids + Open custom hybrid editor. This will overrides hybrid definitions of XML files. + Allow shrink icon + Let icon become smaller if needed. + Egg lifespan multiplier + Multiply egg's lifespan. All non-implanted eggs will die at end of luteal stage regardless of this setting. + Enable vagina morph after birth + Enable permanent vagina stretch after birth. If you are using another mod handling this, turn off this option. + Morph power + Set morph power. + Enable gather cum gizmo + Estrus overrides RJW hookup settings + If enabled, a pawn in visible estrus will use these settings for potential impregnation hookups instead of the RJW settings. All settings default to their RJW counterparts. + Hookup minimum fuckability in estrus + Hookup minimum attractability in estrus + Hookup minimum opinion in estrus + Estimated sperm lifespan + Estimated egg lifespan + 排卵 {0} + 排卵時に各卵が放出される確率。 + 受精卵の着床確率。 この時間に受精する確率{0}% + Use basic RJW pregnancy + Use menstruation multiple pregnancy + Use Biotech pregnancy + (EXPERIMENTAL) Enable multiple babies/twins in a single Biotech pregnancy. + Enabling this option will allow identical and hetero ovular twins with Biotech. Also allows the hybrid system, but two humanlikes cannot produce an animal. + Show womb status when drafted + Draw womb icon for drafted pawns + Reset to default + + 精液を収集 + 膣を洗う + + Custom Hybrid Editor + Hybrids of {0} + When {0} breed with {1}, {2} will be born at {3} chance. If both races have hybrid definitions for each other, the father's definition will be used. + + 卵子がない + 子宮が必要 + {PAWN_labelShort} has completed {PAWN_possessive} egg restoration cycle. + + \ No newline at end of file diff --git a/1.4/MilkModule/Assemblies/MilkModule.dll b/1.4/MilkModule/Assemblies/MilkModule.dll deleted file mode 100644 index d34b673..0000000 Binary files a/1.4/MilkModule/Assemblies/MilkModule.dll and /dev/null differ diff --git a/1.4/MilkModule/Defs/JobDefs/Jobs_MilkSelf_MC.xml b/1.4/MilkModule/Defs/JobDefs/Jobs_MilkSelf_MC.xml deleted file mode 100644 index 69cdc4d..0000000 --- a/1.4/MilkModule/Defs/JobDefs/Jobs_MilkSelf_MC.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - LactateSelf_MC - MilkModule.JobDriver_MilkSelf_MC - lactating self - true - - diff --git a/1.4/Patches/PawnModExtensions_Animals.xml b/1.4/Patches/PawnModExtensions_Animals.xml index 91a2e87..19172ac 100644 --- a/1.4/Patches/PawnModExtensions_Animals.xml +++ b/1.4/Patches/PawnModExtensions_Animals.xml @@ -82,7 +82,7 @@ /Defs/ThingDef[defName="Husky"]
  • - Fetus/Canines/Fetus_Dog + Fetus/Canines/Fetus_Canine (255,255,255,255) 0.05 @@ -95,7 +95,7 @@ /Defs/ThingDef[defName="LabradorRetriever"]
  • - Fetus/Canines/Fetus_Dog + Fetus/Canines/Fetus_Canine (255,255,255,255) 0.05 @@ -108,7 +108,7 @@ /Defs/ThingDef[defName="YorkshireTerrier"]
  • - Fetus/Canines/Fetus_Dog + Fetus/Canines/Fetus_Canine (255,255,255,255) 0.05 @@ -122,7 +122,7 @@ /Defs/ThingDef[defName="Warg"]
  • - Fetus/Canines/Fetus_Dog + Fetus/Canines/Fetus_Canine (255,255,255,255) 0.05 @@ -135,7 +135,7 @@ /Defs/ThingDef[@Name="ThingBaseWolf"]
  • - Fetus/Canines/Fetus_Dog + Fetus/Canines/Fetus_Canine (255,255,255,255) 0.05 @@ -148,7 +148,7 @@ /Defs/ThingDef[@Name="ThingBaseFox"]
  • - Fetus/Canines/Fetus_Dog + Fetus/Canines/Fetus_CanineV (255,255,255,255) 0.05 @@ -161,7 +161,7 @@ /Defs/ThingDef[defName="Pig"]
  • - Fetus/Livestocks/Fetus_Pig + Fetus/Pigs/Fetus_Pig (255,255,255,255) 0.8 @@ -174,7 +174,7 @@ /Defs/ThingDef[defName="WildBoar"]
  • - Fetus/Livestocks/Fetus_Pig + Fetus/Pigs/Fetus_Pig (255,255,255,255) 0.8 @@ -215,7 +215,7 @@ Defs/ThingDef[defName="Sheep"]
  • - Fetus/Livestocks/Fetus_S_Bovine + Fetus/Bovines/Fetus_Bovine (255,255,255,255) 0.3 @@ -230,7 +230,7 @@ Defs/ThingDef[defName="Goat"]
  • - Fetus/Livestocks/Fetus_S_Bovine + Fetus/Bovines/Fetus_Bovine (255,255,255,255) 0.3 @@ -245,7 +245,7 @@ Defs/ThingDef[defName="Ibex"]
  • - Fetus/Livestocks/Fetus_S_Bovine + Fetus/Cervines/Fetus_Cervine (255,255,255,255) 0.3 @@ -260,7 +260,7 @@ Defs/ThingDef[defName="Deer"]
  • - Fetus/Livestocks/Fetus_S_Bovine + Fetus/Cervines/Fetus_Cervine (255,255,255,255) 0.3 @@ -275,7 +275,7 @@ Defs/ThingDef[defName="Gazelle"]
  • - Fetus/Livestocks/Fetus_Bovine + Fetus/Cervines/Fetus_Cervine (255,255,255,255) 0.3 @@ -290,7 +290,7 @@ Defs/ThingDef[defName="Alpaca"]
  • - Fetus/Livestocks/Fetus_Bovine + Fetus/Bovines/Fetus_Bovine (255,255,255,255) 0.3 @@ -305,7 +305,7 @@ Defs/ThingDef[defName="Yak"]
  • - Fetus/Livestocks/Fetus_Bovine + Fetus/Bovines/Fetus_Bovine (255,255,255,255) 0.3 @@ -320,7 +320,7 @@ Defs/ThingDef[defName="Elk"]
  • - Fetus/Livestocks/Fetus_Bovine + Fetus/Cervines/Fetus_Cervine (255,255,255,255) 0.4 @@ -335,7 +335,7 @@ Defs/ThingDef[defName="Caribou"]
  • - Fetus/Livestocks/Fetus_S_Bovine + Fetus/Cervines/Fetus_Cervine (255,255,255,255) 0.4 @@ -350,7 +350,7 @@ Defs/ThingDef[defName="Horse"]
  • - Fetus/Livestocks/Fetus_Bovine + Fetus/Bovines/Fetus_Bovine (255,255,255,255) 0.4 @@ -365,7 +365,7 @@ Defs/ThingDef[defName="Donkey"]
  • - Fetus/Livestocks/Fetus_Bovine + Fetus/Bovines/Fetus_Bovine (255,255,255,255) 0.4 @@ -380,7 +380,7 @@ Defs/ThingDef[defName="Cow"]
  • - Fetus/Livestocks/Fetus_Bovine + Fetus/Bovines/Fetus_Bovine (255,255,255,255) 0.4 @@ -395,7 +395,7 @@ Defs/ThingDef[defName="Boomalope"]
  • - Fetus/Livestocks/Fetus_Bovine + Fetus/Boomies/Fetus_Boomalope (255,255,255,255) 0.4 @@ -410,7 +410,7 @@ Defs/ThingDef[defName="Muffalo"]
  • - Fetus/Livestocks/Fetus_Bovine + Fetus/Muffalos/Fetus_Muffalo (255,255,255,255) 0.4 @@ -425,7 +425,7 @@ Defs/ThingDef[defName="Bison"]
  • - Fetus/Livestocks/Fetus_S_Bovine + Fetus/Bovines/Fetus_Bovine (255,255,255,255) 0.4 @@ -440,7 +440,7 @@ Defs/ThingDef[defName="Dromedary"]
  • - Fetus/Livestocks/Fetus_Bovine + Fetus/Bovines/Fetus_Bovine (255,255,255,255) 0.4 @@ -455,7 +455,7 @@ Defs/ThingDef[defName="Elephant"]
  • - Fetus/Livestocks/Fetus_Elephant + Fetus/Elephants/Fetus_Elephant (255,255,255,255) 0.5 @@ -470,7 +470,7 @@ Defs/ThingDef[defName="Rhinoceros"]
  • - Fetus/Livestocks/Fetus_Elephant + Fetus/Rhinoceroses/Fetus_Rhinoceros (255,255,255,255) 0.5 @@ -485,7 +485,7 @@ Defs/ThingDef[defName="Cat"]
  • - Fetus/Feline/Fetus_Cat + Fetus/Felines/Fetus_Feline_D (255,255,255,255) 0.1 @@ -500,7 +500,7 @@ Defs/ThingDef[@Name="BigCatThingBase"]
  • - Fetus/Feline/Fetus_Cat + Fetus/Felines/Fetus_Feline_W (255,255,255,255) 0.2 @@ -515,7 +515,7 @@ Defs/ThingDef[defName="Cougar"]
  • - Fetus/Feline/Fetus_Cat + Fetus/Felines/Fetus_Feline_W (255,255,255,255) 0.2 @@ -530,7 +530,7 @@ Defs/ThingDef[defName="Panther"]
  • - Fetus/Feline/Fetus_Cat + Fetus/Felines/Fetus_Feline_D (255,255,255,255) 0.2 @@ -545,7 +545,7 @@ Defs/ThingDef[defName="Iguana"]
  • - Fetus/Reptile/Fetus_Lizard + Fetus/Reptiles/Fetus_Reptile (255,255,255,255) 0.5 @@ -560,7 +560,7 @@ Defs/ThingDef[defName="Tortoise"]
  • - Fetus/Reptile/Fetus_Lizard + Fetus/Reptiles/Fetus_Reptile (255,255,255,255) 0.5 @@ -575,7 +575,7 @@ Defs/ThingDef[defName="Cobra"]
  • - Fetus/Reptile/Fetus_Snake + Fetus/Snakes/Fetus_Snake (255,255,255,255) 0.5 @@ -590,7 +590,7 @@ Defs/ThingDef[@Name="BaseHare"]
  • - Fetus/Pests/Fetus_Rodent + Fetus/Lagomorphs/Fetus_Lagomorph (255,255,255,255) 0.4 @@ -605,7 +605,7 @@ Defs/ThingDef[defName="Rat"]
  • - Fetus/Pests/Fetus_Rodent + Fetus/Rodents/Fetus_Rodent (255,255,255,255) 0.4 @@ -620,7 +620,7 @@ Defs/ThingDef[defName="Boomrat"]
  • - Fetus/Pests/Fetus_Rodent + Fetus/Boomies/Fetus_Boomrat (255,255,255,255) 0.4 @@ -635,7 +635,7 @@ Defs/ThingDef[defName="GuineaPig"]
  • - Fetus/Pests/Fetus_Rodent + Fetus/Rodents/Fetus_Rodent (255,255,255,255) 0.4 @@ -650,7 +650,7 @@ Defs/ThingDef[defName="Chinchilla"]
  • - Fetus/Pests/Fetus_Rodent + Fetus/Rodents/Fetus_Rodent (255,255,255,255) 0.4 @@ -665,7 +665,7 @@ Defs/ThingDef[defName="Snowhare"]
  • - Fetus/Pests/Fetus_Rodent + Fetus/Lagomorphs/Fetus_Lagomorph (255,255,255,255) 0.4 @@ -680,7 +680,7 @@ Defs/ThingDef[defName="Capybara"]
  • - Fetus/Pests/Fetus_Rodent + Fetus/Rodents/Fetus_Rodent (255,255,255,255) 0.4 @@ -695,7 +695,7 @@ Defs/ThingDef[defName="Raccoon"]
  • - Fetus/Pests/Fetus_Rodent + Fetus/Rodents/Fetus_Rodent (255,255,255,255) 0.4 @@ -710,7 +710,7 @@ Defs/ThingDef[defName="Alphabeaver"]
  • - Fetus/Pests/Fetus_Rodent + Fetus/Rodents/Fetus_Rodent (255,255,255,255) 0.4 @@ -725,7 +725,7 @@ Defs/ThingDef[defName="Squirrel"]
  • - Fetus/Pests/Fetus_Rodent + Fetus/Rodents/Fetus_Rodent (255,255,255,255) 0.4 @@ -740,7 +740,7 @@ Defs/ThingDef[defName="Monkey"]
  • - Fetus/Primate/Fetus_Monkey + Fetus/Primate/Fetus_Primate (255,255,255,255) 0.2 @@ -755,7 +755,7 @@ Defs/ThingDef[defName="Megasloth"]
  • - Fetus/Livestocks/Fetus_S_Bovine + Fetus/Megasloths/Fetus_Megasloth (255,255,255,255) 0.9 @@ -770,7 +770,7 @@ Defs/ThingDef[defName="Thrumbo"]
  • - Fetus/Livestocks/Fetus_S_Bovine + Fetus/Thrumbos/Fetus_Thrumbo (255,255,255,255) 0.7 @@ -785,7 +785,7 @@ Defs/ThingDef[@Name="BaseMechanoid"]
  • - Fetus/Mech/Fetus_Mech + Fetus/Mechanoids/Fetus_Mechanoid (255,255,255,255) 0.9 @@ -800,7 +800,7 @@ Defs/ThingDef[@Name="BaseMechanoidWalker"]
  • - Fetus/Mech/Fetus_Mech + Fetus/Mechanoids/Fetus_Mechanoid (255,255,255,255) 0.9 @@ -840,5 +840,20 @@
  • - + + + /Defs/ThingDef[@Name="BaseBear"] + +
  • + Fetus/Ursids/Fetus_Ursid + (255,255,255,255) + 0.05 + + + + +
  • +
    +
    + \ No newline at end of file diff --git a/1.4/Textures/Fetus/Birds/Fetus_Bird00.png b/1.4/Textures/Fetus/Birds/Fetus_Bird00.png index 0732d3a..b84e031 100644 Binary files a/1.4/Textures/Fetus/Birds/Fetus_Bird00.png and b/1.4/Textures/Fetus/Birds/Fetus_Bird00.png differ diff --git a/1.4/Textures/Fetus/Birds/Fetus_Bird01.png b/1.4/Textures/Fetus/Birds/Fetus_Bird01.png index ebe78a4..54642e5 100644 Binary files a/1.4/Textures/Fetus/Birds/Fetus_Bird01.png and b/1.4/Textures/Fetus/Birds/Fetus_Bird01.png differ diff --git a/1.4/Textures/Fetus/Birds/Fetus_Bird02.png b/1.4/Textures/Fetus/Birds/Fetus_Bird02.png index 5282c1b..5e52449 100644 Binary files a/1.4/Textures/Fetus/Birds/Fetus_Bird02.png and b/1.4/Textures/Fetus/Birds/Fetus_Bird02.png differ diff --git a/1.4/Textures/Fetus/Birds/Fetus_Bird03.png b/1.4/Textures/Fetus/Birds/Fetus_Bird03.png index 7709759..2c0ed35 100644 Binary files a/1.4/Textures/Fetus/Birds/Fetus_Bird03.png and b/1.4/Textures/Fetus/Birds/Fetus_Bird03.png differ diff --git a/1.4/Textures/Fetus/Birds/Fetus_Bird04.png b/1.4/Textures/Fetus/Birds/Fetus_Bird04.png index 9ccc7e0..daa5798 100644 Binary files a/1.4/Textures/Fetus/Birds/Fetus_Bird04.png and b/1.4/Textures/Fetus/Birds/Fetus_Bird04.png differ diff --git a/1.4/Textures/Fetus/Birds/Fetus_Bird05.png b/1.4/Textures/Fetus/Birds/Fetus_Bird05.png index afd7ec8..70ddab0 100644 Binary files a/1.4/Textures/Fetus/Birds/Fetus_Bird05.png and b/1.4/Textures/Fetus/Birds/Fetus_Bird05.png differ diff --git a/1.4/Textures/Fetus/Boars/Fetus_Boar00.png b/1.4/Textures/Fetus/Boars/Fetus_Boar00.png new file mode 100644 index 0000000..095bb39 Binary files /dev/null and b/1.4/Textures/Fetus/Boars/Fetus_Boar00.png differ diff --git a/1.4/Textures/Fetus/Boars/Fetus_Boar01.png b/1.4/Textures/Fetus/Boars/Fetus_Boar01.png new file mode 100644 index 0000000..b16ee03 Binary files /dev/null and b/1.4/Textures/Fetus/Boars/Fetus_Boar01.png differ diff --git a/1.4/Textures/Fetus/Boars/Fetus_Boar02.png b/1.4/Textures/Fetus/Boars/Fetus_Boar02.png new file mode 100644 index 0000000..75544ac Binary files /dev/null and b/1.4/Textures/Fetus/Boars/Fetus_Boar02.png differ diff --git a/1.4/Textures/Fetus/Boars/Fetus_Boar03.png b/1.4/Textures/Fetus/Boars/Fetus_Boar03.png new file mode 100644 index 0000000..b6bfab7 Binary files /dev/null and b/1.4/Textures/Fetus/Boars/Fetus_Boar03.png differ diff --git a/1.4/Textures/Fetus/Boars/Fetus_Boar04.png b/1.4/Textures/Fetus/Boars/Fetus_Boar04.png new file mode 100644 index 0000000..96abb97 Binary files /dev/null and b/1.4/Textures/Fetus/Boars/Fetus_Boar04.png differ diff --git a/1.4/Textures/Fetus/Boars/Fetus_Boar05.png b/1.4/Textures/Fetus/Boars/Fetus_Boar05.png new file mode 100644 index 0000000..bcff2f8 Binary files /dev/null and b/1.4/Textures/Fetus/Boars/Fetus_Boar05.png differ diff --git a/1.4/Textures/Fetus/Boomies/Fetus_Boomalope00.png b/1.4/Textures/Fetus/Boomies/Fetus_Boomalope00.png new file mode 100644 index 0000000..4567ee3 Binary files /dev/null and b/1.4/Textures/Fetus/Boomies/Fetus_Boomalope00.png differ diff --git a/1.4/Textures/Fetus/Boomies/Fetus_Boomalope01.png b/1.4/Textures/Fetus/Boomies/Fetus_Boomalope01.png new file mode 100644 index 0000000..f4c09ec Binary files /dev/null and b/1.4/Textures/Fetus/Boomies/Fetus_Boomalope01.png differ diff --git a/1.4/Textures/Fetus/Boomies/Fetus_Boomalope02.png b/1.4/Textures/Fetus/Boomies/Fetus_Boomalope02.png new file mode 100644 index 0000000..ca62e87 Binary files /dev/null and b/1.4/Textures/Fetus/Boomies/Fetus_Boomalope02.png differ diff --git a/1.4/Textures/Fetus/Boomies/Fetus_Boomalope03.png b/1.4/Textures/Fetus/Boomies/Fetus_Boomalope03.png new file mode 100644 index 0000000..e69c140 Binary files /dev/null and b/1.4/Textures/Fetus/Boomies/Fetus_Boomalope03.png differ diff --git a/1.4/Textures/Fetus/Boomies/Fetus_Boomalope04.png b/1.4/Textures/Fetus/Boomies/Fetus_Boomalope04.png new file mode 100644 index 0000000..df67cc7 Binary files /dev/null and b/1.4/Textures/Fetus/Boomies/Fetus_Boomalope04.png differ diff --git a/1.4/Textures/Fetus/Boomies/Fetus_Boomalope05.png b/1.4/Textures/Fetus/Boomies/Fetus_Boomalope05.png new file mode 100644 index 0000000..28ae365 Binary files /dev/null and b/1.4/Textures/Fetus/Boomies/Fetus_Boomalope05.png differ diff --git a/1.4/Textures/Fetus/Boomies/Fetus_Boomrat00.png b/1.4/Textures/Fetus/Boomies/Fetus_Boomrat00.png new file mode 100644 index 0000000..402e595 Binary files /dev/null and b/1.4/Textures/Fetus/Boomies/Fetus_Boomrat00.png differ diff --git a/1.4/Textures/Fetus/Boomies/Fetus_Boomrat01.png b/1.4/Textures/Fetus/Boomies/Fetus_Boomrat01.png new file mode 100644 index 0000000..e590424 Binary files /dev/null and b/1.4/Textures/Fetus/Boomies/Fetus_Boomrat01.png differ diff --git a/1.4/Textures/Fetus/Boomies/Fetus_Boomrat02.png b/1.4/Textures/Fetus/Boomies/Fetus_Boomrat02.png new file mode 100644 index 0000000..a340f7e Binary files /dev/null and b/1.4/Textures/Fetus/Boomies/Fetus_Boomrat02.png differ diff --git a/1.4/Textures/Fetus/Boomies/Fetus_Boomrat03.png b/1.4/Textures/Fetus/Boomies/Fetus_Boomrat03.png new file mode 100644 index 0000000..c90661e Binary files /dev/null and b/1.4/Textures/Fetus/Boomies/Fetus_Boomrat03.png differ diff --git a/1.4/Textures/Fetus/Boomies/Fetus_Boomrat04.png b/1.4/Textures/Fetus/Boomies/Fetus_Boomrat04.png new file mode 100644 index 0000000..c16cbaa Binary files /dev/null and b/1.4/Textures/Fetus/Boomies/Fetus_Boomrat04.png differ diff --git a/1.4/Textures/Fetus/Boomies/Fetus_Boomrat05.png b/1.4/Textures/Fetus/Boomies/Fetus_Boomrat05.png new file mode 100644 index 0000000..09fbb40 Binary files /dev/null and b/1.4/Textures/Fetus/Boomies/Fetus_Boomrat05.png differ diff --git a/1.4/Textures/Fetus/Bovines/Fetus_Bovine00.png b/1.4/Textures/Fetus/Bovines/Fetus_Bovine00.png new file mode 100644 index 0000000..4567ee3 Binary files /dev/null and b/1.4/Textures/Fetus/Bovines/Fetus_Bovine00.png differ diff --git a/1.4/Textures/Fetus/Bovines/Fetus_Bovine01.png b/1.4/Textures/Fetus/Bovines/Fetus_Bovine01.png new file mode 100644 index 0000000..f4c09ec Binary files /dev/null and b/1.4/Textures/Fetus/Bovines/Fetus_Bovine01.png differ diff --git a/1.4/Textures/Fetus/Bovines/Fetus_Bovine02.png b/1.4/Textures/Fetus/Bovines/Fetus_Bovine02.png new file mode 100644 index 0000000..65b0b50 Binary files /dev/null and b/1.4/Textures/Fetus/Bovines/Fetus_Bovine02.png differ diff --git a/1.4/Textures/Fetus/Bovines/Fetus_Bovine03.png b/1.4/Textures/Fetus/Bovines/Fetus_Bovine03.png new file mode 100644 index 0000000..57294b6 Binary files /dev/null and b/1.4/Textures/Fetus/Bovines/Fetus_Bovine03.png differ diff --git a/1.4/Textures/Fetus/Bovines/Fetus_Bovine04.png b/1.4/Textures/Fetus/Bovines/Fetus_Bovine04.png new file mode 100644 index 0000000..a77c1a6 Binary files /dev/null and b/1.4/Textures/Fetus/Bovines/Fetus_Bovine04.png differ diff --git a/1.4/Textures/Fetus/Bovines/Fetus_Bovine05.png b/1.4/Textures/Fetus/Bovines/Fetus_Bovine05.png new file mode 100644 index 0000000..208fbef Binary files /dev/null and b/1.4/Textures/Fetus/Bovines/Fetus_Bovine05.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine00.png b/1.4/Textures/Fetus/Canines/Fetus_Canine00.png new file mode 100644 index 0000000..0156d13 Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine00.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine00_Multiplet_2.png b/1.4/Textures/Fetus/Canines/Fetus_Canine00_Multiplet_2.png new file mode 100644 index 0000000..dd61d24 Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine00_Multiplet_2.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine01.png b/1.4/Textures/Fetus/Canines/Fetus_Canine01.png new file mode 100644 index 0000000..822e5f6 Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine01.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine01_Multiplet_2.png b/1.4/Textures/Fetus/Canines/Fetus_Canine01_Multiplet_2.png new file mode 100644 index 0000000..ce756c2 Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine01_Multiplet_2.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine02.png b/1.4/Textures/Fetus/Canines/Fetus_Canine02.png new file mode 100644 index 0000000..f66681a Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine02.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine02_Multiplet_2.png b/1.4/Textures/Fetus/Canines/Fetus_Canine02_Multiplet_2.png new file mode 100644 index 0000000..a549eed Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine02_Multiplet_2.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine03.png b/1.4/Textures/Fetus/Canines/Fetus_Canine03.png new file mode 100644 index 0000000..894e364 Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine03.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine03_Multiplet_2.png b/1.4/Textures/Fetus/Canines/Fetus_Canine03_Multiplet_2.png new file mode 100644 index 0000000..6fbfd4b Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine03_Multiplet_2.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine04.png b/1.4/Textures/Fetus/Canines/Fetus_Canine04.png new file mode 100644 index 0000000..48c7dc5 Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine04.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine04_Multiplet_2.png b/1.4/Textures/Fetus/Canines/Fetus_Canine04_Multiplet_2.png new file mode 100644 index 0000000..715be9c Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine04_Multiplet_2.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine05.png b/1.4/Textures/Fetus/Canines/Fetus_Canine05.png new file mode 100644 index 0000000..8d44bca Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine05.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine05_Multiplet_2.png b/1.4/Textures/Fetus/Canines/Fetus_Canine05_Multiplet_2.png new file mode 100644 index 0000000..b4c59ed Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine05_Multiplet_2.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine_V00.png b/1.4/Textures/Fetus/Canines/Fetus_Canine_V00.png new file mode 100644 index 0000000..0156d13 Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine_V00.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine_V01.png b/1.4/Textures/Fetus/Canines/Fetus_Canine_V01.png new file mode 100644 index 0000000..822e5f6 Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine_V01.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine_V02.png b/1.4/Textures/Fetus/Canines/Fetus_Canine_V02.png new file mode 100644 index 0000000..f66681a Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine_V02.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine_V03.png b/1.4/Textures/Fetus/Canines/Fetus_Canine_V03.png new file mode 100644 index 0000000..894e364 Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine_V03.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine_V04.png b/1.4/Textures/Fetus/Canines/Fetus_Canine_V04.png new file mode 100644 index 0000000..48c7dc5 Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine_V04.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Canine_V05.png b/1.4/Textures/Fetus/Canines/Fetus_Canine_V05.png new file mode 100644 index 0000000..1e4caf8 Binary files /dev/null and b/1.4/Textures/Fetus/Canines/Fetus_Canine_V05.png differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Dog00.png b/1.4/Textures/Fetus/Canines/Fetus_Dog00.png deleted file mode 100644 index 94801e0..0000000 Binary files a/1.4/Textures/Fetus/Canines/Fetus_Dog00.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Dog01.png b/1.4/Textures/Fetus/Canines/Fetus_Dog01.png deleted file mode 100644 index 754d5e2..0000000 Binary files a/1.4/Textures/Fetus/Canines/Fetus_Dog01.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Dog02.png b/1.4/Textures/Fetus/Canines/Fetus_Dog02.png deleted file mode 100644 index 7b695d5..0000000 Binary files a/1.4/Textures/Fetus/Canines/Fetus_Dog02.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Dog03.png b/1.4/Textures/Fetus/Canines/Fetus_Dog03.png deleted file mode 100644 index d9113ed..0000000 Binary files a/1.4/Textures/Fetus/Canines/Fetus_Dog03.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Dog04.png b/1.4/Textures/Fetus/Canines/Fetus_Dog04.png deleted file mode 100644 index c0ce6ed..0000000 Binary files a/1.4/Textures/Fetus/Canines/Fetus_Dog04.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Canines/Fetus_Dog05.png b/1.4/Textures/Fetus/Canines/Fetus_Dog05.png deleted file mode 100644 index 3a13bb1..0000000 Binary files a/1.4/Textures/Fetus/Canines/Fetus_Dog05.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Cervines/Fetus_Cervine00.png b/1.4/Textures/Fetus/Cervines/Fetus_Cervine00.png new file mode 100644 index 0000000..095bb39 Binary files /dev/null and b/1.4/Textures/Fetus/Cervines/Fetus_Cervine00.png differ diff --git a/1.4/Textures/Fetus/Cervines/Fetus_Cervine01.png b/1.4/Textures/Fetus/Cervines/Fetus_Cervine01.png new file mode 100644 index 0000000..b16ee03 Binary files /dev/null and b/1.4/Textures/Fetus/Cervines/Fetus_Cervine01.png differ diff --git a/1.4/Textures/Fetus/Cervines/Fetus_Cervine02.png b/1.4/Textures/Fetus/Cervines/Fetus_Cervine02.png new file mode 100644 index 0000000..db9d9d6 Binary files /dev/null and b/1.4/Textures/Fetus/Cervines/Fetus_Cervine02.png differ diff --git a/1.4/Textures/Fetus/Cervines/Fetus_Cervine03.png b/1.4/Textures/Fetus/Cervines/Fetus_Cervine03.png new file mode 100644 index 0000000..f9ad8f5 Binary files /dev/null and b/1.4/Textures/Fetus/Cervines/Fetus_Cervine03.png differ diff --git a/1.4/Textures/Fetus/Cervines/Fetus_Cervine04.png b/1.4/Textures/Fetus/Cervines/Fetus_Cervine04.png new file mode 100644 index 0000000..dffa549 Binary files /dev/null and b/1.4/Textures/Fetus/Cervines/Fetus_Cervine04.png differ diff --git a/1.4/Textures/Fetus/Cervines/Fetus_Cervine05.png b/1.4/Textures/Fetus/Cervines/Fetus_Cervine05.png new file mode 100644 index 0000000..1ce2a7d Binary files /dev/null and b/1.4/Textures/Fetus/Cervines/Fetus_Cervine05.png differ diff --git a/1.4/Textures/Fetus/Elephants/Fetus_Elephant00.png b/1.4/Textures/Fetus/Elephants/Fetus_Elephant00.png new file mode 100644 index 0000000..4567ee3 Binary files /dev/null and b/1.4/Textures/Fetus/Elephants/Fetus_Elephant00.png differ diff --git a/1.4/Textures/Fetus/Elephants/Fetus_Elephant01.png b/1.4/Textures/Fetus/Elephants/Fetus_Elephant01.png new file mode 100644 index 0000000..882a21c Binary files /dev/null and b/1.4/Textures/Fetus/Elephants/Fetus_Elephant01.png differ diff --git a/1.4/Textures/Fetus/Elephants/Fetus_Elephant02.png b/1.4/Textures/Fetus/Elephants/Fetus_Elephant02.png new file mode 100644 index 0000000..64681a3 Binary files /dev/null and b/1.4/Textures/Fetus/Elephants/Fetus_Elephant02.png differ diff --git a/1.4/Textures/Fetus/Elephants/Fetus_Elephant03.png b/1.4/Textures/Fetus/Elephants/Fetus_Elephant03.png new file mode 100644 index 0000000..4cd62c9 Binary files /dev/null and b/1.4/Textures/Fetus/Elephants/Fetus_Elephant03.png differ diff --git a/1.4/Textures/Fetus/Elephants/Fetus_Elephant04.png b/1.4/Textures/Fetus/Elephants/Fetus_Elephant04.png new file mode 100644 index 0000000..8dfec32 Binary files /dev/null and b/1.4/Textures/Fetus/Elephants/Fetus_Elephant04.png differ diff --git a/1.4/Textures/Fetus/Elephants/Fetus_Elephant05.png b/1.4/Textures/Fetus/Elephants/Fetus_Elephant05.png new file mode 100644 index 0000000..7143cb0 Binary files /dev/null and b/1.4/Textures/Fetus/Elephants/Fetus_Elephant05.png differ diff --git a/1.4/Textures/Fetus/Feline/Fetus_Cat00.png b/1.4/Textures/Fetus/Feline/Fetus_Cat00.png deleted file mode 100644 index 954e91d..0000000 Binary files a/1.4/Textures/Fetus/Feline/Fetus_Cat00.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Feline/Fetus_Cat01.png b/1.4/Textures/Fetus/Feline/Fetus_Cat01.png deleted file mode 100644 index 39f41e3..0000000 Binary files a/1.4/Textures/Fetus/Feline/Fetus_Cat01.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Feline/Fetus_Cat02.png b/1.4/Textures/Fetus/Feline/Fetus_Cat02.png deleted file mode 100644 index 0e7d9f1..0000000 Binary files a/1.4/Textures/Fetus/Feline/Fetus_Cat02.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Feline/Fetus_Cat03.png b/1.4/Textures/Fetus/Feline/Fetus_Cat03.png deleted file mode 100644 index 9a6f92a..0000000 Binary files a/1.4/Textures/Fetus/Feline/Fetus_Cat03.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Feline/Fetus_Cat04.png b/1.4/Textures/Fetus/Feline/Fetus_Cat04.png deleted file mode 100644 index eff51af..0000000 Binary files a/1.4/Textures/Fetus/Feline/Fetus_Cat04.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Feline/Fetus_Cat05.png b/1.4/Textures/Fetus/Feline/Fetus_Cat05.png deleted file mode 100644 index ced0f5a..0000000 Binary files a/1.4/Textures/Fetus/Feline/Fetus_Cat05.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Felines/Fetus_Feline_D00.png b/1.4/Textures/Fetus/Felines/Fetus_Feline_D00.png new file mode 100644 index 0000000..4567ee3 Binary files /dev/null and b/1.4/Textures/Fetus/Felines/Fetus_Feline_D00.png differ diff --git a/1.4/Textures/Fetus/Felines/Fetus_Feline_D01.png b/1.4/Textures/Fetus/Felines/Fetus_Feline_D01.png new file mode 100644 index 0000000..f4c09ec Binary files /dev/null and b/1.4/Textures/Fetus/Felines/Fetus_Feline_D01.png differ diff --git a/1.4/Textures/Fetus/Felines/Fetus_Feline_D02.png b/1.4/Textures/Fetus/Felines/Fetus_Feline_D02.png new file mode 100644 index 0000000..72310f5 Binary files /dev/null and b/1.4/Textures/Fetus/Felines/Fetus_Feline_D02.png differ diff --git a/1.4/Textures/Fetus/Felines/Fetus_Feline_D03.png b/1.4/Textures/Fetus/Felines/Fetus_Feline_D03.png new file mode 100644 index 0000000..027a650 Binary files /dev/null and b/1.4/Textures/Fetus/Felines/Fetus_Feline_D03.png differ diff --git a/1.4/Textures/Fetus/Felines/Fetus_Feline_D04.png b/1.4/Textures/Fetus/Felines/Fetus_Feline_D04.png new file mode 100644 index 0000000..b47ba59 Binary files /dev/null and b/1.4/Textures/Fetus/Felines/Fetus_Feline_D04.png differ diff --git a/1.4/Textures/Fetus/Felines/Fetus_Feline_D05.png b/1.4/Textures/Fetus/Felines/Fetus_Feline_D05.png new file mode 100644 index 0000000..935782a Binary files /dev/null and b/1.4/Textures/Fetus/Felines/Fetus_Feline_D05.png differ diff --git a/1.4/Textures/Fetus/Felines/Fetus_Feline_W00.png b/1.4/Textures/Fetus/Felines/Fetus_Feline_W00.png new file mode 100644 index 0000000..4567ee3 Binary files /dev/null and b/1.4/Textures/Fetus/Felines/Fetus_Feline_W00.png differ diff --git a/1.4/Textures/Fetus/Felines/Fetus_Feline_W01.png b/1.4/Textures/Fetus/Felines/Fetus_Feline_W01.png new file mode 100644 index 0000000..f4c09ec Binary files /dev/null and b/1.4/Textures/Fetus/Felines/Fetus_Feline_W01.png differ diff --git a/1.4/Textures/Fetus/Felines/Fetus_Feline_W02.png b/1.4/Textures/Fetus/Felines/Fetus_Feline_W02.png new file mode 100644 index 0000000..72310f5 Binary files /dev/null and b/1.4/Textures/Fetus/Felines/Fetus_Feline_W02.png differ diff --git a/1.4/Textures/Fetus/Felines/Fetus_Feline_W03.png b/1.4/Textures/Fetus/Felines/Fetus_Feline_W03.png new file mode 100644 index 0000000..027a650 Binary files /dev/null and b/1.4/Textures/Fetus/Felines/Fetus_Feline_W03.png differ diff --git a/1.4/Textures/Fetus/Felines/Fetus_Feline_W04.png b/1.4/Textures/Fetus/Felines/Fetus_Feline_W04.png new file mode 100644 index 0000000..b47ba59 Binary files /dev/null and b/1.4/Textures/Fetus/Felines/Fetus_Feline_W04.png differ diff --git a/1.4/Textures/Fetus/Felines/Fetus_Feline_W05.png b/1.4/Textures/Fetus/Felines/Fetus_Feline_W05.png new file mode 100644 index 0000000..ba61605 Binary files /dev/null and b/1.4/Textures/Fetus/Felines/Fetus_Feline_W05.png differ diff --git a/1.4/Textures/Fetus/Fetus_Default00.png b/1.4/Textures/Fetus/Fetus_Default00.png index cc26dc5..2aab282 100644 Binary files a/1.4/Textures/Fetus/Fetus_Default00.png and b/1.4/Textures/Fetus/Fetus_Default00.png differ diff --git a/1.4/Textures/Fetus/Fetus_Default00_Multiplet_2.png b/1.4/Textures/Fetus/Fetus_Default00_Multiplet_2.png index 9f851df..eafb4cb 100644 Binary files a/1.4/Textures/Fetus/Fetus_Default00_Multiplet_2.png and b/1.4/Textures/Fetus/Fetus_Default00_Multiplet_2.png differ diff --git a/1.4/Textures/Fetus/Fetus_Default01.png b/1.4/Textures/Fetus/Fetus_Default01.png index 57521c2..a824291 100644 Binary files a/1.4/Textures/Fetus/Fetus_Default01.png and b/1.4/Textures/Fetus/Fetus_Default01.png differ diff --git a/1.4/Textures/Fetus/Fetus_Default01_Multiplet_2.png b/1.4/Textures/Fetus/Fetus_Default01_Multiplet_2.png index 5c8ddcb..ddca0d0 100644 Binary files a/1.4/Textures/Fetus/Fetus_Default01_Multiplet_2.png and b/1.4/Textures/Fetus/Fetus_Default01_Multiplet_2.png differ diff --git a/1.4/Textures/Fetus/Fetus_Default02.png b/1.4/Textures/Fetus/Fetus_Default02.png index b64ddca..459e5a0 100644 Binary files a/1.4/Textures/Fetus/Fetus_Default02.png and b/1.4/Textures/Fetus/Fetus_Default02.png differ diff --git a/1.4/Textures/Fetus/Fetus_Default02_Multiplet_2.png b/1.4/Textures/Fetus/Fetus_Default02_Multiplet_2.png index 8013057..3f12d7d 100644 Binary files a/1.4/Textures/Fetus/Fetus_Default02_Multiplet_2.png and b/1.4/Textures/Fetus/Fetus_Default02_Multiplet_2.png differ diff --git a/1.4/Textures/Fetus/Fetus_Default03.png b/1.4/Textures/Fetus/Fetus_Default03.png index 62a0f74..963b0e7 100644 Binary files a/1.4/Textures/Fetus/Fetus_Default03.png and b/1.4/Textures/Fetus/Fetus_Default03.png differ diff --git a/1.4/Textures/Fetus/Fetus_Default03_Multiplet_2.png b/1.4/Textures/Fetus/Fetus_Default03_Multiplet_2.png index 317e9e6..1715cd8 100644 Binary files a/1.4/Textures/Fetus/Fetus_Default03_Multiplet_2.png and b/1.4/Textures/Fetus/Fetus_Default03_Multiplet_2.png differ diff --git a/1.4/Textures/Fetus/Fetus_Default04.png b/1.4/Textures/Fetus/Fetus_Default04.png index 76e40fd..447dc1e 100644 Binary files a/1.4/Textures/Fetus/Fetus_Default04.png and b/1.4/Textures/Fetus/Fetus_Default04.png differ diff --git a/1.4/Textures/Fetus/Fetus_Default04_Multiplet_2.png b/1.4/Textures/Fetus/Fetus_Default04_Multiplet_2.png index 1ba0822..f56e04f 100644 Binary files a/1.4/Textures/Fetus/Fetus_Default04_Multiplet_2.png and b/1.4/Textures/Fetus/Fetus_Default04_Multiplet_2.png differ diff --git a/1.4/Textures/Fetus/Fetus_Default05.png b/1.4/Textures/Fetus/Fetus_Default05.png index 7a39105..bf5210a 100644 Binary files a/1.4/Textures/Fetus/Fetus_Default05.png and b/1.4/Textures/Fetus/Fetus_Default05.png differ diff --git a/1.4/Textures/Fetus/Fetus_Default05_Multiplet_2.png b/1.4/Textures/Fetus/Fetus_Default05_Multiplet_2.png index 74af81c..83315bd 100644 Binary files a/1.4/Textures/Fetus/Fetus_Default05_Multiplet_2.png and b/1.4/Textures/Fetus/Fetus_Default05_Multiplet_2.png differ diff --git a/1.4/Textures/Fetus/Fetus_Early00.png b/1.4/Textures/Fetus/Fetus_Early00.png deleted file mode 100644 index 234a82a..0000000 Binary files a/1.4/Textures/Fetus/Fetus_Early00.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Fetus_Early00_Multiplet_2.png b/1.4/Textures/Fetus/Fetus_Early00_Multiplet_2.png deleted file mode 100644 index 6934605..0000000 Binary files a/1.4/Textures/Fetus/Fetus_Early00_Multiplet_2.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Fungi/Fetus_Fungi00.png b/1.4/Textures/Fetus/Fungi/Fetus_Fungi00.png new file mode 100644 index 0000000..8b8012e Binary files /dev/null and b/1.4/Textures/Fetus/Fungi/Fetus_Fungi00.png differ diff --git a/1.4/Textures/Fetus/Fungi/Fetus_Fungi01.png b/1.4/Textures/Fetus/Fungi/Fetus_Fungi01.png new file mode 100644 index 0000000..ed995dc Binary files /dev/null and b/1.4/Textures/Fetus/Fungi/Fetus_Fungi01.png differ diff --git a/1.4/Textures/Fetus/Fungi/Fetus_Fungi02.png b/1.4/Textures/Fetus/Fungi/Fetus_Fungi02.png new file mode 100644 index 0000000..c4922db Binary files /dev/null and b/1.4/Textures/Fetus/Fungi/Fetus_Fungi02.png differ diff --git a/1.4/Textures/Fetus/Fungi/Fetus_Fungi03.png b/1.4/Textures/Fetus/Fungi/Fetus_Fungi03.png new file mode 100644 index 0000000..5cba5b4 Binary files /dev/null and b/1.4/Textures/Fetus/Fungi/Fetus_Fungi03.png differ diff --git a/1.4/Textures/Fetus/Fungi/Fetus_Fungi04.png b/1.4/Textures/Fetus/Fungi/Fetus_Fungi04.png new file mode 100644 index 0000000..db9c951 Binary files /dev/null and b/1.4/Textures/Fetus/Fungi/Fetus_Fungi04.png differ diff --git a/1.4/Textures/Fetus/Fungi/Fetus_Fungi05.png b/1.4/Textures/Fetus/Fungi/Fetus_Fungi05.png new file mode 100644 index 0000000..15cdb0f Binary files /dev/null and b/1.4/Textures/Fetus/Fungi/Fetus_Fungi05.png differ diff --git a/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A00.png b/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A00.png new file mode 100644 index 0000000..4985c3e Binary files /dev/null and b/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A00.png differ diff --git a/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A01.png b/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A01.png new file mode 100644 index 0000000..60f41d6 Binary files /dev/null and b/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A01.png differ diff --git a/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A02.png b/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A02.png new file mode 100644 index 0000000..593666f Binary files /dev/null and b/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A02.png differ diff --git a/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A03.png b/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A03.png new file mode 100644 index 0000000..c98b875 Binary files /dev/null and b/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A03.png differ diff --git a/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A04.png b/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A04.png new file mode 100644 index 0000000..db9c951 Binary files /dev/null and b/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A04.png differ diff --git a/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A05.png b/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A05.png new file mode 100644 index 0000000..15cdb0f Binary files /dev/null and b/1.4/Textures/Fetus/Fungi/Fetus_Fungi_A05.png differ diff --git a/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine00.png b/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine00.png new file mode 100644 index 0000000..f3482be Binary files /dev/null and b/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine00.png differ diff --git a/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine01.png b/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine01.png new file mode 100644 index 0000000..d7a2c05 Binary files /dev/null and b/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine01.png differ diff --git a/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine02.png b/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine02.png new file mode 100644 index 0000000..ccf02f3 Binary files /dev/null and b/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine02.png differ diff --git a/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine03.png b/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine03.png new file mode 100644 index 0000000..22f1095 Binary files /dev/null and b/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine03.png differ diff --git a/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine04.png b/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine04.png new file mode 100644 index 0000000..d39c755 Binary files /dev/null and b/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine04.png differ diff --git a/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine05.png b/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine05.png new file mode 100644 index 0000000..b084bb4 Binary files /dev/null and b/1.4/Textures/Fetus/Humanoids/Fetus_Humanoid_Canine05.png differ diff --git a/1.4/Textures/Fetus/Insects/Fetus_Insect00.png b/1.4/Textures/Fetus/Insects/Fetus_Insect00.png index d9c5762..732b53f 100644 Binary files a/1.4/Textures/Fetus/Insects/Fetus_Insect00.png and b/1.4/Textures/Fetus/Insects/Fetus_Insect00.png differ diff --git a/1.4/Textures/Fetus/Insects/Fetus_Insect01.png b/1.4/Textures/Fetus/Insects/Fetus_Insect01.png index a079980..8d5d82f 100644 Binary files a/1.4/Textures/Fetus/Insects/Fetus_Insect01.png and b/1.4/Textures/Fetus/Insects/Fetus_Insect01.png differ diff --git a/1.4/Textures/Fetus/Insects/Fetus_Insect02.png b/1.4/Textures/Fetus/Insects/Fetus_Insect02.png index a2b710c..3cab4f9 100644 Binary files a/1.4/Textures/Fetus/Insects/Fetus_Insect02.png and b/1.4/Textures/Fetus/Insects/Fetus_Insect02.png differ diff --git a/1.4/Textures/Fetus/Insects/Fetus_Insect03.png b/1.4/Textures/Fetus/Insects/Fetus_Insect03.png index 9569db2..6bbff9b 100644 Binary files a/1.4/Textures/Fetus/Insects/Fetus_Insect03.png and b/1.4/Textures/Fetus/Insects/Fetus_Insect03.png differ diff --git a/1.4/Textures/Fetus/Insects/Fetus_Insect04.png b/1.4/Textures/Fetus/Insects/Fetus_Insect04.png index 2ee2ea4..a38ae36 100644 Binary files a/1.4/Textures/Fetus/Insects/Fetus_Insect04.png and b/1.4/Textures/Fetus/Insects/Fetus_Insect04.png differ diff --git a/1.4/Textures/Fetus/Insects/Fetus_Insect05.png b/1.4/Textures/Fetus/Insects/Fetus_Insect05.png index 22487ea..7788761 100644 Binary files a/1.4/Textures/Fetus/Insects/Fetus_Insect05.png and b/1.4/Textures/Fetus/Insects/Fetus_Insect05.png differ diff --git a/1.4/Textures/Fetus/Insects/Insect_Early00.png b/1.4/Textures/Fetus/Insects/Insect_Early00.png deleted file mode 100644 index 917bd14..0000000 Binary files a/1.4/Textures/Fetus/Insects/Insect_Early00.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph00.png b/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph00.png new file mode 100644 index 0000000..81e056a Binary files /dev/null and b/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph00.png differ diff --git a/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph01.png b/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph01.png new file mode 100644 index 0000000..17c4a0f Binary files /dev/null and b/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph01.png differ diff --git a/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph02.png b/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph02.png new file mode 100644 index 0000000..5fc26d7 Binary files /dev/null and b/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph02.png differ diff --git a/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph03.png b/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph03.png new file mode 100644 index 0000000..7148e79 Binary files /dev/null and b/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph03.png differ diff --git a/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph04.png b/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph04.png new file mode 100644 index 0000000..fe87a1b Binary files /dev/null and b/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph04.png differ diff --git a/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph05.png b/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph05.png new file mode 100644 index 0000000..fb10765 Binary files /dev/null and b/1.4/Textures/Fetus/Lagomorphs/Fetus_Lagomorph05.png differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Bovine00.png b/1.4/Textures/Fetus/Livestocks/Fetus_Bovine00.png deleted file mode 100644 index cc3f27f..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_Bovine00.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Bovine01.png b/1.4/Textures/Fetus/Livestocks/Fetus_Bovine01.png deleted file mode 100644 index d0301a2..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_Bovine01.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Bovine02.png b/1.4/Textures/Fetus/Livestocks/Fetus_Bovine02.png deleted file mode 100644 index 36177c8..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_Bovine02.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Bovine03.png b/1.4/Textures/Fetus/Livestocks/Fetus_Bovine03.png deleted file mode 100644 index aa679f8..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_Bovine03.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Bovine04.png b/1.4/Textures/Fetus/Livestocks/Fetus_Bovine04.png deleted file mode 100644 index b11e248..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_Bovine04.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Bovine05.png b/1.4/Textures/Fetus/Livestocks/Fetus_Bovine05.png deleted file mode 100644 index a5823a5..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_Bovine05.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Elephant00.png b/1.4/Textures/Fetus/Livestocks/Fetus_Elephant00.png deleted file mode 100644 index 284cc1c..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_Elephant00.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Elephant01.png b/1.4/Textures/Fetus/Livestocks/Fetus_Elephant01.png deleted file mode 100644 index 418f10c..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_Elephant01.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Elephant02.png b/1.4/Textures/Fetus/Livestocks/Fetus_Elephant02.png deleted file mode 100644 index 0ce2a51..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_Elephant02.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Elephant03.png b/1.4/Textures/Fetus/Livestocks/Fetus_Elephant03.png deleted file mode 100644 index 3fa7aff..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_Elephant03.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Elephant04.png b/1.4/Textures/Fetus/Livestocks/Fetus_Elephant04.png deleted file mode 100644 index 4c7507d..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_Elephant04.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Elephant05.png b/1.4/Textures/Fetus/Livestocks/Fetus_Elephant05.png deleted file mode 100644 index 3231d3f..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_Elephant05.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine00.png b/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine00.png deleted file mode 100644 index 36e074d..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine00.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine01.png b/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine01.png deleted file mode 100644 index 2ede985..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine01.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine02.png b/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine02.png deleted file mode 100644 index a286064..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine02.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine03.png b/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine03.png deleted file mode 100644 index 6ccd8c1..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine03.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine04.png b/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine04.png deleted file mode 100644 index 793a22a..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine04.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine05.png b/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine05.png deleted file mode 100644 index 5867419..0000000 Binary files a/1.4/Textures/Fetus/Livestocks/Fetus_S_Bovine05.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Mech/Fetus_Mech00.png b/1.4/Textures/Fetus/Mech/Fetus_Mech00.png deleted file mode 100644 index 6c776d2..0000000 Binary files a/1.4/Textures/Fetus/Mech/Fetus_Mech00.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Mech/Fetus_Mech01.png b/1.4/Textures/Fetus/Mech/Fetus_Mech01.png deleted file mode 100644 index 41639e7..0000000 Binary files a/1.4/Textures/Fetus/Mech/Fetus_Mech01.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Mech/Fetus_Mech02.png b/1.4/Textures/Fetus/Mech/Fetus_Mech02.png deleted file mode 100644 index 3f92a2f..0000000 Binary files a/1.4/Textures/Fetus/Mech/Fetus_Mech02.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Mech/Fetus_Mech03.png b/1.4/Textures/Fetus/Mech/Fetus_Mech03.png deleted file mode 100644 index b499fca..0000000 Binary files a/1.4/Textures/Fetus/Mech/Fetus_Mech03.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Mech/Fetus_Mech04.png b/1.4/Textures/Fetus/Mech/Fetus_Mech04.png deleted file mode 100644 index f0743f4..0000000 Binary files a/1.4/Textures/Fetus/Mech/Fetus_Mech04.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Mech/Fetus_Mech05.png b/1.4/Textures/Fetus/Mech/Fetus_Mech05.png deleted file mode 100644 index df9007b..0000000 Binary files a/1.4/Textures/Fetus/Mech/Fetus_Mech05.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid00.png b/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid00.png new file mode 100644 index 0000000..ab6a8eb Binary files /dev/null and b/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid00.png differ diff --git a/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid01.png b/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid01.png new file mode 100644 index 0000000..6c43e63 Binary files /dev/null and b/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid01.png differ diff --git a/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid02.png b/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid02.png new file mode 100644 index 0000000..eb6c837 Binary files /dev/null and b/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid02.png differ diff --git a/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid03.png b/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid03.png new file mode 100644 index 0000000..10a2748 Binary files /dev/null and b/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid03.png differ diff --git a/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid04.png b/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid04.png new file mode 100644 index 0000000..7acd396 Binary files /dev/null and b/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid04.png differ diff --git a/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid05.png b/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid05.png new file mode 100644 index 0000000..9a5bdd7 Binary files /dev/null and b/1.4/Textures/Fetus/Mechanoids/Fetus_Mechanoid05.png differ diff --git a/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth00.png b/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth00.png new file mode 100644 index 0000000..402e595 Binary files /dev/null and b/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth00.png differ diff --git a/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth01.png b/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth01.png new file mode 100644 index 0000000..e590424 Binary files /dev/null and b/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth01.png differ diff --git a/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth02.png b/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth02.png new file mode 100644 index 0000000..ffc6eb4 Binary files /dev/null and b/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth02.png differ diff --git a/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth03.png b/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth03.png new file mode 100644 index 0000000..7648f0f Binary files /dev/null and b/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth03.png differ diff --git a/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth04.png b/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth04.png new file mode 100644 index 0000000..89de0db Binary files /dev/null and b/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth04.png differ diff --git a/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth05.png b/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth05.png new file mode 100644 index 0000000..72193a9 Binary files /dev/null and b/1.4/Textures/Fetus/Megasloths/Fetus_Megasloth05.png differ diff --git a/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo00.png b/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo00.png new file mode 100644 index 0000000..095bb39 Binary files /dev/null and b/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo00.png differ diff --git a/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo01.png b/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo01.png new file mode 100644 index 0000000..b16ee03 Binary files /dev/null and b/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo01.png differ diff --git a/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo02.png b/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo02.png new file mode 100644 index 0000000..e8b3776 Binary files /dev/null and b/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo02.png differ diff --git a/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo03.png b/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo03.png new file mode 100644 index 0000000..8b60784 Binary files /dev/null and b/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo03.png differ diff --git a/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo04.png b/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo04.png new file mode 100644 index 0000000..006938d Binary files /dev/null and b/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo04.png differ diff --git a/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo05.png b/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo05.png new file mode 100644 index 0000000..6b62edf Binary files /dev/null and b/1.4/Textures/Fetus/Muffalos/Fetus_Muffalo05.png differ diff --git a/1.4/Textures/Fetus/Pests/Fetus_Rodent00.png b/1.4/Textures/Fetus/Pests/Fetus_Rodent00.png deleted file mode 100644 index 36e074d..0000000 Binary files a/1.4/Textures/Fetus/Pests/Fetus_Rodent00.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Pests/Fetus_Rodent01.png b/1.4/Textures/Fetus/Pests/Fetus_Rodent01.png deleted file mode 100644 index 2ede985..0000000 Binary files a/1.4/Textures/Fetus/Pests/Fetus_Rodent01.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Pests/Fetus_Rodent02.png b/1.4/Textures/Fetus/Pests/Fetus_Rodent02.png deleted file mode 100644 index a286064..0000000 Binary files a/1.4/Textures/Fetus/Pests/Fetus_Rodent02.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Pests/Fetus_Rodent03.png b/1.4/Textures/Fetus/Pests/Fetus_Rodent03.png deleted file mode 100644 index 6ccd8c1..0000000 Binary files a/1.4/Textures/Fetus/Pests/Fetus_Rodent03.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Pests/Fetus_Rodent04.png b/1.4/Textures/Fetus/Pests/Fetus_Rodent04.png deleted file mode 100644 index 793a22a..0000000 Binary files a/1.4/Textures/Fetus/Pests/Fetus_Rodent04.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Pests/Fetus_Rodent05.png b/1.4/Textures/Fetus/Pests/Fetus_Rodent05.png deleted file mode 100644 index 5867419..0000000 Binary files a/1.4/Textures/Fetus/Pests/Fetus_Rodent05.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Pig00.png b/1.4/Textures/Fetus/Pigs/Fetus_Pig00.png similarity index 100% rename from 1.4/Textures/Fetus/Livestocks/Fetus_Pig00.png rename to 1.4/Textures/Fetus/Pigs/Fetus_Pig00.png diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Pig01.png b/1.4/Textures/Fetus/Pigs/Fetus_Pig01.png similarity index 100% rename from 1.4/Textures/Fetus/Livestocks/Fetus_Pig01.png rename to 1.4/Textures/Fetus/Pigs/Fetus_Pig01.png diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Pig02.png b/1.4/Textures/Fetus/Pigs/Fetus_Pig02.png similarity index 100% rename from 1.4/Textures/Fetus/Livestocks/Fetus_Pig02.png rename to 1.4/Textures/Fetus/Pigs/Fetus_Pig02.png diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Pig03.png b/1.4/Textures/Fetus/Pigs/Fetus_Pig03.png similarity index 100% rename from 1.4/Textures/Fetus/Livestocks/Fetus_Pig03.png rename to 1.4/Textures/Fetus/Pigs/Fetus_Pig03.png diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Pig04.png b/1.4/Textures/Fetus/Pigs/Fetus_Pig04.png similarity index 100% rename from 1.4/Textures/Fetus/Livestocks/Fetus_Pig04.png rename to 1.4/Textures/Fetus/Pigs/Fetus_Pig04.png diff --git a/1.4/Textures/Fetus/Livestocks/Fetus_Pig05.png b/1.4/Textures/Fetus/Pigs/Fetus_Pig05.png similarity index 100% rename from 1.4/Textures/Fetus/Livestocks/Fetus_Pig05.png rename to 1.4/Textures/Fetus/Pigs/Fetus_Pig05.png diff --git a/1.4/Textures/Fetus/Plants/Fetus_Plant_F00.png b/1.4/Textures/Fetus/Plants/Fetus_Plant_F00.png new file mode 100644 index 0000000..20e7704 Binary files /dev/null and b/1.4/Textures/Fetus/Plants/Fetus_Plant_F00.png differ diff --git a/1.4/Textures/Fetus/Plants/Fetus_Plant_F01.png b/1.4/Textures/Fetus/Plants/Fetus_Plant_F01.png new file mode 100644 index 0000000..cc40ac7 Binary files /dev/null and b/1.4/Textures/Fetus/Plants/Fetus_Plant_F01.png differ diff --git a/1.4/Textures/Fetus/Plants/Fetus_Plant_F02.png b/1.4/Textures/Fetus/Plants/Fetus_Plant_F02.png new file mode 100644 index 0000000..2062bfd Binary files /dev/null and b/1.4/Textures/Fetus/Plants/Fetus_Plant_F02.png differ diff --git a/1.4/Textures/Fetus/Plants/Fetus_Plant_F03.png b/1.4/Textures/Fetus/Plants/Fetus_Plant_F03.png new file mode 100644 index 0000000..96edba5 Binary files /dev/null and b/1.4/Textures/Fetus/Plants/Fetus_Plant_F03.png differ diff --git a/1.4/Textures/Fetus/Plants/Fetus_Plant_F04.png b/1.4/Textures/Fetus/Plants/Fetus_Plant_F04.png new file mode 100644 index 0000000..40c8017 Binary files /dev/null and b/1.4/Textures/Fetus/Plants/Fetus_Plant_F04.png differ diff --git a/1.4/Textures/Fetus/Plants/Fetus_Plant_F05.png b/1.4/Textures/Fetus/Plants/Fetus_Plant_F05.png new file mode 100644 index 0000000..118d7c2 Binary files /dev/null and b/1.4/Textures/Fetus/Plants/Fetus_Plant_F05.png differ diff --git a/1.4/Textures/Fetus/Plants/Fetus_Plant_G00.png b/1.4/Textures/Fetus/Plants/Fetus_Plant_G00.png new file mode 100644 index 0000000..c6aafb3 Binary files /dev/null and b/1.4/Textures/Fetus/Plants/Fetus_Plant_G00.png differ diff --git a/1.4/Textures/Fetus/Plants/Fetus_Plant_G01.png b/1.4/Textures/Fetus/Plants/Fetus_Plant_G01.png new file mode 100644 index 0000000..e6e8c9a Binary files /dev/null and b/1.4/Textures/Fetus/Plants/Fetus_Plant_G01.png differ diff --git a/1.4/Textures/Fetus/Plants/Fetus_Plant_G02.png b/1.4/Textures/Fetus/Plants/Fetus_Plant_G02.png new file mode 100644 index 0000000..a6c2b17 Binary files /dev/null and b/1.4/Textures/Fetus/Plants/Fetus_Plant_G02.png differ diff --git a/1.4/Textures/Fetus/Plants/Fetus_Plant_G03.png b/1.4/Textures/Fetus/Plants/Fetus_Plant_G03.png new file mode 100644 index 0000000..f02ccc6 Binary files /dev/null and b/1.4/Textures/Fetus/Plants/Fetus_Plant_G03.png differ diff --git a/1.4/Textures/Fetus/Plants/Fetus_Plant_G04.png b/1.4/Textures/Fetus/Plants/Fetus_Plant_G04.png new file mode 100644 index 0000000..e113dcb Binary files /dev/null and b/1.4/Textures/Fetus/Plants/Fetus_Plant_G04.png differ diff --git a/1.4/Textures/Fetus/Plants/Fetus_Plant_G05.png b/1.4/Textures/Fetus/Plants/Fetus_Plant_G05.png new file mode 100644 index 0000000..1ea69b8 Binary files /dev/null and b/1.4/Textures/Fetus/Plants/Fetus_Plant_G05.png differ diff --git a/1.4/Textures/Fetus/Primate/Fetus_Monkey00.png b/1.4/Textures/Fetus/Primate/Fetus_Monkey00.png deleted file mode 100644 index c9373bf..0000000 Binary files a/1.4/Textures/Fetus/Primate/Fetus_Monkey00.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Primate/Fetus_Monkey01.png b/1.4/Textures/Fetus/Primate/Fetus_Monkey01.png deleted file mode 100644 index 41f7990..0000000 Binary files a/1.4/Textures/Fetus/Primate/Fetus_Monkey01.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Primate/Fetus_Monkey02.png b/1.4/Textures/Fetus/Primate/Fetus_Monkey02.png deleted file mode 100644 index 66c4c66..0000000 Binary files a/1.4/Textures/Fetus/Primate/Fetus_Monkey02.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Primate/Fetus_Monkey03.png b/1.4/Textures/Fetus/Primate/Fetus_Monkey03.png deleted file mode 100644 index 779d224..0000000 Binary files a/1.4/Textures/Fetus/Primate/Fetus_Monkey03.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Primate/Fetus_Monkey04.png b/1.4/Textures/Fetus/Primate/Fetus_Monkey04.png deleted file mode 100644 index 824c129..0000000 Binary files a/1.4/Textures/Fetus/Primate/Fetus_Monkey04.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Primate/Fetus_Monkey05.png b/1.4/Textures/Fetus/Primate/Fetus_Monkey05.png deleted file mode 100644 index 5c24e15..0000000 Binary files a/1.4/Textures/Fetus/Primate/Fetus_Monkey05.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Primate/Fetus_Primate00.png b/1.4/Textures/Fetus/Primate/Fetus_Primate00.png new file mode 100644 index 0000000..3c313c9 Binary files /dev/null and b/1.4/Textures/Fetus/Primate/Fetus_Primate00.png differ diff --git a/1.4/Textures/Fetus/Primate/Fetus_Primate01.png b/1.4/Textures/Fetus/Primate/Fetus_Primate01.png new file mode 100644 index 0000000..5768c62 Binary files /dev/null and b/1.4/Textures/Fetus/Primate/Fetus_Primate01.png differ diff --git a/1.4/Textures/Fetus/Primate/Fetus_Primate02.png b/1.4/Textures/Fetus/Primate/Fetus_Primate02.png new file mode 100644 index 0000000..928fff8 Binary files /dev/null and b/1.4/Textures/Fetus/Primate/Fetus_Primate02.png differ diff --git a/1.4/Textures/Fetus/Primate/Fetus_Primate03.png b/1.4/Textures/Fetus/Primate/Fetus_Primate03.png new file mode 100644 index 0000000..13d19a7 Binary files /dev/null and b/1.4/Textures/Fetus/Primate/Fetus_Primate03.png differ diff --git a/1.4/Textures/Fetus/Primate/Fetus_Primate04.png b/1.4/Textures/Fetus/Primate/Fetus_Primate04.png new file mode 100644 index 0000000..a508c6c Binary files /dev/null and b/1.4/Textures/Fetus/Primate/Fetus_Primate04.png differ diff --git a/1.4/Textures/Fetus/Primate/Fetus_Primate05.png b/1.4/Textures/Fetus/Primate/Fetus_Primate05.png new file mode 100644 index 0000000..a739542 Binary files /dev/null and b/1.4/Textures/Fetus/Primate/Fetus_Primate05.png differ diff --git a/1.4/Textures/Fetus/Reptile/Fetus_Lizard00.png b/1.4/Textures/Fetus/Reptile/Fetus_Lizard00.png deleted file mode 100644 index 0146135..0000000 Binary files a/1.4/Textures/Fetus/Reptile/Fetus_Lizard00.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Reptile/Fetus_Lizard01.png b/1.4/Textures/Fetus/Reptile/Fetus_Lizard01.png deleted file mode 100644 index 6fcdbfa..0000000 Binary files a/1.4/Textures/Fetus/Reptile/Fetus_Lizard01.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Reptile/Fetus_Lizard02.png b/1.4/Textures/Fetus/Reptile/Fetus_Lizard02.png deleted file mode 100644 index 1d46463..0000000 Binary files a/1.4/Textures/Fetus/Reptile/Fetus_Lizard02.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Reptile/Fetus_Lizard03.png b/1.4/Textures/Fetus/Reptile/Fetus_Lizard03.png deleted file mode 100644 index bb537f4..0000000 Binary files a/1.4/Textures/Fetus/Reptile/Fetus_Lizard03.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Reptile/Fetus_Lizard04.png b/1.4/Textures/Fetus/Reptile/Fetus_Lizard04.png deleted file mode 100644 index fe10857..0000000 Binary files a/1.4/Textures/Fetus/Reptile/Fetus_Lizard04.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Reptile/Fetus_Lizard05.png b/1.4/Textures/Fetus/Reptile/Fetus_Lizard05.png deleted file mode 100644 index f24bc74..0000000 Binary files a/1.4/Textures/Fetus/Reptile/Fetus_Lizard05.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Reptile/Fetus_Snake00.png b/1.4/Textures/Fetus/Reptile/Fetus_Snake00.png deleted file mode 100644 index 0146135..0000000 Binary files a/1.4/Textures/Fetus/Reptile/Fetus_Snake00.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Reptile/Fetus_Snake01.png b/1.4/Textures/Fetus/Reptile/Fetus_Snake01.png deleted file mode 100644 index afd9795..0000000 Binary files a/1.4/Textures/Fetus/Reptile/Fetus_Snake01.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Reptile/Fetus_Snake02.png b/1.4/Textures/Fetus/Reptile/Fetus_Snake02.png deleted file mode 100644 index 70756b3..0000000 Binary files a/1.4/Textures/Fetus/Reptile/Fetus_Snake02.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Reptile/Fetus_Snake03.png b/1.4/Textures/Fetus/Reptile/Fetus_Snake03.png deleted file mode 100644 index b87191b..0000000 Binary files a/1.4/Textures/Fetus/Reptile/Fetus_Snake03.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Reptile/Fetus_Snake04.png b/1.4/Textures/Fetus/Reptile/Fetus_Snake04.png deleted file mode 100644 index 085b455..0000000 Binary files a/1.4/Textures/Fetus/Reptile/Fetus_Snake04.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Reptile/Fetus_Snake05.png b/1.4/Textures/Fetus/Reptile/Fetus_Snake05.png deleted file mode 100644 index 98e3c58..0000000 Binary files a/1.4/Textures/Fetus/Reptile/Fetus_Snake05.png and /dev/null differ diff --git a/1.4/Textures/Fetus/Reptiles/Fetus_Reptile00.png b/1.4/Textures/Fetus/Reptiles/Fetus_Reptile00.png new file mode 100644 index 0000000..b3c7d8e Binary files /dev/null and b/1.4/Textures/Fetus/Reptiles/Fetus_Reptile00.png differ diff --git a/1.4/Textures/Fetus/Reptiles/Fetus_Reptile01.png b/1.4/Textures/Fetus/Reptiles/Fetus_Reptile01.png new file mode 100644 index 0000000..5fec55c Binary files /dev/null and b/1.4/Textures/Fetus/Reptiles/Fetus_Reptile01.png differ diff --git a/1.4/Textures/Fetus/Reptiles/Fetus_Reptile02.png b/1.4/Textures/Fetus/Reptiles/Fetus_Reptile02.png new file mode 100644 index 0000000..b3bf51f Binary files /dev/null and b/1.4/Textures/Fetus/Reptiles/Fetus_Reptile02.png differ diff --git a/1.4/Textures/Fetus/Reptiles/Fetus_Reptile03.png b/1.4/Textures/Fetus/Reptiles/Fetus_Reptile03.png new file mode 100644 index 0000000..bfd7614 Binary files /dev/null and b/1.4/Textures/Fetus/Reptiles/Fetus_Reptile03.png differ diff --git a/1.4/Textures/Fetus/Reptiles/Fetus_Reptile04.png b/1.4/Textures/Fetus/Reptiles/Fetus_Reptile04.png new file mode 100644 index 0000000..195eef5 Binary files /dev/null and b/1.4/Textures/Fetus/Reptiles/Fetus_Reptile04.png differ diff --git a/1.4/Textures/Fetus/Reptiles/Fetus_Reptile05.png b/1.4/Textures/Fetus/Reptiles/Fetus_Reptile05.png new file mode 100644 index 0000000..c2b5506 Binary files /dev/null and b/1.4/Textures/Fetus/Reptiles/Fetus_Reptile05.png differ diff --git a/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros00.png b/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros00.png new file mode 100644 index 0000000..095bb39 Binary files /dev/null and b/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros00.png differ diff --git a/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros01.png b/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros01.png new file mode 100644 index 0000000..b16ee03 Binary files /dev/null and b/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros01.png differ diff --git a/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros02.png b/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros02.png new file mode 100644 index 0000000..7676b29 Binary files /dev/null and b/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros02.png differ diff --git a/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros03.png b/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros03.png new file mode 100644 index 0000000..90d1672 Binary files /dev/null and b/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros03.png differ diff --git a/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros04.png b/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros04.png new file mode 100644 index 0000000..4e2251d Binary files /dev/null and b/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros04.png differ diff --git a/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros05.png b/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros05.png new file mode 100644 index 0000000..ab3b017 Binary files /dev/null and b/1.4/Textures/Fetus/Rhinoceroses/Fetus_Rhinoceros05.png differ diff --git a/1.4/Textures/Fetus/Rodents/Fetus_Rodent00.png b/1.4/Textures/Fetus/Rodents/Fetus_Rodent00.png new file mode 100644 index 0000000..f6b217e Binary files /dev/null and b/1.4/Textures/Fetus/Rodents/Fetus_Rodent00.png differ diff --git a/1.4/Textures/Fetus/Rodents/Fetus_Rodent01.png b/1.4/Textures/Fetus/Rodents/Fetus_Rodent01.png new file mode 100644 index 0000000..fb7e287 Binary files /dev/null and b/1.4/Textures/Fetus/Rodents/Fetus_Rodent01.png differ diff --git a/1.4/Textures/Fetus/Rodents/Fetus_Rodent02.png b/1.4/Textures/Fetus/Rodents/Fetus_Rodent02.png new file mode 100644 index 0000000..dd5268f Binary files /dev/null and b/1.4/Textures/Fetus/Rodents/Fetus_Rodent02.png differ diff --git a/1.4/Textures/Fetus/Rodents/Fetus_Rodent03.png b/1.4/Textures/Fetus/Rodents/Fetus_Rodent03.png new file mode 100644 index 0000000..3757a44 Binary files /dev/null and b/1.4/Textures/Fetus/Rodents/Fetus_Rodent03.png differ diff --git a/1.4/Textures/Fetus/Rodents/Fetus_Rodent04.png b/1.4/Textures/Fetus/Rodents/Fetus_Rodent04.png new file mode 100644 index 0000000..6699884 Binary files /dev/null and b/1.4/Textures/Fetus/Rodents/Fetus_Rodent04.png differ diff --git a/1.4/Textures/Fetus/Rodents/Fetus_Rodent05.png b/1.4/Textures/Fetus/Rodents/Fetus_Rodent05.png new file mode 100644 index 0000000..01ce67e Binary files /dev/null and b/1.4/Textures/Fetus/Rodents/Fetus_Rodent05.png differ diff --git a/1.4/Textures/Fetus/Slime_Abomi02.png b/1.4/Textures/Fetus/Slime_Abomi02.png index 1d23d46..44a9d95 100644 Binary files a/1.4/Textures/Fetus/Slime_Abomi02.png and b/1.4/Textures/Fetus/Slime_Abomi02.png differ diff --git a/1.4/Textures/Fetus/Snakes/Fetus_Snake00.png b/1.4/Textures/Fetus/Snakes/Fetus_Snake00.png new file mode 100644 index 0000000..a31d953 Binary files /dev/null and b/1.4/Textures/Fetus/Snakes/Fetus_Snake00.png differ diff --git a/1.4/Textures/Fetus/Snakes/Fetus_Snake01.png b/1.4/Textures/Fetus/Snakes/Fetus_Snake01.png new file mode 100644 index 0000000..7cbc485 Binary files /dev/null and b/1.4/Textures/Fetus/Snakes/Fetus_Snake01.png differ diff --git a/1.4/Textures/Fetus/Snakes/Fetus_Snake02.png b/1.4/Textures/Fetus/Snakes/Fetus_Snake02.png new file mode 100644 index 0000000..75ec499 Binary files /dev/null and b/1.4/Textures/Fetus/Snakes/Fetus_Snake02.png differ diff --git a/1.4/Textures/Fetus/Snakes/Fetus_Snake03.png b/1.4/Textures/Fetus/Snakes/Fetus_Snake03.png new file mode 100644 index 0000000..1e2f780 Binary files /dev/null and b/1.4/Textures/Fetus/Snakes/Fetus_Snake03.png differ diff --git a/1.4/Textures/Fetus/Snakes/Fetus_Snake04.png b/1.4/Textures/Fetus/Snakes/Fetus_Snake04.png new file mode 100644 index 0000000..bd5f7a6 Binary files /dev/null and b/1.4/Textures/Fetus/Snakes/Fetus_Snake04.png differ diff --git a/1.4/Textures/Fetus/Snakes/Fetus_Snake05.png b/1.4/Textures/Fetus/Snakes/Fetus_Snake05.png new file mode 100644 index 0000000..a9a18b3 Binary files /dev/null and b/1.4/Textures/Fetus/Snakes/Fetus_Snake05.png differ diff --git a/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo00.png b/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo00.png new file mode 100644 index 0000000..7039f06 Binary files /dev/null and b/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo00.png differ diff --git a/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo01.png b/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo01.png new file mode 100644 index 0000000..902d0a0 Binary files /dev/null and b/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo01.png differ diff --git a/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo02.png b/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo02.png new file mode 100644 index 0000000..1ec0a15 Binary files /dev/null and b/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo02.png differ diff --git a/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo03.png b/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo03.png new file mode 100644 index 0000000..3b658c9 Binary files /dev/null and b/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo03.png differ diff --git a/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo04.png b/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo04.png new file mode 100644 index 0000000..0424c6d Binary files /dev/null and b/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo04.png differ diff --git a/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo05.png b/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo05.png new file mode 100644 index 0000000..656a310 Binary files /dev/null and b/1.4/Textures/Fetus/Thrumbos/Fetus_Thrumbo05.png differ diff --git a/1.4/Textures/Fetus/Ursids/Fetus_Ursid00.png b/1.4/Textures/Fetus/Ursids/Fetus_Ursid00.png new file mode 100644 index 0000000..8565d03 Binary files /dev/null and b/1.4/Textures/Fetus/Ursids/Fetus_Ursid00.png differ diff --git a/1.4/Textures/Fetus/Ursids/Fetus_Ursid01.png b/1.4/Textures/Fetus/Ursids/Fetus_Ursid01.png new file mode 100644 index 0000000..7e3b021 Binary files /dev/null and b/1.4/Textures/Fetus/Ursids/Fetus_Ursid01.png differ diff --git a/1.4/Textures/Fetus/Ursids/Fetus_Ursid02.png b/1.4/Textures/Fetus/Ursids/Fetus_Ursid02.png new file mode 100644 index 0000000..acab20f Binary files /dev/null and b/1.4/Textures/Fetus/Ursids/Fetus_Ursid02.png differ diff --git a/1.4/Textures/Fetus/Ursids/Fetus_Ursid03.png b/1.4/Textures/Fetus/Ursids/Fetus_Ursid03.png new file mode 100644 index 0000000..71ebfdf Binary files /dev/null and b/1.4/Textures/Fetus/Ursids/Fetus_Ursid03.png differ diff --git a/1.4/Textures/Fetus/Ursids/Fetus_Ursid04.png b/1.4/Textures/Fetus/Ursids/Fetus_Ursid04.png new file mode 100644 index 0000000..d23f6b9 Binary files /dev/null and b/1.4/Textures/Fetus/Ursids/Fetus_Ursid04.png differ diff --git a/1.4/Textures/Fetus/Ursids/Fetus_Ursid05.png b/1.4/Textures/Fetus/Ursids/Fetus_Ursid05.png new file mode 100644 index 0000000..8200c4b Binary files /dev/null and b/1.4/Textures/Fetus/Ursids/Fetus_Ursid05.png differ diff --git a/1.4/Textures/Fetus/Ursids/Fetus_Ursid05_ALT.png b/1.4/Textures/Fetus/Ursids/Fetus_Ursid05_ALT.png new file mode 100644 index 0000000..168be40 Binary files /dev/null and b/1.4/Textures/Fetus/Ursids/Fetus_Ursid05_ALT.png differ diff --git a/1.4/Textures/Fetus/~Dev/00.png b/1.4/Textures/Fetus/~Dev/00.png index cfb062c..8f011de 100644 Binary files a/1.4/Textures/Fetus/~Dev/00.png and b/1.4/Textures/Fetus/~Dev/00.png differ diff --git a/1.4/Textures/Fetus/~Dev/01.png b/1.4/Textures/Fetus/~Dev/01.png index 240f177..a0f5f7b 100644 Binary files a/1.4/Textures/Fetus/~Dev/01.png and b/1.4/Textures/Fetus/~Dev/01.png differ diff --git a/1.4/Textures/Fetus/~Dev/02.png b/1.4/Textures/Fetus/~Dev/02.png index 77fd712..b1ed363 100644 Binary files a/1.4/Textures/Fetus/~Dev/02.png and b/1.4/Textures/Fetus/~Dev/02.png differ diff --git a/1.4/Textures/Fetus/~Dev/03.png b/1.4/Textures/Fetus/~Dev/03.png index b20c79b..cdd6bfb 100644 Binary files a/1.4/Textures/Fetus/~Dev/03.png and b/1.4/Textures/Fetus/~Dev/03.png differ diff --git a/1.4/Textures/Fetus/~Dev/04.png b/1.4/Textures/Fetus/~Dev/04.png index 2c60c54..7b61025 100644 Binary files a/1.4/Textures/Fetus/~Dev/04.png and b/1.4/Textures/Fetus/~Dev/04.png differ diff --git a/1.4/Textures/Fetus/~Dev/05.png b/1.4/Textures/Fetus/~Dev/05.png index 38a4887..86489a7 100644 Binary files a/1.4/Textures/Fetus/~Dev/05.png and b/1.4/Textures/Fetus/~Dev/05.png differ diff --git a/1.4/Textures/UI/Icon/ToBucket.png b/1.4/Textures/UI/Icon/ToBucket.png deleted file mode 100644 index b979db0..0000000 Binary files a/1.4/Textures/UI/Icon/ToBucket.png and /dev/null differ diff --git a/1.4/Textures/UI/Icon/ToPussy.png b/1.4/Textures/UI/Icon/ToPussy.png deleted file mode 100644 index 2e23632..0000000 Binary files a/1.4/Textures/UI/Icon/ToPussy.png and /dev/null differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_1.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_1.png deleted file mode 100644 index 1c6ac74..0000000 Binary files a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_1.png and /dev/null differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_2.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_2.png deleted file mode 100644 index e65723d..0000000 Binary files a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_2.png and /dev/null differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_3.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_3.png deleted file mode 100644 index d67f3d0..0000000 Binary files a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_3.png and /dev/null differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_L00.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_L00.png new file mode 100644 index 0000000..a434f5a Binary files /dev/null and b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_L00.png differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_L01.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_L01.png new file mode 100644 index 0000000..14d8aa6 Binary files /dev/null and b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_L01.png differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_L02.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_L02.png new file mode 100644 index 0000000..359f5f5 Binary files /dev/null and b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_L02.png differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Large.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Large.png deleted file mode 100644 index dbf41c1..0000000 Binary files a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Large.png and /dev/null differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Large_Stretched.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Large_Stretched.png deleted file mode 100644 index 8d7f546..0000000 Binary files a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Large_Stretched.png and /dev/null differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Many.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Many.png deleted file mode 100644 index 2665259..0000000 Binary files a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Many.png and /dev/null differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_ManyMixed.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_ManyMixed.png deleted file mode 100644 index 575203e..0000000 Binary files a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_ManyMixed.png and /dev/null differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S00.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S00.png new file mode 100644 index 0000000..55c2066 Binary files /dev/null and b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S00.png differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S01.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S01.png new file mode 100644 index 0000000..5babb15 Binary files /dev/null and b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S01.png differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S02.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S02.png new file mode 100644 index 0000000..77add16 Binary files /dev/null and b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S02.png differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S03.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S03.png new file mode 100644 index 0000000..40bcdd5 Binary files /dev/null and b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S03.png differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S04.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S04.png new file mode 100644 index 0000000..057c44e Binary files /dev/null and b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_S04.png differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_00.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_00.png new file mode 100644 index 0000000..b95c3ed Binary files /dev/null and b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_00.png differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_01.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_01.png new file mode 100644 index 0000000..ebd19f3 Binary files /dev/null and b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_01.png differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_02.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_02.png new file mode 100644 index 0000000..fc8feee Binary files /dev/null and b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_02.png differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_03.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_03.png new file mode 100644 index 0000000..5eebd57 Binary files /dev/null and b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_03.png differ diff --git a/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_04.png b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_04.png new file mode 100644 index 0000000..b17fda9 Binary files /dev/null and b/1.4/Textures/Womb/Insect_Egged/Womb_Egged_Stuffed_04.png differ diff --git a/1.4/Textures/Womb/Mechanoid_Fluid.png b/1.4/Textures/Womb/Mechanoid_Fluid.png deleted file mode 100644 index 5655052..0000000 Binary files a/1.4/Textures/Womb/Mechanoid_Fluid.png and /dev/null differ diff --git a/1.4/Textures/Womb/Womb.png b/1.4/Textures/Womb/Womb.png index 7f49007..8f011de 100644 Binary files a/1.4/Textures/Womb/Womb.png and b/1.4/Textures/Womb/Womb.png differ diff --git a/1.4/Textures/Womb/Womb_Bleeding.png b/1.4/Textures/Womb/Womb_Bleeding.png index 3b931ea..9c4f2df 100644 Binary files a/1.4/Textures/Womb/Womb_Bleeding.png and b/1.4/Textures/Womb/Womb_Bleeding.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_00.png b/1.4/Textures/Womb/Womb_Cum_00.png index 7a4361a..702eb92 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_00.png and b/1.4/Textures/Womb/Womb_Cum_00.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_01.png b/1.4/Textures/Womb/Womb_Cum_01.png index f753ae6..9001a94 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_01.png and b/1.4/Textures/Womb/Womb_Cum_01.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_02.png b/1.4/Textures/Womb/Womb_Cum_02.png index 1653f06..dd5d6f4 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_02.png and b/1.4/Textures/Womb/Womb_Cum_02.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_03.png b/1.4/Textures/Womb/Womb_Cum_03.png index 000d517..ba5e1a8 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_03.png and b/1.4/Textures/Womb/Womb_Cum_03.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_04.png b/1.4/Textures/Womb/Womb_Cum_04.png index f3fdb37..3da2cff 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_04.png and b/1.4/Textures/Womb/Womb_Cum_04.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_05.png b/1.4/Textures/Womb/Womb_Cum_05.png index 9f91d4d..f018236 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_05.png and b/1.4/Textures/Womb/Womb_Cum_05.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_06.png b/1.4/Textures/Womb/Womb_Cum_06.png index a34b233..912bca6 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_06.png and b/1.4/Textures/Womb/Womb_Cum_06.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_07.png b/1.4/Textures/Womb/Womb_Cum_07.png index 9edb791..21694cb 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_07.png and b/1.4/Textures/Womb/Womb_Cum_07.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_08.png b/1.4/Textures/Womb/Womb_Cum_08.png index 5679e84..f44e7d6 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_08.png and b/1.4/Textures/Womb/Womb_Cum_08.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_09.png b/1.4/Textures/Womb/Womb_Cum_09.png index c89a46e..40f1193 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_09.png and b/1.4/Textures/Womb/Womb_Cum_09.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_10.png b/1.4/Textures/Womb/Womb_Cum_10.png index 7c4239c..62970aa 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_10.png and b/1.4/Textures/Womb/Womb_Cum_10.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_11.png b/1.4/Textures/Womb/Womb_Cum_11.png index 52cd588..bda0f85 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_11.png and b/1.4/Textures/Womb/Womb_Cum_11.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_12.png b/1.4/Textures/Womb/Womb_Cum_12.png index 6bd9215..978a5a5 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_12.png and b/1.4/Textures/Womb/Womb_Cum_12.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_13.png b/1.4/Textures/Womb/Womb_Cum_13.png index 9a5a2ee..ac6ee0d 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_13.png and b/1.4/Textures/Womb/Womb_Cum_13.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_14.png b/1.4/Textures/Womb/Womb_Cum_14.png index 991af90..b1e0756 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_14.png and b/1.4/Textures/Womb/Womb_Cum_14.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_15.png b/1.4/Textures/Womb/Womb_Cum_15.png index fcc149e..6975a62 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_15.png and b/1.4/Textures/Womb/Womb_Cum_15.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_16.png b/1.4/Textures/Womb/Womb_Cum_16.png index 3ff95ec..220302c 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_16.png and b/1.4/Textures/Womb/Womb_Cum_16.png differ diff --git a/1.4/Textures/Womb/Womb_Cum_17.png b/1.4/Textures/Womb/Womb_Cum_17.png index 3da3ed4..fd5b8da 100644 Binary files a/1.4/Textures/Womb/Womb_Cum_17.png and b/1.4/Textures/Womb/Womb_Cum_17.png differ diff --git a/1.4/Textures/Womb/Womb_Implanted.png b/1.4/Textures/Womb/Womb_Implanted.png index e570d37..94b7933 100644 Binary files a/1.4/Textures/Womb/Womb_Implanted.png and b/1.4/Textures/Womb/Womb_Implanted.png differ diff --git a/1.4/Textures/Womb/Womb_Implanted_Multiplet_2.png b/1.4/Textures/Womb/Womb_Implanted_Multiplet_2.png index 638e68c..cd2dd74 100644 Binary files a/1.4/Textures/Womb/Womb_Implanted_Multiplet_2.png and b/1.4/Textures/Womb/Womb_Implanted_Multiplet_2.png differ diff --git a/1.4/Textures/Womb/Womb_Implanted_Multiplet_3.png b/1.4/Textures/Womb/Womb_Implanted_Multiplet_3.png index 2ce2c7f..f400b21 100644 Binary files a/1.4/Textures/Womb/Womb_Implanted_Multiplet_3.png and b/1.4/Textures/Womb/Womb_Implanted_Multiplet_3.png differ diff --git a/1.4/Textures/Womb/Womb_Implanted_Multiplet_4.png b/1.4/Textures/Womb/Womb_Implanted_Multiplet_4.png new file mode 100644 index 0000000..15d6b65 Binary files /dev/null and b/1.4/Textures/Womb/Womb_Implanted_Multiplet_4.png differ diff --git a/1.4/Textures/Womb/Womb_Implanted_Multiplet_5.png b/1.4/Textures/Womb/Womb_Implanted_Multiplet_5.png new file mode 100644 index 0000000..52ebb76 Binary files /dev/null and b/1.4/Textures/Womb/Womb_Implanted_Multiplet_5.png differ diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation.sln b/1.4/source/RJW_Menstruation/RJW_Menstruation.sln index 701c76e..37d1010 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation.sln +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation.sln @@ -5,8 +5,6 @@ VisualStudioVersion = 17.3.32929.385 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RJW_Menstruation", "RJW_Menstruation\RJW_Menstruation.csproj", "{EED2F3B9-8C20-4194-919E-8D151B29F70B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MilkModule", "MilkModule\MilkModule.csproj", "{3591B3C1-EB57-44BF-AB69-A613E097A7F8}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -17,10 +15,6 @@ Global {EED2F3B9-8C20-4194-919E-8D151B29F70B}.Debug|Any CPU.Build.0 = Debug|Any CPU {EED2F3B9-8C20-4194-919E-8D151B29F70B}.Release|Any CPU.ActiveCfg = Release|Any CPU {EED2F3B9-8C20-4194-919E-8D151B29F70B}.Release|Any CPU.Build.0 = Release|Any CPU - {3591B3C1-EB57-44BF-AB69-A613E097A7F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3591B3C1-EB57-44BF-AB69-A613E097A7F8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3591B3C1-EB57-44BF-AB69-A613E097A7F8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3591B3C1-EB57-44BF-AB69-A613E097A7F8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/CompBiosculpterPod_EggRestorationCycle.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/CompBiosculpterPod_EggRestorationCycle.cs index 537ef53..b7656c8 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/CompBiosculpterPod_EggRestorationCycle.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/CompBiosculpterPod_EggRestorationCycle.cs @@ -1,4 +1,5 @@ using RimWorld; +using System.Linq; using Verse; namespace RJW_Menstruation @@ -22,6 +23,8 @@ namespace RJW_Menstruation comp.RestoreEggs(((CompProperties_BiosculpterPod_EggRestorationCycle)Props).yearsToRestore); Messages.Message(Translations.EggRestorationCompleted(occupant.Named("PAWN")), occupant, MessageTypeDefOf.PositiveEvent); + if (occupant.GetMenstruationComps().Any()) + occupant.needs.mood?.thoughts?.memories?.TryGainMemoryFast(VariousDefOf.EggRestorationReceived); } } } diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs index 07fd58f..1b1f69c 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Configurations.cs @@ -18,10 +18,11 @@ namespace RJW_Menstruation public const float CumFertilityDecayRatioDefault = 0.05f; public const int CumFertilityDecayRatioAdjustDefault = 50; public const int CycleAccelerationDefault = 6; - public const int ColonistTickIntervalDefault = 2500; // 1 hour - public const int NonColonistTickIntervalDefault = 2500; - public const int AnimalTickIntervalDefault = 2500; + 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 TickIntervalMaximum = 4 * GenDate.TicksPerHour; public const float EnzygoticTwinsChanceDefault = 0.002f; public const int EnzygoticTwinsChanceAdjustDefault = 2; public const int MaxEnzygoticTwinsDefault = 9; @@ -57,6 +58,8 @@ namespace RJW_Menstruation public static bool DrawEggOverlay = true; public static bool Debug = false; public static bool EnableMenopause = true; + public static bool EnablePheromones = true; + public static float AnimalPheromoneEffect = 0.0f; public static DetailLevel InfoDetail => infoDetail; public static bool EstrusOverridesHookupSettings = false; public static float EstrusFuckabilityToHookup = RJWHookupSettings.MinimumFuckabilityToHookup; @@ -71,10 +74,8 @@ namespace RJW_Menstruation public static int MaxEnzygoticTwins = MaxEnzygoticTwinsDefault; public static int BleedingAmount = BleedingAmountDefault; public static bool EnableButtonInHT = false; - public static bool EnableGatherCumGizmo = true; public static PawnFlags ShowFlag = PawnFlags.Colonist | PawnFlags.Prisoner; public static bool UseHybridExtention = true; - public static bool MotherFirst = false; public static bool AllowShrinkIcon = false; public static float EggLifespanMultiplier = EggLifespanMultiplierDefault; public static bool EnableBirthVaginaMorph = false; @@ -90,8 +91,10 @@ namespace RJW_Menstruation CumFertilityDecayRatioAdjust = CumFertilityDecayRatioAdjustDefault; EnableWombIcon = true; EnableDraftedIcon = true; - EnableGatherCumGizmo = true; EnableAnimalCycle = false; + EnableMenopause = true; + EnablePheromones = true; + AnimalPheromoneEffect = 0.0f; CycleAcceleration = CycleAccelerationDefault; ColonistTickInterval = ColonistTickIntervalDefault; NonColonistTickInterval = NonColonistTickIntervalDefault; @@ -107,7 +110,6 @@ namespace RJW_Menstruation PregnancySource = PregnancyType.MultiplePregnancy; MaxEnzygoticTwins = MaxEnzygoticTwinsDefault; BleedingAmount = BleedingAmountDefault; - MotherFirst = false; MaxBreastIncrementFactor = MaxBreastIncrementFactorDefault; MaxNippleIncrementFactor= MaxNippleIncrementFactorDefault; PermanentNippleChange = PermanentNippleChangeDefault; @@ -211,6 +213,8 @@ namespace RJW_Menstruation Scribe_Values.Look(ref Debug, "Debug", false); Scribe_Values.Look(ref infoDetail, "InfoDetail", DetailLevel.All); Scribe_Values.Look(ref EnableMenopause, "EnableMenopause", true); + Scribe_Values.Look(ref EnablePheromones, "EnablePheromones", true); + Scribe_Values.Look(ref AnimalPheromoneEffect, "AnimalPheromoneEffect", 0.0f); Scribe_Values.Look(ref EstrusOverridesHookupSettings, "EstrusOverridesHookupSettings", false); Scribe_Values.Look(ref EstrusFuckabilityToHookup, "EstrusFuckabilityToHookup", EstrusFuckabilityToHookup, true); Scribe_Values.Look(ref EstrusAttractivenessToHookup, "EstrusAttractivenessToHookup", EstrusAttractivenessToHookup, true); @@ -224,10 +228,8 @@ namespace RJW_Menstruation Scribe_Values.Look(ref MaxEnzygoticTwins, "MaxEnzygoticTwins", MaxEnzygoticTwinsDefault); Scribe_Values.Look(ref BleedingAmount, "BleedingAmount", BleedingAmountDefault); Scribe_Values.Look(ref EnableButtonInHT, "EnableButtonInHT", false); - Scribe_Values.Look(ref EnableGatherCumGizmo, "EnableGatherCumGizmo", true); Scribe_Values.Look(ref ShowFlag, "ShowFlag", PawnFlags.Colonist | PawnFlags.Prisoner); Scribe_Values.Look(ref UseHybridExtention, "UseHybridExtention", true); - Scribe_Values.Look(ref MotherFirst, "MotherFirst", false); Scribe_Values.Look(ref MaxBreastIncrementFactor, "MaxBreastIncrementFactor", MaxBreastIncrementFactorDefault); Scribe_Values.Look(ref MaxNippleIncrementFactor, "MaxNippleIncrementFactor", MaxNippleIncrementFactorDefault); Scribe_Values.Look(ref PermanentNippleChange, "PermanentNippleChange", PermanentNippleChangeDefault); @@ -291,6 +293,7 @@ namespace RJW_Menstruation float mainRectHeight = 126f + (Configurations.EnableWombIcon || Configurations.EnableButtonInHT ? 400f : 0f) + (Configurations.EnableAnimalCycle ? 48f : 0f) + + (Configurations.EnableAnimalCycle && Configurations.EnablePheromones ? 48f : 0f) + (Configurations.EstrusOverridesHookupSettings ? 144f : 0f) + (Configurations.PregnancySource == Configurations.PregnancyType.MultiplePregnancy ? (Configurations.EnableEnzygoticTwins ? 175f : 75f) : 0f) + (Configurations.PregnancySource == Configurations.PregnancyType.Biotech ? 75f : 0f) + @@ -309,7 +312,6 @@ namespace RJW_Menstruation firstLine.SplitVertically(firstLine.width / 3, out Rect leftCell, out Rect middleAndRightCells); Widgets.CheckboxLabeled(leftCell, Translations.Option1_Label_1, ref Configurations.EnableWombIcon, false, null, null, true); Widgets.CheckboxLabeled(middleAndRightCells.LeftHalf(), Translations.Option1_Label_2, ref Configurations.EnableButtonInHT, false, null, null, true); - Widgets.CheckboxLabeled(middleAndRightCells.RightHalf(), Translations.Option_EnableGatherCumGizmo_Label, ref Configurations.EnableGatherCumGizmo, false, null, null, true); if (Configurations.EnableWombIcon || Configurations.EnableButtonInHT) { Listing_Standard wombsection = listmain.BeginSection(380); @@ -393,6 +395,16 @@ namespace RJW_Menstruation listmain.CheckboxLabeled(Translations.Option12_Label, ref Configurations.EnableMenopause, Translations.Option12_Desc); + listmain.CheckboxLabeled(Translations.Option_EnablePheromones_Label, ref Configurations.EnablePheromones, Translations.Option_EnablePheromones_Desc); + if (Configurations.EnablePheromones && Configurations.EnableAnimalCycle) + { + Adjust = (int)(Configurations.AnimalPheromoneEffect * 1000); + listmain.Label(Translations.Option_AnimalPheromoneEffect_Label + " " + Configurations.AnimalPheromoneEffect * 100 + "%", -1, Translations.Option_AnimalPheromoneEffect_Desc); + Adjust = (int)listmain.Slider(Adjust, 0, 1000); + Configurations.AnimalPheromoneEffect = (float)Adjust / 1000f; + } + else Configurations.AnimalPheromoneEffect = 0.0f; + listmain.Label(Translations.Option3_Label + " " + Configurations.ImplantationChance * 100 + "%", -1, Translations.Option3_Desc); Configurations.ImplantationChanceAdjust = (int)listmain.Slider(Configurations.ImplantationChanceAdjust, 0, 1000); Configurations.ImplantationChance = (float)Configurations.ImplantationChanceAdjust / 100; @@ -432,15 +444,15 @@ namespace RJW_Menstruation Configurations.CycleAcceleration = (int)listmain.Slider(Configurations.CycleAcceleration, 1, 50); listmain.LabelDouble(Translations.Option_ColonistUpdateInterval_Label, GenDate.ToStringTicksToPeriod(Configurations.ColonistTickInterval), Translations.Option_ColonistUpdateInterval_Desc); - Configurations.ColonistTickInterval = (int)Mathf.Exp(listmain.Slider(Mathf.Log(Configurations.ColonistTickInterval), Mathf.Log(Configurations.TickIntervalMinimum), Mathf.Log(4 * GenDate.TicksPerHour))); + Configurations.ColonistTickInterval = (int)Mathf.Exp(listmain.Slider(Mathf.Log(Configurations.ColonistTickInterval), Mathf.Log(Configurations.TickIntervalMinimum), Mathf.Log(Configurations.TickIntervalMaximum))); listmain.LabelDouble(Translations.Option_NonColonistUpdateInterval_Label, GenDate.ToStringTicksToPeriod(Configurations.NonColonistTickInterval), Translations.Option_NonColonistUpdateInterval_Desc); - Configurations.NonColonistTickInterval = (int)Mathf.Exp(listmain.Slider(Mathf.Log(Configurations.NonColonistTickInterval), Mathf.Log(Configurations.TickIntervalMinimum), Mathf.Log(4 * GenDate.TicksPerHour))); + Configurations.NonColonistTickInterval = (int)Mathf.Exp(listmain.Slider(Mathf.Log(Configurations.NonColonistTickInterval), Mathf.Log(Configurations.TickIntervalMinimum), Mathf.Log(Configurations.TickIntervalMaximum))); if(Configurations.EnableAnimalCycle) { listmain.LabelDouble(Translations.Option_AnimalUpdateInterval_Label, GenDate.ToStringTicksToPeriod(Configurations.AnimalTickInterval), Translations.Option_AnimalUpdateInterval_Desc); - Configurations.AnimalTickInterval = (int)Mathf.Exp(listmain.Slider(Mathf.Log(Configurations.AnimalTickInterval), Mathf.Log(Configurations.TickIntervalMinimum), Mathf.Log(4 * GenDate.TicksPerHour))); + Configurations.AnimalTickInterval = (int)Mathf.Exp(listmain.Slider(Mathf.Log(Configurations.AnimalTickInterval), Mathf.Log(Configurations.TickIntervalMinimum), Mathf.Log(Configurations.TickIntervalMaximum))); } float var2 = EstimatedBleedingAmountPerHour; diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Cum.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Cum.cs index 3f112d3..eefdfc7 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Cum.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Cum.cs @@ -204,9 +204,9 @@ namespace RJW_Menstruation { // comp is used for Hydrogen's RJW Muscle Injury float totalleak = volume; - float decayPerInterval = 1 - Mathf.Pow(1 - Configurations.CumDecayRatio, comp.SimulationsPerHour); - float fertilityDecayPerInterval = 1 - Mathf.Pow(1 - Configurations.CumFertilityDecayRatio, comp.SimulationsPerHour); - antisperm *= comp.SimulationsPerHour; + float decayPerInterval = 1 - Mathf.Pow(1 - Configurations.CumDecayRatio, comp.HoursBetweenSimulations); + float fertilityDecayPerInterval = 1 - Mathf.Pow(1 - Configurations.CumFertilityDecayRatio, comp.HoursBetweenSimulations); + antisperm *= comp.HoursBetweenSimulations; volume *= Math.Max(0, 1 - decayPerInterval * (1 - DecayResist) * leakfactor); fertility *= Math.Max(0, 1 - (fertilityDecayPerInterval * (1 - DecayResist) + antisperm)); CutMinor(); diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomeDoers.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomeDoers.cs index b618abe..33e4e11 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomeDoers.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomeDoers.cs @@ -89,7 +89,7 @@ namespace RJW_Menstruation else m.moodPowerFactor = 0.3f; } - if (pawn.IsProPregnancy()) pawn.needs.mood.thoughts.memories.TryGainMemoryFast(VariousDefOf.HateTookContraceptivePill); + if (pawn.IsProPregnancy(out _)) pawn.needs.mood.thoughts.memories.TryGainMemoryFast(VariousDefOf.HateTookContraceptivePill); else pawn.needs.mood.thoughts.memories.TryGainMemoryFast(VariousDefOf.TookContraceptivePill); } } diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs index 558031d..eacab7d 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Breast.cs @@ -144,11 +144,13 @@ namespace RJW_Menstruation Scribe_Values.Look(ref baseAlpha, "baseAlpha", baseAlpha, true); Scribe_Values.Look(ref baseAreola, "baseAreola", baseAreola, true); Scribe_Values.Look(ref baseNipple, "baseNipple", baseNipple, true); + if (Scribe.mode == LoadSaveMode.PostLoadInit) + Initialize(); } public bool ShouldSimulate() { - if (!Configurations.EnableAnimalCycle && Pawn.IsAnimal()) return false; + if (!Pawn.ShouldCycle()) return false; if (Pawn.SpawnedOrAnyParentSpawned || Pawn.IsCaravanMember() || PawnUtility.IsTravelingInTransportPodWorldObject(Pawn)) return true; return false; 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 a32969c..08dcf50 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 @@ -30,7 +30,7 @@ namespace RJW_Menstruation switch (CurrentVisibleStage) { case Stage.Follicular: - return Translations.Stage_Follicular_Induced_Desc + (EggHealth < 1f ? Translations.Stage_Climacteric_Desc : ""); + return Translations.Stage_Follicular_Induced_Desc + (EggHealth < 1f ? " " + Translations.Stage_Climacteric_Desc : ""); default: return base.GetCurStageDesc; } @@ -106,19 +106,8 @@ namespace RJW_Menstruation protected override bool ShouldBeInEstrus() { - if (!loaded) - Initialize(); - switch (curStage) - { - case Stage.Follicular: - return curStageTicks > currentIntervalTicks - Props.estrusDaysBeforeOvulation * GenDate.TicksPerDay; - case Stage.Ovulatory: - return true; - case Stage.Luteal: - return hadOvulatoryStage && curStageTicks < EggLifespanTicks; - default: - return false; - } + if (curStage == Stage.Luteal && !hadOvulatoryStage) return false; + else return base.ShouldBeInEstrus(); } } } 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 c32ee83..e5cfef8 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 @@ -169,14 +169,15 @@ namespace RJW_Menstruation if (Pawn.IsAnimal()) tickInterval = Configurations.AnimalTickInterval; else if (Pawn.IsColonist || Pawn.IsPrisonerOfColony || Pawn.IsSlaveOfColony) tickInterval = Configurations.ColonistTickInterval; else tickInterval = Configurations.NonColonistTickInterval; - if (tickInterval <= Configurations.TickIntervalMinimum) tickInterval = Configurations.TickIntervalMinimum; + if (tickInterval < Configurations.TickIntervalMinimum) tickInterval = Configurations.TickIntervalMinimum; + else if (tickInterval > Configurations.TickIntervalMaximum) tickInterval = Configurations.TickIntervalMaximum; } return tickInterval; } set => tickInterval = value; } - public float SimulationsPerHour => (float)TickInterval / GenDate.TicksPerHour; + public float HoursBetweenSimulations => (float)TickInterval / GenDate.TicksPerHour; public Hediff Pregnancy { get @@ -197,20 +198,9 @@ namespace RJW_Menstruation get { if (opcache > 0) return opcache; - float avglittersize; - try - { - avglittersize = Mathf.Max(Rand.ByCurveAverage(Pawn.RaceProps.litterSizeCurve), 1.0f); - } - catch - { - // Any exceptions in that will have been reported elsewhere in the code by now - avglittersize = 1.0f; - }; - avglittersize *= ovulationFactor; const float yearsBeforeMenopause = 6.0f; opcache = (int)(RaceCyclesPerYear() * - avglittersize * + AverageLitterSize() * yearsBeforeMenopause * (Pawn.RaceProps.lifeExpectancy / ThingDefOf.Human.race.lifeExpectancy)); if (opcache == 0) opcache = 1; @@ -289,16 +279,17 @@ namespace RJW_Menstruation { get { - if (QuirkUtility.HasQuirk(Pawn, QuirkUtility.Quirks.Breeder)) return 0.5f; + if (Pawn.IsBreeder()) return 0.5f; return 1.0f; } } // I hate doing this, but it's the least bad option - public bool calculatingOvulationChance = false; + private bool calculatingOvulationChance = false; + public bool CalculatingOvulationChance { get => calculatingOvulationChance; } - protected float CalcuatedOvulationChance() + protected float CalculatedOvulationChance() { float ovulationChance = 1.0f; if (EggHealth <= 0.0f) return 0.0f; @@ -306,20 +297,14 @@ namespace RJW_Menstruation 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; + + float ageFactor = 1.0f; + StatDefOf.Fertility.GetStatPart()?.TransformValue(StatRequest.For(Pawn), ref ageFactor); + if (ageFactor <= 0.0f) return 0.0f; // Too young or too old + + if (Pawn.IsBreeder()) ovulationChance *= 10.0f; try { calculatingOvulationChance = true; @@ -330,20 +315,19 @@ namespace RJW_Menstruation return ovulationChance; } - protected float CalcuatedImplantChance() + protected float CalculatedImplantChance() { - float factor = 1.0f; 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(); - fertilityStatPart?.TransformValue(StatRequest.For(Pawn), ref factor); + float factor = 1.0f; + StatDefOf.Fertility.GetStatPart()?.TransformValue(StatRequest.For(Pawn), ref factor); if (OvulationChance > 1.0f) factor *= OvulationChance; return Props.baseImplantationChanceFactor * FertilityModifier * factor; } else { - return Pawn.health.capacities.GetLevel(xxx.reproduction) * Props.baseImplantationChanceFactor * FertilityModifier * factor; + return Pawn.health.capacities.GetLevel(xxx.reproduction) * Props.baseImplantationChanceFactor * FertilityModifier; } } @@ -351,16 +335,17 @@ namespace RJW_Menstruation { get { - if (ovulationChanceCache < 0.0f) ovulationChanceCache = CalcuatedOvulationChance(); + if (ovulationChanceCache < 0.0f) ovulationChanceCache = CalculatedOvulationChance(); return ovulationChanceCache; } } + // Before configuration setting public float ImplantChance { get { - if (implantationChanceCache < 0.0f) implantationChanceCache = CalcuatedImplantChance(); + if (implantationChanceCache < 0.0f) implantationChanceCache = CalculatedImplantChance(); return implantationChanceCache; } } @@ -371,10 +356,7 @@ namespace RJW_Menstruation { if (cums.NullOrEmpty()) yield return Translations.Info_noCum; else foreach (Cum cum in cums) - { - if (!cum.notcum) yield return string.Format("{0}: {1:0.##}ml", cum.pawn?.Label, cum.Volume); - else yield return string.Format("{0}: {1:0.##}ml", cum.notcumLabel, cum.Volume); - } + yield return string.Format("{0}: {1:0.##}ml", cum.notcum ? cum.notcumLabel : cum.pawn?.Label, cum.Volume); } } public Color GetCumMixtureColor @@ -677,6 +659,8 @@ namespace RJW_Menstruation 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) + Initialize(); } @@ -694,25 +678,29 @@ namespace RJW_Menstruation estrusLevel = Props.concealedEstrus ? EstrusLevel.Concealed : EstrusLevel.Visible; ovulationFactor = 1f; noBleeding = false; + opcache = -1; if (Pawn.genes == null || !ModsConfig.BiotechActive) return; - if (Pawn.genes.HasGene(VariousDefOf.ShortEggLifetime)) eggLifeSpanTicks = eggLifeSpanTicks * 3 / 4; - else if (Pawn.genes.HasGene(VariousDefOf.DoubleEggLifetime)) eggLifeSpanTicks *= 2; - else if (Pawn.genes.HasGene(VariousDefOf.QuadEggLifetime)) eggLifeSpanTicks *= 4; + foreach (GeneDef geneDef in Pawn.genes.GenesListForReading.Select(gene => gene.def)) + { + if (geneDef == VariousDefOf.ShortEggLifetime) eggLifeSpanTicks = eggLifeSpanTicks * 3 / 4; + else if (geneDef == VariousDefOf.DoubleEggLifetime) eggLifeSpanTicks *= 2; + else if (geneDef == VariousDefOf.QuadEggLifetime) eggLifeSpanTicks *= 4; - if (Pawn.genes.HasGene(VariousDefOf.NeverEstrus)) estrusLevel = EstrusLevel.None; - else if (Pawn.genes.HasGene(VariousDefOf.FullEstrus)) estrusLevel = EstrusLevel.Visible; + else if (geneDef == VariousDefOf.NeverEstrus) estrusLevel = EstrusLevel.None; + else if (geneDef == VariousDefOf.FullEstrus) estrusLevel = EstrusLevel.Visible; - if (Pawn.genes.HasGene(VariousDefOf.DoubleOvulation)) ovulationFactor = 2f; - else if (Pawn.genes.HasGene(VariousDefOf.QuadOvulation)) ovulationFactor = 4f; + else if (geneDef == VariousDefOf.DoubleOvulation) ovulationFactor = 2f; + else if (geneDef == VariousDefOf.QuadOvulation) ovulationFactor = 4f; - noBleeding = Pawn.genes.HasGene(VariousDefOf.NoBleeding); + else if (geneDef == VariousDefOf.NoBleeding) noBleeding = true; + } } public bool ShouldSimulate() { - if (!Configurations.EnableAnimalCycle && Pawn.IsAnimal()) return false; + if (!Pawn.ShouldCycle()) return false; if (Pawn.SpawnedOrAnyParentSpawned || Pawn.IsCaravanMember() || PawnUtility.IsTravelingInTransportPodWorldObject(Pawn)) return true; return false; @@ -734,6 +722,9 @@ namespace RJW_Menstruation // If an exception makes it out, RW will remove the hediff, so catch it here try { + 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 @@ -742,10 +733,7 @@ namespace RJW_Menstruation Log.Warning($"{Pawn}'s womb is ticking, but was not initialized first"); Initialize(); } - - 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 (initError) Log.Warning($"Attempting to process {Pawn}'s womb uninitialized"); if (Pregnancy != null && curStage != Stage.Pregnant) @@ -888,8 +876,8 @@ namespace RJW_Menstruation if (!precum && fertility > 0 && IsDangerDay && cummer.relations.GetPregnancyApproachForPartner(Pawn) == PregnancyApproach.AvoidPregnancy) { float successChance = pulloutSuccessRate; - if (cummer.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish)) successChance *= fetishPulloutSuccessModifier; - if (Pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish)) successChance *= fetishPulloutSuccessModifier; + if (cummer.HasImpregnationFetish()) successChance *= fetishPulloutSuccessModifier; + if (Pawn.HasImpregnationFetish()) successChance *= fetishPulloutSuccessModifier; if (Rand.Chance(successChance)) return; } if (Pawn.HasIUD()) fertility /= 100f; @@ -901,7 +889,7 @@ namespace RJW_Menstruation bool merged = false; if (!cums.NullOrEmpty()) foreach (Cum cum in cums) { - if (cum.pawn.Equals(cummer)) + if (cum.pawn?.Equals(cummer) ?? false) { cum.MergeWithCum(volume, fertility); merged = true; @@ -916,7 +904,7 @@ namespace RJW_Menstruation bool merged = false; if (!cums.NullOrEmpty()) foreach (Cum cum in cums) { - if (cum.pawn.Equals(cummer)) + if (cum.pawn?.Equals(cummer) ?? false) { cum.MergeWithCum(volume, fertility); merged = true; @@ -953,7 +941,7 @@ namespace RJW_Menstruation bool merged = false; if (!cums.NullOrEmpty()) foreach (Cum cum in cums) { - if (cum.notcum && cum.pawn.Equals(cummer) && cum.notcumLabel.Equals(notcumlabel)) + if (cum.notcum && (cum.pawn?.Equals(cummer) ?? false) && cum.notcumLabel.Equals(notcumlabel)) { cum.MergeWithFluid(volume, decayresist, filthdef); merged = true; @@ -968,7 +956,7 @@ namespace RJW_Menstruation bool merged = false; if (!cums.NullOrEmpty()) foreach (Cum cum in cums) { - if (cum.notcum && cum.pawn.Equals(cummer) && cum.notcumLabel.Equals(notcumlabel)) + if (cum.notcum && (cum.pawn?.Equals(cummer) ?? false) && cum.notcumLabel.Equals(notcumlabel)) { cum.MergeWithFluid(volume, decayresist, filthdef); merged = true; @@ -1061,9 +1049,9 @@ namespace RJW_Menstruation if (Pawn.CurJobDef == xxx.knotted) leakfactor = 0f; foreach (Cum cum in cums) { - if (Rand.Chance(SimulationsPerHour)) cum.CumEffects(Pawn); + if (Rand.Chance(HoursBetweenSimulations)) cum.CumEffects(Pawn); float vd = cum.DismishNatural(leakfactor, this, antisperm); - cum.MakeThinner((float)Configurations.CycleAcceleration * SimulationsPerHour); + cum.MakeThinner((float)Configurations.CycleAcceleration * HoursBetweenSimulations); totalleak += AbsorbCum(vd, absorber); string tmp = "FilthLabelWithSource".Translate(cum.FilthDef.label, cum.pawn?.LabelShort ?? "Unknown", 1.ToString()); filthlabels.Add(tmp.Replace(" x1", "")); @@ -1222,6 +1210,21 @@ namespace RJW_Menstruation { } + protected float AverageLitterSize() + { + float avglittersize; + try + { + avglittersize = Mathf.Max(Rand.ByCurveAverage(Pawn.RaceProps.litterSizeCurve), 1.0f); + } + catch (NullReferenceException) + { + avglittersize = 1.0f; + } + avglittersize *= ovulationFactor; + return avglittersize; + } + protected virtual float RaceCyclesPerYear() { int breedingSeasons = 0; @@ -1244,16 +1247,7 @@ namespace RJW_Menstruation public int GetOvaryPowerByAge() { - float avglittersize; - try - { - avglittersize = Mathf.Max(Rand.ByCurveAverage(Pawn.RaceProps.litterSizeCurve), 1.0f); - } - catch (NullReferenceException) - { - avglittersize = 1.0f; - } - avglittersize *= ovulationFactor; + float avglittersize = AverageLitterSize(); float fertStartAge = Pawn.RaceProps.lifeStageAges?.Find(stage => stage.def.reproductive)?.minAge ?? 0.0f; float fertEndAge = Pawn.RaceProps.lifeExpectancy * (Pawn.IsAnimal() ? RJWPregnancySettings.fertility_endage_female_animal : RJWPregnancySettings.fertility_endage_female_humanlike); @@ -1300,7 +1294,8 @@ namespace RJW_Menstruation if (EggHealth < 1f) { if (sexNeed == null) sexNeed = Pawn.needs.TryGetNeed(VariousDefOf.SexNeed); - if (sexNeed?.CurLevel < 0.5) sexNeed.CurLevel += 0.01f / Math.Max(1, Pawn.GetMenstruationComps().Count()); + if (sexNeed == null) return; + if (sexNeed.CurLevel < 0.5f) sexNeed.CurLevel += 0.01f * HoursBetweenSimulations / Math.Max(1, Pawn.GetMenstruationComps().Count()); } } @@ -1368,7 +1363,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 * SimulationsPerHour); + float fertFailChancePerInterval = Mathf.Pow(1.0f - Configurations.FertilizeChance, totalFertPower * Props.basefertilizationChanceFactor * HoursBetweenSimulations); if (Rand.Chance(fertFailChancePerInterval)) return null; @@ -1412,97 +1407,116 @@ namespace RJW_Menstruation } 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) + try { - if (Configurations.PregnancySource == Configurations.PregnancyType.Biotech && Configurations.EnableBiotechTwins && Configurations.EnableHeteroOvularTwins) + if (Configurations.Debug) Log.Message($"Implanting fertilized egg of {Pawn} into {parent}, father {egg.fertilizer}"); + if (pregnancy == null) { - if (Configurations.Debug) Log.Message($"Adding to existing Biotech pregnancy {pregnancy}"); - HediffComp_PregeneratedBabies comp = pregnancy.TryGetComp(); - if (comp == null) Log.Warning($"Trying to add Biotech egg to {Pawn}'s pregnancy without a pregenerated baby comp: {pregnancy}"); - else + Configurations.PregnancyType usePregnancy = xxx.is_human(Pawn) ? Configurations.PregnancySource : Configurations.PregnancyType.MultiplePregnancy; + switch (usePregnancy) { - comp.AddNewBaby(Pawn, egg.fertilizer); - pregnant = true; - deadeggs.Add(egg); + case Configurations.PregnancyType.BaseRJW: + + if (Configurations.Debug) Log.Message($"Creating new base RJW pregnancy"); + PregnancyHelper.AddPregnancyHediff(Pawn, egg.fertilizer); + // I hate having to do this, but it gets the newest pregnancy + List pregnancies = new List(); + Pawn.health.hediffSet.GetHediffs(ref pregnancies); + pregnancy = pregnancies.MaxBy(hediff => hediff.loadID); + pregnant = true; + break; + + case Configurations.PregnancyType.MultiplePregnancy: + if (Configurations.Debug) Log.Message($"Creating new menstruation pregnancy"); + pregnancy = Hediff_BasePregnancy.Create(Pawn, egg.fertilizer); + pregnant = true; + deadeggs.Add(egg); + break; + + case Configurations.PregnancyType.Biotech: + if (Configurations.Debug) Log.Message($"Creating new biotech pregnancy"); + pregnancy = HediffMaker.MakeHediff(HediffDefOf.PregnantHuman, Pawn); + if (Configurations.EnableBiotechTwins) + pregnancy.TryGetComp().AddNewBaby(Pawn, egg.fertilizer); + ((Hediff_Pregnant)pregnancy).SetParents(Pawn, egg.fertilizer, PregnancyUtility.GetInheritedGeneSet(egg.fertilizer, Pawn)); + Pawn.health.AddHediff(pregnancy); + pregnant = true; + deadeggs.Add(egg); + break; } - } - else if (Configurations.PregnancySource == Configurations.PregnancyType.MultiplePregnancy && Configurations.EnableHeteroOvularTwins) - { - if (pregnancy is Hediff_MultiplePregnancy h) + if (pregnancy is Hediff_BasePregnancy rjw_preg) { - if (Configurations.Debug) Log.Message($"Adding to existing pregnancy {h}"); - h.AddNewBaby(Pawn, egg.fertilizer); + // TODO: advance biotech pregnancy + rjw_preg.p_start_tick -= egg.ticksSinceFertilization / Configurations.CycleAcceleration; + rjw_preg.p_end_tick -= egg.ticksSinceFertilization / Configurations.CycleAcceleration; } - pregnant = true; - deadeggs.Add(egg); } else { - pregnant = true; - break; + switch (pregnancy) + { + case Hediff_Pregnant vanillaPreg: // Not going to do the labor ones + if (!Configurations.EnableBiotechTwins || !Configurations.EnableHeteroOvularTwins) goto default; + if (Configurations.Debug) Log.Message($"Adding to existing Biotech pregnancy {vanillaPreg.GetUniqueLoadID()}"); + HediffComp_PregeneratedBabies comp = vanillaPreg.TryGetComp(); + if (comp == null) Log.Warning($"Trying to add Biotech egg to {Pawn}'s pregnancy without a pregenerated baby comp: {vanillaPreg.GetUniqueLoadID()}"); + else + comp.AddNewBaby(Pawn, egg.fertilizer); + pregnant = true; + deadeggs.Add(egg); + break; + case Hediff_MultiplePregnancy multiPreg: + if (!Configurations.EnableHeteroOvularTwins) goto default; + if (Configurations.Debug) Log.Message($"Adding to existing pregnancy {multiPreg.GetUniqueLoadID()}"); + multiPreg.AddNewBaby(Pawn, egg.fertilizer); + pregnant = true; + deadeggs.Add(egg); + break; + case Hediff_BasePregnancy _: + default: + pregnant = true; + deadeggs.Add(egg); + break; + } } } - else + catch (Exception ex) { - Configurations.PregnancyType usePregnancy = xxx.is_human(Pawn) ? Configurations.PregnancySource : Configurations.PregnancyType.MultiplePregnancy; - switch (usePregnancy) - { - case Configurations.PregnancyType.BaseRJW: - - if (Configurations.Debug) Log.Message($"Creating new base RJW pregnancy"); - PregnancyHelper.AddPregnancyHediff(Pawn, egg.fertilizer); - // I hate having to do this, but it gets the newest pregnancy - List pregnancies = new List(); - Pawn.health.hediffSet.GetHediffs(ref pregnancies); - pregnancy = pregnancies.MaxBy(hediff => hediff.loadID); - pregnant = true; - break; - - case Configurations.PregnancyType.MultiplePregnancy: - if (Configurations.Debug) Log.Message($"Creating new menstruation pregnancy"); - pregnancy = Hediff_BasePregnancy.Create(Pawn, egg.fertilizer); - pregnant = true; - deadeggs.Add(egg); - break; - - case Configurations.PregnancyType.Biotech: - if (Configurations.Debug) Log.Message($"Creating new biotech pregnancy"); - pregnancy = HediffMaker.MakeHediff(HediffDefOf.PregnantHuman, Pawn); - if(Configurations.EnableBiotechTwins) - pregnancy.TryGetComp().AddNewBaby(Pawn, egg.fertilizer); - ((Hediff_Pregnant)pregnancy).SetParents(Pawn, egg.fertilizer, PregnancyUtility.GetInheritedGeneSet(egg.fertilizer, Pawn)); - Pawn.health.AddHediff(pregnancy); - pregnant = true; - deadeggs.Add(egg); - break; - } - if (pregnancy is Hediff_BasePregnancy rjw_preg) - { - // TODO: advance biotech pregnancy - rjw_preg.p_start_tick -= egg.ticksSinceFertilization / Configurations.CycleAcceleration; - rjw_preg.p_end_tick -= egg.ticksSinceFertilization / Configurations.CycleAcceleration; - } + Log.Error($"Error creating pregnancy in {Pawn}'s womb, father {egg.fertilizer}: {ex}"); + TakeLoosePregnancy(); + deadeggs.Add(egg); } } else - { + { if (Configurations.Debug) { - float implantChance = Configurations.ImplantationChance * ImplantChance * InterspeciesImplantFactor(egg.fertilizer); - Log.Message($"Fertilized egg of {Pawn} failed to implant (chance {implantChance.ToStringPercent()}, father {egg.fertilizer})"); + 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()}, " : "" ) + + $"father {egg.fertilizer})"); } deadeggs.Add(egg); } } - if (pregnant && - (Configurations.PregnancySource != Configurations.PregnancyType.MultiplePregnancy || !Configurations.EnableHeteroOvularTwins) && - (Configurations.PregnancySource != Configurations.PregnancyType.Biotech || !Configurations.EnableBiotechTwins || !Configurations.EnableHeteroOvularTwins)) + bool clearAllEggs = true; + switch (Configurations.PregnancySource) { - eggs.Clear(); - return true; + case Configurations.PregnancyType.BaseRJW: + clearAllEggs = true; + break; + case Configurations.PregnancyType.MultiplePregnancy: + clearAllEggs = !Configurations.EnableHeteroOvularTwins; + break; + case Configurations.PregnancyType.Biotech: + clearAllEggs = !(Configurations.EnableBiotechTwins && Configurations.EnableHeteroOvularTwins); + break; } + + if (pregnant && clearAllEggs) + eggs.Clear(); else eggs.RemoveAll(egg => deadeggs.Contains(egg)); return pregnant; @@ -1511,7 +1525,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) * SimulationsPerHour; + float bledAmount = 0.03f * Configurations.BleedingAmount * Configurations.CycleAcceleration * Rand.Range(0.5f, 1.5f) * HoursBetweenSimulations; 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; @@ -1524,8 +1538,8 @@ namespace RJW_Menstruation /// protected void MakeCumFilth(Cum cum, float amount) { - if (Pawn.Map == null) return; - if (amount >= minmakefilthvalue) FilthMaker.TryMakeFilth(Pawn.Position, Pawn.Map, cum.FilthDef, cum.pawn?.LabelShort ?? "Unknown"); + if (Pawn.MapHeld == null) return; + if (amount >= minmakefilthvalue) FilthMaker.TryMakeFilth(Pawn.PositionHeld, Pawn.MapHeld, cum.FilthDef, cum.pawn?.LabelShort ?? "Unknown"); } /// @@ -1552,21 +1566,16 @@ namespace RJW_Menstruation return amount; } absorber.absorbedfluids += amount; - if (absorber.absorbedfluids > absorbable && !Pawn.apparel.IsLocked(absorber)) - { - absorber.def = absorber.DirtyDef; - //absorber.fluidColor = GetCumMixtureColor; - absorber.dirty = true; - } + absorber.CheckDirty(); return 0; } protected float MakeCumFilthMixture(float amount, List cumlabels) { - if (Pawn.Map == null) return 0; + if (Pawn.MapHeld == null) return 0; if (amount >= minmakefilthvalue) { - FilthMaker_Colored.TryMakeFilth(Pawn.Position, Pawn.Map, VariousDefOf.FilthMixture, cumlabels, GetCumMixtureColor, false); + FilthMaker_Colored.TryMakeFilth(Pawn.PositionHeld, Pawn.MapHeld, VariousDefOf.FilthMixture, cumlabels, GetCumMixtureColor, false); } return amount; } @@ -1596,7 +1605,12 @@ namespace RJW_Menstruation hediff.Severity = crampPain * Rand.Range(0.9f, 1.1f); HediffCompProperties_SeverityPerDay Prop = (HediffCompProperties_SeverityPerDay)hediff.TryGetComp().props; Prop.severityPerDay = -hediff.Severity / (currentIntervalTicks / GenDate.TicksPerDay) * Configurations.CycleAcceleration; - Pawn.health.AddHediff(hediff, Genital_Helper.get_genitalsBPR(Pawn)); + Pawn.health.AddHediff(hediff, parent.Part); + } + + protected void AdvanceStageTime() + { + curStageTicks += TickInterval * Configurations.CycleAcceleration; } protected virtual void FollicularAction() @@ -1613,13 +1627,12 @@ namespace RJW_Menstruation } else { - curStageTicks += TickInterval * Configurations.CycleAcceleration; + AdvanceStageTime(); if (!estrusflag && curStageTicks > currentIntervalTicks - Props.estrusDaysBeforeOvulation * GenDate.TicksPerDay) { estrusflag = true; SetEstrus(); } - StayCurrentStage(); } } @@ -1627,7 +1640,7 @@ namespace RJW_Menstruation { if (curStageTicks < currentIntervalTicks) { - curStageTicks += TickInterval * Configurations.CycleAcceleration; + AdvanceStageTime(); return; } estrusflag = false; @@ -1642,7 +1655,7 @@ namespace RJW_Menstruation } catch (ArgumentException e) { - Log.Warning($"Invalid litterSizeCurve for {Pawn.def}: {e}"); + Log.WarningOnce($"Invalid litterSizeCurve for {Pawn.def}: {e}", 642201874 + Pawn.thingIDNumber); eggnum = 1f; } eggnum *= ovulationFactor; @@ -1687,21 +1700,19 @@ namespace RJW_Menstruation } else { - curStageTicks += TickInterval * Configurations.CycleAcceleration; - StayCurrentStage(); + AdvanceStageTime(); } } else { - curStageTicks += TickInterval * Configurations.CycleAcceleration; - StayCurrentStage(); + AdvanceStageTime(); } } protected virtual void BleedingAction() { - if (curStageTicks >= currentIntervalTicks) + if (curStageTicks >= currentIntervalTicks || noBleeding) { Hediff hediff = Pawn.health.hediffSet.GetFirstHediffOfDef(VariousDefOf.Hediff_MenstrualCramp); if (hediff != null && !Pawn.GetMenstruationComps().Any(comp => comp != this && comp.curStage == Stage.Bleeding)) Pawn.health.RemoveHediff(hediff); @@ -1710,15 +1721,13 @@ namespace RJW_Menstruation GoOvulatoryStage(); else { - currentIntervalTicks = totalFollicularTicks - currentIntervalTicks; // I.e., the remaining follicular time equals the total minus the bleeding time elapsed - GoNextStage(Stage.Follicular, false); + GoNextStage(Stage.Follicular, totalFollicularTicks - currentIntervalTicks); // I.e., the remaining follicular time equals the total minus the bleeding time elapsed } } else { if (curStageTicks < currentIntervalTicks / 4) BleedOut(); - curStageTicks += TickInterval * Configurations.CycleAcceleration; - StayCurrentStage(); + AdvanceStageTime(); } } @@ -1731,16 +1740,10 @@ namespace RJW_Menstruation Implant(); } - if (pregnancy != null && Pawn.health.hediffSet.hediffs.Contains(pregnancy)) - { + if (Pregnancy != null) curStageTicks += TickInterval; - StayCurrentStageConst(Stage.Pregnant); - } else - { - if (pregnancy != null) pregnancy = null; GoNextStage(Stage.Recover); - } } protected virtual void RecoverAction() @@ -1762,22 +1765,18 @@ namespace RJW_Menstruation } else { - curStageTicks += TickInterval * Configurations.CycleAcceleration; - StayCurrentStage(); + AdvanceStageTime(); } } protected virtual void InfertileAction() { if (ShouldBeInfertile()) - { - StayCurrentStageConst(Stage.Infertile); - } + return; + else if (IsBreedingSeason()) + GoNextStage(Stage.Follicular); else - { - bool breedingSeason = IsBreedingSeason(); - GoNextStage(breedingSeason ? Stage.Follicular : Stage.Anestrus, breedingSeason); - } + GoNextStage(Stage.Anestrus); } protected virtual void AnestrusAction() @@ -1786,62 +1785,54 @@ namespace RJW_Menstruation { GoFollicularOrBleeding(); } - else - { - StayCurrentStage(); - } } protected virtual void ThoughtCumInside(Pawn cummer) { if (!xxx.is_human(Pawn) || !xxx.is_human(cummer)) return; - if ((cummer.HasQuirk(QuirkUtility.Quirks.Teratophile) != (Pawn.GetStatValue(StatDefOf.PawnBeauty) >= 0)) || - cummer.IsProPregnancy()) + MemoryThoughtHandler cummerMemories = cummer.needs.mood.thoughts.memories; + MemoryThoughtHandler pawnMemories = Pawn.needs.mood.thoughts.memories; + + if (cummer.IsProPregnancy(out Precept preceptm) || (cummer.IsTeratophile() != (Pawn.GetStatValue(StatDefOf.PawnBeauty) >= 0))) { - if (cummer.relations.OpinionOf(Pawn) <= -25) - { - cummer.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.HaterCameInsideM, Pawn); - } + if (cummer.relations.OpinionOf(Pawn) <= -5) + cummerMemories.TryGainMemory(VariousDefOf.HaterCameInsideM, Pawn); + else if (preceptm != null) + cummerMemories.TryGainMemory(VariousDefOf.CameInsideMIdeo, Pawn, preceptm); else - { - cummer.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.CameInsideM, Pawn); - } + cummerMemories.TryGainMemory(VariousDefOf.CameInsideM, Pawn); } if (IsDangerDay) { - if (Pawn.IsProPregnancy()) + if (Pawn.IsProPregnancy(out Precept preceptf)) { - Pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.CameInsideFFetish, cummer); - } - else if (Pawn.relations.OpinionOf(cummer) <= -5) - { - Pawn.needs.mood.thoughts.memories.RemoveMemoriesOfDefWhereOtherPawnIs(VariousDefOf.CameInsideF, cummer); - Pawn.needs.mood.thoughts.memories.RemoveMemoriesOfDefWhereOtherPawnIs(VariousDefOf.HaterCameInsideFEstrus, cummer); - Pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.HaterCameInsideF, cummer); - } - else if (Pawn.IsInEstrus() && Pawn.relations.OpinionOf(cummer) < RJWHookupSettings.MinimumRelationshipToHookup) - { - Pawn.needs.mood.thoughts.memories.RemoveMemoriesOfDefWhereOtherPawnIs(VariousDefOf.CameInsideF, cummer); - Pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.HaterCameInsideFEstrus, cummer); + if (preceptf != null) + { + if (Pawn.relations.OpinionOf(cummer) <= -5) + pawnMemories.TryGainMemory(VariousDefOf.HaterCameInsideFIdeo, cummer, preceptf); + else + pawnMemories.TryGainMemory(VariousDefOf.CameInsideFIdeo, cummer, preceptf); + } + 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.DirectRelationExists(PawnRelationDefOf.Spouse, cummer) && !Pawn.relations.DirectRelationExists(PawnRelationDefOf.Fiance, cummer)) { - if (Pawn.health.capacities.GetLevel(xxx.reproduction) < 0.50f) Pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.CameInsideFLowFert, cummer); - else Pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.CameInsideF, cummer); + if (Pawn.health.capacities.GetLevel(xxx.reproduction) < 0.50f) pawnMemories.TryGainMemory(VariousDefOf.CameInsideFLowFert, cummer); + else pawnMemories.TryGainMemory(VariousDefOf.CameInsideF, cummer); } } else { - if (Pawn.IsProPregnancy()) - { - Pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.CameInsideFFetishSafe, cummer); - } + if (Pawn.IsProPregnancy(out Precept _)) + pawnMemories.TryGainMemory(VariousDefOf.CameInsideFFetishSafe, cummer); else if (Pawn.relations.OpinionOf(cummer) <= -5) - { - Pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.HaterCameInsideFSafe, cummer); - } + pawnMemories.TryGainMemory(VariousDefOf.HaterCameInsideFSafe, cummer); } } @@ -1855,10 +1846,10 @@ namespace RJW_Menstruation TaleRecorder.RecordTale(VariousDefOf.TaleCameInside, new object[] { cummer, Pawn }); } - public void GoNextStage(Stage nextstage, bool calculateHours = true) + public void GoNextStage(Stage nextstage, int? stageTicks = null) { curStageTicks = 0; - if (calculateHours) currentIntervalTicks = PeriodRandomizer(nextstage); + currentIntervalTicks = stageTicks ?? PeriodRandomizer(nextstage); curStage = nextstage; } @@ -1867,16 +1858,6 @@ namespace RJW_Menstruation GoNextStage(Stage.Ovulatory); } - //stage can be interrupted in other reasons - protected void StayCurrentStage() - { - } - - //stage never changes - protected void StayCurrentStageConst(Stage curstage) - { - } - protected void GoFollicularOrBleeding() { if (Props.bleedingIntervalDays == 0 || noBleeding) @@ -1987,7 +1968,7 @@ namespace RJW_Menstruation public int EggsRestoredPerBiosculptor(float yearsWorth) { - return Math.Max(1, (int)((float)RaceCyclesPerYear() * yearsWorth)); + return Math.Max(1, (int)(RaceCyclesPerYear() * yearsWorth * AverageLitterSize())); } public void RestoreEggs(float yearsWorth) @@ -2006,7 +1987,7 @@ namespace RJW_Menstruation public Egg() { fertilized = false; - lifeSpanTicks = (int)(96 * GenDate.TicksPerHour * Configurations.EggLifespanMultiplier); + lifeSpanTicks = (int)(VariousDefOf.HumanVaginaCompProperties.eggLifespanDays * GenDate.TicksPerDay * Configurations.EggLifespanMultiplier); fertilizer = null; ageTicks = 0; } 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 017a6ed..eb344c3 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 @@ -73,10 +73,17 @@ namespace RJW_Menstruation protected override int TicksToNextStage() { - if (curStage == Stage.Anestrus && ticksToNextCycle > 0) return ticksToNextCycle / Configurations.CycleAcceleration; + if (curStage == Stage.Anestrus && ticksToNextCycle > 0) return ticksToNextCycle / Configurations.CycleAcceleration; else return base.TicksToNextStage(); } + protected override void LutealAction() + { + base.LutealAction(); + if (curStage == Stage.Follicular) + GoNextStage(Stage.Anestrus); + } + protected override void BleedingAction() { base.BleedingAction(); @@ -97,13 +104,11 @@ namespace RJW_Menstruation protected override void AnestrusAction() { - if (ticksToNextCycle <= 0) + if (ticksToNextCycle <= 0 && IsBreedingSeason()) { ticksToNextCycle = (int)(averageCycleIntervalTicks * (1 + Rand.Range(-cycleVariability, cycleVariability))); - if (IsBreedingSeason()) GoNextStage(Stage.Follicular); - return; + GoNextStage(Stage.Follicular); } - StayCurrentStage(); } public override void CopyCycleProperties(HediffComp_Menstruation original) 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 new file mode 100644 index 0000000..42b2aac --- /dev/null +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Pheromones.cs @@ -0,0 +1,103 @@ + + +using RimWorld; +using rjw; +using System; +using System.Collections.Generic; +using System.Linq; +using Verse; + +namespace RJW_Menstruation +{ + public class CompProperties_Pheromones : HediffCompProperties + { + public float daysToMaxSeverity; + public float range; + + public CompProperties_Pheromones() + { + compClass = typeof(HediffComp_Pheromones); + } + } + + public class HediffComp_Pheromones : HediffComp + { + public CompProperties_Pheromones Props => (CompProperties_Pheromones)props; + public const int emitInterval = GenTicks.TickRareInterval; + public const float emitRatio = (float)emitInterval / GenDate.TicksPerDay; + + public override void CompPostTick(ref float severityAdjustment) + { + try + { + if (!Configurations.EnablePheromones) return; + if (!Pawn.RaceProps.Humanlike && (!Configurations.EnableAnimalCycle || Configurations.AnimalPheromoneEffect <= 0.0f)) return; + if (!Pawn.IsHashIntervalTick(emitInterval)) return; + if (!Pawn.SpawnedOrAnyParentSpawned) return; + + foreach (Pawn pawn in AffectedPawns()) + ApplyEffectToPawn(pawn); + } + catch (Exception ex) + { + Log.Error($"Error when trying to emit pheromones from pawn {Pawn}: {ex}"); + } + } + + protected IEnumerable AffectedPawns() + { + Map mapHeld = Pawn.MapHeld; + if (mapHeld == null) yield break; + foreach (Pawn pawn in mapHeld.mapPawns.AllPawnsSpawned) + { + if (pawn == Pawn) continue; + if (!pawn.RaceProps.Humanlike) continue; + if (Pawn.PositionHeld.InHorDistOf(pawn.PositionHeld, Props.range) && Pawn.GetRoom() == pawn.GetRoom()) + yield return pawn; + } + } + + protected float GetEffectOnPawn(Pawn target) + { + if (target.Suspended || target.Dead) return 0.0f; + if (target.needs?.TryGetNeed(VariousDefOf.SexNeed) == null) return 0.0f; + if (!xxx.can_do_loving(target)) return 0.0f; + if (target.story?.traits.HasTrait(TraitDefOf.Asexual) ?? true) return 0.0f; + float penisEffect; + if (Genital_Helper.has_penis_fertile(target)) penisEffect = 1.0f; + else if (target.gender == Gender.Male) penisEffect = 0.25f; + else return 0.0f; + + BodyDef body = target.RaceProps.body; + if (!PawnCapacityUtility.BodyCanEverDoCapacity(body, PawnCapacityDefOf.Breathing)) return 0.0f; + HediffSet hediffs = target.health.hediffSet; + float breathingEffect = PawnCapacityUtility.CalculateCapacityLevel(hediffs, PawnCapacityDefOf.Breathing); + float noseEffect = 1.0f; + List noses = body.GetPartsWithDef(BodyPartDefOf.Nose); + if (noses.Any()) // if the body doesn't have a nose but still breathes, then let it be affected + noseEffect = noses.Average(nose => PawnCapacityUtility.CalculatePartEfficiency(hediffs, nose)); + + return penisEffect * breathingEffect * noseEffect; + } + + protected void ApplyEffectToPawn(Pawn target) + { + float intensity = GetEffectOnPawn(target); + if (intensity <= 0.0f) return; + Hediff pheromones = target.health.hediffSet.GetFirstHediffOfDef(VariousDefOf.Hediff_AffectedByPheromones); + float decay = VariousDefOf.Hediff_AffectedByPheromones.CompProps().severityPerDay; + float raiseSeverityPerDay = intensity / Props.daysToMaxSeverity - decay; // Desired increase plus enough to overcome pheromone decay + if (!Pawn.RaceProps.Humanlike) raiseSeverityPerDay *= Configurations.AnimalPheromoneEffect; + float amountToApply = emitRatio * raiseSeverityPerDay; + if (pheromones != null) + pheromones.Severity += amountToApply; + else + { + pheromones = HediffMaker.MakeHediff(VariousDefOf.Hediff_AffectedByPheromones, target); + pheromones.Severity = amountToApply; + target.health.AddHediff(pheromones); + } + return; + } + } +} 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 ce0efe9..79c13a9 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 @@ -179,7 +179,7 @@ namespace RJW_Menstruation public static IEnumerable Transpiler(IEnumerable instructions) { if (birtherThing < 0) throw new InvalidOperationException("Could not locate index of birtherThing"); - if (GeneratePawn == null || GeneratePawn.ReturnType != typeof(Pawn)) throw new InvalidOperationException("GeneratePawn not found"); + if (GeneratePawn?.ReturnType != typeof(Pawn)) throw new InvalidOperationException("GeneratePawn not found"); foreach (CodeInstruction instruction in instructions) { if (instruction.Calls(GeneratePawn)) @@ -233,7 +233,7 @@ namespace RJW_Menstruation new Type[] {typeof(OutcomeChance), typeof(float), typeof(Precept_Ritual), typeof(List), typeof(Pawn), typeof(Thing), typeof(Pawn), typeof(Pawn), typeof(LordJob_Ritual), typeof(RitualRoleAssignments)}); public static IEnumerable Transpiler(IEnumerable instructions) { - if (ApplyBirthOutcome == null || ApplyBirthOutcome.ReturnType != typeof(Thing)) throw new InvalidOperationException("ApplyBirthOutcome not found"); + if (ApplyBirthOutcome?.ReturnType != typeof(Thing)) throw new InvalidOperationException("ApplyBirthOutcome not found"); foreach (CodeInstruction instruction in instructions) { if (instruction.Calls(ApplyBirthOutcome)) @@ -283,8 +283,8 @@ namespace RJW_Menstruation new Type[] { typeof(OutcomeChance), typeof(float), typeof(Precept_Ritual), typeof(List), typeof(Pawn), typeof(Thing), typeof(Pawn), typeof(Pawn), typeof(LordJob_Ritual), typeof(RitualRoleAssignments) }); public static IEnumerable Transpiler(IEnumerable instructions) { - if (ApplyBirthOutcome == null || ApplyBirthOutcome.ReturnType != typeof(Thing)) throw new InvalidOperationException("ApplyBirthOutcome not found"); - foreach (var instruction in instructions) + if (ApplyBirthOutcome?.ReturnType != typeof(Thing)) throw new InvalidOperationException("ApplyBirthOutcome not found"); + foreach (CodeInstruction instruction in instructions) { if (instruction.Calls(ApplyBirthOutcome)) yield return CodeInstruction.Call(typeof(Ritual_ChildBirth_Apply_Patch), nameof(Ritual_ChildBirth_Apply_Patch.ApplyBirthLoop)); 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 c3cd7e4..75c796f 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Diagnostics.Eventing.Reader; using System.Linq; +using System.Text; using UnityEngine; using Verse; using Verse.AI; @@ -21,7 +22,7 @@ namespace RJW_Menstruation public static IEnumerable GetMenstruationComps(this Pawn pawn) { - List hedifflist = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn))?.FindAll(h => VariousDefOf.AllVaginas.Contains(h.def)); + List hedifflist = pawn.health.hediffSet.hediffs.FindAll(h => VariousDefOf.AllVaginas.Contains(h.def)); if (hedifflist == null) yield break; foreach (Hediff hediff in hedifflist) { @@ -62,17 +63,7 @@ namespace RJW_Menstruation public static HediffComp_Anus GetAnusComp(this Pawn pawn) { - List hedifflist = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn))?.FindAll((Hediff h) => h.def.defName.ToLower().Contains("anus")); - HediffComp_Anus result; - if (!hedifflist.NullOrEmpty()) - { - foreach (Hediff h in hedifflist) - { - result = h.TryGetComp(); - if (result != null) return result; - } - } - return null; + return pawn.health.hediffSet.hediffs.FirstOrDefault((Hediff h) => VariousDefOf.AllAnuses.Contains(h.def))?.TryGetComp(); } [Obsolete("This method is obsolete and can cause ambiguity. Use GetMenstruationCompFromVagina or GetMenstruationCompFromPregnancy instead.", true)] @@ -114,15 +105,17 @@ namespace RJW_Menstruation public static Texture2D GetPregnancyIcon(this HediffComp_Menstruation comp, Hediff hediff) { - if (hediff is Hediff_MechanoidPregnancy) - return ContentFinder.Get(("Womb/Mechanoid_Fluid"), true); - float gestationProgress = comp.StageProgress; ThingDef babydef; int babycount; HediffComp_PregeneratedBabies babiescomp = hediff?.TryGetComp(); - if (hediff is Hediff_BasePregnancy preg) + if (hediff is Hediff_MechanoidPregnancy) + { + babydef = VariousDefOf.Scyther; + babycount = 1; + } + else if (hediff is Hediff_BasePregnancy preg) { babydef = preg.babies?.FirstOrDefault()?.def ?? ThingDefOf.Human; babycount = preg.babies?.Count ?? 1; @@ -141,11 +134,6 @@ namespace RJW_Menstruation string fetustex = babydef.GetModExtension()?.fetusTexPath ?? "Fetus/Fetus_Default"; string icon; if (gestationProgress < 0.2f) icon = comp.WombTex + "_Implanted"; - else if (gestationProgress < 0.3f) - { - if (babydef.race?.FleshType == FleshTypeDefOf.Insectoid) icon = "Fetus/Insects/Insect_Early00"; - else icon = "Fetus/Fetus_Early00"; - } else if (gestationProgress < 0.4f) icon = fetustex + "00"; else if (gestationProgress < 0.5f) icon = fetustex + "01"; else if (gestationProgress < 0.6f) icon = fetustex + "02"; @@ -168,6 +156,12 @@ namespace RJW_Menstruation public static Texture2D GetCumIcon(this HediffComp_Menstruation comp) { + Pawn pawn = comp.Pawn; + + 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 + string icon = comp.WombTex; float cumpercent = comp.TotalCumPercent; if (cumpercent < 0.001f) return ContentFinder.Get("Womb/Empty", true); @@ -198,13 +192,39 @@ namespace RJW_Menstruation comp.Pawn.health.hediffSet.GetHediffs(ref hediffs); if (hediffs.NullOrEmpty()) return null; - string path = "Womb/Insect_Egged/"; - if (hediffs.Max(hediff => hediff.eggssize) > 0.3) // The threshold for "large egg" in the debug + string path = "Womb/Insect_Egged/Womb_Egged_"; + + float sumSize = hediffs.Sum(hediff => hediff.eggssize); + if (sumSize > 1.0f) { - if (hediffs.Count == 1) return ContentFinder.Get(path + "Womb_Egged_Large", true); - else return ContentFinder.Get(path + "Womb_Egged_ManyMixed", true); + path += "Stuffed_"; + if (sumSize < 1.0f) path += "00"; + else if (sumSize < 2.0f) path += "01"; + else if (sumSize < 2.5f) path += "02"; + else if (sumSize < 3.0f) path += "03"; + else path += "04"; } - return ContentFinder.Get(path + "Womb_Egged_" + hediffs.Count(), false) ?? ContentFinder.Get(path + "Womb_Egged_Many", true); + else + { + if(hediffs.Max(hediff => hediff.eggssize) > 0.3f) // The threshold for "large egg" in the debug + { + path += "L"; + if (hediffs.Count == 1) path += "00"; + else if (hediffs.Count == 2) path += "01"; + else path += "02"; + } + else + { + path += "S"; + if (hediffs.Count == 1) path += "00"; + else if (hediffs.Count == 2) path += "01"; + else if (hediffs.Count == 3) path += "02"; + else if (hediffs.Count == 4) path += "03"; + else path += "04"; + } + } + + return ContentFinder.Get(path); } public static Texture2D GetWombIcon(this HediffComp_Menstruation comp) { @@ -316,8 +336,8 @@ namespace RJW_Menstruation public static Texture2D GetAnalIcon(this Pawn pawn, bool drawOrigin = false) { - Hediff hediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_anusBPR(pawn)).FirstOrDefault(h => VariousDefOf.AllAnuses.Contains(h.def)) ?? - Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_anusBPR(pawn)).FirstOrDefault(h => h.def.defName.ToLower().Contains("anus")); + 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); string icon; @@ -373,6 +393,17 @@ namespace RJW_Menstruation else return variability; } + public static bool ShouldCycle(this Pawn pawn) + { + if (!Configurations.EnableAnimalCycle && pawn.IsAnimal()) return false; + if (pawn.GetComp() != null) return false; + if (pawn.RaceHasOviPregnancy()) return false; + if (ModsConfig.BiotechActive && pawn.genes != null && + pawn.genes.GenesListForReading.Select(gene => gene.def).Intersect(VariousDefOf.EggLayerGenes).Any()) return false; + + return true; + } + public static bool IsInEstrus(this Pawn pawn, bool visible = true) { if (pawn.Dead) return false; @@ -407,20 +438,21 @@ namespace RJW_Menstruation return false; } - public static bool IsProPregnancy(this Pawn pawn) + public static bool IsProPregnancy(this Pawn pawn, out Precept precept) { - if (pawn.HasQuirk(QuirkUtility.Quirks.Breeder) || - pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish)) - return true; + precept = null; Ideo ideo = pawn.Ideo; - if (ideo == null || VariousDefOf.Pregnancy_Elevated == null) return false; - if (ideo.HasPrecept(VariousDefOf.Pregnancy_Elevated) || - ideo.HasPrecept(VariousDefOf.Pregnancy_Holy) || - ideo.HasPrecept(VariousDefOf.Pregnancy_Required)) - return true; + if (ideo != null) + { + precept = ideo.GetPrecept(VariousDefOf.Pregnancy_Required) ?? + ideo.GetPrecept(VariousDefOf.Pregnancy_Holy) ?? + ideo.GetPrecept(VariousDefOf.Pregnancy_Elevated); + } + if (precept != null) return true; - return false; + else return pawn.IsBreeder() || + pawn.HasImpregnationFetish(); } public static float DamagePants(this Pawn pawn, float fluidAmount) 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 0b5d0c5..61ce541 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Hediff_MultiplePregnancy.cs @@ -23,13 +23,14 @@ namespace RJW_Menstruation { if (is_discovered || !xxx.is_human(pawn) || - pawn.HasQuirk(QuirkUtility.Quirks.Breeder) || (pawn.Ideo?.HasPrecept(VariousDefOf.Pregnancy_Required) ?? false) || + pawn.IsBreeder() || (pawn.Ideo?.HasPrecept(VariousDefOf.Pregnancy_Required) ?? false) || (pawn.relations?.DirectRelations?.Find(x => x.def.Equals(PawnRelationDefOf.Spouse) || x.def.Equals(PawnRelationDefOf.Fiance))) != null) return; - if (pawn.IsProPregnancy() || pawn.relations?.DirectRelations?.Find(x => x.def.Equals(PawnRelationDefOf.Lover)) != null) + if (pawn.IsProPregnancy(out Precept precept) || pawn.relations?.DirectRelations?.Find(x => x.def.Equals(PawnRelationDefOf.Lover)) != null) { - pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.UnwantedPregnancyMild); + if (precept != null) + pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.UnwantedPregnancyMild); } else { 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 4bd3cef..eb8777a 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 @@ -155,7 +155,7 @@ namespace RJW_Menstruation public static IEnumerable Transpiler(IEnumerable instructions) { - if (GetPregnancyHediff == null || GetPregnancyHediff.ReturnType != typeof(Hediff)) throw new InvalidOperationException("GetPregnancyHediff not found"); + if (GetPregnancyHediff?.ReturnType != typeof(Hediff)) throw new InvalidOperationException("GetPregnancyHediff not found"); if (Get_Attitude == null || Nullable.GetUnderlyingType(Get_Attitude.ReturnType) != typeof(PregnancyAttitude)) throw new InvalidOperationException("get_Attitude not found"); foreach (CodeInstruction instruction in instructions) { @@ -192,23 +192,6 @@ namespace RJW_Menstruation } } - [HarmonyPatch(typeof(Pawn_GeneTracker), "AddGene", new Type[] { typeof(Gene), typeof(bool) })] - public class AddGene_Patch - { - public static bool Prefix(ref Gene __result, Gene gene, Pawn ___pawn) - { - if (!VariousDefOf.WombGenes.Contains(gene.def)) return true; - bool keepGene; - if (PawnGenerator.IsBeingGenerated(___pawn)) - // During pawn generation, the vagina hediff doesn't exist yet, so use gender to decide instead - // Not the most accurate, but close enough - keepGene = ___pawn.gender == Gender.Female; - else keepGene = ___pawn.GetMenstruationComps().Any(); - if (!keepGene) __result = null; - return keepGene; - } - } - [HarmonyPatch(typeof(Pawn_GeneTracker), "Notify_GenesChanged")] public class Notify_GenesChanged_Patch { @@ -219,6 +202,17 @@ namespace RJW_Menstruation } } + [HarmonyPatch(typeof(StatPart_FertilityByGenderAge), "AgeFactor")] + public class AgeFactor_Patch + { + public static void Postfix(ref float __result, Pawn pawn) + { + if (__result <= 0.0f) return; + if (pawn.GetMenstruationComps().Any(comp => comp.CalculatingOvulationChance)) + __result = 1.0f; + } + } + //[HarmonyPatch(typeof(ChildcareUtility), nameof(ChildcareUtility.SuckleFromLactatingPawn))] //public class GreedyConsume_Patch //{ 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 86ef4d9..b0ab1a3 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 @@ -43,6 +43,8 @@ namespace RJW_Menstruation private static Gizmo CreateGizmo_WombStatus(Pawn pawn, HediffComp_Menstruation comp) { + if (!comp.loaded) + comp.Initialize(); Texture2D icon, icon_overlay; StringBuilder description = new StringBuilder(); if (Configurations.Debug) 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 616f591..98e5997 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,5 +1,6 @@ using HarmonyLib; using RimWorld; +using rjw; using System; using System.Collections.Generic; using System.Linq; @@ -36,10 +37,6 @@ namespace RJW_Menstruation if (t.Pawn == pawn && pawn.HasMenstruationComp()) opts.AddDistinct(MakeSelfMenu(pawn, t)); break; } - - - - } public static FloatMenuOption MakeSelfMenu(Pawn pawn, LocalTargetInfo target) @@ -53,60 +50,28 @@ namespace RJW_Menstruation } } - //[HarmonyPatch(typeof(HealthCardUtility), "DrawHediffListing")] - //public class DrawHediffListing_Patch - //{ - // public const float buttonWidth = 80f; - // public const float buttonHeight = 20f; - // - // public static void Postfix(Rect rect, Pawn pawn, bool showBloodLoss) - // { - // if (Configurations.EnableButtonInHT && pawn.HasMenstruationComp()) - // { - // Rect buttonrect = new Rect(rect.xMax - buttonWidth, rect.yMax - buttonHeight, buttonWidth, buttonHeight); - // if (Widgets.ButtonText(buttonrect, "Status")) - // { - // Dialog_WombStatus.ToggleWindow(pawn,pawn.GetMenstruationComp()); - // } - // } - // - // - // } - //} - - [HarmonyPatch(typeof(HealthCardUtility), "DrawHediffRow")] - public class DrawHediffRow_Patch + [HarmonyPatch(typeof(HealthCardUtility), "DrawOverviewTab")] + public class DrawOverviewTab_Patch { public const float buttonWidth = 50f; public const float buttonHeight = 20f; - private static HediffComp_Menstruation GetFirstMenstruation(IEnumerable diffs) + public static void Prefix(Rect leftRect, Pawn pawn, float curY) { - foreach (Hediff diff in diffs) + if (Configurations.EnableButtonInHT && pawn.ShowStatus() && pawn.ShouldCycle()) { - HediffComp_Menstruation comp = diff.GetMenstruationCompFromVagina(); - if (comp != null) return comp; - } - return null; - } - - public static void Prefix(Rect rect, Pawn pawn, IEnumerable diffs, ref float curY) - { - if (Configurations.EnableButtonInHT && pawn.ShowStatus()) - { - HediffComp_Menstruation comp = GetFirstMenstruation(diffs); + HediffComp_Menstruation comp = pawn.GetFirstMenstruationComp(); if (comp != null) { - Rect buttonrect = new Rect((rect.xMax) / 2 - 5f, curY + 2f, buttonWidth, buttonHeight); - if (Widgets.ButtonText(buttonrect, Translations.Button_HealthTab)) + Text.Font = GameFont.Tiny; + Rect buttonRect = new Rect(leftRect.xMax - buttonWidth - 8f, curY + 4f, buttonWidth, buttonHeight); + if (Widgets.ButtonText(buttonRect, Translations.Button_HealthTab)) { Dialog_WombStatus.ToggleWindow(pawn, comp); } } } - } - } [HarmonyPatch(typeof(CompBiosculpterPod), nameof(CompBiosculpterPod.CannotUseNowPawnCycleReason), new Type[] { typeof(Pawn), typeof(Pawn), typeof(CompBiosculpterPod_Cycle), typeof(bool) })] @@ -120,4 +85,28 @@ namespace RJW_Menstruation __result = Translations.CannotNoWomb; } } + + // Doesn't cover everything, but at least it'll get the auto equip + [HarmonyPatch(typeof(Apparel), nameof(Apparel.PawnCanWear))] + public class PawnCanWear_Patch + { + public static void Postfix(ref bool __result, Apparel __instance, Pawn pawn) + { + if (__result && __instance is Absorber) + { + __result = pawn.ShouldCycle() && pawn.GetMenstruationComps().Any(); + } + } + } + + // Might cause issues when it comes to caravans + //[HarmonyPatch(typeof(JobGiver_OptimizeApparel), nameof(JobGiver_OptimizeApparel.ApparelScoreRaw))] + //public class ApparelScoreRaw_Patch + //{ + // public static void Postfix(ref float __result, Pawn pawn, Apparel ap) + // { + // if (__result > 0f && ap is Absorber && !pawn.GetMenstruationComps().Any(comp => comp.TotalCum > 0)) + // __result = -10f; + // } + //} } diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs index 57a6b9d..eb776e3 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs @@ -24,14 +24,14 @@ namespace RJW_Menstruation if (sextype != xxx.rjwSextype.Vaginal && sextype != xxx.rjwSextype.DoublePenetration) return true; - if (partner.IsAnimal() && !Configurations.EnableAnimalCycle) return true; + if (!partner.ShouldCycle()) return true; if (!InteractionCanCausePregnancy(props)) return false; List pawnparts = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn)); HediffComp_Menstruation comp; - if (pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish) || partner.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish) || partner.IsInEstrus()) + if (pawn.HasImpregnationFetish() || partner.HasImpregnationFetish() || partner.IsInEstrus()) comp = partner.GetFertileMenstruationComp(); else comp = partner.GetRandomMenstruationComp(); if (comp == null) return true; @@ -100,9 +100,9 @@ namespace RJW_Menstruation { public static bool Prefix(Pawn pawn, Pawn partner) // partner has vagina { - if (partner.IsAnimal() && !Configurations.EnableAnimalCycle) return true; + if (!partner.ShouldCycle()) return true; HediffComp_Menstruation comp; - if (pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish) || partner.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish) || partner.IsInEstrus()) + if (pawn.HasImpregnationFetish() || partner.HasImpregnationFetish() || partner.IsInEstrus()) comp = partner.GetFertileMenstruationComp(); else comp = partner.GetRandomMenstruationComp(); if (comp == null) @@ -125,14 +125,14 @@ namespace RJW_Menstruation { private static bool PregnancyBlocksImpregnation(this Pawn pawn, bool _) { - if (!Configurations.EnableAnimalCycle && pawn.IsAnimal()) return pawn.IsPregnant(); + if (!pawn.ShouldCycle()) return pawn.IsPregnant(); 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) }); public static IEnumerable Transpiler(IEnumerable instructions) { - if (IsPregnant == null || IsPregnant.ReturnType != typeof(bool)) throw new System.InvalidOperationException("IsPregnant not found"); + if (IsPregnant?.ReturnType != typeof(bool)) throw new System.InvalidOperationException("IsPregnant not found"); foreach (CodeInstruction instruction in instructions) { if (instruction.Calls(IsPregnant)) @@ -179,7 +179,7 @@ namespace RJW_Menstruation { // Awkward, but it'll have to do Pawn pawn = props.pawn; - if (__result == 0 || !pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish) || !props.hasPartner()) return; + if (__result == 0 || !pawn.HasImpregnationFetish() || !props.hasPartner()) return; // Check if the existing code would have added the count Pawn partner = props.partner; @@ -238,7 +238,7 @@ namespace RJW_Menstruation private static readonly FieldInfo MinimumFuckabilityToHookup = AccessTools.Field(typeof(RJWHookupSettings), nameof(RJWHookupSettings.MinimumFuckabilityToHookup)); public static IEnumerable Transpiler(IEnumerable instructions) { - if (MinimumFuckabilityToHookup == null || MinimumFuckabilityToHookup.FieldType != typeof(float)) throw new System.InvalidOperationException("MinimumFuckabilityToHookup not found"); + if (MinimumFuckabilityToHookup?.FieldType != typeof(float)) throw new System.InvalidOperationException("MinimumFuckabilityToHookup not found"); bool first_fuckability = true; foreach (CodeInstruction instruction in instructions) { @@ -274,8 +274,8 @@ namespace RJW_Menstruation private static readonly FieldInfo MinimumRelationshipToHookup = AccessTools.Field(typeof(RJWHookupSettings), nameof(RJWHookupSettings.MinimumRelationshipToHookup)); public static IEnumerable Transpiler(IEnumerable instructions) { - if (MinimumAttractivenessToHookup == null || MinimumAttractivenessToHookup.FieldType != typeof(float)) throw new System.InvalidOperationException("MinimumAttractivenessToHookup not found"); - if (MinimumRelationshipToHookup == null || MinimumRelationshipToHookup.FieldType != typeof(float)) throw new System.InvalidOperationException("MinimumRelationshipToHookup not found"); + if (MinimumAttractivenessToHookup?.FieldType != typeof(float)) throw new System.InvalidOperationException("MinimumAttractivenessToHookup not found"); + if (MinimumRelationshipToHookup?.FieldType != typeof(float)) throw new System.InvalidOperationException("MinimumRelationshipToHookup not found"); LocalBuilder pawn_index = null; // Like in the last one, we switch the arguments around for the second load bool first_attractiveness = true; @@ -342,10 +342,12 @@ namespace RJW_Menstruation { if (!pawn.IsHashIntervalTick(__instance.ticks_between_thrusts)) return; xxx.rjwSextype sextype = __instance.Sexprops.sexType; - if (!(target is Pawn partner) || pawn == partner) return; + if (!(target is Pawn partner)) return; if (sextype != xxx.rjwSextype.Vaginal && sextype != xxx.rjwSextype.DoublePenetration) return; if (__instance.Sexprops.usedCondom) return; + if (AndroidsCompatibility.IsAndroid(pawn)) return; if (!Impregnate_Patch.InteractionCanCausePregnancy(__instance.Sexprops)) return; + if (!partner.ShouldCycle()) return; // Archotech penises have more control. Or something. CompHediffBodyPart penisComp = pawn.GetGenitalsList()?.Find(genital => (genital as Hediff_PartBaseNatural)?.def.defName.ToLower().Contains("penis") ?? false)?.TryGetComp(); @@ -372,26 +374,14 @@ namespace RJW_Menstruation } } - [HarmonyPatch(typeof(PawnCapacityWorker_Fertility), nameof(PawnCapacityWorker_Fertility.CalculateCapacityLevel))] - public static class PawnCapacityWorker_Fertility_Patch + [HarmonyPatch(typeof(PawnCapacityWorker_Fertility), "CalculateAgeImpact")] + public static class PawnCapacityWorker_Fertility_Age_Patch { - private static float GetFertilityStatOrOne(Thing thing, StatDef stat, bool applyPostProcess, int cacheStaleAfterTicks) + public static void Postfix(ref float __result, Pawn pawn) { - 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 Transpiler(IEnumerable 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; - } + if (__result <= 0.0f) return; + if (pawn.GetMenstruationComps().Any(comp => comp.CalculatingOvulationChance)) + __result = 1.0f; } } } diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/QuirkUtility.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/QuirkUtility.cs index c8c2352..409d3d7 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/QuirkUtility.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/QuirkUtility.cs @@ -6,14 +6,14 @@ namespace RJW_Menstruation public static class QuirkUtility { // All quirks used in Menstruation - public enum Quirks + private enum Quirks { Breeder, ImpregnationFetish, Messy, Teratophile, } - public static bool HasQuirk(this Pawn pawn, Quirks quirk) + private static bool HasQuirk(Pawn pawn, Quirks quirk) { switch (quirk) { @@ -29,5 +29,9 @@ namespace RJW_Menstruation return false; } } + public static bool IsBreeder(this Pawn pawn) => HasQuirk(pawn, Quirks.Breeder); + public static bool HasImpregnationFetish(this Pawn pawn) => HasQuirk(pawn, Quirks.ImpregnationFetish); + public static bool IsMessy(this Pawn pawn) => HasQuirk(pawn, Quirks.Messy); + public static bool IsTeratophile(this Pawn pawn) => HasQuirk(pawn, Quirks.Teratophile); } } 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 f2f1834..0c4aa45 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/RJW_Menstruation.csproj @@ -69,6 +69,7 @@ + diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs index 4c9c591..2e3d6be 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/TextureCache.cs @@ -89,9 +89,6 @@ namespace RJW_Menstruation } public static readonly Texture2D FertChanceTex = SolidColorMaterials.NewSolidColorTexture(new Color(1f, 1f, 1f, 0.4f)); - public static readonly Texture2D GatherCum_Bucket = ContentFinder.Get("UI/Icon/ToBucket"); - public static readonly Texture2D GatherCum_Pussy = ContentFinder.Get("UI/Icon/ToPussy"); - private static Texture2D milktexturecache = SolidColorMaterials.NewSolidColorTexture(0.992f, 1.0f, 0.960f, 1.0f); private static Texture2D ovulatorytexturecache = SolidColorMaterials.NewSolidColorTexture(0.686f, 0.062f, 0.698f, 1.0f); private static Texture2D bleedingtexturecache = SolidColorMaterials.NewSolidColorTexture(0.415f, 0.0f, 0.003f, 1.0f); diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Things.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Things.cs index 5e4dd91..cfee336 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Things.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Things.cs @@ -1,6 +1,7 @@ using RimWorld; using rjw; using System.Collections.Generic; +using System.Text; using System.Xml; using UnityEngine; using Verse; @@ -186,6 +187,7 @@ namespace RJW_Menstruation } public class AbsorberModExtension : DefModExtension { + public float passiveAbsorptionPerHour = 0.1f; public bool leakAfterDirty = false; public bool effectsAfterDirty = false; public ThingDef dirtyDef = null; @@ -198,7 +200,7 @@ namespace RJW_Menstruation public float absorbedfluids = 0; public bool dirty = false; public int wearTicks = 0; - protected virtual float PassiveAbsorptionPerHour => 0.1f; + public virtual float PassiveAbsorptionPerHour => def.GetModExtension().passiveAbsorptionPerHour; public virtual bool LeakAfterDirty => def.GetModExtension().leakAfterDirty; public virtual bool EffectAfterDirty => def.GetModExtension().effectsAfterDirty; public virtual ThingDef DirtyDef => def.GetModExtension().dirtyDef; @@ -211,9 +213,25 @@ namespace RJW_Menstruation public virtual void WearEffect(int tickInterval) { absorbedfluids += PassiveAbsorptionPerHour * tickInterval / GenDate.TicksPerHour; + CheckDirty(); if (dirty) wearTicks += tickInterval; } + public void CheckDirty() + { + if (absorbedfluids > this.GetStatValue(VariousDefOf.MaxAbsorbable) && !(Wearer?.apparel?.IsLocked(this) ?? false)) + { + def = DirtyDef; + dirty = true; + OutfitForcedHandler forcedHandler = Wearer.outfits?.forcedHandler; + if (forcedHandler?.IsForced(this) ?? false) + forcedHandler.SetForced(this, false); + if (!def.equippedStatOffsets.NullOrEmpty()) + Wearer.health.capacities.Notify_CapacityLevelsDirty(); + Wearer.apparel.Notify_ApparelChanged(); + } + } + public override Color DrawColorTwo => fluidColor; public override void ExposeData() @@ -231,11 +249,26 @@ namespace RJW_Menstruation Scribe_Values.Look(ref fluidColor, "fluidColor", Color.white); } + public override string DescriptionDetailed + { + get + { + StringBuilder text = new StringBuilder(base.DescriptionDetailed); + text.AppendLine(); + text.Append(Translations.Description_Absorbed); + text.Append(": "); + text.Append(absorbedfluids.ToStringDecimalIfSmall()); + text.Append("/"); + text.Append(this.GetStatValue(VariousDefOf.MaxAbsorbable).ToStringDecimalIfSmall()); + text.Append("ml"); + + return text.ToString(); + } + } } public class Absorber_Tampon : Absorber { - protected override float PassiveAbsorptionPerHour => 0.5f; public override void DirtyEffect(int tickInterval) { diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Translations.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Translations.cs index dd2982f..6c511cc 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Translations.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Translations.cs @@ -44,6 +44,7 @@ namespace RJW_Menstruation public static readonly string Dialog_WombInfo08 = "Dialog_WombInfo08".Translate(); public static readonly string Dialog_WombInfo09 = "Dialog_WombInfo09".Translate(); public static readonly string Dialog_WombInfo10 = "Dialog_WombInfo10".Translate(); + public static readonly string Description_Absorbed = "Description_Absorbed".Translate(); public static readonly string Option1_Label_1 = "Option1_Label_1".Translate(); @@ -79,6 +80,10 @@ namespace RJW_Menstruation public static readonly string Option11_Desc_4 = "Option11_Desc_4".Translate(); public static readonly string Option12_Label = "Option12_Label".Translate(); public static readonly string Option12_Desc = "Option12_Desc".Translate(); + public static readonly string Option_EnablePheromones_Label = "Option_EnablePheromones_Label".Translate(); + public static readonly string Option_EnablePheromones_Desc = "Option_EnablePheromones_Desc".Translate(); + public static readonly string Option_AnimalPheromoneEffect_Label = "Option_AnimalPheromoneEffect_Label".Translate(); + public static readonly string Option_AnimalPheromoneEffect_Desc = "Option_AnimalPheromoneEffect_Desc".Translate(); public static readonly string Option13_Label = "Option13_Label".Translate(); public static readonly string Option13_Desc = "Option13_Desc".Translate(); public static readonly string Option14_Label = "Option14_Label".Translate(); diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Utility.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Utility.cs index db91411..ae2cb4a 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Utility.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Utility.cs @@ -86,7 +86,7 @@ namespace RJW_Menstruation { res = 0.0f; } - if (pawn.HasQuirk(QuirkUtility.Quirks.Messy)) res *= Rand.Range(4.0f, 8.0f); + if (pawn.IsMessy()) res *= Rand.Range(4.0f, 8.0f); return res; } @@ -95,16 +95,7 @@ namespace RJW_Menstruation public static HediffComp_Breast GetBreastComp(this Pawn pawn) { - List hedifflist = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_breastsBPR(pawn))?.FindAll(h => VariousDefOf.AllBreasts.Contains(h.def)); - if (hedifflist.NullOrEmpty()) hedifflist = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_uddersBPR(pawn))?.FindAll(h => VariousDefOf.AllBreasts.Contains(h.def)); - if (hedifflist.NullOrEmpty()) return null; - HediffComp_Breast result; - foreach (Hediff h in hedifflist) - { - result = h.TryGetComp(); - if (result != null) return result; - } - return null; + return pawn.health.hediffSet.hediffs.FirstOrDefault((Hediff h) => VariousDefOf.AllBreasts.Contains(h.def))?.TryGetComp(); } public static HediffComp_Breast GetBreastComp(this Hediff hediff) @@ -192,8 +183,7 @@ namespace RJW_Menstruation public static void DrawBreastIcon(this Pawn pawn, Rect rect) { - Hediff hediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_breastsBPR(pawn)).FirstOrDefault(h => VariousDefOf.AllBreasts.Contains(h.def)) ?? - Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_uddersBPR(pawn)).FirstOrDefault(h => VariousDefOf.AllBreasts.Contains(h.def)); + Hediff hediff = pawn.health.hediffSet.hediffs.FirstOrDefault(h => VariousDefOf.AllBreasts.Contains(h.def)); Texture2D breast, nipple, areola; if (hediff != null) { @@ -351,20 +341,19 @@ namespace RJW_Menstruation public static string GetVaginaLabel(this Pawn pawn) { - Hediff hediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn)).Find(h => VariousDefOf.AllVaginas.Contains(h.def)); + Hediff hediff = pawn.health.hediffSet.hediffs.Find(h => VariousDefOf.AllVaginas.Contains(h.def)); return hediff.LabelBase.CapitalizeFirst() + "\n(" + hediff.LabelInBrackets + ")" + "\n" + xxx.CountOfSex.LabelCap.CapitalizeFirst() + ": " + pawn.records.GetAsInt(xxx.CountOfSex); } public static string GetAnusLabel(this Pawn pawn) { - Hediff hediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_anusBPR(pawn)).FirstOrDefault(h => VariousDefOf.AllAnuses.Contains(h.def)) ?? + Hediff hediff = pawn.health.hediffSet.hediffs.FirstOrDefault(h => VariousDefOf.AllAnuses.Contains(h.def)) ?? Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_anusBPR(pawn)).FirstOrDefault(h => h.def.defName.ToLower().Contains("anus")); if (hediff != null) return hediff.LabelBase.CapitalizeFirst() + "\n(" + hediff.LabelInBrackets + ")"; else return ""; } public static string GetBreastLabel(this Pawn pawn) { - Hediff hediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_breastsBPR(pawn)).FirstOrDefault(h => VariousDefOf.AllBreasts.Contains(h.def)) ?? - Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_uddersBPR(pawn)).FirstOrDefault(h => VariousDefOf.AllBreasts.Contains(h.def)); + Hediff hediff = pawn.health.hediffSet.hediffs.FirstOrDefault(h => VariousDefOf.AllBreasts.Contains(h.def)); if (hediff != null) return hediff.LabelBase.CapitalizeFirst() + "\n(" + hediff.LabelInBrackets + ")"; else return ""; } @@ -416,7 +405,7 @@ namespace RJW_Menstruation { Pawn res = pawn.GetFather(); if (res != null) return res; - else res = pawn.relations?.GetFirstDirectRelationPawn(PawnRelationDefOf.Parent, x => x != mother) ?? null; + else res = pawn.relations?.GetFirstDirectRelationPawn(PawnRelationDefOf.Parent, x => x != mother); return res; } @@ -448,7 +437,7 @@ namespace RJW_Menstruation { if (!Configurations.EnableWombIcon) return false; if (pawn.Drafted && !Configurations.EnableDraftedIcon) return false; - if (pawn.IsAnimal() && !Configurations.EnableAnimalCycle) return false; + if (!pawn.ShouldCycle()) return false; return true; } diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs index 6c5e143..e3f8f66 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/VariousDefOf.cs @@ -1,7 +1,5 @@ using RimWorld; using rjw; -using rjw.Modules.Interactions.Rules.PartKindUsageRules.Implementation; -using System; using System.Collections.Generic; using System.Linq; using Verse; @@ -16,10 +14,12 @@ namespace RJW_Menstruation public static readonly ThingDef Tampon = DefDatabase.GetNamed("Absorber_Tampon"); public static readonly ThingDef Tampon_Dirty = DefDatabase.GetNamed("Absorber_Tampon_Dirty"); public static readonly ThingDef FilthMixture = DefDatabase.GetNamed("FilthMixture"); + public static readonly ThingDef Scyther = DefDatabase.GetNamed("Mech_Scyther"); public static readonly HediffDef RJW_IUD = DefDatabase.GetNamed("RJW_IUD"); public static readonly HediffDef Hediff_MenstrualCramp = DefDatabase.GetNamed("Hediff_MenstrualCramp"); public static readonly HediffDef Hediff_Estrus = DefDatabase.GetNamed("Hediff_Estrus"); public static readonly HediffDef Hediff_Estrus_Concealed = DefDatabase.GetNamed("Hediff_Estrus_Concealed"); + public static readonly HediffDef Hediff_AffectedByPheromones = DefDatabase.GetNamed("Hediff_AffectedByPheromones"); public static readonly HediffDef Hediff_ASA = DefDatabase.GetNamed("Hediff_ASA"); public static readonly StatDef MaxAbsorbable = DefDatabase.GetNamed("MaxAbsorbable"); public static readonly NeedDef SexNeed = DefDatabase.GetNamed("Sex"); @@ -39,7 +39,8 @@ namespace RJW_Menstruation public static readonly ThoughtDef UnwantedPregnancyMild = DefDatabase.GetNamed("UnwantedPregnancyMild"); public static readonly ThoughtDef TookContraceptivePill = DefDatabase.GetNamed("TookContraceptivePill"); public static readonly ThoughtDef HateTookContraceptivePill = DefDatabase.GetNamed("HateTookContraceptivePill"); - public static readonly CompProperties_Menstruation HumanVaginaCompProperties = (CompProperties_Menstruation)Genital_Helper.average_vagina.comps.FirstOrDefault(x => x is CompProperties_Menstruation); + public static readonly ThoughtDef EggRestorationReceived = DefDatabase.GetNamed("EggRestorationReceived"); + public static readonly CompProperties_Menstruation HumanVaginaCompProperties = Genital_Helper.average_vagina.CompProps(); public static readonly KeyBindingDef OpenStatusWindowKey = DefDatabase.GetNamed("OpenStatusWindow"); public static readonly RecordDef AmountofCreampied = DefDatabase.GetNamed("AmountofCreampied"); public static readonly RecordDef AmountofFertilizedEggs = DefDatabase.GetNamed("AmountofFertilizedEggs"); @@ -53,21 +54,12 @@ namespace RJW_Menstruation public static readonly GeneDef QuadOvulation = DefDatabase.GetNamed("Menstruation_QuadOvulation"); public static readonly GeneDef NoBleeding = DefDatabase.GetNamed("Menstruation_NoBleeding"); - public static readonly HashSet WombGenes = new HashSet() { - ShortEggLifetime, - DoubleEggLifetime, - QuadEggLifetime, - NeverEstrus, - FullEstrus, - DoubleOvulation, - QuadOvulation, - NoBleeding }; - private static List allraces = null; private static List allkinds = null; private static HashSet allvaginas = null; private static HashSet allanuses = null; private static HashSet allbreasts = null; + private static HashSet egglayergenes = null; public static List AllRaces { @@ -160,6 +152,22 @@ namespace RJW_Menstruation return allbreasts; } } + public static HashSet EggLayerGenes + { + 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); + + return egglayergenes; + } + } // Defs from Milkable Colonists public static readonly HediffDef Hediff_Lactating_Drug = DefDatabase.GetNamedSilentFail("Lactating_Drug"); @@ -172,5 +180,11 @@ namespace RJW_Menstruation public static readonly PreceptDef Pregnancy_Elevated = DefDatabase.GetNamedSilentFail("Pregnancy_Elevated"); public static readonly PreceptDef Pregnancy_Holy = DefDatabase.GetNamedSilentFail("Pregnancy_Holy"); public static readonly PreceptDef Pregnancy_Required = DefDatabase.GetNamedSilentFail("Pregnancy_Required"); + // Related thoughts + public static readonly ThoughtDef CameInsideMIdeo = DefDatabase.GetNamed("CameInsideMIdeo"); + public static readonly ThoughtDef CameInsideFIdeo = DefDatabase.GetNamed("CameInsideFIdeo"); + public static readonly ThoughtDef HaterCameInsideFIdeo = DefDatabase.GetNamed("HaterCameInsideFIdeo"); + public static readonly ThoughtDef HateTookContraceptivePillIdeo = DefDatabase.GetNamed("HateTookContraceptivePillIdeo"); } + } diff --git a/About/Manifest.xml b/About/Manifest.xml index 3299391..6b4c770 100644 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,7 +1,7 @@ RJW Menstruation - 1.0.9.0 + 1.0.9.3 diff --git a/LoadFolders.xml b/LoadFolders.xml index 1707748..f711d5c 100644 --- a/LoadFolders.xml +++ b/LoadFolders.xml @@ -14,6 +14,5 @@
  • 1.4
  • 1.4/RJW Menstruation Race Support
  • -
    \ No newline at end of file diff --git a/changelogs.txt b/changelogs.txt index 97ae1c8..e6f1bf5 100644 --- a/changelogs.txt +++ b/changelogs.txt @@ -1,3 +1,36 @@ +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. + - Egglaying animals no longer have a menstrual cycle. + - Fix bug preventing absorbers from becoming dirty. + +Version 1.0.9.2 + - Updated Traditional Chinese translation by Hydrogen. + - Fixed the no bleeding gene having positive metabolic efficiency instead of negative. + - Fixed ovulation chance not accounting for genes or precepts. + - Better handle wombs that are not in the genitals body part. + - Handle errors more gracefully when starting a pregnancy. + - Fix implanting multiple eggs in an animal when configured to use Biotech pregnancies. + - An equipped tampon or pad will now show how much fluid it has absorbed in its tooltip. + - Passive absorption will now make a tampon or pad dirty after enough time, even if no fluid was added. + - It will take a cloth tampon about 2 days to become dirty passively. A cloth pad will take about 10 days. + - An absorber that was force worn will no longer be forced once it becomes dirty. + - Pawns without a menstrual cycle will no longer equip absorbers. + - Egglaying races no longer have a menstrual cycle, regardless of vagina type. + - Pawns with the egglaying genes from Alpha Genes, VE Saurids, or Phytokin no longer have a menstrual cycle. + - The womb status button will now appear in a pawn's health tab when using Compact Hediffs, with thanks to Fern. + - Tampons and pads are now allowed by default in the worker, soldier, and slave starting outfits. + +Version 1.0.9.1 + - Japanese translation for most text by Lokuzt. + - New womb, cum, and fetus graphics by Euldrop. + - Add new ideology-related thoughts with the sexperience-ideology mod. + - New pheromone system: Pawns in visible estrus will increase the sex drive of nearby males. Can be disabled in the options. + - Using the egg restoration biosculptor cycle will give a small mood buff. + - Fix some errors related to precum. + - Periodic ovulators that don't bleed will properly enter anestrus after their luteal stage. + - Climacteric/menopausal pawns will have their sex need slow properly when the womb's tick rate is non-default. + Version 1.0.9.0 - Fix errors when opening the womb dialog of some low fertility pawns. - Updated Traditional Chinese translation by Hydrogen.