Compare commits

...

48 Commits

Author SHA1 Message Date
amevarashi a5b01e26dd Add README.md 2023-11-16 21:10:28 +05:00
amevarashi 0c0b6753ad 1.4.1.0 2023-11-06 16:33:05 +05:00
amevarashi 71df71a0eb Fixed: Pawns raping despite Rape-Abhorrent precept 2023-11-06 16:28:08 +05:00
amevarashi 472933e192 Migrated project to SDK 2023-11-06 14:33:26 +05:00
amevarashi a722673244 1.0.2.1 2023-06-28 20:04:08 +05:00
amevarashi 83ffa00fb6 Fixed SecondaryRomanceChanceFactor transpiler 2023-06-28 20:02:42 +05:00
amevarashi a19953c688 1.0.2.0 2023-06-25 19:12:12 +05:00
amevarashi e622b7a391 Added settings for romance patches
Added in-game explanation for DefExtension_ModifyMtb effect
2023-06-25 18:54:32 +05:00
amevarashi 77dd1a23d6 Swapped baseMoodEffect of holy and elevated pregnancy precepts 2023-04-24 10:59:04 +05:00
amevarashi 670584500b Fix IDE messages 2023-04-23 17:15:07 +05:00
amevarashi 032b031123 Change VariousDefOf to RsiDefOf 2023-04-23 16:41:27 +05:00
amevarashi f7206347da Moved precepts romanceChanceFactor to DefExtention 2023-04-23 16:16:28 +05:00
amevarashi be1e5c5d5d Replaced manual sexperience patch with the Prepare method 2023-04-23 15:38:38 +05:00
amevarashi 7e30ebe68e Optimized incest checks 2023-04-22 15:08:57 +05:00
amevarashi 7107947cac Bestiality_Acceptable nullifies RJW bestiality thoughts 2023-02-19 16:09:10 +05:00
amevarashi 785eac31de Patched SecondaryRomanceChanceFactor for incest precept 2022-11-24 23:10:03 +05:00
amevarashi 355d409eb6 Removed "not obedient" social thought for raping a slave 2022-11-23 20:12:13 +05:00
amevarashi d33fa5e3ea Moved manual romance rules into XML 2022-11-23 19:42:47 +05:00
amevarashi bcc9feb61a Changed Incestuos_IncestOnly would_fuck multiplier for blood related pawns: 2.0 -> 1.0
Changed Incestuos_IncestOnly would_fuck multiplier for non-blood related pawns: 1.0 -> 0.1
2022-11-21 22:47:52 +05:00
amevarashi 7d6f0d043c Added isBloodRelated filter attribute 2022-11-21 22:40:44 +05:00
amevarashi 765e6c0778 Moved PreceptDefs into a separate class 2022-11-20 18:55:13 +05:00
amevarashi 3bedfec30e Patched manual romance to respect incestuous precepts 2022-11-20 18:47:55 +05:00
amevarashi 180404cee1 Removed Incestuos_IncestOnly conflict with Zoophile 2022-11-20 17:56:21 +05:00
amevarashi 2855ae3f6c 1.0.1.2 2022-11-06 19:46:13 +05:00
amevarashi f43fd3cc7d Maybe removed sex proselyzing error with bestiality 2022-11-06 19:16:15 +05:00
amevarashi 31c5293e5f Removed 100% certainty spam for sex proselyzing 2022-11-06 19:14:43 +05:00
amevarashi 29b6639f7d Updated Rimworld ref 2022-11-06 19:12:46 +05:00
amevarashi f5ec31f8e7 1.0.1.1 2022-10-29 16:41:32 +05:00
amevarashi b6942e3c10 Fixed biotech pregnancy not counting for pregnancy precepts 2022-10-29 16:22:41 +05:00
amevarashi 450c835d2b Fixed Sexual Proselyzing 2022-10-29 16:03:42 +05:00
amevarashi bf7f6a29fb New precepts should not add thoughts to children 2022-10-29 15:23:25 +05:00
amevarashi d483924c47 Fixed #1: Submissive gender can't be marked for comfort 2022-10-28 22:49:15 +05:00
amevarashi 36f879e0b6 Changed mod title key 2022-10-28 18:09:46 +05:00
amevarashi ac5bbc7519 Updated RJW ref 2022-10-27 21:37:59 +05:00
amevarashi 38f5b6f0cc 1.0.1.0 2022-10-24 19:07:16 +05:00
amevarashi a8218a852d Last 1.3 changes 2022-10-22 10:12:18 +05:00
amevarashi 92e9569e63 Fix namings 2022-10-14 22:37:55 +05:00
amevarashi 075260f091 Fix folders and namespaces (except for the Rituals) 2022-10-14 21:35:31 +05:00
amevarashi 17a8264b49 Flip GenitalSize_Disapproved_Social stages 2022-10-14 21:18:24 +05:00
amevarashi 8da97c4833 Refactor genital size ThoughtWorkers to use ThoughtDefExtension_StageFromValue 2022-10-14 21:09:19 +05:00
amevarashi 5db34c0c1f Refactor ThoughtDefExtension_StageFromOpinion 2022-10-14 20:57:17 +05:00
amevarashi eda7261968 Sort out the pregnancy precepts 2022-10-14 19:29:11 +05:00
amevarashi c00a872b81 Fix load errors 2022-10-11 21:00:48 +05:00
amevarashi 4949c3694b Make masochists not immune to "not obedient" penalty 2022-10-10 20:15:44 +05:00
amevarashi 91dd9c245e Merge branch 'precept-proposal' into 'dev'
Precept proposal

See merge request amevarashi/rjw-sexperience-ideology!2
2022-08-14 12:12:21 +00:00
Leonhard Applis 05e9c5d273
Added a draft for proselyzing by sex 2022-08-10 21:08:21 +02:00
Leonhard Applis 4af1890a0e
Added a Precept on Genital Size 2022-08-10 20:58:25 +02:00
Leonhard Applis 8f4ebb749a
Drafted Pregnancy Precept 2022-08-10 20:52:32 +02:00
121 changed files with 8165 additions and 816 deletions

View File

@ -0,0 +1,206 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- This Precept was based on the "Blindness Precept" from ideology -->
<!-- Issue -->
<IssueDef>
<defName>Pregnancy</defName>
<label>pregnancy</label>
<iconPath>UI/Issues/Birth</iconPath>
</IssueDef>
<!-- Precepts -->
<PreceptDef>
<defName>Pregnancy_Holy</defName>
<issue>Pregnancy</issue>
<label>holy</label>
<description>To be pregnant is a duty worthy of respect. Women carry our society into the next generation.</description>
<impact>Medium</impact>
<displayOrderInIssue>10</displayOrderInIssue>
<comps>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Respected_Pregnant</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Respected_Pregnant_Social</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Pregnancy_Elevated</defName>
<issue>Pregnancy</issue>
<label>elevated</label>
<description>Being pregnant is considered noble.</description>
<impact>Low</impact>
<displayOrderInIssue>20</displayOrderInIssue>
<comps>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Elevated_Pregnant</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Elevated_Pregnant_Social</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Pregnancy_NoRules</defName>
<issue>Pregnancy</issue>
<label>indifferent</label>
<description>There are no thoughts about pregnancy.</description>
<impact>Low</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<comps>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Pregnancy_Required</defName>
<issue>Pregnancy</issue>
<impact>High</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<label>breeding</label>
<description>Women should be pregnant - those who are not, are seen unworthy.</description>
<comps>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Respected_Pregnant</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Respected_Pregnant_Social</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Horrible_NonPregnant</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Horrible_NonPregnant_Social</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Pregnancy_Horrible</defName>
<issue>Pregnancy</issue>
<impact>Low</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<label>horrible</label>
<description>Being Pregnant is unclean. Take care and stay pure.</description>
<comps>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Horrible_Pregnant</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Horrible_Pregnant_Social</thought>
</li>
</comps>
</PreceptDef>
<!-- Thoughts : Pregnant -->
<ThoughtDef>
<defName>Pregnancy_Respected_Pregnant</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_Pregnant</workerClass>
<thoughtClass>Thought_Situational</thoughtClass>
<stages>
<li>
<label>pregnant</label>
<description>I am pregnant. This makes me a pillar of society.</description>
<baseMoodEffect>5</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Pregnancy_Elevated_Pregnant</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_Pregnant</workerClass>
<thoughtClass>Thought_Situational</thoughtClass>
<stages>
<li>
<label>pregnant</label>
<description>I am soon making our colony stronger.</description>
<baseMoodEffect>10</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Pregnancy_Respected_Pregnant_Social</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_Pregnant_Social</workerClass>
<thoughtClass>Thought_SituationalSocial</thoughtClass>
<stages>
<li>
<label>pregnant</label>
<baseOpinionOffset>10</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Pregnancy_Elevated_Pregnant_Social</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_Pregnant_Social</workerClass>
<thoughtClass>Thought_SituationalSocial</thoughtClass>
<stages>
<li>
<label>pregnant</label>
<baseOpinionOffset>20</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Pregnancy_Horrible_Pregnant_Social</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_Pregnant_Social</workerClass>
<thoughtClass>Thought_SituationalSocial</thoughtClass>
<stages>
<li>
<label>pregnant</label>
<baseOpinionOffset>-20</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Pregnancy_Horrible_Pregnant</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_Pregnant</workerClass>
<thoughtClass>Thought_Situational</thoughtClass>
<stages>
<li>
<label>pregnant</label>
<description>How did I end up like this? I never wanted to be pregnant!</description>
<baseMoodEffect>-10</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<!-- Thoughts: Not Pregnant -->
<ThoughtDef>
<defName>Pregnancy_Horrible_NonPregnant</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_NonPregnant</workerClass>
<thoughtClass>Thought_Situational</thoughtClass>
<doNotApplyToQuestLodgers>true</doNotApplyToQuestLodgers>
<gender>Female</gender>
<stages>
<li>
<label>not pregnant</label>
<description>I wish to be pregnant.</description>
<baseMoodEffect>-6</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Pregnancy_Horrible_NonPregnant_Social</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_NonPregnant_Social</workerClass>
<thoughtClass>Thought_SituationalSocial</thoughtClass>
<gender>Female</gender>
<stages>
<li>
<label>unfertilized</label>
<baseOpinionOffset>-5</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
</Defs>

View File

@ -288,7 +288,7 @@
<defName>Sex_Promiscuous</defName>
<durationDays>1</durationDays>
<stackLimit>1</stackLimit>
<thoughtClass>RJWSexperience.Thought_IncreaseRecord</thoughtClass>
<thoughtClass>RJWSexperience.Ideology.Thought_IncreaseRecord</thoughtClass>
<stages>
<li>
<label>promiscuous sex</label>
@ -297,7 +297,7 @@
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.ThoughtDefExtension_IncreaseRecord" MayRequire="rjw.sexperience">
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_IncreaseRecord" MayRequire="rjw.sexperience">
<recordDef>Lust</recordDef>
<increment>3.0</increment>
</li>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>SexProselytizing</defName>
<label>sex type</label>
<iconPath>UI/Issues/Submissive</iconPath>
</IssueDef>
<PreceptDef>
<defName>ProselyzingByOrgasm</defName>
<issue>SexProselytizing</issue>
<label>Sexual Proselyzing</label>
<description>Giving orgasm converts partner towards this ideology.</description>
<impact>Medium</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<displayOrderInImpact>400</displayOrderInImpact>
</PreceptDef>
</Defs>

View File

@ -0,0 +1,219 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>GenitalSize</defName>
<label>Size Matters</label>
<iconPath>UI/Memes/SexualDissolutely</iconPath>
</IssueDef>
<!-- Precepts Male -->
<PreceptDef>
<defName>GenitalSize_Big_Better</defName>
<issue>GenitalSize</issue>
<description>The size matters.</description>
<label>Bigger = Better</label>
<impact>High</impact>
<displayOrderInIssue>20</displayOrderInIssue>
<displayOrderInImpact>200</displayOrderInImpact>
<comps>
<li Class="PreceptComp_SituationalThought">
<thought>GenitalSize_Approved</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>GenitalSize_Approved_Social</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>GenitalSize_NoRules</defName>
<issue>GenitalSize</issue>
<description>The size is unimportant.</description>
<label>No Rules</label>
<impact>High</impact>
<displayOrderInIssue>10</displayOrderInIssue>
<displayOrderInImpact>100</displayOrderInImpact>
<comps>
</comps>
</PreceptDef>
<PreceptDef>
<defName>GenitalSize_Smaller_Better</defName>
<issue>GenitalSize</issue>
<description>The greeks actually believed, that a big genital is an animalistic feature. Important members are known for their small genitals.</description>
<label>Smaller = Better</label>
<impact>High</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>200</displayOrderInImpact>
<comps>
<li Class="PreceptComp_SituationalThought">
<thought>GenitalSize_Disapproved</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>GenitalSize_Disapproved_Social</thought>
</li>
</comps>
</PreceptDef>
<!-- Thoughts - Mood -->
<ThoughtDef>
<defName>GenitalSize_Approved</defName>
<thoughtClass>Thought_Situational</thoughtClass>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_GenitalSize</workerClass>
<stages>
<li>
<label>Despised Genitalsize</label>
<description>I ... I am okay the way I am!</description>
<baseMoodEffect>-10</baseMoodEffect>
</li>
<li>
<label>Unwanted Genitalsize</label>
<description>I think I am below average.</description>
<baseMoodEffect>-5</baseMoodEffect>
</li>
<li>
<label>Normal Genitals</label>
<description>I guess I am the average.</description>
<baseMoodEffect>0</baseMoodEffect>
</li>
<li>
<label>Appreciated Genitals</label>
<description>I think I am above average.</description>
<baseMoodEffect>+5</baseMoodEffect>
</li>
<li>
<label>Venerated Genitals</label>
<description>Don't want to be the elephant in the room, but parts of me are.</description>
<baseMoodEffect>+10</baseMoodEffect>
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<!-- We have 5 stages, which map directly to genitalia severity:
Micro(<0.2), Small(>0.2&&<0.4), Normal(>0.4&&<0.6), Big(>0.6&&<0.8), Huge(>0.8) -->
<minimumValueforStage>
<li>0</li>
<li>0.2</li>
<li>0.4</li>
<li>0.6</li>
<li>0.8</li>
</minimumValueforStage>
</li>
</modExtensions>
</ThoughtDef>
<ThoughtDef>
<defName>GenitalSize_Disapproved</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_GenitalSize</workerClass>
<thoughtClass>Thought_Situational</thoughtClass>
<stages>
<li>
<label>Venerated Genitals</label>
<description>I do not need great genitals, as I am a being of supreme intellect and grace.</description>
<baseMoodEffect>+10</baseMoodEffect>
</li>
<li>
<label>Appreciated Genitals</label>
<description>I think I am below average.</description>
<baseMoodEffect>+5</baseMoodEffect>
</li>
<li>
<label>Normal Genitals</label>
<description>I guess I am the average.</description>
<baseMoodEffect>0</baseMoodEffect>
</li>
<li>
<label>Unwanted Genitals</label>
<description>I think I am above average.</description>
<baseMoodEffect>-5</baseMoodEffect>
</li>
<li>
<label>Despised Genitals</label>
<description>I am closer to an animal, than to a human. Why did I have to be born this way? </description>
<baseMoodEffect>-10</baseMoodEffect>
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<!-- We have 5 stages, which map directly to genitalia severity:
Micro(<0.2), Small(>0.2&&<0.4), Normal(>0.4&&<0.6), Big(>0.6&&<0.8), Huge(>0.8) -->
<minimumValueforStage>
<li>0</li>
<li>0.2</li>
<li>0.4</li>
<li>0.6</li>
<li>0.8</li>
</minimumValueforStage>
</li>
</modExtensions>
</ThoughtDef>
<!-- Social-Thoughts (Opinion)-->
<ThoughtDef>
<defName>GenitalSize_Approved_Social</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_GenitalSize_Social</workerClass>
<thoughtClass>Thought_SituationalSocial</thoughtClass>
<stages>
<li>
<label>Unwanted Genitals</label>
<baseOpinionOffset>-5</baseOpinionOffset>
</li>
<li>
<label>Normal Genitals</label>
<baseOpinionOffset>0</baseOpinionOffset>
</li>
<li>
<label>Favorable Genitals</label>
<baseOpinionOffset>+5</baseOpinionOffset>
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<!-- We have 3 stages, which map directly to genitalia severity:
Unfavorable(<0.4), Normal(>0.4&&<0.6), Favorable(>0.6) -->
<minimumValueforStage>
<li>0</li>
<li>0.4</li>
<li>0.6</li>
</minimumValueforStage>
</li>
</modExtensions>
</ThoughtDef>
<ThoughtDef>
<defName>GenitalSize_Disapproved_Social</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_GenitalSize_Social</workerClass>
<thoughtClass>Thought_SituationalSocial</thoughtClass>
<stages>
<li>
<label>Favorable Genitals</label>
<baseOpinionOffset>+5</baseOpinionOffset>
</li>
<li>
<label>Normal Genitals</label>
<baseOpinionOffset>0</baseOpinionOffset>
</li>
<li>
<label>Unwanted Genitals</label>
<baseOpinionOffset>-5</baseOpinionOffset>
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<!-- We have 3 stages, which map directly to genitalia severity:
Favorable(<0.4), Normal(>0.4&&<0.6), Unfavorable(>0.6) -->
<minimumValueforStage>
<li>0</li>
<li>0.4</li>
<li>0.6</li>
</minimumValueforStage>
</li>
</modExtensions>
</ThoughtDef>
</Defs>

View File

@ -194,9 +194,6 @@
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Masochist</li>
</nullifyingTraits>
<stages>
<li>
<label>not obedient</label>

View File

@ -270,7 +270,7 @@
<ThoughtDef>
<defName>Virgin_Precious_Taken</defName>
<thoughtClass>RJWSexperience.Thought_Opinionbased</thoughtClass>
<thoughtClass>RJWSexperience.Ideology.Thought_Opinionbased</thoughtClass>
<durationDays>7</durationDays>
<stackLimit>1</stackLimit>
<stages>
@ -296,7 +296,7 @@
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.ThoughtDefExtension_StageFromOpinion">
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<minimumValueforStage>
<li>-100</li>
<li>-50</li>
@ -309,7 +309,7 @@
<ThoughtDef>
<defName>Virgin_Shameful_Taken</defName>
<thoughtClass>RJWSexperience.Thought_Opinionbased</thoughtClass>
<thoughtClass>RJWSexperience.Ideology.Thought_Opinionbased</thoughtClass>
<durationDays>7</durationDays>
<stackLimit>1</stackLimit>
<stages>
@ -330,7 +330,7 @@
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.ThoughtDefExtension_StageFromOpinion">
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<minimumValueforStage>
<li>-100</li>
<li>0</li>

Binary file not shown.

View File

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<DutyDef>
<defName>Gangbang_Rape</defName>
<hook>HighPriority</hook>
<socialModeMax>Off</socialModeMax>
<thinkNode Class="ThinkNode_Priority">
<subNodes>
<li Class="ThinkNode_ConditionalInGatheringArea">
<subNodes>
<li Class="ThinkNode_ConditionalRandom">
<chance>0.25</chance>
<subNodes>
<li Class="RJWSexperience.Ideology.JobGiver_GangbangVictim"/>
</subNodes>
</li>
</subNodes>
</li>
<li Class="JobGiver_WanderInGatheringArea">
<locomotionUrgency>Jog</locomotionUrgency>
<ticksBetweenWandersRange>50~250</ticksBetweenWandersRange>
</li>
</subNodes>
</thinkNode>
</DutyDef>
<DutyDef>
<defName>Gangbang_Consensual</defName>
<hook>HighPriority</hook>
<socialModeMax>Off</socialModeMax>
<thinkNode Class="ThinkNode_Priority">
<subNodes>
<li Class="ThinkNode_ConditionalInGatheringArea">
<subNodes>
<li Class="ThinkNode_ConditionalRandom">
<chance>0.25</chance>
<subNodes>
<li Class="RJWSexperience.Ideology.JobGiver_GangbangConsensual"/>
</subNodes>
</li>
</subNodes>
</li>
<li Class="JobGiver_WanderInGatheringArea">
<locomotionUrgency>Jog</locomotionUrgency>
<ticksBetweenWandersRange>50~250</ticksBetweenWandersRange>
</li>
</subNodes>
</thinkNode>
</DutyDef>
<DutyDef>
<defName>FuckVictim</defName>
<hook>HighPriority</hook>
<socialModeMax>Off</socialModeMax>
<thinkNode Class="ThinkNode_Priority">
<subNodes>
<li Class="RJWSexperience.Ideology.JobGiver_GangbangVictim"/>
</subNodes>
</thinkNode>
</DutyDef>
<DutyDef>
<defName>DrugOrgy</defName>
<hook>HighPriority</hook>
<socialModeMax>Off</socialModeMax>
<thinkNode Class="ThinkNode_Priority">
<subNodes>
<li Class="ThinkNode_ConditionalInGatheringArea">
<subNodes>
<li Class="ThinkNode_ConditionalRandom">
<chance>0.15</chance>
<subNodes>
<li Class="RJWSexperience.Ideology.JobGiver_DrugOrgy"/>
</subNodes>
</li>
</subNodes>
</li>
<li Class="JobGiver_WanderInGatheringArea">
<locomotionUrgency>Jog</locomotionUrgency>
<ticksBetweenWandersRange>50~250</ticksBetweenWandersRange>
</li>
</subNodes>
</thinkNode>
</DutyDef>
</Defs>

View File

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Agreement - same -->
<GoodwillSituationDef>
<defName>Zoophile_Zoophile</defName>
<label>zoophile agreement</label>
<workerClass>GoodwillSituationWorker_MemeCompatibility</workerClass>
<meme>Zoophile</meme>
<otherMeme>Zoophile</otherMeme>
<naturalGoodwillOffset>30</naturalGoodwillOffset>
</GoodwillSituationDef>
<GoodwillSituationDef>
<defName>Necrophile_Necrophile</defName>
<label>necrophile agreement</label>
<workerClass>GoodwillSituationWorker_MemeCompatibility</workerClass>
<meme>Necrophile</meme>
<otherMeme>Necrophile</otherMeme>
<naturalGoodwillOffset>30</naturalGoodwillOffset>
</GoodwillSituationDef>
<!-- Disagreement -->
<GoodwillSituationDef>
<defName>Zoophile_All</defName>
<label>zoophile</label>
<workerClass>RJWSexperience.Ideology.GoodwillSituationWorker_OneWayReceive</workerClass>
<meme>Zoophile</meme>
<versusAll>true</versusAll>
<naturalGoodwillOffset>-50</naturalGoodwillOffset>
</GoodwillSituationDef>
<GoodwillSituationDef>
<defName>Rapist_All</defName>
<label>rapist</label>
<workerClass>RJWSexperience.Ideology.GoodwillSituationWorker_OneWayReceive</workerClass>
<meme>Rapist</meme>
<versusAll>true</versusAll>
<naturalGoodwillOffset>-20</naturalGoodwillOffset>
</GoodwillSituationDef>
<GoodwillSituationDef>
<defName>Necrophile_All</defName>
<label>necrophile</label>
<workerClass>RJWSexperience.Ideology.GoodwillSituationWorker_OneWayReceive</workerClass>
<meme>Necrophile</meme>
<versusAll>true</versusAll>
<naturalGoodwillOffset>-50</naturalGoodwillOffset>
</GoodwillSituationDef>
</Defs>

View File

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<InteractionDef>
<defName>Speech_Gangbang</defName>
<label>gangbang speech</label>
<workerClass>InteractionWorker</workerClass>
<ignoreTimeSinceLastInteraction>True</ignoreTimeSinceLastInteraction>
<symbol>Things/Mote/SpeechSymbols/Speech</symbol>
<logRulesInitiator>
<include><li>SpeechUtility</li></include>
<rulesStrings>
<li>r_logentry->[INITIATOR_nameDef] [spokeof] [speechtopic].</li>
<li>r_logentry(p=0.2)->[INITIATOR_nameDef] [crazy].</li>
<li>speechtopic->the meaning and true value of rape</li>
<li>speechtopic->expressions of rape</li>
<li>speechtopic->controlled lustful</li>
<li>speechtopic->the warmth of pussy</li>
<li>speechtopic->the meaning of cum</li>
<li>speechtopic->love and rape</li>
<li>speechtopic->symbolizing rape</li>
<li>speechtopic->dick and pussy</li>
<li>speechtopic->the art of rape</li>
<li>speechtopic->the seduction of victim</li>
<li>speechtopic->the music of screams</li>
<li>speechtopic->cums on the floor</li>
<li>crazy->screamed maniacally</li>
<li>crazy->broke into a chant</li>
<li>crazy->chanted towards the heavens</li>
<li>crazy->spat in the sacrifice's genital</li>
<li>crazy->cackled</li>
<li>crazy->brandished a condom</li>
<li>crazy->muttered repetitively while masturbating</li>
</rulesStrings>
</logRulesInitiator>
</InteractionDef>
<InteractionDef>
<defName>Speech_Zoophile</defName>
<label>zoophile speech</label>
<workerClass>InteractionWorker</workerClass>
<ignoreTimeSinceLastInteraction>True</ignoreTimeSinceLastInteraction>
<symbol>Things/Mote/SpeechSymbols/Speech</symbol>
<logRulesInitiator>
<include><li>SpeechUtility</li></include>
<rulesStrings>
<li>r_logentry->[INITIATOR_nameDef] [spokeof] [speechtopic].</li>
<li>speechtopic->the meaning and true value of bestiality</li>
<li>speechtopic->expressions of bestiality</li>
<li>speechtopic->controlled lustful</li>
<li>speechtopic->the warmth of cum</li>
<li>speechtopic->the meaning of interspecies breeding</li>
<li>speechtopic->animal and love</li>
<li>speechtopic->symbolizing bestiality</li>
<li>speechtopic->breed and birth</li>
<li>speechtopic->the art of breeding</li>
<li>speechtopic->the seduction of animals</li>
<li>speechtopic->cums on the floor</li>
</rulesStrings>
</logRulesInitiator>
</InteractionDef>
<InteractionDef>
<defName>Speech_Lewd</defName>
<label>lewd speech</label>
<workerClass>InteractionWorker</workerClass>
<ignoreTimeSinceLastInteraction>True</ignoreTimeSinceLastInteraction>
<symbol>Things/Mote/SpeechSymbols/Speech</symbol>
<logRulesInitiator>
<include><li>SpeechUtility</li></include>
<rulesStrings>
<li>r_logentry->[INITIATOR_nameDef] [spokeof] [speechtopic].</li>
<li>r_logentry(p=0.2)->[INITIATOR_nameDef] [crazy].</li>
<li>speechtopic->the meaning and true value of sex</li>
<li>speechtopic->expressions of sex</li>
<li>speechtopic->uncontrolled lustful</li>
<li>speechtopic->the warmth of pussy</li>
<li>speechtopic->the meaning of cum</li>
<li>speechtopic->love and incest</li>
<li>speechtopic->symbolizing rape</li>
<li>speechtopic->dick and pussy</li>
<li>speechtopic->the art of sex</li>
<li>speechtopic->the seduction of [spokeof]</li>
<li>speechtopic->the music of moan</li>
<li>speechtopic->cums on the floor</li>
<li>crazy->moaned maniacally</li>
<li>crazy->threw a dildo</li>
<li>crazy->threw an onahole</li>
<li>crazy->chanted towards the heavens</li>
<li>crazy->moaned</li>
<li>crazy->brandished a dildo</li>
<li>crazy->muttered repetitively while masturbating</li>
</rulesStrings>
</logRulesInitiator>
</InteractionDef>
</Defs>

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<JobDef>
<defName>RapeVictim</defName>
<driverClass>RJWSexperience.Ideology.JobDriver_RapeVictim</driverClass>
<reportString>rapin' victim</reportString>
<casualInterruptible>false</casualInterruptible>
</JobDef>
<JobDef>
<defName>DrugSex</defName>
<driverClass>RJWSexperience.Ideology.JobDriver_SexDrugOrgy</driverClass>
<reportString>lovin'.</reportString>
<casualInterruptible>false</casualInterruptible>
</JobDef>
<JobDef>
<defName>GettinDrugSex</defName>
<driverClass>RJWSexperience.Ideology.JobDriver_DrugSexReceiver</driverClass>
<reportString>lovin'.</reportString>
<casualInterruptible>false</casualInterruptible>
</JobDef>
<JobDef>
<defName>DrugMasturbate</defName>
<driverClass>RJWSexperience.Ideology.JobDriver_DrugMasturabate</driverClass>
<reportString>masturbatin'.</reportString>
<casualInterruptible>false</casualInterruptible>
</JobDef>
<JobDef>
<defName>Gangbang</defName>
<driverClass>RJWSexperience.Ideology.JobDriver_Gangbang</driverClass>
<reportString>lovin'.</reportString>
<casualInterruptible>false</casualInterruptible>
</JobDef>
<JobDef>
<defName>GettinGangbang</defName>
<driverClass>RJWSexperience.Ideology.JobDriver_GangbangReceiver</driverClass>
<reportString>gettin' gangbanged.</reportString>
<checkOverrideOnDamage>Never</checkOverrideOnDamage>
<casualInterruptible>false</casualInterruptible>
</JobDef>
</Defs>

View File

@ -0,0 +1,246 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<MemeGroupDef>
<defName>SexualDissolutely</defName>
<drawOffset>(0.65, 0.23)</drawOffset>
<maxRows>1</maxRows>
<renderOrder>3000</renderOrder>
</MemeGroupDef>
<MemeDef Name="SexualDissoulutelyBase" Abstract="True">
<groupDef>SexualDissolutely</groupDef>
<selectOneOrNone>
<noneChance>1.0</noneChance>
<preceptThingPairs>
</preceptThingPairs>
</selectOneOrNone>
</MemeDef>
<MemeDef ParentName="SexualDissoulutelyBase">
<defName>Zoophile</defName>
<label>zoophile</label>
<description>Animal fuckers.</description>
<iconPath>UI/Commands/Breeding_Pawn_off</iconPath>
<impact>3</impact>
<requireOne>
<li>
<li>Bestiality_Acceptable</li>
<li>Bestiality_OnlyVenerated</li>
<li>Bestiality_BondOnly</li>
<li>Bestiality_Honorable</li>
</li>
</requireOne>
<generalRules>
<rulesStrings>
<li>memeAdjective->bestial</li>
<li>memeAdjective->zoophile</li>
<li>memeHyphenPrefix->bestial</li>
<li>memeConcept->breeding</li>
<li>memeConcept->bestiality</li>
<li>memeConcept->zoophile</li>
<li>memeLeaderNoun->livestock</li>
</rulesStrings>
</generalRules>
<descriptionMaker>
<rules>
<rulesStrings>
<!-- theist myth -->
<li>creation(tag=meme_Zoophile) ->[deity0_name] loves breeding with beasts.</li>
<li>episode(uses=1,tag=meme_Zoophile) ->[deity0_name] said to all, "Sigmar forbids this!"</li>
<!-- ideological founder -->
<li>setup(tag=meme_Zoophile) ->Someday, [founderName] was so horny that accidentally fucked with an animal and loved it. </li>
<li>story(uses=1,tag=meme_Zoophile) ->For spreading animals, [founderName] started to breed with animals.</li>
<!-- ideological lesson -->
<li>lessonIntro(tag=meme_Zoophile) ->Someday, i had sex with animal. It was much better than humans!</li>
<li>lesson(tag=meme_Zoophile) ->Only the animals can satisfy me.</li>
<li>lessonReinforcement(tag=meme_Zoophile) ->Breed with animals. It is the eternal hapiness.</li>
<!-- archist -->
<li>archistBasis(tag=meme_Zoophile) ->Archists are always seeking ultimate pleasure.</li>
<li>archistFact(tag=meme_Zoophile) ->That was breeding with animals.</li>
<li>archistProphecy(tag=meme_Zoophile) ->[inTheEnd], the archotechs will finally unlock the interspecies breeding, so that they may lead ultimate pleasure.</li>
<!-- animist -->
<li>animistFact(tag=meme_Zoophile) ->The most powerful spirits are those of beasts, and spirits of beasts will be restless unless beasts rule.</li>
<li>animistProphecy(tag=meme_Zoophile) ->[itIsSaid] that a powerful spirit of destruction will seek to end the universe, but that a human-born beast will wield the spirit of the [relic0_name] and destroy the destroyer.</li>
</rulesStrings>
</rules>
</descriptionMaker>
<symbolPacks>
<li>
<ideoName>Breeders</ideoName>
<theme>breed</theme>
<adjective>bestiality</adjective>
<member>breeder</member>
</li>
<li>
<ideoName>Zoophilia</ideoName>
<theme>zoophile</theme>
<adjective>zoophile</adjective>
<member>zoophiliac</member>
</li>
</symbolPacks>
<agreeableTraits>
<li>Zoophile</li>
</agreeableTraits>
</MemeDef>
<MemeDef ParentName="SexualDissoulutelyBase">
<defName>Rapist</defName>
<label>rapist</label>
<description>Rape is best.</description>
<iconPath>UI/Memes/Rape</iconPath>
<impact>2</impact>
<requireOne>
<li>
<li>Rape_Honorable</li>
<li>Rape_Acceptable</li>
</li>
</requireOne>
<generalRules>
<rulesStrings>
<li>memeAdjective->violent</li>
<li>memeAdjective->raping</li>
<li>memeHyphenPrefix->rapist</li>
<li>memeHyphenPrefix->molester</li>
<li>memeHyphenPrefix->pervert</li>
<li>memeConcept->rapist</li>
<li>memeConcept->pervert</li>
<li>r_deityName->slaanesh</li>
<li>memeLeaderNoun->stallion</li>
<li>memeLeaderNoun->grand rapist</li>
</rulesStrings>
</generalRules>
<descriptionMaker>
<rules>
<rulesStrings>
<!-- theist myth -->
<li>creation(tag=meme_Rapist) ->[deity0_name] loves rape.</li>
<li>episode(uses=1,tag=meme_Rapist) ->[deity0_name] raped everyone until death during rape.</li>
<!-- ideological founder -->
<li>setup(tag=meme_Rapist) ->[founderName] is always horny. </li>
<li>story(uses=1,tag=meme_Rapist) ->[founderName] raped everyone. No one can stop [founderName]. [founderName] died trying to rape planet.</li>
<!-- ideological lesson -->
<li>lessonIntro(tag=meme_Rapist) ->Rape is best! Rape is best! Rape is best!</li>
<li>lesson(tag=meme_Rapist) ->Rape is best! Rape is best! Rape is best! Rape is best!</li>
<li>lessonReinforcement(tag=meme_Rapist) ->Rape is best! Rape is best! Rape is best! Rape is best! Rape is best!</li>
<!-- archist -->
<li>archistBasis(tag=meme_Rapist) ->Human history is history of rape.</li>
<li>archistFact(tag=meme_Rapist) ->Even archotechs cannot stop rapists.</li>
<li>archistProphecy(tag=meme_Rapist) ->[inTheEnd], the rapists never stop raping.</li>
<!-- animist -->
<li>animistFact(tag=meme_Rapist) ->The most powerful spirits are those of rapists, and spirits of rapists will rape all.</li>
<li>animistProphecy(tag=meme_Rapist) ->[itIsSaid] that a powerful spirit of destruction will seek to end the universe, but that a million-raped rapist will wield the spirit of the [relic0_name] and rape the destroyer.</li>
</rulesStrings>
</rules>
</descriptionMaker>
<symbolPacks>
<li>
<ideoName>Rapists</ideoName>
<theme>rapist</theme>
<adjective>raping</adjective>
<member>rapist</member>
</li>
<li>
<ideoName>Cult of Slaanesh</ideoName>
<theme>pleasure</theme>
<adjective>decadent</adjective>
<member>heretic</member>
</li>
</symbolPacks>
<agreeableTraits>
<li>Rapist</li>
</agreeableTraits>
</MemeDef>
<MemeDef ParentName="SexualDissoulutelyBase">
<defName>Lewd</defName>
<label>lewd</label>
<description>Perverts.</description>
<iconPath>UI/Memes/SexualDissolutely</iconPath>
<impact>3</impact>
<consumableBuildings>
<li>Burnbong_Aphrodisiac</li>
</consumableBuildings>
<requireOne>
<li>
<li>Lovin_FreeApproved</li>
</li>
<li>
<li>Incestuos_Free</li>
</li>
<li>
<li>Sex_Free</li>
<li>Sex_Promiscuous</li>
</li>
</requireOne>
<requiredRituals>
<li>
<precept>DateRitualConsumable</precept>
<pattern>DrugOrgy</pattern>
<building>Burnbong_Aphrodisiac</building>
</li>
</requiredRituals>
<generalRules>
<rulesStrings>
<li>memeAdjective->horny</li>
<li>memeAdjective->lewd</li>
<li>memeAdjective->arousing</li>
<li>memeAdjective->sexy</li>
<li>memeAdjective->estrous</li>
<li>memeAdjective->decadent</li>
<li>memeHyphenPrefix->estro</li>
<li>memeHyphenPrefix->lust</li>
<li>memeConcept->lust</li>
<li>memeConcept->libido</li>
<li>memeConcept->estrus</li>
<li>memeConcept->arousal</li>
<li>memeConcept->desire</li>
<li>memeConcept->sex</li>
<li>memeConcept->perversion</li>
<li>r_deityName->slaanesh</li>
</rulesStrings>
</generalRules>
<symbolPacks>
<li>
<ideoName>Cult of Slaanesh</ideoName>
<theme>pleasure</theme>
<adjective>decadent</adjective>
<member>heretic</member>
</li>
</symbolPacks>
<addDesignators>
<li>Autobong_Aphrodisiac</li>
</addDesignators>
<agreeableTraits>
<li>Nymphomaniac</li>
</agreeableTraits>
</MemeDef>
<MemeDef ParentName="SexualDissoulutelyBase">
<defName>Necrophile</defName>
<label>necrophile</label>
<description>Corpse fuckers.</description>
<iconPath>UI/Memes/Necrophile</iconPath>
<impact>2</impact>
<requireOne>
<li>
<li>Necrophilia_Acceptable</li>
<li>Necrophilia_Approved</li>
</li>
<li>
<li>Corpses_DontCare</li>
</li>
</requireOne>
<generalRules>
<rulesStrings>
<li>r_deityName->sonic</li>
<li>r_deityName->mega man</li>
<li>memeConcept->corpse</li>
<li>memeConcept->dead</li>
</rulesStrings>
</generalRules>
<agreeableTraits>
<li>Necrophiliac</li>
</agreeableTraits>
</MemeDef>
</Defs>

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>BabyFaction</defName>
<label>baby faction</label>
<iconPath>UI/Issues/Birth</iconPath>
</IssueDef>
<!-- Precepts -->
<PreceptDef>
<defName>BabyFaction_AlwaysMother</defName>
<issue>BabyFaction</issue>
<label>always mother(default)</label>
<description>New born babies always follow mother's faction and ideology.</description>
<impact>Low</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
<PreceptDef>
<defName>BabyFaction_AlwaysFather</defName>
<issue>BabyFaction</issue>
<label>always father</label>
<description>New born babies always follow father's faction and ideology(if exists).</description>
<impact>Low</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
<PreceptDef>
<defName>BabyFaction_AlwaysColony</defName>
<issue>BabyFaction</issue>
<label>always colony</label>
<description>New born babies are always player's faction and ideology.</description>
<impact>Low</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
</Defs>

View File

@ -0,0 +1,744 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>Bestiality</defName>
<label>bestiality</label>
<iconPath>UI/Commands/Breeding_Pawn_off</iconPath>
</IssueDef>
<HistoryEventDef>
<defName>RSI_SexWithAnimal</defName>
<label>sex with animal</label>
<modExtensions>
<li Class="RJWSexperience.Ideology.HistoryEvents.DefExtension_SecondaryEvents">
<generationRules>
<li>
<filter>
<relations>
<isVeneratedAnimal>true</isVeneratedAnimal>
</relations>
</filter>
<historyEventDef>RSI_SexWithVeneratedAnimal</historyEventDef>
</li>
<li>
<filter>
<partner>
<isAnimal>true</isAnimal>
</partner>
<relations>
<isVeneratedAnimal>false</isVeneratedAnimal>
</relations>
</filter>
<historyEventDef>RSI_SexWithNonVeneratedAnimal</historyEventDef>
</li>
<li>
<filter>
<partner>
<isAnimal>true</isAnimal>
</partner>
<relations>
<hasOneOfRelations>
<li>Bond</li>
</hasOneOfRelations>
</relations>
</filter>
<historyEventDef>RSI_SexWithBondedAnimal</historyEventDef>
</li>
<li>
<filter>
<partner>
<isAnimal>true</isAnimal>
</partner>
<relations>
<hasNoneOfRelations>
<li>Bond</li>
</hasNoneOfRelations>
</relations>
</filter>
<historyEventDef>RSI_SexWithNonBondAnimal</historyEventDef>
</li>
</generationRules>
</li>
</modExtensions>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_SexWithVeneratedAnimal</defName>
<label>sex with venerated animal</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_SexWithNonVeneratedAnimal</defName>
<label>sex with non venerated animal</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_SexWithBondedAnimal</defName>
<label>Sex with bonded</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_SexWithNonBondAnimal</defName>
<label>Sex with non Bonded</label>
</HistoryEventDef>
<!-- Precepts -->
<PreceptDef>
<defName>Bestiality_Abhorrent</defName>
<issue>Bestiality</issue>
<label>abhorrent</label>
<description>Bestiality beings is deeply evil.</description>
<impact>Low</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>100</displayOrderInImpact>
<defaultSelectionWeight>30</defaultSelectionWeight>
<conflictingMemes>
<li>Zoophile</li>
</conflictingMemes>
<associatedMemes>
<li>HumanPrimacy</li>
</associatedMemes>
<comps>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_SexWithAnimal</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Abhorrent</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Know_Abhorrent</thought>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Abhorrent</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Know_Abhorrent</thought>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyPreference">
<rules>
<li>
<filter>
<partner>
<isAnimal>true</isAnimal>
</partner>
</filter>
<multiplier>0.05</multiplier>
</li>
</rules>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>Bestiality_Horrible</defName>
<issue>Bestiality</issue>
<label>horrible</label>
<description>Bestiality is a horrible thing.</description>
<impact>Low</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>200</displayOrderInImpact>
<defaultSelectionWeight>30</defaultSelectionWeight>
<conflictingMemes>
<li>Zoophile</li>
</conflictingMemes>
<associatedMemes>
<li>HumanPrimacy</li>
</associatedMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Horrible</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Know_Horrible</thought>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Horrible</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Know_Horrible</thought>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyPreference">
<rules>
<li>
<filter>
<partner>
<isAnimal>true</isAnimal>
</partner>
</filter>
<multiplier>0.1</multiplier>
</li>
</rules>
</li>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyBestialityMtb">
<multiplier>5.0</multiplier>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>Bestiality_Disapproved</defName>
<issue>Bestiality</issue>
<label>disapproved</label>
<description>Bestiality is extremely distasteful.</description>
<impact>Low</impact>
<displayOrderInIssue>20</displayOrderInIssue>
<displayOrderInImpact>300</displayOrderInImpact>
<defaultSelectionWeight>20</defaultSelectionWeight>
<conflictingMemes>
<li>Zoophile</li>
</conflictingMemes>
<associatedMemes>
<li>HumanPrimacy</li>
</associatedMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Disapproved</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Know_Disapproved</thought>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Disapproved</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Know_Disapproved</thought>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyPreference">
<rules>
<li>
<filter>
<partner>
<isAnimal>true</isAnimal>
</partner>
</filter>
<multiplier>0.5</multiplier>
</li>
</rules>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>Bestiality_Acceptable</defName>
<issue>Bestiality</issue>
<label>acceptable</label>
<description>Bestiality is a normal, unremarkable part of life.</description>
<impact>Medium</impact>
<displayOrderInIssue>10</displayOrderInIssue>
<defaultSelectionWeight>10</defaultSelectionWeight>
<approvesOfSlavery>true</approvesOfSlavery>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyBestialityMtb">
<multiplier>0.75</multiplier>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>Bestiality_OnlyVenerated</defName>
<issue>Bestiality</issue>
<label>only venerated</label>
<description>One who sex with venerated animals should be honored and respected. But having sex with other animals will be denounced</description>
<impact>High</impact>
<displayOrderInIssue>0</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<conflictingMemes>
<li>HumanPrimacy</li>
</conflictingMemes>
<requiredMemes>
<li>Zoophile</li>
</requiredMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithNonVeneratedAnimal</eventDef>
<thought>Bestiality_Nonvenerated_Disapproved</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithNonVeneratedAnimal</eventDef>
<thought>Bestiality_Nonvenerated_Know_Disapproved</thought>
<description>Someone sex with any animal</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Honorable</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Know_Honorable</thought>
<description>Someone sex with animal</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyPreference">
<rules>
<li>
<filter>
<relations>
<isVeneratedAnimal>true</isVeneratedAnimal>
</relations>
</filter>
<multiplier>2.0</multiplier>
</li>
<li>
<filter>
<partner>
<isAnimal>true</isAnimal>
</partner>
<relations>
<isVeneratedAnimal>false</isVeneratedAnimal>
</relations>
</filter>
<multiplier>0.05</multiplier>
</li>
</rules>
</li>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyBestialityMtb">
<multiplier>0.65</multiplier>
</li>
</modExtensions>
</PreceptDef>
<!-- Bond Only precept by Hawkeye32 -->
<PreceptDef>
<defName>Bestiality_BondOnly</defName>
<issue>Bestiality</issue>
<label>only bonded</label>
<description>Sex with Bonded animals should be honored and respected. But having sex with other animals will be denounced.</description>
<impact>High</impact>
<displayOrderInIssue>0</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<conflictingMemes>
<li>HumanPrimacy</li>
</conflictingMemes>
<requiredMemes>
<li>Zoophile</li>
</requiredMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithNonBondAnimal</eventDef>
<thought>Bestiality_NonBonded_Disapproved</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithNonBondAnimal</eventDef>
<thought>Bestiality_NonBonded_Know_Disapproved</thought>
<description>Someone sex with any animal</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithBondedAnimal</eventDef>
<thought>Bestiality_Bond_Approved</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithBondedAnimal</eventDef>
<thought>Bestiality_Bond_Approved_Know</thought>
<description>Someone sex with non bonded animal</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyPreference">
<rules>
<li>
<filter>
<partner>
<isAnimal>true</isAnimal>
</partner>
<relations>
<hasOneOfRelations>
<li>Bond</li>
</hasOneOfRelations>
</relations>
</filter>
<multiplier>2.0</multiplier>
</li>
<li>
<filter>
<partner>
<isAnimal>true</isAnimal>
</partner>
<relations>
<hasNoneOfRelations>
<li>Bond</li>
</hasNoneOfRelations>
</relations>
</filter>
<multiplier>0.1</multiplier>
</li>
</rules>
</li>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyBestialityMtb">
<multiplier>0.5</multiplier>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>Bestiality_Honorable</defName>
<issue>Bestiality</issue>
<label>encouraging</label>
<description>One who sex with animals should be encouraged.</description>
<impact>High</impact>
<displayOrderInIssue>0</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<conflictingMemes>
<li>HumanPrimacy</li>
</conflictingMemes>
<requiredMemes>
<li>Zoophile</li>
</requiredMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Honorable</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Know_Honorable</thought>
<description>Someone sex with animal</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Honorable</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Know_Honorable</thought>
<description>Someone sex with animal</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyPreference">
<rules>
<li>
<filter>
<partner>
<isAnimal>true</isAnimal>
</partner>
</filter>
<multiplier>2.0</multiplier>
</li>
</rules>
</li>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyBestialityMtb">
<multiplier>0.5</multiplier>
</li>
</modExtensions>
</PreceptDef>
<!-- Thoughts -->
<ThoughtDef>
<defName>Bestiality_Abhorrent</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingTraits>
<li>Zoophile</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Bestiality_Honorable</li>
<li>Bestiality_OnlyVenerated</li>
<li>Bestiality_BondOnly</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with animal</label>
<description>I had sex with animal. I want to die.</description>
<baseMoodEffect>-15</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Bestiality_Know_Abhorrent</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Zoophile</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Bestiality_Honorable</li>
<li>Bestiality_OnlyVenerated</li>
<li>Bestiality_BondOnly</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with animal</label>
<baseOpinionOffset>-30</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Bestiality_Horrible</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingTraits>
<li>Zoophile</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Bestiality_Honorable</li>
<li>Bestiality_OnlyVenerated</li>
<li>Bestiality_BondOnly</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with animal</label>
<description>I had sex with animal. I'm not sure I can forgive myself.</description>
<baseMoodEffect>-10</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Bestiality_Know_Horrible</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Zoophile</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Bestiality_Honorable</li>
<li>Bestiality_OnlyVenerated</li>
<li>Bestiality_BondOnly</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with animal</label>
<baseOpinionOffset>-20</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Bestiality_Disapproved</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingTraits>
<li>Zoophile</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Bestiality_Honorable</li>
<li>Bestiality_OnlyVenerated</li>
<li>Bestiality_BondOnly</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with animal</label>
<description>I had sex with animal. I hope nothing terrible happens to them.</description>
<baseMoodEffect>-5</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Bestiality_Know_Disapproved</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Zoophile</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Bestiality_Honorable</li>
<li>Bestiality_OnlyVenerated</li>
<li>Bestiality_BondOnly</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with animal</label>
<baseOpinionOffset>-10</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Bestiality_Nonvenerated_Disapproved</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingPrecepts>
<li>Bestiality_Honorable</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with non-venerated animal</label>
<description>I had sex with any animal. I hope nothing terrible happens to them.</description>
<baseMoodEffect>-5</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Bestiality_Nonvenerated_Know_Disapproved</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingPrecepts>
<li>Bestiality_Honorable</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with any animal</label>
<baseOpinionOffset>-10</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Bestiality_NonBonded_Disapproved</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingPrecepts>
<li>Bestiality_Honorable</li>
<li>Bestiality_Acceptable</li>
<li>Bestiality_OnlyVenerated</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with non-bonded animal</label>
<description>I had sex with a non bonded animal. How could I?</description>
<baseMoodEffect>-5</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Bestiality_Bond_Approved</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingPrecepts>
<li>Bestiality_Abhorrent</li>
<li>Bestiality_Horrible</li>
<li>Bestiality_Disapproved</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with bonded animal</label>
<description>I went wild with my bonded animal!</description>
<baseMoodEffect>8</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Bestiality_Bond_Approved_Know</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>2</stackLimit>
<nullifyingPrecepts>
<li>Bestiality_Abhorrent</li>
<li>Bestiality_Horrible</li>
<li>Bestiality_Disapproved</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with bonded animal</label>
<description>Shares a special bond.</description>
<baseOpinionOffset>5</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Bestiality_NonBonded_Know_Disapproved</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingPrecepts>
<li>Bestiality_Honorable</li>
<li>Bestiality_Acceptable</li>
<li>Bestiality_OnlyVenerated</li>
</nullifyingPrecepts>
<stages>
<li>
<label>Had sex with a non bonded animal.</label>
<baseOpinionOffset>-10</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Bestiality_Honorable</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingPrecepts>
<li>Bestiality_Abhorrent</li>
<li>Bestiality_Horrible</li>
<li>Bestiality_Disapproved</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with animal</label>
<description>I had sex with animal.</description>
<baseMoodEffect>4</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Bestiality_Know_Honorable</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>25</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingPrecepts>
<li>Bestiality_Abhorrent</li>
<li>Bestiality_Horrible</li>
<li>Bestiality_Disapproved</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with animal</label>
<baseOpinionOffset>5</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
</Defs>

View File

@ -0,0 +1,516 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>Incestuos</defName>
<label>incest</label>
<iconPath>UI/Issues/Incest</iconPath>
</IssueDef>
<HistoryEventDef>
<defName>RSI_CloseRelativeMarriage</defName>
<label>Marriage between close relatives</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_IncestuosMarriage</defName>
<label>Incestuos marriage</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_NonIncestuosMarriage</defName>
<label>Non-incestuos marriage</label>
<modExtensions>
<li Class="RJWSexperience.Ideology.HistoryEvents.DefExtension_EventOverrides">
<overrideRules>
<li>
<filter>
<relations>
<hasOneOfRelationDegrees>
<li>CloseRelative</li>
</hasOneOfRelationDegrees>
</relations>
</filter>
<historyEventDef>RSI_CloseRelativeMarriage</historyEventDef>
</li>
<li>
<filter>
<relations>
<hasOneOfRelationDegrees>
<li>FarRelative</li>
</hasOneOfRelationDegrees>
</relations>
</filter>
<historyEventDef>RSI_IncestuosMarriage</historyEventDef>
</li>
</overrideRules>
</li>
</modExtensions>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_CloseRelativeSex</defName>
<label>Sex between close relatives</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_IncestuosSex</defName>
<label>Incestuos sex</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_NonIncestuosSex</defName>
<label>Non-incestuos sex</label>
<modExtensions>
<li Class="RJWSexperience.Ideology.HistoryEvents.DefExtension_EventOverrides">
<overrideRules>
<li>
<filter>
<relations>
<hasOneOfRelationDegrees>
<li>CloseRelative</li>
</hasOneOfRelationDegrees>
</relations>
</filter>
<historyEventDef>RSI_CloseRelativeSex</historyEventDef>
</li>
<li>
<filter>
<relations>
<hasOneOfRelationDegrees>
<li>FarRelative</li>
</hasOneOfRelationDegrees>
</relations>
</filter>
<historyEventDef>RSI_IncestuosSex</historyEventDef>
</li>
</overrideRules>
</li>
</modExtensions>
</HistoryEventDef>
<!-- Precepts -->
<PreceptDef>
<defName>Incestuos_Free</defName>
<issue>Incestuos</issue>
<label>free</label>
<description>Open minded.</description>
<impact>Medium</impact>
<displayOrderInIssue>60</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>100</defaultSelectionWeight>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_Incest">
<allowManualRomanceOnlyFor>
<li>CloseRelative</li>
<li>FarRelative</li>
<li>NotRelated</li>
</allowManualRomanceOnlyFor>
<bloodRelationDegreeRomanceFactors>
<li>
<bloodRelationDegree>CloseRelative</bloodRelationDegree>
<romanceChanceFactor>1</romanceChanceFactor>
</li>
<li>
<bloodRelationDegree>FarRelative</bloodRelationDegree>
<romanceChanceFactor>1</romanceChanceFactor>
</li>
<li>
<bloodRelationDegree>NotRelated</bloodRelationDegree>
<romanceChanceFactor>1</romanceChanceFactor>
</li>
</bloodRelationDegreeRomanceFactors>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>Incestuos_Disapproved_CloseOnly</defName>
<issue>Incestuos</issue>
<label>disapproved on close relatives</label>
<description>Incest is disapproved socially. Relations farther than cousin are recognized as not incest.</description>
<impact>Low</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>100</defaultSelectionWeight>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_CloseRelativeMarriage</eventDef>
<thought>IncestuosMarriage_Disapproved</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_CloseRelativeSex</eventDef>
<thought>Sex_Know_Incest_Disapproved</thought>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyPreference">
<rules>
<li>
<filter>
<relations>
<hasOneOfRelationDegrees>
<li>CloseRelative</li>
</hasOneOfRelationDegrees>
<hasNoneOfRelations>
<li>Spouse</li>
</hasNoneOfRelations>
</relations>
</filter>
<multiplier>0.5</multiplier>
</li>
</rules>
</li>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_Incest">
<allowManualRomanceOnlyFor>
<li>FarRelative</li>
<li>NotRelated</li>
</allowManualRomanceOnlyFor>
<bloodRelationDegreeRomanceFactors>
<li>
<bloodRelationDegree>FarRelative</bloodRelationDegree>
<romanceChanceFactor>1</romanceChanceFactor>
</li>
<li>
<bloodRelationDegree>NotRelated</bloodRelationDegree>
<romanceChanceFactor>1</romanceChanceFactor>
</li>
</bloodRelationDegreeRomanceFactors>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>Incestuos_Disapproved</defName>
<issue>Incestuos</issue>
<label>disapproved</label>
<description>Incest is disapproved socially.</description>
<impact>Low</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>100</defaultSelectionWeight>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_IncestuosMarriage</eventDef>
<thought>IncestuosMarriage_Disapproved</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_IncestuosMarriage</eventDef>
<thought>Sex_Know_IncestMarriage_Disapproved</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_IncestuosSex</eventDef>
<thought>Sex_Know_Incest_Disapproved</thought>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyPreference">
<rules>
<li>
<filter>
<relations>
<hasOneOfRelationDegrees>
<li>CloseRelative</li>
<li>FarRelative</li>
</hasOneOfRelationDegrees>
<hasNoneOfRelations>
<li>Spouse</li>
</hasNoneOfRelations>
</relations>
</filter>
<multiplier>0.5</multiplier>
</li>
</rules>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>Incestuos_Forbidden</defName>
<issue>Incestuos</issue>
<label>forbidden</label>
<description>Incest is forbidden.</description>
<impact>Low</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>100</defaultSelectionWeight>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_IncestuosMarriage</eventDef>
<thought>IncestuosMarriage_Forbidden</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_IncestuosMarriage</eventDef>
<thought>Sex_Know_IncestMarriage_Forbidden</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_IncestuosSex</eventDef>
<thought>Sex_Know_Incest_Forbidden</thought>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyPreference">
<rules>
<li>
<filter>
<relations>
<hasOneOfRelationDegrees>
<li>CloseRelative</li>
<li>FarRelative</li>
</hasOneOfRelationDegrees>
<hasNoneOfRelations>
<li>Spouse</li>
</hasNoneOfRelations>
</relations>
</filter>
<multiplier>0.1</multiplier>
</li>
</rules>
</li>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_Incest">
<bloodRelationDegreeRomanceFactors>
<li>
<bloodRelationDegree>CloseRelative</bloodRelationDegree>
<romanceChanceFactor>0.03</romanceChanceFactor> <!-- same as vanilla "parent" -->
</li>
<li>
<bloodRelationDegree>FarRelative</bloodRelationDegree>
<romanceChanceFactor>0.03</romanceChanceFactor>
</li>
</bloodRelationDegreeRomanceFactors>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>Incestuos_IncestOnly</defName>
<issue>Incestuos</issue>
<label>incest only</label>
<description>For preserving pure blood, only incest allowed.</description>
<impact>High</impact>
<displayOrderInIssue>0</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<comps>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_NonIncestuosMarriage</eventDef>
<thought>Sex_Know_IncestMarriage_Violated</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_NonIncestuosSex</eventDef>
<thought>Sex_Know_Incest_Violated</thought>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyPreference">
<rules>
<li>
<filter>
<relations>
<hasOneOfRelationDegrees>
<li>NotRelated</li>
</hasOneOfRelationDegrees>
</relations>
</filter>
<multiplier>0.1</multiplier>
</li>
</rules>
</li>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_Incest">
<allowManualRomanceOnlyFor>
<li>CloseRelative</li>
<li>FarRelative</li>
</allowManualRomanceOnlyFor>
<bloodRelationDegreeRomanceFactors>
<li>
<bloodRelationDegree>CloseRelative</bloodRelationDegree>
<romanceChanceFactor>1</romanceChanceFactor>
</li>
<li>
<bloodRelationDegree>FarRelative</bloodRelationDegree>
<romanceChanceFactor>1</romanceChanceFactor>
</li>
<li>
<bloodRelationDegree>NotRelated</bloodRelationDegree>
<romanceChanceFactor>0.03</romanceChanceFactor>
</li>
</bloodRelationDegreeRomanceFactors>
</li>
</modExtensions>
</PreceptDef>
<!-- Thoughts -->
<ThoughtDef>
<defName>IncestuosMarriage_Forbidden</defName>
<durationDays>30</durationDays>
<stackLimit>1</stackLimit>
<nullifyingTraits>
<li>Psychopath</li>
<li>Nymphomaniac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Incestuos_IncestOnly</li>
<li>Incestuos_Free</li>
</nullifyingPrecepts>
<stages>
<li>
<label>social condemnation</label>
<description>No one bless our marriage.</description>
<baseMoodEffect>-10</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>IncestuosMarriage_Disapproved</defName>
<durationDays>30</durationDays>
<stackLimit>1</stackLimit>
<nullifyingTraits>
<li>Psychopath</li>
<li>Nymphomaniac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Incestuos_IncestOnly</li>
<li>Incestuos_Free</li>
</nullifyingPrecepts>
<stages>
<li>
<label>being gossip</label>
<description>They are speaking behind our back.</description>
<baseMoodEffect>-5</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Sex_Know_Incest_Disapproved</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Nymphomaniac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Incestuos_IncestOnly</li>
<li>Incestuos_Free</li>
</nullifyingPrecepts>
<stages>
<li>
<label>incest</label>
<baseOpinionOffset>-15</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Sex_Know_Incest_Forbidden</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Nymphomaniac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Incestuos_IncestOnly</li>
<li>Incestuos_Free</li>
</nullifyingPrecepts>
<stages>
<li>
<label>incest</label>
<baseOpinionOffset>-30</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Sex_Know_IncestMarriage_Disapproved</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>60</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Nymphomaniac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Incestuos_IncestOnly</li>
<li>Incestuos_Free</li>
</nullifyingPrecepts>
<stages>
<li>
<label>incest</label>
<baseOpinionOffset>-15</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Sex_Know_IncestMarriage_Forbidden</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>60</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Nymphomaniac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Incestuos_IncestOnly</li>
<li>Incestuos_Free</li>
</nullifyingPrecepts>
<stages>
<li>
<label>incest</label>
<baseOpinionOffset>-30</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Sex_Know_Incest_Violated</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Nymphomaniac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Incestuos_Disapproved_CloseOnly</li>
<li>Incestuos_Disapproved</li>
<li>Incestuos_Forbidden</li>
<li>Incestuos_Free</li>
</nullifyingPrecepts>
<stages>
<li>
<label>sex with non-family</label>
<baseOpinionOffset>-15</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Sex_Know_IncestMarriage_Violated</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>300</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Nymphomaniac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Incestuos_Disapproved_CloseOnly</li>
<li>Incestuos_Disapproved</li>
<li>Incestuos_Forbidden</li>
<li>Incestuos_Free</li>
</nullifyingPrecepts>
<stages>
<li>
<label>corrupt the blood</label>
<baseOpinionOffset>-50</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
</Defs>

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>Masturbation</defName>
<label>masturbation</label>
<iconPath>UI/Issues/Bestiality</iconPath>
</IssueDef>
<HistoryEventDef>
<defName>RSI_Masturbated</defName>
<label>masturbated</label>
</HistoryEventDef>
<!-- Precepts -->
<PreceptDef>
<defName>Masturbation_Abhorrent</defName>
<issue>Masturbation</issue>
<label>abhorrent</label>
<description>Masturbation is unacceptable.</description>
<impact>Medium</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>100</displayOrderInImpact>
<comps>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_Masturbated</eventDef>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Masturbation_Disapproved</defName>
<issue>Masturbation</issue>
<label>disapproved</label>
<description>Masturbation is somewhat shameful.</description>
<impact>Low</impact>
<displayOrderInIssue>20</displayOrderInIssue>
<displayOrderInImpact>100</displayOrderInImpact>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyFappinMtb">
<multiplier>2.0</multiplier>
</li>
</modExtensions>
</PreceptDef>
</Defs>

View File

@ -0,0 +1,309 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>Necrophilia</defName>
<label>necrophilia</label>
<iconPath>UI/Issues/Necrophilia</iconPath>
</IssueDef>
<HistoryEventDef>
<defName>RSI_SexWithCorpse</defName>
<label>fucked corpse</label>
</HistoryEventDef>
<!-- Precepts -->
<PreceptDef>
<defName>Necrophilia_Abhorrent</defName>
<issue>Necrophilia</issue>
<label>abhorrent</label>
<description>Necrophilia beings is deeply evil.</description>
<impact>Low</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>100</displayOrderInImpact>
<defaultSelectionWeight>30</defaultSelectionWeight>
<conflictingMemes>
<li>Necrophile</li>
</conflictingMemes>
<comps>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_SexWithCorpse</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithCorpse</eventDef>
<thought>Necrophilia_Abhorrent</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithCorpse</eventDef>
<thought>Necrophilia_Know_Abhorrent</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Necrophilia_Horrible</defName>
<issue>Necrophilia</issue>
<label>horrible</label>
<description>Necrophilia is a horrible thing.</description>
<impact>Low</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>200</displayOrderInImpact>
<defaultSelectionWeight>30</defaultSelectionWeight>
<conflictingMemes>
<li>Necrophile</li>
</conflictingMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithCorpse</eventDef>
<thought>Necrophilia_Horrible</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithCorpse</eventDef>
<thought>Necrophilia_Know_Horrible</thought>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyNecroMtb">
<multiplier>8.0</multiplier>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>Necrophilia_Disapproved</defName>
<issue>Necrophilia</issue>
<label>disapproved</label>
<description>Necrophilia is extremely distasteful.</description>
<impact>Low</impact>
<displayOrderInIssue>20</displayOrderInIssue>
<displayOrderInImpact>300</displayOrderInImpact>
<defaultSelectionWeight>20</defaultSelectionWeight>
<conflictingMemes>
<li>Necrophile</li>
</conflictingMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithCorpse</eventDef>
<thought>Necrophilia_Disapproved</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithCorpse</eventDef>
<thought>Necrophilia_Know_Disapproved</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Necrophilia_Acceptable</defName>
<issue>Necrophilia</issue>
<label>acceptable</label>
<description>Necrophilia is a normal, unremarkable part of life.</description>
<impact>Medium</impact>
<displayOrderInIssue>10</displayOrderInIssue>
<defaultSelectionWeight>10</defaultSelectionWeight>
<approvesOfSlavery>true</approvesOfSlavery>
<requiredMemes>
<li>Necrophile</li>
</requiredMemes>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyNecroMtb">
<multiplier>0.75</multiplier>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>Necrophilia_Approved</defName>
<issue>Necrophilia</issue>
<label>approved</label>
<description>Fucking corpse is approval.</description>
<impact>High</impact>
<displayOrderInIssue>0</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<requiredMemes>
<li>Necrophile</li>
<li>Lewd</li>
</requiredMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_SexWithCorpse</eventDef>
<thought>Necrophilia_Approved</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_SexWithCorpse</eventDef>
<thought>Necrophilia_Know_Approved</thought>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyNecroMtb">
<multiplier>0.5</multiplier>
</li>
</modExtensions>
</PreceptDef>
<!-- Thoughts -->
<ThoughtDef>
<defName>Necrophilia_Abhorrent</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingTraits>
<li>Necrophiliac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Necrophilia_Approved</li>
<li>Necrophilia_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>fucked corpse</label>
<description>I had fucked corpse.</description>
<baseMoodEffect>-15</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Necrophilia_Know_Abhorrent</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Necrophiliac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Necrophilia_Approved</li>
<li>Necrophilia_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>fucked corpse</label>
<baseOpinionOffset>-30</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Necrophilia_Horrible</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingTraits>
<li>Necrophiliac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Necrophilia_Approved</li>
<li>Necrophilia_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>fucked corpse</label>
<description>I had fucked corpse.</description>
<baseMoodEffect>-10</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Necrophilia_Know_Horrible</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Necrophiliac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Necrophilia_Approved</li>
<li>Necrophilia_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>fucked corpse</label>
<baseOpinionOffset>-20</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Necrophilia_Disapproved</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingTraits>
<li>Necrophiliac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Necrophilia_Approved</li>
<li>Necrophilia_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>fucked corpse</label>
<description>I had fucked corpse.</description>
<baseMoodEffect>-5</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Necrophilia_Know_Disapproved</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Necrophiliac</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Necrophilia_Approved</li>
<li>Necrophilia_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>fucked corpse</label>
<baseOpinionOffset>-10</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Necrophilia_Approved</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingPrecepts>
<li>Necrophilia_Abhorrent</li>
<li>Necrophilia_Horrible</li>
<li>Necrophilia_Disapproved</li>
</nullifyingPrecepts>
<stages>
<li>
<label>fucked corpse</label>
<description>I had fucked corpse.</description>
<baseMoodEffect>4</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Necrophilia_Know_Approved</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>25</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingPrecepts>
<li>Necrophilia_Abhorrent</li>
<li>Necrophilia_Horrible</li>
<li>Necrophilia_Disapproved</li>
</nullifyingPrecepts>
<stages>
<li>
<label>fucked corpse</label>
<baseOpinionOffset>5</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
</Defs>

View File

@ -0,0 +1,206 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- This Precept was based on the "Blindness Precept" from ideology -->
<!-- Issue -->
<IssueDef>
<defName>Pregnancy</defName>
<label>pregnancy</label>
<iconPath>UI/Issues/Birth</iconPath>
</IssueDef>
<!-- Precepts -->
<PreceptDef>
<defName>Pregnancy_Holy</defName>
<issue>Pregnancy</issue>
<label>holy</label>
<description>To be pregnant is a duty worthy of respect. Women carry our society into the next generation.</description>
<impact>Medium</impact>
<displayOrderInIssue>10</displayOrderInIssue>
<comps>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Respected_Pregnant</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Respected_Pregnant_Social</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Pregnancy_Elevated</defName>
<issue>Pregnancy</issue>
<label>elevated</label>
<description>Being pregnant is considered noble.</description>
<impact>Low</impact>
<displayOrderInIssue>20</displayOrderInIssue>
<comps>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Elevated_Pregnant</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Elevated_Pregnant_Social</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Pregnancy_NoRules</defName>
<issue>Pregnancy</issue>
<label>indifferent</label>
<description>There are no thoughts about pregnancy.</description>
<impact>Low</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<comps>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Pregnancy_Required</defName>
<issue>Pregnancy</issue>
<impact>High</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<label>breeding</label>
<description>Women should be pregnant - those who are not, are seen unworthy.</description>
<comps>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Respected_Pregnant</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Respected_Pregnant_Social</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Horrible_NonPregnant</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Horrible_NonPregnant_Social</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Pregnancy_Horrible</defName>
<issue>Pregnancy</issue>
<impact>Low</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<label>horrible</label>
<description>Being Pregnant is unclean. Take care and stay pure.</description>
<comps>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Horrible_Pregnant</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>Pregnancy_Horrible_Pregnant_Social</thought>
</li>
</comps>
</PreceptDef>
<!-- Thoughts : Pregnant -->
<ThoughtDef>
<defName>Pregnancy_Respected_Pregnant</defName> <!-- should probably be Pregnancy_Holy_Pregnant -->
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_Pregnant</workerClass>
<thoughtClass>Thought_Situational</thoughtClass>
<stages>
<li>
<label>pregnant</label>
<description>I am pregnant. This makes me a pillar of society.</description>
<baseMoodEffect>10</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Pregnancy_Elevated_Pregnant</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_Pregnant</workerClass>
<thoughtClass>Thought_Situational</thoughtClass>
<stages>
<li>
<label>pregnant</label>
<description>I am soon making our colony stronger.</description>
<baseMoodEffect>5</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Pregnancy_Respected_Pregnant_Social</defName> <!-- should probably be Pregnancy_Holy_Pregnant_Social -->
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_Pregnant_Social</workerClass>
<thoughtClass>Thought_SituationalSocial</thoughtClass>
<stages>
<li>
<label>pregnant</label>
<baseOpinionOffset>20</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Pregnancy_Elevated_Pregnant_Social</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_Pregnant_Social</workerClass>
<thoughtClass>Thought_SituationalSocial</thoughtClass>
<stages>
<li>
<label>pregnant</label>
<baseOpinionOffset>10</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Pregnancy_Horrible_Pregnant_Social</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_Pregnant_Social</workerClass>
<thoughtClass>Thought_SituationalSocial</thoughtClass>
<stages>
<li>
<label>pregnant</label>
<baseOpinionOffset>-20</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Pregnancy_Horrible_Pregnant</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_Pregnant</workerClass>
<thoughtClass>Thought_Situational</thoughtClass>
<stages>
<li>
<label>pregnant</label>
<description>How did I end up like this? I never wanted to be pregnant!</description>
<baseMoodEffect>-10</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<!-- Thoughts: Not Pregnant -->
<ThoughtDef>
<defName>Pregnancy_Horrible_NonPregnant</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_NonPregnant</workerClass>
<thoughtClass>Thought_Situational</thoughtClass>
<doNotApplyToQuestLodgers>true</doNotApplyToQuestLodgers>
<gender>Female</gender>
<stages>
<li>
<label>not pregnant</label>
<description>I wish to be pregnant.</description>
<baseMoodEffect>-6</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Pregnancy_Horrible_NonPregnant_Social</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_NonPregnant_Social</workerClass>
<thoughtClass>Thought_SituationalSocial</thoughtClass>
<gender>Female</gender>
<stages>
<li>
<label>unfertilized</label>
<baseOpinionOffset>-5</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
</Defs>

View File

@ -0,0 +1,438 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>Rape</defName>
<label>rape</label>
<iconPath>UI/Issues/Rape</iconPath>
</IssueDef>
<HistoryEventDef>
<defName>RSI_Raped</defName>
<label>raped</label>
<modExtensions>
<li Class="RJWSexperience.Ideology.HistoryEvents.DefExtension_EventOverrides">
<overrideRules>
<li>
<filter>
<partner>
<isSlave>true</isSlave>
</partner>
</filter>
<historyEventDef>RSI_RapedSlave</historyEventDef>
</li>
<li>
<filter>
<partner>
<isPrisoner>true</isPrisoner>
</partner>
</filter>
<historyEventDef>RSI_RapedPrisoner</historyEventDef>
</li>
</overrideRules>
</li>
</modExtensions>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_RapedSlave</defName>
<label>raped slave</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_RapedPrisoner</defName>
<label>raped prisoner</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_WasRaped</defName>
<label>was raped</label>
<modExtensions>
<li Class="RJWSexperience.Ideology.HistoryEvents.DefExtension_EventOverrides">
<overrideRules>
<li>
<filter>
<doer>
<isSlave>true</isSlave>
</doer>
</filter>
<historyEventDef>RSI_WasRapedSlave</historyEventDef>
</li>
<li>
<filter>
<doer>
<isPrisoner>true</isPrisoner>
</doer>
</filter>
<historyEventDef>RSI_WasRapedPrisoner</historyEventDef>
</li>
</overrideRules>
</li>
</modExtensions>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_WasRapedSlave</defName>
<label>was raped</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_WasRapedPrisoner</defName>
<label>was raped</label>
</HistoryEventDef>
<!-- Precepts -->
<PreceptDef>
<defName>Rape_Abhorrent</defName>
<issue>Rape</issue>
<label>abhorrent</label>
<description>Rape beings is deeply evil.</description>
<impact>Low</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>30</defaultSelectionWeight>
<exclusionTags>
<li>RapeBad</li>
</exclusionTags>
<conflictingMemes>
<li>Rapist</li>
</conflictingMemes>
<associatedMemes>
<li>HumanPrimacy</li>
<li>Collectivist</li>
</associatedMemes>
<comps>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_Raped</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_Raped</eventDef>
<thought>Rape_Abhorrent</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_Raped</eventDef>
<thought>Rape_Know_Abhorrent</thought>
<description>Someone raped other</description>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_RapedPrisoner</eventDef>
<thought>Rape_Horrible</thought>
<description>Raped prisoner</description>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_RapedPrisoner</eventDef>
<thought>Rape_Know_Horrible</thought>
<description>Someone raped prisoner</description>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_RapedSlave</eventDef>
<thought>Rape_Disapproved</thought>
<description>Raped slave</description>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_RapedSlave</eventDef>
<thought>Rape_Know_Disapproved</thought>
<description>Someone raped slave</description>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Rape_Horrible</defName>
<issue>Rape</issue>
<label>horrible</label>
<description>Raping other is a horrible thing.</description>
<impact>Low</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>30</defaultSelectionWeight>
<exclusionTags>
<li>RapeBad</li>
</exclusionTags>
<conflictingMemes>
<li>Rapist</li>
</conflictingMemes>
<associatedMemes>
<li>HumanPrimacy</li>
</associatedMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_Raped</eventDef>
<thought>Rape_Horrible</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_Raped</eventDef>
<thought>Rape_Know_Horrible</thought>
<description>Someone raped other</description>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_RapedPrisoner</eventDef>
<thought>Rape_Disapproved</thought>
<description>Raped prisoner</description>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_RapedPrisoner</eventDef>
<thought>Rape_Know_Disapproved</thought>
<description>Someone raped prisoner</description>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyRapeCPMtb">
<multiplier>3.0</multiplier>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>Rape_Disapproved</defName>
<issue>Rape</issue>
<label>disapproved</label>
<description>Rape is part of life, though it is extremely distasteful.</description>
<impact>Medium</impact>
<displayOrderInIssue>20</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>20</defaultSelectionWeight>
<exclusionTags>
<li>RapeBad</li>
</exclusionTags>
<conflictingMemes>
<li>Rapist</li>
</conflictingMemes>
<associatedMemes>
<li>HumanPrimacy</li>
</associatedMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_Raped</eventDef>
<thought>Rape_Disapproved</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_Raped</eventDef>
<thought>Rape_Know_Disapproved</thought>
<description>Someone raped other</description>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Rape_Acceptable</defName>
<issue>Rape</issue>
<label>acceptable</label>
<description>Rape is a normal, unremarkable part of life.</description>
<impact>High</impact>
<displayOrderInIssue>10</displayOrderInIssue>
<defaultSelectionWeight>10</defaultSelectionWeight>
<approvesOfSlavery>true</approvesOfSlavery>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyRapeCPMtb">
<multiplier>0.75</multiplier>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>Rape_Honorable</defName>
<issue>Rape</issue>
<label>proud</label>
<description>Raping is one of proud behavior.</description>
<impact>High</impact>
<displayOrderInIssue>0</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<conflictingMemes>
<li>HumanPrimacy</li>
</conflictingMemes>
<requiredMemes>
<li>Rapist</li>
</requiredMemes>
<statFactors>
<Vulnerability>0.75</Vulnerability>
</statFactors>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_Raped</eventDef>
<thought>BloodlustStoleSomeLovin</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_Raped</eventDef>
<thought>Rape_Know_Honorable</thought>
<description>Someone raped other</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_RapedPrisoner</eventDef>
<thought>BloodlustStoleSomeLovin</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_RapedPrisoner</eventDef>
<thought>Rape_Know_Honorable</thought>
<description>Someone raped other</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_RapedSlave</eventDef>
<thought>BloodlustStoleSomeLovin</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_RapedSlave</eventDef>
<thought>Rape_Know_Honorable</thought>
<description>Someone raped other</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
</comps>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_ModifyRapeCPMtb">
<multiplier>0.5</multiplier>
</li>
</modExtensions>
</PreceptDef>
<!-- Thoughts -->
<ThoughtDef>
<defName>Rape_Abhorrent</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingTraits>
<li>Rapist</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Rape_Honorable</li>
<li>Rape_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>raped someone</label>
<description>I raped someone. I shouldn't do that.</description>
<baseMoodEffect>-5</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Rape_Know_Abhorrent</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Rapist</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Rape_Honorable</li>
<li>Rape_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>raped someone</label>
<baseOpinionOffset>-30</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Rape_Horrible</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingTraits>
<li>Rapist</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Rape_Honorable</li>
<li>Rape_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>raped someone</label>
<description>I raped someone. I shouldn't do that.</description>
<baseMoodEffect>-3</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Rape_Know_Horrible</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Rapist</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Rape_Honorable</li>
<li>Rape_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>raped someone</label>
<baseOpinionOffset>-15</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Rape_Disapproved</defName>
<durationDays>6</durationDays>
<stackLimit>1</stackLimit>
<nullifyingTraits>
<li>Rapist</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Rape_Honorable</li>
<li>Rape_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>raped someone</label>
<description>I raped someone. I shouldn't do that.</description>
<baseMoodEffect>-1</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Rape_Know_Disapproved</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Rapist</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Rape_Honorable</li>
<li>Rape_Acceptable</li>
</nullifyingPrecepts>
<stages>
<li>
<label>raped someone</label>
<baseOpinionOffset>-5</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Rape_Know_Honorable</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>25</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingPrecepts>
<li>Rape_Abhorrent</li>
<li>Rape_Disapproved</li>
</nullifyingPrecepts>
<stages>
<li>
<label>raped someone</label>
<baseOpinionOffset>1</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
</Defs>

View File

@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<PreceptDef>
<defName>GangbangCeremony</defName>
<label>gangbang</label>
<description>A ritualistic gangbang where a initiator rape a victim. The audience will rape as the initiator.</description>
<issue>Ritual</issue>
<impact>Medium</impact>
<iconPath>UI/Issues/Gangbang</iconPath>
<preceptClass>Precept_Ritual</preceptClass>
<ritualPatternBase>Gangbang</ritualPatternBase>
<allowDuplicates>true</allowDuplicates>
<countsTowardsPreceptLimit>false</countsTowardsPreceptLimit>
<selectionWeight>1.0</selectionWeight>
<displayOrderInImpact>100</displayOrderInImpact>
<ignoreLimitsInEditMode>false</ignoreLimitsInEditMode>
<receivesExpectationsQualityOffset>true</receivesExpectationsQualityOffset>
<canGenerateAsSpecialPrecept>false</canGenerateAsSpecialPrecept>
<exclusionTags>
<li>RapeBad</li>
</exclusionTags>
<requiredMemes>
<li>Rapist</li>
</requiredMemes>
</PreceptDef>
<PreceptDef>
<defName>GangbangCeremony_Consensual</defName>
<label>gangbang</label>
<description>A ritualistic gangbang where a organizer being fucked. The audience will fuck the organizer.</description>
<issue>Ritual</issue>
<impact>Medium</impact>
<iconPath>UI/Issues/Gangbang_Consensual</iconPath>
<preceptClass>Precept_Ritual</preceptClass>
<ritualPatternBase>Gangbang_Consensual</ritualPatternBase>
<allowDuplicates>true</allowDuplicates>
<countsTowardsPreceptLimit>false</countsTowardsPreceptLimit>
<selectionWeight>1.0</selectionWeight>
<displayOrderInImpact>100</displayOrderInImpact>
<ignoreLimitsInEditMode>false</ignoreLimitsInEditMode>
<receivesExpectationsQualityOffset>true</receivesExpectationsQualityOffset>
<canGenerateAsSpecialPrecept>false</canGenerateAsSpecialPrecept>
<requiredMemes>
<li>Lewd</li>
</requiredMemes>
</PreceptDef>
<PreceptDef>
<defName>AnimalGangbangCeremony</defName>
<label>animal gangbang</label>
<description>A ritualistic gangbang where animals rape a victim.</description>
<issue>Ritual</issue>
<impact>Medium</impact>
<iconPath>UI/Commands/Breeding_Pawn_off</iconPath>
<preceptClass>Precept_Ritual</preceptClass>
<ritualPatternBase>GangbangByAnimal</ritualPatternBase>
<allowDuplicates>true</allowDuplicates>
<countsTowardsPreceptLimit>false</countsTowardsPreceptLimit>
<selectionWeight>1.0</selectionWeight>
<displayOrderInImpact>100</displayOrderInImpact>
<ignoreLimitsInEditMode>false</ignoreLimitsInEditMode>
<receivesExpectationsQualityOffset>true</receivesExpectationsQualityOffset>
<canGenerateAsSpecialPrecept>false</canGenerateAsSpecialPrecept>
<modExtensions>
<li Class="RJWSexperience.Ideology.Precepts.DefExtension_MultipleMemesRequired">
<requiredAllMemes>
<li>Rapist</li>
<li>Zoophile</li>
</requiredAllMemes>
</li>
</modExtensions>
</PreceptDef>
<PreceptDef>
<defName>AnimalGangbangCeremony_Consensual</defName>
<label>animal gangbang</label>
<description>A ritualistic gangbang where animals fuck the organizer.</description>
<issue>Ritual</issue>
<impact>Medium</impact>
<iconPath>UI/Commands/Breeding_Pawn_on</iconPath>
<preceptClass>Precept_Ritual</preceptClass>
<ritualPatternBase>GangbangByAnimal_Consensual</ritualPatternBase>
<allowDuplicates>true</allowDuplicates>
<countsTowardsPreceptLimit>false</countsTowardsPreceptLimit>
<selectionWeight>1.0</selectionWeight>
<displayOrderInImpact>100</displayOrderInImpact>
<ignoreLimitsInEditMode>false</ignoreLimitsInEditMode>
<receivesExpectationsQualityOffset>true</receivesExpectationsQualityOffset>
<canGenerateAsSpecialPrecept>false</canGenerateAsSpecialPrecept>
<requiredMemes>
<li>Zoophile</li>
</requiredMemes>
</PreceptDef>
<PreceptDef>
<defName>DrugOrgyCeremony</defName>
<label>drug orgy</label>
<description>An orgy using massive aphrodisiac.</description>
<issue>Ritual</issue>
<impact>Medium</impact>
<iconPath>UI/Issues/Gangbang</iconPath>
<preceptClass>Precept_Ritual</preceptClass>
<ritualPatternBase>DrugOrgy</ritualPatternBase>
<allowDuplicates>true</allowDuplicates>
<countsTowardsPreceptLimit>false</countsTowardsPreceptLimit>
<selectionWeight>1.0</selectionWeight>
<displayOrderInImpact>100</displayOrderInImpact>
<ignoreLimitsInEditMode>false</ignoreLimitsInEditMode>
<receivesExpectationsQualityOffset>true</receivesExpectationsQualityOffset>
<canGenerateAsSpecialPrecept>false</canGenerateAsSpecialPrecept>
<requiredMemes>
<li>Lewd</li>
</requiredMemes>
</PreceptDef>
</Defs>

View File

@ -0,0 +1,384 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>Sextype</defName>
<label>sex type</label>
<iconPath>UI/Issues/Bestiality</iconPath>
</IssueDef>
<HistoryEventDef>
<defName>RSI_VaginalSex</defName>
<label>vaginal sex</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_AnalSex</defName>
<label>anal sex</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_OralSex</defName>
<label>oral sex</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_PromiscuousSex</defName>
<label>promiscuous sex</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_MiscSex</defName>
<label>sex</label>
</HistoryEventDef>
<!-- Precepts -->
<PreceptDef>
<defName>Sex_Free</defName>
<issue>Sextype</issue>
<label>free</label>
<description>Open minded.</description>
<impact>Low</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>100</defaultSelectionWeight>
</PreceptDef>
<PreceptDef>
<defName>Sex_VaginalOnly</defName>
<issue>Sextype</issue>
<label>vaginal only</label>
<description>Only vaginal sex is approval and others are crude.</description>
<impact>Low</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>100</defaultSelectionWeight>
<comps>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_AnalSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_AnalSex</eventDef>
<thought>Sex_Promiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_AnalSex</eventDef>
<thought>Sex_Know_Promiscuous</thought>
</li>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_OralSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_OralSex</eventDef>
<thought>Sex_Promiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_OralSex</eventDef>
<thought>Sex_Know_Promiscuous</thought>
</li>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_MiscSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_MiscSex</eventDef>
<thought>Sex_Promiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_MiscSex</eventDef>
<thought>Sex_Know_Promiscuous</thought>
</li>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_PromiscuousSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_PromiscuousSex</eventDef>
<thought>Sex_Promiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_PromiscuousSex</eventDef>
<thought>Sex_Know_Promiscuous</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Sex_AnalOnly</defName>
<issue>Sextype</issue>
<label>anal only</label>
<description>Only anal sex is approval and others are crude.</description>
<impact>Medium</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>10</defaultSelectionWeight>
<comps>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_VaginalSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_VaginalSex</eventDef>
<thought>Sex_Promiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_VaginalSex</eventDef>
<thought>Sex_Know_Promiscuous</thought>
</li>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_OralSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_OralSex</eventDef>
<thought>Sex_Promiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_OralSex</eventDef>
<thought>Sex_Know_Promiscuous</thought>
</li>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_MiscSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_MiscSex</eventDef>
<thought>Sex_Promiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_MiscSex</eventDef>
<thought>Sex_Know_Promiscuous</thought>
</li>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_PromiscuousSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_PromiscuousSex</eventDef>
<thought>Sex_Promiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_PromiscuousSex</eventDef>
<thought>Sex_Know_Promiscuous</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Sex_OralOnly</defName>
<issue>Sextype</issue>
<label>oral only</label>
<description>Only oral sex is approval and others are crude.</description>
<impact>Medium</impact>
<displayOrderInIssue>20</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>5</defaultSelectionWeight>
<comps>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_VaginalSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_VaginalSex</eventDef>
<thought>Sex_Promiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_VaginalSex</eventDef>
<thought>Sex_Know_Promiscuous</thought>
</li>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_AnalSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_AnalSex</eventDef>
<thought>Sex_Promiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_AnalSex</eventDef>
<thought>Sex_Know_Promiscuous</thought>
</li>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_MiscSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_MiscSex</eventDef>
<thought>Sex_Promiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_MiscSex</eventDef>
<thought>Sex_Know_Promiscuous</thought>
</li>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_PromiscuousSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_PromiscuousSex</eventDef>
<thought>Sex_Promiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_PromiscuousSex</eventDef>
<thought>Sex_Know_Promiscuous</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Sex_Promiscuous</defName>
<issue>Sextype</issue>
<label>promiscuous</label>
<description>Messy sex life is approved.</description>
<impact>High</impact>
<displayOrderInIssue>0</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<statFactors>
<SexFrequency>1.5</SexFrequency>
<SexAbility MayRequire="rjw.sexperience">1.25</SexAbility>
</statFactors>
<comps>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_VaginalSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_VaginalSex</eventDef>
<thought>Sex_NonPromiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_VaginalSex</eventDef>
<thought>Sex_Know_NonPromiscuous</thought>
</li>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_AnalSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_AnalSex</eventDef>
<thought>Sex_NonPromiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_AnalSex</eventDef>
<thought>Sex_Know_NonPromiscuous</thought>
</li>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_OralSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_OralSex</eventDef>
<thought>Sex_NonPromiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_OralSex</eventDef>
<thought>Sex_Know_NonPromiscuous</thought>
</li>
<li Class="PreceptComp_UnwillingToDo">
<eventDef>RSI_MiscSex</eventDef>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_MiscSex</eventDef>
<thought>Sex_NonPromiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_MiscSex</eventDef>
<thought>Sex_Know_NonPromiscuous</thought>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>RSI_PromiscuousSex</eventDef>
<thought>Sex_Know_Promiscuous_Approval</thought>
</li>
</comps>
</PreceptDef>
<!-- Thoughts -->
<ThoughtDef>
<defName>Sex_Promiscuous</defName>
<durationDays>1</durationDays>
<stackLimit>1</stackLimit>
<thoughtClass>RJWSexperience.Ideology.Thought_IncreaseRecord</thoughtClass>
<stages>
<li>
<label>promiscuous sex</label>
<description>I was immoral. It makes me aroused.</description>
<baseMoodEffect>5</baseMoodEffect>
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_IncreaseRecord" MayRequire="rjw.sexperience">
<recordDef>Lust</recordDef>
<increment>3.0</increment>
</li>
</modExtensions>
</ThoughtDef>
<ThoughtDef>
<defName>Sex_NonPromiscuous</defName>
<durationDays>1</durationDays>
<stackLimit>1</stackLimit>
<stages>
<li>
<label>ordinary sex</label>
<description>It cannot satisfy me.</description>
<baseMoodEffect>-1</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Sex_Know_Promiscuous</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Nymphomaniac</li>
<li>Zoophile</li>
<li>Rapist</li>
<li>Necrophiliac</li>
<li>Gay</li>
<li>Bisexual</li>
</nullifyingTraits>
<nullifyingPrecepts>
<li>Sex_Free</li>
<li>Sex_Promiscuous</li>
</nullifyingPrecepts>
<stages>
<li>
<label>promiscuous</label>
<baseOpinionOffset>-10</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Sex_Know_Promiscuous_Approval</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingPrecepts>
<li>Sex_VaginalOnly</li>
<li>Sex_AnalOnly</li>
<li>Sex_OralOnly</li>
</nullifyingPrecepts>
<stages>
<li>
<label>promiscuous</label>
<baseOpinionOffset>3</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Sex_Know_NonPromiscuous</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingPrecepts>
<li>Sex_VaginalOnly</li>
<li>Sex_AnalOnly</li>
<li>Sex_OralOnly</li>
<li>Sex_Free</li>
</nullifyingPrecepts>
<stages>
<li>
<label>boring</label>
<baseOpinionOffset>-3</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
</Defs>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>SexProselytizing</defName>
<label>sex type</label>
<iconPath>UI/Issues/Submissive</iconPath>
</IssueDef>
<PreceptDef>
<defName>ProselyzingByOrgasm</defName>
<issue>SexProselytizing</issue>
<label>Sexual Proselyzing</label>
<description>Giving orgasm converts partner towards this ideology.</description>
<impact>Medium</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<displayOrderInImpact>400</displayOrderInImpact>
</PreceptDef>
</Defs>

View File

@ -0,0 +1,219 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>GenitalSize</defName>
<label>Size Matters</label>
<iconPath>UI/Memes/SexualDissolutely</iconPath>
</IssueDef>
<!-- Precepts Male -->
<PreceptDef>
<defName>GenitalSize_Big_Better</defName>
<issue>GenitalSize</issue>
<description>The size matters.</description>
<label>Bigger = Better</label>
<impact>High</impact>
<displayOrderInIssue>20</displayOrderInIssue>
<displayOrderInImpact>200</displayOrderInImpact>
<comps>
<li Class="PreceptComp_SituationalThought">
<thought>GenitalSize_Approved</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>GenitalSize_Approved_Social</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>GenitalSize_NoRules</defName>
<issue>GenitalSize</issue>
<description>The size is unimportant.</description>
<label>No Rules</label>
<impact>High</impact>
<displayOrderInIssue>10</displayOrderInIssue>
<displayOrderInImpact>100</displayOrderInImpact>
<comps>
</comps>
</PreceptDef>
<PreceptDef>
<defName>GenitalSize_Smaller_Better</defName>
<issue>GenitalSize</issue>
<description>The greeks actually believed, that a big genital is an animalistic feature. Important members are known for their small genitals.</description>
<label>Smaller = Better</label>
<impact>High</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>200</displayOrderInImpact>
<comps>
<li Class="PreceptComp_SituationalThought">
<thought>GenitalSize_Disapproved</thought>
</li>
<li Class="PreceptComp_SituationalThought">
<thought>GenitalSize_Disapproved_Social</thought>
</li>
</comps>
</PreceptDef>
<!-- Thoughts - Mood -->
<ThoughtDef>
<defName>GenitalSize_Approved</defName>
<thoughtClass>Thought_Situational</thoughtClass>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_GenitalSize</workerClass>
<stages>
<li>
<label>Despised Genitalsize</label>
<description>I ... I am okay the way I am!</description>
<baseMoodEffect>-10</baseMoodEffect>
</li>
<li>
<label>Unwanted Genitalsize</label>
<description>I think I am below average.</description>
<baseMoodEffect>-5</baseMoodEffect>
</li>
<li>
<label>Normal Genitals</label>
<description>I guess I am the average.</description>
<baseMoodEffect>0</baseMoodEffect>
</li>
<li>
<label>Appreciated Genitals</label>
<description>I think I am above average.</description>
<baseMoodEffect>+5</baseMoodEffect>
</li>
<li>
<label>Venerated Genitals</label>
<description>Don't want to be the elephant in the room, but parts of me are.</description>
<baseMoodEffect>+10</baseMoodEffect>
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<!-- We have 5 stages, which map directly to genitalia severity:
Micro(<0.2), Small(>0.2&&<0.4), Normal(>0.4&&<0.6), Big(>0.6&&<0.8), Huge(>0.8) -->
<minimumValueforStage>
<li>0</li>
<li>0.2</li>
<li>0.4</li>
<li>0.6</li>
<li>0.8</li>
</minimumValueforStage>
</li>
</modExtensions>
</ThoughtDef>
<ThoughtDef>
<defName>GenitalSize_Disapproved</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_GenitalSize</workerClass>
<thoughtClass>Thought_Situational</thoughtClass>
<stages>
<li>
<label>Venerated Genitals</label>
<description>I do not need great genitals, as I am a being of supreme intellect and grace.</description>
<baseMoodEffect>+10</baseMoodEffect>
</li>
<li>
<label>Appreciated Genitals</label>
<description>I think I am below average.</description>
<baseMoodEffect>+5</baseMoodEffect>
</li>
<li>
<label>Normal Genitals</label>
<description>I guess I am the average.</description>
<baseMoodEffect>0</baseMoodEffect>
</li>
<li>
<label>Unwanted Genitals</label>
<description>I think I am above average.</description>
<baseMoodEffect>-5</baseMoodEffect>
</li>
<li>
<label>Despised Genitals</label>
<description>I am closer to an animal, than to a human. Why did I have to be born this way? </description>
<baseMoodEffect>-10</baseMoodEffect>
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<!-- We have 5 stages, which map directly to genitalia severity:
Micro(<0.2), Small(>0.2&&<0.4), Normal(>0.4&&<0.6), Big(>0.6&&<0.8), Huge(>0.8) -->
<minimumValueforStage>
<li>0</li>
<li>0.2</li>
<li>0.4</li>
<li>0.6</li>
<li>0.8</li>
</minimumValueforStage>
</li>
</modExtensions>
</ThoughtDef>
<!-- Social-Thoughts (Opinion)-->
<ThoughtDef>
<defName>GenitalSize_Approved_Social</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_GenitalSize_Social</workerClass>
<thoughtClass>Thought_SituationalSocial</thoughtClass>
<stages>
<li>
<label>Unwanted Genitals</label>
<baseOpinionOffset>-5</baseOpinionOffset>
</li>
<li>
<label>Normal Genitals</label>
<baseOpinionOffset>0</baseOpinionOffset>
</li>
<li>
<label>Favorable Genitals</label>
<baseOpinionOffset>+5</baseOpinionOffset>
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<!-- We have 3 stages, which map directly to genitalia severity:
Unfavorable(<0.4), Normal(>0.4&&<0.6), Favorable(>0.6) -->
<minimumValueforStage>
<li>0</li>
<li>0.4</li>
<li>0.6</li>
</minimumValueforStage>
</li>
</modExtensions>
</ThoughtDef>
<ThoughtDef>
<defName>GenitalSize_Disapproved_Social</defName>
<workerClass>RJWSexperience.Ideology.PreceptWorkers.ThoughtWorker_Precept_GenitalSize_Social</workerClass>
<thoughtClass>Thought_SituationalSocial</thoughtClass>
<stages>
<li>
<label>Favorable Genitals</label>
<baseOpinionOffset>+5</baseOpinionOffset>
</li>
<li>
<label>Normal Genitals</label>
<baseOpinionOffset>0</baseOpinionOffset>
</li>
<li>
<label>Unwanted Genitals</label>
<baseOpinionOffset>-5</baseOpinionOffset>
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<!-- We have 3 stages, which map directly to genitalia severity:
Favorable(<0.4), Normal(>0.4&&<0.6), Unfavorable(>0.6) -->
<minimumValueforStage>
<li>0</li>
<li>0.4</li>
<li>0.6</li>
</minimumValueforStage>
</li>
</modExtensions>
</ThoughtDef>
</Defs>

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>SocialAffection</defName>
<label>social affection</label>
<iconPath>UI/Issues/SocialAffection</iconPath>
</IssueDef>
<!-- Precepts -->
<PreceptDef>
<defName>SocialAffection_Normal</defName>
<issue>SocialAffection</issue>
<label>normal(vanilla)</label>
<description>Just normal.</description>
<impact>Low</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
<PreceptDef>
<defName>SocialAffection_Small</defName>
<issue>SocialAffection</issue>
<label>only immediate family</label>
<description>Care about only immediate family.</description>
<impact>Medium</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
<PreceptDef>
<defName>SocialAffection_OnlyFamily</defName>
<issue>SocialAffection</issue>
<label>only family</label>
<description>Don't care about non-family memeber's tragedy.</description>
<impact>Medium</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
<PreceptDef>
<defName>SocialAffection_Dry</defName>
<issue>SocialAffection</issue>
<label>not family</label>
<description>Don't care about family memeber's tragedy.</description>
<impact>High</impact>
<displayOrderInIssue>20</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
<PreceptDef>
<defName>SocialAffection_Psychopath</defName>
<issue>SocialAffection</issue>
<label>Psychopath</label>
<description>Don't care about others.</description>
<impact>High</impact>
<displayOrderInIssue>10</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
</Defs>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>Submissive</defName>
<label>submissive</label>
<iconPath>UI/Issues/Submissive</iconPath>
</IssueDef>
<!-- Precepts -->
<PreceptDef>
<defName>Submissive_None</defName>
<issue>Submissive</issue>
<label>Normal</label>
<description>Just normal.</description>
<impact>Low</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
<PreceptDef>
<defName>Submissive_Male</defName>
<issue>Submissive</issue>
<label>submissive male</label>
<description>Males are submissive. They will obey and accept even being raped.</description>
<impact>High</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<requiredMemes>
<li>FemaleSupremacy</li>
</requiredMemes>
<comps>
<li Class="PreceptComp_UnwillingToDo_Gendered">
<eventDef>RSI_Raped</eventDef>
<gender>Male</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_WasRaped</eventDef>
<thought>BeenRaped_Submissive</thought>
<gender>Male</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_WasRaped</eventDef>
<thought>BeenRaped_NotSubmissive</thought>
<gender>Female</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_KnowsMemoryThought_Gendered">
<eventDef>RSI_Raped</eventDef>
<thought>Raped_Know_NotBeingSubmissive</thought>
<doersGender>Male</doersGender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_WasRapedPrisoner</eventDef>
<thought>BeenRaped_Submissive</thought>
<gender>Male</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_WasRapedPrisoner</eventDef>
<thought>BeenRaped_NotSubmissive</thought>
<gender>Female</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_KnowsMemoryThought_Gendered">
<eventDef>RSI_RapedPrisoner</eventDef>
<thought>Raped_Know_NotBeingSubmissive</thought>
<doersGender>Male</doersGender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_WasRapedSlave</eventDef>
<thought>BeenRaped_Submissive</thought>
<gender>Male</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_WasRapedSlave</eventDef>
<thought>BeenRaped_NotSubmissive</thought>
<gender>Female</gender>
</li>
<!--<li Class="RJWSexperience.Ideology.Precepts.Comp_KnowsMemoryThought_Gendered">
<eventDef>RSI_RapedSlave</eventDef>
<thought>Raped_Know_NotBeingSubmissive</thought>
<doersGender>Male</doersGender>
</li>-->
</comps>
</PreceptDef>
<PreceptDef>
<defName>Submissive_Female</defName>
<issue>Submissive</issue>
<label>submissive female</label>
<description>Females are submissive. They will obey and accept even being raped.</description>
<impact>High</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<requiredMemes>
<li>MaleSupremacy</li>
</requiredMemes>
<comps>
<li Class="PreceptComp_UnwillingToDo_Gendered">
<eventDef>RSI_Raped</eventDef>
<gender>Female</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_WasRaped</eventDef>
<thought>BeenRaped_Submissive</thought>
<gender>Female</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_WasRaped</eventDef>
<thought>BeenRaped_NotSubmissive</thought>
<gender>Male</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_KnowsMemoryThought_Gendered">
<eventDef>RSI_Raped</eventDef>
<thought>Raped_Know_NotBeingSubmissive</thought>
<doersGender>Female</doersGender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_WasRapedPrisoner</eventDef>
<thought>BeenRaped_Submissive</thought>
<gender>Female</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_WasRapedPrisoner</eventDef>
<thought>BeenRaped_NotSubmissive</thought>
<gender>Male</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_KnowsMemoryThought_Gendered">
<eventDef>RSI_RapedPrisoner</eventDef>
<thought>Raped_Know_NotBeingSubmissive</thought>
<doersGender>Female</doersGender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_WasRapedSlave</eventDef>
<thought>BeenRaped_Submissive</thought>
<gender>Female</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_WasRapedSlave</eventDef>
<thought>BeenRaped_NotSubmissive</thought>
<gender>Male</gender>
</li>
<!--<li Class="RJWSexperience.Ideology.Precepts.Comp_KnowsMemoryThought_Gendered">
<eventDef>RSI_RapedSlave</eventDef>
<thought>Raped_Know_NotBeingSubmissive</thought>
<doersGender>Female</doersGender>
</li>-->
</comps>
</PreceptDef>
<!-- Thoughts -->
<ThoughtDef>
<defName>BeenRaped_Submissive</defName>
<durationDays>10</durationDays>
<stackLimit>100</stackLimit>
<thoughtClass>Thought_Memory</thoughtClass>
<stackedEffectMultiplier>0.4</stackedEffectMultiplier>
<nullifyingTraits>
<li>Masochist</li>
</nullifyingTraits>
<stages>
<li>
<label>had been raped</label>
<description>I had to accept. But i don't feel so good.</description>
<baseMoodEffect>-3</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>BeenRaped_NotSubmissive</defName>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<stackedEffectMultiplier>0.4</stackedEffectMultiplier>
<nullifyingTraits>
<li>Masochist</li>
</nullifyingTraits>
<stages>
<li>
<label>{0} raped me</label>
<description>How dare...</description>
<baseMoodEffect>-30</baseMoodEffect>
<baseOpinionOffset>-200</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Raped_Know_NotBeingSubmissive</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>15</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<stages>
<li>
<label>not obedient</label>
<baseOpinionOffset>-30</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
</Defs>

View File

@ -0,0 +1,360 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>Virginity_Female</defName>
<label>virginity of female</label>
<iconPath>UI/Issues/Female</iconPath>
</IssueDef>
<IssueDef>
<defName>Virginity_Male</defName>
<label>virginity of male</label>
<iconPath>UI/Issues/Male</iconPath>
</IssueDef>
<HistoryEventDef>
<defName>RSI_VirginTaken</defName>
<label>virgin taken</label>
<modExtensions>
<li Class="RJWSexperience.Ideology.HistoryEvents.DefExtension_SecondaryEvents">
<generationRules>
<li>
<filter>
<relations>
<hasNoneOfRelations>
<li>Spouse</li>
</hasNoneOfRelations>
</relations>
</filter>
<historyEventDef>RSI_VirginTakenNotSpouse</historyEventDef>
</li>
</generationRules>
</li>
</modExtensions>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_TookVirgin</defName>
<label>took virgin</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_VirginStolen</defName>
<label>virgin stolen</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>RSI_VirginTakenNotSpouse</defName>
<label>virgin was taken by a stranger</label>
</HistoryEventDef>
<!-- Precepts -->
<PreceptDef>
<defName>Virgin_UselessF</defName>
<issue>Virginity_Female</issue>
<label>useless</label>
<description>Female's virginity is useless.</description>
<impact>Medium</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>10</defaultSelectionWeight>
</PreceptDef>
<PreceptDef>
<defName>Virgin_UselessM</defName>
<issue>Virginity_Male</issue>
<label>useless</label>
<description>Male's virginity is useless.</description>
<impact>Low</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>80</defaultSelectionWeight>
</PreceptDef>
<PreceptDef>
<defName>Virgin_PreciousF</defName>
<issue>Virginity_Female</issue>
<label>precious</label>
<description>Female's virginity is precious.</description>
<impact>Medium</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>80</defaultSelectionWeight>
<comps>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_VirginStolen</eventDef>
<thought>Virgin_Precious_Taken_Forcefully</thought>
<gender>Female</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_VirginTaken</eventDef>
<thought>Virgin_Precious_Taken</thought>
<gender>Female</gender>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_TookVirgin</eventDef>
<thought>TookVirginity</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Virgin_PreciousM</defName>
<issue>Virginity_Male</issue>
<label>precious</label>
<description>Male's virginity is precious.</description>
<impact>Medium</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>1</defaultSelectionWeight>
<comps>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_VirginStolen</eventDef>
<thought>Virgin_Precious_Taken_Forcefully</thought>
<gender>Male</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_VirginTaken</eventDef>
<thought>Virgin_Precious_Taken</thought>
<gender>Male</gender>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_TookVirgin</eventDef>
<thought>TookVirginity</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Virgin_OnlyForSpouseF</defName>
<issue>Virginity_Female</issue>
<label>precious(strict)</label>
<description>Losing virginity before marriage is evil.</description>
<impact>Medium</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>80</defaultSelectionWeight>
<requiredMemes>
<li>MaleSupremacy</li>
</requiredMemes>
<conflictingMemes>
<li>FemaleSupremacy</li>
</conflictingMemes>
<associatedMemes>
<li>MaleSupremacy</li>
</associatedMemes>
<comps>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_VirginStolen</eventDef>
<thought>Virgin_Precious_Taken_Forcefully</thought>
<gender>Female</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_VirginTaken</eventDef>
<thought>Virgin_Precious_Taken</thought>
<gender>Female</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_KnowsMemoryThought_Gendered">
<eventDef>RSI_VirginTakenNotSpouse</eventDef>
<thought>Virgin_OnlyForSpouse_Know_Taken</thought>
<doersGender>Female</doersGender>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_TookVirgin</eventDef>
<thought>TookVirginity</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Virgin_OnlyForSpouseM</defName>
<issue>Virginity_Male</issue>
<label>precious(strict)</label>
<description>Losing virginity before marriage is evil.</description>
<impact>Medium</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>20</defaultSelectionWeight>
<requiredMemes>
<li>FemaleSupremacy</li>
</requiredMemes>
<conflictingMemes>
<li>MaleSupremacy</li>
</conflictingMemes>
<associatedMemes>
<li>FemaleSupremacy</li>
</associatedMemes>
<comps>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_VirginStolen</eventDef>
<thought>Virgin_Precious_Taken_Forcefully</thought>
<gender>Male</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_VirginTaken</eventDef>
<thought>Virgin_Precious_Taken</thought>
<gender>Male</gender>
</li>
<li Class="RJWSexperience.Ideology.Precepts.Comp_KnowsMemoryThought_Gendered">
<eventDef>RSI_VirginTakenNotSpouse</eventDef>
<thought>Virgin_OnlyForSpouse_Know_Taken</thought>
<doersGender>Male</doersGender>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>RSI_TookVirgin</eventDef>
<thought>TookVirginity</thought>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Virgin_ShamefulF</defName>
<issue>Virginity_Female</issue>
<label>shameful</label>
<description>Remaining as virgin is shameful thing and being laughed at.</description>
<impact>Medium</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>1</defaultSelectionWeight>
<associatedMemes>
<li>FemaleSupremacy</li>
</associatedMemes>
<comps>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_VirginTaken</eventDef>
<thought>Virgin_Shameful_Taken</thought>
<gender>Female</gender>
</li>
</comps>
</PreceptDef>
<PreceptDef>
<defName>Virgin_ShamefulM</defName>
<issue>Virginity_Male</issue>
<label>shameful</label>
<description>Remaining as virgin is shameful thing and being laughed at.</description>
<impact>Medium</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>40</defaultSelectionWeight>
<associatedMemes>
<li>MaleSupremacy</li>
</associatedMemes>
<comps>
<li Class="RJWSexperience.Ideology.Precepts.Comp_SelfTookMemoryThought_Gendered">
<eventDef>RSI_VirginTaken</eventDef>
<thought>Virgin_Shameful_Taken</thought>
<gender>Male</gender>
</li>
</comps>
</PreceptDef>
<!-- Thoughts -->
<ThoughtDef>
<defName>Virgin_Precious_Taken_Forcefully</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>30</durationDays>
<stackLimit>1</stackLimit>
<stages>
<li>
<label>Virginity stolen</label>
<description>My virginity was taken forcefully.</description>
<baseMoodEffect>-10</baseMoodEffect>
<baseOpinionOffset>-200</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>Virgin_Precious_Taken</defName>
<thoughtClass>RJWSexperience.Ideology.Thought_Opinionbased</thoughtClass>
<durationDays>7</durationDays>
<stackLimit>1</stackLimit>
<stages>
<li>
<label>Lost virginity to {0}</label>
<description>I am no longer virgin.</description>
<baseMoodEffect>-5</baseMoodEffect>
</li>
<li>
<label>Lost virginity to {0}</label>
<description>I am no longer virgin.</description>
<baseMoodEffect>-3</baseMoodEffect>
</li>
<li>
<label>Lost virginity to {0}</label>
<description>I am no longer virgin.</description>
<baseMoodEffect>-1</baseMoodEffect>
</li>
<li>
<label>Gave virginity to {0}</label>
<description>I gave my virginity to my love.</description>
<baseMoodEffect>5</baseMoodEffect>
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<minimumValueforStage>
<li>-100</li>
<li>-50</li>
<li>0</li>
<li>75</li>
</minimumValueforStage>
</li>
</modExtensions>
</ThoughtDef>
<ThoughtDef>
<defName>Virgin_Shameful_Taken</defName>
<thoughtClass>RJWSexperience.Ideology.Thought_Opinionbased</thoughtClass>
<durationDays>7</durationDays>
<stackLimit>1</stackLimit>
<stages>
<li>
<label>Lost virginity to {0}</label>
<description>Finally!</description>
<baseMoodEffect>5</baseMoodEffect>
</li>
<li>
<label>Lost virginity to {0}</label>
<description>Finally!</description>
<baseMoodEffect>10</baseMoodEffect>
</li>
<li>
<label>Lost virginity to {0}</label>
<description>Finally!</description>
<baseMoodEffect>20</baseMoodEffect>
</li>
</stages>
<modExtensions>
<li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<minimumValueforStage>
<li>-100</li>
<li>0</li>
<li>75</li>
</minimumValueforStage>
</li>
</modExtensions>
</ThoughtDef>
<ThoughtDef>
<defName>Virgin_OnlyForSpouse_Know_Taken</defName>
<thoughtClass>Thought_MemorySocial</thoughtClass>
<durationDays>30</durationDays>
<stackLimit>100</stackLimit>
<stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
<nullifyingTraits>
<li>Nymphomaniac</li>
</nullifyingTraits>
<stages>
<li>
<label>slut</label>
<baseOpinionOffset>-30</baseOpinionOffset>
</li>
</stages>
</ThoughtDef>
</Defs>

View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<RitualPatternDef Abstract="True" Name="GangbangBase" ParentName="CelebrationPartyChat">
<nameMaker>NamerRitualFestival</nameMaker>
<canStartAnytime>true</canStartAnytime>
<ritualObligationTargetFilter>RitualSpotOrAltar</ritualObligationTargetFilter>
<tags>
<li>Rape</li>
</tags>
</RitualPatternDef>
<RitualPatternDef ParentName="GangbangBase">
<defName>Gangbang</defName>
<ritualBehavior>Gangbang</ritualBehavior>
<shortDescOverride>gangbang</shortDescOverride>
<descOverride>A ritualistic gangbang. The organizer will give a speech to excite the crowd, then fuck the victim. If the organizer cannot fuck victim, the ritual will be canceled.</descOverride>
<iconPathOverride>UI/Issues/Gangbang</iconPathOverride>
<ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
<ritualOutcomeEffect>Gangbang</ritualOutcomeEffect>
<patternGroupTag/>
</RitualPatternDef>
<RitualPatternDef ParentName="GangbangBase">
<defName>Gangbang_Consensual</defName>
<ritualBehavior>Gangbang_Consensual</ritualBehavior>
<shortDescOverride>gangbang</shortDescOverride>
<descOverride>A ritualistic gangbang. The organizer will give a speech to excite the crowd, then fucked by the crowd.</descOverride>
<iconPathOverride>UI/Issues/Gangbang_Consensual</iconPathOverride>
<ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
<ritualOutcomeEffect>Gangbang_Consensual</ritualOutcomeEffect>
<patternGroupTag/>
</RitualPatternDef>
<RitualPatternDef ParentName="GangbangBase">
<defName>GangbangByAnimal</defName>
<ritualBehavior>GangbangByAnimal</ritualBehavior>
<shortDescOverride>gangbang by animal</shortDescOverride>
<descOverride>A ritualistic animal gangbang. The organizer will give a speech to excite the crowd, then animals begin fuck victim.</descOverride>
<iconPathOverride>UI/Commands/Breeding_Pawn_off</iconPathOverride>
<ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
<ritualOutcomeEffect>BestialGangbang</ritualOutcomeEffect>
<patternGroupTag/>
</RitualPatternDef>
<RitualPatternDef ParentName="GangbangBase">
<defName>GangbangByAnimal_Consensual</defName>
<ritualBehavior>GangbangByAnimal_Consensual</ritualBehavior>
<shortDescOverride>gangbang by animal</shortDescOverride>
<descOverride>A ritualistic animal gangbang. The organizer will give a speech to excite the crowd, then animals begin fuck the organizer.</descOverride>
<iconPathOverride>UI/Commands/Breeding_Pawn_on</iconPathOverride>
<ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
<ritualOutcomeEffect>BestialGangbang_Consensual</ritualOutcomeEffect>
<patternGroupTag/>
</RitualPatternDef>
<RitualPatternDef ParentName="CelebrationConsumable">
<defName>DrugOrgy</defName>
<shortDescOverride>drug orgy</shortDescOverride>
<descOverride>An orgy with large amounts of aphrodisiac. Participants will gather around a lustbong, light it on fire, and fuck each other while inhaling the fumes.</descOverride>
<iconPathOverride>UI/Icons/Rituals/SmokeCircle</iconPathOverride>
<ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
<ritualObligationTargetFilter>DrugOrgy</ritualObligationTargetFilter>
<ritualBehavior>DrugOrgy</ritualBehavior>
<ritualOutcomeEffect>DrugOrgy</ritualOutcomeEffect>
</RitualPatternDef>
</Defs>

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<IdeoPresetDef>
<defName>Animal_Breeders</defName>
<label>animal breeders</label>
<description>Animals are our better half.</description>
<categoryDef>Intense</categoryDef>
<memes>
<li>AnimalPersonhood</li>
<li>Zoophile</li>
</memes>
</IdeoPresetDef>
<IdeoPresetDef>
<defName>Savage_Rapist_Brigands</defName>
<label>savage rapist brigands</label>
<description>All of them are ours.</description>
<categoryDef>Intense</categoryDef>
<memes>
<li>Rapist</li>
<li>Nudism</li>
<li>Raider</li>
</memes>
</IdeoPresetDef>
<IdeoPresetDef>
<defName>Hentai_Tribe</defName>
<label>hentai tribe</label>
<categoryDef>Intense</categoryDef>
<description>Impregnate.</description>
<memes>
<li>MaleSupremacy</li>
<li>Rapist</li>
</memes>
</IdeoPresetDef>
</Defs>

View File

@ -0,0 +1,466 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<RitualBehaviorDef Name="GangbangBehaviorBase" Abstract="True" ParentName="DateRitualBehavior">
<preceptRequirements>
<li Class="PreceptRequirement_Altar"/>
</preceptRequirements>
<durationTicks>7500</durationTicks>
<roles Inherit="False">
<li Class="RitualRoleTag">
<label>initiator</label>
<id>initiator</id>
<tag>Initiator</tag>
<precept>IdeoRole_Moralist</precept>
<required>True</required>
<substitutable>true</substitutable>
<maxCount>1</maxCount>
<countsAsParticipant>False</countsAsParticipant>
</li>
</roles>
</RitualBehaviorDef>
<RitualBehaviorDef ParentName="GangbangBehaviorBase">
<defName>Gangbang</defName>
<workerClass>RJWSexperience.Ideology.RitualBehaviorWorker_Gangbang</workerClass>
<roles>
<li Class="RJWSexperience.Ideology.RitualRole_RapeVictim">
<label>victim</label>
<missingDesc>a victim</missingDesc>
<id>victim</id>
<maxCount>1</maxCount>
<required>true</required>
<countsAsParticipant>False</countsAsParticipant>
<ignoreBleeding>true</ignoreBleeding>
<allowNonAggroMentalState>true</allowNonAggroMentalState>
<allowOtherIdeos>true</allowOtherIdeos>
</li>
</roles>
<stages Inherit="False">
<li Class="RJWSexperience.Ideology.RitualStage_InteractWithVictim">
<defaultDuty>Spectate</defaultDuty>
<endTriggers>
<li Class="StageEndTrigger_PawnDeliveredOrNotValid"/>
</endTriggers>
<failTriggers>
<li Class="StageFailTrigger_TargetPawnUnreachable">
<takerId>initiator</takerId>
<takeeId>victim</takeeId>
<desc>Victim is not reachable.</desc>
</li>
</failTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>DeliverPawnToAltar</dutyDef>
</li>
<li>
<roleId>victim</roleId>
<dutyDef>Idle</dutyDef>
</li>
</roleBehaviors>
</li>
<li>
<defaultDuty>Spectate</defaultDuty>
<endTriggers>
<li Class="StageEndTrigger_DurationPercentage">
<percentage>0.1</percentage>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>SpeakOnCellFacingSpectators</dutyDef>
<speakerInteraction>Speech_Gangbang</speakerInteraction>
<customPositions>
<li Class="RitualPosition_Lectern">
<maxDistanceToFocus>5</maxDistanceToFocus>
</li>
<li Class="RitualPosition_OnInteractionCell" />
</customPositions>
</li>
<li>
<roleId>victim</roleId>
<dutyDef>LayDownAwake</dutyDef>
</li>
</roleBehaviors>
</li>
<li Class="RJWSexperience.Ideology.RitualStage_InteractWithVictim">
<defaultDuty>Gangbang_Rape</defaultDuty>
<essential>True</essential>
<endTriggers>
<li Class="StageEndTrigger_DurationPercentage">
<percentage>0.9</percentage>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>FuckVictim</dutyDef>
<customPositions>
<li Class="RitualPosition_OnInteractionCell" />
</customPositions>
</li>
</roleBehaviors>
</li>
<li Class="RJWSexperience.Ideology.RitualStage_InteractWithVictim">
<defaultDuty>Gangbang_Rape</defaultDuty>
<endTriggers>
<li Class="StageEndTrigger_DurationPercentage">
<percentage>0.1</percentage>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>SpeakOnCellFacingSpectators</dutyDef>
<speakerInteraction>Speech_Gangbang</speakerInteraction>
<customPositions>
<li Class="RitualPosition_OnInteractionCell" />
</customPositions>
</li>
</roleBehaviors>
</li>
</stages>
</RitualBehaviorDef>
<RitualBehaviorDef ParentName="GangbangBehaviorBase">
<defName>Gangbang_Consensual</defName>
<workerClass>RJWSexperience.Ideology.RitualBehaviorWorker_Gangbang_Consensual</workerClass>
<stages Inherit="False">
<li Class="RJWSexperience.Ideology.RitualStage_InteractWithInitiator">
<defaultDuty>Spectate</defaultDuty>
<endTriggers>
<li Class="StageEndTrigger_RolesArrived">
<roleIds>
<li>initiator</li>
</roleIds>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>ArriveToCell</dutyDef>
</li>
</roleBehaviors>
</li>
<li>
<defaultDuty>Spectate</defaultDuty>
<endTriggers>
<li Class="StageEndTrigger_DurationPercentage">
<percentage>0.1</percentage>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>SpeakOnCellFacingSpectators</dutyDef>
<speakerInteraction>Speech_Gangbang</speakerInteraction>
<customPositions>
<li Class="RitualPosition_Lectern">
<maxDistanceToFocus>5</maxDistanceToFocus>
</li>
<li Class="RitualPosition_OnInteractionCell" />
</customPositions>
</li>
</roleBehaviors>
</li>
<li Class="RJWSexperience.Ideology.RitualStage_InteractWithInitiator">
<defaultDuty>Gangbang_Consensual</defaultDuty>
<essential>True</essential>
<endTriggers>
<li Class="StageEndTrigger_DurationPercentage">
<percentage>1.0</percentage>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>LayDownAwake</dutyDef>
<customPositions>
<li Class="RitualPosition_OnInteractionCell" />
</customPositions>
</li>
</roleBehaviors>
</li>
<li Class="RJWSexperience.Ideology.RitualStage_InteractWithInitiator">
<defaultDuty>Spectate</defaultDuty>
<endTriggers>
<li Class="StageEndTrigger_DurationPercentage">
<percentage>0.1</percentage>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>SpeakOnCellFacingSpectators</dutyDef>
<speakerInteraction>Speech_Gangbang</speakerInteraction>
<customPositions>
<li Class="RitualPosition_OnInteractionCell" />
</customPositions>
</li>
</roleBehaviors>
</li>
</stages>
</RitualBehaviorDef>
<RitualBehaviorDef ParentName="GangbangBehaviorBase">
<defName>GangbangByAnimal</defName>
<workerClass>RJWSexperience.Ideology.RitualBehaviorWorker_Gangbang</workerClass>
<roles>
<li Class="RJWSexperience.Ideology.RitualRole_HumanBreedee">
<label>breedee</label>
<missingDesc>a breedee who will be fucked by animal</missingDesc>
<id>victim</id>
<maxCount>1</maxCount>
<required>True</required>
<countsAsParticipant>False</countsAsParticipant>
<ignoreBleeding>true</ignoreBleeding>
</li>
<li Class="RJWSexperience.Ideology.RitualRole_AnimalBreeder">
<label>breeder</label>
<id>animal</id>
<maxCount>30</maxCount>
<required>false</required>
<missingDesc>a breedable animal</missingDesc>
<countsAsParticipant>false</countsAsParticipant>
</li>
</roles>
<stages Inherit="False">
<li Class="RitualStage_InteractWithRole">
<targets>
<li>
<pawnId>initiator</pawnId>
<targetId>victim</targetId>
</li>
</targets>
<defaultDuty>Spectate</defaultDuty>
<spectateDistanceOverride>5~7</spectateDistanceOverride>
<failTriggers>
<li Class="StageFailTrigger_TargetPawnUnreachable">
<takerId>initiator</takerId>
<takeeId>victim</takeeId>
<desc>Victim is not reachable.</desc>
</li>
</failTriggers>
<endTriggers>
<li Class="StageEndTrigger_RolesArrived">
<roleIds>
<li>initiator</li>
</roleIds>
<clearTag>true</clearTag>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>DeliverPawnToCellIfAliveThenIdle</dutyDef>
<customPositions>
<li Class="RitualPosition_DuelistStart">
<distFromTarget>2</distFromTarget>
<duelistIndex>0</duelistIndex>
</li>
</customPositions>
</li>
<li>
<roleId>victim</roleId>
<dutyDef>Idle</dutyDef>
</li>
</roleBehaviors>
</li>
<li>
<defaultDuty>Spectate</defaultDuty>
<endTriggers>
<li Class="StageEndTrigger_DurationPercentage">
<percentage>0.1</percentage>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>SpeakOnCellFacingSpectators</dutyDef>
<speakerInteraction>Speech_Zoophile</speakerInteraction>
<customPositions>
<li Class="RitualPosition_Lectern">
<maxDistanceToFocus>5</maxDistanceToFocus>
</li>
<li Class="RitualPosition_OnInteractionCell" />
</customPositions>
</li>
<li>
<roleId>animal</roleId>
<dutyDef>Spectate</dutyDef>
</li>
<li>
<roleId>victim</roleId>
<dutyDef>LayDownAwake</dutyDef>
</li>
</roleBehaviors>
</li>
<li Class="RJWSexperience.Ideology.RitualStage_InteractWithVictim_All">
<defaultDuty>Spectate</defaultDuty>
<essential>True</essential>
<endTriggers>
<li Class="StageEndTrigger_DurationPercentage">
<percentage>0.9</percentage>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>animal</roleId>
<dutyDef>Gangbang_Rape</dutyDef>
<customPositions>
<li Class="RitualPosition_OnInteractionCell" />
</customPositions>
</li>
<li>
<roleId>victim</roleId>
<dutyDef>LayDownAwake</dutyDef>
</li>
</roleBehaviors>
</li>
<li>
<defaultDuty>Spectate</defaultDuty>
<endTriggers>
<li Class="StageEndTrigger_DurationPercentage">
<percentage>0.1</percentage>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>SpeakOnCellFacingSpectators</dutyDef>
<speakerInteraction>Speech_Zoophile</speakerInteraction>
<customPositions>
<li Class="RitualPosition_OnInteractionCell" />
</customPositions>
</li>
<li>
<roleId>victim</roleId>
<dutyDef>LayDownAwake</dutyDef>
</li>
</roleBehaviors>
</li>
</stages>
</RitualBehaviorDef>
<RitualBehaviorDef ParentName="GangbangBehaviorBase">
<defName>GangbangByAnimal_Consensual</defName>
<workerClass>RJWSexperience.Ideology.RitualBehaviorWorker_Gangbang_Consensual</workerClass>
<roles>
<li Class="RJWSexperience.Ideology.RitualRole_AnimalBreeder">
<label>breeder</label>
<id>animal</id>
<maxCount>30</maxCount>
<required>false</required>
<missingDesc>a breedable animal</missingDesc>
<countsAsParticipant>false</countsAsParticipant>
</li>
</roles>
<stages Inherit="False">
<li Class="RJWSexperience.Ideology.RitualStage_InteractWithInitiator">
<defaultDuty>Spectate</defaultDuty>
<endTriggers>
<li Class="StageEndTrigger_RolesArrived">
<roleIds>
<li>initiator</li>
</roleIds>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>ArriveToCell</dutyDef>
</li>
</roleBehaviors>
</li>
<li>
<defaultDuty>Spectate</defaultDuty>
<endTriggers>
<li Class="StageEndTrigger_DurationPercentage">
<percentage>0.1</percentage>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>SpeakOnCellFacingSpectators</dutyDef>
<speakerInteraction>Speech_Zoophile</speakerInteraction>
<customPositions>
<li Class="RitualPosition_Lectern">
<maxDistanceToFocus>5</maxDistanceToFocus>
</li>
<li Class="RitualPosition_OnInteractionCell" />
</customPositions>
</li>
<li>
<roleId>animal</roleId>
<dutyDef>Spectate</dutyDef>
</li>
</roleBehaviors>
</li>
<li Class="RJWSexperience.Ideology.RitualStage_InteractWithInitiator">
<defaultDuty>Spectate</defaultDuty>
<essential>True</essential>
<endTriggers>
<li Class="StageEndTrigger_DurationPercentage">
<percentage>0.9</percentage>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>animal</roleId>
<dutyDef>Gangbang_Consensual</dutyDef>
<customPositions>
<li Class="RitualPosition_OnInteractionCell" />
</customPositions>
</li>
<li>
<roleId>initiator</roleId>
<dutyDef>LayDownAwake</dutyDef>
</li>
</roleBehaviors>
</li>
<li>
<defaultDuty>Spectate</defaultDuty>
<endTriggers>
<li Class="StageEndTrigger_DurationPercentage">
<percentage>0.1</percentage>
</li>
</endTriggers>
<roleBehaviors>
<li>
<roleId>initiator</roleId>
<dutyDef>SpeakOnCellFacingSpectators</dutyDef>
<speakerInteraction>Speech_Zoophile</speakerInteraction>
<customPositions>
<li Class="RitualPosition_OnInteractionCell" />
</customPositions>
</li>
</roleBehaviors>
</li>
</stages>
</RitualBehaviorDef>
<RitualBehaviorDef ParentName="DateRitualBehavior">
<defName>DrugOrgy</defName>
<durationTicks>7500</durationTicks>
<roles Inherit="False"/>
<spectatorsLabel>Participants</spectatorsLabel>
<spectatorGerund>participate</spectatorGerund>
<stages Inherit="False">
<li>
<defaultDuty>DrugOrgy</defaultDuty>
<endTriggers>
<li Class="StageEndTrigger_DurationPercentage">
<percentage>1.0</percentage>
</li>
</endTriggers>
</li>
</stages>
</RitualBehaviorDef>
</Defs>

View File

@ -0,0 +1,400 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<RitualOutcomeEffectDef>
<defName>Gangbang</defName>
<description>Depending on ritual quality, participants will get between {MINMOOD} and {MAXMOOD} mood for {MOODDAYS} days.</description>
<workerClass>RitualOutcomeEffectWorker_Consumable</workerClass>
<extraPredictedOutcomeDescriptions>
<li>If the {0} is satisfying, one of the participants might gain an inspiration.</li>
</extraPredictedOutcomeDescriptions>
<comps>
<li Class="RitualOutcomeComp_RolePresentNotSubstituted">
<roleId>initiator</roleId>
<label>moral guide present</label>
<qualityOffset>0.10</qualityOffset>
</li>
<li Class="RitualOutcomeComp_ParticipantCount">
<label>participant count</label>
<curve>
<points>
<li>(1, -0.20)</li>
<li>(3, -0.05)</li>
<li>(5, 0.05)</li>
<li>(10, 0.10)</li>
</points>
</curve>
</li>
<li Class="RitualOutcomeComp_RitualTargetDefs">
<allowAltars>true</allowAltars>
<label>started at altar</label>
<qualityOffset>0.2</qualityOffset>
<expectedThingLabelTip>an altar</expectedThingLabelTip>
</li>
<li Class="RJWSexperience.Ideology.RitualOutcomeComp_HediffBased">
<label>victim broken</label>
<qualityOffset>0.15</qualityOffset>
<hediffDef>FeelingBroken</hediffDef>
<minSeverity>0.3</minSeverity>
<roleId>victim</roleId>
</li>
<li Class="RJWSexperience.Ideology.RitualOutcomeComp_HediffBased">
<label>victim extremly broken</label>
<qualityOffset>0.15</qualityOffset>
<hediffDef>FeelingBroken</hediffDef>
<minSeverity>0.5</minSeverity>
<roleId>victim</roleId>
</li>
<li Class="RJWSexperience.Ideology.RitualOutcomeComp_HediffBased">
<label>victim completely broken</label>
<qualityOffset>0.3</qualityOffset>
<hediffDef>FeelingBroken</hediffDef>
<minSeverity>0.9</minSeverity>
<roleId>victim</roleId>
</li>
<li Class="RJWSexperience.Ideology.RitualOutcomeComp_NeedBased">
<label>statisfied participants</label>
<qualityOffset>0.4</qualityOffset>
<needDef>Sex</needDef>
<minAvgNeed>0.7</minAvgNeed>
</li>
<li Class="RJWSexperience.Ideology.RitualOutcomeComp_NeedBased">
<label>completly statisfied participants</label>
<qualityOffset>0.4</qualityOffset>
<needDef>Sex</needDef>
<minAvgNeed>0.9</minAvgNeed>
</li>
</comps>
<outcomeChances>
<li>
<label>Terrible</label>
<chance>0.05</chance>
<memory>TerribleGangbang</memory>
<description>The {0} was terrible! The speech was stuttering and incoherent, and the victim was botched - everyone was waiting for it to end.</description>
<positivityIndex>-2</positivityIndex>
</li>
<li>
<label>Boring</label>
<chance>0.10</chance>
<memory>BoringGangbang</memory>
<description>The {0} was boring. The speech was repetitive and the victim was noticeably flawed. It just didn't feel dignified.</description>
<positivityIndex>-1</positivityIndex>
</li>
<li>
<label>Satisfying</label>
<chance>0.6</chance>
<memory>FunGangbang</memory>
<description>The {0} was satisfying. The speech felt meaningful, and the victim was precise and dignified.</description>
<potentialExtraOutcomeDesc>There's a 5% chance that a random participant gets an inspiration.</potentialExtraOutcomeDesc>
<positivityIndex>1</positivityIndex>
</li>
<li>
<label>Spectacular</label>
<chance>0.25</chance>
<memory>UnforgettableGangbang</memory>
<description>The {0} was spectacular! The speech brought everyone to the edge of a frenzy and the victim was like succubus.</description>
<potentialExtraOutcomeDesc>There's a 10% chance that a random participant gets an inspiration.</potentialExtraOutcomeDesc>
<positivityIndex>2</positivityIndex>
</li>
</outcomeChances>
</RitualOutcomeEffectDef>
<RitualOutcomeEffectDef>
<defName>Gangbang_Consensual</defName>
<description>Depending on ritual quality, participants will get between {MINMOOD} and {MAXMOOD} mood for {MOODDAYS} days.</description>
<workerClass>RitualOutcomeEffectWorker_Consumable</workerClass>
<extraPredictedOutcomeDescriptions>
<li>If the {0} is satisfying, one of the participants might gain an inspiration.</li>
</extraPredictedOutcomeDescriptions>
<comps>
<li Class="RitualOutcomeComp_RolePresentNotSubstituted">
<roleId>initiator</roleId>
<label>moral guide present</label>
<qualityOffset>0.10</qualityOffset>
</li>
<li Class="RitualOutcomeComp_ParticipantCount">
<label>participant count</label>
<curve>
<points>
<li>(1, -0.20)</li>
<li>(3, -0.05)</li>
<li>(5, 0.05)</li>
<li>(10, 0.10)</li>
</points>
</curve>
</li>
<li Class="RitualOutcomeComp_RitualTargetDefs">
<allowAltars>true</allowAltars>
<label>started at altar</label>
<qualityOffset>0.2</qualityOffset>
<expectedThingLabelTip>an altar</expectedThingLabelTip>
</li>
<li Class="RJWSexperience.Ideology.RitualOutcomeComp_NeedBased">
<label>statisfied participants</label>
<qualityOffset>0.4</qualityOffset>
<needDef>Sex</needDef>
<minAvgNeed>0.7</minAvgNeed>
</li>
<li Class="RJWSexperience.Ideology.RitualOutcomeComp_NeedBased">
<label>completly statisfied participants</label>
<qualityOffset>1.0</qualityOffset>
<needDef>Sex</needDef>
<minAvgNeed>0.8</minAvgNeed>
</li>
</comps>
<outcomeChances>
<li>
<label>Terrible</label>
<chance>0.05</chance>
<memory>TerribleGangbang</memory>
<description>The {0} was terrible! The speech was stuttering and incoherent, and the victim was botched - everyone was waiting for it to end.</description>
<positivityIndex>-2</positivityIndex>
</li>
<li>
<label>Boring</label>
<chance>0.10</chance>
<memory>BoringGangbang</memory>
<description>The {0} was boring. The speech was repetitive and the victim was noticeably flawed. It just didn't feel dignified.</description>
<positivityIndex>-1</positivityIndex>
</li>
<li>
<label>Satisfying</label>
<chance>0.6</chance>
<memory>FunGangbang</memory>
<description>The {0} was satisfying. The speech felt meaningful, and the victim was precise and dignified.</description>
<potentialExtraOutcomeDesc>There's a 5% chance that a random participant gets an inspiration.</potentialExtraOutcomeDesc>
<positivityIndex>1</positivityIndex>
</li>
<li>
<label>Spectacular</label>
<chance>0.25</chance>
<memory>UnforgettableGangbang</memory>
<description>The {0} was spectacular! The speech brought everyone to the edge of a frenzy and the victim was like succubus.</description>
<potentialExtraOutcomeDesc>There's a 10% chance that a random participant gets an inspiration.</potentialExtraOutcomeDesc>
<positivityIndex>2</positivityIndex>
</li>
</outcomeChances>
</RitualOutcomeEffectDef>
<RitualOutcomeEffectDef>
<defName>BestialGangbang</defName>
<description>Depending on ritual quality, participants will get between {MINMOOD} and {MAXMOOD} mood for {MOODDAYS} days.</description>
<workerClass>RitualOutcomeEffectWorker_Consumable</workerClass>
<extraPredictedOutcomeDescriptions>
<li>If the {0} is satisfying, one of the participants might gain an inspiration.</li>
</extraPredictedOutcomeDescriptions>
<comps>
<li Class="RitualOutcomeComp_RolePresentNotSubstituted">
<roleId>initiator</roleId>
<label>moral guide present</label>
<qualityOffset>0.10</qualityOffset>
</li>
<li Class="RitualOutcomeComp_ParticipantCount">
<label>participant count</label>
<curve>
<points>
<li>(1, -0.50)</li>
<li>(3, -0.30)</li>
<li>(5, -0.15)</li>
<li>(10, -0.10)</li>
</points>
</curve>
</li>
<li Class="RitualOutcomeComp_RitualTargetDefs">
<allowAltars>true</allowAltars>
<label>started at altar</label>
<qualityOffset>0.2</qualityOffset>
<expectedThingLabelTip>an altar</expectedThingLabelTip>
</li>
<li Class="RJWSexperience.Ideology.RitualOutcomeComp_HediffBased">
<label>breedee broken</label>
<qualityOffset>0.45</qualityOffset>
<hediffDef>FeelingBroken</hediffDef>
<minSeverity>0.3</minSeverity>
<roleId>victim</roleId>
</li>
<li Class="RJWSexperience.Ideology.RitualOutcomeComp_HediffBased">
<label>breedee extremly broken</label>
<qualityOffset>0.45</qualityOffset>
<hediffDef>FeelingBroken</hediffDef>
<minSeverity>0.5</minSeverity>
<roleId>victim</roleId>
</li>
<li Class="RJWSexperience.Ideology.RitualOutcomeComp_HediffBased">
<label>breedee completely broken</label>
<qualityOffset>0.8</qualityOffset>
<hediffDef>FeelingBroken</hediffDef>
<minSeverity>0.9</minSeverity>
<roleId>victim</roleId>
</li>
</comps>
<outcomeChances>
<li>
<label>Terrible</label>
<chance>0.05</chance>
<memory>TerribleGangbang</memory>
<description>The {0} was terrible! The speech was stuttering and incoherent, and the victim was botched - everyone was waiting for it to end.</description>
<positivityIndex>-2</positivityIndex>
</li>
<li>
<label>Boring</label>
<chance>0.10</chance>
<memory>BoringGangbang</memory>
<description>The {0} was boring. The speech was repetitive and the victim was noticeably flawed. It just didn't feel dignified.</description>
<positivityIndex>-1</positivityIndex>
</li>
<li>
<label>Satisfying</label>
<chance>0.65</chance>
<memory>FunGangbang</memory>
<description>The {0} was satisfying. The speech felt meaningful, and the victim was precise and dignified.</description>
<potentialExtraOutcomeDesc>There's a 5% chance that a random participant gets an inspiration.</potentialExtraOutcomeDesc>
<positivityIndex>1</positivityIndex>
</li>
<li>
<label>Spectacular</label>
<chance>0.2</chance>
<memory>UnforgettableGangbang</memory>
<description>The {0} was spectacular! The speech brought everyone to the edge of a frenzy and the victim was like succubus.</description>
<potentialExtraOutcomeDesc>There's a 10% chance that a random participant gets an inspiration.</potentialExtraOutcomeDesc>
<positivityIndex>2</positivityIndex>
</li>
</outcomeChances>
</RitualOutcomeEffectDef>
<RitualOutcomeEffectDef>
<defName>BestialGangbang_Consensual</defName>
<description>Depending on ritual quality, participants will get between {MINMOOD} and {MAXMOOD} mood for {MOODDAYS} days.</description>
<workerClass>RitualOutcomeEffectWorker_Consumable</workerClass>
<extraPredictedOutcomeDescriptions>
<li>If the {0} is satisfying, one of the participants might gain an inspiration.</li>
</extraPredictedOutcomeDescriptions>
<comps>
<li Class="RitualOutcomeComp_RolePresentNotSubstituted">
<roleId>initiator</roleId>
<label>moral guide present</label>
<qualityOffset>0.10</qualityOffset>
</li>
<li Class="RitualOutcomeComp_ParticipantCount">
<label>participant count</label>
<curve>
<points>
<li>(1, 0.20)</li>
<li>(3, 0.40)</li>
<li>(5, 0.65)</li>
<li>(10, 1.20)</li>
</points>
</curve>
</li>
<li Class="RitualOutcomeComp_RitualTargetDefs">
<allowAltars>true</allowAltars>
<label>started at altar</label>
<qualityOffset>0.2</qualityOffset>
<expectedThingLabelTip>an altar</expectedThingLabelTip>
</li>
</comps>
<outcomeChances>
<li>
<label>Terrible</label>
<chance>0.05</chance>
<memory>TerribleGangbang</memory>
<description>The {0} was terrible! The speech was stuttering and incoherent, and the victim was botched - everyone was waiting for it to end.</description>
<positivityIndex>-2</positivityIndex>
</li>
<li>
<label>Boring</label>
<chance>0.10</chance>
<memory>BoringGangbang</memory>
<description>The {0} was boring. The speech was repetitive and the victim was noticeably flawed. It just didn't feel dignified.</description>
<positivityIndex>-1</positivityIndex>
</li>
<li>
<label>Satisfying</label>
<chance>0.65</chance>
<memory>FunGangbang</memory>
<description>The {0} was satisfying. The speech felt meaningful, and the victim was precise and dignified.</description>
<potentialExtraOutcomeDesc>There's a 5% chance that a random participant gets an inspiration.</potentialExtraOutcomeDesc>
<positivityIndex>1</positivityIndex>
</li>
<li>
<label>Spectacular</label>
<chance>0.2</chance>
<memory>UnforgettableGangbang</memory>
<description>The {0} was spectacular! The speech brought everyone to the edge of a frenzy and the victim was like succubus.</description>
<potentialExtraOutcomeDesc>There's a 10% chance that a random participant gets an inspiration.</potentialExtraOutcomeDesc>
<positivityIndex>2</positivityIndex>
</li>
</outcomeChances>
</RitualOutcomeEffectDef>
<RitualOutcomeEffectDef>
<defName>DrugOrgy</defName>
<description>Depending on ritual quality, participants will get between {MINMOOD} and {MAXMOOD} mood for {MOODDAYS} days.</description>
<workerClass>RitualOutcomeEffectWorker_RemoveConsumableBuilding</workerClass>
<extraPredictedOutcomeDescriptions>
<li>If the {0} is satisfying, one of the participants might gain an inspiration.</li>
</extraPredictedOutcomeDescriptions>
<comps>
<li Class="RitualOutcomeComp_DestroyConsumableBuilding" />
<li Class="RitualOutcomeComp_ParticipantCount">
<label>participant count</label>
<curve>
<points>
<li>(1, -0.50)</li>
<li>(3, 0.0)</li>
<li>(5, 0.10)</li>
<li>(10, 0.30)</li>
</points>
</curve>
</li>
<li Class="RitualOutcomeComp_RoomStat">
<label>room impressiveness</label>
<statDef>Impressiveness</statDef>
<curve>
<points>
<li>0, 0</li>
<li>50, 0.1</li>
<li>120, 0.2</li>
</points>
</curve>
</li>
<li Class="RJWSexperience.Ideology.RitualOutcomeComp_NeedBased">
<label>statisfied participants</label>
<qualityOffset>0.7</qualityOffset>
<needDef>Sex</needDef>
<minAvgNeed>0.7</minAvgNeed>
</li>
</comps>
<outcomeChances>
<li>
<label>Terrible</label>
<chance>0.05</chance>
<memory>TerribleOrgy</memory>
<description>The {0} was terrible!</description>
<positivityIndex>-2</positivityIndex>
</li>
<li>
<label>Boring</label>
<chance>0.10</chance>
<memory>BoringOrgy</memory>
<description>The {0} was boring.</description>
<positivityIndex>-1</positivityIndex>
</li>
<li>
<label>Satisfying</label>
<chance>0.6</chance>
<memory>FunOrgy</memory>
<description>The {0} was satisfying.</description>
<potentialExtraOutcomeDesc>There's a 5% chance that a random participant gets an inspiration.</potentialExtraOutcomeDesc>
<positivityIndex>1</positivityIndex>
</li>
<li>
<label>Spectacular</label>
<chance>0.25</chance>
<memory>UnforgettableOrgy</memory>
<description>The {0} was spectacular!</description>
<potentialExtraOutcomeDesc>There's a 10% chance that a random participant gets an inspiration.</potentialExtraOutcomeDesc>
<positivityIndex>2</positivityIndex>
</li>
</outcomeChances>
</RitualOutcomeEffectDef>
</Defs>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<RitualObligationTargetFilterDef>
<defName>RitualSpotOrAltar_Gangbang</defName>
<workerClass>RitualObligationTargetWorker_AnyRitualSpotOrAltar_Scarification</workerClass>
</RitualObligationTargetFilterDef>
<RitualObligationTargetFilterDef>
<defName>DrugOrgy</defName>
<workerClass>RitualObligationTargetWorker_ConsumableBuilding</workerClass>
<thingDefs>
<li>Burnbong_Aphrodisiac</li>
</thingDefs>
</RitualObligationTargetFilterDef>
</Defs>

View File

@ -0,0 +1,134 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<ThingDef ParentName="IdeoSmokerBase">
<defName>Burnbong_Aphrodisiac</defName>
<label>lustbong</label>
<description>A wood structure packed with humpshroom. It can be ignited during a ritual and produce a huge amount of humpshroom smoke for a few hours, after which it is destroyed.</description>
<drawerType>RealtimeOnly</drawerType>
<graphicData>
<graphicClass>Graphic_Single</graphicClass>
<texPath>Things/Building/Misc/Burnbong/Burnbong</texPath>
<drawSize>(1.2,1.2)</drawSize>
<shadowData>
<volume>(0.92, 1 ,0.92)</volume>
</shadowData>
</graphicData>
<size>(1,1)</size>
<costList>
<WoodLog>30</WoodLog>
<HumpShroom>30</HumpShroom>
</costList>
<killedLeavings>
<HumpShroom>30</HumpShroom>
</killedLeavings>
<leaveResourcesWhenKilled>false</leaveResourcesWhenKilled>
<statBases>
<MaxHitPoints>50</MaxHitPoints>
<WorkToBuild>10000</WorkToBuild>
<Mass>25</Mass>
</statBases>
<comps>
<li Class="CompProperties_RitualTargetEffecterSpawner">
<effecter>BurnbongSmoke</effecter>
</li>
<li Class="CompProperties_FireOverlayRitual">
<fireSize>0.5</fireSize>
<offset>(0, 0, 0.42)</offset>
</li>
<li Class="CompProperties_RitualHediffGiverInRoom">
<hediff>HumpShroomEffect</hediff>
<resetLastRecreationalDrugTick>true</resetLastRecreationalDrugTick>
<minRadius>10</minRadius>
<severity>0.01</severity>
</li>
</comps>
</ThingDef>
<ThingDef ParentName="BuildingBase">
<defName>Autobong_Aphrodisiac</defName>
<label>estro-bong</label>
<description>An automatic humpshroom-burning device which generates an estro-smoke cloud around itself. Anyone in the cloud will become horny over time.</description>
<category>Building</category>
<graphicData>
<texPath>Things/Building/Misc/Autobong/Autobong</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>(2,2)</drawSize>
<shaderType>CutoutComplex</shaderType>
</graphicData>
<uiIconPath>Things/Building/Misc/Autobong/Autobong</uiIconPath>
<altitudeLayer>Building</altitudeLayer>
<passability>PassThroughOnly</passability>
<pathCost>42</pathCost>
<tickerType>Normal</tickerType>
<drawerType>RealtimeOnly</drawerType>
<fillPercent>0.20</fillPercent>
<canGenerateDefaultDesignator>false</canGenerateDefaultDesignator>
<size>(2,2)</size>
<statBases>
<MaxHitPoints>80</MaxHitPoints>
<WorkToBuild>800</WorkToBuild>
</statBases>
<selectable>true</selectable>
<costList>
<HumpShroom>10</HumpShroom>
<ComponentIndustrial>3</ComponentIndustrial>
</costList>
<stuffCategories>
<li>Metallic</li>
<li>Woody</li>
</stuffCategories>
<costStuffCount>100</costStuffCount>
<leaveResourcesWhenKilled>true</leaveResourcesWhenKilled>
<researchPrerequisites>
<li>MicroelectronicsBasics</li>
</researchPrerequisites>
<comps>
<li Class="CompProperties_Refuelable">
<fuelConsumptionRate>0.35</fuelConsumptionRate>
<fuelCapacity>10.0</fuelCapacity>
<fuelFilter>
<thingDefs>
<li>HumpShroom</li>
</thingDefs>
</fuelFilter>
<initialFuelPercent>1</initialFuelPercent>
<showAllowAutoRefuelToggle>true</showAllowAutoRefuelToggle>
<consumeFuelOnlyWhenPowered>true</consumeFuelOnlyWhenPowered>
</li>
<li Class="CompProperties_Glower">
<glowRadius>10</glowRadius>
<glowColor>(252,187,113,0)</glowColor>
</li>
<li>
<compClass>CompGatherSpot</compClass>
</li>
<li Class="CompProperties_Power">
<compClass>CompPowerTrader</compClass>
<basePowerConsumption>150</basePowerConsumption>
<shortCircuitInRain>true</shortCircuitInRain>
</li>
<li Class="CompProperties_Flickable"/>
<li Class="CompProperties_GiveHediffSeverity">
<hediff>HumpShroomEffect</hediff>
<range>4.9</range>
<severityPerSecond>0.005</severityPerSecond>
<drugExposure>true</drugExposure>
</li>
<li Class="CompProperties_SmokeCloudMaker">
<sourceStreamEffect>BurnbongSmoke</sourceStreamEffect>
<cloudRadius>4.9</cloudRadius>
<fleckScale>4</fleckScale>
<cloudFleck>AutobongSmoke</cloudFleck>
<fleckSpawnMTB>25</fleckSpawnMTB>
</li>
</comps>
<designationCategory>Misc</designationCategory>
<drawPlaceWorkersWhileSelected>true</drawPlaceWorkersWhileSelected>
<placeWorkers>
<li>PlaceWorker_SmokeCloudMaker</li>
</placeWorkers>
</ThingDef>
</Defs>

View File

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<ThoughtDef>
<defName>TerribleGangbang</defName>
<thoughtClass>Thought_AttendedRitual</thoughtClass>
<durationDays>6</durationDays>
<stackLimit>3</stackLimit>
<stages>
<li>
<label>terrible gangbang</label>
<description>That gangbang was terrible. ugh.</description>
<baseMoodEffect>-3</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>BoringGangbang</defName>
<thoughtClass>Thought_AttendedRitual</thoughtClass>
<durationDays>6</durationDays>
<stackLimit>3</stackLimit>
<stages>
<li>
<label>boring gangbang</label>
<description>That gangbang was not good. Wish I never went.</description>
<baseMoodEffect>-1</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>FunGangbang</defName>
<thoughtClass>Thought_AttendedRitual</thoughtClass>
<durationDays>6</durationDays>
<stackLimit>3</stackLimit>
<stages>
<li>
<label>fun gangbang</label>
<description>That was a fun gangbang. It really satisfied me.</description>
<baseMoodEffect>8</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>UnforgettableGangbang</defName>
<thoughtClass>Thought_AttendedRitual</thoughtClass>
<durationDays>6</durationDays>
<stackLimit>3</stackLimit>
<stages>
<li>
<label>unforgettable gangbang</label>
<description>That gangbang was awesome! Everything was perfect.</description>
<baseMoodEffect>16</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>TerribleOrgy</defName>
<thoughtClass>Thought_AttendedRitual</thoughtClass>
<durationDays>6</durationDays>
<stackLimit>3</stackLimit>
<stages>
<li>
<label>terrible orgy</label>
<description>That orgy was terrible. ugh.</description>
<baseMoodEffect>-3</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>BoringOrgy</defName>
<thoughtClass>Thought_AttendedRitual</thoughtClass>
<durationDays>6</durationDays>
<stackLimit>3</stackLimit>
<stages>
<li>
<label>boring orgy</label>
<description>That orgy was not good. Wish I never went.</description>
<baseMoodEffect>-1</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>FunOrgy</defName>
<thoughtClass>Thought_AttendedRitual</thoughtClass>
<durationDays>6</durationDays>
<stackLimit>3</stackLimit>
<stages>
<li>
<label>fun orgy</label>
<description>That was a fun orgy. It really satisfied me.</description>
<baseMoodEffect>8</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
<ThoughtDef>
<defName>UnforgettableOrgy</defName>
<thoughtClass>Thought_AttendedRitual</thoughtClass>
<durationDays>6</durationDays>
<stackLimit>3</stackLimit>
<stages>
<li>
<label>unforgettable orgy</label>
<description>That orgy was awesome! Everything was perfect.</description>
<baseMoodEffect>16</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
</Defs>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Masturbation_AutoBreastjob" or defName="Masturbation_AutoFellatio" or defName="Masturbation_Breastjob" or defName="Masturbation_HandjobA" or defName="Masturbation_HandjobP" or defName="Masturbation_HandjobV"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_Masturbated</li>
</pawnEvents>
</li>
</value>
</Operation>
</Patch>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Necro_Anal" or defName="Necro_DoublePenetration" or defName="Necro_DoublePenetrationM" or defName="Necro_Vaginal"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_SexWithCorpse</li>
</pawnEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Necro_Reverse_Anal" or defName="Necro_Reverse_DoublePenetration" or defName="Necro_Reverse_DoublePenetrationM" or defName="Necro_Reverse_Vaginal"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_SexWithCorpse</li>
</pawnEvents>
</li>
</value>
</Operation>
</Patch>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Rape_Vaginal"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_VaginalSex</li>
<li>RSI_Raped</li>
</pawnEvents>
<partnerEvents>
<!--<li>RSI_VaginalSex</li>-->
<li>RSI_WasRaped</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Rape_Anal" or defName="Rape_Rimming"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_AnalSex</li>
<li>RSI_Raped</li>
</pawnEvents>
<partnerEvents>
<!--<li>RSI_AnalSex</li>-->
<li>RSI_WasRaped</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Rape_Beakjob" or defName="Rape_Cunnilingus" or defName="Rape_Fellatio" or defName="Rape_Oral"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_OralSex</li>
<li>RSI_Raped</li>
</pawnEvents>
<partnerEvents>
<!--<li>RSI_OralSex</li>-->
<li>RSI_WasRaped</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Rape_Breastjob" or defName="Rape_Fingering" or defName="Rape_Footjob" or defName="Rape_Handjob"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_MiscSex</li>
<li>RSI_Raped</li>
</pawnEvents>
<partnerEvents>
<!--<li>RSI_MiscSex</li>-->
<li>RSI_WasRaped</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Rape_DoublePenetration" or defName="Rape_DoublePenetrationM" or defName="Rape_Fisting" or defName="Rape_Scissoring"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_PromiscuousSex</li>
<li>RSI_Raped</li>
</pawnEvents>
<partnerEvents>
<!--<li>RSI_PromiscuousSex</li>-->
<li>RSI_WasRaped</li>
</partnerEvents>
</li>
</value>
</Operation>
</Patch>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Rape_Reverse_Vaginal"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_VaginalSex</li>
<li>RSI_Raped</li>
</pawnEvents>
<partnerEvents>
<!--<li>RSI_VaginalSex</li>-->
<li>RSI_WasRaped</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Rape_Reverse_Anal" or defName="Rape_Reverse_Rimming"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_AnalSex</li>
<li>RSI_Raped</li>
</pawnEvents>
<partnerEvents>
<!--<li>RSI_AnalSex</li>-->
<li>RSI_WasRaped</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Rape_Reverse_Beakjob" or defName="Rape_Reverse_Cunnilingus" or defName="Rape_Reverse_Fellatio"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_OralSex</li>
<li>RSI_Raped</li>
</pawnEvents>
<partnerEvents>
<!--<li>RSI_OralSex</li>-->
<li>RSI_WasRaped</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Rape_Reverse_Breastjob" or defName="Rape_Reverse_Fingering" or defName="Rape_Reverse_Footjob" or defName="Rape_Reverse_Handjob"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_MiscSex</li>
<li>RSI_Raped</li>
</pawnEvents>
<partnerEvents>
<!--<li>RSI_MiscSex</li>-->
<li>RSI_WasRaped</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Rape_Reverse_DoublePenetration" or defName="Rape_Reverse_DoublePenetrationM" or defName="Rape_Reverse_Fisting" or defName="Rape_Reverse_Scissoring"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_PromiscuousSex</li>
<li>RSI_Raped</li>
</pawnEvents>
<partnerEvents>
<!--<li>RSI_PromiscuousSex</li>-->
<li>RSI_WasRaped</li>
</partnerEvents>
</li>
</value>
</Operation>
</Patch>

View File

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Sex_Vaginal"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_VaginalSex</li>
</pawnEvents>
<partnerEvents>
<li>RSI_VaginalSex</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Sex_Anal" or defName="Sex_Rimming"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_AnalSex</li>
</pawnEvents>
<partnerEvents>
<li>RSI_AnalSex</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Sex_Beakjob" or defName="Sex_Cunnilingus" or defName="Sex_Fellatio" or defName="Sex_Makeout" or defName="Sex_Sixtynine"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_OralSex</li>
</pawnEvents>
<partnerEvents>
<li>RSI_OralSex</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Sex_Breastjob" or defName="Sex_Fingering" or defName="Sex_Footjob" or defName="Sex_Handjob" or defName="Sex_MutualHandholding" or defName="Sex_MutualMasturbation" or defName="Sex_MutualTailholding"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_MiscSex</li>
</pawnEvents>
<partnerEvents>
<li>RSI_MiscSex</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Sex_DoublePenetration" or defName="Sex_DoublePenetrationM" or defName="Sex_Fisting" or defName="Sex_Scissoring"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_PromiscuousSex</li>
</pawnEvents>
<partnerEvents>
<li>RSI_PromiscuousSex</li>
</partnerEvents>
</li>
</value>
</Operation>
</Patch>

View File

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Sex_Reverse_Vaginal"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_VaginalSex</li>
</pawnEvents>
<partnerEvents>
<li>RSI_VaginalSex</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Sex_Reverse_Anal" or defName="Sex_Reverse_Rimming"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_AnalSex</li>
</pawnEvents>
<partnerEvents>
<li>RSI_AnalSex</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Sex_Reverse_Beakjob" or defName="Sex_Reverse_Cunnilingus" or defName="Sex_Reverse_Fellatio"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_OralSex</li>
</pawnEvents>
<partnerEvents>
<li>RSI_OralSex</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Sex_Reverse_Breastjob" or defName="Sex_Reverse_Fingering" or defName="Sex_Reverse_Footjob" or defName="Sex_Reverse_Handjob"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_MiscSex</li>
</pawnEvents>
<partnerEvents>
<li>RSI_MiscSex</li>
</partnerEvents>
</li>
</value>
</Operation>
<Operation Class="PatchOperationAddModExtension">
<xpath>/Defs/InteractionDef[defName="Sex_Reverse_DoublePenetration" or defName="Sex_Reverse_DoublePenetrationM" or defName="Sex_Reverse_Fisting"]</xpath>
<value>
<li Class="RJWSexperience.Ideology.InteractionDefExtension_HistoryEvents">
<pawnEvents>
<li>RSI_PromiscuousSex</li>
</pawnEvents>
<partnerEvents>
<li>RSI_PromiscuousSex</li>
</partnerEvents>
</li>
</value>
</Operation>
</Patch>

47
1.4/Patches/RJW_Drugs.xml Normal file
View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationReplace">
<xpath>Defs/HediffDef[defName="HumpShroomEffect"]/stages</xpath>
<value>
<stages>
<li>
<label>lingering</label>
<statOffsets>
<SexFrequency>1.25</SexFrequency>
<SexSatisfaction>0.25</SexSatisfaction>
</statOffsets>
</li>
<li>
<minSeverity>0.3</minSeverity>
<label>mild</label>
<restFallFactor>1.1</restFallFactor>
<statOffsets>
<SexFrequency>2</SexFrequency>
<SexSatisfaction>0.5</SexSatisfaction>
</statOffsets>
</li>
<li>
<minSeverity>0.6</minSeverity>
<label>moderate</label>
<restFallFactor>1.33</restFallFactor>
<statOffsets>
<SexFrequency>3</SexFrequency>
<SexSatisfaction>0.75</SexSatisfaction>
</statOffsets>
</li>
<li>
<minSeverity>0.9</minSeverity>
<label>high</label>
<restFallFactor>1.33</restFallFactor>
<statOffsets>
<SexFrequency>5</SexFrequency>
<SexSatisfaction>1.5</SexSatisfaction>
</statOffsets>
</li>
</stages>
</value>
</Operation>
</Patch>

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationAdd">
<xpath>Defs/PreceptDef[defName="Corpses_DontCare"]/requiredMemes</xpath>
<value>
<li>Necrophile</li>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/PreceptDef[defName="Corpses_DontCare"]/associatedMemes</xpath>
<value>
<li>Necrophile</li>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/PreceptDef[defName="Lovin_FreeApproved"]</xpath>
<value>
<statOffsets>
<SexFrequency>0.5</SexFrequency>
<SexAbility MayRequire="rjw.sexperience">0.25</SexAbility>
</statOffsets>
</value>
</Operation>
</Patch>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationAdd">
<xpath>Defs/StatDef[defName="Vulnerability"]/parts</xpath>
<value>
<li Class="RJWSexperience.Ideology.StatPart_GenderPrimacy">
<modifier>0.5</modifier>
</li>
</value>
</Operation>
</Patch>

View File

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="GotBredByAnimal"]</xpath>
<value>
<nullifyingPrecepts>
<li>Bestiality_OnlyVenerated</li>
<li>Bestiality_BondOnly</li>
<li>Bestiality_Honorable</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="GotAnalBredByAnimal"]</xpath>
<value>
<nullifyingPrecepts>
<li>Bestiality_OnlyVenerated</li>
<li>Bestiality_BondOnly</li>
<li>Bestiality_Honorable</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="AllowedAnimalToBreed"]</xpath>
<value>
<nullifyingPrecepts>
<li>Bestiality_OnlyVenerated</li>
<li>Bestiality_BondOnly</li>
<li>Bestiality_Honorable</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="GotLickedByAnimal"]</xpath>
<value>
<nullifyingPrecepts>
<li>Bestiality_OnlyVenerated</li>
<li>Bestiality_BondOnly</li>
<li>Bestiality_Honorable</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="GotGropedByAnimal"]</xpath>
<value>
<nullifyingPrecepts>
<li>Bestiality_OnlyVenerated</li>
<li>Bestiality_BondOnly</li>
<li>Bestiality_Honorable</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="AllowedAnimalToGrope"]</xpath>
<value>
<nullifyingPrecepts>
<li>Bestiality_OnlyVenerated</li>
<li>Bestiality_BondOnly</li>
<li>Bestiality_Honorable</li>
<li>Bestiality_Acceptable</li>
</nullifyingPrecepts>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="StoleSomeLovin"]</xpath>
<value>
<nullifyingPrecepts>
<li>Rape_Honorable</li>
</nullifyingPrecepts>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="Incestuous"]</xpath>
<value>
<nullifyingPrecepts>
<li>Incestuos_Free</li>
<li>Incestuos_IncestOnly</li>
</nullifyingPrecepts>
</value>
</Operation>
<Operation Class="PatchOperationConditional">
<xpath>Defs/ThoughtDef[defName="GotRaped" or defName="GotAnalRaped" or defName="GotAnalRapedByFemale" or defName="GotRapedUnconscious" or defName="HateMyRapist" or defName="AllowedMeToGetRaped"]/nullifyingPrecepts</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="GotRaped" or defName="GotAnalRaped" or defName="GotAnalRapedByFemale" or defName="GotRapedUnconscious" or defName="HateMyRapist" or defName="AllowedMeToGetRaped"]</xpath>
<value>
<nullifyingPrecepts>
<li>Submissive_Male</li>
<li>Submissive_Female</li>
</nullifyingPrecepts>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="GotRaped" or defName="GotAnalRaped" or defName="GotAnalRapedByFemale" or defName="GotRapedUnconscious" or defName="HateMyRapist" or defName="AllowedMeToGetRaped"]/nullifyingPrecepts</xpath>
<value>
<li>Submissive_Male</li>
<li>Submissive_Female</li>
</value>
</match>
</Operation>
</Patch>

View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationConditional">
<xpath>Defs/ThoughtDef[defName="MyKinDied" or defName="MyCousinDied" or defName="MyGrandparentDied" or defName="MyUncleDied" or defName="MyAuntDied" or defName="MyHalfSiblingDied" or defName="MyNephewDied" or defName="MyNieceDied" or defName="MyHalfSiblingDied" or defName="MyHalfSiblingDied" or defName="MyHalfSiblingDied"]/nullifyingPrecepts</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="MyKinDied" or defName="MyCousinDied" or defName="MyGrandparentDied" or defName="MyUncleDied" or defName="MyAuntDied" or defName="MyHalfSiblingDied" or defName="MyNephewDied" or defName="MyNieceDied" or defName="MyHalfSiblingDied" or defName="MyHalfSiblingDied" or defName="MyHalfSiblingDied"]</xpath>
<value>
<nullifyingPrecepts>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
<li>SocialAffection_Small</li>
</nullifyingPrecepts>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="MyKinDied" or defName="MyCousinDied" or defName="MyGrandparentDied" or defName="MyUncleDied" or defName="MyAuntDied" or defName="MyHalfSiblingDied" or defName="MyNephewDied" or defName="MyNieceDied" or defName="MyHalfSiblingDied" or defName="MyHalfSiblingDied" or defName="MyHalfSiblingDied"]/nullifyingPrecepts</xpath>
<value>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
<li>SocialAffection_Small</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationConditional">
<xpath>Defs/ThoughtDef[defName="MyMotherDied" or defName="MyFatherDied" or defName="MyGrandchildDied" or defName="MySisterDied" or defName="MyBrotherDied" or defName="MyDaughterDied" or defName="MySonDied" or defName="WitnessedDeathFamily" or defName="MyPupDied" or defName="MyPupDiedFemale" or defName="KilledMyPup" or defName="KilledMyPupFemale" or defName="SoldMyPup" ]/nullifyingPrecepts</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="MyMotherDied" or defName="MyFatherDied" or defName="MyGrandchildDied" or defName="MySisterDied" or defName="MyBrotherDied" or defName="MyDaughterDied" or defName="MySonDied" or defName="WitnessedDeathFamily" or defName="MyPupDied" or defName="MyPupDiedFemale" or defName="KilledMyPup" or defName="KilledMyPupFemale" or defName="SoldMyPup"]</xpath>
<value>
<nullifyingPrecepts>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
</nullifyingPrecepts>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="MyMotherDied" or defName="MyFatherDied" or defName="MyGrandchildDied" or defName="MySisterDied" or defName="MyBrotherDied" or defName="MyDaughterDied" or defName="MySonDied" or defName="WitnessedDeathFamily" or defName="MyPupDied" or defName="MyPupDiedFemale" or defName="KilledMyPup" or defName="KilledMyPupFemale" or defName="SoldMyPup"]/nullifyingPrecepts</xpath>
<value>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationConditional">
<xpath>Defs/ThoughtDef[defName="KnowGuestExecuted" or defName="KnowColonistExecuted" or defName="KnowPrisonerDiedInnocent" or defName="KnowColonistDied" or defName="PawnWithGoodOpinionDied" or defName="PawnWithBadOpinionDied" or defName="WitnessedDeathAlly" or defName="WitnessedDeathNonAlly" or defName="ColonistBanishedToDie" or defName="PrisonerBanishedToDie" or defName="ColonistBanishedToDie" or defName="ColonistLeftUnburied"]/nullifyingPrecepts</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="KnowGuestExecuted" or defName="KnowColonistExecuted" or defName="KnowPrisonerDiedInnocent" or defName="KnowColonistDied" or defName="PawnWithGoodOpinionDied" or defName="PawnWithBadOpinionDied" or defName="WitnessedDeathAlly" or defName="WitnessedDeathNonAlly" or defName="ColonistBanishedToDie" or defName="PrisonerBanishedToDie" or defName="ColonistBanishedToDie" or defName="ColonistLeftUnburied"]</xpath>
<value>
<nullifyingPrecepts>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_OnlyFamily</li>
</nullifyingPrecepts>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="KnowGuestExecuted" or defName="KnowColonistExecuted" or defName="KnowPrisonerDiedInnocent" or defName="KnowColonistDied" or defName="PawnWithGoodOpinionDied" or defName="PawnWithBadOpinionDied" or defName="WitnessedDeathAlly" or defName="WitnessedDeathNonAlly" or defName="ColonistBanishedToDie" or defName="PrisonerBanishedToDie" or defName="ColonistBanishedToDie" or defName="ColonistLeftUnburied"]/nullifyingPrecepts</xpath>
<value>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_OnlyFamily</li>
</value>
</match>
</Operation>
</Patch>

View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationConditional">
<xpath>Defs/ThoughtDef[defName="MyKinLost" or defName="MyCousinLost" or defName="MyGrandparentLost" or defName="MyUncleLost" or defName="MyAuntLost" or defName="MyHalfSiblingLost" or defName="MyNephewLost" or defName="MyNieceLost" or defName="MyHalfSiblingLost" or defName="MyHalfSiblingLost" or defName="MyHalfSiblingLost"]/nullifyingPrecepts</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="MyKinLost" or defName="MyCousinLost" or defName="MyGrandparentLost" or defName="MyUncleLost" or defName="MyAuntLost" or defName="MyHalfSiblingLost" or defName="MyNephewLost" or defName="MyNieceLost" or defName="MyHalfSiblingLost" or defName="MyHalfSiblingLost" or defName="MyHalfSiblingLost"]</xpath>
<value>
<nullifyingPrecepts>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
<li>SocialAffection_Small</li>
</nullifyingPrecepts>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="MyKinLost" or defName="MyCousinLost" or defName="MyGrandparentLost" or defName="MyUncleLost" or defName="MyAuntLost" or defName="MyHalfSiblingLost" or defName="MyNephewLost" or defName="MyNieceLost" or defName="MyHalfSiblingLost" or defName="MyHalfSiblingLost" or defName="MyHalfSiblingLost"]/nullifyingPrecepts</xpath>
<value>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
<li>SocialAffection_Small</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationConditional">
<xpath>Defs/ThoughtDef[defName="MyMotherLost" or defName="MyFatherLost" or defName="MyGrandchildLost" or defName="MySisterLost" or defName="MyBrotherLost" or defName="MyDaughterLost" or defName="MySonLost"]/nullifyingPrecepts</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="MyMotherLost" or defName="MyFatherLost" or defName="MyGrandchildLost" or defName="MySisterLost" or defName="MyBrotherLost" or defName="MyDaughterLost" or defName="MySonLost"]</xpath>
<value>
<nullifyingPrecepts>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
</nullifyingPrecepts>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="MyMotherLost" or defName="MyFatherLost" or defName="MyGrandchildLost" or defName="MySisterLost" or defName="MyBrotherLost" or defName="MyDaughterLost" or defName="MySonLost"]/nullifyingPrecepts</xpath>
<value>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationConditional">
<xpath>Defs/ThoughtDef[defName="ColonistLost" or defName="PawnWithGoodOpinionLost" or defName="PawnWithBadOpinionLost"]/nullifyingPrecepts</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="ColonistLost" or defName="PawnWithGoodOpinionLost" or defName="PawnWithBadOpinionLost"]</xpath>
<value>
<nullifyingPrecepts>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_OnlyFamily</li>
</nullifyingPrecepts>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="ColonistLost" or defName="PawnWithGoodOpinionLost" or defName="PawnWithBadOpinionLost"]/nullifyingPrecepts</xpath>
<value>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_OnlyFamily</li>
</value>
</match>
</Operation>
</Patch>

View File

@ -4,6 +4,7 @@
<author>aamevarashi</author>
<supportedVersions>
<li>1.3</li>
<li>1.4</li>
</supportedVersions>
<modDependencies>
<li>
@ -33,12 +34,13 @@ This is a submod for RJW that adds:
Ideology content:
- Memes: lewd, rapist, zoophile and necrophile memes
- Rituals: consensual gangbang, rape gangbang, consensual animal gangbang, rape animal gangbang and drug orgy
- Precepts: baby faction, bestiality, incest, necrophilia, rape, allowed sex type, social affection, submissive gender, virginity
- Precepts: baby faction, bestiality, incest, necrophilia, rape, allowed sex type, social affection, submissive gender, virginity, pregnancy, sex proselyzing and size matters
- HumpShroom bong and HumpShroom Autobong
Credits:
moreorganstodump Original Author
c0ffee RJW 4.9.0 update
Hawkeye32 Bound Only bestiality precept]]>
Hawkeye32 Bound Only bestiality precept
Twonki Pregnancy, Sex Proselyzing and Size Matters precepts]]>
</description>
</ModMetaData>

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Manifest>
<identifier>RJWSexperienceIdeology</identifier>
<version>1.0.0.3</version>
<version>1.4.1.0</version>
<dependencies>
<li>RimJobWorld >= 4.9.5.3</li>
<li>RimJobWorld >= 5.3.0</li>
</dependencies>
<incompatibleWith />
<loadAfter>

View File

@ -1,3 +1,31 @@
## Version 1.4.1.0
* Changed to a new versioning system. Now the first two digits are a Rimworld version, followed by the major and minor version of the mod.
* Fixed: Pawns raping despite Rape-Abhorrent precept
## Version 1.0.2.1
* Fixed SecondaryRomanceChanceFactor patch
## Version 1.0.2.0
* Removed Incestuos_IncestOnly conflict with Zoophile
* Patched manual romance to respect incestuous precepts
* Patched SecondaryRomanceChanceFactor for incest precept
* Added settings to disable ether of patches if needed
* Changed Incestuos_IncestOnly would_fuck multiplier for blood related pawns: 2.0 -> 1.0
* Changed Incestuos_IncestOnly would_fuck multiplier for non-blood related pawns: 1.0 -> 0.1
* Removed "not obedient" social thought for raping a slave
* Bestiality_Acceptable now nullifies RJW bestiality thoughts
* Fixed swapped baseMoodEffect of holy and elevated pregnancy precepts
## Version 1.0.1.2
* Removed 100% certainty spam for sex proselyzing
* Maybe removed sex proselyzing error with bestiality
## Version 1.0.1.1
* Fixed Ideology overwriting Sexperience's mod settings label
* Fixed submissive gender can't be marked for comfort
* Fixed new precepts adding thoughts to children
* Fixed Sexual Proselyzing precept
* Fixed biotech pregnancy not counting for pregnancy precepts
## Version 1.0.1.0
* Rimworld 1.4
### by Twonki
* Added Pregnancy, Sex Proselyzing and Size Matters precepts
## Version 1.0.0.3
* Fixed error in *_Gendered precept comps
## Version 1.0.0.2

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
<RS_Mod_Title>RJW 性经验</RS_Mod_Title>
<RSI_Mod_Title>RJW 性经验</RSI_Mod_Title>
<MemeStatFactor>迷因</MemeStatFactor>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
<RS_Mod_Title>RJW Sexperience Ideology</RS_Mod_Title>
<RSI_Mod_Title>RJW Sexperience Ideology</RSI_Mod_Title>
<MemeStatFactor>Meme</MemeStatFactor>
<RSVictimCondition>slave, prisoner, submissive gender only</RSVictimCondition>
@ -9,4 +9,16 @@
<RSNotAnimal>not animal</RSNotAnimal>
<RSShouldCanFuck>capable of sex is required</RSShouldCanFuck>
<RSI_PatchRomanceChanceFactor>Enable romance patch for incest precepts*</RSI_PatchRomanceChanceFactor>
<RSI_PatchRomanceChanceFactorTip>Patch for incest precepts to affect RomanceChanceFactor. May conflict with romance mods./n/n* Requires a game restart to apply changes</RSI_PatchRomanceChanceFactorTip>
<RSI_PatchIncestuousManualRomance>Enable manual romance patch for incest precepts*</RSI_PatchIncestuousManualRomance>
<RSI_PatchIncestuousManualRomanceTip>Patch for incest precepts to affect manual romance options./n/n* Requires a game restart to apply changes</RSI_PatchIncestuousManualRomanceTip>
<RSI_PreceptTipModifyBestialityMtb>Time between bestiality attempts x{0}</RSI_PreceptTipModifyBestialityMtb>
<RSI_PreceptTipModifyFappinMtb>Time between masturbation attempts x{0}</RSI_PreceptTipModifyFappinMtb>
<RSI_PreceptTipModifyNecroMtb>Time between necrophilia attempts x{0}</RSI_PreceptTipModifyNecroMtb>
<RSI_PreceptTipModifyRapeCPMtb>Time between rape attempts x{0}</RSI_PreceptTipModifyRapeCPMtb>
<!-- Rewrite vanilla key -->
<!-- <CantRomanceTargetIncest>forbidden by ideology</CantRomanceTargetIncest> -->
</LanguageData>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
<RS_Mod_Title>RJW Sexperience Ideology</RS_Mod_Title>
<RSI_Mod_Title>RJW Sexperience Ideology</RSI_Mod_Title>
<MemeStatFactor>문화 요소</MemeStatFactor>
<RSVictimCondition>노예, 죄수, 순종적인 성별만 가능합니다.</RSVictimCondition>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
<RS_Mod_Title>RJW Sexperience</RS_Mod_Title>
<RSI_Mod_Title>RJW Sexperience</RSI_Mod_Title>
<MemeStatFactor>Принцип идеологии</MemeStatFactor>
<RSVictimCondition>раб, заключенный, подчиненный только по полу</RSVictimCondition>

11
LoadFolders.xml Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<loadFolders>
<v1.3>
<li>/</li>
<li>1.3</li>
</v1.3>
<v1.4>
<li>/</li>
<li>1.4</li>
</v1.4>
</loadFolders>

44
README.md Normal file
View File

@ -0,0 +1,44 @@
## RJW Sexperience Ideology
This is a submod for the RJW mod for RimWorld. Does not require "base" RJW Sexperience.
This project was started by the motd1233 on the Loverslab/GitHub as a part of RJW Sexperience mod. I took over the mod some time after they stopped updating. Ideology content was moved to a separate mod shortly after.
### Features
This mod adds:
- Memes
- Lewd
- Rapist
- Zoophile
- Necrophile
- Rituals
- Consensual gangbang
- Rape gangbang
- Consensual animal gangbang
- Rape animal gangbang
- Drug orgy
- Precepts
- Baby faction
- Bestiality
- Incest
- Necrophilia
- Rape
- Allowed sex type
- Social affection
- Submissive gender
- Virginity
- Pregnancy
- Sex proselyzing
- Size matters
- Buildings
- HumpShroom bong
- HumpShroom Autobong
### Contacts / Feedback
The only consistent way to get in touch with me is the RJW Discord server #sexperience-amevarashi. You can find the link in the [RJW Loverslab Thread](https://www.loverslab.com/topic/110270-mod-rimjobworld/). Loverslab is no good because I check it even less than the repositories.
Please, ping me in the RJW Discord if you rased the issue here.
### Contributing
To be consistent with RJW, please use TABS not SPACES.
Please, ping me in the RJW Discord after creating a merge request.

View File

@ -0,0 +1,9 @@
namespace RJWSexperience.Ideology
{
public enum BloodRelationDegree
{
CloseRelative,
FarRelative,
NotRelated
}
}

View File

@ -1,20 +1,37 @@
using rjw;
using RJWSexperience.Ideology.HistoryEvents;
using RJWSexperience.Ideology.Patches;
using System.Collections.Generic;
using System.Linq;
using Verse;
namespace RJWSexperience.Ideology
{
internal class DebugAction
internal static class DebugAction
{
[DebugAction("RJW Sexperience Ideology", "Test marriage event", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.PlayingOnMap)]
private static void GenerateMarriageEvent(Pawn p)
public static void GenerateMarriageEvent(Pawn p)
{
Pawn hero = p.Map.PlayerPawnsForStoryteller.First(x => x.IsDesignatedHero());
if (hero == null)
return;
RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(hero, p);
RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(p, hero);
RsiDefOf.HistoryEvent.RSI_NonIncestuosMarriage.RecordEventWithPartner(hero, p);
RsiDefOf.HistoryEvent.RSI_NonIncestuosMarriage.RecordEventWithPartner(p, hero);
}
[DebugAction("RJW Sexperience Ideology", "Manual romance check", false, true, actionType = DebugActionType.Action, allowedGameStates = AllowedGameStates.PlayingOnMap)]
public static void DisplayDebugTable()
{
IEnumerable<Pawn> pawns = Find.CurrentMap.mapPawns.AllPawnsSpawned.Where(pawn => pawn.IsColonist);
IEnumerable<TableDataGetter<Pawn>> columns = pawns
.Select(pawn => new TableDataGetter<Pawn>(pawn.Name.ToStringShort, (Pawn p) => Rimworld_Patch_IncestuousManualRomance.RsiIncestuous(p, pawn)));
var name = new TableDataGetter<Pawn>("Name", (Pawn pawn) => pawn.Name.ToStringShort);
TableDataGetter<Pawn>[] getters = (new List<TableDataGetter<Pawn>>() { name }).Concat(columns).ToArray();
DebugTables.MakeTablesDialog(pawns, getters);
}
}
}

View File

@ -3,31 +3,33 @@ using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Verse;
namespace RJWSexperience.Ideology
namespace RJWSexperience.Ideology.Filters
{
/// <summary>
/// Filter to describe how one pawn sees another
/// </summary>
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Def loader")]
public class RelationFilter
{
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public bool? isVeneratedAnimal;
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public bool? isAlien;
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public List<PawnRelationDef> hasOneOfRelations;
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public List<PawnRelationDef> hasNoneOfRelations;
public List<BloodRelationDegree> hasOneOfRelationDegrees;
private bool initialized = false;
private HashSet<PawnRelationDef> hasOneOfRelationsHashed;
private HashSet<PawnRelationDef> hasNoneOfRelationsHashed;
private HashSet<BloodRelationDegree> hasOneOfRelationDegreesHashed;
/// <summary>
/// Check if the pair of pawns fits filter conditions
/// </summary>
public bool Applies(Pawn pawn, Pawn partner)
{
// Fail if any single condition fails
if (isVeneratedAnimal != null && isVeneratedAnimal != pawn.Ideo.IsVeneratedAnimal(partner))
return false;
//if (isAlien != null && isAlien != partner)
// return false;
if (!CheckRelations(pawn, partner))
return false;
@ -39,9 +41,14 @@ namespace RJWSexperience.Ideology
if (!initialized)
Initialize();
if (hasNoneOfRelationsHashed == null && hasOneOfRelationsHashed == null)
if (hasNoneOfRelationsHashed == null && hasOneOfRelationsHashed == null && hasOneOfRelationDegreesHashed == null)
return true;
if (hasOneOfRelationDegreesHashed != null && !hasOneOfRelationDegreesHashed.Contains(RelationHelpers.GetBloodRelationDegree(pawn, partner)))
{
return false;
}
IEnumerable<PawnRelationDef> relations = pawn.GetRelations(partner);
if (hasOneOfRelationsHashed != null)
@ -69,6 +76,9 @@ namespace RJWSexperience.Ideology
if (!hasOneOfRelations.NullOrEmpty())
hasOneOfRelationsHashed = new HashSet<PawnRelationDef>(hasOneOfRelations);
if (!hasOneOfRelationDegrees.NullOrEmpty())
hasOneOfRelationDegreesHashed = new HashSet<BloodRelationDegree>(hasOneOfRelationDegrees);
initialized = true;
}
}

View File

@ -2,19 +2,24 @@
using System.Diagnostics.CodeAnalysis;
using Verse;
namespace RJWSexperience.Ideology
namespace RJWSexperience.Ideology.Filters
{
/// <summary>
/// Filter to describe one pawn
/// </summary>
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Def loader")]
public class SinglePawnFilter
{
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public bool? isAnimal;
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public bool? isSlave;
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public bool? isPrisoner;
/// <summary>
/// Check if pawn fits filter conditions
/// </summary>
public bool Applies(Pawn pawn)
{
// Fail if any single condition fails
if (isAnimal != null && isAnimal != pawn.IsAnimal())
return false;

View File

@ -0,0 +1,34 @@
using System.Diagnostics.CodeAnalysis;
using Verse;
namespace RJWSexperience.Ideology.Filters
{
/// <summary>
/// Filter to describe two pawns and relations between them
/// </summary>
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Def loader")]
public class TwoPawnFilter
{
public SinglePawnFilter doer;
public SinglePawnFilter partner;
public RelationFilter relations;
/// <summary>
/// Check if the pair of pawns fits filter conditions
/// </summary>
public bool Applies(Pawn pawn, Pawn partner)
{
// Fail if any single condition fails
if (doer?.Applies(pawn) == false)
return false;
if (this.partner?.Applies(partner) == false)
return false;
if (relations?.Applies(pawn, partner) == false)
return false;
return true;
}
}
}

View File

@ -1,25 +1,14 @@
using HarmonyLib;
using RJWSexperience.Ideology.Patches;
using System.Reflection;
using System.Reflection;
using Verse;
namespace RJWSexperience.Ideology
{
[StaticConstructorOnStartup]
internal static class First
internal static class Harmony
{
static First()
static Harmony()
{
var harmony = new Harmony("RJW_Sexperience.Ideology");
harmony.PatchAll(Assembly.GetExecutingAssembly());
if (ModLister.HasActiveModWithName("RJW Sexperience"))
{
harmony.Patch(AccessTools.Method("RJWSexperience.RJWUtility:ThrowVirginHistoryEvent"),
prefix: null,
postfix: new HarmonyMethod(typeof(Sexperience_Patch_ThrowVirginHistoryEvent), nameof(Sexperience_Patch_ThrowVirginHistoryEvent.Postfix))
);
}
new HarmonyLib.Harmony("RJW_Sexperience.Ideology").PatchAll(Assembly.GetExecutingAssembly());
}
}
}

View File

@ -2,6 +2,7 @@
using Verse;
using System.Linq;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
namespace RJWSexperience.Ideology.HistoryEvents
{
@ -27,6 +28,7 @@ namespace RJWSexperience.Ideology.HistoryEvents
//Log.Message($"[RSI] Recorded event {historyEvent.def.ToStringWithPartner(pawn, partner)}");
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static HistoryEvent CreateEvent(this HistoryEventDef def, Pawn pawn)
{
return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer));

View File

@ -0,0 +1,22 @@
using RimWorld;
using RJWSexperience.Ideology.Filters;
using System.Diagnostics.CodeAnalysis;
using Verse;
namespace RJWSexperience.Ideology.HistoryEvents
{
/// <summary>
/// Type to associate single HistoryEventDef with a TwoPawnFilter
/// </summary>
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Def loader")]
public class TwoPawnEventRule
{
public HistoryEventDef historyEventDef;
public TwoPawnFilter filter;
/// <summary>
/// Check if the pair of pawns fits filter conditions
/// </summary>
public bool Applies(Pawn pawn, Pawn partner) => filter?.Applies(pawn, partner) == true;
}
}

View File

@ -0,0 +1,100 @@
using RimWorld;
using rjw;
using Verse;
namespace RJWSexperience.Ideology
{
public static class IdeoUtility
{
public static bool IsSubmissive(this Pawn pawn)
{
Ideo ideo = pawn.Ideo;
if (ideo == null)
return false;
if (ideo.HasPrecept(RsiDefOf.Precept.Submissive_Female) && pawn.gender == Gender.Female)
return true;
else if (ideo.HasPrecept(RsiDefOf.Precept.Submissive_Male) && pawn.gender == Gender.Male)
return true;
return false;
}
public static float GetPreceptsMtbMultiplier<T>(Ideo ideo) where T : Precepts.DefExtension_ModifyMtb
{
float finalMultiplier = 1f;
for (int i = 0; i < ideo.PreceptsListForReading.Count; i++)
{
T defExtension = ideo.PreceptsListForReading[i].def.GetModExtension<T>();
if (defExtension == null)
continue;
finalMultiplier *= defExtension.multiplier;
}
return finalMultiplier;
}
internal static void ConvertPawnBySex(Pawn pawn, Pawn partner, float severity = 0.01f)
{
// Important Note: This is called on "orgasm" - hence when a pawn has the orgasm he is the "pawn" here.
// If Bob fucks Alice, Alice has the orgasm and Alice is the Pawn while Bob is the Partner.
// Hence, the Conversion happens from Partner -> Pawn and not the other way round!
// Short Circuit: Either pawn is null, exit early and do nothing
if (pawn == null || partner == null)
return;
bool sameIdeo = pawn.Ideo == partner.Ideo;
// Option A: Partner has same Ideo as Pawn, increase certainty
if (sameIdeo)
{
if (partner.ideo.Certainty < 1f)
{
partner.ideo.OffsetCertainty(severity);
}
}
// Option B: Partner as different Ideo, try to convert
else
{
pawn.ideo.IdeoConversionAttempt(severity, partner.Ideo);
}
}
public static float GetGenitalSize(Pawn p)
{
if (p == null)
return 0f;
// Iff the pawn has multiple genitalia, the "best" is picked (the biggest penis or tightest vagina)
float bestSeenSize = 0f;
foreach (Hediff part in Genital_Helper.get_AllPartsHediffList(p))
{
// Only check for Vaginas and Penises, not for Anus or for things not categorized as primary sexual parts
if (Genital_Helper.is_penis(part) || Genital_Helper.is_vagina(part))
{
bestSeenSize = part.Severity > bestSeenSize ? part.Severity : bestSeenSize;
}
}
// For Women, the scale is inverted.
if (p.gender == Gender.Female)
return 1 - bestSeenSize;
return bestSeenSize;
}
public static bool IsVisiblyPregnant(Pawn pawn)
{
Hediff pregnancy = PregnancyHelper.GetPregnancy(pawn);
// Currently RJW does not check Biotech pregnancy
if (pregnancy == null && RsiDefOf.Hediff.PregnantHuman != null)
{
pregnancy = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.PregnantHuman);
}
return pregnancy?.Visible == true;
}
}
}

View File

@ -1,16 +0,0 @@
using RimWorld;
using System.Diagnostics.CodeAnalysis;
using Verse;
namespace RJWSexperience.Ideology.HistoryEvents
{
public class TwoPawnEventRule
{
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public HistoryEventDef historyEventDef;
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public TwoPawnFilter filter;
public bool Applies(Pawn pawn, Pawn partner) => filter?.Applies(pawn, partner) == true;
}
}

View File

@ -1,37 +0,0 @@
using RimWorld;
using Verse;
namespace RJWSexperience.Ideology
{
public static class IdeoUtility
{
public static bool IsSubmissive(this Pawn pawn)
{
Ideo ideo = pawn.Ideo;
if (ideo == null)
return false;
if (ideo.HasPrecept(VariousDefOf.Submissive_Female) && pawn.gender == Gender.Female)
return true;
else if (ideo.HasPrecept(VariousDefOf.Submissive_Male) && pawn.gender == Gender.Male)
return true;
return false;
}
public static float GetPreceptsMtbMultiplier<T>(Ideo ideo) where T : Precepts.DefExtension_ModifyMtb
{
float finalMultiplier = 1f;
for (int i = 0; i < ideo.PreceptsListForReading.Count; i++)
{
T defExtension = ideo.PreceptsListForReading[i].def.GetModExtension<T>();
if (defExtension == null)
continue;
finalMultiplier *= defExtension.multiplier;
}
return finalMultiplier;
}
}
}

View File

@ -1,14 +0,0 @@
using Verse;
namespace RJWSexperience
{
public static class Keyed
{
public static readonly string MemeStatFactor = "MemeStatFactor".Translate();
public static readonly string RSVictimCondition = "RSVictimCondition".Translate();
public static readonly string RSBreederCondition = "RSBreederCondition".Translate();
public static readonly string RSNotHuman = "RSNotHuman".Translate();
public static readonly string RSNotAnimal = "RSNotAnimal".Translate();
public static readonly string RSShouldCanFuck = "RSShouldCanFuck".Translate();
}
}

View File

@ -1,56 +0,0 @@
using HarmonyLib;
using RimWorld;
using rjw;
using RJWSexperience.Ideology.HistoryEvents;
using RJWSexperience.Ideology.Precepts;
using System.Collections.Generic;
using Verse;
namespace RJWSexperience.Ideology.Patches
{
[HarmonyPatch(typeof(MarriageCeremonyUtility), nameof(MarriageCeremonyUtility.Married))]
public static class Rimworld_Patch_Marriage
{
public static void Postfix(Pawn firstPawn, Pawn secondPawn)
{
RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(firstPawn, secondPawn);
RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(secondPawn, firstPawn);
}
}
[HarmonyPatch(typeof(RitualOutcomeEffectWorker_FromQuality), "GiveMemoryToPawn")]
public static class Rimworld_Patch_RitualOutcome_DontGiveMemoryToAnimals
{
public static bool Prefix(Pawn pawn)
{
return !pawn.IsAnimal();
}
}
[HarmonyPatch(typeof(IdeoFoundation), nameof(IdeoFoundation.CanAdd))]
public static class Rimworld_Patch_IdeoFoundation
{
public static void Postfix(PreceptDef precept, ref IdeoFoundation __instance, ref AcceptanceReport __result)
{
DefExtension_MultipleMemesRequired extension = precept.GetModExtension<DefExtension_MultipleMemesRequired>();
if (extension == null)
return;
if (extension.requiredAllMemes.NullOrEmpty())
return;
for (int i = 0; i < extension.requiredAllMemes.Count; i++)
{
if (!__instance.ideo.memes.Contains(extension.requiredAllMemes[i]))
{
List<string> report = new List<string>();
foreach (MemeDef meme in extension.requiredAllMemes) report.Add(meme.LabelCap);
__result = new AcceptanceReport("RequiresMeme".Translate() + ": " + report.ToCommaList());
return;
}
}
}
}
}

View File

@ -1,11 +0,0 @@
using System.Diagnostics.CodeAnalysis;
using Verse;
namespace RJWSexperience.Ideology.Precepts
{
public abstract class DefExtension_ModifyMtb : DefModExtension
{
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public float multiplier = 1f;
}
}

View File

@ -1,37 +0,0 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Verse;
namespace RJWSexperience.Ideology.Precepts
{
public class DefExtension_ModifyPreference : DefModExtension
{
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public List<Rule> rules;
public void Apply(Pawn pawn, Pawn partner, ref float preference)
{
foreach (Rule rule in rules)
{
if (rule.Applies(pawn, partner))
preference *= rule.multiplier;
}
}
public class Rule
{
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public float multiplier = 1f;
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public TwoPawnFilter filter;
public bool Applies(Pawn pawn, Pawn partner)
{
if (filter == null)
return true;
return filter.Applies(pawn, partner);
}
}
}
}

View File

@ -1,111 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RimWorld;
using Verse;
using rjw;
namespace RJWSexperience.Ideology
{
public class RitualRole_RapeVictim : RitualRole
{
public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
{
reason = null;
return false;
}
public override bool AppliesToPawn(Pawn p, out string reason, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
{
reason = null;
if (CanBeVictim(p)) return true;
if (!skipReason)
{
reason = Keyed.RSVictimCondition;
}
return false;
}
public static bool CanBeVictim(Pawn pawn)
{
if (pawn.IsPrisonerOfColony || pawn.IsSlaveOfColony) return true;
if (pawn.IsSubmissive()) return true;
if (pawn.IsDesignatedComfort() || (pawn.guilt != null && pawn.guilt.IsGuilty) || (pawn.apparel != null && pawn.apparel.PsychologicallyNude)) return true;
return false;
}
}
public class RitualRole_HumanBreedee : RitualRole
{
public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
{
reason = null;
return false;
}
public override bool AppliesToPawn(Pawn p, out string reason, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
{
reason = null;
if (!xxx.is_human(p))
{
reason = Keyed.RSNotHuman;
return false;
}
if (CanBeBreedee(p)) return true;
if (!skipReason)
{
reason = Keyed.RSShouldCanFuck;
}
return false;
}
public static bool CanBeBreedee(Pawn pawn)
{
if (xxx.can_be_fucked(pawn)) return true;
return false;
}
}
public class RitualRole_AnimalBreeder : RitualRole
{
public override bool Animal => true;
public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
{
reason = null;
return false;
}
public override bool AppliesToPawn(Pawn p, out string reason, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
{
reason = null;
if (!p.IsAnimal())
{
reason = Keyed.RSNotAnimal;
return false;
}
if (CanBeBreeder(p, assignments?.Ritual)) return true;
if (!skipReason)
{
reason = Keyed.RSBreederCondition;
}
return false;
}
public static bool CanBeBreeder(Pawn animal, Precept_Ritual precept)
{
if (precept != null && precept.ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal))
{
return false;
}
if (!xxx.can_rape(animal)) return false;
return true;
}
}
}

View File

@ -1,18 +0,0 @@
using RimWorld;
namespace RJWSexperience.Ideology
{
[DefOf]
public static class RsiHistoryEventDefOf
{
[MayRequireIdeology] public static readonly HistoryEventDef RSI_SexWithAnimal;
[MayRequireIdeology] public static readonly HistoryEventDef RSI_Raped;
[MayRequireIdeology] public static readonly HistoryEventDef RSI_NonIncestuosMarriage;
[MayRequireIdeology] public static readonly HistoryEventDef RSI_NonIncestuosSex;
[MayRequireIdeology] public static readonly HistoryEventDef RSI_SexWithCorpse;
[MayRequireIdeology] public static readonly HistoryEventDef RSI_VirginTaken;
[MayRequireIdeology] public static readonly HistoryEventDef RSI_VirginStolen;
[MayRequireIdeology] public static readonly HistoryEventDef RSI_TookVirgin;
[MayRequireIdeology] public static readonly HistoryEventDef RSI_Masturbated;
}
}

View File

@ -1,54 +0,0 @@
using RimWorld;
using Verse;
namespace RJWSexperience.Ideology
{
public class Thought_IncreaseRecord : Thought_Recordbased
{
protected float recordIncrement;
public override void ExposeData()
{
base.ExposeData();
Scribe_Values.Look(ref recordIncrement, "recordIncrement", recordIncrement, true);
}
public override void ThoughtInterval()
{
base.ThoughtInterval();
if (recordIncrement != 0)
{
pawn.records.AddTo(RecordDef, recordIncrement);
recordIncrement = 0;
}
}
public override bool TryMergeWithExistingMemory(out bool showBubble)
{
ThoughtHandler thoughts = pawn.needs.mood.thoughts;
if (thoughts.memories.NumMemoriesInGroup(this) >= def.stackLimit)
{
Thought_IncreaseRecord thought_Memory = (Thought_IncreaseRecord)thoughts.memories.OldestMemoryInGroup(this);
if (thought_Memory != null)
{
showBubble = (thought_Memory.age > thought_Memory.def.DurationTicks / 2);
thought_Memory.Merged();
return true;
}
}
showBubble = true;
return false;
}
public override void Init()
{
base.Init();
recordIncrement = Def.increment;
}
protected virtual void Merged()
{
age = 0;
recordIncrement += Def.increment;
}
}
}

View File

@ -1,38 +0,0 @@
using RimWorld;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
namespace RJWSexperience.Ideology
{
/// <summary>
/// ThoughtDef using opinion
/// </summary>
public class ThoughtDef_Opinionbased : ThoughtDef
{
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public List<float> minimumValueforStage = new List<float>();
}
/// <summary>
/// Thought class using record.
/// </summary>
public class Thought_Opinionbased : Thought_Memory
{
protected ThoughtDef_Opinionbased Def => (ThoughtDef_Opinionbased)def;
protected List<float> MinimumValueforStage => Def.minimumValueforStage;
public override int CurStageIndex
{
get
{
float value = 0f;
if (otherPawn != null) value = pawn.relations?.OpinionOf(otherPawn) ?? 0f;
for (int i = MinimumValueforStage.Count - 1; i > 0; i--)
{
if (MinimumValueforStage[i] < value) return i;
}
return 0;
}
}
}
}

View File

@ -1,30 +0,0 @@
using rjw;
using System.Diagnostics.CodeAnalysis;
using Verse;
namespace RJWSexperience.Ideology
{
public class TwoPawnFilter
{
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public SinglePawnFilter doer;
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public SinglePawnFilter partner;
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public RelationFilter relations;
public bool Applies(Pawn pawn, Pawn partner)
{
if (doer?.Applies(pawn) == false)
return false;
if (this.partner?.Applies(partner) == false)
return false;
if (relations?.Applies(pawn, partner) == false)
return false;
return true;
}
}
}

View File

@ -1,25 +0,0 @@
using RimWorld;
using Verse;
namespace RJWSexperience.Ideology
{
[DefOf]
public static class VariousDefOf
{
public static readonly JobDef RapeVictim;
public static readonly JobDef Gangbang;
public static readonly JobDef GettinGangbang;
public static readonly JobDef DrugSex;
public static readonly JobDef GettinDrugSex;
public static readonly JobDef DrugMasturbate;
[MayRequireIdeology] public static readonly MemeDef Zoophile;
[MayRequireIdeology] public static readonly MemeDef Rapist;
[MayRequireIdeology] public static readonly MemeDef Necrophile;
[MayRequireIdeology] public static readonly PreceptDef Bestiality_OnlyVenerated;
[MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysFather;
[MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysColony;
[MayRequireIdeology] public static readonly PreceptDef Submissive_Male;
[MayRequireIdeology] public static readonly PreceptDef Submissive_Female;
}
}

View File

@ -1,100 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{B4481C38-31B1-422D-B5AA-0059FE7CCA1C}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>RJWSexperience.Ideology</RootNamespace>
<AssemblyName>RJWSexperience.Ideology</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\RJWSexperience_Ideology\Assemblies\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<TargetFramework>net48</TargetFramework>
<Optimize>true</Optimize>
<OutputPath>..\..\1.3\Assemblies\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<OutputPath>..\..\1.4\Assemblies\</OutputPath>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<GenerateAssemblyInfo>False</GenerateAssemblyInfo>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
<ItemGroup>
<Reference Include="RJW">
<HintPath>..\..\..\rjw\1.3\Assemblies\RJW.dll</HintPath>
<HintPath>..\..\..\rjw\1.4\Assemblies\RJW.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
</ItemGroup>
<ItemGroup>
<Compile Include="DebugAction.cs" />
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="Ideology\HistoryEvents\DefExtension_SecondaryEvents.cs" />
<Compile Include="Ideology\HistoryEvents\DefExtension_EventOverrides.cs" />
<Compile Include="Ideology\HistoryEvents\TwoPawnEventRule.cs" />
<Compile Include="Ideology\InteractionDefExtension_HistoryEvents.cs" />
<Compile Include="Ideology\GoodwillSituationWorker_MemeCompatibility.cs" />
<Compile Include="Harmony.cs" />
<Compile Include="Ideology\HistoryEvents\ArgsNamesCustom.cs" />
<Compile Include="Ideology\Keyed.cs" />
<Compile Include="Ideology\RelationFilter.cs" />
<Compile Include="Ideology\RsiHistoryEventDefOf.cs" />
<Compile Include="Ideology\TwoPawnFilter.cs" />
<Compile Include="Ideology\SinglePawnFilter.cs" />
<Compile Include="Ideology\Precepts\Comp_SelfTookMemoryThought_Gendered.cs" />
<Compile Include="Ideology\Precepts\Comp_KnowsMemoryThought_Gendered.cs" />
<Compile Include="Ideology\HistoryEvents\HistoryEventDefExtensionMethods.cs" />
<Compile Include="Ideology\Patches\RJW_Patch_ChancePerHour.cs" />
<Compile Include="Ideology\Precepts\DefExtension_ModifyMtb.cs" />
<Compile Include="Ideology\Precepts\DefExtension_ModifyFappinMtb.cs" />
<Compile Include="Ideology\Precepts\DefExtension_ModifyRapeCPMtb.cs" />
<Compile Include="Ideology\Precepts\DefExtension_ModifyNecroMtb.cs" />
<Compile Include="Ideology\Precepts\DefExtension_ModifyBestialityMtb.cs" />
<Compile Include="Ideology\Precepts\DefExtension_ModifyPreference.cs" />
<Compile Include="Ideology\Precepts\DefExtension_MultipleMemesRequired.cs" />
<Compile Include="Ideology\Rituals\JobGiver_GangbangConsensual.cs" />
<Compile Include="Ideology\Rituals\LordJob_Rituals.cs" />
<Compile Include="Ideology\Patches\RJW_Patch_Ideo.cs" />
<Compile Include="Ideology\Patches\Sexperience_Patch.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Ideology\Patches\Rimworld_Patch.cs" />
<Compile Include="Ideology\Rituals\JobGiver_DrugOrgy.cs" />
<Compile Include="Ideology\Rituals\JobGiver_GangbangVictim.cs" />
<Compile Include="Ideology\Rituals\RitualBehaviorWorkers.cs" />
<Compile Include="Ideology\Rituals\RitualOutcomeComps.cs" />
<Compile Include="Ideology\Rituals\RitualRoles.cs" />
<Compile Include="Ideology\StatParts.cs" />
<Compile Include="Ideology\IdeoUtility.cs" />
<Compile Include="Thoughts\ThoughtDefExtension_IncreaseRecord.cs" />
<Compile Include="Thoughts\ThoughtDefExtension_StageFromOpinion.cs" />
<Compile Include="Thoughts\Thought_IncreaseRecord.cs" />
<Compile Include="Thoughts\Thought_Opinionbased.cs" />
<Compile Include="Ideology\VariousDefOf.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Krafs.Rimworld.Ref">
<Version>1.3.3389</Version>
<Version>1.4.*</Version>
</PackageReference>
<PackageReference Include="Lib.Harmony">
<Version>2.2.1</Version>
<Version>2.*</Version>
<ExcludeAssets>runtime</ExcludeAssets>
<IncludeAssets>compile; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -0,0 +1,20 @@
using Verse;
namespace RJWSexperience.Ideology
{
public static class Keyed
{
public static readonly string ModTitle = "RSI_Mod_Title".Translate();
public static readonly string MemeStatFactor = "MemeStatFactor".Translate();
public static readonly string RSVictimCondition = "RSVictimCondition".Translate();
public static readonly string RSBreederCondition = "RSBreederCondition".Translate();
public static readonly string RSNotHuman = "RSNotHuman".Translate();
public static readonly string RSNotAnimal = "RSNotAnimal".Translate();
public static readonly string RSShouldCanFuck = "RSShouldCanFuck".Translate();
public static readonly string PatchRomanceChanceFactor = "RSI_PatchRomanceChanceFactor".Translate();
public static readonly string PatchRomanceChanceFactorTip = "RSI_PatchRomanceChanceFactorTip".Translate();
public static readonly string PatchIncestuousManualRomance = "RSI_PatchIncestuousManualRomance".Translate();
public static readonly string PatchIncestuousManualRomanceTip = "RSI_PatchIncestuousManualRomanceTip".Translate();
}
}

View File

@ -15,7 +15,7 @@ namespace RJWSexperience.Ideology.Patches
if (__result < 0f || pawn.Ideo == null) // ideo is null if don't have dlc
return;
if (!RsiHistoryEventDefOf.RSI_SexWithAnimal.CreateEvent(pawn).DoerWillingToDo())
if (!RsiDefOf.HistoryEvent.RSI_SexWithAnimal.CreateEvent(pawn).DoerWillingToDo())
{
__result = -2f;
return;
@ -32,7 +32,7 @@ namespace RJWSexperience.Ideology.Patches
if (__result < 0f || pawn.Ideo == null) // ideo is null if don't have dlc
return;
if (!RsiHistoryEventDefOf.RSI_Raped.CreateEvent(pawn).DoerWillingToDo())
if (!RsiDefOf.HistoryEvent.RSI_Raped.CreateEvent(pawn).DoerWillingToDo())
{
__result = -2f;
return;
@ -48,7 +48,7 @@ namespace RJWSexperience.Ideology.Patches
if (__result < 0f || pawn.Ideo == null) // ideo is null if don't have dlc
return;
if (!RsiHistoryEventDefOf.RSI_SexWithCorpse.CreateEvent(pawn).DoerWillingToDo())
if (!RsiDefOf.HistoryEvent.RSI_SexWithCorpse.CreateEvent(pawn).DoerWillingToDo())
{
__result = -2f;
return;
@ -65,7 +65,7 @@ namespace RJWSexperience.Ideology.Patches
if (__result < 0f || p.Ideo == null) // ideo is null if don't have dlc
return;
if (!RsiHistoryEventDefOf.RSI_Masturbated.CreateEvent(p).DoerWillingToDo())
if (!RsiDefOf.HistoryEvent.RSI_Masturbated.CreateEvent(p).DoerWillingToDo())
{
__result = -2f;
return;

View File

@ -7,10 +7,55 @@ using RJWSexperience.Ideology.HistoryEvents;
using RJWSexperience.Ideology.Precepts;
using System;
using System.Collections.Generic;
using System.Reflection.Emit;
using Verse;
namespace RJWSexperience.Ideology.Patches
{
[HarmonyPatch(typeof(xxx), nameof(xxx.can_rape))]
public static class RJW_Patch_CannotRapeBecauseIdeo
{
/// <summary>
/// Injects IdeoCanRape call into is_human block of xxx.can_rape
/// </summary>
/// <param name="instructions">Original method instructions</param>
/// <returns>Modified method instructions</returns>
[HarmonyTranspiler]
public static IEnumerable<CodeInstruction> AddIdeoCheck(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
{
using IEnumerator<CodeInstruction> enumerator = instructions.GetEnumerator();
System.Reflection.FieldInfo wildMode = AccessTools.Field(typeof(RJWSettings), nameof(RJWSettings.WildMode));
Label labelWildMode = generator.DefineLabel();
bool done = false;
while (enumerator.MoveNext())
{
if (!done && enumerator.Current.LoadsField(wildMode))
{
// Found RJWSettings.WildMode check, insert before
// Need to move labels to our instruction because previous check jumps to one of them, skipping our call
var existingLabels = enumerator.Current.labels;
enumerator.Current.labels = new List<Label>() { labelWildMode };
// Load the first argument - Pawn
yield return new CodeInstruction(OpCodes.Ldarg_0) { labels = existingLabels };
// Call the check. Consumes pawn and pushes bool
yield return CodeInstruction.Call(typeof(RJW_Patch_CannotRapeBecauseIdeo), nameof(IdeoCanRape));;
// If bool is true, jump to the next check
yield return new CodeInstruction(OpCodes.Brtrue_S, labelWildMode);
// The bool was false, push false and exit the method
yield return new CodeInstruction(OpCodes.Ldc_I4_0);
yield return new CodeInstruction(OpCodes.Ret);
done = true;
}
yield return enumerator.Current;
}
}
public static bool IdeoCanRape(Pawn pawn) => RsiDefOf.HistoryEvent.RSI_Raped.CreateEvent(pawn).DoerWillingToDo();
}
[HarmonyPatch(typeof(xxx), nameof(xxx.is_rapist))]
public static class RJW_Patch_is_rapist
{
@ -19,7 +64,7 @@ namespace RJWSexperience.Ideology.Patches
Ideo ideo = pawn.Ideo;
if (ideo != null && !pawn.IsSubmissive())
{
__result = __result || ideo.HasMeme(VariousDefOf.Rapist);
__result = __result || ideo.HasMeme(RsiDefOf.Meme.Rapist);
}
}
}
@ -32,7 +77,7 @@ namespace RJWSexperience.Ideology.Patches
Ideo ideo = pawn.Ideo;
if (ideo != null)
{
__result = __result || ideo.HasMeme(VariousDefOf.Zoophile);
__result = __result || ideo.HasMeme(RsiDefOf.Meme.Zoophile);
}
}
}
@ -45,7 +90,7 @@ namespace RJWSexperience.Ideology.Patches
Ideo ideo = pawn.Ideo;
if (ideo != null)
{
__result = __result || ideo.HasMeme(VariousDefOf.Necrophile);
__result = __result || ideo.HasMeme(RsiDefOf.Meme.Necrophile);
}
}
}
@ -85,10 +130,10 @@ namespace RJWSexperience.Ideology.Patches
private static void AfterSexHuman(Pawn human, Pawn partner)
{
RsiHistoryEventDefOf.RSI_NonIncestuosSex.RecordEventWithPartner(human, partner);
RsiDefOf.HistoryEvent.RSI_NonIncestuosSex.RecordEventWithPartner(human, partner);
if (partner.IsAnimal())
RsiHistoryEventDefOf.RSI_SexWithAnimal.RecordEventWithPartner(human, partner);
RsiDefOf.HistoryEvent.RSI_SexWithAnimal.RecordEventWithPartner(human, partner);
}
}
@ -113,11 +158,13 @@ namespace RJWSexperience.Ideology.Patches
public static float PreceptSextype(Pawn pawn, Pawn partner, float score, List<HistoryEventDef> historyEventDefs)
{
foreach(HistoryEventDef eventDef in historyEventDefs)
for (int i = 0; i < historyEventDefs.Count; i++)
{
HistoryEventDef eventDef = historyEventDefs[i];
if (eventDef.CreateEventWithPartner(pawn, partner).DoerWillingToDo())
{
float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, pawn.GetStatValue(xxx.sex_drive_stat)));
float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, pawn.GetStatValue(xxx.sex_drive_stat, cacheStaleAfterTicks: 60)));
return score * mult;
}
}
@ -148,7 +195,7 @@ namespace RJWSexperience.Ideology.Patches
public static void Postfix(Pawn pawn, ref bool __result)
{
Ideo ideo = pawn.Ideo;
if (ideo?.HasMeme(VariousDefOf.Zoophile) == true)
if (ideo?.HasMeme(RsiDefOf.Meme.Zoophile) == true)
{
SaveStorage.DataStore.GetPawnData(pawn).CanDesignateBreeding = true;
__result = true;
@ -156,10 +203,11 @@ namespace RJWSexperience.Ideology.Patches
}
}
[HarmonyPatch(typeof(PawnDesignations_Comfort), nameof(PawnDesignations_Comfort.UpdateCanDesignateComfort))]
public static class RJW_PatchUpdateCanDesignateComfort
[HarmonyPatch(typeof(PawnDesignations_Comfort))]
public static class RJW_Patch_PawnDesignations_Comfort_Submissive
{
public static void Postfix(Pawn pawn, ref bool __result)
[HarmonyPostfix, HarmonyPatch(nameof(PawnDesignations_Comfort.UpdateCanDesignateComfort))]
public static void UpdateCanDesignateComfort(Pawn pawn, ref bool __result)
{
if (pawn.IsSubmissive())
{
@ -167,6 +215,25 @@ namespace RJWSexperience.Ideology.Patches
__result = true;
}
}
/// <summary>
/// RJW undesignates if it thinks that the pawn can't be a comfort pawn.
/// Why the hell checker method changes the state?
/// </summary>
/// <param name="pawn">Pawn to check</param>
/// <param name="__result">Is pawn currenlty designated as comfort</param>
/// <returns>Run the original method</returns>
[HarmonyPrefix, HarmonyPatch(nameof(PawnDesignations_Comfort.IsDesignatedComfort))]
public static bool IsDesignatedComfort(Pawn pawn, ref bool __result)
{
if (pawn.IsSubmissive() && !pawn.Dead)
{
__result = pawn.GetRJWPawnData().Comfort;
return false;
}
return true;
}
}
[HarmonyPatch(typeof(Hediff_BasePregnancy), nameof(Hediff_BasePregnancy.PostBirth))]
@ -193,14 +260,14 @@ namespace RJWSexperience.Ideology.Patches
Ideo mainideo = playerfaction.ideos.PrimaryIdeo;
if (mainideo != null)
{
if (mainideo.HasPrecept(VariousDefOf.BabyFaction_AlwaysFather))
if (mainideo.HasPrecept(RsiDefOf.Precept.BabyFaction_AlwaysFather))
{
Pawn parent = baby.GetFather() ?? baby.GetMother();
ideo = parent.Ideo;
return parent.Faction;
}
else if (mainideo.HasPrecept(VariousDefOf.BabyFaction_AlwaysColony))
else if (mainideo.HasPrecept(RsiDefOf.Precept.BabyFaction_AlwaysColony))
{
ideo = mainideo;
return playerfaction;
@ -211,4 +278,22 @@ namespace RJWSexperience.Ideology.Patches
return mother?.Faction ?? baby.Faction;
}
}
[HarmonyPatch(typeof(SexUtility), nameof(SexUtility.SatisfyPersonal))]
public static class RJW_Patch_Orgasm_IdeoConversion
{
public static void Postfix(SexProps props)
{
// ShortCuts: Exit Early if Pawn or Partner are null (can happen with Animals or Masturbation)
if (props.pawn?.Ideo == null || !props.hasPartner())
return;
if (props.partner.Ideo?.HasPrecept(RsiDefOf.Precept.ProselyzingByOrgasm) == true)
{
// Pawn is the one having the orgasm
// Partner is "giving" the orgasm, hence the pawn will be converted towards the partners ideology
IdeoUtility.ConvertPawnBySex(props.pawn, props.partner, 0.03f);
}
}
}
}

View File

@ -0,0 +1,250 @@
using HarmonyLib;
using Mono.Cecil.Cil;
using RimWorld;
using rjw;
using RJWSexperience.Ideology.HistoryEvents;
using RJWSexperience.Ideology.Precepts;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Text;
using Verse;
namespace RJWSexperience.Ideology.Patches
{
[HarmonyPatch(typeof(MarriageCeremonyUtility), nameof(MarriageCeremonyUtility.Married))]
public static class Rimworld_Patch_Marriage
{
public static void Postfix(Pawn firstPawn, Pawn secondPawn)
{
RsiDefOf.HistoryEvent.RSI_NonIncestuosMarriage.RecordEventWithPartner(firstPawn, secondPawn);
RsiDefOf.HistoryEvent.RSI_NonIncestuosMarriage.RecordEventWithPartner(secondPawn, firstPawn);
}
}
[HarmonyPatch(typeof(RitualOutcomeEffectWorker_FromQuality), "GiveMemoryToPawn")]
public static class Rimworld_Patch_RitualOutcome_DontGiveMemoryToAnimals
{
public static bool Prefix(Pawn pawn)
{
return !pawn.IsAnimal();
}
}
[HarmonyPatch(typeof(IdeoFoundation), nameof(IdeoFoundation.CanAdd))]
public static class Rimworld_Patch_IdeoFoundation
{
public static void Postfix(PreceptDef precept, ref IdeoFoundation __instance, ref AcceptanceReport __result)
{
DefExtension_MultipleMemesRequired extension = precept.GetModExtension<DefExtension_MultipleMemesRequired>();
if (extension == null)
return;
if (extension.requiredAllMemes.NullOrEmpty())
return;
for (int i = 0; i < extension.requiredAllMemes.Count; i++)
{
if (!__instance.ideo.memes.Contains(extension.requiredAllMemes[i]))
{
List<string> report = new List<string>();
foreach (MemeDef meme in extension.requiredAllMemes) report.Add(meme.LabelCap);
__result = new AcceptanceReport("RequiresMeme".Translate() + ": " + report.ToCommaList());
return;
}
}
}
}
[HarmonyPatch(typeof(RelationsUtility), "Incestuous")]
public static class Rimworld_Patch_IncestuousManualRomance
{
public static bool Prepare() => RsiMod.Prefs.patchIncestuousManualRomance;
/// <summary>
/// Override incestuous check in the manual romance
/// </summary>
/// <param name="one">Pawn to try do romance</param>
/// <param name="two">Target for romance</param>
/// <param name="__result">Result of the original method</param>
/// <returns>Run original method implementation</returns>
public static bool Prefix(Pawn one, Pawn two, ref bool __result)
{
__result = RsiIncestuous(one, two);
return false;
}
/// <summary>
/// Check if Ideology allows romance attempt
/// </summary>
/// <param name="one">Pawn to try do romance</param>
/// <param name="two">Target for romance</param>
/// <returns>Forbid romance option</returns>
public static bool RsiIncestuous(Pawn one, Pawn two)
{
PreceptDef incestuousPrecept = one.Ideo?.PreceptsListForReading.Select(precept => precept.def).FirstOrFallback(def => def.issue == RsiDefOf.Issue.Incestuos);
var allowManualRomanceOnlyFor = incestuousPrecept?.GetModExtension<DefExtension_Incest>()?.allowManualRomanceOnlyFor;
BloodRelationDegree relationDegree = RelationHelpers.GetBloodRelationDegree(one, two);
if (allowManualRomanceOnlyFor == null)
{
return relationDegree < BloodRelationDegree.NotRelated;
}
return !allowManualRomanceOnlyFor.Contains(relationDegree);
}
}
[HarmonyPatch(typeof(Pawn_RelationsTracker), nameof(Pawn_RelationsTracker.SecondaryRomanceChanceFactor))]
public static class Rimworld_Patch_SecondaryRomanceChanceFactor
{
public static bool Prepare() => RsiMod.Prefs.patchRomanceChanceFactor;
/// <summary>
/// <para>
/// Replace
/// float num = 1f;
/// foreach (PawnRelationDef pawnRelationDef in this.pawn.GetRelations(otherPawn))
/// {
/// num *= pawnRelationDef.romanceChanceFactor;
/// }
/// </para>
/// <para>with</para>
/// <para>
/// float num = 1f;
/// num = RomanceChanceFactorHelpers.GetRomanceChanceFactor(this.pawn, otherPawn)
/// </para>
/// </summary>
/// <param name="instructions">Original method body</param>
/// <returns>Modified method body</returns>
public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
{
MethodInfo getRelationsInfo = AccessTools.Method(
typeof(PawnRelationUtility),
nameof(PawnRelationUtility.GetRelations),
new[] { typeof(Pawn), typeof(Pawn) });
MethodInfo helperInfo = AccessTools.Method(
typeof(RomanceChanceFactorHelpers),
nameof(RomanceChanceFactorHelpers.GetRomanceChanceFactor),
new[] { typeof(Pawn), typeof(Pawn) });
// Original IL looks something like this:
// Load this.pawn
// Load otherPawn
// Call GetRelations
// Start loop
// ...
// Mul num and romanceChanceFactor
// Store result
// ...
// Endfinaly
// Idea is to substitute GetRelations call with a method with the same signature,
// store results in the same place original loop does and remove everything else until Endfinaly
IEnumerator<CodeInstruction> enumerator = instructions.GetEnumerator();
bool endOfInstructions = !enumerator.MoveNext();
// Find and replace GetRelations
while (!endOfInstructions)
{
var instruction = enumerator.Current;
if (instruction.Calls(getRelationsInfo))
{
yield return new CodeInstruction(OpCodes.Call, helperInfo);
enumerator.MoveNext(); // skip original method call
break;
}
yield return instruction;
endOfInstructions = !enumerator.MoveNext();
}
if (endOfInstructions)
{
Log.Error("[RSI] Failed to transpile Pawn_RelationsTracker.SecondaryRomanceChanceFactor: PawnRelationUtility.GetRelations call not found");
yield break;
}
// Skip everything until Mul
while (!endOfInstructions)
{
if (enumerator.Current.opcode == OpCodes.Mul)
{
enumerator.MoveNext(); // skip Mul
yield return enumerator.Current; // return next op, it should be "store result"
break;
}
endOfInstructions = !enumerator.MoveNext();
}
if (endOfInstructions)
{
Log.Error("[RSI] Failed to transpile Pawn_RelationsTracker.SecondaryRomanceChanceFactor: Mul not found. This error means half of SecondaryRomanceChanceFactor was erased. Very not good");
yield break;
}
// Skip the rest of the loop
while (!endOfInstructions)
{
if (enumerator.Current.opcode == OpCodes.Endfinally)
{
// Endfinally will be skipped by the next MoveNext()
break;
}
endOfInstructions = !enumerator.MoveNext();
}
if (endOfInstructions)
{
Log.Error("[RSI] Failed to transpile Pawn_RelationsTracker.SecondaryRomanceChanceFactor: Endfinally not found. This error means half of SecondaryRomanceChanceFactor was erased. Very not good");
yield break;
}
// Return the rest of the method
while (enumerator.MoveNext())
{
yield return enumerator.Current;
}
if (Prefs.DevMode) Log.Message("[RSI] Successfully transpiled Pawn_RelationsTracker.SecondaryRomanceChanceFactor");
}
[HarmonyPatch(typeof(Precept), nameof(Precept.GetTip))]
public static class Rimworld_Patch_PreceptTip
{
public static void Postfix(ref string __result, Precept __instance)
{
if (__instance.def.modExtensions.NullOrEmpty())
{
return;
}
bool tipChanged = false;
StringBuilder tipBuilder = new StringBuilder(__result);
tipBuilder.AppendLine();
tipBuilder.AppendInNewLine((Keyed.ModTitle + ":").Colorize(ColoredText.TipSectionTitleColor));
for (int i = 0; i < __instance.def.modExtensions.Count; i++)
{
if (__instance.def.modExtensions[i] is IPreceptTipPostfix tipPostfix)
{
tipBuilder.AppendInNewLine(" - " + tipPostfix.GetTip());
tipChanged = true;
}
}
if (tipChanged)
{
__result = tipBuilder.ToString();
}
}
}
}
}

View File

@ -1,21 +1,25 @@
using rjw;
using HarmonyLib;
using rjw;
using RJWSexperience.Ideology.HistoryEvents;
using Verse;
namespace RJWSexperience.Ideology.Patches
{
[HarmonyPatch("RJWSexperience.RJWUtility", "ThrowVirginHistoryEvent")]
public static class Sexperience_Patch_ThrowVirginHistoryEvent
{
public static bool Prepare() => ModsConfig.IsActive("rjw.sexperience");
public static void Postfix(Pawn exVirgin, Pawn partner, SexProps props, int degree)
{
const int femaleAfterSurgery = 1;
if (props.isRape && exVirgin == props.partner)
RsiHistoryEventDefOf.RSI_VirginStolen.RecordEventWithPartner(exVirgin, partner);
RsiDefOf.HistoryEvent.RSI_VirginStolen.RecordEventWithPartner(exVirgin, partner);
else if (degree != femaleAfterSurgery)
RsiHistoryEventDefOf.RSI_VirginTaken.RecordEventWithPartner(exVirgin, partner);
RsiDefOf.HistoryEvent.RSI_VirginTaken.RecordEventWithPartner(exVirgin, partner);
RsiHistoryEventDefOf.RSI_TookVirgin.RecordEventWithPartner(partner, exVirgin);
RsiDefOf.HistoryEvent.RSI_TookVirgin.RecordEventWithPartner(partner, exVirgin);
}
}
}

View File

@ -0,0 +1,34 @@
using RimWorld;
using rjw;
using Verse;
namespace RJWSexperience.Ideology.PreceptWorkers
{
public class ThoughtWorker_Precept_GenitalSize : ThoughtWorker_Precept
{
private ThoughtDefExtension_StageFromValue stageFromValue;
protected ThoughtDefExtension_StageFromValue StageFromValue
{
get
{
if (stageFromValue == null)
{
stageFromValue = def.GetModExtension<ThoughtDefExtension_StageFromValue>();
}
return stageFromValue;
}
}
protected override ThoughtState ShouldHaveThought(Pawn p)
{
if (p?.DevelopmentalStage == DevelopmentalStage.Adult && Genital_Helper.get_AllPartsHediffList(p).Count > 0)
{
float bestSize = IdeoUtility.GetGenitalSize(p);
return ThoughtState.ActiveAtStage(StageFromValue.GetStageIndex(bestSize));
}
// This might can happen if the pawn has no genitalia ... maybe?
return ThoughtState.Inactive;
}
}
}

View File

@ -0,0 +1,37 @@
using RimWorld;
using rjw;
using Verse;
namespace RJWSexperience.Ideology.PreceptWorkers
{
public class ThoughtWorker_Precept_GenitalSize_Social : ThoughtWorker_Precept_Social
{
private ThoughtDefExtension_StageFromValue stageFromValue;
protected ThoughtDefExtension_StageFromValue StageFromValue
{
get
{
if (stageFromValue == null)
{
stageFromValue = def.GetModExtension<ThoughtDefExtension_StageFromValue>();
}
return stageFromValue;
}
}
// Important Note: For the Social Worker, we measure otherPawns genitalia
protected override ThoughtState ShouldHaveThought(Pawn p, Pawn otherPawn)
{
if (otherPawn?.DevelopmentalStage == DevelopmentalStage.Adult &&
p?.DevelopmentalStage == DevelopmentalStage.Adult &&
Genital_Helper.get_AllPartsHediffList(otherPawn).Count > 0)
{
float bestSize = IdeoUtility.GetGenitalSize(otherPawn);
return ThoughtState.ActiveAtStage(StageFromValue.GetStageIndex(bestSize));
}
// This might can happen if the pawn has no genitalia ... maybe?
return ThoughtState.Inactive;
}
}
}

View File

@ -0,0 +1,20 @@
using RimWorld;
using Verse;
namespace RJWSexperience.Ideology.PreceptWorkers
{
/// <summary>
/// thought worker for a thought that is active when a certain hediff is present, and who's stage depends on the ether state of the pawn
/// Shamelessly taken from: https://github.com/Tachyonite/Pawnmorpher/blob/master/Source/Pawnmorphs/Esoteria/Thoughts/ThoughtWorker_EtherHediff.cs
/// </summary>
public class ThoughtWorker_Precept_NonPregnant : ThoughtWorker_Precept
{
/// <summary>Gets the current thought state of the given pawn.</summary>
/// <param name="p">The pawn for whom the thoughts are generated.</param>
/// <returns></returns>
protected override ThoughtState ShouldHaveThought(Pawn p)
{
return p?.DevelopmentalStage == DevelopmentalStage.Adult && !IdeoUtility.IsVisiblyPregnant(p);
}
}
}

View File

@ -0,0 +1,23 @@
using RimWorld;
using Verse;
namespace RJWSexperience.Ideology.PreceptWorkers
{
/// <summary>
/// thought worker for a thought that is active when a certain hediff is present, and who's stage depends on the ether state of the pawn
/// Shamelessly taken from: https://github.com/Tachyonite/Pawnmorpher/blob/master/Source/Pawnmorphs/Esoteria/Thoughts/ThoughtWorker_EtherHediff.cs
/// </summary>
public class ThoughtWorker_Precept_NonPregnant_Social : ThoughtWorker_Precept_Social
{
/// <summary>Gets the current thought state of the given pawn.</summary>
/// <param name="p">The pawn for whom the thoughts are generated.</param>
/// <param name="otherPawn">The pawn about whom the thoughts are generated.</param>
/// <returns></returns>
protected override ThoughtState ShouldHaveThought(Pawn p, Pawn otherPawn)
{
return otherPawn?.DevelopmentalStage == DevelopmentalStage.Adult &&
p?.DevelopmentalStage == DevelopmentalStage.Adult &&
!IdeoUtility.IsVisiblyPregnant(otherPawn);
}
}
}

View File

@ -0,0 +1,20 @@
using RimWorld;
using Verse;
namespace RJWSexperience.Ideology.PreceptWorkers
{
/// <summary>
/// thought worker for a thought that is active when a certain hediff is present, and who's stage depends on the ether state of the pawn
/// Shamelessly taken from: https://github.com/Tachyonite/Pawnmorpher/blob/master/Source/Pawnmorphs/Esoteria/Thoughts/ThoughtWorker_EtherHediff.cs
/// </summary>
public class ThoughtWorker_Precept_Pregnant : ThoughtWorker_Precept
{
/// <summary>Gets the current thought state of the given pawn.</summary>
/// <param name="p">The pawn for whom the thoughts are generated.</param>
/// <returns></returns>
protected override ThoughtState ShouldHaveThought(Pawn p)
{
return p?.DevelopmentalStage == DevelopmentalStage.Adult && IdeoUtility.IsVisiblyPregnant(p);
}
}
}

View File

@ -0,0 +1,23 @@
using RimWorld;
using Verse;
namespace RJWSexperience.Ideology.PreceptWorkers
{
/// <summary>
/// thought worker for a thought that is active when a certain hediff is present, and who's stage depends on the ether state of the pawn
/// Shamelessly taken from: https://github.com/Tachyonite/Pawnmorpher/blob/master/Source/Pawnmorphs/Esoteria/Thoughts/ThoughtWorker_EtherHediff.cs
/// </summary>
public class ThoughtWorker_Precept_Pregnant_Social : ThoughtWorker_Precept_Social
{
/// <summary>Gets the current thought state of the given pawn.</summary>
/// <param name="p">The pawn for whom the thoughts are generated.</param>
/// <param name="otherPawn">The pawn about whom the thoughts are generated.</param>
/// <returns></returns>
protected override ThoughtState ShouldHaveThought(Pawn p, Pawn otherPawn)
{
return otherPawn?.DevelopmentalStage == DevelopmentalStage.Adult &&
p?.DevelopmentalStage == DevelopmentalStage.Adult &&
IdeoUtility.IsVisiblyPregnant(otherPawn);
}
}
}

View File

@ -0,0 +1,73 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Verse;
namespace RJWSexperience.Ideology.Precepts
{
/// <summary>
/// Special Def extension for the Incestuous issue precepts
/// </summary>
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Def loader")]
public class DefExtension_Incest : DefModExtension
{
public List<BloodRelationDegree> allowManualRomanceOnlyFor;
public List<BloodRelationDegreeFactor> bloodRelationDegreeRomanceFactors;
private Dictionary<BloodRelationDegree, float> _relationDegreeFactorsDict;
public bool TryGetRomanceChanceFactor(BloodRelationDegree relationDegree, out float romanceChanceFactor)
{
if (bloodRelationDegreeRomanceFactors.NullOrEmpty())
{
romanceChanceFactor = 1f;
return false;
}
if (_relationDegreeFactorsDict == null)
{
_relationDegreeFactorsDict = new Dictionary<BloodRelationDegree, float>();
foreach (BloodRelationDegreeFactor relationDegreeFactor in bloodRelationDegreeRomanceFactors)
{
_relationDegreeFactorsDict.Add((BloodRelationDegree)relationDegreeFactor.bloodRelationDegree, relationDegreeFactor.romanceChanceFactor);
}
}
return _relationDegreeFactorsDict.TryGetValue(relationDegree, out romanceChanceFactor);
}
public override IEnumerable<string> ConfigErrors()
{
foreach (string error in base.ConfigErrors())
{
yield return error;
}
foreach (BloodRelationDegreeFactor factor in bloodRelationDegreeRomanceFactors)
{
foreach(string error in factor.ConfigErrors())
{
yield return error;
}
}
}
public class BloodRelationDegreeFactor
{
public BloodRelationDegree? bloodRelationDegree;
public float romanceChanceFactor;
public IEnumerable<string> ConfigErrors()
{
if (bloodRelationDegree == null)
{
yield return "<bloodRelationDegree> is empty";
}
if (romanceChanceFactor == 0f)
{
yield return "<romanceChanceFactor> should be > 0";
}
}
}
}
}

View File

@ -2,5 +2,6 @@
{
public class DefExtension_ModifyBestialityMtb : DefExtension_ModifyMtb
{
protected override string TipTemplateKey => "RSI_PreceptTipModifyBestialityMtb";
}
}

View File

@ -2,5 +2,6 @@
{
public class DefExtension_ModifyFappinMtb : DefExtension_ModifyMtb
{
protected override string TipTemplateKey => "RSI_PreceptTipModifyFappinMtb";
}
}

View File

@ -0,0 +1,28 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Verse;
namespace RJWSexperience.Ideology.Precepts
{
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field values are loaded from XML")]
public abstract class DefExtension_ModifyMtb : DefModExtension, IPreceptTipPostfix
{
protected abstract string TipTemplateKey { get; }
public float multiplier = 1f;
public string GetTip() => TipTemplateKey.Translate(multiplier.ToString());
public override IEnumerable<string> ConfigErrors()
{
if (multiplier == 1f)
{
yield return "There is no point if <multiplier> is 1";
}
else if (multiplier <= 0f)
{
yield return "<multiplier> must be > 0";
}
}
}
}

View File

@ -2,5 +2,6 @@
{
public class DefExtension_ModifyNecroMtb : DefExtension_ModifyMtb
{
protected override string TipTemplateKey => "RSI_PreceptTipModifyNecroMtb";
}
}

Some files were not shown because too many files have changed in this diff Show More