code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
	<MaxQuirks>最大のフェチ</MaxQuirks>
	<MaxQuirks_desc>作成時キャラクターが取得できる最大のフェチ</MaxQuirks_desc>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
	<MaxQuirks>성적 기벽의 최대 개수</MaxQuirks>
	<MaxQuirks_desc>림이 생성될 때 가질 수 있는 기벽의 최대 갯수.</MaxQuirks_desc>
</LanguageData>

repo_name: amevarashi/rjw

license: mit


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
	<Quirks>기벽:</Quirks>
	<NoQuirks>특이사항이 없습니다.</NoQuirks>
	<RJW_Quirk_Messy_Description><![CDATA[끈적함
{pawn}과 성관계를 하면 엄청난 양의 체액이 분비되지만, {pawn_pronoun}은 거의 {pawn_possessive} 스스로 청소하진 않습니다.
]]></RJW_Quirk_Messy_Description>
	<RJW_Quirk_Podophile_Description><![CDATA[발 페티쉬
{pawn}은 정말 발을 좋아하고 발과 관련된 체위를 선호합니다.
]]></RJW_Quirk_Podophile_Description>
	<RJW_Quirk_Teratophile_Description><![CDATA[추물 선호
{pawn}은 못생긴 상대를 선호합니다. 또한 {pawn_pronoun}는 크고 야생미 넘치는 동물을 선호합니다. {pawn_pronoun}이 그런 쪽에 관심이 있다면 말이죠...
]]></RJW_Quirk_Teratophile_Description>
	<RJW_Quirk_Endytophile_Description><![CDATA[착의 선호
{pawn}은 옷을 입은 채로 {pawn_possessive}와 섹스를 하면 좋아합니다.
]]></RJW_Quirk_Endytophile_Description>
	<RJW_Quirk_Exhibitionist_Description><![CDATA[노출 선호
{pawn}은 다른 사람들이 볼 수 있는데서 섹스하는 것을 즐깁니다.
]]></RJW_Quirk_Exhibitionist_Description>
	<RJW_Quirk_Gerontophile_Description><![CDATA[노인 선호
{pawn}은 인간 나이로 55세 이상의 상대를 선호합니다.
]]></RJW_Quirk_Gerontophile_Description>
	<RJW_Quirk_Somnophile_Description><![CDATA[면간 선호
{pawn}은 자고있는 {pawn_possessive}를 선호합니다.
]]></RJW_Quirk_Somnophile_Description>
	<RJW_Quirk_Sapiosexual_Description><![CDATA[가방끈 선호
{pawn}은 머리좋은 상대와 섹스하는 것을 선호합니다.
]]></RJW_Quirk_Sapiosexual_Description>
	<RJW_Quirk_Fertile_Description><![CDATA[높은 임신률
{pawn}은 비정상적으로 높은 임신률을 가지며 따라서 아이를 갖기 쉽습니다.
]]></RJW_Quirk_Fertile_Description>
	<RJW_Quirk_Infertile_Description><![CDATA[난임
{pawn}은 비정상적으로 낮은 임신률을 가지며 따라서 아이를 갖기 힙듭니다.
]]></RJW_Quirk_Infertile_Description>
	<RJW_Quirk_ImpregnationFetish_Description><![CDATA[임신 선호
{pawn}은 누군가를 임신시키는 것을 정말 좋아합니다. {pawn_pronoun}은 임신 가능성이 있는 상대와 섹스하는 것을 선호합니다.{pawn_pronoun}은 {pawn_pronoun}이 임신하거나 {pawn_possessive}의 상대가 출산하면 돌보지 않습니다.
]]></RJW_Quirk_ImpregnationFetish_Description>
	<RJW_Quirk_PregnancyFetish_Description><![CDATA[임산부 선호
{pawn}은 눈에 띄게 임신한 상대와 섹스하는 것을 선호합니다.
]]></RJW_Quirk_PregnancyFetish_Description>
	<RJW_Quirk_Incubator_Description><![CDATA[산란 전문가
{pawn}은 많은 산란 경험이 있어, {pawn_possessive}의 몸은 이에 적응했습니다. {pawn_possessive}의 알은 숙성 속도가 향상되었습니다.
]]></RJW_Quirk_Incubator_Description>
	<RJW_Quirk_Breeder_Description><![CDATA[다산왕
{pawn}은 여러차례의 출산 경험이 있어, {pawn_possessive}의 몸은 출산에 적응했습니다. {pawn_possessive}의 출산은 짧아졌고 더 많은 새끼를 생산합니다.
]]></RJW_Quirk_Breeder_Description>
	<RJW_Quirk_Vigorous_Description><![CDATA[정력가
{pawn}은 혈기왕성하게 섹스합니다. {pawn_pronoun}은 섹스 이전보다 이후에 더더욱 쉬고 싶어합니다.
]]></RJW_Quirk_Vigorous_Description>
	<RJW_Quirk_ChitinLover_Description><![CDATA[키틴질 선호
{pawn}은 키틴질 외골격의 부드러운 촉감을 즐깁니다. {pawn_pronoun}은 거미류나 곤충류를 상대로 선호합니다.
]]></RJW_Quirk_ChitinLover_Description>
	<RJW_Quirk_DemonLover_Description><![CDATA[악마 선호
{pawn}은 장난의 배후입니다. {pawn_pronoun}은 지옥이나 그 일부에서 나온듯한 {pawn_possessive} 상대를 선호합니다.
]]></RJW_Quirk_DemonLover_Description>
	<RJW_Quirk_FeatherLover_Description><![CDATA[깃털 선호
{pawn}은 폭신한 솜털을 사랑합니다. {pawn_pronoun}는 조류나 공룡류의 상대를 선호합니다. 기회가 주어진다면 공룡이 새이고 깃털이 있다는 사실에 대해 {pawn_pronoun}와 길게 한번 이야기해보고 싶군요.
]]></RJW_Quirk_FeatherLover_Description>
	<RJW_Quirk_FurLover_Description><![CDATA[모피 선호
{pawn}는 두껍고, 고급스러우며, 아늑하고 부드러운 모피코트를 입은 상대를 선호합니다.
]]></RJW_Quirk_FurLover_Description>
	<RJW_Quirk_PlantLover_Description><![CDATA[식물 선호
{pawn}는 식물에 물 주는걸 좋아합니다. 대충 무슨 소린지 아시죠?
]]></RJW_Quirk_PlantLover_Description>
	<RJW_Quirk_RobotLover_Description><![CDATA[로봇 선호
2차원과 3차원중 어느 쪽을 원하세요? 3D 프린터는 양쪽 모두를 충족시킨다는 걸 {pawn}은 알고 있답니다.
]]></RJW_Quirk_RobotLover_Description>
	<RJW_Quirk_ScaleLover_Description><![CDATA[비늘 선호
용과 섹스하길 원하지 않는다구요? 확실히 {pawn}은 아니군요. {pawn}은 비늘덮인 용과 섹스하는 것을 원합니다.
]]></RJW_Quirk_ScaleLover_Description>
	<RJW_Quirk_SkinLover_Description><![CDATA[피부 선호
{pawn}은 모피나, 비늘등이 없는 부드럽고 민감한 피부의 {pawn_possessive} 상대를 선호합니다. 다행히도 {pawn_objective} 사람은 도처에 널려있군요.
]]></RJW_Quirk_SkinLover_Description>
	<RJW_Quirk_SlimeLover_Description><![CDATA[슬라임 선호
왜냐하면 그 미끌거리고 변형 가능한 자연 슬라임은 진짜 진짜로 섹스하기 좋다구요. {pawn}의 이야기를 듣고 있으면 지겹도록 들을 수가 있을 것입니다.
]]></RJW_Quirk_SlimeLover_Description>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
	<MaxQuirks>Máx. peculiaridades</MaxQuirks>
	<MaxQuirks_desc>O máximo de peculiaridades que pode obter-se.</MaxQuirks_desc>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
	<Quirks>Peculiaridades: </Quirks>
	<NoQuirks>Nenhum gosto peculiar, padrão.</NoQuirks>
	<RJW_Quirk_Messy_Description>{pawn} não só produz quantidades grandes de fluidos durante o sexo mas {pawn_pronoun} raramente se importa se limpar depois.</RJW_Quirk_Messy_Description>
	<RJW_Quirk_Podophile_Description>{pawn} realmente gosta de pés e prefere atos sexuais relacionados a pés.</RJW_Quirk_Podophile_Description>
	<RJW_Quirk_Teratophile_Description>{pawn} prefere parceiros feios. {pawn_pronoun} também prefere aniamis maiores e mais selvagens se {pawn_pronoun} gostasse desse tipo de coisa...</RJW_Quirk_Teratophile_Description>
	<RJW_Quirk_Endytophile_Description>{pawn} prefere manter suas roupas vestidas durante o sexo.</RJW_Quirk_Endytophile_Description>
	<RJW_Quirk_Exhibitionist_Description>{pawn} gosta de fazer sexo onde os outros possam ver.</RJW_Quirk_Exhibitionist_Description>
	<RJW_Quirk_Gerontophile_Description>{pawn} prefere parceiros mais velhos (55+ em uma escala humana).</RJW_Quirk_Gerontophile_Description>
	<RJW_Quirk_Somnophile_Description>{pawn} prefere que {pawn_possessive} parceiros estejam dormindo.</RJW_Quirk_Somnophile_Description>
	<RJW_Quirk_Sapiosexual_Description>{pawn} prefere parceiros mais inteligentes.</RJW_Quirk_Sapiosexual_Description>
	<RJW_Quirk_Fertile_Description>{pawn} tem uma fertilidade incomumente alta, tendo mais chances de ter filhos.</RJW_Quirk_Fertile_Description>
	<RJW_Quirk_Infertile_Description>{pawn} tem uma fertilidade incomumente baixa, tendo quase nenhuma chance de ter filhos.</RJW_Quirk_Infertile_Description>
	<RJW_Quirk_ImpregnationFetish_Description>{pawn} gosta muito da idéia de que alguem possa engravidar. {pawn_pronoun} prefere parceiros e atos sexuais onde exista a possibilidade de gravidez. {pawn_pronoun} não se importa se {pawn_pronoun} vai engravidar ou se o {pawn_possessive} parceiro vai, desde que um bebê possa se formar.</RJW_Quirk_ImpregnationFetish_Description>
	<RJW_Quirk_PregnancyFetish_Description>{pawn} prefere parceiros que estejam visivelmente grávidos.</RJW_Quirk_PregnancyFetish_Description>
	<RJW_Quirk_Incubator_Description>{pawn} botou tantos ovos que seu corpo se adaptou a procriar. A velocidade que os ovos são incubados aumentou.</RJW_Quirk_Incubator_Description>
	<RJW_Quirk_Breeder_Description>{pawn} teve tantos filhos que seu corpo se adaptou a procriar. Suas gravidez são mais curtas e produzem mais crias.</RJW_Quirk_Breeder_Description>
	<RJW_Quirk_Vigorous_Description>{pawn} é envigorado por sexo. {pawn_pronoun} não se cansa tanto durante o sexo.</RJW_Quirk_Vigorous_Description>
	<RJW_Quirk_ChitinLover_Description>{pawn} gosta da força e maciez de um exoesqueleto. {pawn_pronoun} prefere parceiros insectóides ou arachnóides.</RJW_Quirk_ChitinLover_Description>
	<RJW_Quirk_DemonLover_Description>{pawn} está atrás dos malcriados. {pawn_pronoun} prefere que seus parceiros venham das literais profundezas do inferno, ou que pelo menos pareça que venham.</RJW_Quirk_DemonLover_Description>
	<RJW_Quirk_FeatherLover_Description>{pawn} ama penas aveludadas. {pawn_pronoun} prefere parceiros aviários ou dinossauros. Dinossauros são pássaros com penas, o que {pawn_pronoun} não se importa de explicar se tiver chance.</RJW_Quirk_FeatherLover_Description>
	<RJW_Quirk_FurLover_Description>{pawn} prefere parceiros com uma grossa, macia, e felpuda cobertura de pêlos.</RJW_Quirk_FurLover_Description>
	<RJW_Quirk_PlantLover_Description>{pawn} gosta de molhar as plantas. Você entende o que quero dizer.</RJW_Quirk_PlantLover_Description>
	<RJW_Quirk_RobotLover_Description>O que é melhor, 2D ou 3D? {pawn} sabe que os impressos em 3d te dão o melhor dos dois mundos.</RJW_Quirk_RobotLover_Description>
	<RJW_Quirk_ScaleLover_Description>Quem gostaria de foder um dragão? Definitivamente {pawn}. {pawn} quer foder um dragão.</RJW_Quirk_ScaleLover_Description>
	<RJW_Quirk_SkinLover_Description>{pawn} prefere que seus parceiros tenham uma pele macia e sensível, sem nenhum pelo ou escama pra atrapalhar. Por sorte {pawn_objective} humanos estão por toda parte.</RJW_Quirk_SkinLover_Description>
	<RJW_Quirk_SlimeLover_Description>Pela sua natureza deslizante e maleável, slimes são muito, muito boas em sexo. Como você pode ouvir de {pawn} se você parar pra escutar suas conversas por muito tempo.</RJW_Quirk_SlimeLover_Description>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
	<MaxQuirks>Максимально число причуд</MaxQuirks>
	<MaxQuirks_desc>Кол-во причуд, которое может быть сгенерировано для пешки.</MaxQuirks_desc>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
	<Quirks>Причуды: </Quirks>
	<NoQuirks>Без причуд, ваниль.</NoQuirks>
	<RJW_Quirk_Messy_Description><![CDATA[
{pawn} производит гораздо больше жидкостей при сексе и {pawn_pronoun} редко решает убрать {pawn_possessive} грязь с пола.
]]></RJW_Quirk_Messy_Description>
	<RJW_Quirk_Podophile_Description><![CDATA[
{pawn} очень любит ноги и более склонен к сексу с участием ног.
]]></RJW_Quirk_Podophile_Description>
	<RJW_Quirk_Teratophile_Description><![CDATA[
{pawn} предпочитает уродов. {pawn_pronoun} так же предпочитает зверей побольше и пострашнее, если {pawn_pronoun}, конечно, любит такое...
]]></RJW_Quirk_Teratophile_Description>
	<RJW_Quirk_Endytophile_Description><![CDATA[
{pawn} предпочитает оставлять {pawn_possessive} одежду на себе во время секса.
]]></RJW_Quirk_Endytophile_Description>
	<RJW_Quirk_Exhibitionist_Description><![CDATA[
{pawn} любит заниматься сексом на глазах у других.
]]></RJW_Quirk_Exhibitionist_Description>
	<RJW_Quirk_Gerontophile_Description><![CDATA[
{pawn} любит партнёров постарже (55+ по человеческим меркам).
]]></RJW_Quirk_Gerontophile_Description>
	<RJW_Quirk_Somnophile_Description><![CDATA[
{pawn} предпочитает видеть {pawn_possessive} партнёров спящими во время секса.
]]></RJW_Quirk_Somnophile_Description>
	<RJW_Quirk_Sapiosexual_Description><![CDATA[
{pawn} предпочитает умных партнёров.
]]></RJW_Quirk_Sapiosexual_Description>
	<RJW_Quirk_Fertile_Description><![CDATA[
{pawn} имеет невероятно высокий уровень фертильности.
]]></RJW_Quirk_Fertile_Description>
	<RJW_Quirk_Infertile_Description><![CDATA[
{pawn} имеет невероятно низкий уровень фертильности.
]]></RJW_Quirk_Infertile_Description>
	<RJW_Quirk_ImpregnationFetish_Description><![CDATA[
{pawn} возбуждается лишь от одной мысли о беременности. {pawn_pronoun} предпочитает позы, которые могут закончится беременностью.{pawn} вообще боится того что {pawn_pronoun} или {pawn_possessive} партнёр забеременнеет .
]]></RJW_Quirk_ImpregnationFetish_Description>
	<RJW_Quirk_PregnancyFetish_Description><![CDATA[
{pawn} предпочитает партнёров "в положении".
]]></RJW_Quirk_PregnancyFetish_Description>
	<RJW_Quirk_Incubator_Description><![CDATA[
{pawn} успевает выносить в себе такое количество яиц, что {pawn_possessive} тело приспособилось к их вынашиванию. {pawn_possessive} скорость инкубации яиц повышена.
]]></RJW_Quirk_Incubator_Description>
	<RJW_Quirk_Breeder_Description><![CDATA[
{pawn} успевает выносить в себе столько детей, что {pawn_possessive} тело приспособилось к их вынашиванию. {pawn_possessive} беременности теперь короче и дают больше потомства.
]]></RJW_Quirk_Breeder_Description>
	<RJW_Quirk_Vigorous_Description><![CDATA[
{pawn} словно набирается сил от секса! {pawn_pronoun} практически не устаёт им заниматься.
]]></RJW_Quirk_Vigorous_Description>
	<RJW_Quirk_ChitinLover_Description><![CDATA[
{pawn} возбуждается от плавных изгибов и жёсткости хитинового покрова. {pawn_pronoun} предпочитает насекомых в качестве партнёров.
]]></RJW_Quirk_ChitinLover_Description>
	<RJW_Quirk_DemonLover_Description><![CDATA[
{pawn} любитель непослушных. {pawn_pronoun} предпочитает чтобы {pawn_possessive} партнёры выглядели словно исчадия ада. Или хотя бы некоторые их части.
]]></RJW_Quirk_DemonLover_Description>
	<RJW_Quirk_FeatherLover_Description><![CDATA[
{pawn} любит чтобы снизу было попушистее. {pawn_pronoun} предпочитает птиц и динозавров. Потому что и у птиц и у динозавров есть перья, как объясняет {pawn}.
]]></RJW_Quirk_FeatherLover_Description>
	<RJW_Quirk_FurLover_Description><![CDATA[
{pawn} предпочитает партнёров с густым и шелковистым словноем шерсти.
]]></RJW_Quirk_FurLover_Description>
	<RJW_Quirk_PlantLover_Description><![CDATA[
{pawn} любит поливать цветы. Если вы понимаете о чём я.
]]></RJW_Quirk_PlantLover_Description>
	<RJW_Quirk_RobotLover_Description><![CDATA[
Что лучше, 2D или 3D? {pawn} знает что 3D-печать может дать тебе лучшее от обоих миров.
]]></RJW_Quirk_RobotLover_Description>
	<RJW_Quirk_ScaleLover_Description><![CDATA[
Кто бы не хотел отыметь дракона? {pawn} точно не откажется. {pawn} определённо хочет отыметь дракона.
]]></RJW_Quirk_ScaleLover_Description>
	<RJW_Quirk_SkinLover_Description><![CDATA[
{pawn} предпочитает чтобы у {pawn_possessive} партнёров была гладкая и упругая кожа без каких либо помех вроде чешуи или шерсти. К {pawn_objective} счастью людей в этом мире полно.
]]></RJW_Quirk_SkinLover_Description>
	<RJW_Quirk_SlimeLover_Description><![CDATA[
Из-за того что слизь очень скользкая и легко деформируется, слизни очень хороши для секса. И ты услышишь это не раз, пока {pawn} будет про них распинаться.
]]></RJW_Quirk_SlimeLover_Description>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
	<MaxQuirks>Max. peculiaridades</MaxQuirks>
	<MaxQuirks_desc>El peón máximo de peculiaridades puede obtener cuando se crea.</MaxQuirks_desc>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
	<Quirks>Peculiaridades: </Quirks>
	<NoQuirks>Sin peculiaridades, vainilla.</NoQuirks>
	<RJW_Quirk_Messy_Description><![CDATA[
{pawn} no solo produce grandes cantidades de líquido durante las relaciones sexuales, sino {pawn_pronoun} rara vez se molesta en limpiar {pawn_possessive}self afterwards.
]]></RJW_Quirk_Messy_Description>
	<RJW_Quirk_Podophile_Description><![CDATA[
{pawn} realmente le gustan los pies y prefiere los actos sexuales relacionados con los pies.
]]></RJW_Quirk_Podophile_Description>
	<RJW_Quirk_Teratophile_Description><![CDATA[
{pawn} prefiere socios feos. {pawn_pronoun} también preferiría animales más grandes y salvajes si {pawn_pronoun} estaban en ese tipo de cosas...
]]></RJW_Quirk_Teratophile_Description>
	<RJW_Quirk_Endytophile_Description><![CDATA[
{pawn} prefiere quedarse {pawn_possessive} ropa puesta durante el sexo.
]]></RJW_Quirk_Endytophile_Description>
	<RJW_Quirk_Exhibitionist_Description><![CDATA[
{pawn} disfruta tener sexo donde otros puedan ver.
]]></RJW_Quirk_Exhibitionist_Description>
	<RJW_Quirk_Gerontophile_Description><![CDATA[
{pawn} prefiere parejas mayores (55+ a escala humana).
]]></RJW_Quirk_Gerontophile_Description>
	<RJW_Quirk_Somnophile_Description><![CDATA[
{pawn} prefiere {pawn_possessive} compañeros para dormir
]]></RJW_Quirk_Somnophile_Description>
	<RJW_Quirk_Sapiosexual_Description><![CDATA[
{pawn} prefiere compañeros inteligentes.
]]></RJW_Quirk_Sapiosexual_Description>
	<RJW_Quirk_Fertile_Description><![CDATA[
{pawn} tiene una fertilidad inusualmente alta y, por lo tanto, es más probable que tenga hijos.
]]></RJW_Quirk_Fertile_Description>
	<RJW_Quirk_Infertile_Description><![CDATA[
{pawn} tiene una fertilidad inusualmente baja y, por lo tanto, es poco probable que tenga hijos.
]]></RJW_Quirk_Infertile_Description>
	<RJW_Quirk_ImpregnationFetish_Description><![CDATA[
{pawn} realmente le gusta la idea de que alguien quede embarazada. {pawn_pronoun} prefiere parejas y posiciones sexuales donde existe la posibilidad de embarazo. {pawn_pronoun} no le importa si {pawn_pronoun} está quedando embarazada o {pawn_possessive} pareja es siempre que se forme el bebé.
]]></RJW_Quirk_ImpregnationFetish_Description>
	<RJW_Quirk_PregnancyFetish_Description><![CDATA[
{pawn} prefiere parejas que estén visiblemente embarazadas.
]]></RJW_Quirk_PregnancyFetish_Description>
	<RJW_Quirk_Incubator_Description><![CDATA[
{pawn} ha dado a luz tantos huevos que {pawn_possessive} el cuerpo se ha adaptado a manejarlos. {pawn_possessive} ha aumentado la velocidad de incubación de los huevos.
]]></RJW_Quirk_Incubator_Description>
	<RJW_Quirk_Breeder_Description><![CDATA[
{pawn} ha parido tantas veces que {pawn_possessive} el cuerpo se ha adaptado a la cría. {pawn_possessive} los embarazos son más cortos y producen más descendencia.
]]></RJW_Quirk_Breeder_Description>
	<RJW_Quirk_Vigorous_Description><![CDATA[
{pawn} se vigoriza con el sexo. {pawn_pronoun} no se cansa tanto durante las relaciones sexuales.
]]></RJW_Quirk_Vigorous_Description>
	<RJW_Quirk_ChitinLover_Description><![CDATA[
{pawn} disfruta de la suave fuerza de un exoesqueleto quitinoso. {pawn_pronoun} prefiere parejas aracnoideas o insectoides.
]]></RJW_Quirk_ChitinLover_Description>
	<RJW_Quirk_DemonLover_Description><![CDATA[
{pawn} está detrás de los traviesos. {pawn_pronoun} prefiere {pawn_possessive} compañeros para venir de las profundidades literales del infierno, o al menos mirar el papel.
]]></RJW_Quirk_DemonLover_Description>
	<RJW_Quirk_FeatherLover_Description><![CDATA[
{pawn} ama esa pelusa suave. {pawn_pronoun} prefiere compañeros de aves o dinosaurios. Porque los dinosaurios son pájaros y tienen plumas, como {pawn_pronoun} lo explicará con gran detalle si se le da la oportunidad.
]]></RJW_Quirk_FeatherLover_Description>
	<RJW_Quirk_FurLover_Description><![CDATA[
{pawn} prefiere una pareja con un pelaje espeso, lujoso y muy suave.
]]></RJW_Quirk_FurLover_Description>
	<RJW_Quirk_PlantLover_Description><![CDATA[
{pawn} le gusta regar las plantas. Si sabes a lo que me refiero.
]]></RJW_Quirk_PlantLover_Description>
	<RJW_Quirk_RobotLover_Description><![CDATA[
¿Que es mejor? ¿2D o 3D? {pawn} sabe que la impresión en 3D le ofrece lo mejor de ambos mundos.
]]></RJW_Quirk_RobotLover_Description>
	<RJW_Quirk_ScaleLover_Description><![CDATA[
¿Quién no querría follar con un dragón? Definitivamente no {pawn}. {pawn} quiere coger con un dragón.
]]></RJW_Quirk_ScaleLover_Description>
	<RJW_Quirk_SkinLover_Description><![CDATA[
{pawn} prefiere {pawn_possessive} compañeros para tener una piel suave y sensible sin pelos ni escamas que se interpongan en el camino. Por suerte para {pawn_objective}, los humanos están por todas partes.
]]></RJW_Quirk_SkinLover_Description>
	<RJW_Quirk_SlimeLover_Description><![CDATA[
Debido a su naturaleza resbaladiza y maleable, los slimes son muy, muy buenos para el sexo. Como oirás una y otra vez si escuchas {pawn} hablar durante cualquier período de tiempo.
]]></RJW_Quirk_SlimeLover_Description>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
	<MaxQuirks>Максимальне число примх</MaxQuirks>
	<MaxQuirks_desc>Кількість примх, яка може бути згенерована для пішака.</MaxQuirks_desc>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
	<Quirks>Особливості: </Quirks>
	<NoQuirks>Немає особливостей.</NoQuirks>
	<RJW_Quirk_Messy_Description><![CDATA[
{pawn} не тільки виробляє велику кількість рідини під час сексу, але й {pawn_pronoun} рідко турбується про те, щоб почистити {pawn_possessive} після себе.
]]></RJW_Quirk_Messy_Description>
	<RJW_Quirk_Podophile_Description><![CDATA[
{pawn} дуже любить ноги і віддає перевагу сексу, пов'язаному з ногами.
]]></RJW_Quirk_Podophile_Description>
	<RJW_Quirk_Cumslut_Description><![CDATA[
{pawn} дуже любить сперму і віддає перевагу мінету.
]]></RJW_Quirk_Cumslut_Description>
	<RJW_Quirk_Buttslut_Description><![CDATA[
{pawn} дуже любить анал і віддає перевагу анальному сексу.
]]></RJW_Quirk_Buttslut_Description>
	<RJW_Quirk_Teratophile_Description><![CDATA[
{pawn} віддає перевагу потворним партнерам. {pawn_pronoun} також віддає перевагу більшим та диким тваринам, якби {pawn_pronoun} був на це налаштований...
]]></RJW_Quirk_Teratophile_Description>
	<RJW_Quirk_Endytophile_Description><![CDATA[
{pawn} воліє не знімати одяг {pawn_possessive} під час сексу.
]]></RJW_Quirk_Endytophile_Description>
	<RJW_Quirk_Exhibitionist_Description><![CDATA[
{pawn} любить займатися сексом там, де інші можуть побачити.
]]></RJW_Quirk_Exhibitionist_Description>
	<RJW_Quirk_Gerontophile_Description><![CDATA[
{pawn} віддає перевагу старшим партнерам (55+ за людськими мірками).
]]></RJW_Quirk_Gerontophile_Description>
	<RJW_Quirk_Somnophile_Description><![CDATA[
{pawn} вважає за краще, щоб {pawn_possessive} партнери спали під час сексу.
]]></RJW_Quirk_Somnophile_Description>
	<RJW_Quirk_Sapiosexual_Description><![CDATA[
{pawn} віддає перевагу розумним партнерам.
]]></RJW_Quirk_Sapiosexual_Description>
	<RJW_Quirk_Fertile_Description><![CDATA[
{pawn} має надзвичайно високу народжуваність, а отже, більше шансів мати дітей.
]]></RJW_Quirk_Fertile_Description>
	<RJW_Quirk_Infertile_Description><![CDATA[
{pawn} має незвично низьку народжуваність і тому навряд чи матиме дітей.
]]></RJW_Quirk_Infertile_Description>
	<RJW_Quirk_ImpregnationFetish_Description><![CDATA[
{pawn} дійсно любить ідею коли хтось вагітний. {pawn_pronoun} віддає перевагу партнерам і позиціям під час сексу, де є можливість вагітності. {pawn_pronoun} не цікавиться тим, чи сам {pawn_pronoun} стає вагітним, чи {pawn_possessive} партнер, головне, щоб народився малюк.
]]></RJW_Quirk_ImpregnationFetish_Description>
	<RJW_Quirk_PregnancyFetish_Description><![CDATA[
{pawn} віддає перевагу партнерам, які мають видиму вагітність.
]]></RJW_Quirk_PregnancyFetish_Description>
	<RJW_Quirk_Incubator_Description><![CDATA[
{pawn} висидів(-ла) стільки яєць, що її організм адаптувався до них. Швидкість інкубації яєць у {pawn_possessive} збільшилась.
]]></RJW_Quirk_Incubator_Description>
	<RJW_Quirk_Breeder_Description><![CDATA[
{pawn} народив(-ла) стільки разів, що її організм адаптувався до розмноження. Вагітності у {pawn_possessive} стають коротшими та приносять більше нащадків.
]]></RJW_Quirk_Breeder_Description>
	<RJW_Quirk_Vigorous_Description><![CDATA[
{pawn} підбадьорюється сексом. {pawn_pronoun} не так сильно втомлюється під час сексу.
]]></RJW_Quirk_Vigorous_Description>
	<RJW_Quirk_ChitinLover_Description><![CDATA[
{pawn} насолоджується гладкою міцністю хітинового екзоскелету. {pawn_pronoun} віддає перевагу павукоподібним або комахоподібним партнерам.
]]></RJW_Quirk_ChitinLover_Description>
	<RJW_Quirk_DemonLover_Description><![CDATA[
{pawn} пристрастився(-лась) до забороненого. {pawn_pronoun} віддає перевагу тим партнерам, які приходять з буквальної глибини пекла, або принаймні мають відповідний зовнішній вигляд.
]]></RJW_Quirk_DemonLover_Description>
	<RJW_Quirk_FeatherLover_Description><![CDATA[
{pawn} любить пухнасту пір'яну шерсть. {pawn_pronoun} віддає перевагу партнерам-птахам або динозаврам. Бо динозаври - це птахи, як {pawn_pronoun} пояснить дуже докладно, якщо буде можливість.
]]></RJW_Quirk_FeatherLover_Description>
	<RJW_Quirk_FurLover_Description><![CDATA[
{pawn} віддає перевагу партнерам з густою, розкішною, м'якою і пухнастою шерстю.
]]></RJW_Quirk_FurLover_Description>
	<RJW_Quirk_PlantLover_Description><![CDATA[
{pawn} любить поливати рослини. Якщо ви знаєте, про що я.
]]></RJW_Quirk_PlantLover_Description>
	<RJW_Quirk_RobotLover_Description><![CDATA[
Що краще - 2D або 3D? {pawn} знає, що 3D-друк дає вам кращі можливості обох світів.
]]></RJW_Quirk_RobotLover_Description>
	<RJW_Quirk_ScaleLover_Description><![CDATA[
Хто не хоче трахнути дракона? Однозначно не {pawn}. {pawn} хоче трахнути дракона.
]]></RJW_Quirk_ScaleLover_Description>
	<RJW_Quirk_SkinLover_Description><![CDATA[
{pawn} віддає перевагу {pawn_possessive} партнерам що мають гладеньку чутливу шкіру без шерсті та лусочок, що заважають. На щастя для {pawn_objective} люди повсюди.
]]></RJW_Quirk_SkinLover_Description>
	<RJW_Quirk_SlimeLover_Description><![CDATA[
Завдяки своїй слизькій і податливій природі слимаки дуже, дуже гарні в сексі. У цьому ви зможете переконатися, якщо будете слухати розмови {pawn} протягом тривалого часу.
]]></RJW_Quirk_SlimeLover_Description>
</LanguageData>


code:
<?xml version="1.0" encoding="utf-8"?>
<ModMetaData>
	<name>NOT RJW Quirks</name>
	<author>amevarashi</author>
	<supportedVersions>

1.0

	</supportedVersions>
	<modDependencies>

			<packageId>brrainz.harmony</packageId>
			<displayName>Harmony</displayName>
			<steamWorkshopUrl>steam://url/CommunityFilePage/2009463077</steamWorkshopUrl>
			<downloadUrl>https://github.com/pardeike/HarmonyRimWorld/releases/latest</downloadUrl>

			<packageId>rim.job.world</packageId>
			<displayName>RimJobWorld</displayName>
			<downloadUrl>https://gitgud.io/Ed86/rjw</downloadUrl>

	</modDependencies>
	<loadAfter>

brrainz.harmony

rim.job.world

	</loadAfter>
	<packageId>rjw.quirks</packageId>
	<description>If you see this, you have downloaded uncompiled source codes of the mod.

To get the actual mod:
1. Go to the https://gitgud.io/amevarashi/rjw-quirks/-/releases
2. Open latest release (Pre-release for the test version)
3. Click on the "RJW Quirks" link under the "Packages"
	</description>
</ModMetaData>


code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Manifest>
  <identifier>rjw.quirks</identifier>
  <version>1.5.1.0</version>
</Manifest>


code:
<?xml version="1.0" encoding="utf-8"?>
<ModMetaData>
  <name>RJW Quirks</name>
  <author>amevarashi</author>
  <supportedVersions>

1.5

  </supportedVersions>
  <modVersion>1.5.1.0</modVersion>
  <modDependencies>

      <packageId>brrainz.harmony</packageId>
      <displayName>Harmony</displayName>
      <steamWorkshopUrl>steam://url/CommunityFilePage/2009463077</steamWorkshopUrl>
      <downloadUrl>https://github.com/pardeike/HarmonyRimWorld/releases/latest</downloadUrl>

      <packageId>rim.job.world</packageId>
      <displayName>RimJobWorld</displayName>
      <downloadUrl>https://gitgud.io/Ed86/rjw</downloadUrl>

  </modDependencies>
  <loadAfter>

brrainz.harmony

rim.job.world

  </loadAfter>
  <packageId>rjw.quirks</packageId>
  <url>https://gitgud.io/amevarashi/rjw-quirks</url>
  <description><![CDATA[
This is a submod for RJW that adds quirk framework and a basic set of quirks
]]></description>
</ModMetaData>


code:
## Version 1.5.1.0
* Separated from RJW


code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<loadFolders>
	<v1.5>

/

1.5

	</v1.5>
</loadFolders>


code:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32630.192
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RJWQuirks", "RJWQuirks\RJWQuirks.csproj", "{9C728E06-573B-4B04-A07F-ACBF60CB424D}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{9C728E06-573B-4B04-A07F-ACBF60CB424D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{9C728E06-573B-4B04-A07F-ACBF60CB424D}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{9C728E06-573B-4B04-A07F-ACBF60CB424D}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{9C728E06-573B-4B04-A07F-ACBF60CB424D}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {03C87A93-F76D-49B3-AE25-67E14F20EACD}
	EndGlobalSection
EndGlobal


code:
using HarmonyLib;
using System.Linq;
using System.Reflection;
using Verse;

namespace RJWQuirks
{
	[StaticConstructorOnStartup]
	internal static class First
	{
		static First()
		{
			Harmony har = new("RJWQuirks");
			har.PatchAll(Assembly.GetExecutingAssembly());

			foreach (ThingDef thingDef in DefDatabase<ThingDef>.AllDefs.Where(def => def.race != null))
			{
				thingDef.comps.Add(new CompProperties(typeof(ThingComp_QuirkTracker)));
				if (RqPrefs.debugLogs) RqLog.Message($"Added QuirkTracker to {thingDef.label}");
			}
		}
	}
}


code:
using System.Collections.Generic;
using HarmonyLib;
using RimWorld;
using rjw;
using Verse;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(CasualSex_Helper))]
	public static class Patch_CasualSex_Helper
	{
		[HarmonyPrefix, HarmonyPatch(nameof(CasualSex_Helper.ScoreSexSpot))]
		public static void Prefix_ScoreSexSpot(Pawn pawn, ref bool isExhibitionist)
		{
			isExhibitionist = pawn.has_quirk(Quirks.Exhibitionist.Key);
		}

		[HarmonyPostfix, HarmonyPatch(nameof(CasualSex_Helper.ScoreSexSpot))]
		public static void Postfix_ScoreSexSpot(List<Pawn> otherPawns, IntVec3 cell, Pawn pawn, Pawn partner, ref int __result)
		{
			if (partner != null)
			{
				return;
			}

			bool isSomnophile = pawn.has_quirk(Quirks.Somnophile.Key);

			if (isSomnophile) // Fap while Watching someone sleep. Not creepy at all!
			{
				if (otherPawns.Any(x
						=> !x.Awake()
						&& x.Position.DistanceTo(cell) < 6
						&& GenSight.LineOfSight(cell, x.Position, pawn.Map)
						)
					)
				{
					__result += 50;
				}
			}
		}
	}
}


code:
using HarmonyLib;
using rjw;
using Verse;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(CompRJW))]
	public static class Patch_CompRJW
	{
		[HarmonyPostfix, HarmonyPatch(nameof(CompRJW.Sexualize))]
		public static void Postfix_Sexualize(Pawn pawn, bool reroll)
		{
			if (RqPrefs.debugLogs) RqLog.Message($"Sexualizing {pawn}, reroll = {reroll}");
			pawn.GetQuirks().Sexualize(pawn, reroll);
		}
	}
}


code:
using HarmonyLib;
using rjw;
using Verse;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(CondomUtility))]
	public static class Patch_CondomUtility
	{
		/// <summary>
		///
		/// </summary>
		/// <param name="__result">Does pawn want to use condom</param>
		/// <returns>Run original method implementation</returns>
		[HarmonyPrefix, HarmonyPatch(nameof(CondomUtility.TryUseCondom))]
		public static bool Prefix_TryUseCondom(Pawn pawn, ref bool __result)
		{
			if (pawn.has_quirk(Quirks.ImpregnationFetish.Key))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"{pawn} won't use condom because of the quirk");
				__result = false;
				return false;
			}

			return true;
		}

		/// <summary>
		///
		/// </summary>
		/// <returns>Run original method implementation</returns>
		[HarmonyPrefix, HarmonyPatch(nameof(CondomUtility.TryUseCondom))]
		public static bool Prefix_TryUseCondom(Pawn pawn)
		{
			if (pawn.has_quirk(Quirks.ImpregnationFetish.Key))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"{pawn} won't use condom because of the quirk");
				return false;
			}

			return true;
		}
	}
}


code:
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HarmonyLib;
using rjw;
using UnityEngine;
using Verse;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(Dialog_Sexcard), nameof(Dialog_Sexcard.SexualityCard))]
	public static class Patch_Dialog_Sexcard
	{
		public static void Postfix(Rect rect, Pawn pawn)
		{
			Rect rect1 = new(8f, 4f, rect.width - 8f, rect.height - 20f);
			float num = rect1.y + 40f;
			Rect row2 = new(10f, num + 24, rect.width - 8f, 24f);
			DrawQuirks(pawn, row2);
		}

		private static void DrawQuirks(Pawn pawn, Rect row)
		{

			var quirks = Quirk.All
				.Where(quirk => pawn.Has(quirk))
				.OrderBy(quirk => quirk.Key)
				.ToList();

			// Not actually localized.
			var quirkString = quirks.Select(quirk => quirk.Key).ToCommaList();

			if (Current.ProgramState == ProgramState.Playing &&
				pawn.IsDesignatedHero() &&
				pawn.IsHeroOwner() ||
				Prefs.DevMode ||
				Current.ProgramState == ProgramState.Entry)
			{
				var quirksAll = Quirk.All
								.OrderBy(quirk => quirk.Key)
								.ToList();

				if (!RJWSettings.DevMode)
				{
					quirksAll.Remove(Quirk.Breeder);
					quirksAll.Remove(Quirk.Incubator);
				}

				if (xxx.is_insect(pawn))
					quirksAll.Add(Quirk.Incubator);

				if (Widgets.ButtonText(row, "Quirks".Translate() + quirkString, false))
				{
					var list = new List<FloatMenuOption>
					{
						new("Reset", () => QuirkAdder.Clear(pawn), MenuOptionPriority.Default)
					};
					foreach (Quirk quirk in quirksAll)
					{
						if (!pawn.Has(quirk))
							list.Add(new FloatMenuOption(quirk.Key, () => QuirkAdder.Add(pawn, quirk, warnOnFail: true)));
					}
					Find.WindowStack.Add(new FloatMenu(list));
				}
			}
			else
			{
				// TODO: long quirk list support
				// This can be too long and line wrap.
				// Should probably be a vertical list like traits.
				Widgets.Label(row, "Quirks".Translate() + quirkString);
			}

			if (!Mouse.IsOver(row)) return;

			Widgets.DrawHighlight(row);
			if (quirks.NullOrEmpty())
			{
				TooltipHandler.TipRegion(row, "NoQuirks".Translate());
			}
			else
			{
				StringBuilder stringBuilder = new();
				foreach (var q in quirks)
				{
					stringBuilder.AppendLine(q.LocalizationName.Translate().Colorize(Color.yellow));
					stringBuilder.AppendLine(q.LocalizationDescription.Translate(pawn.Named("pawn")).AdjustedFor(pawn).Resolve());
					stringBuilder.AppendLine("");
				}
				string str = stringBuilder.ToString().TrimEndNewlines();
				TooltipHandler.TipRegion(row, str);
			}
		}
	}
}


code:
using HarmonyLib;
using rjw.Modules.Interactions.Preferences;
using Verse;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(GeneralPreferences), nameof(GeneralPreferences.IsOrdinary))]
	public static class Patch_GeneralPreferences
	{
		/// <summary>
		///
		/// </summary>
		/// <param name="__result">Does pawn counts as ordinary</param>
		/// <returns>Run original method implementation</returns>
		public static bool Prefix(Pawn pawn, Pawn partner, ref bool __result)
		{
			__result = !pawn.HasQuirk(Quirk.Buttslut);
			if (RqPrefs.debugLogs && !__result) RqLog.Message($"{pawn} is not ordinary because of quirks");
			return __result;
		}
	}
}


code:
using HarmonyLib;
using rjw;
using Verse;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(Hediff_BasePregnancy))]
	public static class Patch_Hediff_BasePregnancy
	{
		[HarmonyPostfix, HarmonyPatch(nameof(Hediff_BasePregnancy.PostBirth))]
		public static void Postfix_PostBirth(Pawn mother/*, Pawn father, Pawn baby*/)
		{
			if (RqPrefs.debugLogs) RqLog.Message($"Checking {mother}s records after the birth");

			if (mother.records.GetAsInt(xxx.CountOfBirthHuman) > 10 ||
				mother.records.GetAsInt(xxx.CountOfBirthAnimal) > 20)
			{
				mother.Add(Quirk.Breeder);
				mother.Add(Quirk.ImpregnationFetish);
			}
		}

		[HarmonyPostfix, HarmonyPatch("GetGestationPeriod")]
		public static void Postfix_GetGestationPeriod(ref float __result, Pawn ___pawn)
		{
			if (___pawn.Has(Quirk.Breeder) &&
					!___pawn.health.hediffSet.HasHediff(RqDefOf.Hediff.FertilityEnhancer))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"Lowering gestation period for {___pawn}");

				__result /= 1.25f;
			}
		}

		[HarmonyPostfix, HarmonyPatch("GetMaxLitterSize")]
		public static void Postfix_GetMaxLitterSize(Pawn ___pawn, ref float __result)
		{
			if (___pawn.Has(Quirk.Breeder) || ___pawn.Has(Quirk.Incubator))
			{
				__result *= 2f;
				if (RqPrefs.debugLogs) RqLog.Message($"MaxLitterSize x2 for {___pawn}");
			}
		}
	}
}


code:
using HarmonyLib;
using rjw;
using Verse;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(Hediff_InsectEgg))]
	public static class Patch_Hediff_InsectEgg
	{
		[HarmonyPostfix, HarmonyPatch("UpdateBirtherRecords")]
		public static void Postfix_UpdateBirtherRecords(Pawn mother)
		{
			if (RqPrefs.debugLogs) RqLog.Message($"Checking {mother}s records after birthing an egg");

			if (mother.records.GetAsInt(xxx.CountOfBirthEgg) > 100)
			{
				mother.Add(Quirk.Incubator);
				mother.Add(Quirk.ImpregnationFetish);
			}
		}

		[HarmonyPostfix, HarmonyPatch("GetIncubationPeriod")]
		public static void Postfix_GetIncubationPeriod(/*Pawn implanter,*/ ref float __result, Pawn ___pawn)
		{
			if (___pawn.has_quirk(Quirks.Incubator.Key) &&
					!___pawn.health.hediffSet.HasHediff(RqDefOf.Hediff.FertilityEnhancer))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"Lowering egg incubation period for {___pawn}");

				__result /= 2f;
			}
		}
	}
}


code:
using HarmonyLib;
using rjw;
using Verse;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(JobDriver_SexBaseInitiator))]
	public static class Patch_JobDriver_SexBaseInitiator
	{
		[HarmonyPostfix, HarmonyPatch(nameof(JobDriver_SexBaseInitiator.Start))]
		public static void Postfix_Start(ref bool ___isEndytophile, Pawn ___pawn)
		{
			___isEndytophile = ___pawn.has_quirk(Quirks.Endytophile.Key);

			if (RqPrefs.debugLogs && ___isEndytophile) RqLog.Message($"{___pawn} set as Endytophile");
		}
	}
}


code:
using HarmonyLib;
using rjw;
using Verse;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(JobGiver_Masturbate))]
	public static class Patch_JobGiver_Masturbate
	{
		[HarmonyPostfix, HarmonyPatch("WillingToMasturbateIn")]
		public static void Postfix_WillingToMasturbateIn(Pawn pawn, ref bool __result)
		{
			if (!__result && pawn.has_quirk(Quirks.Exhibitionist.Key))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"{pawn} is willing to use bed because of quirk");
				__result = true;
			}
		}

		[HarmonyPostfix, HarmonyPatch("WillingToMasturbateEverywhere")]
		public static void Postfix_WillingToMasturbateEverywhere(Pawn pawn, ref bool __result)
		{
			if (!__result && pawn.has_quirk(Quirks.Exhibitionist.Key))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"{pawn} is willing to use masturbate everywhere because of quirk");
				__result = true;
			}
		}
	}
}


code:
using HarmonyLib;
using rjw;
using Verse;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(PregnancyHelper))]
	public static class Patch_PregnancyHelper
	{
		[HarmonyPostfix, HarmonyPatch(nameof(PregnancyHelper.GetMaxEggsSize))]
		public static void Postfix_GetMaxEggSize(Pawn pawn, ref float __result)
		{
			if (pawn.has_quirk(Quirks.Incubator.Key))
			{
				__result *= 2f;
				if (RqPrefs.debugLogs) RqLog.Message($"MaxLitterSize x2 for {pawn}");
			}
		}
	}
}


code:
using System.Collections.Generic;
using System.Reflection;
using System.Reflection.Emit;
using HarmonyLib;
using rjw;
using Verse;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(SexAppraiser))]
	public static class Patch_SexAppraiser
	{
		[HarmonyTranspiler, HarmonyPatch(nameof(SexAppraiser.would_fuck_animal))]
		public static IEnumerable<CodeInstruction> Transpiler_ConsiderCleaning(IEnumerable<CodeInstruction> instructions)
		{
			const int wildness_modifier = 1;
			const int size_preference = 3;
			const int pawn = 0;
			const int target = 1;

			//MethodInfo floatRangeCtor = AccessTools.Method(typeof(FloatRange), ".ctor", [typeof(float), typeof(float)]);
			ConstructorInfo floatRangeCtor = AccessTools.Constructor(typeof(FloatRange), [typeof(float), typeof(float)]);

			bool found = false;

			foreach (CodeInstruction instruction in instructions)
			{
				yield return instruction;

				if (found)
				{
					continue;
				}

				if (instruction.Is(OpCodes.Call, floatRangeCtor))
				{
					// Insert after
					// FloatRange size_preference = new(pawn.BodySize * 0.75f, pawn.BodySize * 1.6f);
					yield return CodeInstruction.LoadArgument(pawn);
					yield return CodeInstruction.LoadArgument(target);
					yield return CodeInstruction.LoadLocal(size_preference, true);
					yield return CodeInstruction.LoadLocal(wildness_modifier, true);
					yield return CodeInstruction.Call(typeof(Patch_SexAppraiser), nameof(ChangeAnimalBasePrefs));
					found = true;
				}
			}

			if (!found)
			{
				RqLog.Error("Failed to patch SexAppraiser.would_fuck_animal");
			}
		}

		[HarmonyPostfix, HarmonyPatch(nameof(SexAppraiser.would_fuck_animal))]
		public static void Postfix_would_fuck_animal(Pawn pawn, Pawn target, ref float __result)
		{
			if (target.IsVisiblyPregnant() && Quirk.PregnancyFetish.IsSatisfiedBy(pawn, target))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"would_fuck between {pawn} and {target} *4 because of PregnancyFetish");
				// RJW does *= 0.25f for a pregnant animals, revert it for PregnancyFetish
				__result *= 4f;
			}
		}

		[HarmonyPostfix, HarmonyPatch("GetOpinionFactor")]
		public static void Postfix_GetOpinionFactor(Pawn fucker, Pawn fucked, ref float __result)
		{
			if (Quirk.Sapiosexual.IsSatisfiedBy(fucker, fucked))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"OpinionFactor between {fucker} and {fucked} *1.4 because of Sapiosexual");
				__result *= 1.4f;
			}
		}

		[HarmonyPostfix, HarmonyPatch("GetBodyFactor")]
		public static void Postfix_GetBodyFactor(Pawn fucker, Pawn fucked, ref float __result)
		{
			if (Quirk.Teratophile.IsSatisfiedBy(fucker, fucked))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"BodyFactor between {fucker} and {fucked} *2 because of Teratophile");
				__result *= 2f;
			}

			if (Quirk.Somnophile.IsSatisfiedBy(fucker, fucked))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"BodyFactor between {fucker} and {fucked} *1.25 because of Somnophile");
				__result *= 1.25f;
			}

			if (Quirk.PregnancyFetish.IsSatisfiedBy(fucker, fucked))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"BodyFactor between {fucker} and {fucked} *1.25 because of PregnancyFetish");
				__result *= 1.25f;
			}

			if (Quirk.ImpregnationFetish.IsSatisfiedBy(fucker, fucked))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"BodyFactor between {fucker} and {fucked} *1.25 because of ImpregnationFetish");
				__result *= 1.25f;
			}

			if (Quirk.PlantLover.IsSatisfiedBy(fucker, fucked) || Quirk.FurLover.IsSatisfiedBy(fucker, fucked) || Quirk.FeatherLover.IsSatisfiedBy(fucker, fucked) || Quirk.ScaleLover.IsSatisfiedBy(fucker, fucked) || Quirk.ChitinLover.IsSatisfiedBy(fucker, fucked))
			{   // Will preferr targets that satisfy fetish.
				if (RqPrefs.debugLogs) RqLog.Message($"BodyFactor between {fucker} and {fucked} *1.25 because of *Lover");
				__result *= 1.25f;
			}
		}

		/// <summary>
		///
		/// </summary>
		/// <param name="__result"></param>
		/// <returns>Run original method implementation</returns>
		[HarmonyPrefix, HarmonyPatch("GetAgeFactor")]
		public static bool Prefix_GetAgeFactor(Pawn fucker, Pawn fucked, ref float __result)
		{
			if (Quirk.Gerontophile.IsSatisfiedBy(fucker, fucked))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"AgeFactor between {fucker} and {fucked} is 1 because of Gerontophile");
				__result = 1.0f;
				return false;
			}

			return true;
		}

		private static void ChangeAnimalBasePrefs(Pawn pawn, Pawn target, ref FloatRange size_preference, ref float wildness_modifier)
		{
			if (pawn.has_quirk(Quirks.Teratophile.Key))
			{   // Teratophiles prefer more 'monstrous' partners.
				if (RqPrefs.debugLogs) RqLog.Message($"Teratophile changed size prefs between {pawn} and {target}");
				size_preference.min = pawn.BodySize * 0.8f;
				size_preference.max = pawn.BodySize * 2.0f;
				wildness_modifier = 0.3f;
			}
			if (Quirk.FeatherLover.IsSatisfiedBy(pawn, target) || Quirk.FurLover.IsSatisfiedBy(pawn, target) || Quirk.FeatherLover.IsSatisfiedBy(pawn, target) || Quirk.ScaleLover.IsSatisfiedBy(pawn, target) || Quirk.ChitinLover.IsSatisfiedBy(pawn, target))
			{   // Will care less about size difference if fetish is satisfied.
				size_preference.min *= 0.4f;
				size_preference.max *= 1.5f;
			}
		}
	}
}


code:
using System.Collections.Generic;
using HarmonyLib;
using rjw;
using rjw.Modules.Interactions;
using rjw.Modules.Interactions.Preferences;
using Verse;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(SexInteractionScorer), nameof(SexInteractionScorer.GetPawnPreferences))]
	public static class Patch_SexInteractionScorer
	{
		public static void Postfix(bool isInitiator, SexProps props, List<SexPreference> __result)
		{
			Pawn pawn = isInitiator ? props.initiator : props.recipient;
			Pawn partner = isInitiator ? props.recipient : props.initiator;

			GetPawnPreferences(pawn, partner, __result);
		}

		private static void GetPawnPreferences(Pawn pawn, Pawn partner, List<SexPreference> preferences)
		{
			if(xxx.is_human(pawn))
			{
				if (RqPrefs.debugLogs) RqLog.Message("Adding quirk sex preferences");
				preferences.AddRange(QuirksPreferences.GetPreferences(pawn, partner));
			}
		}
	}
}


code:
using System.Collections.Generic;
using HarmonyLib;
using Multiplayer.API;
using rjw;
using Verse;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(SexUtility))]
	public static class Patch_SexUtility
	{
		private const float base_sat_per_quirk = 0.20f;

		[HarmonyPrefix, HarmonyPatch(nameof(SexUtility.reduce_rest))]
		public static void Prefix_reduce_rest(Pawn pawn, ref float x)
		{
			if (pawn.Has(Quirk.Vigorous))
			{
				x /= 2f;
				if (RqPrefs.debugLogs) RqLog.Message($"Rest reduction for {pawn} is halved because of Vigorous to {x}");
			}
		}

		[HarmonyPostfix, HarmonyPatch(nameof(SexUtility.GenerateMinTicksToNextLovin))]
		public static void Postfix_GenerateMinTicksToNextLovin(Pawn pawn, ref int __result)
		{
			if (pawn.Has(Quirk.Vigorous))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"MinTicksToNextLovin for {pawn} before {__result}");
				__result = (int)(__result * 0.8f);
				if (RqPrefs.debugLogs) RqLog.Message($"MinTicksToNextLovin for {pawn} after {__result}");
			}
		}

		[HarmonyPrefix, HarmonyPatch(nameof(SexUtility.SatisfyPersonal))]
		public static void Prefix_SatisfyPersonal(SexProps props, ref float satisfaction)
		{
			float quirkSatisfaction = 1f;

			// Calculate bonus satisfaction from quirks
			int quirkCount = Quirk.CountSatisfiedQuirks(props);
			quirkSatisfaction += quirkCount * base_sat_per_quirk;
			satisfaction *= quirkSatisfaction;

			if (quirkCount > 0)
			{
				Quirk.AddThought(props.pawn);
			}

			if (RqPrefs.debugLogs) RqLog.Message($"quirkSatisfaction for {props.pawn} is {quirkSatisfaction}");
		}

		[HarmonyPostfix, HarmonyPatch(nameof(SexUtility.GiveTraits))]
		public static void Postfix_GiveTraits(SexProps props)
		{
			GiveQuirkTraits(props, 0.05f);
		}

		[HarmonyTranspiler, HarmonyPatch(nameof(SexUtility.ConsiderCleaning))]
		public static IEnumerable<CodeInstruction> Transpiler_ConsiderCleaning(IEnumerable<CodeInstruction> instructions)
		{
			const int do_cleaning = 0;
			const int pawn = 0;

			bool found = false;

			foreach (CodeInstruction instruction in instructions)
			{
				yield return instruction;

				if (found)
				{
					continue;
				}

				if (instruction.IsStlocOf(do_cleaning))
				{
					// First store of do_cleaning should be
					// float do_cleaning = 0.5f;
					yield return CodeInstruction.LoadArgument(pawn);
					yield return CodeInstruction.LoadLocal(do_cleaning, true);
					yield return CodeInstruction.Call(typeof(Patch_SexUtility), nameof(CleaningQuirkModifiers));
					found = true;
				}
			}

			if (!found)
			{
				RqLog.Error("Failed to patch SexUtility.ConsiderCleaning");
			}
		}

		[HarmonyTranspiler, HarmonyPatch(nameof(SexUtility.CumFilthGenerator))]
		public static IEnumerable<CodeInstruction> Transpiler_CumFilthGenerator(IEnumerable<CodeInstruction> instructions)
		{
			const int pawn_cum = 0;
			const int pawn = 0;

			bool found = false;

			foreach (CodeInstruction instruction in instructions)
			{
				yield return instruction;

				if (found)
				{
					continue;
				}

				if (instruction.IsStlocOf(pawn_cum))
				{
					// First store of pawn_cum should be
					// float pawn_cum = 3.0f;
					yield return CodeInstruction.LoadArgument(pawn);
					yield return CodeInstruction.LoadLocal(pawn_cum, true);
					yield return CodeInstruction.Call(typeof(Patch_SexUtility), nameof(CumAmountQuirkModifiers));
					found = true;
				}
			}

			if (!found)
			{
				RqLog.Error("Failed to patch SexUtility.CumFilthGenerator");
			}
		}

		private static void CleaningQuirkModifiers(Pawn fapper, ref float cleaningChance)
		{
			if (fapper.has_quirk(Quirks.Messy.Key))
			{
				cleaningChance -= 0.75f;
			}
		}

		private static void CumAmountQuirkModifiers(Pawn pawn, ref float cumAmount)
		{
			if (pawn.has_quirk(Quirks.Messy.Key))
			{
				cumAmount *= 2.0f;
			}
		}

		[SyncMethod]
		private static void GiveQuirkTraits(SexProps props, float traitGainChance = 0.05f)
		{
			var pawn = props.pawn;
			if (!pawn.Has(Quirk.Podophile))
			{
				if (props.sexType == xxx.rjwSextype.Footjob)
					if (props.IsSubmissive())
					{
						if (Rand.Chance(traitGainChance))
						{
							pawn.Add(Quirk.Podophile);
						}
					}
			}
			if (!pawn.Has(Quirk.Cumslut))
			{
				if (props.sexType == xxx.rjwSextype.Fellatio)
					if (props.IsSubmissive())
					{
						if (Rand.Chance(traitGainChance))
						{
							pawn.Add(Quirk.Cumslut);
						}
					}
			}
			if (!pawn.Has(Quirk.Buttslut))
			{
				if (props.sexType == xxx.rjwSextype.Anal)
					if (props.IsSubmissive())
					{
						if (Rand.Chance(traitGainChance))
						{
							pawn.Add(Quirk.Buttslut);
						}
					}
			}
		}
	}
}


code:
using System.Linq;
using HarmonyLib;
using rjw;
using Verse;
using Verse.AI;

namespace RJWQuirks.Patches
{
	[HarmonyPatch(typeof(ThinkNode_ChancePerHour_Fappin), "GetAloneFactor")]
	public static class Patch_ThinkNode_ChancePerHour_Fappin
	{
		/// <summary>
		///
		/// </summary>
		/// <returns>Run original method implementation</returns>
		public static bool Prefix(Pawn p, ref float __result)
		{
			if (p.has_quirk(Quirks.Exhibitionist.Key))
			{
				if (RqPrefs.debugLogs) RqLog.Message($"{p} is exhibitionist, modifying masturvation mtb");
				bool isAlone = !p.Map.mapPawns.AllPawnsSpawned.Any(x => p.CanSee(x) && xxx.is_human(x));
				__result = isAlone ? 1.0f : 0.6f;
				return false;
			}

			return true;
		}
	}
}


code:
using Prepatcher;
using rjw;
using Verse;

namespace RJWQuirks
{
	public static class PawnExtensions
	{
		public static bool Has(this Pawn pawn, Quirk quirk)
		{
			return has_quirk(pawn, quirk.Key);
		}

		public static void Add(this Pawn pawn, Quirk quirk)
		{
			QuirkAdder.Add(pawn, quirk);
		}

		public static bool HasQuirk(this Pawn pawn, Quirk quirk)
		{
			return pawn.HasQuirk(quirk.Key);
		}

		public static bool HasQuirk(this Pawn pawn, string quirk)
		{
			if (pawn == null)
			{
				return false;
			}

			if (string.IsNullOrWhiteSpace(quirk))
			{
				return false;
			}

			string loweredQuirk = quirk.ToLower();

			string pawnQuirks = pawn.GetQuirks().quirks
				.ToString()
				.ToLower();

			return pawnQuirks.Contains(loweredQuirk);
		}

		public static bool has_quirk(this Pawn pawn, string quirk)
		{
			return pawn != null && xxx.is_human(pawn) && pawn.GetQuirks().quirks.ToString().Contains(quirk);
		}

		[PrepatcherField, InjectComponent]
		public static ThingComp_QuirkTracker GetQuirks(this Pawn pawn)
		{
			return pawn.GetComp<ThingComp_QuirkTracker>();
		}
	}
}


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

namespace RJWQuirks
{
	public class Quirk
	{
		public static List<Quirk> All = new List<Quirk>();

		public static readonly Quirk Breeder = new(
			Quirks.Breeder.Key,
			Quirks.Breeder.Name,
			Quirks.Breeder.Description);
		public static readonly Quirk Endytophile = new(
			Quirks.Endytophile.Key,
			Quirks.Endytophile.Name,
			Quirks.Endytophile.Description,
			(pawn, partner) => !partner.apparel.PsychologicallyNude,
			sexProps => !sexProps.pawn.apparel.PsychologicallyNude
			);
		public static readonly Quirk Exhibitionist = new(
			Quirks.Exhibitionist.Key,
			Quirks.Exhibitionist.Name,
			Quirks.Exhibitionist.Description,
			null,
			SatisfiesExhibitionist
			);
		public static readonly Quirk Fertile = new(
			Quirks.Fertile.Key,
			Quirks.Fertile.Name,
			Quirks.Fertile.Description);
		public static readonly Quirk Gerontophile = new(
			Quirks.Gerontophile.Key,
			Quirks.Gerontophile.Name,
			Quirks.Gerontophile.Description,
			(pawn, partner) => SexUtility.ScaleToHumanAge(partner) > 55,
			sexProps => sexProps.hasPartner() && SexUtility.ScaleToHumanAge(sexProps.partner) > 55
			);
		public static readonly Quirk ImpregnationFetish = new(
			Quirks.ImpregnationFetish.Key,
			Quirks.ImpregnationFetish.Name,
			Quirks.ImpregnationFetish.Description,
			(pawn, partner) =>
				PregnancyHelper.CanImpregnate(pawn, partner)
				|| PregnancyHelper.CanImpregnate(partner, pawn),
			sexProps =>
				sexProps.hasPartner()
				&& (PregnancyHelper.CanImpregnate(sexProps.pawn, sexProps.partner, sexProps.sexType)
					|| PregnancyHelper.CanImpregnate(sexProps.partner, sexProps.pawn, sexProps.sexType))
			);
		public static readonly Quirk Incubator = new(
			Quirks.Incubator.Key,
			Quirks.Incubator.Name,
			Quirks.Incubator.Description);
		public static readonly Quirk Infertile = new(
			Quirks.Infertile.Key,
			Quirks.Infertile.Name,
			Quirks.Infertile.Description);
		public static readonly Quirk Messy = new(
			Quirks.Messy.Key,
			Quirks.Messy.Name,
			Quirks.Messy.Description);
		public static readonly Quirk Podophile = new(
			Quirks.Podophile.Key,
			Quirks.Podophile.Name,
			Quirks.Podophile.Description,
			null,
			sexProps => sexProps.hasPartner() && sexProps.sexType == xxx.rjwSextype.Footjob && sexProps.IsSubmissive()
			);
		public static readonly Quirk Cumslut = new(
			Quirks.Cumslut.Key,
			Quirks.Cumslut.Name,
			Quirks.Cumslut.Description,
			null,
			sexProps => sexProps.hasPartner() && sexProps.sexType == xxx.rjwSextype.Fellatio && sexProps.IsSubmissive()
			);
		public static readonly Quirk Buttslut = new(
			Quirks.Buttslut.Key,
			Quirks.Buttslut.Name,
			Quirks.Buttslut.Description,
			null,
			sexProps => sexProps.hasPartner() && sexProps.sexType == xxx.rjwSextype.Anal && sexProps.IsSubmissive()
			);
		public static readonly Quirk PregnancyFetish = new(
			Quirks.PregnancyFetish.Key,
			Quirks.PregnancyFetish.Name,
			Quirks.PregnancyFetish.Description,
			(pawn, partner) => partner.IsVisiblyPregnant(),
			sexProps => sexProps.hasPartner() && sexProps.partner.IsVisiblyPregnant()
			);
		public static readonly Quirk Sapiosexual = new(
			Quirks.Sapiosexual.Key,
			Quirks.Sapiosexual.Name,
			Quirks.Sapiosexual.Description,
			(pawn, partner) => SatisfiesSapiosexual(partner),
			null
			);
		public static readonly Quirk Somnophile = new(
			Quirks.Somnophile.Key,
			Quirks.Somnophile.Name,
			Quirks.Somnophile.Description,
			(pawn, partner) => !partner.Awake(),
			sexProps => sexProps.hasPartner() && !sexProps.partner.Awake()
			);
		public static readonly Quirk Teratophile = new(
			Quirks.Teratophile.Key,
			Quirks.Teratophile.Name,
			Quirks.Teratophile.Description,
			(pawn, partner) => SatisfiesTeratophile(partner),
			null
			);
		public static readonly Quirk Vigorous = new(
			Quirks.Vigorous.Key,
			Quirks.Vigorous.Name,
			Quirks.Vigorous.Description);

		// There might be too many of these I dunno.
		// People have expressed "special interest" in some of them so I thought
		// it would be cool to have them in the game but since people are weird you end up with a lot of fetishes.
		public static readonly Quirk ChitinLover =	MakeTagBasedQuirk(Quirks.ChitinLover.Key,	Quirks.ChitinLover.Name,	Quirks.ChitinLover.Description, RaceTag.Chitin);
		public static readonly Quirk DemonLover =	MakeTagBasedQuirk(Quirks.DemonLover.Key,	Quirks.DemonLover.Name,		Quirks.DemonLover.Description, RaceTag.Demon);
		public static readonly Quirk FeatherLover = MakeTagBasedQuirk(Quirks.FeatherLover.Key,	Quirks.FeatherLover.Name,	Quirks.FeatherLover.Description, RaceTag.Feathers);
		public static readonly Quirk FurLover =		MakeTagBasedQuirk(Quirks.FurLover.Key,		Quirks.FurLover.Name,		Quirks.FurLover.Description, RaceTag.Fur);
		public static readonly Quirk PlantLover =	MakeTagBasedQuirk(Quirks.PlantLover.Key,	Quirks.PlantLover.Name,		Quirks.PlantLover.Description, RaceTag.Plant);
		public static readonly Quirk RobotLover =	MakeTagBasedQuirk(Quirks.RobotLover.Key,	Quirks.RobotLover.Name,		Quirks.RobotLover.Description, RaceTag.Robot);
		public static readonly Quirk ScaleLover =	MakeTagBasedQuirk(Quirks.ScaleLover.Key,	Quirks.ScaleLover.Name,		Quirks.ScaleLover.Description, RaceTag.Scales);
		public static readonly Quirk SkinLover =	MakeTagBasedQuirk(Quirks.SkinLover.Key,		Quirks.SkinLover.Name,		Quirks.SkinLover.Description, RaceTag.Skin);
		public static readonly Quirk SlimeLover =	MakeTagBasedQuirk(Quirks.SlimeLover.Key,	Quirks.SlimeLover.Name,		Quirks.SlimeLover.Description, RaceTag.Slime);

		public string Key { get; }
		public string LocalizationName { get; }
		public string LocalizationDescription { get; }
		[Obsolete("Use LocalizationDescription instead", true)]
		public string LocaliztionKey { get; }
		// Hack, quirk generation logic should be in the quirk not based on flags on the quirk.
		public RaceTag RaceTag { get; }
		readonly Func<Pawn, Pawn, bool> PawnSatisfiesFunc;
		readonly Func<SexProps, bool> SexSatisfiesFunc;
		readonly Action<Pawn> AfterAddFunc;

		public static Quirk MakeTagBasedQuirk(string key, string localizationName, string localizationDescription, RaceTag tag)
		{
			return new Quirk(
				key,
				localizationName,
				localizationDescription,
				(pawn, partner) => partner.Has(tag),
				sexProps => sexProps.hasPartner() && sexProps.partner.Has(tag),
				null,
				tag);
		}

		public Quirk(
			string key,
			string localizationName,
			string localizationDescription,
			Func<Pawn, Pawn, bool> pawnSatisfies = null,
			Func<SexProps, bool> sexSatisfies = null,
			Action<Pawn> afterAdd = null,
			RaceTag raceTag = null)
		{
			Key = key;
			LocalizationName = localizationName;
			LocalizationDescription = localizationDescription;
			PawnSatisfiesFunc = pawnSatisfies;
			SexSatisfiesFunc = sexSatisfies;
			AfterAddFunc = afterAdd;
			RaceTag = raceTag;
			All.Add(this);
		}

		public bool IsSatisfiedBy(Pawn pawn, Pawn partner)
		{
			return pawn != null
				&& partner != null
				&& pawn.Has(this)
				&& PawnSatisfiesFunc != null
				&& PawnSatisfiesFunc(pawn, partner);
		}

		public static int CountSatisfiedQuirks(SexProps props)
		{
			Pawn pawn = props.pawn;
			Pawn partner = props.partner;
			var satisfies = All.Where(quirk =>
				quirk.SexSatisfiesFunc != null
				&& pawn.Has(quirk)
				&& quirk.SexSatisfiesFunc(props));
			return satisfies.Count();
		}

		public void DoAfterAdd(Pawn pawn)
		{
			AfterAddFunc?.Invoke(pawn);
		}

		public static bool SatisfiesExhibitionist(SexProps sexProps)
		{
			var zoo = xxx.is_zoophile(sexProps.pawn);
			return sexProps.pawn.Map.mapPawns.AllPawnsSpawned.Any(x =>
				x != sexProps.pawn
				&& x != sexProps.partner
				&& !x.Dead
				&& (zoo || !xxx.is_animal(x))
				&& x.CanSee(sexProps.pawn));
		}

		public static bool SatisfiesSapiosexual(Pawn partner)
		{
			if (!xxx.has_traits(partner)) return false;
			return partner.story.traits.HasTrait(VanillaTraitDefOf.TooSmart)
				|| (xxx.CTIsActive && partner.story.traits.HasTrait(xxx.RCT_Savant))
				|| (xxx.IndividualityIsActive && partner.story.traits.HasTrait(xxx.SYR_CreativeThinker))
				|| (xxx.CTIsActive && partner.story.traits.HasTrait(xxx.RCT_Inventor))
				|| partner.story.traits.HasTrait(TraitDefOf.GreatMemory)
				|| partner.story.traits.HasTrait(TraitDefOf.Transhumanist)
				|| partner.skills.GetSkill(SkillDefOf.Intellectual).levelInt >= 15;
		}

		public static bool SatisfiesTeratophile(Pawn partner)
		{
			if (partner.story == null) return false;
			var story = partner.story;
			return RelationsUtility.IsDisfigured(partner)
				|| story.bodyType == BodyTypeDefOf.Fat
				|| story.traits.HasTrait(TraitDefOf.CreepyBreathing)
				|| (story.traits.HasTrait(VanillaTraitDefOf.Beauty) && story.traits.DegreeOfTrait(VanillaTraitDefOf.Beauty) < 0)
				|| partner.GetStatValue(StatDefOf.PawnBeauty) < 0;
		}

		public static void AddThought(Pawn pawn)
		{
			var thoughtDef = DefDatabase<ThoughtDef>.GetNamed("ThatsMyFetish");
			pawn.needs.mood.thoughts.memories.TryGainMemory(thoughtDef);
		}
	}
}


code:
using System.Collections.Generic;
using System.Linq;
using Verse;
using Multiplayer.API;
using rjw;

namespace RJWQuirks
{
	public static class QuirkAdder
	{
		public static void Add(Pawn pawn, Quirk quirk, bool warnOnFail = false)
		{
			if (pawn.Has(quirk))
			{
				return;
			}

			ThingComp_QuirkTracker quirkComp = pawn.GetQuirks();
			bool hasFertility = pawn.RaceHasFertility();

			if (quirk == Quirk.Fertile && (!hasFertility || quirkComp.quirks.ToString().Contains(Quirk.Infertile.Key)))
			{
				if (warnOnFail)
				{
					ModLog.Warning($"Tried to add quirk {quirk} to {pawn.Name}, but either {pawn.def} does not have fertility or {pawn.Name} has a conflicting quirk");
				}
				return;
			}
			if (quirk == Quirk.Infertile && (!hasFertility || quirkComp.quirks.ToString().Contains(Quirk.Fertile.Key)))
			{
				if (warnOnFail)
				{
					ModLog.Warning($"Tried to add quirk {quirk} to {pawn.Name}, but either {pawn.def} does not have fertility or {pawn.Name} has a conflicting quirk");
				}
				return;
			}
			// No fair having a fetish for your own race.
			// But tags don't conflict so having a fetish for robot plant dragons is fine.
			if (quirk.RaceTag != null && pawn.Has(quirk.RaceTag))
			{
				if (warnOnFail)
				{
					ModLog.Warning($"Tried to add quirk {quirk} to {pawn.Name}, but {pawn} already has the associated race tag {quirk.RaceTag}");
				}
				return;
			}
			if (quirk == Quirk.Fertile)
			{
				pawn.health.AddHediff(RqDefOf.Hediff.IncreasedFertility);
			}
			if (quirk == Quirk.Infertile)
			{
				pawn.health.AddHediff(RqDefOf.Hediff.DecreasedFertility);
			}

			quirkComp.quirks.AppendWithComma(quirk.Key);
			quirkComp.quirksave = quirkComp.quirks.ToString();
			quirk.DoAfterAdd(pawn);
		}

		public static void Remove(Pawn pawn, Quirk quirk)
		{
			if (!pawn.Has(quirk))
			{
				return;
			}

			if (quirk == Quirk.Fertile)
			{
				pawn.health.RemoveHediff(pawn.health.hediffSet.GetFirstHediffOfDef(RqDefOf.Hediff.IncreasedFertility));
			}
			if (quirk == Quirk.Infertile)
			{
				pawn.health.RemoveHediff(pawn.health.hediffSet.GetFirstHediffOfDef(RqDefOf.Hediff.DecreasedFertility));
			}

			ThingComp_QuirkTracker quirkComp = pawn.GetQuirks();
			quirkComp.quirks.Replace(quirk.Key, null);

			if (quirkComp.quirks.Length == 0)
				quirkComp.quirks.Append("None");

			quirkComp.quirksave = quirkComp.quirks.ToString();
		}

		public static void Clear(Pawn pawn)
		{
			Hediff fertility = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("IncreasedFertility"));
			if (fertility != null)
				pawn.health.RemoveHediff(fertility);
			Hediff infertility = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("DecreasedFertility"));
			if (infertility != null)
				pawn.health.RemoveHediff(infertility);

			ThingComp_QuirkTracker quirkComp = pawn.GetQuirks();
			quirkComp.quirks.Clear();

			if (quirkComp.quirks.Length == 0)
				quirkComp.quirks.Append("None");

			quirkComp.quirksave = quirkComp.quirks.ToString();
		}

		public static void Generate(Pawn pawn)
		{
			if (!pawn.RaceHasSexNeed() || (pawn.kindDef.race.defName.ToLower().Contains("droid") && !AndroidsCompatibility.IsAndroid(pawn)))
			{
				return;
			}
			else if (pawn.IsAnimal())
			{
				GenerateForAnimal(pawn);
			}
			else
			{
				GenerateForHumanlike(pawn);
			}
		}

		[SyncMethod]
		static void GenerateForHumanlike(Pawn pawn)
		{
			int count = Rand.RangeInclusive(0, RqPrefs.maxQuirks);
			List<Quirk> list = Quirk.All.ToList();
			list.Shuffle();

			// Some quirks may be hard for a given pawn to indulge in.
			// For example a female homosexual will have a hard time satisfying an impregnation fetish.
			// But rimworld is a weird place and you never know what the pawn will be capable of in the future.
			// We still don't want straight up contradictory results like fertile + infertile.
			bool hasFertility = pawn.RaceHasFertility();
			List<Quirk> actual = [];
			foreach (var quirk in list)
			{
				if (count == 0)
				{
					break;
				}

				// These special cases are sort of hacked in.
				// In theory there should be a general way for the quirk itself to decide when it applies.
				if (quirk == Quirk.Fertile && (!hasFertility || actual.Contains(Quirk.Infertile)))
				{
					continue;
				}
				if (quirk == Quirk.Infertile && (!hasFertility || actual.Contains(Quirk.Fertile)))
				{
					continue;
				}
				// Have to earn these.
				if (quirk == Quirk.Breeder || quirk == Quirk.Incubator)
				{
					continue;
				}
				// No fair having a fetish for your own race.
				// But tags don't conflict so having a fetish for robot plant dragons is fine.
				if (quirk.RaceTag != null && pawn.Has(quirk.RaceTag))
				{
					continue;
				}

				count--;
				actual.Add(quirk);
			}

			foreach (var quirk in actual)
			{
				pawn.Add(quirk);
			}
		}

		[SyncMethod]
		static void GenerateForAnimal(Pawn pawn)
		{
			if (Rand.Chance(0.1f))
			{
				pawn.Add(Quirk.Messy);
			}

			if (!pawn.RaceHasFertility())
			{
				return;
			}

			if (Rand.Chance(0.1f))
			{
				pawn.Add(Quirk.Fertile);
			}
			else if (Rand.Chance(0.1f))
			{
				pawn.Add(Quirk.Infertile);
			}
		}
	}
}


code:
using Verse;

namespace RJWQuirks
{
	public interface IQuirkService
	{
		bool HasQuirk(Pawn pawn, string quirk);
	}
}


code:
using rjw;
using Verse;

namespace RJWQuirks
{
	public class QuirkService : IQuirkService
	{
		public static IQuirkService Instance { get; private set; }

		static QuirkService()
		{
			Instance = new QuirkService();
		}

		private QuirkService() { }

		public bool HasQuirk(Pawn pawn, string quirk)
		{
			//No paw ! hum ... I meant pawn !
			if (pawn == null)
			{
				return false;
			}

			//No quirk !
			if (string.IsNullOrWhiteSpace(quirk))
			{
				return false;
			}

			string loweredQuirk = quirk.ToLower();

			string pawnQuirks = pawn.GetQuirks().quirks
				.ToString()
				.ToLower();

			return pawnQuirks.Contains(loweredQuirk);
		}
	}
}


code:
using Verse;

namespace RJWQuirks
{
	public static class Quirks
	{
		public readonly static (string Key, TaggedString Name, TaggedString Description) Messy =				("Messy",					"RJW_Quirk_Messy_Name",					"RJW_Quirk_Messy_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Podophile =			("Podophile",				"RJW_Quirk_Podophile_Name",				"RJW_Quirk_Podophile_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Cumslut =				("Cumslut",					"RJW_Quirk_Cumslut_Name",				"RJW_Quirk_Cumslut_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Buttslut =				("Buttslut",				"RJW_Quirk_Buttslut_Name",				"RJW_Quirk_Buttslut_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Teratophile =			("Teratophile",				"RJW_Quirk_Teratophile_Name",			"RJW_Quirk_Teratophile_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Endytophile =			("Endytophile",				"RJW_Quirk_Endytophile_Name",			"RJW_Quirk_Endytophile_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Exhibitionist =		("Exhibitionist",			"RJW_Quirk_Exhibitionist_Name",			"RJW_Quirk_Exhibitionist_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Gerontophile =			("Gerontophile",			"RJW_Quirk_Gerontophile_Name",			"RJW_Quirk_Gerontophile_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Somnophile =			("Somnophile",				"RJW_Quirk_Somnophile_Name",			"RJW_Quirk_Somnophile_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Sapiosexual =			("Sapiosexual",				"RJW_Quirk_Sapiosexual_Name",			"RJW_Quirk_Sapiosexual_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Fertile =				("Fertile",					"RJW_Quirk_Fertile_Name",				"RJW_Quirk_Fertile_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Infertile =			("Infertile",				"RJW_Quirk_Infertile_Name",				"RJW_Quirk_Infertile_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) ImpregnationFetish =	("Impregnation fetish",		"RJW_Quirk_ImpregnationFetish_Name",	"RJW_Quirk_ImpregnationFetish_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) PregnancyFetish =		("Pregnancy fetish",		"RJW_Quirk_PregnancyFetish_Name",		"RJW_Quirk_PregnancyFetish_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Incubator =			("Incubator",				"RJW_Quirk_Incubator_Name",				"RJW_Quirk_Incubator_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Breeder =				("Breeder",					"RJW_Quirk_Breeder_Name",				"RJW_Quirk_Breeder_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) Vigorous =				("Vigorous",				"RJW_Quirk_Vigorous_Name",				"RJW_Quirk_Vigorous_Description");

		public readonly static (string Key, TaggedString Name, TaggedString Description) ChitinLover =			("Chitin lover",			"RJW_Quirk_ChitinLover_Name",			"RJW_Quirk_ChitinLover_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) DemonLover =			("Demon lover",				"RJW_Quirk_DemonLover_Name",			"RJW_Quirk_DemonLover_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) FeatherLover =			("Feather lover",			"RJW_Quirk_FeatherLover_Name",			"RJW_Quirk_FeatherLover_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) FurLover =				("Fur lover",				"RJW_Quirk_FurLover_Name",				"RJW_Quirk_FurLover_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) PlantLover =			("Plant lover",				"RJW_Quirk_PlantLover_Name",			"RJW_Quirk_PlantLover_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) RobotLover =			("Robot lover",				"RJW_Quirk_RobotLover_Name",			"RJW_Quirk_RobotLover_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) ScaleLover =			("Scale lover",				"RJW_Quirk_ScaleLover_Name",			"RJW_Quirk_ScaleLover_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) SkinLover =			("Skin lover",				"RJW_Quirk_SkinLover_Name",				"RJW_Quirk_SkinLover_Description");
		public readonly static (string Key, TaggedString Name, TaggedString Description) SlimeLover =			("Slime lover",				"RJW_Quirk_SlimeLover_Name",			"RJW_Quirk_SlimeLover_Description");
	}
}


code:
using UnityEngine;
using Verse;

namespace RJWQuirks
{
	public class QuirksMod : Mod
	{
		public QuirksMod(ModContentPack content) : base(content)
		{
			GetSettings<RqPrefs>();
		}

		public override string SettingsCategory()
		{
			return "RJWQuirks";
		}

		public override void DoSettingsWindowContents(Rect inRect)
		{
			RqPrefs.DoWindowContents(inRect);
		}
	}
}


code:
using Verse;
using System.Collections.Generic;
using rjw.Modules.Interactions.Preferences;
using rjw;
using rjw.Modules.Interactions;

namespace RJWQuirks
{
	public static class QuirksPreferences
	{
		public static IEnumerable<SexPreference> GetPreferences(Pawn pawn, Pawn partner)
		{
			if(pawn.HasQuirk(Quirk.Podophile))
			{
				yield return new TypePreference(xxx.rjwSextype.Footjob, Preference.Need);
			}

			if (pawn.HasQuirk(Quirk.ImpregnationFetish))
			{
				yield return new TagPreference(SexInteractionTag.Fertilization, Preference.Need);
			}

			if (pawn.HasQuirk(Quirk.PregnancyFetish))
			{
				yield return new SelfPartPreference(LewdablePartFamily.Penis, Preference.Neutral)
					.IfSatisfied(new TypePreference(xxx.rjwSextype.Vaginal, Preference.Need));
			}

			if (pawn.HasQuirk(Quirk.Buttslut))
			{
				yield return new SelfPartPreference(LewdablePartFamily.Anus, Preference.Love)
					.IfSatisfied(new PenetratedPreference(Preference.Need));
				yield return new SelfPartPreference(LewdablePartFamily.Vagina, Preference.Hate);
				yield return new TypePreference(xxx.rjwSextype.Masturbation, Preference.Neutral)
					.IfSatisfied(new SelfPartPreference(LewdablePartFamily.Anus, Preference.Always));
			}

			if (pawn.HasQuirk(Quirk.Cumslut))
			{
				yield return new TypePreference(xxx.rjwSextype.Fellatio, Preference.Neutral)
					.IfSatisfied(new PenetratedPreference(Preference.Need));
			}
		}
	}
}


code:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <TargetGameVersion>1.5</TargetGameVersion>
    <InternalModVersion>1.0</InternalModVersion>
    <VersionPrefix>$(TargetGameVersion).$(InternalModVersion)</VersionPrefix>
    <ProjectGuid>{9C728E06-573B-4B04-A07F-ACBF60CB424D}</ProjectGuid>
    <TargetFramework>net472</TargetFramework>
    <RootNamespace>RJWQuirks</RootNamespace>
    <AssemblyName>RJWQuirks</AssemblyName>
    <OutputPath>..\..\$(TargetGameVersion)\Assemblies\</OutputPath>
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
    <RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
    <Optimize>true</Optimize>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <Deterministic>false</Deterministic>
    <DebugSymbols>false</DebugSymbols>
    <DebugType>none</DebugType>
    <LangVersion>latest</LangVersion>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Krafs.Rimworld.Ref">
      <Version>$(TargetGameVersion).*</Version>
    </PackageReference>

    <PackageReference Include="Lib.Harmony">
      <Version>*</Version>
      <ExcludeAssets>runtime</ExcludeAssets>
      <IncludeAssets>compile; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>

    <PackageReference Include="RimWorld.MultiplayerAPI">
      <Version>*</Version>
      <ExcludeAssets>runtime</ExcludeAssets>
    </PackageReference>

    <PackageReference Include="Zetrith.Prepatcher">
      <Version>*</Version>
      <ExcludeAssets>runtime</ExcludeAssets>
    </PackageReference>
  </ItemGroup>

  <Choose>
    <When Condition=" '$(Configuration)' == 'Release' ">
      <ItemGroup>
        <Reference Include="RJW">
          <HintPath>obj\RJW.dll</HintPath>
          <Private>False</Private>
        </Reference>
      </ItemGroup>

      <PropertyGroup>
        <RjwUrl>https://gitgud.io/Ed86/rjw/-/raw/master/$(TargetGameVersion)/Assemblies/RJW.dll</RjwUrl>
      </PropertyGroup>
    </When>

    <Otherwise>
      <ItemGroup>
        <Reference Include="RJW">
          <HintPath>..\..\..\rjw\$(TargetGameVersion)\Assemblies\RJW.dll</HintPath>
          <Private>False</Private>
        </Reference>
      </ItemGroup>
    </Otherwise>
  </Choose>

  <Target Name="DownloadRJW" BeforeTargets="BeforeBuild" Condition=" '$(Configuration)' == 'Release' ">
    <DownloadFile
          SourceUrl="$(RjwUrl)"
          DestinationFolder="obj"
          DestinationFileName="RJW.dll">
    </DownloadFile>
  </Target>

  <Target Name="PostBuildAction" AfterTargets="Build">
    <XmlPoke XmlInputPath="..\..\About\RealAbout.xml" Query="//ModMetaData/modVersion" Value="$(Version)" />
    <XmlPoke XmlInputPath="..\..\About\Manifest.xml" Query="//Manifest/version" Value="$(VersionPrefix)" /> <!-- HugsLib tries to parse this into System.Version -->
  </Target>
</Project>


code:
using RimWorld;
using Verse;

namespace RJWQuirks
{
	public static class RqDefOf
	{
		[DefOf]
		public static class Hediff
		{
			public static readonly HediffDef FertilityEnhancer;
			public static readonly HediffDef IncreasedFertility;
			public static readonly HediffDef DecreasedFertility;
		}
	}
}


code:
using System.Runtime.CompilerServices;
using Verse;

namespace RJWQuirks
{
	/// <summary>
	/// Verse.Log with [RJW-Q] prefix in message text
	/// </summary>
	public static class RqLog
	{
		public static void Message(string message, [CallerMemberName] string method = null)
			=> Log.Message($"[RJW-Q] {{{method}}}: {message}");

		public static void Warning(string message, [CallerMemberName] string method = null)
			=> Log.Warning($"[RJW-Q] {{{method}}}: {message}");

		public static void Error(string message, [CallerMemberName] string method = null)
			=> Log.Error($"[RJW-Q] {{{method}}}: {message}");
	}
}


code:
using UnityEngine;
using Verse;

namespace RJWQuirks
{
	public class RqPrefs : ModSettings
	{
		public static int maxQuirks;
		public static bool debugLogs;

		public static void DoWindowContents(Rect inRect)
		{
			Listing_Standard listing = new()
			{
				maxOneColumn = true,
				ColumnWidth = inRect.width / 3.15f
			};

			listing.Begin(inRect);
			listing.Label("MaxQuirks".Translate() + ": " + maxQuirks, -1f, "MaxQuirks_desc".Translate());
			maxQuirks = (int)listing.Slider(maxQuirks, 0, 10);
			listing.CheckboxLabeled("RQ_DebugLogs".Translate(), ref debugLogs, "RQ_DebugLogs_desc".Translate());
			listing.End();
		}

		public override void ExposeData()
		{
			base.ExposeData();
			Scribe_Values.Look(ref maxQuirks, "MaxQuirks", 3);
			Scribe_Values.Look(ref debugLogs, "debugLogs", false);
		}
	}
}


code:
using System.Text;
using Verse;

namespace RJWQuirks
{
	public class ThingComp_QuirkTracker : ThingComp
	{
		public StringBuilder quirks = new();
		public string quirksave = ""; // Not the most elegant way to do this, but it minimizes the save bloat.

		public override void PostExposeData()
		{
			base.PostExposeData();
			Scribe_Values.Look(ref quirksave, "RJW_Quirks");

			// Restore quirk data from the truncated save version.
			quirks = new StringBuilder(quirksave);
		}

		public void Sexualize(Pawn pawn, bool reroll = false)
		{
			if (reroll)
			{
				if (pawn.has_quirk(Quirks.Fertile.Key))
				{
					Hediff fertility = pawn.health.hediffSet.GetFirstHediffOfDef(RqDefOf.Hediff.IncreasedFertility);
					if (fertility != null)
						pawn.health.RemoveHediff(fertility);
				}
				if (pawn.has_quirk(Quirks.Infertile.Key))
				{
					Hediff fertility = pawn.health.hediffSet.GetFirstHediffOfDef(RqDefOf.Hediff.DecreasedFertility);
					if (fertility != null)
						pawn.health.RemoveHediff(fertility);
				}
				quirks.Clear();
			}

			QuirkAdder.Generate(pawn);

			if (quirks.Length == 0)
			{
				quirks.Append("None");
				quirksave = quirks.ToString();
			}
		}
	}
}


type: Direct

type: Transitive


code:
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto

###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs     diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln       merge=binary
#*.csproj    merge=binary
#*.vbproj    merge=binary
#*.vcxproj   merge=binary
#*.vcproj    merge=binary
#*.dbproj    merge=binary
#*.fsproj    merge=binary
#*.lsproj    merge=binary
#*.wixproj   merge=binary
#*.modelproj merge=binary
#*.sqlproj   merge=binary
#*.wwaproj   merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg   binary
#*.png   binary
#*.gif   binary

###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc   diff=astextplain
#*.DOC   diff=astextplain
#*.docx  diff=astextplain
#*.DOCX  diff=astextplain
#*.dot   diff=astextplain
#*.DOT   diff=astextplain
#*.pdf   diff=astextplain
#*.PDF   diff=astextplain
#*.rtf   diff=astextplain
#*.RTF   diff=astextplain

path: .gitattributes

license: unknown


code:
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- Backup*.rdl

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush personal settings
.cr/personal

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder
.mfractor/

# Local History for Visual Studio
.localhistory/

# BeatPulse healthcheck temp database
healthchecksdb
/Source/Patches/PawnAnimationPatches/HarmonyPatch_Pawn_DrawTracker.cs
/Source/Patches/PawnAnimationPatches/HarmonyPatch_PawnRotation.cs
/Source/Patches/PawnAnimationPatches/HarmonyPatch_PawnRenderer.cs
/Source/Patches/OtherModPatches/HarmonyPatch_ShowHairWithHats.cs
/Source/Patches/OtherModPatches/HarmonyPatch_FacialAnimation.cs
/Source/Patches/OtherModPatches/HarmonyPatch_DontShaveYourHead.cs
/Source/Patches/OtherModPatches/HarmonyPatch_CSL.cs
/Source/Patches/OtherModPatches/HarmonyPatch_AlienRace.cs
/Source/Patches/ThingAnimationPatches/HarmonyPatch_ThingDrawAt.cs
/Defs/AnimationDefs/Animations_SexToys.xml
/1.5/Defs/AnimationDefs/BasicBestiality/HumanRotatedOffset.xml
/1.5/Defs/AnimationDefs/BasicBestiality/BasicBestiality4v1.xml
/1.5/Defs/AnimationDefs/BasicBestiality/BasicBestiality3v1.xml
/1.5/Defs/AnimationDefs/BasicBestiality/BasicBestiality2v1.xml
/1.5/Defs/AnimationDefs/BasicBestiality/BasicBestiality1v1.xml
/1.5/Defs/AnimationDefs/BasicBestiality/!BasicBestiality.xml
/1.5/Defs/TestDoNotPush
/1.5/Textures/AnimationProps/BEV

path: .gitignore