mirror of
				https://github.com/amevarashi/RJW-Sexperience.git
				synced 2024-08-14 23:54:08 +00:00 
			
		
		
		
	1.0.1.6
This commit is contained in:
		
							parent
							
								
									1606b006ac
								
							
						
					
					
						commit
						95c8c95a93
					
				
					 40 changed files with 1839 additions and 112 deletions
				
			
		| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 | 
			
		||||
<Manifest>
 | 
			
		||||
	<identifier>RJW Sexperience</identifier>
 | 
			
		||||
	<version>1.0.1.5</version>
 | 
			
		||||
	<version>1.0.1.6</version>
 | 
			
		||||
	<dependencies>
 | 
			
		||||
	</dependencies>
 | 
			
		||||
	<incompatibleWith />
 | 
			
		||||
| 
						 | 
				
			
			@ -9,4 +9,6 @@
 | 
			
		|||
	</loadAfter>
 | 
			
		||||
	<suggests>
 | 
			
		||||
	</suggests>
 | 
			
		||||
  <manifestUri>https://raw.githubusercontent.com/moreoreganostodump/RJW-Sexperience/master/About/Manifest.xml</manifestUri>
 | 
			
		||||
  <downloadUri>https://github.com/moreoreganostodump/RJW-Sexperience</downloadUri>
 | 
			
		||||
</Manifest>
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										41
									
								
								Defs/DutyDefs/Duties_Rituals_sex.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								Defs/DutyDefs/Duties_Rituals_sex.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8" ?>
 | 
			
		||||
<Defs>
 | 
			
		||||
 | 
			
		||||
  <DutyDef>
 | 
			
		||||
    <defName>Gangbang</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.JobGiver_GangbangVictim"/>
 | 
			
		||||
              </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.JobGiver_GangbangVictim"/>
 | 
			
		||||
      </subNodes>
 | 
			
		||||
    </thinkNode>
 | 
			
		||||
  </DutyDef>
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
</Defs>
 | 
			
		||||
							
								
								
									
										66
									
								
								Defs/InteractionDefs/Interactions_Speech_sex.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								Defs/InteractionDefs/Interactions_Speech_sex.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,66 @@
 | 
			
		|||
<?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>
 | 
			
		||||
 | 
			
		||||
</Defs>
 | 
			
		||||
							
								
								
									
										10
									
								
								Defs/JobDefs/Jobs_Ritual_Rape.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								Defs/JobDefs/Jobs_Ritual_Rape.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8" ?>
 | 
			
		||||
 | 
			
		||||
<Defs>
 | 
			
		||||
	<JobDef>
 | 
			
		||||
		<defName>RapeVictim</defName>
 | 
			
		||||
		<driverClass>RJWSexperience.JobDriver_RapeVictim</driverClass>
 | 
			
		||||
		<reportString>rapin' victim</reportString>
 | 
			
		||||
		<casualInterruptible>false</casualInterruptible>
 | 
			
		||||
	</JobDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,25 +0,0 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8" ?>
 | 
			
		||||
<Defs>
 | 
			
		||||
  <PawnRelationDef>
 | 
			
		||||
    <workerClass>PawnRelationWorker_Child</workerClass>
 | 
			
		||||
    <defName>Bastard</defName>
 | 
			
		||||
    <label>bastard</label>
 | 
			
		||||
    <labelFemale>bastard</labelFemale>
 | 
			
		||||
    <importance>190</importance>
 | 
			
		||||
    <diedThought>MySonDied</diedThought>
 | 
			
		||||
    <diedThoughtFemale>MyDaughterDied</diedThoughtFemale>
 | 
			
		||||
    <killedThought>KilledMySon</killedThought>
 | 
			
		||||
    <killedThoughtFemale>KilledMyDaughter</killedThoughtFemale>
 | 
			
		||||
    <lostThought>MySonLost</lostThought>
 | 
			
		||||
    <lostThoughtFemale>MyDaughterLost</lostThoughtFemale>
 | 
			
		||||
    <soldThoughts>
 | 
			
		||||
      <li>SoldMyLovedOne</li>
 | 
			
		||||
    </soldThoughts>
 | 
			
		||||
    <opinionOffset>30</opinionOffset>
 | 
			
		||||
    <generationChanceFactor>1.0</generationChanceFactor>
 | 
			
		||||
    <romanceChanceFactor>0.03</romanceChanceFactor>
 | 
			
		||||
    <incestOpinionOffset>-30</incestOpinionOffset>
 | 
			
		||||
    <implied>true</implied>
 | 
			
		||||
    <familyByBloodRelation>true</familyByBloodRelation>
 | 
			
		||||
  </PawnRelationDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -40,17 +40,21 @@
 | 
			
		|||
        <eventDef>SexWithVeneratedAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Abhorrent</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_KnowsMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>SexWithVeneratedAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Know_Abhorrent</thought>
 | 
			
		||||
        <tag>BeenRaped</tag>
 | 
			
		||||
        <exclusive>true</exclusive>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
        <eventDef>SexWithAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Abhorrent</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_KnowsMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>SexWithAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Know_Abhorrent</thought>
 | 
			
		||||
        <tag>BeenRaped</tag>
 | 
			
		||||
        <exclusive>true</exclusive>
 | 
			
		||||
      </li>
 | 
			
		||||
    </comps>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
| 
						 | 
				
			
			@ -75,17 +79,21 @@
 | 
			
		|||
        <eventDef>SexWithVeneratedAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Horrible</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_KnowsMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>SexWithVeneratedAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Know_Horrible</thought>
 | 
			
		||||
        <tag>BeenRaped</tag>
 | 
			
		||||
        <exclusive>true</exclusive>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
        <eventDef>SexWithAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Horrible</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_KnowsMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>SexWithAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Know_Horrible</thought>
 | 
			
		||||
        <tag>BeenRaped</tag>
 | 
			
		||||
        <exclusive>true</exclusive>
 | 
			
		||||
      </li>
 | 
			
		||||
    </comps>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
| 
						 | 
				
			
			@ -110,17 +118,21 @@
 | 
			
		|||
        <eventDef>SexWithVeneratedAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Disapproved</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_KnowsMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>SexWithVeneratedAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Know_Disapproved</thought>
 | 
			
		||||
        <tag>BeenRaped</tag>
 | 
			
		||||
        <exclusive>true</exclusive>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
        <eventDef>SexWithAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Disapproved</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_KnowsMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>SexWithAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Know_Disapproved</thought>
 | 
			
		||||
        <tag>BeenRaped</tag>
 | 
			
		||||
        <exclusive>true</exclusive>
 | 
			
		||||
      </li>
 | 
			
		||||
    </comps>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
| 
						 | 
				
			
			@ -203,6 +215,17 @@
 | 
			
		|||
        <description>Someone sex with animal</description>
 | 
			
		||||
        <onlyForNonSlaves>true</onlyForNonSlaves>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
        <eventDef>SexWithVeneratedAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Honorable</thought>
 | 
			
		||||
        <onlyForNonSlaves>true</onlyForNonSlaves>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_KnowsMemoryThought">
 | 
			
		||||
        <eventDef>SexWithVeneratedAnimal</eventDef>
 | 
			
		||||
        <thought>Bestiality_Know_Honorable</thought>
 | 
			
		||||
        <description>Someone sex with animal</description>
 | 
			
		||||
        <onlyForNonSlaves>true</onlyForNonSlaves>
 | 
			
		||||
      </li>
 | 
			
		||||
    </comps>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
  
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,6 +48,9 @@
 | 
			
		|||
    <displayOrderInIssue>40</displayOrderInIssue>
 | 
			
		||||
    <displayOrderInImpact>1000</displayOrderInImpact>
 | 
			
		||||
    <defaultSelectionWeight>30</defaultSelectionWeight>
 | 
			
		||||
    <exclusionTags>
 | 
			
		||||
      <li>RapeBad</li>
 | 
			
		||||
    </exclusionTags>
 | 
			
		||||
    <conflictingMemes>
 | 
			
		||||
      <li>Rapist</li>
 | 
			
		||||
    </conflictingMemes>
 | 
			
		||||
| 
						 | 
				
			
			@ -97,6 +100,9 @@
 | 
			
		|||
    <displayOrderInIssue>30</displayOrderInIssue>
 | 
			
		||||
    <displayOrderInImpact>1000</displayOrderInImpact>
 | 
			
		||||
    <defaultSelectionWeight>30</defaultSelectionWeight>
 | 
			
		||||
    <exclusionTags>
 | 
			
		||||
      <li>RapeBad</li>
 | 
			
		||||
    </exclusionTags>
 | 
			
		||||
    <conflictingMemes>
 | 
			
		||||
      <li>Rapist</li>
 | 
			
		||||
    </conflictingMemes>
 | 
			
		||||
| 
						 | 
				
			
			@ -135,6 +141,9 @@
 | 
			
		|||
    <displayOrderInIssue>20</displayOrderInIssue>
 | 
			
		||||
    <displayOrderInImpact>1000</displayOrderInImpact>
 | 
			
		||||
    <defaultSelectionWeight>20</defaultSelectionWeight>
 | 
			
		||||
    <exclusionTags>
 | 
			
		||||
      <li>RapeBad</li>
 | 
			
		||||
    </exclusionTags>
 | 
			
		||||
    <conflictingMemes>
 | 
			
		||||
      <li>Rapist</li>
 | 
			
		||||
    </conflictingMemes>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										51
									
								
								Defs/PreceptDefs/Precepts_Ritual_sex.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								Defs/PreceptDefs/Precepts_Ritual_sex.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
<?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>
 | 
			
		||||
    <allowStackingRitualObligationAlerts>true</allowStackingRitualObligationAlerts>
 | 
			
		||||
    <exclusionTags>
 | 
			
		||||
      <li>RapeBad</li>
 | 
			
		||||
    </exclusionTags>
 | 
			
		||||
    <requiredMemes>
 | 
			
		||||
      <li>Rapist</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>
 | 
			
		||||
    <allowStackingRitualObligationAlerts>true</allowStackingRitualObligationAlerts>
 | 
			
		||||
    <requiredMemes>
 | 
			
		||||
      <li>Zoophile</li>
 | 
			
		||||
    </requiredMemes>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -55,33 +55,41 @@
 | 
			
		|||
    <displayOrderInImpact>1000</displayOrderInImpact>
 | 
			
		||||
    <defaultSelectionWeight>100</defaultSelectionWeight>
 | 
			
		||||
    <comps>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>AnalSex</eventDef>
 | 
			
		||||
        <thought>Sex_Promiscuous</thought>
 | 
			
		||||
        <recordDef>Lust</recordDef>
 | 
			
		||||
        <recordoffset>2.0</recordoffset>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>AnalSex</eventDef>
 | 
			
		||||
        <thought>Sex_Know_Promiscuous</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>OralSex</eventDef>
 | 
			
		||||
        <thought>Sex_Promiscuous</thought>
 | 
			
		||||
        <recordDef>Lust</recordDef>
 | 
			
		||||
        <recordoffset>2.0</recordoffset>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>OralSex</eventDef>
 | 
			
		||||
        <thought>Sex_Know_Promiscuous</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>MiscSex</eventDef>
 | 
			
		||||
        <thought>Sex_Promiscuous</thought>
 | 
			
		||||
        <recordDef>Lust</recordDef>
 | 
			
		||||
        <recordoffset>2.0</recordoffset>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>MiscSex</eventDef>
 | 
			
		||||
        <thought>Sex_Know_Promiscuous</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>PromiscuousSex</eventDef>
 | 
			
		||||
        <thought>Sex_Promiscuous</thought>
 | 
			
		||||
        <recordDef>Lust</recordDef>
 | 
			
		||||
        <recordoffset>3.0</recordoffset>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>PromiscuousSex</eventDef>
 | 
			
		||||
| 
						 | 
				
			
			@ -100,33 +108,41 @@
 | 
			
		|||
    <displayOrderInImpact>1000</displayOrderInImpact>
 | 
			
		||||
    <defaultSelectionWeight>10</defaultSelectionWeight>
 | 
			
		||||
    <comps>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>VaginalSex</eventDef>
 | 
			
		||||
        <thought>Sex_Promiscuous</thought>
 | 
			
		||||
        <recordDef>Lust</recordDef>
 | 
			
		||||
        <recordoffset>2.0</recordoffset>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>VaginalSex</eventDef>
 | 
			
		||||
        <thought>Sex_Know_Promiscuous</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>OralSex</eventDef>
 | 
			
		||||
        <thought>Sex_Promiscuous</thought>
 | 
			
		||||
        <recordDef>Lust</recordDef>
 | 
			
		||||
        <recordoffset>2.0</recordoffset>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>OralSex</eventDef>
 | 
			
		||||
        <thought>Sex_Know_Promiscuous</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>MiscSex</eventDef>
 | 
			
		||||
        <thought>Sex_Promiscuous</thought>
 | 
			
		||||
        <recordDef>Lust</recordDef>
 | 
			
		||||
        <recordoffset>2.0</recordoffset>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>MiscSex</eventDef>
 | 
			
		||||
        <thought>Sex_Know_Promiscuous</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>PromiscuousSex</eventDef>
 | 
			
		||||
        <thought>Sex_Promiscuous</thought>
 | 
			
		||||
        <recordDef>Lust</recordDef>
 | 
			
		||||
        <recordoffset>3.0</recordoffset>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>PromiscuousSex</eventDef>
 | 
			
		||||
| 
						 | 
				
			
			@ -145,33 +161,41 @@
 | 
			
		|||
    <displayOrderInImpact>1000</displayOrderInImpact>
 | 
			
		||||
    <defaultSelectionWeight>5</defaultSelectionWeight>
 | 
			
		||||
    <comps>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>VaginalSex</eventDef>
 | 
			
		||||
        <thought>Sex_Promiscuous</thought>
 | 
			
		||||
        <recordDef>Lust</recordDef>
 | 
			
		||||
        <recordoffset>2.0</recordoffset>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>VaginalSex</eventDef>
 | 
			
		||||
        <thought>Sex_Know_Promiscuous</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>AnalSex</eventDef>
 | 
			
		||||
        <thought>Sex_Promiscuous</thought>
 | 
			
		||||
        <recordDef>Lust</recordDef>
 | 
			
		||||
        <recordoffset>2.0</recordoffset>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>AnalSex</eventDef>
 | 
			
		||||
        <thought>Sex_Know_Promiscuous</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>MiscSex</eventDef>
 | 
			
		||||
        <thought>Sex_Promiscuous</thought>
 | 
			
		||||
        <recordDef>Lust</recordDef>
 | 
			
		||||
        <recordoffset>2.0</recordoffset>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>MiscSex</eventDef>
 | 
			
		||||
        <thought>Sex_Know_Promiscuous</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>PromiscuousSex</eventDef>
 | 
			
		||||
        <thought>Sex_Promiscuous</thought>
 | 
			
		||||
        <recordDef>Lust</recordDef>
 | 
			
		||||
        <recordoffset>3.0</recordoffset>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>PromiscuousSex</eventDef>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										206
									
								
								Defs/PreceptDefs/Precepts_Submissive.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										206
									
								
								Defs/PreceptDefs/Precepts_Submissive.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,206 @@
 | 
			
		|||
<?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="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>WasRaped</eventDef>
 | 
			
		||||
        <thought>BeenRaped_Submissive</thought>
 | 
			
		||||
        <tag>Male, BeenRaped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>WasRaped</eventDef>
 | 
			
		||||
        <thought>BeenRaped_NotSubmissive</thought>
 | 
			
		||||
        <tag>Female, BeenRaped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>Raped</eventDef>
 | 
			
		||||
        <thought>Raped_Know_NotBeingSubmissive</thought>
 | 
			
		||||
        <description>not obedient</description>
 | 
			
		||||
        <tag>Female, Raped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>WasRapedPrisoner</eventDef>
 | 
			
		||||
        <thought>BeenRaped_Submissive</thought>
 | 
			
		||||
        <tag>Male, BeenRaped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>WasRapedPrisoner</eventDef>
 | 
			
		||||
        <thought>BeenRaped_NotSubmissive</thought>
 | 
			
		||||
        <tag>Female, BeenRaped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>RapedPrisoner</eventDef>
 | 
			
		||||
        <thought>Raped_Know_NotBeingSubmissive</thought>
 | 
			
		||||
        <description>not obedient</description>
 | 
			
		||||
        <tag>Female, Raped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>WasRapedSlave</eventDef>
 | 
			
		||||
        <thought>BeenRaped_Submissive</thought>
 | 
			
		||||
        <tag>Male, BeenRaped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>WasRapedSlave</eventDef>
 | 
			
		||||
        <thought>BeenRaped_NotSubmissive</thought>
 | 
			
		||||
        <tag>Female, BeenRaped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>RapedSlave</eventDef>
 | 
			
		||||
        <thought>Raped_Know_NotBeingSubmissive</thought>
 | 
			
		||||
        <description>not obedient</description>
 | 
			
		||||
        <tag>Female, Raped</tag>
 | 
			
		||||
      </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="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>WasRaped</eventDef>
 | 
			
		||||
        <thought>BeenRaped_Submissive</thought>
 | 
			
		||||
        <tag>Female, BeenRaped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>WasRaped</eventDef>
 | 
			
		||||
        <thought>BeenRaped_NotSubmissive</thought>
 | 
			
		||||
        <tag>Male, BeenRaped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>Raped</eventDef>
 | 
			
		||||
        <thought>Raped_Know_NotBeingSubmissive</thought>
 | 
			
		||||
        <description>not obedient</description>
 | 
			
		||||
        <tag>Male, Raped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>WasRapedPrisoner</eventDef>
 | 
			
		||||
        <thought>BeenRaped_Submissive</thought>
 | 
			
		||||
        <tag>Female, BeenRaped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>WasRapedPrisoner</eventDef>
 | 
			
		||||
        <thought>BeenRaped_NotSubmissive</thought>
 | 
			
		||||
        <tag>Male, BeenRaped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>RapedPrisoner</eventDef>
 | 
			
		||||
        <thought>Raped_Know_NotBeingSubmissive</thought>
 | 
			
		||||
        <description>not obedient</description>
 | 
			
		||||
        <tag>Male, Raped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>WasRapedSlave</eventDef>
 | 
			
		||||
        <thought>BeenRaped_Submissive</thought>
 | 
			
		||||
        <tag>Female, BeenRaped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_SelfTookThoughtTagged">
 | 
			
		||||
        <eventDef>WasRapedSlave</eventDef>
 | 
			
		||||
        <thought>BeenRaped_NotSubmissive</thought>
 | 
			
		||||
        <tag>Male, BeenRaped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.PreceptComp_KnowsMemoryThoughtTagged">
 | 
			
		||||
        <eventDef>RapedSlave</eventDef>
 | 
			
		||||
        <thought>Raped_Know_NotBeingSubmissive</thought>
 | 
			
		||||
        <description>not obedient</description>
 | 
			
		||||
        <tag>Male, Raped</tag>
 | 
			
		||||
      </li>
 | 
			
		||||
    </comps>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
  <!-- Thoughts -->
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  <RJWSexperience.ThoughtDef_Recordbased>
 | 
			
		||||
    <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>
 | 
			
		||||
  </RJWSexperience.ThoughtDef_Recordbased>
 | 
			
		||||
 | 
			
		||||
  <RJWSexperience.ThoughtDef_Recordbased>
 | 
			
		||||
    <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>
 | 
			
		||||
  </RJWSexperience.ThoughtDef_Recordbased>
 | 
			
		||||
 | 
			
		||||
  <ThoughtDef>
 | 
			
		||||
    <defName>Raped_Know_NotBeingSubmissive</defName>
 | 
			
		||||
    <thoughtClass>Thought_MemorySocial</thoughtClass>
 | 
			
		||||
    <durationDays>15</durationDays>
 | 
			
		||||
    <stackLimit>100</stackLimit>
 | 
			
		||||
    <stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
 | 
			
		||||
    <nullifyingTraits>
 | 
			
		||||
      <li>Masochist</li>
 | 
			
		||||
    </nullifyingTraits>
 | 
			
		||||
    <stages>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>not obedient</label>
 | 
			
		||||
        <baseOpinionOffset>-30</baseOpinionOffset>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
							
								
								
									
										35
									
								
								Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,35 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8" ?>
 | 
			
		||||
<Defs>
 | 
			
		||||
  <RitualPatternDef Abstract="True" Name="GangbangBase" ParentName="CelebrationPartyChat">
 | 
			
		||||
    <nameMaker>NamerRitualFestival</nameMaker>
 | 
			
		||||
    <canStartAnytime>true</canStartAnytime>
 | 
			
		||||
    <ritualObligationTargetFilter>RitualSpotOrAltar</ritualObligationTargetFilter>
 | 
			
		||||
    <ritualExpectedPostfix>{0} {1} want to carry out the gangbang as soon as possible.</ritualExpectedPostfix>
 | 
			
		||||
    <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 prisoner. If the organizer cannot fuck victim, the ritual will be canceled.</descOverride>
 | 
			
		||||
    <iconPathOverride>UI/Issues/Gangbang</iconPathOverride>
 | 
			
		||||
    <ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
 | 
			
		||||
    <patternGroupTag/>
 | 
			
		||||
    <ritualOutcomeEffect>Gangbang</ritualOutcomeEffect>
 | 
			
		||||
  </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>
 | 
			
		||||
    <patternGroupTag/>
 | 
			
		||||
    <ritualOutcomeEffect>BestialGangbang</ritualOutcomeEffect>
 | 
			
		||||
  </RitualPatternDef>
 | 
			
		||||
  
 | 
			
		||||
</Defs>
 | 
			
		||||
							
								
								
									
										272
									
								
								Defs/Rituals/Ritual_Behaviors_sex.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										272
									
								
								Defs/Rituals/Ritual_Behaviors_sex.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,272 @@
 | 
			
		|||
<?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.RitualBehaviorWorker_Gangbang</workerClass>
 | 
			
		||||
    <roles>
 | 
			
		||||
      <li Class="RJWSexperience.RitualRole_RapeVictim">
 | 
			
		||||
        <label>victim</label>
 | 
			
		||||
        <missingDesc>a victim</missingDesc>
 | 
			
		||||
        <id>victim</id>
 | 
			
		||||
        <maxCount>1</maxCount>
 | 
			
		||||
        <required>True</required>
 | 
			
		||||
        <countsAsParticipant>False</countsAsParticipant>
 | 
			
		||||
        <ignoreBleeding>true</ignoreBleeding>
 | 
			
		||||
      </li>
 | 
			
		||||
    </roles>
 | 
			
		||||
    <stages Inherit="False">
 | 
			
		||||
      <li Class="RJWSexperience.RitualStage_InteractWithVictim_All">
 | 
			
		||||
        <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.RitualStage_InteractWithVictim_All">
 | 
			
		||||
        <defaultDuty>Gangbang</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>
 | 
			
		||||
          <li>
 | 
			
		||||
            <roleId>victim</roleId>
 | 
			
		||||
            <dutyDef>LayDownAwake</dutyDef>
 | 
			
		||||
          </li>
 | 
			
		||||
        </roleBehaviors>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.RitualStage_InteractWithVictim_All">
 | 
			
		||||
        <defaultDuty>Gangbang</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>
 | 
			
		||||
          <li>
 | 
			
		||||
            <roleId>victim</roleId>
 | 
			
		||||
            <dutyDef>LayDownAwake</dutyDef>
 | 
			
		||||
          </li>
 | 
			
		||||
        </roleBehaviors>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </RitualBehaviorDef>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  <RitualBehaviorDef ParentName="GangbangBehaviorBase">
 | 
			
		||||
    <defName>GangbangByAnimal</defName>
 | 
			
		||||
    <roles>
 | 
			
		||||
      <li Class="RJWSexperience.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.RitualRole_AnimalBreeder">
 | 
			
		||||
        <label>breeder</label>
 | 
			
		||||
        <id>animal</id>
 | 
			
		||||
        <maxCount>8</maxCount>
 | 
			
		||||
        <required>True</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.RitualStage_InteractWithVictim">
 | 
			
		||||
        <defaultDuty>Spectate</defaultDuty>
 | 
			
		||||
        <essential>True</essential>
 | 
			
		||||
        <endTriggers>
 | 
			
		||||
          <li Class="StageEndTrigger_DurationPercentage">
 | 
			
		||||
            <percentage>0.9</percentage>
 | 
			
		||||
          </li>
 | 
			
		||||
        </endTriggers>
 | 
			
		||||
        <roleBehaviors>
 | 
			
		||||
          <li>
 | 
			
		||||
            <roleId>animal</roleId>
 | 
			
		||||
            <dutyDef>Gangbang</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>
 | 
			
		||||
  
 | 
			
		||||
</Defs>
 | 
			
		||||
							
								
								
									
										183
									
								
								Defs/Rituals/Ritual_Outcomes_sex.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								Defs/Rituals/Ritual_Outcomes_sex.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,183 @@
 | 
			
		|||
<?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>moralist</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.RitualOutcomeComp_HediffBased">
 | 
			
		||||
        <label>victim broken</label>
 | 
			
		||||
        <qualityOffset>0.2</qualityOffset>
 | 
			
		||||
        <hediffDef>FeelingBroken</hediffDef>
 | 
			
		||||
        <minSeverity>0.3</minSeverity>
 | 
			
		||||
        <roleId>victim</roleId>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.RitualOutcomeComp_HediffBased">
 | 
			
		||||
        <label>victim extremly broken</label>
 | 
			
		||||
        <qualityOffset>0.2</qualityOffset>
 | 
			
		||||
        <hediffDef>FeelingBroken</hediffDef>
 | 
			
		||||
        <minSeverity>0.5</minSeverity>
 | 
			
		||||
        <roleId>victim</roleId>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.RitualOutcomeComp_HediffBased">
 | 
			
		||||
        <label>victim completely broken</label>
 | 
			
		||||
        <qualityOffset>0.4</qualityOffset>
 | 
			
		||||
        <hediffDef>FeelingBroken</hediffDef>
 | 
			
		||||
        <minSeverity>0.9</minSeverity>
 | 
			
		||||
        <roleId>victim</roleId>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.RitualOutcomeComp_NeedBased">
 | 
			
		||||
        <label>statisfied participants</label>
 | 
			
		||||
        <qualityOffset>0.2</qualityOffset>
 | 
			
		||||
        <needDef>Sex</needDef>
 | 
			
		||||
        <minAvgNeed>0.7</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.15</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.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</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>moralist</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.RitualOutcomeComp_HediffBased">
 | 
			
		||||
        <label>breedee broken</label>
 | 
			
		||||
        <qualityOffset>0.3</qualityOffset>
 | 
			
		||||
        <hediffDef>FeelingBroken</hediffDef>
 | 
			
		||||
        <minSeverity>0.3</minSeverity>
 | 
			
		||||
        <roleId>victim</roleId>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.RitualOutcomeComp_HediffBased">
 | 
			
		||||
        <label>breedee extremly broken</label>
 | 
			
		||||
        <qualityOffset>0.3</qualityOffset>
 | 
			
		||||
        <hediffDef>FeelingBroken</hediffDef>
 | 
			
		||||
        <minSeverity>0.5</minSeverity>
 | 
			
		||||
        <roleId>victim</roleId>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.RitualOutcomeComp_HediffBased">
 | 
			
		||||
        <label>breedee completely broken</label>
 | 
			
		||||
        <qualityOffset>0.6</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.15</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.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>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</Defs>
 | 
			
		||||
							
								
								
									
										7
									
								
								Defs/Rituals/Ritual_Targets_sex.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Defs/Rituals/Ritual_Targets_sex.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8" ?>
 | 
			
		||||
<Defs>
 | 
			
		||||
  <RitualObligationTargetFilterDef>
 | 
			
		||||
    <defName>RitualSpotOrAltar_Gangbang</defName>
 | 
			
		||||
    <workerClass>RitualObligationTargetWorker_AnyRitualSpotOrAltar_Scarification</workerClass>
 | 
			
		||||
  </RitualObligationTargetFilterDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
							
								
								
									
										60
									
								
								Defs/ThoughtDefs/Thoughts_Ritual_sex_Quality.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								Defs/ThoughtDefs/Thoughts_Ritual_sex_Quality.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,60 @@
 | 
			
		|||
<?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>
 | 
			
		||||
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,33 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<LanguageData>
 | 
			
		||||
  <RS_Mod_Title>RJW Sexperience</RS_Mod_Title>
 | 
			
		||||
 | 
			
		||||
  <LustStatFactor>Lust: x{0}%</LustStatFactor>
 | 
			
		||||
  <SlaveStatFactor>Slave: x{0}%</SlaveStatFactor>
 | 
			
		||||
  <SlaveStatFactorDefault>Not Slave: x100%</SlaveStatFactorDefault>
 | 
			
		||||
  <MemeStatFactor>Meme: x{0}%</MemeStatFactor>
 | 
			
		||||
 | 
			
		||||
  <RSOption_1_Label>Enable record randomizer</RSOption_1_Label>
 | 
			
		||||
  <RSOption_1_Desc>Randomize pawn's sex records.</RSOption_1_Desc>
 | 
			
		||||
  <RSOption_2_Label>Lust effect power</RSOption_2_Label>
 | 
			
		||||
  <RSOption_2_Desc>Set how much lust affect to sex drive.</RSOption_2_Desc>
 | 
			
		||||
  <RSOption_3_Label>Maximum lust deviation</RSOption_3_Label>
 | 
			
		||||
  <RSOption_3_Desc>Set maximum deviation of lust.
The lust value can be negative depending on its average.</RSOption_3_Desc>
 | 
			
		||||
  <RSOption_4_Label>Average Lust</RSOption_4_Label>
 | 
			
		||||
  <RSOption_4_Desc>Set average of lust.</RSOption_4_Desc>
 | 
			
		||||
  <RSOption_5_Label>Maximum sex count deviation</RSOption_5_Label>
 | 
			
		||||
  <RSOption_5_Desc>Set maximum deviation of sex count.</RSOption_5_Desc>
 | 
			
		||||
  <RSOption_6_Label>Average sex count per year</RSOption_6_Label>
 | 
			
		||||
  <RSOption_6_Desc>Set average sex count.</RSOption_6_Desc>
 | 
			
		||||
  <RSOption_7_Label>Enable slaves get raped experience</RSOption_7_Label>
 | 
			
		||||
  <RSOption_7_Desc>Slaves will have experience of being raped</RSOption_7_Desc>
 | 
			
		||||
  <RSOption_8_Label></RSOption_8_Label>
 | 
			
		||||
  <RSOption_8_Desc> </RSOption_8_Desc>
 | 
			
		||||
  <RSOption_9_Label></RSOption_9_Label>
 | 
			
		||||
  <RSOption_9_Desc> </RSOption_9_Desc>
 | 
			
		||||
  <RSOption_10_Label></RSOption_10_Label>
 | 
			
		||||
  <RSOption_10_Desc> </RSOption_10_Desc>
 | 
			
		||||
  <RSOption_11_Label></RSOption_11_Label>
 | 
			
		||||
  <RSOption_11_Desc> </RSOption_11_Desc>
 | 
			
		||||
 | 
			
		||||
</LanguageData>
 | 
			
		||||
| 
						 | 
				
			
			@ -4,4 +4,5 @@
 | 
			
		|||
  <Rape.label>강간</Rape.label>
 | 
			
		||||
  <Bestiality.label>수간</Bestiality.label>
 | 
			
		||||
  <Incestuos.label>근친상간</Incestuos.label>
 | 
			
		||||
  <Submissive.label>순종적인 성별</Submissive.label>
 | 
			
		||||
</LanguageData>
 | 
			
		||||
| 
						 | 
				
			
			@ -21,10 +21,10 @@
 | 
			
		|||
  <Zoophile.generalRules.rulesStrings.4>memeConcept->수간</Zoophile.generalRules.rulesStrings.4>
 | 
			
		||||
  <Zoophile.generalRules.rulesStrings.5>memeConcept->수간</Zoophile.generalRules.rulesStrings.5>
 | 
			
		||||
  <Zoophile.generalRules.rulesStrings.6>memeLeaderNoun->가축</Zoophile.generalRules.rulesStrings.6>
 | 
			
		||||
  <Zoophile.symbolPacks.0.ideoName>번식모판</Zoophile.symbolPacks.0.ideoName>
 | 
			
		||||
  <Zoophile.symbolPacks.0.ideoName>브리더</Zoophile.symbolPacks.0.ideoName>
 | 
			
		||||
  <Zoophile.symbolPacks.0.theme>번식</Zoophile.symbolPacks.0.theme>
 | 
			
		||||
  <Zoophile.symbolPacks.0.adjective>수간</Zoophile.symbolPacks.0.adjective>
 | 
			
		||||
  <Zoophile.symbolPacks.0.member>번식기</Zoophile.symbolPacks.0.member>
 | 
			
		||||
  <Zoophile.symbolPacks.0.member>브리더</Zoophile.symbolPacks.0.member>
 | 
			
		||||
  <Zoophile.symbolPacks.1.ideoName>포켓몬스터 갤러리</Zoophile.symbolPacks.1.ideoName>
 | 
			
		||||
  <Zoophile.symbolPacks.1.theme>수간</Zoophile.symbolPacks.1.theme>
 | 
			
		||||
  <Zoophile.symbolPacks.1.adjective>수간</Zoophile.symbolPacks.1.adjective>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,7 @@
 | 
			
		|||
  <Bestiality_Honorable.label>장려됨</Bestiality_Honorable.label>
 | 
			
		||||
  <Bestiality_Honorable.description>수간은 장려되어야 합니다.</Bestiality_Honorable.description>
 | 
			
		||||
  <Bestiality_Honorable.comps.1.description>수간</Bestiality_Honorable.comps.1.description>
 | 
			
		||||
  
 | 
			
		||||
  <Rape_Abhorrent.label>혐오스러움</Rape_Abhorrent.label>
 | 
			
		||||
  <Rape_Abhorrent.description>강간은 절대 용납할수 없는 행위입니다.</Rape_Abhorrent.description>
 | 
			
		||||
  <Rape_Abhorrent.comps.1.description>강간</Rape_Abhorrent.comps.1.description>
 | 
			
		||||
| 
						 | 
				
			
			@ -36,6 +37,7 @@
 | 
			
		|||
  <Rape_Honorable.label>자랑스러움</Rape_Honorable.label>
 | 
			
		||||
  <Rape_Honorable.description>강간은 자랑할만한 일입니다.</Rape_Honorable.description>
 | 
			
		||||
  <Rape_Honorable.comps.1.description>강간</Rape_Honorable.comps.1.description>
 | 
			
		||||
 | 
			
		||||
  <Sex_Free.label>자유</Sex_Free.label>
 | 
			
		||||
  <Sex_Free.description>어떠한것도 배척받지 않습니다.</Sex_Free.description>
 | 
			
		||||
  <Sex_VaginalOnly.label>성기만 사용</Sex_VaginalOnly.label>
 | 
			
		||||
| 
						 | 
				
			
			@ -46,6 +48,7 @@
 | 
			
		|||
  <Sex_OralOnly.description>구강성교만이 일반적인 것으로 받아들여집니다. 그 외에는 문란한것으로 간주됩니다.</Sex_OralOnly.description>
 | 
			
		||||
  <Sex_Promiscuous.label>문란함</Sex_Promiscuous.label>
 | 
			
		||||
  <Sex_Promiscuous.description>문란한 성생활이 선호됩니다.</Sex_Promiscuous.description>
 | 
			
		||||
 | 
			
		||||
  <Incestuos_Free.label>자유</Incestuos_Free.label>
 | 
			
		||||
  <Incestuos_Free.description>근친상간이 허용됩니다.</Incestuos_Free.description>
 | 
			
		||||
  <Incestuos_Disapproved_CloseOnly.label>가까운 친척만 싫어함</Incestuos_Disapproved_CloseOnly.label>
 | 
			
		||||
| 
						 | 
				
			
			@ -56,4 +59,12 @@
 | 
			
		|||
  <Incestuos_Forbidden.description>근친상간은 용납되지 않습니다.</Incestuos_Forbidden.description>
 | 
			
		||||
  <Incestuos_IncestOnly.label>근친만 가능</Incestuos_IncestOnly.label>
 | 
			
		||||
  <Incestuos_IncestOnly.description>순수혈통을 보존하기위해 근친상간만을 허용합니다.</Incestuos_IncestOnly.description>
 | 
			
		||||
 | 
			
		||||
  <Submissive_None.label>없음</Submissive_None.label>
 | 
			
		||||
  <Submissive_None.description>평범합니다.</Submissive_None.description>
 | 
			
		||||
  <Submissive_Male.label>순종적인 남성</Submissive_Male.label>
 | 
			
		||||
  <Submissive_Male.description>남성들은 순종적입니다. 심지어 강간당하더라도 받아들일 것입니다.</Submissive_Male.description>
 | 
			
		||||
  <Submissive_Female.label>순종적인 여성</Submissive_Female.label>
 | 
			
		||||
  <Submissive_Female.description>여성들은 순종적입니다. 심지어 강간당하더라도 받아들일 것입니다.</Submissive_Female.description>
 | 
			
		||||
  
 | 
			
		||||
</LanguageData>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<LanguageData>
 | 
			
		||||
  <Gangbang.comps.2.label>제단에서 시작</Gangbang.comps.2.label>
 | 
			
		||||
  <Gangbang.comps.3.label>희생양 무너짐</Gangbang.comps.3.label>
 | 
			
		||||
  <Gangbang.comps.4.label>제단에서 시작</Gangbang.comps.4.label>
 | 
			
		||||
  <Gangbang.comps.5.label>제단에서 시작</Gangbang.comps.5.label>
 | 
			
		||||
  <Gangbang.comps.6.label>제단에서 시작</Gangbang.comps.6.label>
 | 
			
		||||
  
 | 
			
		||||
</LanguageData>
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +41,10 @@
 | 
			
		|||
  <Sex_Know_IncestMarriage_Disapproved.stages.0.label>근친</Sex_Know_IncestMarriage_Disapproved.stages.0.label>
 | 
			
		||||
  <Sex_Know_IncestMarriage_Forbidden.stages.0.label>근친</Sex_Know_IncestMarriage_Forbidden.stages.0.label>
 | 
			
		||||
  <Sex_Know_Incest_Violated.stages.0.label>혈족이 아닌사람과 성관계</Sex_Know_Incest_Violated.stages.0.label>
 | 
			
		||||
  <Sex_Know_IncestMarriage_Violated.stages.0.label>혈통을 더럽힘</Sex_Know_IncestMarriage_Violated.stages.0.label>
 | 
			
		||||
  <BeenRaped_Submissive.stages.0.label>강간당함</BeenRaped_Submissive.stages.0.label>
 | 
			
		||||
  <BeenRaped_Submissive.stages.0.description>받아들여야해. 하지만 기분이 안좋아.</BeenRaped_Submissive.stages.0.description>
 | 
			
		||||
  <BeenRaped_NotSubmissive.stages.0.label>{0}에게 강간당함</BeenRaped_NotSubmissive.stages.0.label>
 | 
			
		||||
  <BeenRaped_NotSubmissive.stages.0.description>어떻게 감히...</BeenRaped_NotSubmissive.stages.0.description>
 | 
			
		||||
  <Raped_Know_NotBeingSubmissive.stages.0.label>순종적이지 않음</Raped_Know_NotBeingSubmissive.stages.0.label>
 | 
			
		||||
 | 
			
		||||
</LanguageData>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,32 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<LanguageData>
 | 
			
		||||
  <Mod_Title>RJW Sexperience</Mod_Title>
 | 
			
		||||
 | 
			
		||||
  <LustStatFactor>음란함: x{0}%</LustStatFactor>
 | 
			
		||||
  <SlaveStatFactor>노예: x{0}%</SlaveStatFactor>
 | 
			
		||||
  <SlaveStatFactorDefault>노예가 아님: x100%</SlaveStatFactorDefault>
 | 
			
		||||
  <MemeStatFactor>문화 요소: x{0}%</MemeStatFactor>
 | 
			
		||||
 | 
			
		||||
  <RSOption_1_Label>기록 생성기 활성화</RSOption_1_Label>
 | 
			
		||||
  <RSOption_1_Desc>폰의 섹스기록을 무작위로 생성합니다.</RSOption_1_Desc>
 | 
			
		||||
  <RSOption_2_Label>음란함 효과 강도</RSOption_2_Label>
 | 
			
		||||
  <RSOption_2_Desc>음란함이 성욕에 얼마나 영향을 미칠지 설정합니다.</RSOption_2_Desc>
 | 
			
		||||
  <RSOption_3_Label>음란함 최대 편차</RSOption_3_Label>
 | 
			
		||||
  <RSOption_3_Desc>음란함의 최대 편차를 설정합니다.
평균에 따라 음수가 나올수도 있습니다.</RSOption_3_Desc>
 | 
			
		||||
  <RSOption_4_Label>평균 음란함</RSOption_4_Label>
 | 
			
		||||
  <RSOption_4_Desc>음란함의 평균을 설정합니다.</RSOption_4_Desc>
 | 
			
		||||
  <RSOption_5_Label>섹스횟수 최대 편차</RSOption_5_Label>
 | 
			
		||||
  <RSOption_5_Desc>섹스횟수의 최대 편차를 설정합니다.</RSOption_5_Desc>
 | 
			
		||||
  <RSOption_6_Label>연평균 섹스 횟수</RSOption_6_Label>
 | 
			
		||||
  <RSOption_6_Desc>평균 섹스 횟수를 설정합니다.</RSOption_6_Desc>
 | 
			
		||||
  <RSOption_7_Label>노예 강간 경험 활성화</RSOption_7_Label>
 | 
			
		||||
  <RSOption_7_Desc>활성화할 경우 노예는 강간당한 경험을 가집니다.</RSOption_7_Desc>
 | 
			
		||||
  <RSOption_8_Label></RSOption_8_Label>
 | 
			
		||||
  <RSOption_8_Desc> </RSOption_8_Desc>
 | 
			
		||||
  <RSOption_9_Label></RSOption_9_Label>
 | 
			
		||||
  <RSOption_9_Desc> </RSOption_9_Desc>
 | 
			
		||||
  <RSOption_10_Label></RSOption_10_Label>
 | 
			
		||||
  <RSOption_10_Desc> </RSOption_10_Desc>
 | 
			
		||||
  <RSOption_11_Label></RSOption_11_Label>
 | 
			
		||||
  <RSOption_11_Desc> </RSOption_11_Desc>
 | 
			
		||||
</LanguageData>
 | 
			
		||||
| 
						 | 
				
			
			@ -79,4 +79,24 @@
 | 
			
		|||
			</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>
 | 
			
		||||
							
								
								
									
										149
									
								
								RJWSexperience/RJWSexperience/Configurations.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								RJWSexperience/RJWSexperience/Configurations.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,149 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
using UnityEngine;
 | 
			
		||||
using Verse;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace RJWSexperience
 | 
			
		||||
{
 | 
			
		||||
    public class Configurations : ModSettings
 | 
			
		||||
    {
 | 
			
		||||
        public const float MaxInitialLustDefault = 500;
 | 
			
		||||
        public const float AvgLustDefault = 0;
 | 
			
		||||
        public const float MaxSexCountDeviationDefault = 90;
 | 
			
		||||
        public const float LustEffectPowerDefault = 0.5f;
 | 
			
		||||
        public const float SexPerYearDefault = 30;
 | 
			
		||||
        public const bool SlavesBeenRapedExpDefault = true;
 | 
			
		||||
        public const bool EnableStatRandomizerDefault = true;
 | 
			
		||||
 | 
			
		||||
        public static float MaxLustDeviation = MaxInitialLustDefault;
 | 
			
		||||
        public static float AvgLust = AvgLustDefault;
 | 
			
		||||
        public static float MaxSexCountDeviation = MaxSexCountDeviationDefault;
 | 
			
		||||
        public static float LustEffectPower = LustEffectPowerDefault;
 | 
			
		||||
        public static float SexPerYear = SexPerYearDefault;
 | 
			
		||||
        public static bool SlavesBeenRapedExp = SlavesBeenRapedExpDefault;
 | 
			
		||||
        public static bool EnableRecordRandomizer = EnableStatRandomizerDefault;
 | 
			
		||||
 | 
			
		||||
        public static void ResettoDefault()
 | 
			
		||||
        {
 | 
			
		||||
            MaxLustDeviation = MaxInitialLustDefault;
 | 
			
		||||
            AvgLust = AvgLustDefault;
 | 
			
		||||
            MaxSexCountDeviation = MaxSexCountDeviationDefault;
 | 
			
		||||
            LustEffectPower = LustEffectPowerDefault;
 | 
			
		||||
            SexPerYear = SexPerYearDefault;
 | 
			
		||||
            SlavesBeenRapedExp = SlavesBeenRapedExpDefault;
 | 
			
		||||
            EnableRecordRandomizer = EnableStatRandomizerDefault;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void ExposeData()
 | 
			
		||||
        {
 | 
			
		||||
            Scribe_Values.Look(ref MaxLustDeviation, "MaxLustDeviation", MaxLustDeviation);
 | 
			
		||||
            Scribe_Values.Look(ref AvgLust, "AvgLust", AvgLust);
 | 
			
		||||
            Scribe_Values.Look(ref MaxSexCountDeviation, "MaxSexCountDeviation", MaxSexCountDeviation);
 | 
			
		||||
            Scribe_Values.Look(ref LustEffectPower, "LustEffectPower", LustEffectPower);
 | 
			
		||||
            Scribe_Values.Look(ref SexPerYear, "SexPerYear", SexPerYear);
 | 
			
		||||
            Scribe_Values.Look(ref SlavesBeenRapedExp, "SlavesBeenRapedExp", SlavesBeenRapedExp);
 | 
			
		||||
            Scribe_Values.Look(ref EnableRecordRandomizer, "EnableRecordRandomizer", EnableRecordRandomizer);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            base.ExposeData();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class RJWSexperience : Mod
 | 
			
		||||
    {
 | 
			
		||||
        private readonly Configurations config;
 | 
			
		||||
        private static Vector2 scroll;
 | 
			
		||||
 | 
			
		||||
        public RJWSexperience(ModContentPack content) : base(content)
 | 
			
		||||
        {
 | 
			
		||||
            config = GetSettings<Configurations>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string SettingsCategory()
 | 
			
		||||
        {
 | 
			
		||||
            return Keyed.Mod_Title;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void DoSettingsWindowContents(Rect inRect)
 | 
			
		||||
        {
 | 
			
		||||
            int Adjuster;
 | 
			
		||||
            Rect outRect = new Rect(0f, 30f, inRect.width, inRect.height - 30f);
 | 
			
		||||
            Rect mainRect = new Rect(0f, 0f, inRect.width - 30f, inRect.height + 480f);
 | 
			
		||||
            Listing_Standard listmain = new Listing_Standard();
 | 
			
		||||
            listmain.maxOneColumn = true;
 | 
			
		||||
            Widgets.BeginScrollView(outRect, ref scroll, mainRect);
 | 
			
		||||
            listmain.Begin(mainRect);
 | 
			
		||||
            listmain.Gap(20f);
 | 
			
		||||
 | 
			
		||||
            listmain.CheckboxLabeled(Keyed.Option_1_Label, ref Configurations.EnableRecordRandomizer, Keyed.Option_1_Desc);
 | 
			
		||||
            if (Configurations.EnableRecordRandomizer)
 | 
			
		||||
            {
 | 
			
		||||
                Listing_Standard section = listmain.BeginSection(24f*11f);
 | 
			
		||||
 | 
			
		||||
                LabelwithTextfield(section.GetRect(24f), Keyed.Option_2_Label + " x" + Configurations.LustEffectPower, Keyed.Option_2_Desc, ref Configurations.LustEffectPower, 0f, 100f);
 | 
			
		||||
                Adjuster = (int)(Configurations.LustEffectPower * 1000);
 | 
			
		||||
                //listmain.Label(Keyed.Option_2_Label + " x" + Configurations.LustEffectPower , -1, Keyed.Option_2_Desc);
 | 
			
		||||
                Adjuster = (int)section.Slider(Adjuster, 0, 2000);
 | 
			
		||||
                Configurations.LustEffectPower = (float)Adjuster / 1000;
 | 
			
		||||
 | 
			
		||||
                LabelwithTextfield(section.GetRect(24f), Keyed.Option_3_Label + " " + Configurations.MaxLustDeviation, Keyed.Option_3_Label, ref Configurations.MaxLustDeviation, 0f, 2000f);
 | 
			
		||||
                Adjuster = (int)Configurations.MaxLustDeviation;
 | 
			
		||||
                //listmain.Label(Keyed.Option_3_Label + " " + Configurations.MaxLustDeviation, -1, Keyed.Option_3_Desc);
 | 
			
		||||
                Adjuster = (int)section.Slider(Adjuster, 0, 2000);
 | 
			
		||||
                Configurations.MaxLustDeviation = Adjuster;
 | 
			
		||||
 | 
			
		||||
                LabelwithTextfield(section.GetRect(24f), Keyed.Option_4_Label + " " + Configurations.AvgLust, Keyed.Option_4_Desc, ref Configurations.AvgLust, -1000f, 1000f);
 | 
			
		||||
                Adjuster = (int)Configurations.AvgLust;
 | 
			
		||||
                //listmain.Label(Keyed.Option_4_Label + " " + Configurations.AvgLust, -1, Keyed.Option_4_Desc);
 | 
			
		||||
                Adjuster = (int)section.Slider(Adjuster, -1000, 1000);
 | 
			
		||||
                Configurations.AvgLust = Adjuster;
 | 
			
		||||
 | 
			
		||||
                LabelwithTextfield(section.GetRect(24f), Keyed.Option_5_Label + " " + Configurations.MaxSexCountDeviation, Keyed.Option_5_Desc, ref Configurations.MaxSexCountDeviation, 0f, 2000f);
 | 
			
		||||
                Adjuster = (int)Configurations.MaxSexCountDeviation;
 | 
			
		||||
                //listmain.Label(Keyed.Option_5_Label + " " + Configurations.MaxSexCountDeviation, -1, Keyed.Option_5_Desc);
 | 
			
		||||
                Adjuster = (int)section.Slider(Adjuster, 0, 2000);
 | 
			
		||||
                Configurations.MaxSexCountDeviation = Adjuster;
 | 
			
		||||
 | 
			
		||||
                LabelwithTextfield(section.GetRect(24f), Keyed.Option_6_Label + " " + Configurations.SexPerYear, Keyed.Option_6_Desc, ref Configurations.SexPerYear, 0f, 2000f);
 | 
			
		||||
                Adjuster = (int)Configurations.SexPerYear;
 | 
			
		||||
                //listmain.Label(Keyed.Option_6_Label + " " + Configurations.SexPerYear, -1, Keyed.Option_6_Desc);
 | 
			
		||||
                Adjuster = (int)section.Slider(Adjuster, 0, 2000);
 | 
			
		||||
                Configurations.SexPerYear = Adjuster;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                section.CheckboxLabeled(Keyed.Option_7_Label, ref Configurations.SlavesBeenRapedExp, Keyed.Option_7_Desc);
 | 
			
		||||
 | 
			
		||||
                listmain.EndSection(section);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if (listmain.ButtonText("reset to default"))
 | 
			
		||||
            {
 | 
			
		||||
                Configurations.ResettoDefault();
 | 
			
		||||
            }
 | 
			
		||||
            listmain.End();
 | 
			
		||||
            Widgets.EndScrollView();
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void LabelwithTextfield(Rect rect, string label, string tooltip, ref float value, float min, float max)
 | 
			
		||||
        {
 | 
			
		||||
            Rect textfieldRect = new Rect(rect.xMax - 100f, rect.y, 100f, rect.height);
 | 
			
		||||
            string valuestr = value.ToString();
 | 
			
		||||
            Widgets.Label(rect, label);
 | 
			
		||||
            Widgets.TextFieldNumeric(textfieldRect,ref value, ref valuestr, min, max);
 | 
			
		||||
            Widgets.DrawHighlightIfMouseover(rect);
 | 
			
		||||
            TooltipHandler.TipRegion(rect, tooltip);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -11,11 +11,35 @@ namespace RJWSexperience
 | 
			
		|||
{
 | 
			
		||||
    public static class Keyed
 | 
			
		||||
    {
 | 
			
		||||
        public static string LustStatFactor(float value) => "LustStatFactor".Translate(value);
 | 
			
		||||
        public static string SlaveStatFactor(float value) => "SlaveStatFactor".Translate(value);
 | 
			
		||||
        public static string MemeStatFactor(float value) => "MemeStatFactor".Translate(value);
 | 
			
		||||
        public static string LustStatFactor(string value) => "LustStatFactor".Translate(value);
 | 
			
		||||
        public static string SlaveStatFactor(string value) => "SlaveStatFactor".Translate(value);
 | 
			
		||||
        public static string MemeStatFactor(string value) => "MemeStatFactor".Translate(value);
 | 
			
		||||
 | 
			
		||||
        public static readonly string Mod_Title = "RS_Mod_Title".Translate();
 | 
			
		||||
        public static readonly string SlaveStatFactorDefault = "SlaveStatFactorDefault".Translate();
 | 
			
		||||
 | 
			
		||||
        public static readonly string Option_1_Label = "RSOption_1_Label".Translate();
 | 
			
		||||
        public static readonly string Option_1_Desc  = "RSOption_1_Desc".Translate();
 | 
			
		||||
        public static readonly string Option_2_Label = "RSOption_2_Label".Translate();
 | 
			
		||||
        public static readonly string Option_2_Desc = "RSOption_2_Desc".Translate();
 | 
			
		||||
        public static readonly string Option_3_Label = "RSOption_3_Label".Translate();
 | 
			
		||||
        public static readonly string Option_3_Desc = "RSOption_3_Desc".Translate();
 | 
			
		||||
        public static readonly string Option_4_Label = "RSOption_4_Label".Translate();
 | 
			
		||||
        public static readonly string Option_4_Desc = "RSOption_4_Desc".Translate();
 | 
			
		||||
        public static readonly string Option_5_Label = "RSOption_5_Label".Translate();
 | 
			
		||||
        public static readonly string Option_5_Desc = "RSOption_5_Desc".Translate();
 | 
			
		||||
        public static readonly string Option_6_Label = "RSOption_6_Label".Translate();
 | 
			
		||||
        public static readonly string Option_6_Desc = "RSOption_6_Desc".Translate();
 | 
			
		||||
        public static readonly string Option_7_Label = "RSOption_7_Label".Translate();
 | 
			
		||||
        public static readonly string Option_7_Desc = "RSOption_7_Desc".Translate();
 | 
			
		||||
        public static readonly string Option_8_Label = "RSOption_8_Label".Translate();
 | 
			
		||||
        public static readonly string Option_8_Desc = "RSOption_8_Desc".Translate();
 | 
			
		||||
        public static readonly string Option_9_Label = "RSOption_9_Label".Translate();
 | 
			
		||||
        public static readonly string Option_9_Desc = "RSOption_9_Desc".Translate();
 | 
			
		||||
        public static readonly string Option_10_Label = "RSOption_10_Label".Translate();
 | 
			
		||||
        public static readonly string Option_10_Desc = "RSOption_10_Desc".Translate();
 | 
			
		||||
        public static readonly string Option_11_Label = "RSOption_11_Label".Translate();
 | 
			
		||||
        public static readonly string Option_11_Desc = "RSOption_11_Desc".Translate();
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,15 +17,18 @@ namespace RJWSexperience
 | 
			
		|||
	public static class HETag
 | 
			
		||||
    {
 | 
			
		||||
		public const string Incestous = "[Incestuos]";
 | 
			
		||||
		public const string Raped = "[Raped]";
 | 
			
		||||
		public const string BeenRaped = "[BeenRaped]";
 | 
			
		||||
		public const string Rape = "[Rape]";
 | 
			
		||||
		public static string Gender(Pawn pawn) => "[" + pawn.gender + "]";
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	public class PreceptComp_SelfTookThoughtTagged : PreceptComp_SelfTookMemoryThought
 | 
			
		||||
	{
 | 
			
		||||
		public string tag;
 | 
			
		||||
		public bool exclusive = false;
 | 
			
		||||
 | 
			
		||||
		public RecordDef recordDef;
 | 
			
		||||
		public float? recordoffset;
 | 
			
		||||
 | 
			
		||||
		public PreceptComp_SelfTookThoughtTagged() { }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -35,19 +38,75 @@ namespace RJWSexperience
 | 
			
		|||
            {
 | 
			
		||||
				if (ev.args.TryGetArg(HistoryEventArgsNamesCustom.Tag, out string tags))
 | 
			
		||||
				{
 | 
			
		||||
					if (tags.ToLower().Contains(tag.ToLower()) ^ exclusive) base.Notify_MemberTookAction(ev, precept, canApplySelfTookThoughts);
 | 
			
		||||
					if (tags.ContainAll(tag.Replace(" ","").Split(',')) ^ exclusive)
 | 
			
		||||
                    {
 | 
			
		||||
						TookThought(ev, precept, canApplySelfTookThoughts);
 | 
			
		||||
						if (ev.args.TryGetArg(HistoryEventArgsNames.Doer, out Pawn pawn))
 | 
			
		||||
                        {
 | 
			
		||||
							AdjustRecord(pawn);
 | 
			
		||||
                        }
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				else if (exclusive)
 | 
			
		||||
				{
 | 
			
		||||
					base.Notify_MemberTookAction(ev, precept, canApplySelfTookThoughts);
 | 
			
		||||
					TookThought(ev, precept, canApplySelfTookThoughts);
 | 
			
		||||
					if (ev.args.TryGetArg(HistoryEventArgsNames.Doer, out Pawn pawn))
 | 
			
		||||
					{
 | 
			
		||||
						AdjustRecord(pawn);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
				base.Notify_MemberTookAction(ev, precept, canApplySelfTookThoughts);
 | 
			
		||||
				TookThought(ev, precept, canApplySelfTookThoughts);
 | 
			
		||||
				if (ev.args.TryGetArg(HistoryEventArgsNames.Doer, out Pawn pawn))
 | 
			
		||||
				{
 | 
			
		||||
					AdjustRecord(pawn);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		protected virtual void TookThought(HistoryEvent ev, Precept precept, bool canApplySelfTookThoughts)
 | 
			
		||||
        {
 | 
			
		||||
			if (ev.def != this.eventDef || !canApplySelfTookThoughts)
 | 
			
		||||
			{
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			Pawn arg = ev.args.GetArg<Pawn>(HistoryEventArgsNames.Doer);
 | 
			
		||||
			Pawn partner = ev.args.GetArg<Pawn>(HistoryEventArgsNamesCustom.Partner);
 | 
			
		||||
			if (arg.needs != null && arg.needs.mood != null && (!this.onlyForNonSlaves || !arg.IsSlave))
 | 
			
		||||
			{
 | 
			
		||||
				if (this.thought.minExpectationForNegativeThought != null && ExpectationsUtility.CurrentExpectationFor(arg).order < this.thought.minExpectationForNegativeThought.order)
 | 
			
		||||
				{
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
				Thought_Memory thought_Memory = ThoughtMaker.MakeThought(this.thought, precept);
 | 
			
		||||
				Thought_KilledInnocentAnimal thought_KilledInnocentAnimal;
 | 
			
		||||
				Pawn animal;
 | 
			
		||||
				if ((thought_KilledInnocentAnimal = (thought_Memory as Thought_KilledInnocentAnimal)) != null && ev.args.TryGetArg<Pawn>(HistoryEventArgsNames.Victim, out animal))
 | 
			
		||||
				{
 | 
			
		||||
					thought_KilledInnocentAnimal.SetAnimal(animal);
 | 
			
		||||
				}
 | 
			
		||||
				Thought_MemoryObservation thought_MemoryObservation;
 | 
			
		||||
				Corpse target;
 | 
			
		||||
				if ((thought_MemoryObservation = (thought_Memory as Thought_MemoryObservation)) != null && ev.args.TryGetArg<Corpse>(HistoryEventArgsNames.Subject, out target))
 | 
			
		||||
				{
 | 
			
		||||
					thought_MemoryObservation.Target = target;
 | 
			
		||||
				}
 | 
			
		||||
				arg.needs.mood.thoughts.memories.TryGainMemory(thought_Memory, partner);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		protected void AdjustRecord(Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
			if (recordDef != null)
 | 
			
		||||
            {
 | 
			
		||||
				pawn.records.AddTo(recordDef, recordoffset ?? 1f);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -73,7 +132,7 @@ namespace RJWSexperience
 | 
			
		|||
            {
 | 
			
		||||
				if (ev.args.TryGetArg(HistoryEventArgsNamesCustom.Tag, out string tags))
 | 
			
		||||
				{
 | 
			
		||||
					if (tags.ToLower().Contains(tag.ToLower()) ^ exclusive) base.Notify_MemberWitnessedAction(ev, precept, member);
 | 
			
		||||
					if (tags.ContainAll(tag.Replace(" ", "").Split(',')) ^ exclusive) base.Notify_MemberWitnessedAction(ev, precept, member);
 | 
			
		||||
				}
 | 
			
		||||
				else if (exclusive)
 | 
			
		||||
				{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,11 +77,16 @@
 | 
			
		|||
    </Reference>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Compile Include="Configurations.cs" />
 | 
			
		||||
    <Compile Include="GoodwillSituationWorker_MemeCompatibility.cs" />
 | 
			
		||||
    <Compile Include="Harmony.cs" />
 | 
			
		||||
    <Compile Include="Rituals\JobGiver_GangbangVictim.cs" />
 | 
			
		||||
    <Compile Include="Keyed.cs" />
 | 
			
		||||
    <Compile Include="PreceptComp_SelftTookThoughtExtended.cs" />
 | 
			
		||||
    <Compile Include="Rimworld_Patch.cs" />
 | 
			
		||||
    <Compile Include="Rituals\RitualBehaviorWorkers.cs" />
 | 
			
		||||
    <Compile Include="Rituals\RitualOutcomeComps.cs" />
 | 
			
		||||
    <Compile Include="Rituals\RitualRoles.cs" />
 | 
			
		||||
    <Compile Include="RJW_Patch.cs" />
 | 
			
		||||
    <Compile Include="StatParts.cs" />
 | 
			
		||||
    <Compile Include="Thought_Recordbased.cs" />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -207,11 +207,13 @@ namespace RJWSexperience
 | 
			
		|||
                if (isHumanReceiving && rape)
 | 
			
		||||
                {
 | 
			
		||||
                    if (human.IsSlave) RapeEffectSlave(human);
 | 
			
		||||
                    if (human.Ideo?.IsVeneratedAnimal(partner) ?? false) Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.TaggedEvent(human, tag + HETag.BeenRaped + HETag.Gender(human), partner));
 | 
			
		||||
                    else Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.TaggedEvent(human, tag + HETag.BeenRaped + HETag.Gender(human), partner));
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    if (human.Ideo?.IsVeneratedAnimal(partner) ?? false) Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.TaggedEvent(human, tag, partner));
 | 
			
		||||
                    else Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.TaggedEvent(human, tag, partner));
 | 
			
		||||
                    if (human.Ideo?.IsVeneratedAnimal(partner) ?? false) Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.TaggedEvent(human, tag + HETag.Gender(human), partner));
 | 
			
		||||
                    else Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.TaggedEvent(human, tag + HETag.Gender(human), partner));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else if (xxx.is_human(partner))
 | 
			
		||||
| 
						 | 
				
			
			@ -220,20 +222,20 @@ namespace RJWSexperience
 | 
			
		|||
                {
 | 
			
		||||
                    if (partner.IsSlave)
 | 
			
		||||
                    {
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedSlave.TaggedEvent(human ,tag + HETag.Rape ,partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedSlave.TaggedEvent(partner, tag + HETag.Raped, human));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedSlave.TaggedEvent(human ,tag + HETag.Rape + HETag.Gender(human), partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedSlave.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human));
 | 
			
		||||
                        RapeEffectSlave(partner);
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (partner.IsPrisoner)
 | 
			
		||||
                    {
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedPrisoner.TaggedEvent(human, tag + HETag.Rape, partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedPrisoner.TaggedEvent(partner, tag + HETag.Raped, human));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedPrisoner.TaggedEvent(human, tag + HETag.Rape + HETag.Gender(human), partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedPrisoner.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human));
 | 
			
		||||
                        partner.guest.will = Math.Max(0, partner.guest.will - 0.2f);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.Raped.TaggedEvent(human, tag + HETag.Rape, partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRaped.TaggedEvent(partner, tag + HETag.Raped, human));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.Raped.TaggedEvent(human, tag + HETag.Rape + HETag.Gender(human), partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRaped.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
| 
						 | 
				
			
			@ -241,12 +243,12 @@ namespace RJWSexperience
 | 
			
		|||
                    HistoryEventDef sexevent = GetSexHistoryDef(sextype);
 | 
			
		||||
                    if (sexevent != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(human, tag, partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(partner, tag, human));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(human, tag + HETag.Gender(human), partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(partner, tag + HETag.Gender(partner), human));
 | 
			
		||||
                        if (sexevent == VariousDefOf.PromiscuousSex)
 | 
			
		||||
                        {
 | 
			
		||||
                            human.records.AddTo(VariousDefOf.Lust, 3.0f);
 | 
			
		||||
                            partner.records.AddTo(VariousDefOf.Lust, 3.0f);
 | 
			
		||||
                            human.records.AddTo(VariousDefOf.Lust, 1.0f);
 | 
			
		||||
                            partner.records.AddTo(VariousDefOf.Lust, 1.0f);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -373,26 +375,33 @@ namespace RJWSexperience
 | 
			
		|||
    {
 | 
			
		||||
        public static void Postfix(Pawn fucker, Pawn fucked, bool invert_opinion, bool ignore_bleeding, bool ignore_gender, ref float __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = fucker.Ideo;
 | 
			
		||||
            if (ideo != null)
 | 
			
		||||
            if (xxx.is_human(fucker))
 | 
			
		||||
            {
 | 
			
		||||
                if (fucker.IsIncest(fucked))
 | 
			
		||||
                Ideo ideo = fucker.Ideo;
 | 
			
		||||
                if (ideo != null)
 | 
			
		||||
                {
 | 
			
		||||
                    if (ideo.HasPrecept(VariousDefOf.Incestuos_IncestOnly)) __result *= 2.0f;
 | 
			
		||||
                    else if (!fucker.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, fucked) ?? false)
 | 
			
		||||
                    if (fucker.IsIncest(fucked))
 | 
			
		||||
                    {
 | 
			
		||||
                        if (ideo.HasPrecept(VariousDefOf.Incestuos_Disapproved)) __result *= 0.5f;
 | 
			
		||||
                        else if (ideo.HasPrecept(VariousDefOf.Incestuos_Forbidden)) __result *= 0.1f;
 | 
			
		||||
                        if (ideo.HasPrecept(VariousDefOf.Incestuos_IncestOnly)) __result *= 2.0f;
 | 
			
		||||
                        else if (!fucker.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, fucked) ?? false)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (ideo.HasPrecept(VariousDefOf.Incestuos_Disapproved)) __result *= 0.5f;
 | 
			
		||||
                            else if (ideo.HasPrecept(VariousDefOf.Incestuos_Forbidden)) __result *= 0.1f;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (fucked.IsAnimal())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) __result *= 2.0f;
 | 
			
		||||
                        else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated))
 | 
			
		||||
                        {
 | 
			
		||||
                            if (ideo.IsVeneratedAnimal(fucked)) __result *= 2.0f;
 | 
			
		||||
                            else __result *= 0.05f;
 | 
			
		||||
                        }
 | 
			
		||||
                        else if (ideo.HasPrecept(VariousDefOf.Bestiality_Acceptable)) __result *= 1.0f;
 | 
			
		||||
                        else __result *= 0.5f;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (fucked.IsAnimal())
 | 
			
		||||
                {
 | 
			
		||||
                    if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) __result *= 2.0f;
 | 
			
		||||
                    else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated) && ideo.IsVeneratedAnimal(fucked)) __result *= 2.0f;
 | 
			
		||||
                    else if (ideo.HasPrecept(VariousDefOf.Bestiality_Acceptable)) __result *= 1.0f;
 | 
			
		||||
                    else __result *= 0.5f;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,9 @@ using RimWorld;
 | 
			
		|||
using Verse;
 | 
			
		||||
using rjw;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace RJWSexperience
 | 
			
		||||
{
 | 
			
		||||
    [HarmonyPatch(typeof(MarriageCeremonyUtility), "Married")]
 | 
			
		||||
| 
						 | 
				
			
			@ -47,52 +50,60 @@ namespace RJWSexperience
 | 
			
		|||
            if (__result != null && !request.Newborn && xxx.is_human(__result))
 | 
			
		||||
            {
 | 
			
		||||
                float avgsex = -500;
 | 
			
		||||
                float lust = __result.RecordRandomizer(VariousDefOf.Lust, 0, 500, float.MinValue);
 | 
			
		||||
                float sexableage = 0;
 | 
			
		||||
                if (__result.ageTracker.AgeBiologicalYears > RJWSettings.sex_minimum_age)
 | 
			
		||||
                {
 | 
			
		||||
                    sexableage = __result.ageTracker.AgeBiologicalYearsFloat - RJWSettings.sex_minimum_age;
 | 
			
		||||
                    avgsex = sexableage * Rand.Range(0,30) + lust;
 | 
			
		||||
                }
 | 
			
		||||
                float totalsex = 0;
 | 
			
		||||
                
 | 
			
		||||
                int totalsex = 0;
 | 
			
		||||
                float totalbirth = 0;
 | 
			
		||||
                if (__result.story != null)
 | 
			
		||||
                {
 | 
			
		||||
                    float lust;
 | 
			
		||||
                    if (xxx.is_nympho(__result)) lust = __result.RecordRandomizer(VariousDefOf.Lust, Configurations.AvgLust, Configurations.MaxLustDeviation, 0);
 | 
			
		||||
                    else lust = __result.RecordRandomizer(VariousDefOf.Lust, Configurations.AvgLust, Configurations.MaxLustDeviation, float.MinValue);
 | 
			
		||||
 | 
			
		||||
                    float sexableage = 0;
 | 
			
		||||
                    if (__result.ageTracker.AgeBiologicalYears > RJWSettings.sex_minimum_age)
 | 
			
		||||
                    {
 | 
			
		||||
                        sexableage = __result.ageTracker.AgeBiologicalYearsFloat - RJWSettings.sex_minimum_age;
 | 
			
		||||
                        avgsex = sexableage * Configurations.SexPerYear * __result.LustFactor();
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    if (xxx.is_rapist(__result))
 | 
			
		||||
                    {
 | 
			
		||||
                        if (xxx.is_zoophile(__result))
 | 
			
		||||
                        {
 | 
			
		||||
                            if (__result.Has(Quirk.ChitinLover)) totalsex += __result.RecordRandomizer(xxx.CountOfRapedInsects, avgsex, 90);
 | 
			
		||||
                            else totalsex += __result.RecordRandomizer(xxx.CountOfRapedAnimals, avgsex, 90);
 | 
			
		||||
                            if (__result.Has(Quirk.ChitinLover)) totalsex += (int)__result.RecordRandomizer(xxx.CountOfRapedInsects, avgsex, Configurations.MaxSexCountDeviation);
 | 
			
		||||
                            else totalsex += (int)__result.RecordRandomizer(xxx.CountOfRapedAnimals, avgsex, Configurations.MaxSexCountDeviation);
 | 
			
		||||
                        }
 | 
			
		||||
                        else totalsex += __result.RecordRandomizer(xxx.CountOfRapedHumanlikes, avgsex, 90);
 | 
			
		||||
                        avgsex /= 2;
 | 
			
		||||
                        else totalsex += (int)__result.RecordRandomizer(xxx.CountOfRapedHumanlikes, avgsex, Configurations.MaxSexCountDeviation);
 | 
			
		||||
                        avgsex /= 4;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (xxx.is_zoophile(__result))
 | 
			
		||||
                    {
 | 
			
		||||
                        if (__result.Has(Quirk.ChitinLover)) totalsex += __result.RecordRandomizer(xxx.CountOfRapedInsects, avgsex, 90);
 | 
			
		||||
                        else totalsex += __result.RecordRandomizer(xxx.CountOfSexWithAnimals, avgsex, 90);
 | 
			
		||||
                        if (__result.Has(Quirk.ChitinLover)) totalsex += (int)__result.RecordRandomizer(xxx.CountOfRapedInsects, avgsex, Configurations.MaxSexCountDeviation);
 | 
			
		||||
                        else totalsex += (int)__result.RecordRandomizer(xxx.CountOfSexWithAnimals, avgsex, Configurations.MaxSexCountDeviation);
 | 
			
		||||
                        avgsex /= 2;
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (xxx.is_necrophiliac(__result))
 | 
			
		||||
                    {
 | 
			
		||||
                        totalsex += __result.RecordRandomizer(xxx.CountOfSexWithCorpse, avgsex, 90);
 | 
			
		||||
                        totalsex += (int)__result.RecordRandomizer(xxx.CountOfSexWithCorpse, avgsex, Configurations.MaxSexCountDeviation);
 | 
			
		||||
                        avgsex /= 2;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (__result.IsSlave)
 | 
			
		||||
                    {
 | 
			
		||||
                        totalsex += __result.RecordRandomizer(xxx.CountOfBeenRapedByHumanlikes, 0, Rand.Range(0,100)*sexableage);
 | 
			
		||||
                        totalsex += __result.RecordRandomizer(xxx.CountOfBeenRapedByAnimals, Rand.Range(-50,10), Rand.Range(0,10)*sexableage);
 | 
			
		||||
                        totalsex += (int)__result.RecordRandomizer(xxx.CountOfBeenRapedByAnimals, Rand.Range(-50,10), Rand.Range(0,10)*sexableage);
 | 
			
		||||
                        totalsex += (int)__result.RecordRandomizer(xxx.CountOfBeenRapedByHumanlikes, 0, Rand.Range(0,100)*sexableage);
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    totalsex += __result.RecordRandomizer(xxx.CountOfSexWithHumanlikes, avgsex, 90);
 | 
			
		||||
                    if (__result.relations != null)
 | 
			
		||||
 | 
			
		||||
                    totalsex += (int)__result.RecordRandomizer(xxx.CountOfSexWithHumanlikes, avgsex, Configurations.MaxSexCountDeviation);
 | 
			
		||||
                    if (__result.relations != null && __result.gender == Gender.Female)
 | 
			
		||||
                    {
 | 
			
		||||
                        totalbirth += __result.relations.GetDirectRelationsCount(PawnRelationDefOf.Child);
 | 
			
		||||
                        totalbirth += __result.relations.ChildrenCount;
 | 
			
		||||
                        totalsex += (int)totalbirth;
 | 
			
		||||
                        __result.records?.AddTo(xxx.CountOfSexWithHumanlikes, totalbirth);
 | 
			
		||||
                        __result.records?.SetTo(xxx.CountOfBirthHuman, totalbirth);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										133
									
								
								RJWSexperience/RJWSexperience/Rituals/JobGiver_GangbangVictim.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								RJWSexperience/RJWSexperience/Rituals/JobGiver_GangbangVictim.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,133 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Verse;
 | 
			
		||||
using Verse.AI;
 | 
			
		||||
using Verse.AI.Group;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
using rjw;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace RJWSexperience
 | 
			
		||||
{
 | 
			
		||||
    public class JobGiver_GangbangVictim : ThinkNode_JobGiver
 | 
			
		||||
    {
 | 
			
		||||
        protected override Job TryGiveJob(Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            if (pawn.Drafted) return null;
 | 
			
		||||
			DutyDef dutyDef = null;
 | 
			
		||||
            PawnDuty duty = null;
 | 
			
		||||
            if (pawn.mindState != null)
 | 
			
		||||
            {
 | 
			
		||||
                duty = pawn.mindState.duty;
 | 
			
		||||
                dutyDef = duty.def;
 | 
			
		||||
            }
 | 
			
		||||
            else return null;
 | 
			
		||||
 | 
			
		||||
			if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_rape(pawn))
 | 
			
		||||
            {
 | 
			
		||||
                return null;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			Pawn target = duty.focusSecond.Pawn;
 | 
			
		||||
 | 
			
		||||
            if (!pawn.CanReach(target, PathEndMode.ClosestTouch, Danger.None)) return null;
 | 
			
		||||
 | 
			
		||||
            return JobMaker.MakeJob(VariousDefOf.RapeVictim, target);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// copied from rjw
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	public class JobDriver_RapeVictim : JobDriver_Rape
 | 
			
		||||
	{
 | 
			
		||||
        public override bool TryMakePreToilReservations(bool errorOnFailed)
 | 
			
		||||
        {
 | 
			
		||||
			return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override IEnumerable<Toil> MakeNewToils()
 | 
			
		||||
		{
 | 
			
		||||
			if (RJWSettings.DebugRape) ModLog.Message("" + this.GetType().ToString() + "::MakeNewToils() called");
 | 
			
		||||
			setup_ticks();
 | 
			
		||||
			var PartnerJob = xxx.gettin_raped;
 | 
			
		||||
 | 
			
		||||
			this.FailOnDespawnedNullOrForbidden(iTarget);
 | 
			
		||||
			//this.FailOn(() => (!Partner.health.capacities.CanBeAwake) || (!comfort_prisoners.is_designated(Partner)));//this is wrong
 | 
			
		||||
			this.FailOn(() => Partner == null);
 | 
			
		||||
			this.FailOn(() => pawn.Drafted);
 | 
			
		||||
			this.FailOn(() => Partner.Drafted);
 | 
			
		||||
			yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell);
 | 
			
		||||
 | 
			
		||||
			SexUtility.RapeTargetAlert(pawn, Partner);
 | 
			
		||||
 | 
			
		||||
			Toil StartPartnerJob = new Toil();
 | 
			
		||||
			StartPartnerJob.defaultCompleteMode = ToilCompleteMode.Instant;
 | 
			
		||||
			StartPartnerJob.socialMode = RandomSocialMode.Off;
 | 
			
		||||
			StartPartnerJob.initAction = delegate
 | 
			
		||||
			{
 | 
			
		||||
				var dri = Partner.jobs.curDriver as JobDriver_SexBaseRecieverRaped;
 | 
			
		||||
				if (dri == null)
 | 
			
		||||
				{
 | 
			
		||||
					Job gettin_raped = JobMaker.MakeJob(PartnerJob, pawn);
 | 
			
		||||
					Building_Bed Bed = null;
 | 
			
		||||
					if (Partner.GetPosture() == PawnPosture.LayingInBed)
 | 
			
		||||
						Bed = Partner.CurrentBed();
 | 
			
		||||
 | 
			
		||||
					Partner.jobs.StartJob(gettin_raped, JobCondition.InterruptForced, null, false, true, null);
 | 
			
		||||
					if (Bed != null)
 | 
			
		||||
						(Partner.jobs.curDriver as JobDriver_SexBaseRecieverRaped)?.Set_bed(Bed);
 | 
			
		||||
				}
 | 
			
		||||
			};
 | 
			
		||||
			yield return StartPartnerJob;
 | 
			
		||||
 | 
			
		||||
			Toil SexToil = new Toil();
 | 
			
		||||
			SexToil.defaultCompleteMode = ToilCompleteMode.Never;
 | 
			
		||||
			SexToil.defaultDuration = duration;
 | 
			
		||||
			SexToil.handlingFacing = true;
 | 
			
		||||
			SexToil.FailOn(() => Partner.CurJob.def != PartnerJob);
 | 
			
		||||
			SexToil.initAction = delegate
 | 
			
		||||
			{
 | 
			
		||||
				Partner.pather.StopDead();
 | 
			
		||||
				Partner.jobs.curDriver.asleep = false;
 | 
			
		||||
				// Unlike normal rape try use comfort prisoner condom
 | 
			
		||||
				CondomUtility.GetCondomFromRoom(Partner);
 | 
			
		||||
				usedCondom = CondomUtility.TryUseCondom(Partner);
 | 
			
		||||
 | 
			
		||||
				if (RJWSettings.DebugRape) ModLog.Message("JobDriver_RapeComfortPawn::MakeNewToils() - reserving prisoner");
 | 
			
		||||
				//pawn.Reserve(Partner, xxx.max_rapists_per_prisoner, 0);
 | 
			
		||||
				Start();
 | 
			
		||||
			};
 | 
			
		||||
			SexToil.tickAction = delegate
 | 
			
		||||
			{
 | 
			
		||||
				//if (pawn.IsHashIntervalTick(ticks_between_hearts))
 | 
			
		||||
				//	ThrowMetaIcon(pawn.Position, pawn.Map, ThingDefOf.Heart);
 | 
			
		||||
				SexTick(pawn, Partner);
 | 
			
		||||
				SexUtility.reduce_rest(Partner, 1);
 | 
			
		||||
				SexUtility.reduce_rest(pawn, 2);
 | 
			
		||||
				if (ticks_left <= 0)
 | 
			
		||||
					ReadyForNextToil();
 | 
			
		||||
			};
 | 
			
		||||
			SexToil.AddFinishAction(delegate
 | 
			
		||||
			{
 | 
			
		||||
				End();
 | 
			
		||||
			});
 | 
			
		||||
			yield return SexToil;
 | 
			
		||||
 | 
			
		||||
			yield return new Toil
 | 
			
		||||
			{
 | 
			
		||||
				initAction = delegate
 | 
			
		||||
				{
 | 
			
		||||
					// Trying to add some interactions and social logs
 | 
			
		||||
					SexUtility.ProcessSex(pawn, Partner, usedCondom: usedCondom, rape: isRape, sextype: sexType);
 | 
			
		||||
					Partner.records.Increment(xxx.GetRapedAsComfortPawn);
 | 
			
		||||
				},
 | 
			
		||||
				defaultCompleteMode = ToilCompleteMode.Instant
 | 
			
		||||
			};
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,47 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
using Verse;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace RJWSexperience
 | 
			
		||||
{
 | 
			
		||||
    public class RitualBehaviorWorker_Gangbang : RitualBehaviorWorker
 | 
			
		||||
    {
 | 
			
		||||
		public RitualBehaviorWorker_Gangbang() { }
 | 
			
		||||
 | 
			
		||||
		public RitualBehaviorWorker_Gangbang(RitualBehaviorDef def) : base(def) { }
 | 
			
		||||
		
 | 
			
		||||
		public override void PostCleanup(LordJob_Ritual ritual)
 | 
			
		||||
		{
 | 
			
		||||
			Pawn warden = ritual.PawnWithRole("initiator");
 | 
			
		||||
			Pawn pawn = ritual.PawnWithRole("victim");
 | 
			
		||||
			if (pawn.IsPrisonerOfColony)
 | 
			
		||||
			{
 | 
			
		||||
				WorkGiver_Warden_TakeToBed.TryTakePrisonerToBed(pawn, warden);
 | 
			
		||||
				pawn.guest.WaitInsteadOfEscapingFor(1250);
 | 
			
		||||
				
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public class RitualStage_InteractWithVictim : RitualStage
 | 
			
		||||
    {
 | 
			
		||||
		public override TargetInfo GetSecondFocus(LordJob_Ritual ritual)
 | 
			
		||||
		{
 | 
			
		||||
			return ritual.assignments.AssignedPawns("victim").FirstOrDefault(p => RitualRole_RapeVictim.CanBeVictim(p));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public class RitualStage_InteractWithVictim_All : RitualStage
 | 
			
		||||
	{
 | 
			
		||||
		public override TargetInfo GetSecondFocus(LordJob_Ritual ritual)
 | 
			
		||||
		{
 | 
			
		||||
			return ritual.assignments.AssignedPawns("victim").FirstOrDefault();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										93
									
								
								RJWSexperience/RJWSexperience/Rituals/RitualOutcomeComps.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								RJWSexperience/RJWSexperience/Rituals/RitualOutcomeComps.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,93 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
using Verse;
 | 
			
		||||
using rjw;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace RJWSexperience
 | 
			
		||||
{
 | 
			
		||||
    public class RitualOutcomeComp_HediffBased : RitualOutcomeComp_QualitySingleOffset
 | 
			
		||||
    {
 | 
			
		||||
		HediffDef hediffDef = null;
 | 
			
		||||
		float minSeverity = 0;
 | 
			
		||||
		string roleId = "";
 | 
			
		||||
 | 
			
		||||
        protected override string LabelForDesc => label;
 | 
			
		||||
        public override bool DataRequired => false;
 | 
			
		||||
		public override bool Applies(LordJob_Ritual ritual)
 | 
			
		||||
		{
 | 
			
		||||
			Pawn victim = null;
 | 
			
		||||
			foreach(RitualRole ritualRole in ritual.assignments.AllRolesForReading)
 | 
			
		||||
            {
 | 
			
		||||
				if (ritualRole != null && ritualRole.id.Contains(roleId))
 | 
			
		||||
				{
 | 
			
		||||
					victim = ritual.assignments.FirstAssignedPawn(ritualRole);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if (victim != null && hediffDef != null)
 | 
			
		||||
            {
 | 
			
		||||
				Hediff hediff = victim.health.hediffSet.GetFirstHediffOfDef(hediffDef);
 | 
			
		||||
				if (hediff?.Severity >= minSeverity)
 | 
			
		||||
                {
 | 
			
		||||
					return true;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public override ExpectedOutcomeDesc GetExpectedOutcomeDesc(Precept_Ritual ritual, TargetInfo ritualTarget, RitualObligation obligation, RitualRoleAssignments assignments)
 | 
			
		||||
		{
 | 
			
		||||
			return new ExpectedOutcomeDesc
 | 
			
		||||
			{
 | 
			
		||||
				label = LabelForDesc.CapitalizeFirst(),
 | 
			
		||||
				present = false,
 | 
			
		||||
				uncertainOutcome = true,
 | 
			
		||||
				effect = ExpectedOffsetDesc(true, -1f),
 | 
			
		||||
				quality = qualityOffset,
 | 
			
		||||
				positive = true
 | 
			
		||||
			};
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public class RitualOutcomeComp_NeedBased : RitualOutcomeComp_QualitySingleOffset
 | 
			
		||||
	{
 | 
			
		||||
		NeedDef needDef = null;
 | 
			
		||||
		float minAvgNeed = 0;
 | 
			
		||||
 | 
			
		||||
		protected override string LabelForDesc => label;
 | 
			
		||||
		public override bool DataRequired => false;
 | 
			
		||||
		public override bool Applies(LordJob_Ritual ritual)
 | 
			
		||||
		{
 | 
			
		||||
			float avgNeed = 0;
 | 
			
		||||
			foreach (Pawn pawn in ritual.assignments.AllPawns)
 | 
			
		||||
			{
 | 
			
		||||
				avgNeed += pawn.needs?.TryGetNeed(needDef)?.CurLevel ?? 0f;
 | 
			
		||||
			}
 | 
			
		||||
			avgNeed /= ritual.assignments.AllPawns.Count;
 | 
			
		||||
			if (avgNeed >= minAvgNeed) return true;
 | 
			
		||||
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public override ExpectedOutcomeDesc GetExpectedOutcomeDesc(Precept_Ritual ritual, TargetInfo ritualTarget, RitualObligation obligation, RitualRoleAssignments assignments)
 | 
			
		||||
		{
 | 
			
		||||
			return new ExpectedOutcomeDesc
 | 
			
		||||
			{
 | 
			
		||||
				label = LabelForDesc.CapitalizeFirst(),
 | 
			
		||||
				present = false,
 | 
			
		||||
				uncertainOutcome = true,
 | 
			
		||||
				effect = ExpectedOffsetDesc(true, -1f),
 | 
			
		||||
				quality = qualityOffset,
 | 
			
		||||
				positive = true
 | 
			
		||||
			};
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										112
									
								
								RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,112 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
using Verse;
 | 
			
		||||
using rjw;
 | 
			
		||||
 | 
			
		||||
namespace RJWSexperience
 | 
			
		||||
{
 | 
			
		||||
    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 = "slave, prisoner, submissive gender only";
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static bool CanBeVictim(Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            
 | 
			
		||||
            if (pawn.IsPrisonerOfColony || pawn.IsSlaveOfColony) return true;
 | 
			
		||||
            if (pawn.Ideo?.HasMeme(MemeDefOf.FemaleSupremacy) ?? false && pawn.gender != Gender.Female) return true;
 | 
			
		||||
            else if (pawn.Ideo?.HasMeme(MemeDefOf.MaleSupremacy) ?? false && pawn.gender != Gender.Male) 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 = "not human";
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            if (CanBeBreedee(p)) return true;
 | 
			
		||||
            if (!skipReason)
 | 
			
		||||
            {
 | 
			
		||||
                reason = "capable of sex is required";
 | 
			
		||||
            }
 | 
			
		||||
            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 = "not animal";
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            if (CanBeBreeder(p, assignments?.Ritual)) return true;
 | 
			
		||||
            if (!skipReason)
 | 
			
		||||
            {
 | 
			
		||||
                reason = "improper animal: cannot breed or forbidden by precepts";
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static bool CanBeBreeder(Pawn animal, Precept_Ritual precept)
 | 
			
		||||
        {
 | 
			
		||||
            if (precept != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (precept.ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal)) return false;
 | 
			
		||||
            }
 | 
			
		||||
            if (!xxx.can_rape(animal)) return false;
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -17,19 +17,14 @@ namespace RJWSexperience
 | 
			
		|||
        public override string ExplanationPart(StatRequest req)
 | 
			
		||||
        {
 | 
			
		||||
            Pawn pawn = req.Thing as Pawn;
 | 
			
		||||
            return Keyed.LustStatFactor(LustFactor(pawn) * factor * 100);
 | 
			
		||||
            return Keyed.LustStatFactor(String.Format("{0:0.##}", pawn.LustFactor() * factor * 100));
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void TransformValue(StatRequest req, ref float val)
 | 
			
		||||
        {
 | 
			
		||||
            Pawn pawn = req.Thing as Pawn;
 | 
			
		||||
            if (pawn != null) val *= LustFactor(pawn) * factor;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected float LustFactor(Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            return 1 + pawn.records.GetValue(VariousDefOf.Lust) / 100;
 | 
			
		||||
            if (pawn != null) val *= pawn.LustFactor() * factor;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +54,7 @@ namespace RJWSexperience
 | 
			
		|||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            return Keyed.MemeStatFactor(fact * 100);
 | 
			
		||||
            return Keyed.MemeStatFactor(String.Format("{0:0.##}", fact * 100));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void TransformValue(StatRequest req, ref float val)
 | 
			
		||||
| 
						 | 
				
			
			@ -96,7 +91,7 @@ namespace RJWSexperience
 | 
			
		|||
            {
 | 
			
		||||
                if (pawn.IsSlave)
 | 
			
		||||
                {
 | 
			
		||||
                    return Keyed.SlaveStatFactor(fact);
 | 
			
		||||
                    return Keyed.SlaveStatFactor(String.Format("{0:0.##}", fact));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return Keyed.SlaveStatFactorDefault;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,7 +58,28 @@ namespace RJWSexperience
 | 
			
		|||
            return value;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static bool ContainAll(this string str, string[] tags)
 | 
			
		||||
        {
 | 
			
		||||
            string lstr = str.ToLower();
 | 
			
		||||
            if (!tags.NullOrEmpty()) for (int i=0; i< tags.Count(); i++)
 | 
			
		||||
                {
 | 
			
		||||
                    if (!lstr.Contains('[' + tags[i].ToLower() + ']')) return false;
 | 
			
		||||
                }
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public static float LustFactor(this Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            float lust = pawn.records.GetValue(VariousDefOf.Lust) * Configurations.LustEffectPower;
 | 
			
		||||
            if (lust < 0)
 | 
			
		||||
            {
 | 
			
		||||
                lust = (float)Math.Exp((lust + 200 * Math.Log(10)) / 100) - 100f;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            return 1 + lust / 100;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@ namespace RJWSexperience
 | 
			
		|||
        public static readonly RecordDef Lust = DefDatabase<RecordDef>.GetNamed("Lust");
 | 
			
		||||
        public static readonly SkillDef SexSkill = DefDatabase<SkillDef>.GetNamed("Sex");
 | 
			
		||||
        public static readonly ThoughtDef_Recordbased AteCum = DefDatabase<ThoughtDef_Recordbased>.GetNamed("AteCum");
 | 
			
		||||
        public static readonly JobDef RapeVictim = DefDatabase<JobDef>.GetNamed("RapeVictim");
 | 
			
		||||
 | 
			
		||||
        [MayRequireIdeology] public static readonly MemeDef Zoophile = DefDatabase<MemeDef>.GetNamed("Zoophile");
 | 
			
		||||
        [MayRequireIdeology] public static readonly MemeDef Rapist = DefDatabase<MemeDef>.GetNamed("Rapist");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										
											BIN
										
									
								
								Textures/UI/Issues/Gangbang.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Textures/UI/Issues/Gangbang.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 11 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Textures/UI/Issues/Submissive.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Textures/UI/Issues/Submissive.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 5.2 KiB  | 
| 
						 | 
				
			
			@ -1,3 +1,11 @@
 | 
			
		|||
Version Beta 1.0.1.6
 | 
			
		||||
 - changed stat calculation of lust
 | 
			
		||||
   - on negative lust, use exponential function instead of linear
 | 
			
		||||
 - added gangbang rituals 
 | 
			
		||||
 - chance of bestiality with non-venerated animal on only venerated precept reduced greatly
 | 
			
		||||
 - added submissive precepts
 | 
			
		||||
 - added mod settings
 | 
			
		||||
 | 
			
		||||
Version Beta 1.0.1.5
 | 
			
		||||
 - changed icon for precepts and memes
 | 
			
		||||
 - added stat factors to precepts
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue