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…
Reference in a new issue