code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>

	<DesignatorComfortPrisoner.label>заключенный-блядь</DesignatorComfortPrisoner.label>
	<DesignatorComfortPrisoner.description>Обозначить заключенного как средство для сексуального удовлетворения всех желающих.</DesignatorComfortPrisoner.description>

	<rjw_vatgrown_sex_slave.label>Вырощенный(ая) секс рабыня</rjw_vatgrown_sex_slave.label>
	<rjw_vatgrown_sex_slave.description>NAME сделан скорее секс-машиной, чем человеком. На протяжении своего взросления на фабрике, HIS обучался(лась) социальным и сексуальным навыкам для того чтобы удовлетворять различные сексуальные приказы.</rjw_vatgrown_sex_slave.description>

	<rjw_feisty.label>Озлобленый нимфоман</rjw_feisty.label>
	<rjw_feisty.description>
		NAME прибывает в колонию как завоеватель, исследуя недавно присоединенную территорию. Вы пытаетесь сосредоточиться на своей работе, но HE не позволит вам.
		«Я слышал, что ты сказал обо мне!» HE обвиняет. Вы ничего не сказали об этом. HECAP это знает.
		"Хочешь сразиться?" HE бросает вызов. Вы уже знаете, что это означает: несколько минут игровой борьбы, а затем вы берете ЕГО, или, если вы колеблетесь, он берет вас. \n \n
		Хотя c NAME может быть трудно ужиться, вы поняли, насколько он практичней, чем другие.
		Вы объясняете HE: «Вот это, должно быть там» или «Эти люди пытаются убить нас, поэтому давай сначала убьем их». HECAP слушает и делает то, что нужно.
	</rjw_feisty.description>

	<rjw_curious.label>Любопытный нимфоман</rjw_curious.label>
	<rjw_curious.description>
		Поднимите защитную пластину и поместите привод в паз C. Выровняйте стержень вверх. Нет, этого не достаточно, все должно быть идельно. Теперь поместите чип JC-444 на место. \n
		Припаяйте оранжевый провод к выводу № 16 и полосатый провод к выводу №5. \n
		Внезапно, появляетя HE. Вы не удивлены, увидев NAME, вы просто не слышали как HE подкрался(лась). К этому ты уже привык. \n
		Вы продолжаете делать свою работу в тишине, когда HE нависает над вами, HIS большие глаза фиксируются на быстрых, ритмичных, расчетливых движениях ваших рук.
	</rjw_curious.description>

	<rjw_tender.label>Нежный нимфоман</rjw_tender.label>
	<rjw_tender.description>У NAME очаровательные глаза, его голос мягкий и сладкий. Благодаря своей предыдущей работе медсестры, HE очень хорош в ухаживании за людьми.</rjw_tender.description>

	<rjw_chatty.label>Нимфоман болтушка</rjw_chatty.label>
	<rjw_chatty.description>Не существует более болтливых людей, чем NAME. HECAP имеет гибкий язык, острый ум и горячие губы.</rjw_chatty.description>

	<rjw_broken.label>Сломаный нимфоман</rjw_broken.label>
	<rjw_broken.description>
		Возможно, NAME перенес некоторые ужасные вещи, он выглядит довольно истощенным, и никто не хочет разговаривать с HIM. \n
		HECAP немного живляется, глядя на некоторые вещи, похожие на стержни.
	</rjw_broken.description>

	<rjw_vatgrown_sex_slave.stringA>Секс Рабыня</rjw_vatgrown_sex_slave.stringA>
	<rjw_feisty.stringA>Нимфоман</rjw_feisty.stringA>
	<rjw_curious.stringA>Нимфоман</rjw_curious.stringA>
	<rjw_tender.stringA>Нимфоман</rjw_tender.stringA>
	<rjw_chatty.stringA>Нимфоман</rjw_chatty.stringA>
	<rjw_broken.stringA>Нимфоман</rjw_broken.stringA>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>

	<Armbinder.label>наручники</Armbinder.label>
	<Armbinder.description>Высокотехнологичные наручники. Они не позволяют использовать руки, тому кто их носит.
</Armbinder.description>
	<Armbinder.comps.2.useLabel>Надеть</Armbinder.comps.2.useLabel>

	<Gag.label>кляп</Gag.label>
	<Gag.description>Высокотехнологичный кляп. Не позволяет говорить, тому кто его носит.</Gag.description>
	<Gag.comps.2.useLabel>Надеть</Gag.comps.2.useLabel>

	<ChastityBelt.label>пояс верности</ChastityBelt.label>
	<ChastityBelt.description>Высокотехнологичный пояс верности. Не дает заниматься сексом и мастурбировать.</ChastityBelt.description>
	<ChastityBelt.comps.2.useLabel>Надеть</ChastityBelt.comps.2.useLabel>
</LanguageData>

repo_name: Eggs/rjw

license: mit


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>

	<ForceOffArmbinder.label>принудительно снять наручники</ForceOffArmbinder.label>
	<ForceOffArmbinder.description>Принудительно снимает наручники без ключа, нанося значительный ущерб пользователю.</ForceOffArmbinder.description>
	<ForceOffArmbinder.jobString>Принудительно снимает наручники.</ForceOffArmbinder.jobString>

	<ForceOffGag.label>принудительно снять кляп</ForceOffGag.label>
	<ForceOffGag.description>Принудительно снимает кляп без ключа, нанося значительный ущерб пользователю.</ForceOffGag.description>
	<ForceOffGag.jobString>Принудительно снимает кляп.</ForceOffGag.jobString>

	<ForceOffChastityBelt.label>принудительно снять пояс верности</ForceOffChastityBelt.label>
	<ForceOffChastityBelt.description>Принудительно снимает пояс верности без ключа, нанося значительный ущерб пользователю.</ForceOffChastityBelt.description>
	<ForceOffChastityBelt.jobString>Принудительно снимает пояс верности.</ForceOffChastityBelt.jobString>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>

	<HIV.label>ВИЧ</HIV.label>
	<HIV.description>
	ВИЧ состоит из двух частей: острой и хронической инфекции. Обе части проходят один и тот же путь, уменьшая фильтрацию крови инфицированного существа по мере увеличения их тяжести. Острая фаза прогрессирует быстро, но ее можно побороть иммунной системой существа, тогда как хроническая фаза прогрессирует очень медленно, но никогда не может быть излечена. Лечение может немного замедлять развитие болезни.
</HIV.description>

	<Herpes.label>герпес</Herpes.label>
	<Herpes.description>Герпес - неизлечимая, но не смертельная болезнь. Пораженные существа испытывают боль и зуд в пораженных частях тела. Лечение эффективно снижает интенсивность симптомов.</Herpes.description>

	<Warts.label>бородавки</Warts.label>
	<Warts.description>Генитальные бородавки неприглядные, вызывают зуд и жжение. Их легко лечить и они не могут стать причиной летального исхода.</Warts.description>

	<Syphilis.label>сифилис</Syphilis.label>
	<Syphilis.description>Сифилис - серьезное заболевание, которое поражает ум. Если его не лечить, это приводит к развращенным мыслям, проблемам с настроением, потенциальному постоянному повреждению мозга, печени и почек и, в конечном счете, смерти. Хорошей новостью является то, что ее легко победить путем надлежащего лечения.
	</Syphilis.description>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>

	<WildMode_name>Дикий мод</WildMode_name>
	<WildMode_desc>ЭКСПЕРЕМЕНТАЛЬНО. Нет правил для секса. Все ограничения сняты. Наслаждайтесь дикой стороной RimWorld.</WildMode_desc>
	<sexneed_decay_rate_name>Секс требует множитель ?распада? Sex need decay multiplier (%)</sexneed_decay_rate_name>
	<sexneed_decay_rate_desc>0% для отсутствия множителя.
1000000% для Rapeturnus Planet.
	</sexneed_decay_rate_desc>
	<NymphsJoin>Нимфоманы.</NymphsJoin>
	<NymphsJoin_desc>Позволяет нимфоманам присоединиться к колонии.</NymphsJoin_desc>
	<STD_FromFloors>Половое заболевание из окружения.</STD_FromFloors>
	<STD_FromFloors_desc>Существа могут подцепить половое заболевание от грязной окружающей среды.</STD_FromFloors_desc>
	<PrisonersBeating>Избивание при изнасиловании.</PrisonersBeating>
	<PrisonersBeating_desc>Насильники будут выбивать дурь из своих жертв.</PrisonersBeating_desc>
	<OffspringLookLikeTheirMother>Генетическое наследование (%)</OffspringLookLikeTheirMother>
	<OffspringLookLikeTheirMother_desc>100% означает что дети будут выглядеть точно так же как их матери. Установите 0% для случайного внешнего вида.

Возможные значения: 0 - 100%</OffspringLookLikeTheirMother_desc>
	<OffspringIsHuman>Наследование человеческого ДНК (%)</OffspringIsHuman>
	<OffspringIsHuman_desc>100% означает что все новорожденные будут людьми. 0% для случайного монстра.

Возможные значения: 0 - 100%</OffspringIsHuman_desc>
	<PregnantCoeffecientForHuman>Шанс оплодотворения человека (%)</PregnantCoeffecientForHuman>
	<PregnantCoeffecientForHuman_desc>Шанс оплодотворения человека в процентах.

Возможные значения: 0 - 100%
</PregnantCoeffecientForHuman_desc>
	<PregnantCoeffecientForAnimals>Шанс оплодотворения животного (%)</PregnantCoeffecientForAnimals>
	<PregnantCoeffecientForAnimals_desc>Шанс оплодотворения животного в процентах.

Возможные значения: 0 - 100%</PregnantCoeffecientForAnimals_desc>
	<UseParentMethod>Раса ребенка</UseParentMethod>
	<UseParentMethod_desc>Новорожденные будут той же расы, что и мать.</UseParentMethod_desc>
	<SexFreeForAllAge>Минимальный возраст свободного занятия сексом.</SexFreeForAllAge>
	<SexFreeForAllAge_desc>Существа младше этого возраста будут заниматься сексом только с существми разница в возрасте с которыми не больше 2 лет.</SexFreeForAllAge_desc>
	<SexMinimumAge>Минимальный возраст занятия сексом.</SexMinimumAge>
	<SexMinimumAge_desc>Существа младше этого возраста не будут заниматься сексом.</SexMinimumAge_desc>
	<NonFutaWomenRaping_MaxVulnerability>Девушки начинаю насиловать с (%)</NonFutaWomenRaping_MaxVulnerability>
	<NonFutaWomenRaping_MaxVulnerability_desc>Только женщины с восприимчивость ниже чем указанная, будут насиловать других.

 Для проверки статуса 'Восприимчивости' перейдите  'просмотреть информацию об объекте' > статус.

Возможные значения: 0 - 300%</NonFutaWomenRaping_MaxVulnerability_desc>
	<Rapee_MinVulnerability_human>Вероятность быть изнасилованным (%)</Rapee_MinVulnerability_human>
	<Rapee_MinVulnerability_human_desc>Люди восприимчивость которых выше чем это значение будут изнасилованы.

Для проверки статуса 'Восприимчивости' перейдите  'просмотреть информацию об объекте' > статус.

Возможные значения: 0 - 300%</Rapee_MinVulnerability_human_desc>
	<Rapee_MinVulnerability_animals>Вероятность быть изнасилованным животные (%)</Rapee_MinVulnerability_animals>
	<Rapee_MinVulnerability_animals_desc>Животные с восприимчивостью выше чем данная будут целями для изнасилования Зоофилами.

Для проверки статуса 'Восприимчивости' перейдите  'просмотреть информацию об объекте' > статус.

Возможные значения: 0 - 300%</Rapee_MinVulnerability_animals_desc>

	<ForWhoreUse>Для шлюх</ForWhoreUse>
	<WhoreBedFormat>Шлюха{0}</WhoreBedFormat>
	<CommandBedSetAsWhoreLabel>Для шлюх</CommandBedSetAsWhoreLabel>
	<CommandBedSetAsWhoreDesc>Это кровать для шлюх.</CommandBedSetAsWhoreDesc>

	<RJW_Opportunistic_Infection_Message>{0} развилась инфекция из-за ослабленной иммунной системы.</RJW_Opportunistic_Infection_Message>

	<RJW_Syphilis_Damage_Message>{0} получил {1} {2} постоянного урона из-за развивающейся {3} инфекции.</RJW_Syphilis_Damage_Message>

	<RJW_VisitorAcceptWhore>{0} принял предложение {1}.</RJW_VisitorAcceptWhore>
	<RJW_VisitorRejectWhore>{0} отклонил предложение {1}.</RJW_VisitorRejectWhore>

	<PawnCantRapeCP>Цель не достаточно здоровла или находится на запрещенной территории.</PawnCantRapeCP>
	<PawnCantRapeCP0>Существу не нужен секс, не здоров, не может насиловать.</PawnCantRapeCP0>
	<PawnCantRapeCP1>Существо не одно, или партнер рядом.</PawnCantRapeCP1>
	<PawnCantRapeCP2>Существо не зоофил, не может насиловать животных.</PawnCantRapeCP2>

	<AnalSexSucceeded> </AnalSexSucceeded>
	<AnalSexFailed> </AnalSexFailed>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "Bird"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "Bird"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "Bird"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>

		</value>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>

<Patch>
	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "BeetleLikeWithClaw"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.01</coverage>
				<depth>Inside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "BeetleLike"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.01</coverage>
				<depth>Inside</depth>

		</value>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithPaws"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithPaws"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithPaws"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithPawsAndTail"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithPawsAndTail"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithPawsAndTail"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHooves"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHooves"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHooves"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHoovesAndHump"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHoovesAndHump"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHoovesAndHump"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHoovesAndTusks"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHoovesAndTusks"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHoovesAndTusks"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHoovesTusksAndTrunk"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHoovesTusksAndTrunk"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHoovesTusksAndTrunk"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHoovesAndHorn"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHoovesAndHorn"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithHoovesAndHorn"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithClawsTailAndJowl"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithClawsTailAndJowl"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "QuadrupedAnimalWithClawsTailAndJowl"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "TurtleLike"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "TurtleLike"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "TurtleLike"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "Monkey"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "Monkey"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "Monkey"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>

		</value>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>

<Patch>
	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "Snake"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "Snake"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "Snake"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>

		</value>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "Human"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>
				<groups>

Torso

				</groups>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "Human"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.0</coverage>
				<height>Top</height>
				<depth>Outside</depth>
				<groups>

Torso

				</groups>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName = "Human"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>
				<groups>

Torso

				</groups>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName != "Human"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.02</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName != "Human"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/BodyDef[defName != "Human"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.01</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>*/HediffGiverSetDef[defName = "OrganicStandard"]/hediffGivers</xpath>
		<value>

				<hediff>DummyPrivates</hediff>
				<partsToAffect>

Genitals

				</partsToAffect>
				<canAffectAnyLivePart>false</canAffectAnyLivePart>
				<ageFractionChanceCurve>
					<points>

(0.00, 1.00)

					</points>
				</ageFractionChanceCurve>
				<averageSeverityPerDayBeforeGeneration>0.00</averageSeverityPerDayBeforeGeneration>

		</value>
	</Operation>

	<Operation Class="PatchOperationSequence">
		<success>Always</success>
		<operations>

				<xpath>*/ThingDef[thingClass = "AIPawn.AIPawn"]</xpath>
				<success>Invert</success>

				<xpath>*/ThingDef[thingClass = "AIPawn.AIPawn"]/race</xpath>
				<value>
					<hediffGiverSets>

DummyPrivatesForModdedPawnsOnBirthday

					</hediffGiverSets>
				</value>

		</operations>
	</Operation>
</Patch>


code:
using Verse;

namespace rjw
{
	public class config : Def
	{
		// Feature Toggles
		public bool comfort_prisoners_enabled;
		public bool colonists_can_be_comfort_prisoners;
		public bool cum_enabled;
		//public bool rape_me_sticky_enabled;
		public bool sounds_enabled;
		public bool stds_enabled;
		public bool bondage_gear_enabled;
		public bool nymph_joiners_enabled;
		//public bool whore_beds_enabled;
		public bool necro_enabled;
		public bool random_rape_enabled;
		public bool always_accept_whores;
		public bool nymphs_always_JoinInBed;
		public bool zoophis_always_rape;
		public bool rapists_always_rape;
		public bool pawns_always_do_fapping;
		public bool pawns_always_rapeCP;
		public bool whores_always_findjob;

		// Display Toggles
		public bool show_regular_dick_and_vag;

		// STD config
		public bool std_show_roll_to_catch;

		public float std_min_severity_to_pitch;
		public float std_env_pitch_cleanliness_exaggeration;
		public float std_env_pitch_dirtiness_exaggeration;
		public float std_outdoor_cleanliness;

		// Age Config
		//public int sex_free_for_all_age;
		//public int sex_minimum_age;

		public float minor_pain_threshold;	        // 0.3
		public float significant_pain_threshold;	// 0.6
		public float extreme_pain_threshold;		// 0.95
		public float base_chance_to_hit_prisoner;	// 50
		public int min_ticks_between_hits;			// 500
		public int max_ticks_between_hits;			// 700

		public float max_nymph_fraction;
		public float opp_inf_initial_immunity;
		public float comfort_prisoner_rape_mtbh_mul;
		public float whore_mtbh_mul;
		public float nymph_spawn_with_std_mul;
		//public float chance_to_rim;

		public float fertility_endAge_male;
		public float fertility_endAge_female;
	}
}


code:
//using System;
//using RimWorld;
//using UnityEngine;
//using Verse;

//namespace rjw
//{
//	//I have no idea what this shit means, I'm just reusing the comfort designator
//	public class Designator_Breed : Designator_ComfortPrisoner
//	{
//		//private static readonly MiscTranslationDef MTdef = DefDatabase<MiscTranslationDef>.GetNamed("ForBreeding");
//		public Designator_Breed()
//		{
//			//Log.Message("RJW breed designator constructor" );
//			//Log.Message("object is null " + (this ==null));
//			//Log.Message("RJW breed designator constructor" + MTdef);
//			defaultLabel = "ForBreeding".Translate();
//			defaultDesc = "ForBreedingDesc".Translate();
//			//Log.Message("RJW breed designator constructor pre icon");
//			icon = ContentFinder<Texture2D>.Get("UI/Commands/BreedingBuisiness", true);
//			// TODO: Can this be null?
//			hotKey = KeyBindingDefOf.Misc12;
//			//Log.Message("RJW breed designator constructor exit");
//		}

//		public override AcceptanceReport CanDesignateThing(Thing t)
//		{
//			if (t == null) { return false; };
//			var pawn = t as Pawn;
//			if (pawn == null) { return false; }//fuck this
//			var enabled = Mod_Settings.cross_species_breeding;
//			var marked = BreederHelper.is_designated(pawn);
//			return (enabled && !pawn.Dead && pawn.IsPrisonerOfColony && !marked && xxx.can_get_raped(pawn));
//		}
//		public override void DesignateThing(Thing t)
//		{
//			DesignationDef designation_def = BreederHelper.designationDef;

//			base.Map.designationManager.AddDesignation(new Designation(t, designation_def));
//		}
//	}
//}


code:
////This code provided the "comfort prisoner" button functionality for very long time
////Now it lays here in well-deserved rest.
////It was a good designator, its code may still be used as an example for something else
//using System;
//using RimWorld;
//using UnityEngine;
//using Verse;

//namespace rjw
//{
//	public abstract class Designator_Toggle : Command
//	{
//		public Designator_Toggle()
//		{
//			this.activateSound = SoundDefOf.SelectDesignator;
//		}

//		public Func<bool> isActive;

//		public Action toggleAction;

//		public SoundDef turnOnSound = SoundDefOf.CheckboxTurnedOn;

//		public SoundDef turnOffSound = SoundDefOf.CheckboxTurnedOff;

//		public override SoundDef CurActivateSound
//		{
//			get
//			{
//				if (this.isActive())
//				{
//					return this.turnOffSound;
//				}
//				return this.turnOnSound;
//			}
//		}

//		public override void ProcessInput(Event ev)
//		{
//			base.ProcessInput(ev);
//			this.toggleAction();
//		}

//		public override GizmoResult GizmoOnGUI(Vector2 loc)
//		{
//			GizmoResult result = base.GizmoOnGUI(loc);
//			Rect rect = new Rect(loc.x, loc.y, this.Width, 75f);
//			Rect position = new Rect(rect.x + rect.width - 24f, rect.y, 24f, 24f);
//			Texture2D image = (!this.isActive()) ? Widgets.CheckboxOffTex : Widgets.CheckboxOnTex;
//			GUI.DrawTexture(position, image);
//			return result;
//		}

//		public override bool InheritInteractionsFrom(Gizmo other)
//		{
//			Command_Toggle command_Toggle = other as Command_Toggle;
//			return command_Toggle != null && command_Toggle.isActive() == this.isActive();
//		}
//	}

//	public class Designator_ComfortPrisoner : Designator
//	{
//		private static readonly MiscTranslationDef MTdef = DefDatabase<MiscTranslationDef>.GetNamedSilentFail("DesignatorComfortPrisoner");

//		public Designator_ComfortPrisoner()
//		{
//			defaultLabel = MTdef.label;
//			defaultDesc = MTdef.description;

//			icon = ContentFinder<Texture2D>.Get("UI/Commands/comfort_prisoner_true");

//			// TODO: Can this be null?
//			hotKey = KeyBindingDefOf.Misc12;

//			// These don't matter but set them just in case
//			// soundDragSustain = SoundDefOf.DesignateDragStandard;
//			// soundDragChanged = SoundDefOf.DesignateDragStandardChanged;
//			// useMouseIcon = false;
//			// soundSucceeded = SoundDefOf.DesignateClaim;
//		}

//		public Func<bool> isActive;

//		public override GizmoResult GizmoOnGUI(Vector2 loc)
//		{
//			GizmoResult result = base.GizmoOnGUI(loc);
//			Rect rect = new Rect(loc.x, loc.y, this.Width, 75f);
//			Rect position = new Rect(rect.x + rect.width - 24f, rect.y, 24f, 24f);
//			Texture2D image = (!this.isActive()) ? Widgets.CheckboxOffTex : Widgets.CheckboxOnTex;
//			GUI.DrawTexture(position, image);
//			return result;
//		}

//		public override AcceptanceReport CanDesignateCell(IntVec3 c)
//		{
//			return false;
//		}

//		public override void DesignateSingleCell(IntVec3 c)
//		{
//		}

//		public override AcceptanceReport CanDesignateThing(Thing t)
//		{
//			var p = t as Pawn;
//			//return (p != null) && (p.IsPrisonerOfColony || p.IsColonist || p.Faction == Faction.OfPlayer) && xxx.can_get_raped(p) && (!comfort_prisoners.is_designated(p));
//			if (p != null)
//			{
//				//Log.Message("[RJW]CandDesignateThing run on" + p);
//				if (p.IsPrisonerOfColony)
//				{
//					defaultLabel = "comfort prisoner"; //TODO: adds translationdef.
//				}
//				else if (xxx.is_animal(p))
//				{
//					defaultLabel = "comfort animal";
//				}
//				else
//				{
//					defaultLabel = "comfort colonist";
//				}
//				//Log.Message("[RJW]CandDesignateThing label is " + defaultLabel);

//			}
//			return ((p != null) && (!comfort_prisoners.is_designated(p)) && ((p.IsColonist || p.Faction == Faction.OfPlayer) || (xxx.is_animal(p)) || (p.IsPrisonerOfColony))); //TODO: Rape target button?
//		}

//		public override void DesignateThing(Thing t)
//		{
//			DesignationDef designation_def = comfort_prisoners.designation_def_no_sticky;
//			if (xxx.config.rape_me_sticky_enabled)
//			{
//				designation_def = comfort_prisoners.designation_def;
//				//comfort_prisoners.designation_def = comfort_prisoners.designation_def_no_sticky;
//			}

//			base.Map.designationManager.AddDesignation(new Designation(t, designation_def));
//		}
//	}
//}


code:
//unused anymore
//using System.Collections.Generic;
//using RimWorld;
//using Verse;

//namespace rjw
//{
//	public class Recipe_InstallBreasts_Female : Recipe_InstallArtificialBodyPart
//	{
//		public override IEnumerable<BodyPartRecord> GetPartsToApplyOn(Pawn p, RecipeDef r)
//		{
//			var gen_blo = Genital_Helper.breasts_blocked(p);
//			if (p.gender == Gender.Female)
//			{
//				foreach (var part in base.GetPartsToApplyOn(p, r))
//					if ((!gen_blo) || (part != xxx.breasts))
//						yield return part;
//			}
//		}
//	}
//}


code:
//not used anymore
//using System.Collections.Generic;
//using RimWorld;
//using Verse;

//namespace rjw
//{
//	public class Recipe_InstallPrivates_Female : Recipe_InstallArtificialBodyPart
//	{
//		public override IEnumerable<BodyPartRecord> GetPartsToApplyOn(Pawn p, RecipeDef r)
//		{
//			var gen_blo = Genital_Helper.genitals_blocked(p);
//			if (p.gender == Gender.Female)
//			{
//				foreach (var part in base.GetPartsToApplyOn(p, r))
//					if ((!gen_blo) || (part != xxx.genitals))
//						yield return part;
//			}
//		}
//	}
//}


code:
//these are not used anymore
//using System.Collections.Generic;
//using RimWorld;
//using Verse;

//namespace rjw
//{
//	public class Recipe_InstallPrivates_Male : Recipe_InstallArtificialBodyPart
//	{
//		public override IEnumerable<BodyPartRecord> GetPartsToApplyOn(Pawn p, RecipeDef r)
//		{
//			var gen_blo = Genital_Helper.genitals_blocked(p);
//			if (p.gender == Gender.Male)
//			{
//				foreach (var part in base.GetPartsToApplyOn(p, r))
//					if ((!gen_blo) || (part != xxx.genitals))
//						yield return part;
//			}
//			else if (xxx.is_female(p))  //This allows futas
//			{
//				foreach (var part in base.GetPartsToApplyOn(p, r))
//					if ((!gen_blo) || (part != xxx.genitals))
//						yield return part;
//			}
//		}
//	}
//}


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>

	<Operation Class="PatchOperationSequence">
		<success>Always</success>
		<operations>

				<xpath>Defs/DutyDef[defName="BI_QueenDuty"]</xpath>

				<xpath>Defs/DutyDef[defName="BI_QueenDuty"]/thinkNode/subNodes/li[@Class="ThinkNode_ChancePerHour_Constant"]</xpath>
				<value>

				</value>

				<xpath>Defs/DutyDef[defName="BI_MegaspiderDuty"]/thinkNode/subNodes/li[@Class="ThinkNode_ChancePerHour_Constant"]</xpath>
				<value>

				</value>

				<xpath>Defs/DutyDef[defName="BI_SpelopedeDuty"]/thinkNode/subNodes/li[@Class="ThinkNode_ChancePerHour_Constant"]</xpath>
				<value>

				</value>

				<xpath>Defs/DutyDef[defName="BI_MegascarabDuty"]/thinkNode/subNodes/li[@Class="ThinkNode_ChancePerHour_Constant"]</xpath>
				<value>

				</value>

		</operations>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>

	<Operation Class="PatchOperationAdd">
		<xpath>Defs/BodyDef[defName != "Human" and defName != "MechanicalCentipede" and defName != "Scyther" and defName != "Lancer"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.005</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>
				<groups>

Torso

				</groups>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>Defs/BodyDef[defName != "Human" and defName != "MechanicalCentipede" and defName != "Scyther" and defName != "Lancer"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>
				<groups>

Torso

				</groups>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>Defs/BodyDef[defName != "Human" and defName != "MechanicalCentipede" and defName != "Scyther" and defName != "Lancer"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.001</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>
				<groups>

Torso

				</groups>

		</value>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>

	<Operation Class="PatchOperationAdd">
		<xpath>Defs/BodyDef[defName = "Human"]/corePart/parts</xpath>
		<value>

				<def>Genitals</def>
				<coverage>0.005</coverage>
				<height>Bottom</height>
				<depth>Outside</depth>
				<groups>

Torso

				</groups>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>Defs/BodyDef[defName = "Human"]/corePart/parts</xpath>
		<value>

				<def>Chest</def>
				<coverage>0.02</coverage>
				<height>Top</height>
				<depth>Outside</depth>
				<groups>

Torso

				</groups>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>Defs/BodyDef[defName = "Human"]/corePart/parts</xpath>
		<value>

				<def>Anus</def>
				<coverage>0.001</coverage>
				<height>Bottom</height>
				<depth>Inside</depth>
				<groups>

Torso

				</groups>

		</value>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>

<Patch>
	<Operation Class="PatchOperationAdd">
		<xpath>Defs/BodyDef[defName = "MechanicalCentipede"]/corePart/parts/li[def = "MechanicalCentipedeBodySecondRing"]/parts</xpath>
		<value>

				<def>MechGenitals</def>
				<coverage>0.001</coverage>
				<depth>Inside</depth>

		</value>
	</Operation>
	<Operation Class="PatchOperationAdd">
		<xpath>Defs/BodyDef[defName = "Scyther"]/corePart/parts</xpath>
		<value>

				<def>MechGenitals</def>
				<coverage>0.001</coverage>
				<depth>Inside</depth>

		</value>
	</Operation>
	<Operation Class="PatchOperationAdd">
		<xpath>Defs/BodyDef[defName = "Lancer"]/corePart/parts</xpath>
		<value>

				<def>MechGenitals</def>
				<coverage>0.001</coverage>
				<depth>Inside</depth>

		</value>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>

</Patch>


code:
<Patch>
	<Operation Class="PatchOperationSequence">
		<success>Always</success>
		<operations>

				<xpath>Defs/ThoughtDef[defName="HarmedMe"]/nullifyingTraits</xpath>
				<value>

Masochist

				</value>

		</operations>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
	<Operation Class="PatchOperationSequence">
		<success>Always</success>
		<operations>

				<xpath>Defs/TraitDef[defName="Prude"]</xpath>

				<xpath>Defs/TraitDef[defName="Nymphomaniac"]/conflictingTraits</xpath>
				<value>

Prude

				</value>

				<xpath>Defs/TraitDef[defName="Prude"]/conflictingTraits</xpath>
				<value>

Nymphomaniac

				</value>

				<xpath>Defs/TraitDef[defName="Prude"]/degreeDatas/li</xpath>
				<value>
					<statOffsets>
						<SexFrequency>-0.3</SexFrequency>
					</statOffsets>
				</value>

		</operations>
	</Operation>

	<Operation Class="PatchOperationSequence">
		<success>Always</success>
		<operations>

				<xpath>Defs/TraitDef[defName="Faithful"]</xpath>

				<xpath>Defs/TraitDef[defName="Nymphomaniac"]/conflictingTraits</xpath>
				<value>

Faithful

				</value>

				<xpath>Defs/TraitDef[defName="Faithful"]/conflictingTraits</xpath>
				<value>

Nymphomaniac

				</value>

		</operations>
	</Operation>

	<Operation Class="PatchOperationConditional">
		<xpath>Defs/TraitDef[defName="Nimble"]/degreeDatas/li/statOffsets</xpath>
		<nomatch Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="Nimble"]/degreeDatas/li</xpath>
			<value>
				<statOffsets>
					<SexAbility>0.2</SexAbility>
					<Vulnerability>-0.1</Vulnerability>
				</statOffsets>
			</value>
		</nomatch>
		<match Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="Nimble"]/degreeDatas/li/statOffsets</xpath>
			<value>
				<SexAbility>0.2</SexAbility>
				<Vulnerability>-0.1</Vulnerability>
			</value>
		</match>
	</Operation>

	<Operation Class="PatchOperationConditional">
		<xpath>Defs/TraitDef[defName="Bloodlust"]/degreeDatas/li/statOffsets</xpath>
		<nomatch Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="Bloodlust"]/degreeDatas/li</xpath>
			<value>
				<statOffsets>
					<Vulnerability>-0.1</Vulnerability>
				</statOffsets>
			</value>
		</nomatch>
		<match Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="Bloodlust"]/degreeDatas/li/statOffsets</xpath>
			<value>
				<Vulnerability>-0.1</Vulnerability>
			</value>
		</match>
	</Operation>

	<Operation Class="PatchOperationConditional">
		<xpath>Defs/TraitDef[defName="Tough"]/degreeDatas/li/statOffsets</xpath>
		<nomatch Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="Tough"]/degreeDatas/li</xpath>
			<value>
				<statOffsets>
					<Vulnerability>-0.4</Vulnerability>
				</statOffsets>
			</value>
		</nomatch>
		<match Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="Tough"]/degreeDatas/li/statOffsets</xpath>
			<value>
				<Vulnerability>-0.4</Vulnerability>
			</value>
		</match>
	</Operation>

	<Operation Class="PatchOperationConditional">
		<xpath>Defs/TraitDef[defName="TooSmart"]/degreeDatas/li/statOffsets</xpath>
		<nomatch Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="TooSmart"]/degreeDatas/li</xpath>
			<value>
				<statOffsets>
					<Vulnerability>-0.3</Vulnerability>
				</statOffsets>
			</value>
		</nomatch>
		<match Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="TooSmart"]/degreeDatas/li/statOffsets</xpath>
			<value>
				<Vulnerability>-0.3</Vulnerability>
			</value>
		</match>
	</Operation>

	<Operation Class="PatchOperationConditional">
		<xpath>Defs/TraitDef[defName="Wimp"]/degreeDatas/li/statOffsets</xpath>
		<nomatch Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="Wimp"]/degreeDatas/li</xpath>
			<value>
				<statOffsets>
					<Vulnerability>0.2</Vulnerability>
				</statOffsets>
			</value>
		</nomatch>
		<match Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="Wimp"]/degreeDatas/li/statOffsets</xpath>
			<value>
				<Vulnerability>0.2</Vulnerability>
			</value>
		</match>
	</Operation>

	<Operation Class="PatchOperationConditional">
		<xpath>Defs/TraitDef[defName="Masochist"]/degreeDatas/li/statOffsets</xpath>
		<nomatch Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="Masochist"]/degreeDatas/li</xpath>
			<value>
				<statOffsets>
					<Vulnerability>0.3</Vulnerability>
				</statOffsets>
			</value>
		</nomatch>
		<match Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="Masochist"]/degreeDatas/li/statOffsets</xpath>
			<value>
				<Vulnerability>0.3</Vulnerability>
			</value>
		</match>
	</Operation>

	<Operation Class="PatchOperationConditional">
		<xpath>Defs/TraitDef[defName="Ascetic"]/degreeDatas/li/statOffsets</xpath>
		<nomatch Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="Ascetic"]/degreeDatas/li</xpath>
			<value>
				<statOffsets>
					<SexFrequency>-0.3</SexFrequency>
				</statOffsets>
			</value>
		</nomatch>
		<match Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="Ascetic"]/degreeDatas/li/statOffsets</xpath>
			<value>
				<SexFrequency>-0.3</SexFrequency>
			</value>
		</match>
	</Operation>

	<Operation Class="PatchOperationConditional">
		<xpath>Defs/TraitDef[defName="BodyPurist"]/degreeDatas/li/statOffsets</xpath>
		<nomatch Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="BodyPurist"]/degreeDatas/li</xpath>
			<value>
				<statOffsets>
					<SexFrequency>-0.1</SexFrequency>
				</statOffsets>
			</value>
		</nomatch>
		<match Class="PatchOperationAdd">
			<xpath>Defs/TraitDef[defName="BodyPurist"]/degreeDatas/li/statOffsets</xpath>
			<value>
				<SexFrequency>-0.1</SexFrequency>
			</value>
		</match>
	</Operation>

	<Operation Class="PatchOperationSequence">
		<success>Always</success>
		<operations>

				<xpath>Defs/TraitDef[defName="Asexual"]</xpath>

				<xpath>Defs/TraitDef[defName="Necrophiliac"]/conflictingTraits</xpath>
				<value>

Asexual

				</value>

				<xpath>Defs/TraitDef[defName="Nymphomaniac"]/conflictingTraits</xpath>
				<value>

Asexual

				</value>

				<xpath>Defs/TraitDef[defName="Rapist"]/conflictingTraits</xpath>
				<value>

Asexual

				</value>

				<xpath>Defs/TraitDef[defName="Zoophile"]/conflictingTraits</xpath>
				<value>

Asexual

				</value>

				<xpath>Defs/TraitDef[defName="Asexual"]/conflictingTraits</xpath>
				<value>

Necrophiliac

Nymphomaniac

Rapist

Zoophile

				</value>

		</operations>
	</Operation>
</Patch>


code:
<Patch>
	<Operation Class="PatchOperationSequence">
		<success>Always</success>
		<operations>

				<xpath>Defs/ThoughtDef[defName="ObservedLayingCorpse"]/nullifyingTraits</xpath>
				<value>

Necrophiliac

				</value>

				<xpath>Defs/ThoughtDef[defName="ObservedLayingRottingCorpse"]/nullifyingTraits</xpath>
				<value>

Necrophiliac

				</value>

		</operations>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>

	<Operation Class="PatchOperationAdd">
		<xpath>Defs/ThingDef[@Name="AnimalThingBase"]/recipes</xpath>
		<value>

DeterminePregnancy

RJW_AbortionHuman

RJW_AbortionBeast

RJW_AbortionMech

RJW_HackMech

RJW_RemoveRestraints

RJW_RemoveCocoon

		</value>
	</Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
  <Operation Class="PatchOperationAdd">
    <xpath>Defs/RulePackDef[defName = "GlobalUtility"]/include</xpath>
    <value>

TalkTopicsSex

    </value>
  </Operation>

  <Operation Class="PatchOperationAdd">
    <xpath>Defs/InteractionDef[defName = "DeepTalk"]/logRulesInitiator/rulesStrings</xpath>
    <value>

subject(p=0.24)->[TalkTopicSex]

    </value>
  </Operation>

  <Operation Class="PatchOperationAdd">
    <xpath>Defs/InteractionDef[defName = "Chitchat"]/logRulesInitiator/rulesStrings</xpath>
    <value>

r_logentry(p=0.12)->[INITIATOR_nameDef] and [RECIPIENT_nameDef] [talkedabout] [TalkTopicSex].

r_logentry(p=0.12)->[INITIATOR_nameDef] [talkedabout] [TalkTopicSex] with [RECIPIENT_nameDef].

r_logentry(p=0.24)->[INITIATOR_nameDef] [commentedabout] [TalkTopicSex] to [RECIPIENT_nameDef].

    </value>
  </Operation>
</Patch>


code:
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
	<Operation Class="PatchOperationInsert">
		<xpath>Defs/DutyDef[defName = "AssaultColony"]/thinkNode/subNodes/li[@Class="JobGiver_AIFightEnemies"]</xpath>
		<value>

		</value>
	</Operation>
	<Operation Class="PatchOperationInsert">
		<xpath>Defs/DutyDef[defName = "AssaultColony"]/thinkNode/subNodes/li[@Class="JobGiver_AITrashColonyClose"]</xpath>
		<value>

		</value>
	</Operation>
	<Operation Class="PatchOperationInsert">
		<xpath>Defs/DutyDef[defName = "Sapper"]/thinkNode/subNodes/li[@Class="JobGiver_AIFightEnemies"]</xpath>
		<value>

		</value>
	</Operation>
	<Operation Class="PatchOperationInsert">
		<xpath>Defs/DutyDef[defName = "Defend"]/thinkNode/subNodes/li[@Class="ThinkNode_ForbidOutsideFlagRadius"]</xpath>
		<value>

		</value>
	</Operation>
	<Operation Class="PatchOperationInsert">
		<xpath>Defs/DutyDef[defName = "DefendBase"]/thinkNode/subNodes/li[@Class="JobGiver_AIDefendPoint"]</xpath>
		<value>

		</value>
	</Operation>
	<Operation Class="PatchOperationInsert">
		<xpath>Defs/DutyDef[defName = "HuntEnemiesIndividual"]/thinkNode/subNodes/li[@Class="JobGiver_AIFightEnemies"]</xpath>
		<value>

		</value>
	</Operation>
	<Operation Class="PatchOperationInsert">
		<xpath>Defs/DutyDef[defName = "DefendAndExpandHive"]/thinkNode/subNodes/li[@Class="ThinkNode_Tagger"]</xpath>
		<value>

		</value>
	</Operation>
	<Operation Class="PatchOperationInsert">
		<xpath>Defs/DutyDef[defName = "DefendBase"]/thinkNode/subNodes/li[@Class="ThinkNode_ForbidOutsideFlagRadius"]/subNodes/li[@Class="ThinkNode_Subtree"]</xpath>
		<value>

		</value>
	</Operation>
	<Operation Class="PatchOperationInsert">
		<xpath>Defs/ThinkTreeDef[defName="MentalStateNonCritical"]/thinkRoot[@Class="ThinkNode_Tagger"]/subNodes/li[stateClass="MentalState_Manhunter"]/subNodes/li[@Class="ThinkNode_Priority"]/subNodes/li[@Class="JobGiver_Manhunter"]</xpath>

		<value>

		</value>
	</Operation>

	<Operation Class="PatchOperationAdd">
		<xpath>Defs/ThinkTreeDef[defName="MentalStateCritical"]/thinkRoot[@Class="ThinkNode_Tagger"]/subNodes</xpath>
		<value>

				<state>RandomRape</state>
				<subNodes>

						<need>Rest</need>
						<threshold>0.05</threshold>
						<invert>true</invert>
						<subNodes>

						</subNodes>

						<minPriority>0.5</minPriority>
						<subNodes>

								<subNodes>

								</subNodes>

						</subNodes>

				</subNodes>

		</value>
	</Operation>
</Patch>


code:
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("RimJobWorld")]
[assembly: AssemblyDescription("Adult mod for Rimworld")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Community Project")]
[assembly: AssemblyProduct("RimJobWorld")]
[assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("c2825019-7f0b-456d-85a3-479c1a2a8805")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
[assembly: AssemblyVersion("1.0.0.0")]


code:
And why would you read me?

You can support current Dev(Me) here:
https://www.patreon.com/Ed86

Mod git:
https://gitgud.io/Ed86/rjw

Discord:
https://discord.gg/CXwHhv8

LoversLab:
https://www.loverslab.com/files/file/7257-rimjobworld/

Requirements:
Hugslib ([Steam](https://steamcommunity.com/sharedfiles/filedetails/?id=818773962)) ([GitHub](https://github.com/UnlimitedHugs/RimworldHugsLib))

Installation:
(if updating - Delete all files from previous RJW versions)
Unpack the the content from the .7z into "...steam/steamapps/common/rimworld/mods/RJW", you will see RimJobWorld.Main.csproj
Start Game
Activate mod & the other required mods
Restart game

Load Order:
-Rimworld Core (that's the game)
--Hugslib
---your mods
--RimJobWorld
---addons for RimJobWorld

Contibuting:
use TABS not SPACES for xml/cs, please?
do comments in code for other people

P.S.
im not a pro C# programmer or git user, so i might do weird stuff ;)


code:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{22F82FFF-8BD4-4CEE-9F22-C7DA71281E72}</ProjectGuid>
    <OutputType>Library</OutputType>
    <NoStandardLibraries>false</NoStandardLibraries>
    <AssemblyName>RJW</AssemblyName>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkProfile />
    <ShouldCreateLogs>True</ShouldCreateLogs>
    <AdvancedSettingsExpanded>True</AdvancedSettingsExpanded>
    <UpdateAssemblyVersion>True</UpdateAssemblyVersion>
    <UpdateAssemblyFileVersion>True</UpdateAssemblyFileVersion>
    <UpdateAssemblyInfoVersion>True</UpdateAssemblyInfoVersion>
    <AssemblyVersionSettings>None.None.IncrementOnDemand.Increment</AssemblyVersionSettings>
    <AssemblyFileVersionSettings>None.None.IncrementOnDemand.None</AssemblyFileVersionSettings>
    <AssemblyInfoVersionSettings>None.None.IncrementOnDemand.None</AssemblyInfoVersionSettings>
    <PrimaryVersionType>AssemblyVersionAttribute</PrimaryVersionType>
    <AssemblyVersion>1.6.0.493</AssemblyVersion>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>Assemblies\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <FileAlignment>4096</FileAlignment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>none</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>Assemblies\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <LangVersion>latest</LangVersion>
  </PropertyGroup>
  <PropertyGroup>
    <RootNamespace>rjw</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="Source\Common\CondomUtility.cs" />
    <Compile Include="Source\Common\Data\DesignatorsData.cs" />
    <Compile Include="Source\Common\Data\RaceGroupDef.cs" />
    <Compile Include="Source\Common\Data\RaceTag.cs" />
    <Compile Include="Source\Common\Helpers\BreastSize_Helper.cs" />
    <Compile Include="Source\Common\Data\PawnData.cs" />
    <Compile Include="Source\Common\Helpers\HediffHelper.cs" />
    <Compile Include="Source\Common\Helpers\RaceGroupDef_Helper.cs" />
    <Compile Include="Source\Common\Helpers\Sexualizer.cs" />
    <Compile Include="Source\Common\Helpers\SexPartAdder.cs" />
    <Compile Include="Source\Common\Logger.cs" />
    <Compile Include="Source\Common\PawnExtensions.cs" />
    <Compile Include="Source\Common\SexAppraiser.cs" />
    <Compile Include="Source\Common\SexPartType.cs" />
    <Compile Include="Source\Common\TraitComparer.cs" />
    <Compile Include="Source\Comps\Orientation.cs" />
    <Compile Include="Source\Comps\QuirkAdder.cs" />
    <Compile Include="Source\Comps\SexProps.cs" />
    <Compile Include="Source\Comps\Quirk.cs" />
    <Compile Include="Source\Designators\Breeder.cs" />
    <Compile Include="Source\Designators\Breedee.cs" />
    <Compile Include="Source\Designators\Comfort.cs" />
    <Compile Include="Source\Designators\Hero.cs" />
    <Compile Include="Source\Designators\Milking.cs" />
    <Compile Include="Source\Designators\Utility.cs" />
    <Compile Include="Source\Designators\Service.cs" />
    <Compile Include="Source\Harmony\Patch_PawnGenerator_GenerateNewPawnInternal.cs" />
    <Compile Include="Source\Harmony\patch_races.cs" />
    <Compile Include="Source\Harmony\patch_selector.cs" />
    <Compile Include="Source\Harmony\patch_surgery.cs" />
    <Compile Include="Source\Harmony\patch_ui_hero.cs" />
    <Compile Include="Source\Harmony\patch_ui_rjw_buttons.cs" />
    <Compile Include="Source\Harmony\SocialCardUtilityPatch.cs" />
    <Compile Include="Source\Hediffs\Hediff_PartBase.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_Sex.cs" />
    <Compile Include="Source\MainTab\PawnColumnWorker_WhoreExperience.cs" />
    <Compile Include="Source\Modules\Androids\AndroidsCompatibility.cs" />
    <Compile Include="Source\Modules\Bondage\bondage_gear.cs" />
    <Compile Include="Source\Common\Helpers\Breeder_Helper.cs" />
    <Compile Include="Source\Modules\Multiplayer\Multiplayer.cs" />
    <Compile Include="Source\Modules\Pregnancy\Hediffs\RJWAssociatedHediffAttribute.cs" />
    <Compile Include="Source\Modules\SemenOverlay\BukkakeContent.cs" />
    <Compile Include="Source\Modules\STD\std_def.cs" />
    <Compile Include="Source\Modules\STD\std_spreader.cs" />
    <Compile Include="Source\Modules\STD\std_updater.cs" />
    <Compile Include="Source\Settings\config.cs" />
    <Compile Include="Source\Common\CORE_EXPOSED\CORE_EXPOSED.cs" />
    <Compile Include="Source\Common\Data\DataStore.cs" />
    <Compile Include="Source\Common\Helpers\Gender_Helper.cs" />
    <Compile Include="Source\Common\Helpers\Genital_Helper.cs" />
    <Compile Include="Source\Common\MapCom_Injector.cs" />
    <Compile Include="Source\Common\MiscTranslationDef.cs" />
    <Compile Include="Source\Common\Data\ModData.cs" />
    <Compile Include="Source\Modules\Pregnancy\Pregnancy_Helper.cs" />
    <Compile Include="Source\Modules\SemenOverlay\SemenHelper.cs" />
    <Compile Include="Source\Common\Helpers\SexUtility.cs" />
    <Compile Include="Source\Modules\STD\std.cs" />
    <Compile Include="Source\Common\Data\StringListDef.cs" />
    <Compile Include="Source\Common\Unprivater.cs" />
    <Compile Include="Source\Modules\Whoring\Whoring_Helper.cs" />
    <Compile Include="Source\Common\xxx.cs" />
    <Compile Include="Source\Comps\CompAdder.cs" />
    <Compile Include="Source\Modules\Bondage\Comps\CompBondageGear.cs" />
    <Compile Include="Source\Modules\Bondage\Comps\CompGetBondageGear.cs" />
    <Compile Include="Source\Modules\Bondage\Comps\CompHoloCryptoStamped.cs" />
    <Compile Include="Source\Comps\CompProperties_RJW.cs" />
    <Compile Include="Source\Comps\CompRJW.cs" />
    <Compile Include="Source\Modules\Bondage\Comps\CompStampedApparelKey.cs" />
    <Compile Include="Source\Modules\Bondage\Comps\CompUnlockBondageGear.cs" />
    <Compile Include="Source\Modules\SemenOverlay\DefOf\RJW_HediffDefOf.cs" />
    <Compile Include="Source\Modules\SemenOverlay\DefOf\RJW_JobDefOf.cs" />
    <Compile Include="Source\Designators\_RJWdesignationsWidget.cs" />
    <Compile Include="Source\Harmony\First.cs" />
    <Compile Include="Source\Harmony\patch_ABF.cs" />
    <Compile Include="Source\Harmony\Patch_PawnGenerator_GenerateTraits.cs" />
    <Compile Include="Source\Harmony\patch_bondage_gear.cs" />
    <Compile Include="Source\Harmony\patch_DubsBadHygiene.cs" />
    <Compile Include="Source\Harmony\patch_lovin.cs" />
    <Compile Include="Source\Harmony\patch_pregnancy.cs" />
    <Compile Include="Source\Harmony\patch_semenOverlay.cs" />
    <Compile Include="Source\Harmony\SexualityCard.cs" />
    <Compile Include="Source\Harmony\SexualityCardInternal.cs" />
    <Compile Include="Source\Hediffs\HediffComp_FeelingBroken.cs" />
    <Compile Include="Source\Modules\SemenOverlay\Hediffs\Hediff_Bukkake.cs" />
    <Compile Include="Source\Hediffs\Hediff_Cocoon.cs" />
    <Compile Include="Source\Modules\SemenOverlay\Hediffs\Hediff_Semen.cs" />
    <Compile Include="Source\Modules\Pregnancy\Hediffs\HediffDef_EnemyImplants.cs" />
    <Compile Include="Source\Hediffs\Hediff_ID.cs" />
    <Compile Include="Source\Modules\Pregnancy\Hediffs\Hediff_InsectEggPregnancy.cs" />
    <Compile Include="Source\Modules\Pregnancy\Hediffs\Hediff_MCEvents.cs" />
    <Compile Include="Source\Modules\Pregnancy\Hediffs\Hediff_MechanoidPregnancy.cs" />
    <Compile Include="Source\Modules\Pregnancy\Hediffs\Hediff_MechImplants.cs" />
    <Compile Include="Source\Modules\Pregnancy\Hediffs\HeDiff_MicroComputer.cs" />
    <Compile Include="Source\Modules\Pregnancy\Hediffs\Hediff_ParasitePregnancy.cs" />
    <Compile Include="Source\Hediffs\Hediff_Submitting.cs" />
    <Compile Include="Source\Modules\Pregnancy\Hediffs\Hediff_BasePregnancy.cs" />
    <Compile Include="Source\Modules\Pregnancy\Hediffs\Hediff_BestialPregnancy.cs" />
    <Compile Include="Source\Modules\Pregnancy\Hediffs\Hediff_HumanlikePregnancy.cs" />
    <Compile Include="Source\Modules\Pregnancy\Hediffs\Hediff_SimpleBaby.cs" />
    <Compile Include="Source\Modules\Nymphs\Incidents\IncidentWorker_NymphJoins.cs" />
    <Compile Include="Source\Modules\Nymphs\Incidents\IncidentWorker_NymphVisitorGroup.cs" />
    <Compile Include="Source\Modules\Nymphs\Incidents\IncidentWorker_TestInc.cs" />
    <Compile Include="Source\Modules\Nymphs\Incidents\IncidentWorker_TestInc2.cs" />
    <Compile Include="Source\Interactions\InteractionWorker_SexAttempt.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_BestialityForMale.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_BestialityForFemale.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_Breeding.cs" />
    <Compile Include="Source\Modules\SemenOverlay\JobDrivers\JobDriver_CleanSelf.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_Fappin.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_GettinLoved.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_GettinRaped.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_JoinInBed.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_QuickFap.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_RapeEnemyByHumanlike.cs" />
    <Compile Include="Source\Modules\Whoring\JobDrivers\JobDriver_WhoreInvitingVisitors.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_PrisonerComfortRapin.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_RandomRape.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_Rape.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_RapeEnemy.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_RapeEnemyByAnimal.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_RapeEnemyByInsect.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_RapeEnemyByMech.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_RapeEnemyToParasite.cs" />
    <Compile Include="Source\Modules\Bondage\JobDrivers\JobDriver_StruggleInBondageGear.cs" />
    <Compile Include="Source\Modules\Bondage\JobDrivers\JobDriver_UseItemOn.cs" />
    <Compile Include="Source\JobDrivers\JobDriver_ViolateCorpse.cs" />
    <Compile Include="Source\Modules\Whoring\JobDrivers\JobDriver_WhoreIsServingVisitors.cs" />
    <Compile Include="Source\JobGivers\JobGiver_AIRapePrisoner.cs" />
    <Compile Include="Source\JobGivers\JobGiver_Bestiality.cs" />
    <Compile Include="Source\JobGivers\JobGiver_Breed.cs" />
    <Compile Include="Source\JobGivers\JobGiver_ComfortPrisonerRape.cs" />
    <Compile Include="Source\JobGivers\JobGiver_DoFappin.cs" />
    <Compile Include="Source\JobGivers\JobGiver_JoinInBed.cs" />
    <Compile Include="Source\JobGivers\JobGiver_RandomRape.cs" />
    <Compile Include="Source\JobGivers\JobGiver_RapeEnemy.cs" />
    <Compile Include="Source\JobGivers\JobGiver_ViolateCorpse.cs" />
    <Compile Include="Source\Modules\Whoring\JobGivers\JobGiver_WhoreInvitingVisitors.cs" />
    <Compile Include="Source\MentalStates\MentalState_RandomRape.cs" />
    <Compile Include="Source\MentalStates\SexualMentalState.cs" />
    <Compile Include="Source\Needs\Need_Sex.cs" />
    <Compile Include="Source\PawnCapacities\BodyPartTagDefOf.cs" />
    <Compile Include="Source\PawnCapacities\PawnCapacityWorker_Fertility.cs" />
    <Compile Include="Source\Modules\Nymphs\Pawns\Nymph_Backstories.cs" />
    <Compile Include="Source\Modules\Nymphs\Pawns\Nymph_Generator.cs" />
    <Compile Include="Source\Recipes\Recipe_GrowBreasts.cs" />
    <Compile Include="Source\Recipes\Install_Part\Recipe_InstallPart.cs" />
    <Compile Include="Source\Modules\Pregnancy\Recipes\Recipe_Abortion.cs" />
    <Compile Include="Source\Modules\Bondage\Recipes\Recipe_ChastityBelt.cs" />
    <Compile Include="Source\Modules\Pregnancy\Recipes\Recipe_ClaimChild.cs" />
    <Compile Include="Source\Modules\Pregnancy\Recipes\Recipe_DeterminePregnancy.cs" />
    <Compile Include="Source\Modules\Bondage\Recipes\Recipe_ForceOffGear.cs" />
    <Compile Include="Source\Modules\Pregnancy\Recipes\Recipe_InstallIUD.cs" />
    <Compile Include="Source\Modules\Pregnancy\Recipes\Recipe_PregnancyHackMech.cs" />
    <Compile Include="Source\Modules\Pregnancy\Recipes\Recipe_Sterilize.cs" />
    <Compile Include="Source\Recipes\Recipe_Restraints.cs" />
    <Compile Include="Source\Recipes\Recipe_ShrinkBreasts.cs" />
    <Compile Include="Source\Recipes\Remove_Part\Recipe_RemoveAnus.cs" />
    <Compile Include="Source\Recipes\Remove_Part\Recipe_RemoveBreasts.cs" />
    <Compile Include="Source\Recipes\Remove_Part\Recipe_RemoveGenitals.cs" />
    <Compile Include="Source\Recipes\Remove_Part\Recipe_RemovePart.cs" />
    <Compile Include="Source\Recipes\Transgender\Recipe_MakeFuta.cs" />
    <Compile Include="Source\Settings\RJWDebugSettings.cs" />
    <Compile Include="Source\Settings\RJWHookupSettings.cs" />
    <Compile Include="Source\Settings\RJWPregnancySettings.cs" />
    <Compile Include="Source\Settings\RJWSettings.cs" />
    <Compile Include="Source\Settings\RJWSettingsController.cs" />
    <Compile Include="Source\Settings\RJWSexSettings.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ChancePerHour_Bestiality.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ChancePerHour_Breed.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ChancePerHour_Fappin.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ChancePerHour_Necro.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ChancePerHour_RapeCP.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ConditionalBestiality.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ConditionalCanBreed.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ConditionalCanRapeCP.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ConditionalFrustrated.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ConditionalHorny.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ConditionalMate.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ConditionalNecro.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ConditionalNympho.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ConditionalRapist.cs" />
    <Compile Include="Source\ThinkTreeNodes\ThinkNode_ConditionalSexChecks.cs" />
    <Compile Include="Source\Modules\Whoring\ThinkTreeNodes\ThinkNode_ConditionalWhore.cs" />
    <Compile Include="Source\Modules\Bondage\Thoughts\ThoughtWorker_Bound.cs" />
    <Compile Include="Source\Thoughts\ThoughtWorker_FeelingBroken.cs" />
    <Compile Include="Source\Modules\STD\Thoughts\ThoughtWorker_ItchyCrotch.cs" />
    <Compile Include="Source\Thoughts\ThoughtWorker_NeedSex.cs" />
    <Compile Include="Source\Thoughts\ThoughtWorker_SexChange.cs" />
    <Compile Include="Source\Modules\STD\Thoughts\ThoughtWorker_SyphiliticThoughts.cs" />
    <Compile Include="Source\Modules\STD\Thoughts\ThoughtWorker_WastingAway.cs" />
    <Compile Include="Source\Modules\Whoring\Thoughts\ThoughtWorker_Whore.cs" />
    <Compile Include="Source\Triggers\Trigger_SexSatisfy.cs" />
    <Compile Include="Source\WorkGivers\WorkGiver_BestialityForFemale.cs" />
    <Compile Include="Source\WorkGivers\WorkGiver_BestialityForMale.cs" />
    <Compile Include="Source\Modules\SemenOverlay\WorkGivers\WorkGiver_CleanSelf.cs" />
    <Compile Include="Source\WorkGivers\WorkGiver_Fap.cs" />
    <Compile Include="Source\WorkGivers\WorkGiver_Fap_Bed.cs" />
    <Compile Include="Source\WorkGivers\WorkGiver_Rape.cs" />
    <Compile Include="Source\WorkGivers\WorkGiver_RapeCP.cs" />
    <Compile Include="Source\WorkGivers\WorkGiver_RapeEnemy.cs" />
    <Compile Include="Source\WorkGivers\WorkGiver_Sex.cs" />
    <Compile Include="Source\WorkGivers\WorkGiver_Sexchecks.cs" />
    <Compile Include="Source\WorkGivers\WorkGiver_ViolateCorpse.cs" />
    <Content Include=".gitattributes" />
    <Content Include=".gitignore" />
    <Compile Include="Source\Settings\Settings.cs" />
    <Compile Include="Source\MainTab\PawnColumnWorker_CountOfWhore.cs" />
    <Compile Include="Source\MainTab\PawnColumnWorker_IsWhore.cs" />
    <Compile Include="Source\MainTab\MainTabWindow_Brothel.cs" />
    <Compile Include="Source\MainTab\PawnColumnWorker_Mood.cs" />
    <Compile Include="Source\MainTab\PawnTable_Whores.cs" />
    <Compile Include="Source\MainTab\PawnColumnWorker_RoomAdjustmentOfWhore.cs" />
    <Compile Include="Source\MainTab\PawnColumnWorker_PriceRangeOfWhore.cs" />
    <Compile Include="Source\MainTab\PawnColumnWorker_AverageMoneyByWhore.cs" />
    <Compile Include="Source\MainTab\PawnColumnWorker_TextCenter.cs" />
    <Compile Include="Source\MainTab\PawnColumnWorker_IsPrisoner.cs" />
    <Compile Include="Source\MainTab\PawnColumnWorker_EarnedMoneyByWhore.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="LICENSE" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <Reference Include="%24HugsLibChecker, Version=0.5.0.0, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>packages\UnlimitedHugs.Rimworld.HugsLibChecker.5.0.0\lib\net35\$HugsLibChecker.dll</HintPath>
      <SpecificVersion>False</SpecificVersion>
      <Private>False</Private>
    </Reference>
    <Reference Include="0Harmony, Version=1.2.0.1, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>packages\UnlimitedHugs.Rimworld.HugsLib.6.1.1\lib\net35\0Harmony.dll</HintPath>
      <SpecificVersion>False</SpecificVersion>
      <Private>True</Private>
    </Reference>
    <Reference Include="0MultiplayerAPI">
      <HintPath>packages\Multiplayer\Assemblies\0MultiplayerAPI.dll</HintPath>
    </Reference>
    <Reference Include="Assembly-CSharp">
      <HintPath>..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="HugsLib, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>packages\UnlimitedHugs.Rimworld.HugsLib.6.1.1\lib\net35\HugsLib.dll</HintPath>
      <SpecificVersion>False</SpecificVersion>
      <Private>False</Private>
    </Reference>
    <Reference Include="NAudio">
      <HintPath>..\..\RimWorldWin64_Data\Managed\NAudio.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="NVorbis">
      <HintPath>..\..\RimWorldWin64_Data\Managed\NVorbis.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="Psychology">
      <HintPath>packages\Psychology.2018-11-18\Assemblies\Psychology.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="RimWorldChildren">
      <HintPath>packages\ChildrenAndPregnancy.0.4e\Assemblies\RimWorldChildren.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="SyrTraits">
      <HintPath>packages\SYR.Individuality.1.1.4\Assemblies\SyrTraits.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="System" />
    <Reference Include="UnityEngine">
      <HintPath>..\..\RimWorldWin64_Data\Managed\UnityEngine.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="UnityEngine.UI">
      <HintPath>..\..\RimWorldWin64_Data\Managed\UnityEngine.UI.dll</HintPath>
      <Private>False</Private>
    </Reference>
  </ItemGroup>
  <ItemGroup />
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSHARP.Targets" />
  <ProjectExtensions>
    <VisualStudio AllowExistingFolder="true" />
  </ProjectExtensions>
</Project>


code:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProjectView>ShowAllFiles</ProjectView>
  </PropertyGroup>
</Project>


code:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2024
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RimJobWorld.Main", "RimJobWorld.Main.csproj", "{22F82FFF-8BD4-4CEE-9F22-C7DA71281E72}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{22F82FFF-8BD4-4CEE-9F22-C7DA71281E72}.Debug|Any CPU.ActiveCfg = Release|Any CPU
		{22F82FFF-8BD4-4CEE-9F22-C7DA71281E72}.Debug|Any CPU.Build.0 = Release|Any CPU
		{22F82FFF-8BD4-4CEE-9F22-C7DA71281E72}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{22F82FFF-8BD4-4CEE-9F22-C7DA71281E72}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {16BA61E5-4C97-4E73-926D-6718DE8E4776}
	EndGlobalSection
EndGlobal


code:
/*
Core versions of scripts addapted for Greater Good
*/

using System;
using System.Collections.Generic;
using System.Linq;
using RimWorld;
using RimWorld.Planet;
using Verse;

namespace rjw_CORE_EXPOSED
{
	public static class JobDriver_Lovin
	{
		public static readonly SimpleCurve LovinIntervalHoursFromAgeCurve = new SimpleCurve
		{
			new CurvePoint(1f,  12f),
			new CurvePoint(16f, 6f),
			new CurvePoint(22f, 9f),
			new CurvePoint(30f, 12f),
			new CurvePoint(50f, 18f),
			new CurvePoint(75f, 24f)
		};
	}

	// used in Vulnerability StatDef calculation
	public class SkillNeed_BaseBonus : SkillNeed
	{
		private float baseValue = 0.5f;

		private float bonusPerLevel = 0.05f;

		public override float ValueFor(Pawn pawn)
		{
			if (pawn.skills == null)
			{
				return 1f;
			}
			int level = pawn.skills.GetSkill(this.skill).Level;
			// remove melee bonus for pawns: downed, sleeping/resting/lying, wearing armbinder
			if (pawn.Downed || pawn.GetPosture() != PawnPosture.Standing || pawn.health.hediffSet.HasHediff(HediffDef.Named("Armbinder")))
				//|| pawn.health.hediffSet.HasHediff(HediffDef.Named("Yoke")) || pawn.health.hediffSet.HasHediff(HediffDef.Named("BoundHands")))
				level = 0;
			return this.ValueAtLevel(level);
		}

		private float ValueAtLevel(int level)
		{
			return this.baseValue + this.bonusPerLevel * (float)level;
		}

		public override IEnumerable<string> ConfigErrors()
		{
			foreach (string error in base.ConfigErrors())
			{
				yield return error;
			}
			for (int i = 1; i <= 20; i++)
			{
				float factor = this.ValueAtLevel(i);
				if (factor <= 0f)
				{
					yield return "SkillNeed yields factor < 0 at skill level " + i;
				}
			}
		}
	}

	public static class LovePartnerRelationUtility
	{
		public static float LovinMtbSinglePawnFactor(Pawn pawn)
		{
			float num = 1f;
			num /= 1f - pawn.health.hediffSet.PainTotal;
			float efficiency = pawn.health.capacities.GetLevel(PawnCapacityDefOf.Consciousness);
			if (efficiency < 0.5f)
			{
				num /= efficiency * 2f;
			}

			if (!pawn.RaceProps.Humanlike)
			{
				return num * 4f;
			}
			if (RimWorld.LovePartnerRelationUtility.ExistingLovePartner(pawn) != null)
			{
				num *= 2f; //This is a factor which makes pawns with love partners less likely to do fappin/random raping/rapingCP/bestiality/necro.
			}
			else if (pawn.gender == Gender.Male)
			{
				num /= 1.25f; //This accounts for single men
			}
			return num / GenMath.FlatHill(0.0001f, 8f, 13f, 28f, 50f, 0.15f, pawn.ageTracker.AgeBiologicalYearsFloat);//this needs to be changed
		}
	}

	public static class MedicalRecipesUtility
	{
		public static bool IsCleanAndDroppable(Pawn pawn, BodyPartRecord part)
		{
			return IsClean(pawn, part) && part.def.spawnThingOnRemoved != null;
		}
		//TODO: add check if hediff are bad?
		public static bool IsClean(Pawn pawn, BodyPartRecord part)
		{
			//in vanilla Hediff = always bad?
			return !pawn.Dead && !(from x in pawn.health.hediffSet.hediffs
									where (x.Part == part)
									select x).Any<Hediff>();
		}

		public static bool IsViolationOnPawn(Pawn pawn, BodyPartRecord part, Faction billDoerFaction)
		{
			return pawn.Faction != billDoerFaction || HealthUtility.PartRemovalIntent(pawn, part) == BodyPartRemovalIntent.Harvest;
		}

		public static void RestorePartAndSpawnAllPreviousParts(Pawn pawn, BodyPartRecord part, IntVec3 pos, Map map)
		{
			SpawnNaturalPartIfClean(pawn, part, pos, map);
			SpawnThingsFromHediffs(pawn, part, pos, map);
			pawn.health.RestorePart(part, null, true);
		}

		// always false since rjw uses hediffs for genitals, thus its always dirty
		public static Thing SpawnNaturalPartIfClean(Pawn pawn, BodyPartRecord part, IntVec3 pos, Map map)
		{
			if (MedicalRecipesUtility.IsCleanAndDroppable(pawn, part))
			{
				//normal/rimworld parts
				return GenSpawn.Spawn(part.def.spawnThingOnRemoved, pos, map);
			}
			return null;
		}

		// spawn rjw stuff
		public static void SpawnThingsFromHediffs(Pawn pawn, BodyPartRecord part, IntVec3 pos, Map map)
		{
			if (!pawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined).Contains(part))
			{
				return;
			}
			if (pawn.Dead)
			{
				return;
			}
			IEnumerable<Hediff> enumerable = from x in pawn.health.hediffSet.hediffs
											 where x.Part == part
											 select x;
			//RJW parts and other implants?
			foreach (Hediff current in enumerable)
			{
				if (current.def.spawnThingOnRemoved != null)
				{
					//rjw implants/parts
					Thing thing = GenSpawn.Spawn(current.def.spawnThingOnRemoved, pos, map);
					//Log.Message("SpawnThingsFromHediffs test 1 " + current);
					//current.ExposeData();
					//thing.ExposeData();
					//Log.Message("SpawnThingsFromHediffs test 2 " + current);
					//Scribe_Values.Look<float>(ref part.Size, "size", 1);
					//Log.Message("SpawnThingsFromHediffs test 3 " + current);
				}
			}
			//spawn sub parts? not sure why would it call itself but w/e
			for (int i = 0; i < part.parts.Count; i++)
			{
				MedicalRecipesUtility.SpawnThingsFromHediffs(pawn, part.parts[i], pos, map);
			}
		}
	}

	public class Recipe_RemoveBodyPart : Recipe_Surgery
	{
		public virtual bool blocked(Pawn p)
		{
			return false;
		}
		public override IEnumerable<BodyPartRecord> GetPartsToApplyOn(Pawn pawn, RecipeDef recipe)
		{
			if (!blocked(pawn))
			{
				IEnumerable<BodyPartRecord> parts = pawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined);
				foreach (BodyPartRecord part in parts)
				{
					if (pawn.health.hediffSet.HasDirectlyAddedPartFor(part))
					{
						yield return part;
					}
					if (MedicalRecipesUtility.IsCleanAndDroppable(pawn, part))
					{
						yield return part;
					}
					if (part != pawn.RaceProps.body.corePart && part.def.canSuggestAmputation && pawn.health.hediffSet.hediffs.Any((Hediff d) => !(d is Hediff_Injury) && d.def.isBad && d.Visible && d.Part == part))
					{
						yield return part;
					}
				}
			}
		}

		private const int ViolationGoodwillImpact = -15;

		public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List<Thing> ingredients, Bill bill)
		{
			bool flag = MedicalRecipesUtility.IsClean(pawn, part);
			bool flag2 = MedicalRecipesUtility.IsViolationOnPawn(pawn, part, Faction.OfPlayer);
			if (billDoer != null)
			{
				if (base.CheckSurgeryFail(billDoer, pawn, ingredients, part, bill))
				{
					return;
				}
				TaleRecorder.RecordTale(TaleDefOf.DidSurgery, new object[]
				{
					billDoer,
					pawn
				});
				MedicalRecipesUtility.SpawnNaturalPartIfClean(pawn, part, billDoer.Position, billDoer.Map);
				MedicalRecipesUtility.SpawnThingsFromHediffs(pawn, part, billDoer.Position, billDoer.Map);
			}
			DamageDef surgicalCut = DamageDefOf.SurgicalCut;
			float amount = 99999f;
			float armorPenetration = 999f;
			pawn.TakeDamage(new DamageInfo(surgicalCut, amount, armorPenetration, -1f, null, part, null, DamageInfo.SourceCategory.ThingOrUnknown, null));
			if (flag)
			{
				if (pawn.Dead)
				{
					ThoughtUtility.GiveThoughtsForPawnExecuted(pawn, PawnExecutionKind.OrganHarvesting);
				}
				ThoughtUtility.GiveThoughtsForPawnOrganHarvested(pawn);
			}
			if (flag2 && pawn.Faction != null && billDoer != null && billDoer.Faction != null)
			{
				Faction faction = pawn.Faction;
				Faction faction2 = billDoer.Faction;
				string reason = "GoodwillChangedReason_RemovedBodyPart".Translate(part.LabelShort);
				GlobalTargetInfo? lookTarget = pawn;
				faction.TryAffectGoodwillWith(faction2, ViolationGoodwillImpact, true, true, reason, lookTarget);
			}
		}

		public override string GetLabelWhenUsedOn(Pawn pawn, BodyPartRecord part)
		{
			if (pawn.RaceProps.IsMechanoid || pawn.health.hediffSet.PartOrAnyAncestorHasDirectlyAddedParts(part))
			{
				return RecipeDefOf.RemoveBodyPart.LabelCap;
			}
			BodyPartRemovalIntent bodyPartRemovalIntent = HealthUtility.PartRemovalIntent(pawn, part);
			if (bodyPartRemovalIntent == BodyPartRemovalIntent.Harvest)
			{
				return "Harvest".Translate();
			}
			if (bodyPartRemovalIntent != BodyPartRemovalIntent.Amputate)
			{
				throw new InvalidOperationException();
			}
			if (part.depth == BodyPartDepth.Inside)
			{
				return "RemoveOrgan".Translate();
			}
			return "Amputate".Translate();
		}
	}

	public class Recipe_InstallOrReplaceBodyPart : Recipe_Surgery
	{
		public virtual bool blocked(Pawn p)
		{
			return false;
		}

		public override IEnumerable<BodyPartRecord> GetPartsToApplyOn(Pawn pawn, RecipeDef recipe)
		{
			if (!blocked(pawn))
			{
				for (int i = 0; i < recipe.appliedOnFixedBodyParts.Count; i++)
				{
					BodyPartDef part = recipe.appliedOnFixedBodyParts[i];
					List<BodyPartRecord> bpList = pawn.RaceProps.body.AllParts;
					for (int j = 0; j < bpList.Count; j++)
					{
						BodyPartRecord record = bpList[j];
						if (record.def == part)
						{
							IEnumerable<Hediff> diffs = from x in pawn.health.hediffSet.hediffs
														where x.Part == record
														select x;
							if (diffs.Count<Hediff>() != 1 || diffs.First<Hediff>().def != recipe.addsHediff)
							{
								if (record.parent == null || pawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined, null, null).Contains(record.parent))
								{
									if (!pawn.health.hediffSet.PartOrAnyAncestorHasDirectlyAddedParts(record) || pawn.health.hediffSet.HasDirectlyAddedPartFor(record))
									{
										yield return record;
									}
								}
							}
						}
					}
				}
			}
		}

		public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List<Thing> ingredients, Bill bill)
		{
			if (billDoer != null)
			{
				if (base.CheckSurgeryFail(billDoer, pawn, ingredients, part, bill))
				{
					DamageDef surgicalCut = DamageDefOf.SurgicalCut;
					float amount = 99999f;
					float armorPenetration = 999f;
					pawn.TakeDamage(new DamageInfo(surgicalCut, amount, armorPenetration, -1f, null, part, null, DamageInfo.SourceCategory.ThingOrUnknown, null));
					return;
				}
				TaleRecorder.RecordTale(TaleDefOf.DidSurgery, new object[]
				{
					billDoer,
					pawn
				});
				MedicalRecipesUtility.RestorePartAndSpawnAllPreviousParts(pawn, part, billDoer.Position, billDoer.Map);
			}
			pawn.health.AddHediff(recipe.addsHediff, part, null, null);
		}
	}

	public class Recipe_AddBodyPart : Recipe_Surgery
	{
		public virtual bool blocked(Pawn p)
		{
			return false;
		}
		public override IEnumerable<BodyPartRecord> GetPartsToApplyOn(Pawn pawn, RecipeDef recipe)
		{
			if (!blocked(pawn))
			{
				for (int i = 0; i < recipe.appliedOnFixedBodyParts.Count; i++)
				{
					BodyPartDef part = recipe.appliedOnFixedBodyParts[i];
					List<BodyPartRecord> bpList = pawn.RaceProps.body.AllParts;
					for (int j = 0; j < bpList.Count; j++)
					{
						BodyPartRecord record = bpList[j];
						if (record.def == part)
						{
							IEnumerable<Hediff> diffs = from x in pawn.health.hediffSet.hediffs
														where x.Part == record
														select x;
							if (diffs.Count<Hediff>() != 1 || diffs.First<Hediff>().def != recipe.addsHediff)
							{
								if (record.parent == null || pawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined, null, null).Contains(record.parent))
								{
									if (!pawn.health.hediffSet.PartOrAnyAncestorHasDirectlyAddedParts(record) || pawn.health.hediffSet.HasDirectlyAddedPartFor(record))
									{
										yield return record;
									}
								}
							}
						}
					}
				}
			}
		}

		public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List<Thing> ingredients, Bill bill)
		{
			if (billDoer != null)
			{
				if (base.CheckSurgeryFail(billDoer, pawn, ingredients, part, bill))
				{
					DamageDef surgicalCut = DamageDefOf.SurgicalCut;
					float amount = 99999f;
					float armorPenetration = 999f;
					pawn.TakeDamage(new DamageInfo(surgicalCut, amount, armorPenetration, -1f, null, part, null, DamageInfo.SourceCategory.ThingOrUnknown, null));
					return;
				}
				TaleRecorder.RecordTale(TaleDefOf.DidSurgery, new object[]
				{
					billDoer,
					pawn
				});
				pawn.health.AddHediff(recipe.addsHediff, part, null, null);
			}
		}
	}
}


code:
using System.Collections.Generic;
using System.Linq;
using RimWorld;
using Verse;

namespace rjw
{
	public class CondomUtility
	{
		public static readonly RecordDef CountOfCondomsUsed = DefDatabase<RecordDef>.GetNamed("CountOfCondomsUsed");

		// TryUseCondom returns whether it was able to remove one condom from the pawn
		public static bool TryUseCondom(Pawn pawn)
		{
			if (!xxx.is_human(pawn)) return false;
			if (xxx.has_quirk(pawn, "ImpregnationFetish")) return false;
			List<Thing> pawn_condoms = pawn.inventory.innerContainer.ToList().FindAll(obj => obj.def == ThingDef.Named("Condom"));
			if (pawn_condoms.Any())
			{
				var stack = pawn_condoms.Pop();
				stack.stackCount--;
				if (stack.stackCount <= 0)
				{
					stack.Destroy();
				}
				return true;
			}
			return false;
		}

		// UseCondom applies the effects of having used a condom.
		public static void useCondom(Pawn pawn)
		{
			if (!xxx.is_human(pawn)) return;
			pawn.records.Increment(CountOfCondomsUsed);
			pawn.needs.mood.thoughts.memories.TryGainMemory(ThoughtDef.Named("SexWithCondom"));
		}

		public static void GetCondomFromRoom(Pawn pawn)
		{
			if (!xxx.is_human(pawn)) return;
			if (xxx.has_quirk(pawn, "ImpregnationFetish")) return;
			List<Thing> condoms_in_room = pawn.GetRoom().ContainedAndAdjacentThings.FindAll(obj => obj.def == ThingDef.Named("Condom") && pawn.Position.DistanceToSquared(obj.Position) < 10);
			//List<Thing> condoms_in_room = pawn.ownership.OwnedRoom?.ContainedAndAdjacentThings.FindAll(obj => obj.def == ThingDef.Named("Condom"));
			if (condoms_in_room.Any())
			{
				pawn.inventory.innerContainer.TryAdd(condoms_in_room.Pop().SplitOff(1));
			}
		}
	}
}


code:
using System.Collections.Generic;
using HugsLib.Utils;
using Verse;

namespace rjw
{
	/// <summary>
	/// Hugslib Utility Data object storing the RJW info
	/// also implements extensions to Pawn method
	/// is used as a static field in PawnData
	/// </summary>
	public class DataStore : UtilityWorldObject
	{
		public Dictionary<int, PawnData> PawnData = new Dictionary<int, PawnData> ();
		//public Dictionary<int, PartsData> PartsData = new Dictionary<int, PartsData> ();

		public override void ExposeData()
		{
			if (Scribe.mode==LoadSaveMode.Saving)
				PawnData.RemoveAll(item => item.Value==null || !item.Value.IsValid);
			base.ExposeData();
			Scribe_Collections.Look(ref PawnData, "Data", LookMode.Value, LookMode.Deep);
			//Scribe_Collections.Look(ref PartsData, "Data", LookMode.Value, LookMode.Deep);
			if (Scribe.mode == LoadSaveMode.LoadingVars)
			{
				if (PawnData == null) PawnData = new Dictionary<int, PawnData>();
				//if (PartsData == null) PartsData = new Dictionary<int, PartsData>();
			}
		}

		public PawnData GetPawnData(Pawn pawn)
		{
			PawnData res;
			//--Log.Message("Getting data for " + pawn);
			//--Log.Message("Pawn " + pawn + " id " + pawn.thingIDNumber);
			//--Log.Message("PawnData isn't null " + !(PawnData == null));
			var filled = PawnData.TryGetValue(pawn.thingIDNumber, out res);
			//--Log.Message("Output is not null" + PawnData.TryGetValue(pawn.thingIDNumber, out res));
			//--Log.Message("Out is not null " + (res != null));
			//--Log.Message("Out is valid " + (res != null && res.IsValid));
			if ((res==null) || (!res.IsValid))
			{
				if (filled)
				{
					//--Log.Message("Clearing incorrect data for " + pawn);
					PawnData.Remove(pawn.thingIDNumber);
				}
				//--Log.Message("PawnData missing, creating for " + pawn);
				res = new PawnData(pawn);
				PawnData.Add(pawn.thingIDNumber, res);
			}
			//--Log.Message("Finishing");
			//--Log.Message("PawnData is " + res.Comfort + " " + res.Service + " " + res.Breeding);
			return res;
		}

		void SetPawnData(Pawn pawn, PawnData data)
		{
			PawnData.Add(pawn.thingIDNumber, data);
		}

		//public PartsData GetPartsData(Thing thing)
		//{
		//	PartsData res;
		//	//--Log.Message("Getting data for " + thing);
		//	//--Log.Message("Pawn " + thing + " id " + thing.thingIDNumber);
		//	//--Log.Message("PartsData isn't null " + !(PartsData == null));
		//	var filled = PartsData.TryGetValue(thing.thingIDNumber, out res);
		//	//--Log.Message("Output is not null" + PartsData.TryGetValue(thing.thingIDNumber, out res));
		//	//--Log.Message("Out is not null " + (res != null));
		//	//--Log.Message("Out is valid " + (res != null && res.IsValid));
		//	if ((res==null) || (!res.IsValid))
		//	{
		//		if (filled)
		//		{
		//			//--Log.Message("Clearing incorrect data for " + thing);
		//			PartsData.Remove(thing.thingIDNumber);
		//		}
		//		//--Log.Message("PartsData missing, creating for " + thing);
		//		res = new PartsData(thing);
		//		PartsData.Add(thing.thingIDNumber, res);
		//	}
		//	//--Log.Message("Finishing");
		//	return res;
		//}

		//void SetPartsData(Thing thing, PartsData data)
		//{
		//	PartsData.Add(thing.thingIDNumber, data);
		//}
	}
}


code:
using Verse;
using System.Collections.Generic;
using System.Linq;
using RimWorld;
using HugsLib.Utils;

namespace rjw
{
	/// <summary>
	/// Collection of Designated pawns lists
	/// </summary>
	public class DesignatorsData : UtilityWorldObject
	{
		public static List<Pawn> rjwHero = new List<Pawn>();
		public static List<Pawn> rjwComfort = new List<Pawn>();
		public static List<Pawn> rjwService = new List<Pawn>();
		public static List<Pawn> rjwMilking = new List<Pawn>();
		public static List<Pawn> rjwBreeding = new List<Pawn>();
		public static List<Pawn> rjwBreedingAnimal = new List<Pawn>();

		//public static Dictionary<string, List<Pawn>> Designators = new Dictionary<string, List<Pawn>>();

		public void Update()
		{
			rjwHero = PawnsFinder.All_AliveOrDead.Where(p => p.IsDesignatedHero()).ToList();
			rjwComfort = PawnsFinder.All_AliveOrDead.Where(p => p.IsDesignatedComfort()).ToList();
			rjwService = PawnsFinder.All_AliveOrDead.Where(p => p.IsDesignatedService()).ToList();
			rjwMilking = PawnsFinder.All_AliveOrDead.Where(p => p.IsDesignatedMilking()).ToList();
			rjwBreeding = PawnsFinder.All_AliveOrDead.Where(p => p.IsDesignatedBreeding()).ToList();
			rjwBreedingAnimal = PawnsFinder.All_AliveOrDead.Where(p => p.IsDesignatedBreedingAnimal()).ToList();

			//Designators = new Dictionary<string, List<Pawn>>();
			//Designators.Add("rjwHero", rjwHero);
			//Designators.Add("rjwComfort", rjwComfort);
			//Designators.Add("rjwService", rjwService);
			//Designators.Add("rjwMilking", rjwMilking);
			//Designators.Add("rjwBreeding", rjwBreeding);
			//Designators.Add("rjwBreedingAnimal", rjwBreedingAnimal);
		}
	}
}


code:
using HugsLib;
using HugsLib.Utils;
using System;
using RimWorld;
using Verse;

namespace rjw
{
	/// <summary>
	/// Rjw settings store
	/// </summary>
	public class SaveStorage : ModBase
	{
		public override string ModIdentifier => "RJW";

		public override Version GetVersion()
		{
			//--Log.Message("GetVersion() called");
			return base.GetVersion();
		}

		public static DataStore DataStore;//reference to savegame data, hopefully
		public static DesignatorsData DesignatorsData;//reference to savegame data, hopefully

		public override void SettingsChanged()
		{
			ToggleTabIfNeeded();
		}

		public override void WorldLoaded()
		{
			DataStore = UtilityWorldObjectManager.GetUtilityWorldObject<DataStore>();
			DesignatorsData = UtilityWorldObjectManager.GetUtilityWorldObject<DesignatorsData>();
			DesignatorsData.Update();
			ToggleTabIfNeeded();
		}
		protected override bool HarmonyAutoPatch { get => false; }//first.cs creates harmony and does some convoulted stuff with it

		private void ToggleTabIfNeeded()
		{
			DefDatabase<MainButtonDef>.GetNamed("Brothel").buttonVisible = RJWSettings.whoringtab_enabled;
		}
	}
}


code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Verse;
using HugsLib;

namespace rjw
{
	/// <summary>
	/// Utility rjw data object for storing Parts(genitals, breasts, anuses) data between operations
	/// </summary>
	public class PartsData : IExposable
	{
		public Pawn Pawn = null; // store original owner , maybe better kinddef?
		public Thing Thing = null; // store world thing?
		public float Severity = 0.0f; // store size

		public PartsData() { }

		public PartsData(Thing thing, Pawn pawn = null, float severity = 0.5f)
		{
			//Log.Message("Creating PartsData for " + thing);
			Pawn = pawn;
			Thing = thing;
			Severity = severity;
			//Log.Message("This data is valid " + this.IsValid);
		}

		public void ExposeData()
		{
			Scribe_Values.Look<float>(ref Severity, "severity", 0.5f, true);
			Scribe_References.Look<Pawn>(ref this.Pawn, "Pawn");
			Scribe_References.Look<Thing>(ref this.Thing, "Thing");
		}

		public bool IsValid { get { return Thing != null; } }
	}
}


code:
using System;
using Verse;

using System.Linq;

namespace rjw
{
	/// <summary>
	/// Utility data object and a collection of extension methods for Pawn
	/// </summary>
	public class PawnData : IExposable
	{
		public Pawn Pawn = null;
		public bool Comfort = false;
		public bool Service = false;
		public bool Breeding = false;
		public bool Milking = false;
		public bool Hero = false;
		public bool Ironman = false;
		public string HeroOwner = "";
		public bool BreedingAnimal = false;
		public bool CanChangeDesignationColonist = false;
		public bool CanChangeDesignationPrisoner = false;
		public bool CanDesignateService = false;
		public bool CanDesignateMilking = false;
		public bool CanDesignateComfort = false;
		public bool CanDesignateBreedingAnimal = false;
		public bool CanDesignateBreeding = false;
		public bool CanDesignateHero = false;

		public bool isSlime = false;
		public bool isDemon = false;
		public bool oviPregnancy = false;

		public PawnData() { }

		public PawnData(Pawn pawn)
		{
			//Log.Message("Creating pawndata for " + pawn);
			Pawn = pawn;
			//Log.Message("This data is valid " + this.IsValid);

			if (RaceGroupDef_Helper.TryGetRaceGroupDef(Pawn, out var raceGroupDef))
			{
				oviPregnancy = raceGroupDef.oviPregnancy;
			}

			isDemon = Pawn.Has(RaceTag.Demon);
			isSlime = Pawn.Has(RaceTag.Slime);

			//Log.Warning("PawnData:: Pawn:" + xxx.get_pawnname(pawn));
			//Log.Warning("PawnData:: isSlime:" + isSlime);
			//Log.Warning("PawnData:: isDemon:" + isDemon);
			//Log.Warning("PawnData:: oviPregnancy:" + oviPregnancy);
		}

		public void ExposeData()
		{
			Scribe_References.Look<Pawn>(ref this.Pawn, "Pawn");
			Scribe_Values.Look<bool>(ref Comfort, "Comfort", false, true);
			Scribe_Values.Look<bool>(ref Service, "Service", false, true);
			Scribe_Values.Look<bool>(ref Breeding, "Breeding", false, true);
			Scribe_Values.Look<bool>(ref Milking, "Milking", false, true);
			Scribe_Values.Look<bool>(ref Hero, "Hero", false, true);
			Scribe_Values.Look<bool>(ref Ironman, "Ironman", false, true);
			Scribe_Values.Look<String>(ref HeroOwner, "HeroOwner", "", true);
			Scribe_Values.Look<bool>(ref BreedingAnimal, "BreedingAnimal", false, true);
			Scribe_Values.Look<bool>(ref CanChangeDesignationColonist, "CanChangeDesignationColonist", false, true);
			Scribe_Values.Look<bool>(ref CanChangeDesignationPrisoner, "CanChangeDesignationPrisoner", false, true);
			Scribe_Values.Look<bool>(ref CanDesignateService, "CanDesignateService", false, true);
			Scribe_Values.Look<bool>(ref CanDesignateMilking, "CanDesignateMilking", false, true);
			Scribe_Values.Look<bool>(ref CanDesignateComfort, "CanDesignateComfort", false, true);
			Scribe_Values.Look<bool>(ref CanDesignateBreedingAnimal, "CanDesignateBreedingAnimal", false, true);
			Scribe_Values.Look<bool>(ref CanDesignateBreeding, "CanDesignateBreeding", false, true);
			Scribe_Values.Look<bool>(ref CanDesignateHero, "CanDesignateHero", false, true);
			Scribe_Values.Look<bool>(ref isSlime, "isSlime", false, true);
			Scribe_Values.Look<bool>(ref isDemon, "isDemon", false, true);
			Scribe_Values.Look<bool>(ref oviPregnancy, "oviPregnancy", false, true);
	}

	public bool IsValid { get { return Pawn != null; } }
	}
}


code:
using System.Collections.Generic;
using Verse;
using System;

namespace rjw
{
	// Used to list the defs themselves rather than strings, but that causes issues when another mod wants to
	// create and reference custom parts inheriting from rjw base defs.
	class RaceGroupDef : Def
	{
		public List<string> raceNames = null;
		public List<string> pawnKindNames = null;
		public List<string> anuses = null;
		public List<float> chanceanuses = null;
		public List<string> femaleBreasts = null;
		public List<float> chancefemaleBreasts = null;
		public List<string> femaleGenitals = null;
		public List<float> chancefemaleGenitals = null;
		public List<string> maleBreasts = null;
		public List<float> chancemaleBreasts = null;
		public List<string> maleGenitals = null;
		public List<float> chancemaleGenitals = null;
		public List<string> tags = null;
		public bool hasSingleGender = false;
		public bool hasSexNeed = true;
		public bool hasFertility = true;
		public bool hasPregnancy = true;
		public bool oviPregnancy = false;
		public bool ImplantEggs = false;
		[Obsolete("isDemon is obsolete, use tags instead.")]
		public bool isDemon = false;
		[Obsolete("isSlime is obsolete, use tags instead.")]
		public bool isSlime = false;
	}
}


code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RimWorld;
using Verse;

namespace rjw
{
	public class RaceTag
	{
		// I only created tags for RaceGroupDef properties that seemed like keywords (like slime) rather than behavior (like oviPregnancy).
		public readonly static RaceTag Chitin = new RaceTag("Chitin");
		public readonly static RaceTag Demon = new RaceTag("Demon");
		public readonly static RaceTag Feathers = new RaceTag("Feathers");
		public readonly static RaceTag Fur = new RaceTag("Fur");
		public readonly static RaceTag Plant = new RaceTag("Plant");
		public readonly static RaceTag Robot = new RaceTag("Robot");
		public readonly static RaceTag Scales = new RaceTag("Scales");
		public readonly static RaceTag Skin = new RaceTag("Skin");
		public readonly static RaceTag Slime = new RaceTag("Slime");

		public string Key { get; }

		RaceTag(string key)
		{
			Key = key;
		}

		/// <summary>
		/// For backwards compatability only. Shouldn't add more special cases here.
		/// </summary>
		public bool DefaultWhenNoRaceGroupDef(Pawn pawn)
		{
			if (this == Demon)
			{
				return pawn.kindDef.race.defName.ToLower().Contains("demon");
			}
			else if (this == Slime)
			{
				return pawn.kindDef.race.defName.ToLower().Contains("slime");
			}
			else if (this == Skin)
			{
				return true;
			}
			else
			{
				return false;
			}
		}
	}
}


code:
using System.Collections.Generic;
using Verse;

namespace rjw
{
	/// <summary>
	/// Just a simplest form of passing data from xml to the code
	/// </summary>
	class StringListDef : Def
	{
		public List<string> strings = new List<string>();
	}
}