mirror of
https://gitgud.io/lutepickle/rjw_menstruation.git
synced 2024-08-14 22:46:52 +00:00
Compare commits
45 commits
46a6f6fe16
...
59ab3739dc
Author | SHA1 | Date | |
---|---|---|---|
|
59ab3739dc | ||
|
2601f88a2d | ||
|
45d7fc2c59 | ||
|
6f3f3d28cf | ||
|
42b465430e | ||
|
8f1c2eceb3 | ||
|
802fbbe3ca | ||
|
0999063728 | ||
|
6344a7c7ad | ||
|
a38d81424a | ||
|
e43a50522b | ||
|
82a34f8ea8 | ||
|
152a745af2 | ||
|
270ac427c8 | ||
|
6dc73a848e | ||
|
dd8ae8a09b | ||
|
411fd16fe9 | ||
|
2e2e2a120c | ||
|
3de006dbbf | ||
|
0ff5fa96d0 | ||
|
bf0334d16e | ||
|
baeff0ea29 | ||
|
db6e12fa8b | ||
|
0a5ab0bcfb | ||
|
e78a86599d | ||
|
02200b2bfa | ||
|
5050e192ed | ||
|
8718cca299 | ||
|
2dd9147afc | ||
|
08ebaa9db3 | ||
|
4af5195de9 | ||
|
eddccdc2ea | ||
|
80243c78f1 | ||
|
89a7d410df | ||
|
f2fa99853f | ||
|
a5bcf696ba | ||
|
30329c883b | ||
|
a023c884d3 | ||
|
e37940abcf | ||
|
2696c2b1f0 | ||
|
1088a4c8e9 | ||
|
25556c464e | ||
|
334ef9d52a | ||
|
80a987b0bd | ||
|
56c59f441d |
28 changed files with 753 additions and 428 deletions
Binary file not shown.
|
@ -37,7 +37,8 @@
|
|||
<Option7_Label>月經加速</Option7_Label>
|
||||
<Option7_Desc>加快月經週期</Option7_Desc>
|
||||
<Option8_Label>除錯</Option8_Label>
|
||||
<Option8_Desc>顯示除錯資訊 啟用時會令「胎兒信息級別」選項調至「全部細節」。</Option8_Desc>
|
||||
<Option8_Desc>顯示除錯資訊
|
||||
啟用時會令「胎兒信息級別」選項調至「全部細節」。</Option8_Desc>
|
||||
<Option9_Label>子宮狀態</Option9_Label>
|
||||
<Option9_Desc>在狀態窗口中繪製子宮圖標</Option9_Desc>
|
||||
<Option10_Label>陰道狀態</Option10_Label>
|
||||
|
@ -147,4 +148,10 @@
|
|||
<CannotNoEggs>沒有卵細胞</CannotNoEggs>
|
||||
<CannotNoWomb>必須擁有子宮</CannotNoWomb>
|
||||
<EggRestorationCompleted>{PAWN_labelShort}完成了{PAWN_possessive}卵母細胞再生術(cycle)</EggRestorationCompleted>
|
||||
<!--Auto generated: Tue Apr 11 17:51:09 2023-->
|
||||
<OvulationChanceLabel>排卵機率:{0}</OvulationChanceLabel>
|
||||
<OvulationChanceDesc>排卵期內每個卵子的獨立排卵機率。</OvulationChanceDesc>
|
||||
<Option_EnableBiotechTwins_Label>(測試中!) 允許在「生機」(Biotech)追加的懷孕機制中出現多胞胎。</Option_EnableBiotechTwins_Label>
|
||||
<Option_EnableBiotechTwins_Desc>啟用這個選項將允許同卵或異卵雙胞胎出現在「生機」(Biotech)追加的懷孕機制中。
|
||||
一併將啟用雜交系統;然而兩個類人(humanlikes)生物絕不可能生出動物。</Option_EnableBiotechTwins_Desc>
|
||||
</LanguageData>
|
||||
|
|
|
@ -56,6 +56,12 @@
|
|||
<Option6_Desc>Cum will lose fertility by this amount every hour This value affects fertilization chance indirectly.</Option6_Desc>
|
||||
<Option7_Label>Cycle acceleration</Option7_Label>
|
||||
<Option7_Desc>Accelerate menstruation cycle This can cause early menopause and infertility. Setting this lower than x12 is recommended. Rimworld's timescale: x6(default)</Option7_Desc>
|
||||
<Option_ColonistUpdateInterval_Label>Colonist update interval</Option_ColonistUpdateInterval_Label>
|
||||
<Option_ColonistUpdateInterval_Desc>How often the womb of each of your colonists, prisoners, and slaves update. Lowering this will improve accuracy, increasing this can improve performance.</Option_ColonistUpdateInterval_Desc>
|
||||
<Option_NonColonistUpdateInterval_Label>Non-colonist update interval</Option_NonColonistUpdateInterval_Label>
|
||||
<Option_NonColonistUpdateInterval_Desc>How often the womb of humans you don't control update. Lowering this will improve accuracy, increasing this can improve performance.</Option_NonColonistUpdateInterval_Desc>
|
||||
<Option_AnimalUpdateInterval_Label>Animal update interval</Option_AnimalUpdateInterval_Label>
|
||||
<Option_AnimalUpdateInterval_Desc>How often the womb of animals update. Lowering this will improve accuracy, increasing this can improve performance.</Option_AnimalUpdateInterval_Desc>
|
||||
<Option8_Label>Debug</Option8_Label>
|
||||
<Option8_Desc>Show debug information.</Option8_Desc>
|
||||
<Option9_Label>Womb status</Option9_Label>
|
||||
|
|
140
1.4/Languages/Russian/Keyed/RJW_Menstruation.xml
Normal file
140
1.4/Languages/Russian/Keyed/RJW_Menstruation.xml
Normal file
|
@ -0,0 +1,140 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LanguageData>
|
||||
<Mod_Title>RJW обновление беремености</Mod_Title>
|
||||
|
||||
<Menstrual_Blood>менструальная кровь</Menstrual_Blood>
|
||||
<Info_noCum>Пусто</Info_noCum>
|
||||
<Stage_Follicular>фолликул</Stage_Follicular>
|
||||
<Stage_Ovulatory>Овуляция</Stage_Ovulatory>
|
||||
<Stage_Luteal>Лютеиновая</Stage_Luteal>
|
||||
<Stage_Bleeding>В период</Stage_Bleeding>
|
||||
<Stage_Pregnant>Беременная</Stage_Pregnant>
|
||||
<Stage_Recover>Восстановление после рождения</Stage_Recover>
|
||||
<Stage_None>Нету</Stage_None>
|
||||
<Stage_Climacteric>Климакс</Stage_Climacteric>
|
||||
<Stage_Menopause>Менопауза</Stage_Menopause>
|
||||
<Stage_Anestrus>Анэструс</Stage_Anestrus>
|
||||
<Stage_Follicular_Desc>Яичники готовятся выпустить яйцеклетку. Овуляция произойдет в конце этой фазы.</Stage_Follicular_Desc>
|
||||
<Stage_Follicular_Induced_Desc>Яичники готовятся выпустить яйцеклетку. Овуляция произойдет, если сперма попадает в матку.</Stage_Follicular_Induced_Desc>
|
||||
<Stage_Ovulatory_Desc>Яичники выпускают яйцеклетку в матку.</Stage_Ovulatory_Desc>
|
||||
<Stage_Luteal_Desc>Матка готова принять оплодотворенную яйцеклетку. Беременность наступит, если кто-то оплодотворит до окончания этапа.</Stage_Luteal_Desc>
|
||||
<Stage_Bleeding_Desc>Матка сбрасывает свою слизистую оболочку вместе с любыми яйцеклетками, которые не смогли имплантироваться.</Stage_Bleeding_Desc>
|
||||
<Stage_Pregnant_Desc>Ребенок растет в утробе матери. Со временем и заботой он станет новым жителем этого мира.</Stage_Pregnant_Desc>
|
||||
<Stage_Recover_Desc>Матка восстанавливается после недавней беременности.</Stage_Recover_Desc>
|
||||
<Stage_None_Desc>Матка не является фертильной и не может забеременеть.</Stage_None_Desc>
|
||||
<Stage_Climacteric_Desc>Яичники близки к истощению, и менструальный цикл стал нерегулярным.</Stage_Climacteric_Desc>
|
||||
<Stage_Menopause_Desc>Яичники истощены, и матка больше не может производить яйцеклетки.</Stage_Menopause_Desc>
|
||||
<Stage_Anestrus_Desc>У матки закончился цикл. Цикл возобновится, как только будут выполнены условия.</Stage_Anestrus_Desc>
|
||||
<Button_HealthTab>Статус</Button_HealthTab>
|
||||
<Button_MilkTooltip>Лактация</Button_MilkTooltip>
|
||||
<Dialog_WombInfo01>Состояние</Dialog_WombInfo01>
|
||||
<Dialog_WombInfo02>Зародыш</Dialog_WombInfo02>
|
||||
<Dialog_WombInfo03>Отец</Dialog_WombInfo03>
|
||||
<Dialog_WombInfo04>Список спермы</Dialog_WombInfo04>
|
||||
<Dialog_WombInfo05>Оплодотворенная</Dialog_WombInfo05>
|
||||
<Dialog_WombInfo06>оплодотворение</Dialog_WombInfo06>
|
||||
<Dialog_WombInfo07>Овулирование</Dialog_WombInfo07>
|
||||
<Dialog_WombInfo08></Dialog_WombInfo08>
|
||||
<Dialog_WombInfo09></Dialog_WombInfo09>
|
||||
<Dialog_DoCleanWomb_Tooltip>Соберите сперму в ведро</Dialog_DoCleanWomb_Tooltip>
|
||||
<Dialog_DontCleanWomb_Tooltip>Хранить сперму в утробе матери</Dialog_DontCleanWomb_Tooltip>
|
||||
<Dialog_FatherUnknown>Неизвестно</Dialog_FatherUnknown>
|
||||
|
||||
|
||||
|
||||
<Option1_Label_1>Включить значок матки</Option1_Label_1>
|
||||
<Option1_Label_2>Кнопка включения вкладки здоровье</Option1_Label_2>
|
||||
<Option2_Label>Включить животный цикл</Option2_Label>
|
||||
<Option2_Desc>Имитировать циклы животных. Не рекомендуется.</Option2_Desc>
|
||||
<Option3_Label>Шанс имплантации</Option3_Label>
|
||||
<Option3_Desc>Базовый шанс имплантации оплодотворенной яйцеклетки Это значение влияет на вероятность оплодотворения.</Option3_Desc>
|
||||
<Option4_Label>Шанс оплодотворения</Option4_Label>
|
||||
<Option4_Desc>Вероятность оплодотворения на мл сперматозоидов в час Это значение влияет на вероятность оплодотворения.</Option4_Desc>
|
||||
<Option5_Label>Коэффициент распада спермы в час</Option5_Label>
|
||||
<Option5_Desc>Количество спермы в матке будет уменьшаться на эту величину каждый час Это значение влияет на вероятность оплодотворения.</Option5_Desc>
|
||||
<Option6_Label>Коэффициент распада фертильности спермы в час</Option6_Label>
|
||||
<Option6_Desc>Сперма будет терять фертильность на это количество каждый час Это значение косвенно влияет на вероятность оплодотворения.</Option6_Desc>
|
||||
<Option7_Label>Ускорение цикла</Option7_Label>
|
||||
<Option7_Desc>Ускорить менструальный цикл Это может привести к ранней менопаузе и бесплодию. Рекомендуется установить значение ниже x12. Временная шкала Rimworld: x6(по умолчанию)</Option7_Desc>
|
||||
<Option8_Label>Debug</Option8_Label>
|
||||
<Option8_Desc>Показывать отладочную информацию. Также переопределяет "Уровень информации о зародыше" для всех.</Option8_Desc>
|
||||
<Option9_Label>Статус матки</Option9_Label>
|
||||
<Option9_Desc>Нарисовать значок матки в окне состояния.</Option9_Desc>
|
||||
<Option10_Label>Состояние влагалища и груди</Option10_Label>
|
||||
<Option10_Desc>Нарисовать значки влагалища, ануса и груди в окне состояния.</Option10_Desc>
|
||||
<Option11_Label>Уровень информации о плоде</Option11_Label>
|
||||
<Option11_Desc_1>Показать всю информацию о плоде.</Option11_Desc_1>
|
||||
<Option11_Desc_2>Показать всю информацию о плоде после обнаруженной беременности.</Option11_Desc_2>
|
||||
<Option11_Desc_3>Показывать только изображение плода после обнаруженной беременности.</Option11_Desc_3>
|
||||
<Option11_Desc_4>Не показывайть никакой информации о плоде.</Option11_Desc_4>
|
||||
<Option12_Label>Включить менопаузу</Option12_Label>
|
||||
<Option12_Desc>Включите эффект менопаузы, который делает пешку бесплодной с течением времени Если у вас есть проблемы с гонками на долгую жизнь, отключите эту опцию.</Option12_Desc>
|
||||
<Option13_Label>Использовать многоплодную беременность</Option13_Label>
|
||||
<Option13_Desc>Использовать многоплодную беременность вместо беременности RJW по умолчанию Отключите эту опцию, если у вас проблемы с оплодотворением Беременность RJW должна быть включена.</Option13_Desc>
|
||||
<Option14_Label>Включить Разнояйцевых близнецов</Option14_Label>
|
||||
<Option14_Desc>Допускать беременность от нескольких яйцеклеток одновременно.</Option14_Desc>
|
||||
<Option15_Label>Включить Монозиготных близнецов</Option15_Label>
|
||||
<Option15_Desc>Дайть возможность одной яйцеклетке привести к появлению нескольких идентичных потомков.</Option15_Desc>
|
||||
<Option16_Label>Шанс монозиготных близнецов</Option16_Label>
|
||||
<Option16_Desc>Вероятность появления идентичных близнецов.</Option16_Desc>
|
||||
<Option17_Label>Макс монозиготных близнецов</Option17_Label>
|
||||
<Option17_Desc>Максимальное количество идентичных братьев и сестер.</Option17_Desc>
|
||||
<Option18_Label>Включить наложение яиц</Option18_Label>
|
||||
<Option18_Desc>Включить наложение яйца на значок матки.</Option18_Desc>
|
||||
<Option19_Label_1>Количество кровотечения</Option19_Label_1>
|
||||
<Option19_Label_2>Предполагаемое общее количество кровотечения</Option19_Label_2>
|
||||
<Option19_Desc>Приблизительное количество кровотечения. Нормальное количество кровотечения у человека составляет около 20 ~ 80 мл за цикл.</Option19_Desc>
|
||||
<Option20_Label_1>Колонист</Option20_Label_1>
|
||||
<Option20_Label_2>Пленник</Option20_Label_2>
|
||||
<Option20_Label_3>Союзная фракция</Option20_Label_3>
|
||||
<Option20_Label_4>Нейтральная</Option20_Label_4>
|
||||
<Option20_Label_5>Вражеская Фракция</Option20_Label_5>
|
||||
<Option21_Label>Помеченые пешки:</Option21_Label>
|
||||
<Option21_Desc>Для этих пешек появятся штуковина и кнопка</Option21_Desc>
|
||||
<Option22_Label>Использовать гибридное расширение</Option22_Label>
|
||||
<Option22_Desc>Переопределяет гибридное определение RJW и RaceSupport. Доминирующее гибридное расширение определяет, чье определение используется первым. Не рекомендуется изменять это.</Option22_Desc>
|
||||
<Option23_Label>Доминирующее гибридное расширение</Option23_Label>
|
||||
<Option23_Label_1>Мать</Option23_Label_1>
|
||||
<Option23_Label_2>Отец</Option23_Label_2>
|
||||
<Option_MaxBreastIncrementFactor_Label>Рост груди во время беременности</Option_MaxBreastIncrementFactor_Label>
|
||||
<Option_MaxBreastIncrementFactor_Desc>Изменить, насколько вырастет грудь беременной пешки во время беременности. Некоторые пешки будут расти больше, чем другие.</Option_MaxBreastIncrementFactor_Desc>
|
||||
<Option_MaxNippleIncrementFactor_Label>Изменение сосков во время беременности</Option_MaxNippleIncrementFactor_Label>
|
||||
<Option_MaxNippleIncrementFactor_Desc>Изменить, насколько сильно изменятся соски беременной пешки в процессе.</Option_MaxNippleIncrementFactor_Desc>
|
||||
<Option_PermanentNippleChange_Label>Постоянное изменение сосков после беременности</Option_PermanentNippleChange_Label>
|
||||
<Option_PermanentNippleChange_Desc>Приблизительно определяет, какая часть сосков беременной пешки останется измененной после окончания беременности.</Option_PermanentNippleChange_Desc>
|
||||
<Option28_Label>Настройка гибридов</Option28_Label>
|
||||
<Option28_Tooltip>Откройте пользовательский гибридный редактор. Это переопределит гибридные определения XML-файлов.</Option28_Tooltip>
|
||||
<Option29_Label>Разрешить сжатие значка</Option29_Label>
|
||||
<Option29_Desc>Значок станет меньше, если это необходимо.</Option29_Desc>
|
||||
<Option30_Label>Множитель продолжительности жизни яйца</Option30_Label>
|
||||
<Option30_Desc>Увеличить продолжительность жизни яйцеклетки. Все неимплантированные яйцеклетки погибнут в конце лютеиновой стадии, независимо от этого параметра.</Option30_Desc>
|
||||
<Option31_Label>Включить трансформацию влагалища после рождения</Option31_Label>
|
||||
<Option31_Desc>Включить постоянное растяжение влагалища после родов. Если вы используете другой мод, обрабатывающий это, отключите эту опцию.</Option31_Desc>
|
||||
<Option32_Label>Сила превращения</Option32_Label>
|
||||
<Option32_Desc>Установить силу превращения.</Option32_Desc>
|
||||
<Option_EnableGatherCumGizmo_Label>Включить сбор спермы gizmo</Option_EnableGatherCumGizmo_Label>
|
||||
<Option_EstrusOverride_Label>Течка переопределяет настройки подключения RJW</Option_EstrusOverride_Label>
|
||||
<Option_EstrusOverride_Desc>Если включено, пешка с видимой течкой будет использовать эти настройки для потенциальных подключений к оплодотворению вместо настроек RJW. Все настройки по умолчанию соответствуют их аналогам RJW.</Option_EstrusOverride_Desc>
|
||||
<Option_EstrusFuckability_Label>Минимальная возможность перепихнуться во время течки</Option_EstrusFuckability_Label>
|
||||
<Option_EstrusAttractability_Label>Подключение минимальная привлекательность во время течки</Option_EstrusAttractability_Label>
|
||||
<Option_EstrusRelationship_Label>Минимальное мнение о перепихоне во время течки</Option_EstrusRelationship_Label>
|
||||
<EstimatedCumLifespan>Расчетная продолжительность жизни спермотозоидов</EstimatedCumLifespan>
|
||||
<EstimatedEggLifespan>Предполагаемый срок жизни яйца</EstimatedEggLifespan>
|
||||
<FertilityDesc>Вероятность имплантации оплодотворенных яйцеклеток. Вероятность оплодотворения в этот час: {0}%</FertilityDesc>
|
||||
<Option_PregnancyFromBaseRJW_Label>Использовать базовый RJW pregnancy</Option_PregnancyFromBaseRJW_Label>
|
||||
<Option_PregnancyFromMultiplePregnancy_Label>Использовать менструацию при многоплодной беременности</Option_PregnancyFromMultiplePregnancy_Label>
|
||||
<Option_PregnancyFromBiotech_Label>Использовать систему беремености из biotech</Option_PregnancyFromBiotech_Label>
|
||||
<Option_EnableDraftedIcon_Label>Показывать статус матки при призыве</Option_EnableDraftedIcon_Label>
|
||||
<Option_EnableDraftedIcon_Desc>Нарисуйте значок матки для набранных пешек</Option_EnableDraftedIcon_Desc>
|
||||
<Button_ResetToDefault>Вернусть всё по умолчанию</Button_ResetToDefault>
|
||||
|
||||
<Gizmo_GatherCum>Собрать сперму</Gizmo_GatherCum>
|
||||
<FloatMenu_CleanSelf>Вагинальное мытье</FloatMenu_CleanSelf>
|
||||
|
||||
<CustomHybrid_List_Title>Пользовательский гибридный редактор</CustomHybrid_List_Title>
|
||||
<CustomHybrid_Title>Гибриды из {0}</CustomHybrid_Title>
|
||||
<CustomHybrid_Tooltip>Когда {0} скрещивается с {1}, {2} родится с вероятностью {3}. Если обе расы имеют гибридные определения друг для друга, будет использоваться определение отца.</CustomHybrid_Tooltip>
|
||||
|
||||
<CannotNoEggs>Никаких яиц</CannotNoEggs>
|
||||
|
||||
</LanguageData>
|
Binary file not shown.
|
@ -1,4 +1,5 @@
|
|||
using rjw;
|
||||
using RimWorld;
|
||||
using rjw;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
@ -17,6 +18,10 @@ 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 TickIntervalMinimum = 20;
|
||||
public const float EnzygoticTwinsChanceDefault = 0.002f;
|
||||
public const int EnzygoticTwinsChanceAdjustDefault = 2;
|
||||
public const int MaxEnzygoticTwinsDefault = 9;
|
||||
|
@ -41,6 +46,9 @@ namespace RJW_Menstruation
|
|||
public static float CumFertilityDecayRatio = CumFertilityDecayRatioDefault;
|
||||
public static int CumFertilityDecayRatioAdjust = CumFertilityDecayRatioAdjustDefault;
|
||||
public static int CycleAcceleration = CycleAccelerationDefault;
|
||||
public static int ColonistTickInterval = ColonistTickIntervalDefault;
|
||||
public static int NonColonistTickInterval = NonColonistTickIntervalDefault;
|
||||
public static int AnimalTickInterval = AnimalTickIntervalDefault;
|
||||
public static bool EnableWombIcon = true;
|
||||
public static bool EnableDraftedIcon = true;
|
||||
public static bool EnableAnimalCycle = false;
|
||||
|
@ -85,6 +93,9 @@ namespace RJW_Menstruation
|
|||
EnableGatherCumGizmo = true;
|
||||
EnableAnimalCycle = false;
|
||||
CycleAcceleration = CycleAccelerationDefault;
|
||||
ColonistTickInterval = ColonistTickIntervalDefault;
|
||||
NonColonistTickInterval = NonColonistTickIntervalDefault;
|
||||
AnimalTickInterval = AnimalTickIntervalDefault;
|
||||
EstrusOverridesHookupSettings = false;
|
||||
EstrusFuckabilityToHookup = RJWHookupSettings.MinimumFuckabilityToHookup;
|
||||
EstrusAttractivenessToHookup = RJWHookupSettings.MinimumAttractivenessToHookup;
|
||||
|
@ -179,48 +190,51 @@ namespace RJW_Menstruation
|
|||
|
||||
public override void ExposeData()
|
||||
{
|
||||
Scribe_Values.Look(ref ImplantationChanceAdjust, "ImplantationChanceAdjust", ImplantationChanceAdjust, true);
|
||||
Scribe_Values.Look(ref ImplantationChance, "ImplantationChance", ImplantationChance, true);
|
||||
Scribe_Values.Look(ref FertilizeChanceAdjust, "FertilizeChanceAdjust", FertilizeChanceAdjust, true);
|
||||
Scribe_Values.Look(ref FertilizeChance, "FertilizeChance", FertilizeChance, true);
|
||||
Scribe_Values.Look(ref CumDecayRatioAdjust, "CumDecayRatioAdjust", CumDecayRatioAdjust, true);
|
||||
Scribe_Values.Look(ref CumDecayRatio, "CumDecayRatio", CumDecayRatio, true);
|
||||
Scribe_Values.Look(ref CumFertilityDecayRatioAdjust, "CumFertilityDecayRatioAdjust", CumFertilityDecayRatioAdjust, true);
|
||||
Scribe_Values.Look(ref CumFertilityDecayRatio, "CumFertilityDecayRatio", CumFertilityDecayRatio, true);
|
||||
Scribe_Values.Look(ref CycleAcceleration, "CycleAcceleration", CycleAcceleration, true);
|
||||
Scribe_Values.Look(ref EnableWombIcon, "EnableWombIcon", EnableWombIcon, true);
|
||||
Scribe_Values.Look(ref EnableDraftedIcon, "EnableDraftedIcon", EnableDraftedIcon, true);
|
||||
Scribe_Values.Look(ref EnableAnimalCycle, "EnableAnimalCycle", EnableAnimalCycle, true);
|
||||
Scribe_Values.Look(ref DrawWombStatus, "DrawWombStatus", DrawWombStatus, true);
|
||||
Scribe_Values.Look(ref DrawVaginaStatus, "DrawVaginaStatus", DrawVaginaStatus, true);
|
||||
Scribe_Values.Look(ref DrawEggOverlay, "DrawEggOvray", DrawEggOverlay, true);
|
||||
Scribe_Values.Look(ref Debug, "Debug", Debug, true);
|
||||
Scribe_Values.Look(ref infoDetail, "InfoDetail", infoDetail, true);
|
||||
Scribe_Values.Look(ref EnableMenopause, "EnableMenopause", EnableMenopause, true);
|
||||
Scribe_Values.Look(ref EstrusOverridesHookupSettings, "EstrusOverridesHookupSettings", EstrusOverridesHookupSettings, true);
|
||||
Scribe_Values.Look(ref ImplantationChanceAdjust, "ImplantationChanceAdjust", ImplantationChanceAdjustDefault);
|
||||
Scribe_Values.Look(ref ImplantationChance, "ImplantationChance", ImplantationChanceDefault);
|
||||
Scribe_Values.Look(ref FertilizeChanceAdjust, "FertilizeChanceAdjust", FertilizeChanceAdjustDefault);
|
||||
Scribe_Values.Look(ref FertilizeChance, "FertilizeChance", FertilizeChanceDefault);
|
||||
Scribe_Values.Look(ref CumDecayRatioAdjust, "CumDecayRatioAdjust", CumDecayRatioAdjustDefault);
|
||||
Scribe_Values.Look(ref CumDecayRatio, "CumDecayRatio", CumDecayRatioDefault);
|
||||
Scribe_Values.Look(ref CumFertilityDecayRatioAdjust, "CumFertilityDecayRatioAdjust", CumFertilityDecayRatioAdjustDefault);
|
||||
Scribe_Values.Look(ref CumFertilityDecayRatio, "CumFertilityDecayRatio", CumFertilityDecayRatioDefault);
|
||||
Scribe_Values.Look(ref CycleAcceleration, "CycleAcceleration", CycleAccelerationDefault);
|
||||
Scribe_Values.Look(ref ColonistTickInterval, "ColonistTickInterval", ColonistTickIntervalDefault);
|
||||
Scribe_Values.Look(ref NonColonistTickInterval, "NonColonistTickInterval", NonColonistTickIntervalDefault);
|
||||
Scribe_Values.Look(ref AnimalTickInterval, "AnimalTickInterval", AnimalTickIntervalDefault);
|
||||
Scribe_Values.Look(ref EnableWombIcon, "EnableWombIcon", true);
|
||||
Scribe_Values.Look(ref EnableDraftedIcon, "EnableDraftedIcon", true);
|
||||
Scribe_Values.Look(ref EnableAnimalCycle, "EnableAnimalCycle", false);
|
||||
Scribe_Values.Look(ref DrawWombStatus, "DrawWombStatus", true);
|
||||
Scribe_Values.Look(ref DrawVaginaStatus, "DrawVaginaStatus", true);
|
||||
Scribe_Values.Look(ref DrawEggOverlay, "DrawEggOvray", true);
|
||||
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 EstrusOverridesHookupSettings, "EstrusOverridesHookupSettings", false);
|
||||
Scribe_Values.Look(ref EstrusFuckabilityToHookup, "EstrusFuckabilityToHookup", EstrusFuckabilityToHookup, true);
|
||||
Scribe_Values.Look(ref EstrusAttractivenessToHookup, "EstrusAttractivenessToHookup", EstrusAttractivenessToHookup, true);
|
||||
Scribe_Values.Look(ref EstrusRelationshipToHookup, "EstrusRelationshipToHookup", EstrusRelationshipToHookup, true);
|
||||
Scribe_Values.Look(ref PregnancySource, "PregnancySource", PregnancySource, true);
|
||||
Scribe_Values.Look(ref EnableBiotechTwins, "EnableBiotechTwins", EnableBiotechTwins, true);
|
||||
Scribe_Values.Look(ref EnableHeteroOvularTwins, "EnableHeteroOvularTwins", EnableHeteroOvularTwins, true);
|
||||
Scribe_Values.Look(ref EnableEnzygoticTwins, "EnableEnzygoticTwins", EnableEnzygoticTwins, true);
|
||||
Scribe_Values.Look(ref EnzygoticTwinsChance, "EnzygoticTwinsChance", EnzygoticTwinsChance, true);
|
||||
Scribe_Values.Look(ref EnzygoticTwinsChanceAdjust, "EnzygoticTwinsChanceAdjust", EnzygoticTwinsChanceAdjust, true);
|
||||
Scribe_Values.Look(ref MaxEnzygoticTwins, "MaxEnzygoticTwins", MaxEnzygoticTwins, true);
|
||||
Scribe_Values.Look(ref BleedingAmount, "BleedingAmount", BleedingAmount, true);
|
||||
Scribe_Values.Look(ref EnableButtonInHT, "EnableButtonInHT", EnableButtonInHT, true);
|
||||
Scribe_Values.Look(ref EnableGatherCumGizmo, "EnableGatherCumGizmo", true, true);
|
||||
Scribe_Values.Look(ref ShowFlag, "ShowFlag", ShowFlag, true);
|
||||
Scribe_Values.Look(ref UseHybridExtention, "UseHybridExtention", UseHybridExtention, true);
|
||||
Scribe_Values.Look(ref MotherFirst, "MotherFirst", MotherFirst, true);
|
||||
Scribe_Values.Look(ref MaxBreastIncrementFactor, "MaxBreastIncrementFactor", MaxBreastIncrementFactor, true);
|
||||
Scribe_Values.Look(ref MaxNippleIncrementFactor, "MaxNippleIncrementFactor", MaxNippleIncrementFactor, true);
|
||||
Scribe_Values.Look(ref PermanentNippleChange, "PermanentNippleChange", PermanentNippleChange, true);
|
||||
Scribe_Values.Look(ref AllowShrinkIcon, "AllowShrinkIcon", AllowShrinkIcon, true);
|
||||
Scribe_Values.Look(ref EggLifespanMultiplier, "EggLifespanMultiplier", EggLifespanMultiplier, true);
|
||||
Scribe_Values.Look(ref EnableBirthVaginaMorph, "EnableBirthVaginaMorph", EnableBirthVaginaMorph, true);
|
||||
Scribe_Values.Look(ref VaginaMorphPower, "VaginaMorphPower", VaginaMorphPower, true);
|
||||
Scribe_Values.Look(ref PregnancySource, "PregnancySource", PregnancyType.MultiplePregnancy);
|
||||
Scribe_Values.Look(ref EnableBiotechTwins, "EnableBiotechTwins", false);
|
||||
Scribe_Values.Look(ref EnableHeteroOvularTwins, "EnableHeteroOvularTwins", true);
|
||||
Scribe_Values.Look(ref EnableEnzygoticTwins, "EnableEnzygoticTwins", true);
|
||||
Scribe_Values.Look(ref EnzygoticTwinsChance, "EnzygoticTwinsChance", EnzygoticTwinsChanceDefault);
|
||||
Scribe_Values.Look(ref EnzygoticTwinsChanceAdjust, "EnzygoticTwinsChanceAdjust", EnzygoticTwinsChanceAdjustDefault);
|
||||
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);
|
||||
Scribe_Values.Look(ref AllowShrinkIcon, "AllowShrinkIcon", false);
|
||||
Scribe_Values.Look(ref EggLifespanMultiplier, "EggLifespanMultiplier", EggLifespanMultiplierDefault);
|
||||
Scribe_Values.Look(ref EnableBirthVaginaMorph, "EnableBirthVaginaMorph", false);
|
||||
Scribe_Values.Look(ref VaginaMorphPower, "VaginaMorphPower", VaginaMorphPowerDefault);
|
||||
Scribe_Collections.Look(ref HybridOverride, saveDestroyedThings: true, label: "HybridOverride", lookMode: LookMode.Deep, ctorArgs: new object[0]);
|
||||
base.ExposeData();
|
||||
}
|
||||
|
@ -274,8 +288,9 @@ namespace RJW_Menstruation
|
|||
public override void DoSettingsWindowContents(Rect inRect)
|
||||
{
|
||||
Rect outRect = new Rect(0f, 30f, inRect.width, inRect.height - 30f);
|
||||
float mainRectHeight = 30f +
|
||||
float mainRectHeight = 126f +
|
||||
(Configurations.EnableWombIcon || Configurations.EnableButtonInHT ? 400f : 0f) +
|
||||
(Configurations.EnableAnimalCycle ? 48f : 0f) +
|
||||
(Configurations.EstrusOverridesHookupSettings ? 144f : 0f) +
|
||||
(Configurations.PregnancySource == Configurations.PregnancyType.MultiplePregnancy ? (Configurations.EnableEnzygoticTwins ? 175f : 75f) : 0f) +
|
||||
(Configurations.PregnancySource == Configurations.PregnancyType.Biotech ? 75f : 0f) +
|
||||
|
@ -403,11 +418,11 @@ namespace RJW_Menstruation
|
|||
string estimatedlifespan;
|
||||
if (semenlifespan < 0)
|
||||
{
|
||||
estimatedlifespan = String.Format(": Infinite", semenlifespan);
|
||||
estimatedlifespan = string.Format(": Infinite", semenlifespan);
|
||||
}
|
||||
else
|
||||
{
|
||||
estimatedlifespan = String.Format(": {0:0}h", semenlifespan);
|
||||
estimatedlifespan = string.Format(": {0:0}h", semenlifespan);
|
||||
}
|
||||
listmain.LabelDouble(Translations.Option6_Label + " " + Configurations.CumFertilityDecayRatio * 100 + "%", Translations.EstimatedCumLifespan + estimatedlifespan, Translations.Option6_Desc);
|
||||
Configurations.CumFertilityDecayRatioAdjust = (int)listmain.Slider(Configurations.CumFertilityDecayRatioAdjust, 0, 1000);
|
||||
|
@ -416,6 +431,17 @@ namespace RJW_Menstruation
|
|||
listmain.Label(Translations.Option7_Label + " x" + Configurations.CycleAcceleration, -1, Translations.Option7_Desc);
|
||||
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)));
|
||||
|
||||
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)));
|
||||
|
||||
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)));
|
||||
}
|
||||
|
||||
float var2 = EstimatedBleedingAmountPerHour;
|
||||
float var1 = Math.Max(EstimatedBleedingAmount, var2);
|
||||
|
|
|
@ -165,16 +165,15 @@ namespace RJW_Menstruation
|
|||
Scribe_References.Look(ref pawn, "pawn", true);
|
||||
Scribe_Values.Look(ref volume, "volume", volume, true);
|
||||
Scribe_Values.Look(ref fertility, "fertility", fertility, true);
|
||||
Scribe_Values.Look(ref notcumthickness, "notcumthickness", notcumthickness, true);
|
||||
Scribe_Values.Look(ref notcum, "notcum", notcum, true);
|
||||
Scribe_Values.Look(ref notcumLabel, "notcumLabel", notcumLabel, true);
|
||||
Scribe_Values.Look(ref useCustomColor, "useCustomColor", useCustomColor, true);
|
||||
Scribe_Values.Look(ref customColor, "customColor", customColor, true);
|
||||
Scribe_Values.Look(ref notcumthickness, "notcumthickness", 0);
|
||||
Scribe_Values.Look(ref notcum, "notcum", false);
|
||||
Scribe_Values.Look(ref notcumLabel, "notcumLabel", "");
|
||||
Scribe_Values.Look(ref useCustomColor, "useCustomColor", false);
|
||||
Scribe_Values.Look(ref customColor, "customColor", default);
|
||||
Scribe_Defs.Look(ref filthDef, "filthDef");
|
||||
|
||||
}
|
||||
|
||||
public void MakeThinner(int speed)
|
||||
public void MakeThinner(float speed)
|
||||
{
|
||||
cumthickness = cumthickness.LerpMultiple(DecayResist, 0.3f, speed);
|
||||
}
|
||||
|
@ -205,8 +204,11 @@ namespace RJW_Menstruation
|
|||
{
|
||||
// comp is used for Hydrogen's RJW Muscle Injury
|
||||
float totalleak = volume;
|
||||
volume *= Math.Max(0, (1 - (Configurations.CumDecayRatio * (1 - DecayResist)) * leakfactor));
|
||||
fertility *= Math.Max(0, 1 - (Configurations.CumFertilityDecayRatio * (1 - DecayResist) + antisperm));
|
||||
float decayPerInterval = 1 - Mathf.Pow(1 - Configurations.CumDecayRatio, comp.SimulationsPerHour);
|
||||
float fertilityDecayPerInterval = 1 - Mathf.Pow(1 - Configurations.CumFertilityDecayRatio, comp.SimulationsPerHour);
|
||||
antisperm *= comp.SimulationsPerHour;
|
||||
volume *= Math.Max(0, 1 - decayPerInterval * (1 - DecayResist) * leakfactor);
|
||||
fertility *= Math.Max(0, 1 - (fertilityDecayPerInterval * (1 - DecayResist) + antisperm));
|
||||
CutMinor();
|
||||
totalleak -= volume;
|
||||
return totalleak;
|
||||
|
|
|
@ -10,7 +10,10 @@ namespace RJW_Menstruation
|
|||
private static void SetFollicular(Pawn p)
|
||||
{
|
||||
foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
|
||||
{
|
||||
comp.GoNextStage(HediffComp_Menstruation.Stage.Follicular);
|
||||
comp.RemoveAllEggs();
|
||||
}
|
||||
Messages.Message($"{p} is now follicular", p, MessageTypeDefOf.NeutralEvent, false);
|
||||
}
|
||||
|
||||
|
@ -34,7 +37,10 @@ namespace RJW_Menstruation
|
|||
private static void SetBleeding(Pawn p)
|
||||
{
|
||||
foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
|
||||
{
|
||||
comp.GoNextStage(HediffComp_Menstruation.Stage.Bleeding);
|
||||
comp.RemoveAllEggs();
|
||||
}
|
||||
Messages.Message($"{p} is now bleeding", p, MessageTypeDefOf.NeutralEvent, false);
|
||||
}
|
||||
/*
|
||||
|
@ -57,6 +63,13 @@ namespace RJW_Menstruation
|
|||
comp.RemoveAllCums();
|
||||
Messages.Message($"All cum removed from {p}'s womb", p, MessageTypeDefOf.NeutralEvent, false);
|
||||
}
|
||||
[DebugAction("RJW Menstruation", "Remove all eggs from pawn's womb", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)]
|
||||
private static void RemoveEggs(Pawn p)
|
||||
{
|
||||
foreach (HediffComp_Menstruation comp in p.GetMenstruationComps())
|
||||
comp.RemoveAllEggs();
|
||||
Messages.Message($"All eggs removed from {p}'s womb", p, MessageTypeDefOf.NeutralEvent, false);
|
||||
}
|
||||
[DebugAction("RJW Menstruation", "Add egg to pawn's next ovulation", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.Playing)]
|
||||
private static void AddEgg(Pawn p)
|
||||
{
|
||||
|
|
|
@ -89,7 +89,7 @@ namespace RJW_Menstruation
|
|||
else m.moodPowerFactor = 0.3f;
|
||||
|
||||
}
|
||||
if (pawn.HasQuirk(QuirkUtility.Quirks.Breeder)) pawn.needs.mood.thoughts.memories.TryGainMemoryFast(VariousDefOf.HateTookContraceptivePill);
|
||||
if (pawn.IsProPregnancy()) pawn.needs.mood.thoughts.memories.TryGainMemoryFast(VariousDefOf.HateTookContraceptivePill);
|
||||
else pawn.needs.mood.thoughts.memories.TryGainMemoryFast(VariousDefOf.TookContraceptivePill);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,15 +69,12 @@ namespace RJW_Menstruation
|
|||
get
|
||||
{
|
||||
if (babyHalfAge > 0f) return babyHalfAge;
|
||||
List<LifeStageAge> ages = Pawn.def.race.lifeStageAges;
|
||||
List<LifeStageAge> ages = Pawn.RaceProps.lifeStageAges;
|
||||
if (ages?.Count > 1)
|
||||
babyHalfAge = ages[1].minAge / 2;
|
||||
|
||||
if (babyHalfAge <= 0) babyHalfAge = 1.2f / 2; // Default to human
|
||||
|
||||
if (RJWPregnancySettings.phantasy_pregnancy)
|
||||
babyHalfAge /= GenDate.DaysPerYear;
|
||||
|
||||
return babyHalfAge;
|
||||
}
|
||||
}
|
||||
|
@ -140,10 +137,10 @@ namespace RJW_Menstruation
|
|||
{
|
||||
base.CompExposeData();
|
||||
|
||||
Scribe_Values.Look(ref ageOfLastBirth, "ageOfLastBirth", ageOfLastBirth, true);
|
||||
Scribe_Values.Look(ref ageOfLastBirth, "ageOfLastBirth", -1);
|
||||
Scribe_Values.Look(ref maxBreastIncrement, "maxBreastIncrement", maxBreastIncrement, true);
|
||||
Scribe_Values.Look(ref breastSizeIncreased, "breastSizeIncreased", breastSizeIncreased, true);
|
||||
Scribe_Values.Look(ref nippleProgress, "nippleProgress", nippleProgress, true);
|
||||
Scribe_Values.Look(ref breastSizeIncreased, "breastSizeIncreased", 0.0f);
|
||||
Scribe_Values.Look(ref nippleProgress, "nippleProgress", 0.0f);
|
||||
Scribe_Values.Look(ref baseAlpha, "baseAlpha", baseAlpha, true);
|
||||
Scribe_Values.Look(ref baseAreola, "baseAreola", baseAreola, true);
|
||||
Scribe_Values.Look(ref baseNipple, "baseNipple", baseNipple, true);
|
||||
|
@ -152,7 +149,7 @@ namespace RJW_Menstruation
|
|||
public bool ShouldSimulate()
|
||||
{
|
||||
if (!Configurations.EnableAnimalCycle && Pawn.IsAnimal()) return false;
|
||||
if (Pawn.Spawned || Pawn.IsCaravanMember() || PawnUtility.IsTravelingInTransportPodWorldObject(Pawn)) return true;
|
||||
if (Pawn.SpawnedOrAnyParentSpawned || Pawn.IsCaravanMember() || PawnUtility.IsTravelingInTransportPodWorldObject(Pawn)) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -199,19 +196,19 @@ namespace RJW_Menstruation
|
|||
|
||||
protected long CalculateLastBirth()
|
||||
{
|
||||
long youngestAge = (long)(BabyHalfAge * GenDate.TicksPerYear) * -2; // So a newborn isn't considered a new mother, either
|
||||
long youngestAge = -1;
|
||||
|
||||
if ((Pawn.relations == null)) return youngestAge;
|
||||
|
||||
List<Hediff_BasePregnancy> pregnancies = new List<Hediff_BasePregnancy>();
|
||||
Pawn.health.hediffSet.GetHediffs(ref pregnancies);
|
||||
List<Hediff_BasePregnancy> rjwPregnancies = new List<Hediff_BasePregnancy>();
|
||||
Pawn.health.hediffSet.GetHediffs(ref rjwPregnancies);
|
||||
|
||||
bool hasChild = Pawn.relations.Children.
|
||||
Where(child => !pregnancies.Any(preg => preg.babies.Contains(child))). // no fetuses
|
||||
Where(child => !rjwPregnancies.Any(preg => preg.babies.Contains(child))). // no fetuses
|
||||
Where(child => child.GetMother() == Pawn). // not Dad
|
||||
TryMinBy(child => child.ageTracker.AgeBiologicalTicks, out Pawn youngest);
|
||||
|
||||
if (hasChild) youngestAge = Pawn.ageTracker.AgeBiologicalTicks - youngest.ageTracker.AgeBiologicalTicks;
|
||||
if (hasChild) youngestAge = Math.Max(Pawn.ageTracker.AgeBiologicalTicks - youngest.ageTracker.AgeBiologicalTicks, -1);
|
||||
|
||||
return youngestAge;
|
||||
}
|
||||
|
@ -224,7 +221,7 @@ namespace RJW_Menstruation
|
|||
{
|
||||
maxBreastIncrement = Utility.RandGaussianLike(0.088f, 0.202f);
|
||||
}
|
||||
if (ageOfLastBirth == 0)
|
||||
if (ageOfLastBirth == 0 || ageOfLastBirth < -1)
|
||||
{
|
||||
ageOfLastBirth = CalculateLastBirth();
|
||||
}
|
||||
|
@ -253,7 +250,7 @@ namespace RJW_Menstruation
|
|||
debugGrowthStatus = "Base size (ageless)";
|
||||
}
|
||||
// The youngest child is less than halfway into babyhood: Full size
|
||||
else if (ageOfLastBirth + BabyHalfAge * GenDate.TicksPerYear > Pawn.ageTracker.AgeBiologicalTicks)
|
||||
else if (ageOfLastBirth > 0 && ageOfLastBirth + BabyHalfAge * GenDate.TicksPerYear > Pawn.ageTracker.AgeBiologicalTicks)
|
||||
{
|
||||
debugGrowthStatus = "Full size due to young child";
|
||||
if (breastSizeIncreased < MaxBreastIncrement)
|
||||
|
@ -299,7 +296,7 @@ namespace RJW_Menstruation
|
|||
float newNippleProgress;
|
||||
if (Pawn.ageTracker.BiologicalTicksPerTick <= 0f)
|
||||
newNippleProgress = 0f;
|
||||
else if (ageOfLastBirth + BabyHalfAge * GenDate.TicksPerYear > Pawn.ageTracker.AgeBiologicalTicks)
|
||||
else if (ageOfLastBirth > 0 && ageOfLastBirth + BabyHalfAge * GenDate.TicksPerYear > Pawn.ageTracker.AgeBiologicalTicks)
|
||||
newNippleProgress = 1f;
|
||||
else if (Pawn.IsRJWPregnant() || Pawn.IsBiotechPregnant())
|
||||
newNippleProgress = nippleTransitions.Evaluate(Pawn.GetFarthestPregnancyProgress());
|
||||
|
|
|
@ -15,6 +15,14 @@ namespace RJW_Menstruation
|
|||
|
||||
public class HediffComp_InducedOvulator : HediffComp_Menstruation
|
||||
{
|
||||
protected bool hadOvulatoryStage = false; // Regardless of whether an egg was actually produced
|
||||
|
||||
protected override void InitializeExtraValues()
|
||||
{
|
||||
base.InitializeExtraValues();
|
||||
hadOvulatoryStage |= IsEggExist;
|
||||
}
|
||||
|
||||
public override string GetCurStageDesc
|
||||
{
|
||||
get
|
||||
|
@ -35,7 +43,7 @@ namespace RJW_Menstruation
|
|||
protected override float RaceCyclesPerYear()
|
||||
{
|
||||
// Don't bother with breeding season, since so much time is planned to be spent pregnant.
|
||||
float pregnanciesPerYear = GenDate.DaysPerYear / Mathf.Max(1, Pawn.def.race.gestationPeriodDays);
|
||||
float pregnanciesPerYear = GenDate.DaysPerYear / Mathf.Max(1, Pawn.RaceProps.gestationPeriodDays);
|
||||
|
||||
return 2 * pregnanciesPerYear / Configurations.ImplantationChanceDefault;
|
||||
}
|
||||
|
@ -46,21 +54,35 @@ namespace RJW_Menstruation
|
|||
return Mathf.CeilToInt((Pawn.relations?.ChildrenCount ?? 0) / Configurations.ImplantationChanceDefault);
|
||||
}
|
||||
|
||||
public override void CompExposeData()
|
||||
{
|
||||
base.CompExposeData();
|
||||
Scribe_Values.Look(ref hadOvulatoryStage, "hadOvulatoryStage", false);
|
||||
}
|
||||
|
||||
protected override void GoOvulatoryStage()
|
||||
{
|
||||
estrusflag = false;
|
||||
hadOvulatoryStage = false;
|
||||
GoNextStage(Stage.Luteal);
|
||||
}
|
||||
|
||||
protected override void OvulatoryAction()
|
||||
{
|
||||
base.OvulatoryAction();
|
||||
hadOvulatoryStage = true;
|
||||
}
|
||||
|
||||
protected override void LutealAction()
|
||||
{
|
||||
base.LutealAction();
|
||||
if (curStage != Stage.Luteal) hadOvulatoryStage = false;
|
||||
}
|
||||
|
||||
protected override void AfterCumIn(Pawn cummer)
|
||||
{
|
||||
base.AfterCumIn(cummer);
|
||||
switch (curStage)
|
||||
{
|
||||
case Stage.Follicular:
|
||||
GoNextStage(Stage.Ovulatory);
|
||||
break;
|
||||
}
|
||||
if (curStage == Stage.Follicular) GoNextStage(Stage.Ovulatory);
|
||||
}
|
||||
|
||||
public override bool IsDangerDay
|
||||
|
@ -75,7 +97,7 @@ namespace RJW_Menstruation
|
|||
case Stage.Ovulatory:
|
||||
return true;
|
||||
case Stage.Luteal:
|
||||
return IsEggExist && curStageHrs < EggLifespanHours;
|
||||
return hadOvulatoryStage && curStageTicks < EggLifespanTicks;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
@ -89,11 +111,11 @@ namespace RJW_Menstruation
|
|||
switch (curStage)
|
||||
{
|
||||
case Stage.Follicular:
|
||||
return curStageHrs > currentIntervalHours - Props.estrusDaysBeforeOvulation * 24;
|
||||
return curStageTicks > currentIntervalTicks - Props.estrusDaysBeforeOvulation * GenDate.TicksPerDay;
|
||||
case Stage.Ovulatory:
|
||||
return true;
|
||||
case Stage.Luteal:
|
||||
return IsEggExist && curStageHrs < EggLifespanHours;
|
||||
return hadOvulatoryStage && curStageTicks < EggLifespanTicks;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -16,23 +16,28 @@ namespace RJW_Menstruation
|
|||
|
||||
public class HediffComp_PeriodicOvulator : HediffComp_Menstruation
|
||||
{
|
||||
public int hoursToNextCycle = -100000;
|
||||
public int averageCycleIntervalHours = -1;
|
||||
public int ticksToNextCycle = -100000;
|
||||
public int averageCycleIntervalTicks = -1;
|
||||
|
||||
public new CompProperties_PeriodicOvulator Props;
|
||||
|
||||
protected override void PreInitialize()
|
||||
{
|
||||
base.PreInitialize();
|
||||
Props = (CompProperties_PeriodicOvulator)props;
|
||||
}
|
||||
|
||||
protected override void InitializeExtraValues()
|
||||
{
|
||||
base.InitializeExtraValues();
|
||||
Props = (CompProperties_PeriodicOvulator)props;
|
||||
if (averageCycleIntervalHours < 0)
|
||||
if (averageCycleIntervalTicks < 0)
|
||||
{
|
||||
averageCycleIntervalHours = (int)(24f * Props.cycleIntervalDays.RandomInRange / cycleSpeed);
|
||||
if (hoursToNextCycle < -50000)
|
||||
hoursToNextCycle = Rand.Range(0, averageCycleIntervalHours);
|
||||
averageCycleIntervalTicks = (int)(Props.cycleIntervalDays.RandomInRange * GenDate.TicksPerDay / cycleSpeed);
|
||||
if (ticksToNextCycle < -50000)
|
||||
ticksToNextCycle = Rand.Range(0, averageCycleIntervalTicks);
|
||||
// Make the cutoff halfway into cycle, just to be sure there isn't a double-cycle the first time
|
||||
if ((curStage == Stage.Follicular || curStage == Stage.Luteal || curStage == Stage.Bleeding)
|
||||
&& (averageCycleIntervalHours - hoursToNextCycle) / 2 >= 24 * (Props.follicularIntervalDays + Props.lutealIntervalDays) / cycleSpeed)
|
||||
&& (averageCycleIntervalTicks - ticksToNextCycle) / 2 >= GenDate.TicksPerDay * (Props.follicularIntervalDays + Props.lutealIntervalDays) / cycleSpeed)
|
||||
GoNextStage(Stage.Anestrus);
|
||||
}
|
||||
}
|
||||
|
@ -40,40 +45,46 @@ namespace RJW_Menstruation
|
|||
protected override float RaceCyclesPerYear()
|
||||
{
|
||||
// Don't bother trying to work seasonal breeding into the math
|
||||
// Due to the enormous variation in possible cycle gaps, cheat and base it off the individual
|
||||
return averageCycleIntervalHours * cycleSpeed / (24 * 360); // cancel out their cycleSpeed from initialization to get their "normal" speed
|
||||
// Base it off of the shortest cycle interval of the vagina
|
||||
return GenDate.DaysPerYear / (Props.cycleIntervalDays.TrueMin / Configurations.CycleAccelerationDefault);
|
||||
}
|
||||
|
||||
protected override void BeforeSimulator()
|
||||
{
|
||||
base.BeforeSimulator();
|
||||
if (hoursToNextCycle > 0) hoursToNextCycle -= Configurations.CycleAcceleration;
|
||||
if (ticksToNextCycle > 0) ticksToNextCycle -= TickInterval * Configurations.CycleAcceleration;
|
||||
}
|
||||
|
||||
public override void CompExposeData()
|
||||
{
|
||||
base.CompExposeData();
|
||||
if (Scribe.mode == LoadSaveMode.LoadingVars)
|
||||
{
|
||||
int hoursToNextCycle = -1;
|
||||
int averageCycleIntervalHours = -1;
|
||||
Scribe_Values.Look(ref hoursToNextCycle, "hoursToNextCycle", hoursToNextCycle, true);
|
||||
Scribe_Values.Look(ref averageCycleIntervalHours, "averageCycleIntervalHours", averageCycleIntervalHours, true);
|
||||
if (hoursToNextCycle >= 0) ticksToNextCycle = hoursToNextCycle * GenDate.TicksPerHour;
|
||||
if (averageCycleIntervalHours >= 0) averageCycleIntervalTicks = averageCycleIntervalHours * GenDate.TicksPerHour;
|
||||
}
|
||||
Scribe_Values.Look(ref ticksToNextCycle, "ticksToNextCycle", ticksToNextCycle, true);
|
||||
Scribe_Values.Look(ref averageCycleIntervalTicks, "averageCycleIntervalTicks", averageCycleIntervalTicks, true);
|
||||
}
|
||||
|
||||
protected override int HoursToNextStage()
|
||||
protected override int TicksToNextStage()
|
||||
{
|
||||
if (curStage == Stage.Anestrus && hoursToNextCycle > 0) return hoursToNextCycle / Configurations.CycleAcceleration;
|
||||
else return base.HoursToNextStage();
|
||||
if (curStage == Stage.Anestrus && ticksToNextCycle > 0) return ticksToNextCycle / Configurations.CycleAcceleration;
|
||||
else return base.TicksToNextStage();
|
||||
}
|
||||
|
||||
protected override void BleedingAction()
|
||||
{
|
||||
if (curStageHrs >= currentIntervalHours)
|
||||
base.BleedingAction();
|
||||
if (curStage != Stage.Bleeding)
|
||||
{
|
||||
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);
|
||||
estrusflag = false;
|
||||
GoNextStage(Stage.Anestrus);
|
||||
return;
|
||||
}
|
||||
else base.BleedingAction();
|
||||
}
|
||||
|
||||
protected override void PregnantAction()
|
||||
|
@ -81,14 +92,14 @@ namespace RJW_Menstruation
|
|||
base.PregnantAction();
|
||||
if (curStage != Stage.Pregnant)
|
||||
// Go halfway into the cycle
|
||||
hoursToNextCycle = (int)(averageCycleIntervalHours * (1 + Rand.Range(-cycleVariability, cycleVariability))) / 2;
|
||||
ticksToNextCycle = (int)(averageCycleIntervalTicks * (1 + Rand.Range(-cycleVariability, cycleVariability))) / 2;
|
||||
}
|
||||
|
||||
protected override void AnestrusAction()
|
||||
{
|
||||
if (hoursToNextCycle <= 0)
|
||||
if (ticksToNextCycle <= 0)
|
||||
{
|
||||
hoursToNextCycle = (int)(averageCycleIntervalHours * (1 + Rand.Range(-cycleVariability, cycleVariability)));
|
||||
ticksToNextCycle = (int)(averageCycleIntervalTicks * (1 + Rand.Range(-cycleVariability, cycleVariability)));
|
||||
if (IsBreedingSeason()) GoNextStage(Stage.Follicular);
|
||||
return;
|
||||
}
|
||||
|
@ -99,7 +110,7 @@ namespace RJW_Menstruation
|
|||
{
|
||||
base.CopyCycleProperties(original);
|
||||
if (original is HediffComp_PeriodicOvulator comp)
|
||||
averageCycleIntervalHours = comp.averageCycleIntervalHours;
|
||||
averageCycleIntervalTicks = comp.averageCycleIntervalTicks;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -213,7 +213,7 @@ namespace RJW_Menstruation
|
|||
|
||||
PregnancyUtility.ApplyBirthOutcome(thisOutcome, quality, ritual, genes, geneticMother, birtherThing, thisFather, doctor, lordJobRitual, assignments);
|
||||
// No more babies if mom dies halfway through. Unrealistic maybe, but saves a lot of headache in ApplyBirthOutcome
|
||||
if (mother.health.Dead) break;
|
||||
if (mother.Dead) break;
|
||||
if (xxx.is_human(baby))
|
||||
mother.records.Increment(xxx.CountOfBirthHuman);
|
||||
else if (xxx.is_animal(baby))
|
||||
|
@ -266,7 +266,7 @@ namespace RJW_Menstruation
|
|||
baby.relations.ClearAllRelations();
|
||||
|
||||
PregnancyUtility.ApplyBirthOutcome(outcome, quality, ritual, genes, geneticMother, birtherThing, thisFather, doctor, lordJobRitual, assignments);
|
||||
if (mother.health.Dead) break;
|
||||
if (mother.Dead) break;
|
||||
if (xxx.is_human(baby))
|
||||
mother.records.Increment(xxx.CountOfBirthHuman);
|
||||
else if (xxx.is_animal(baby))
|
||||
|
|
|
@ -3,6 +3,7 @@ using RimWorld.Planet;
|
|||
using rjw;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.Eventing.Reader;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using Verse;
|
||||
|
@ -217,44 +218,50 @@ namespace RJW_Menstruation
|
|||
|
||||
return wombtex;
|
||||
}
|
||||
public static Texture2D GetEggIcon(this HediffComp_Menstruation comp, bool includeOvary)
|
||||
public static Texture2D GetOvaryIcon(this HediffComp_Menstruation comp)
|
||||
{
|
||||
const float ovaryChanceToShow_01 = 0.4f;
|
||||
const float ovaryChanceToShow_02 = 1.0f;
|
||||
switch (comp.CurrentVisibleStage)
|
||||
{
|
||||
case HediffComp_Menstruation.Stage.Follicular:
|
||||
if (!includeOvary) break;
|
||||
if (comp is HediffComp_InducedOvulator)
|
||||
{
|
||||
if (comp.Pawn.jobs.curDriver is JobDriver_Sex job &&
|
||||
const float ovaryChanceToShow_01 = 0.2f;
|
||||
const float ovaryChanceToShow_02 = 0.8f;
|
||||
float ovulatoryProgress;
|
||||
bool isInduced = comp is HediffComp_InducedOvulator;
|
||||
if (comp.curStage == HediffComp_Menstruation.Stage.Follicular &&
|
||||
isInduced &&
|
||||
comp.Pawn.jobs.curDriver is JobDriver_Sex job &&
|
||||
job.Sexprops != null &&
|
||||
!job.Sexprops.usedCondom &&
|
||||
(job.Sexprops.sexType == xxx.rjwSextype.Vaginal || job.Sexprops.sexType == xxx.rjwSextype.DoublePenetration))
|
||||
return ContentFinder<Texture2D>.Get((comp.OvulationChance >= ovaryChanceToShow_01) ? "Ovaries/Ovary_01" : "Ovaries_Ovary_00", true);
|
||||
else break;
|
||||
ovulatoryProgress = 0.0f;
|
||||
else if (comp.curStage == HediffComp_Menstruation.Stage.Ovulatory) ovulatoryProgress = isInduced ? Mathf.Max(ovaryChanceToShow_01, comp.StageProgessNextUpdate) : comp.StageProgessNextUpdate;
|
||||
// else if (comp.curStage == HediffComp_Menstruation.Stage.Luteal && comp.IsEggExist) return ContentFinder<Texture2D>.Get("Ovaries/Ovary_02", true);
|
||||
else return ContentFinder<Texture2D>.Get("Womb/Empty", true);
|
||||
|
||||
float combinedAppearance = ovulatoryProgress * comp.OvulationChance;
|
||||
if (combinedAppearance >= ovaryChanceToShow_02 && comp.OvulationChance >= 1.0f) return ContentFinder<Texture2D>.Get("Ovaries/Ovary_02", true);
|
||||
else if (combinedAppearance >= ovaryChanceToShow_01) return ContentFinder<Texture2D>.Get("Ovaries/Ovary_01", true);
|
||||
else return ContentFinder<Texture2D>.Get("Ovaries/Ovary_00", true);
|
||||
}
|
||||
if (comp.curStageHrs > comp.CurStageIntervalHours - 30) // Approximate time for ovulation to occur
|
||||
return ContentFinder<Texture2D>.Get((comp.OvulationChance >= ovaryChanceToShow_01) ? "Ovaries/Ovary_01" : "Ovaries_Ovary_00", true);
|
||||
else break;
|
||||
public static Texture2D GetEggIcon(this HediffComp_Menstruation comp, bool includeOvary)
|
||||
{
|
||||
switch (comp.CurrentVisibleStage)
|
||||
{
|
||||
case HediffComp_Menstruation.Stage.Follicular:
|
||||
case HediffComp_Menstruation.Stage.Ovulatory:
|
||||
if (!includeOvary) break;
|
||||
if (comp.OvulationChance >= ovaryChanceToShow_02)
|
||||
return ContentFinder<Texture2D>.Get("Ovaries/Ovary_02", true);
|
||||
else if (comp.OvulationChance >= ovaryChanceToShow_01)
|
||||
return ContentFinder<Texture2D>.Get("Ovaries/Ovary_01", true);
|
||||
else
|
||||
return ContentFinder<Texture2D>.Get("Ovaries/Ovary_00", true);
|
||||
else return GetOvaryIcon(comp);
|
||||
case HediffComp_Menstruation.Stage.Luteal:
|
||||
if (!comp.IsEggExist) break;
|
||||
int fertstage = comp.IsFertilized;
|
||||
if (fertstage >= 0)
|
||||
int fertTime = comp.EggFertilizedTime;
|
||||
if (fertTime >= 0)
|
||||
{
|
||||
if (fertstage <= Configurations.CycleAcceleration) return ContentFinder<Texture2D>.Get("Eggs/Egg_Fertilizing02", true);
|
||||
else if (fertstage <= 18) return ContentFinder<Texture2D>.Get("Eggs/Egg_Fertilized00", true);
|
||||
else if (fertstage <= 54) return ContentFinder<Texture2D>.Get("Eggs/Egg_Fertilized01", true);
|
||||
if (fertTime <= GenDate.TicksPerHour * Configurations.CycleAcceleration) return ContentFinder<Texture2D>.Get("Eggs/Egg_Fertilizing02", true);
|
||||
else if (fertTime <= 18 * GenDate.TicksPerHour) return ContentFinder<Texture2D>.Get("Eggs/Egg_Fertilized00", true);
|
||||
else if (fertTime <= 54 * GenDate.TicksPerHour) return ContentFinder<Texture2D>.Get("Eggs/Egg_Fertilized01", true);
|
||||
else return ContentFinder<Texture2D>.Get("Eggs/Egg_Fertilized02", true);
|
||||
}
|
||||
else if (includeOvary && comp.curStageTicks <= comp.Props.ovulationIntervalHours * 0.4f * GenDate.TicksPerHour) // Total about as long as it spent in Ovary_01
|
||||
{
|
||||
return ContentFinder<Texture2D>.Get("Ovaries/Ovary_02", true);
|
||||
}
|
||||
else if (comp.IsEggFertilizing)
|
||||
{
|
||||
if (comp.GetFertilityChance() < 0.5f)
|
||||
|
@ -348,7 +355,7 @@ namespace RJW_Menstruation
|
|||
else if (hediff is Hediff_BasePregnancy rjw_preg)
|
||||
return (rjw_preg.p_end_tick - rjw_preg.p_start_tick) / GenDate.TicksPerHour;
|
||||
// TODO: Biotech pregnancy
|
||||
else return hediff.pawn.def.race.gestationPeriodDays * GenDate.HoursPerDay;
|
||||
else return hediff.pawn.RaceProps.gestationPeriodDays * GenDate.HoursPerDay;
|
||||
}
|
||||
|
||||
public static float RandomVariabilityPercent(int recursion = 0)
|
||||
|
@ -400,6 +407,22 @@ namespace RJW_Menstruation
|
|||
return false;
|
||||
}
|
||||
|
||||
public static bool IsProPregnancy(this Pawn pawn)
|
||||
{
|
||||
if (pawn.HasQuirk(QuirkUtility.Quirks.Breeder) ||
|
||||
pawn.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish))
|
||||
return true;
|
||||
|
||||
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;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static float DamagePants(this Pawn pawn, float fluidAmount)
|
||||
{
|
||||
if (pawn.apparel == null) return 0;
|
||||
|
|
|
@ -23,11 +23,11 @@ namespace RJW_Menstruation
|
|||
{
|
||||
if (is_discovered ||
|
||||
!xxx.is_human(pawn) ||
|
||||
pawn.HasQuirk(QuirkUtility.Quirks.Breeder) ||
|
||||
pawn.HasQuirk(QuirkUtility.Quirks.Breeder) || (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.HasQuirk(QuirkUtility.Quirks.ImpregnationFetish) || pawn.relations?.DirectRelations?.Find(x => x.def.Equals(PawnRelationDefOf.Lover)) != null)
|
||||
if (pawn.IsProPregnancy() || pawn.relations?.DirectRelations?.Find(x => x.def.Equals(PawnRelationDefOf.Lover)) != null)
|
||||
{
|
||||
pawn.needs.mood.thoughts.memories.TryGainMemory(VariousDefOf.UnwantedPregnancyMild);
|
||||
}
|
||||
|
|
|
@ -117,7 +117,7 @@ namespace RJW_Menstruation
|
|||
{
|
||||
public static void Postfix(Thing birtherThing)
|
||||
{
|
||||
if (birtherThing is Pawn pawn && !pawn.health.Dead)
|
||||
if (birtherThing is Pawn pawn && !pawn.Dead)
|
||||
pawn.GetBreastComp()?.GaveBirth();
|
||||
}
|
||||
}
|
||||
|
@ -197,12 +197,15 @@ namespace RJW_Menstruation
|
|||
{
|
||||
public static bool Prefix(ref Gene __result, Gene gene, Pawn ___pawn)
|
||||
{
|
||||
if(VariousDefOf.WombGenes.Contains(gene.def) && !___pawn.GetMenstruationComps().Any())
|
||||
{
|
||||
__result = null;
|
||||
return false;
|
||||
}
|
||||
else return true;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ namespace RJW_Menstruation.Patch
|
|||
{
|
||||
if (!__result.NullOrEmpty()) return;
|
||||
if (cummedPawns.Contains(pawn))
|
||||
__result = "Has cum or fertilized egg in a womb";
|
||||
__result = "EggFertOrCumInWomb";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using HarmonyLib;
|
||||
using RimWorld;
|
||||
using rjw;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
@ -42,12 +43,12 @@ namespace RJW_Menstruation
|
|||
|
||||
private static Gizmo CreateGizmo_WombStatus(Pawn pawn, HediffComp_Menstruation comp)
|
||||
{
|
||||
Texture2D icon, icon_overay;
|
||||
Texture2D icon, icon_overlay;
|
||||
StringBuilder description = new StringBuilder();
|
||||
if (Configurations.Debug)
|
||||
{
|
||||
description
|
||||
.AppendFormat("{0}: {1}\n", comp.curStage, comp.curStageHrs);
|
||||
.AppendFormat("{0}: {1}\n", comp.curStage, comp.curStageTicks / GenDate.TicksPerHour);
|
||||
if (comp.Pregnancy is Hediff_BasePregnancy rjwpreg) description
|
||||
.AppendFormat("due: {0}\n", rjwpreg.DueDate());
|
||||
else if (comp.Pregnancy is Hediff_Pregnant biopreg) description
|
||||
|
@ -68,15 +69,15 @@ namespace RJW_Menstruation
|
|||
float gestationProgress = comp.StageProgress;
|
||||
if (hediff is Hediff_BasePregnancy || hediff is HediffWithParents)
|
||||
{
|
||||
if (gestationProgress < 0.2f) icon_overay = comp.GetCumIcon();
|
||||
else icon_overay = ContentFinder<Texture2D>.Get(("Womb/Empty"), true);
|
||||
if (gestationProgress < 0.2f) icon_overlay = comp.GetCumIcon();
|
||||
else icon_overlay = ContentFinder<Texture2D>.Get(("Womb/Empty"), true);
|
||||
}
|
||||
else icon_overay = ContentFinder<Texture2D>.Get(("Womb/Empty"), true);
|
||||
else icon_overlay = ContentFinder<Texture2D>.Get(("Womb/Empty"), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
icon = comp.GetWombIcon();
|
||||
icon_overay = comp.GetCumIcon();
|
||||
icon_overlay = comp.GetCumIcon();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -90,7 +91,7 @@ namespace RJW_Menstruation
|
|||
{
|
||||
icon = comp.GetWombIcon();
|
||||
}
|
||||
icon_overay = comp.GetCumIcon();
|
||||
icon_overlay = comp.GetCumIcon();
|
||||
|
||||
}
|
||||
foreach (string s in comp.GetCumsInfo) description.AppendFormat("{0}\n", s);
|
||||
|
@ -102,7 +103,7 @@ namespace RJW_Menstruation
|
|||
defaultLabel = pawn.LabelShort,
|
||||
defaultDesc = description.ToString(),
|
||||
icon = icon,
|
||||
icon_overay = icon_overay,
|
||||
icon_overlay = icon_overlay,
|
||||
shrinkable = Configurations.AllowShrinkIcon,
|
||||
cumcolor = c,
|
||||
comp = comp,
|
||||
|
|
|
@ -15,13 +15,13 @@ namespace RJW_Menstruation
|
|||
return milktexturecache;
|
||||
}
|
||||
}
|
||||
// Sex drive
|
||||
public static Texture2D SexDriveTexture
|
||||
// Ovulation, sex drive
|
||||
public static Texture2D OvulatoryTexture
|
||||
{
|
||||
get
|
||||
{
|
||||
if (sexdrivetexturecache == null) sexdrivetexturecache = SolidColorMaterials.NewSolidColorTexture(0.686f, 0.062f, 0.698f, 1.0f);
|
||||
return sexdrivetexturecache;
|
||||
if (ovulatorytexturecache == null) ovulatorytexturecache = SolidColorMaterials.NewSolidColorTexture(0.686f, 0.062f, 0.698f, 1.0f);
|
||||
return ovulatorytexturecache;
|
||||
}
|
||||
}
|
||||
// Bleeding, vulnerability
|
||||
|
@ -93,7 +93,7 @@ namespace RJW_Menstruation
|
|||
public static readonly Texture2D GatherCum_Pussy = ContentFinder<Texture2D>.Get("UI/Icon/ToPussy");
|
||||
|
||||
private static Texture2D milktexturecache = SolidColorMaterials.NewSolidColorTexture(0.992f, 1.0f, 0.960f, 1.0f);
|
||||
private static Texture2D sexdrivetexturecache = SolidColorMaterials.NewSolidColorTexture(0.686f, 0.062f, 0.698f, 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);
|
||||
private static Texture2D pregnanttexturecache = SolidColorMaterials.NewSolidColorTexture(0.082f, 0.453f, 0.6f, 1.0f);
|
||||
private static Texture2D recovertexturecache = SolidColorMaterials.NewSolidColorTexture(0.6f, 0.83f, 0.35f, 1.0f);
|
||||
|
@ -101,10 +101,5 @@ namespace RJW_Menstruation
|
|||
private static Texture2D animaltexturecache = SolidColorMaterials.NewSolidColorTexture(0.411f, 0.521f, 0.878f, 1.0f);
|
||||
private static Texture2D lutealtexturecache = SolidColorMaterials.NewSolidColorTexture(0.843f, 0.474f, 0.6f, 1.0f);
|
||||
private static Texture2D whoredtexturecache = SolidColorMaterials.NewSolidColorTexture(0.7f, 0.7f, 0.0f, 1.0f);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -197,7 +197,8 @@ namespace RJW_Menstruation
|
|||
|
||||
public float absorbedfluids = 0;
|
||||
public bool dirty = false;
|
||||
public int wearhours = 0;
|
||||
public int wearTicks = 0;
|
||||
protected virtual float PassiveAbsorptionPerHour => 0.1f;
|
||||
public virtual bool LeakAfterDirty => def.GetModExtension<AbsorberModExtension>().leakAfterDirty;
|
||||
public virtual bool EffectAfterDirty => def.GetModExtension<AbsorberModExtension>().effectsAfterDirty;
|
||||
public virtual ThingDef DirtyDef => def.GetModExtension<AbsorberModExtension>().dirtyDef;
|
||||
|
@ -205,12 +206,12 @@ namespace RJW_Menstruation
|
|||
|
||||
public Color fluidColor = Color.white;
|
||||
|
||||
public virtual void DirtyEffect() { }
|
||||
public virtual void DirtyEffect(int tickInterval) { }
|
||||
|
||||
public virtual void WearEffect()
|
||||
public virtual void WearEffect(int tickInterval)
|
||||
{
|
||||
absorbedfluids += 0.1f;
|
||||
if (dirty) wearhours++;
|
||||
absorbedfluids += PassiveAbsorptionPerHour * tickInterval / GenDate.TicksPerHour;
|
||||
if (dirty) wearTicks += tickInterval;
|
||||
}
|
||||
|
||||
public override Color DrawColorTwo => fluidColor;
|
||||
|
@ -218,26 +219,27 @@ namespace RJW_Menstruation
|
|||
public override void ExposeData()
|
||||
{
|
||||
base.ExposeData();
|
||||
Scribe_Values.Look(ref absorbedfluids, "absorbedfluids", absorbedfluids, true);
|
||||
Scribe_Values.Look(ref dirty, "dirty", dirty, true);
|
||||
if(Scribe.mode == LoadSaveMode.LoadingVars)
|
||||
{
|
||||
int wearhours = -1;
|
||||
Scribe_Values.Look(ref wearhours, "wearhours", wearhours, true);
|
||||
Scribe_Values.Look(ref fluidColor, "fluidColor", fluidColor, true);
|
||||
if (wearhours >= 0) wearTicks = wearhours * GenDate.TicksPerHour;
|
||||
}
|
||||
Scribe_Values.Look(ref absorbedfluids, "absorbedfluids", 0);
|
||||
Scribe_Values.Look(ref dirty, "dirty", false);
|
||||
Scribe_Values.Look(ref wearTicks, "wearTicks", 0);
|
||||
Scribe_Values.Look(ref fluidColor, "fluidColor", Color.white);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class Absorber_Tampon : Absorber
|
||||
{
|
||||
|
||||
public override void WearEffect()
|
||||
protected override float PassiveAbsorptionPerHour => 0.5f;
|
||||
public override void DirtyEffect(int tickInterval)
|
||||
{
|
||||
if (dirty) wearhours++;
|
||||
absorbedfluids += 0.5f;
|
||||
}
|
||||
|
||||
public override void DirtyEffect()
|
||||
{
|
||||
if (wearhours > MinHrstoDirtyEffect && Rand.Chance(0.01f) && !Wearer.apparel.IsLocked(this))
|
||||
if (wearTicks > MinHrstoDirtyEffect * GenDate.TicksPerHour && Rand.MTBEventOccurs(100.0f, GenDate.TicksPerHour, tickInterval) && !Wearer.apparel.IsLocked(this))
|
||||
{
|
||||
Wearer.health.AddHediff(HediffDefOf.WoundInfection, Genital_Helper.get_genitalsBPR(Wearer));
|
||||
}
|
||||
|
@ -254,7 +256,7 @@ namespace RJW_Menstruation
|
|||
public override void ExposeData()
|
||||
{
|
||||
base.ExposeData();
|
||||
Scribe_Values.Look(ref color, "color", color, true);
|
||||
Scribe_Values.Look(ref color, "color", Color.white);
|
||||
}
|
||||
|
||||
public override Color DrawColor
|
||||
|
|
|
@ -60,6 +60,12 @@ namespace RJW_Menstruation
|
|||
public static readonly string Option6_Desc = "Option6_Desc".Translate();
|
||||
public static readonly string Option7_Label = "Option7_Label".Translate();
|
||||
public static readonly string Option7_Desc = "Option7_Desc".Translate();
|
||||
public static readonly string Option_ColonistUpdateInterval_Label = "Option_ColonistUpdateInterval_Label".Translate();
|
||||
public static readonly string Option_ColonistUpdateInterval_Desc = "Option_ColonistUpdateInterval_Desc".Translate();
|
||||
public static readonly string Option_NonColonistUpdateInterval_Label = "Option_NonColonistUpdateInterval_Label".Translate();
|
||||
public static readonly string Option_NonColonistUpdateInterval_Desc = "Option_NonColonistUpdateInterval_Desc".Translate();
|
||||
public static readonly string Option_AnimalUpdateInterval_Label = "Option_AnimalUpdateInterval_Label".Translate();
|
||||
public static readonly string Option_AnimalUpdateInterval_Desc = "Option_AnimalUpdateInterval_Desc".Translate();
|
||||
public static readonly string Option8_Label = "Option8_Label".Translate();
|
||||
public static readonly string Option8_Desc = "Option8_Desc".Translate();
|
||||
public static readonly string Option9_Label = "Option9_Label".Translate();
|
||||
|
|
|
@ -433,7 +433,7 @@ namespace RJW_Menstruation
|
|||
float statvalue;
|
||||
const float height = 24f;
|
||||
statvalue = pawn.GetStatValue(xxx.sex_drive_stat);
|
||||
FillableBarLabeled(lineRect, " " + xxx.sex_drive_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue / 2, TextureCache.SexDriveTexture, Texture2D.blackTexture, xxx.sex_drive_stat.description);
|
||||
FillableBarLabeled(lineRect, " " + xxx.sex_drive_stat.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue / 2, TextureCache.OvulatoryTexture, Texture2D.blackTexture, xxx.sex_drive_stat.description);
|
||||
lineRect.y += height;
|
||||
|
||||
statvalue = pawn.GetStatValue(xxx.vulnerability_stat);
|
||||
|
@ -462,8 +462,8 @@ namespace RJW_Menstruation
|
|||
statvalue = Configurations.ImplantationChance * comp.ImplantChance;
|
||||
float fertchance = comp.GetFertilityChance();
|
||||
FillableBarLabeled(lineRect, " " + xxx.reproduction.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue, TextureCache.LutealTexture, Texture2D.blackTexture, Translations.FertilityDesc(string.Format("{0:0.##}", fertchance * 100)));
|
||||
Rect overayRect = new Rect(lineRect.x, lineRect.y, lineRect.width * Math.Min(1.0f, fertchance), lineRect.height);
|
||||
GUI.DrawTexture(overayRect, TextureCache.FertChanceTex);
|
||||
Rect overlayRect = new Rect(lineRect.x, lineRect.y, lineRect.width * Math.Min(1.0f, fertchance), lineRect.height);
|
||||
GUI.DrawTexture(overlayRect, TextureCache.FertChanceTex);
|
||||
lineRect.y += height;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ namespace RJW_Menstruation
|
|||
{
|
||||
public class Gizmo_Womb : Command_Action
|
||||
{
|
||||
public Texture2D icon_overay;
|
||||
public Texture2D icon_overlay;
|
||||
public Color cumcolor;
|
||||
public HediffComp_Menstruation comp;
|
||||
|
||||
|
@ -14,23 +14,23 @@ namespace RJW_Menstruation
|
|||
public override void DrawIcon(Rect rect, Material buttonMat, GizmoRenderParms parms)
|
||||
{
|
||||
Texture badTex = icon;
|
||||
Texture2D overay = icon_overay;
|
||||
Texture2D overlay = icon_overlay;
|
||||
Color color = cumcolor;
|
||||
|
||||
if (badTex == null)
|
||||
{
|
||||
badTex = BaseContent.BadTex;
|
||||
}
|
||||
if (overay == null)
|
||||
if (overlay == null)
|
||||
{
|
||||
overay = BaseContent.BadTex;
|
||||
overlay = BaseContent.BadTex;
|
||||
}
|
||||
if (color == null) color = Color.white;
|
||||
rect.position += new Vector2(iconOffset.x * rect.size.x, iconOffset.y * rect.size.y);
|
||||
GUI.color = IconDrawColor;
|
||||
Widgets.DrawTextureFitted(rect, badTex, this.iconDrawScale * 0.85f, this.iconProportions, this.iconTexCoords, this.iconAngle, buttonMat);
|
||||
GUI.color = color;
|
||||
Widgets.DrawTextureFitted(rect, overay, iconDrawScale * 0.85f, iconProportions, iconTexCoords, iconAngle, buttonMat);
|
||||
Widgets.DrawTextureFitted(rect, overlay, iconDrawScale * 0.85f, iconProportions, iconTexCoords, iconAngle, buttonMat);
|
||||
GUI.color = Color.white;
|
||||
if (Configurations.DrawEggOverlay) comp.DrawEggOverlay(rect, false);
|
||||
Rect progressRect = new Rect(rect.x + 2f, rect.y, rect.width - 4f, progressbarHeight);
|
||||
|
|
|
@ -53,7 +53,7 @@ namespace RJW_Menstruation
|
|||
if (pawn.kindDef?.race == pawn.def) return pawn.kindDef;
|
||||
return VariousDefOf.AllKinds.Find(kind => kind.race == pawn.def && kind.defName.Contains("Colonist")) ??
|
||||
VariousDefOf.AllKinds.Find(kind => kind.race == pawn.def) ??
|
||||
pawn.def.race?.AnyPawnKind ??
|
||||
pawn.RaceProps?.AnyPawnKind ??
|
||||
pawn.kindDef;
|
||||
}
|
||||
|
||||
|
@ -433,7 +433,7 @@ namespace RJW_Menstruation
|
|||
|
||||
}
|
||||
|
||||
public static float LerpMultiple(this float a, float b, float t, int num)
|
||||
public static float LerpMultiple(this float a, float b, float t, float num)
|
||||
{
|
||||
float tmult = Mathf.Pow(1 - t, num);
|
||||
return tmult * a + (1 - tmult) * b;
|
||||
|
|
|
@ -167,5 +167,10 @@ namespace RJW_Menstruation
|
|||
public static readonly HediffDef Hediff_Lactating_Permanent = DefDatabase<HediffDef>.GetNamedSilentFail("Lactating_Permanent");
|
||||
public static readonly HediffDef Hediff_Heavy_Lactating_Permanent = DefDatabase<HediffDef>.GetNamedSilentFail("Heavy_Lactating_Permanent");
|
||||
public static readonly JobDef Job_LactateSelf_MC = DefDatabase<JobDef>.GetNamedSilentFail("LactateSelf_MC");
|
||||
|
||||
// Defs from Sexperience Ideology
|
||||
public static readonly PreceptDef Pregnancy_Elevated = DefDatabase<PreceptDef>.GetNamedSilentFail("Pregnancy_Elevated");
|
||||
public static readonly PreceptDef Pregnancy_Holy = DefDatabase<PreceptDef>.GetNamedSilentFail("Pregnancy_Holy");
|
||||
public static readonly PreceptDef Pregnancy_Required = DefDatabase<PreceptDef>.GetNamedSilentFail("Pregnancy_Required");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Manifest>
|
||||
<identifier>RJW Menstruation</identifier>
|
||||
<version>1.0.8.9</version>
|
||||
<version>1.0.9.0</version>
|
||||
<dependencies>
|
||||
</dependencies>
|
||||
<incompatibleWith />
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
Version 1.0.9.0
|
||||
- Fix errors when opening the womb dialog of some low fertility pawns.
|
||||
- Updated Traditional Chinese translation by Hydrogen.
|
||||
- New options to update wombs more or less often, defaulting to every hour.
|
||||
- When using the sexperience-ideology mod, pawns with pro-pregnancy precepts will have thoughts more agreeable with potential pregnancies.
|
||||
- More generous egg allocation for newly spawned periodic ovulators.
|
||||
- Menstruation-related genes will now stay on females during initial pawn setup.
|
||||
|
||||
Version 1.0.8.9
|
||||
- Fix bug that sent pawns into menopause very early. Please use the recalculate ovary power dev action to restore lost eggs.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue