This commit is contained in:
moreoreganostodump 2021-07-31 02:25:46 +09:00
parent 1606b006ac
commit 95c8c95a93
40 changed files with 1839 additions and 112 deletions

View File

@ -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.

View 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>

View 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>

View 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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View 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>

View File

@ -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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View File

@ -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.&#10;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>

View File

@ -4,4 +4,5 @@
<Rape.label>강간</Rape.label>
<Bestiality.label>수간</Bestiality.label>
<Incestuos.label>근친상간</Incestuos.label>
<Submissive.label>순종적인 성별</Submissive.label>
</LanguageData>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>음란함의 최대 편차를 설정합니다.&#10;평균에 따라 음수가 나올수도 있습니다.</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>

View File

@ -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>

View 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);
}
}
}

View File

@ -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();
}
}

View File

@ -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)
{

View File

@ -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" />

View File

@ -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;
}
}
}
}

View File

@ -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);
}
}

View 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
};
}
}
}

View File

@ -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();
}
}
}

View 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
};
}
}
}

View 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;
}
}
}

View File

@ -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;

View File

@ -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;
}
}
}

View File

@ -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");

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -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