Further updates

This commit is contained in:
AbstractConcept 2023-01-26 00:36:18 -06:00
parent 3eec691bd3
commit 299934584e
25 changed files with 180 additions and 144 deletions

Binary file not shown.

Binary file not shown.

View File

@ -4,18 +4,13 @@ This mod adds a greater awareness of sex to people. When people witness (or are
Sex acts that can provoke reactions include:
- Consensual sex: Encountering two lovin' individuals will generally result in the embarrassment of all involved and the couplating couple immediately ceasing their activities (unless the couple are both Exhibitionists)
- Consensual sex: Encountering two lovin' individuals will generally result in the embarrassment of all involved and the copulating couple immediately ceasing their activities (unless the couple happen to be Exhibitionists). Reactions to consensual sex can be modified through the Exhibitionism precept
- Masturbation: Finding some masturbating will likely embarrass both parties and the discovered individual immediately stopping what they were doing (unless they happen to be an Exhibitionist). Reactions to masturbation can be modified through the Masturbation precept (included in Sexperience - Ideology)
- Cheating: Discovering a partner cheating will greatly upset most people (unless they happen to be a Culkold). Reactions to cheating can be modified through the Lovin' precept ('free and approved' lovin' will nullify discontent from cheating).
- Bestiality: Witnessing bestiality will generally cause individuals to Panic (unless they are a Zoophile). Reactions to bestiality can be modified through the Bestiality precept (included in Sexperience - Ideology)
- Rape: Witnessing rape will generally cause individuals to Panic (unless they are a Rapist). Reactions to rape can be modified through the Rape precept (included in Sexperience - Ideology).
- Necrophilia: Witnessing necrophilia will generally cause individuals to become Nauseated (unless they are a Necrophile). Reactions to necrophilia can be modified through the Necrophilia precept (included in Sexperience - Ideology).
- Xenophilia: Stumbing upon humanoids of different species lovin' will generally be treated like encountering any other lovein' couple (unless the witness happens Xenophobe, who will likely Harrass the poor couple). Reactions to xenophilia can be modified through the Alien Dating precept (included in Humanoid Alien Races).
As hinted above, some individuals will be unable to ignore what they just witnessed, resulting in the following reactions:
- Panic: the witness will likely run away and hide, though more aggressive types may start a social fight with the transgressor.
- Nauseated: the witness will run away and likely vomit after what they just saw.
- Harass: the witness will start insulting the transgressor, though this might escalate to violence.
- Cheating: Discovering a partner cheating will greatly upset most people (unless they happen to be a Culkold). Reactions to cheating can be modified through the Infidelity precept
- Bestiality: Witnessing bestiality will generally cause individuals to run away (unless they are a Zoophile). Reactions to bestiality can be modified through the Bestiality precept (included in Sexperience - Ideology)
- Rape: Witnessing rape will generally cause individuals to run away (unless they are a Rapist). Reactions to rape can be modified through the Rape precept (included in Sexperience - Ideology).
- Necrophilia: Witnessing necrophilia will generally cause individuals to run away and likely vomit (unless they are a Necrophile). Reactions to necrophilia can be modified through the Necrophilia precept (included in Sexperience - Ideology).
- Xenophilia: Stumbing upon humanoids of different species lovin' will generally be treated like encountering any other lovein' couple (unless the witness happens to be a Xenophobe). Reactions to xenophilia can be modified through the Alien Dating precept (included in Humanoid Alien Races).
Options have been included to toggle whether people should react to these various sex acts and whether people will turn a blind eye to them during rituals and parties. Additional options have been included to toggle whether prisoners, slaves, and members of other factions should react to witnessed sexual activities.
@ -26,10 +21,10 @@ This mod also provides improved threesome support. Threesomes can now be trigger
The chance of a threesome occurring can be configured in the mod options. In all cases, however, those involved must have a good opinion of each other and the passer-by mustn't be doing an player ordered or important job at the time.
Two new RJW quirks are also included - Cuckold and Voyeur. Cuckolds get a thrill witnessing their partners cheated on them, while Voyeurs just like to watch others in general (providing what they're seeing isn't too upset, of course).
Three new RJW quirks are also included - Cuckold, Cuckolder, and Voyeur. Cuckolds like to watch their partners cheated on them, while Cuckolders get a kick out of having their partner watch it happen. Voyeurs just like to watch others in general (providing what they see isn't too upsetting, of course).
Misc features
- Those using S16's apparel mod or the UnderWhere mod can make use of an inculded setting that will allow you toggle whether wearing underwear alone is sufficient to satisfy an ideological need for modesty. You may want to turn this setting off if you want ideologies to be stricter about what they consider to be modest. Ideologies which prefer to wear fewer clothes than normal are not affected by this setting.
- Those using S16's apparel mod or the UnderWhere mod can make use of an included setting that will allow you toggle whether wearing underwear alone is sufficient to satisfy an ideological need for modesty. You may want to turn this setting off if you want ideologies to be stricter about what they consider to be modest. Ideologies which prefer to wear fewer clothes than normal are not affected by this setting.
- The scantier underwear from these mods now only covers either the chest or groin. Wearing underwear will counts as covering private parts for the purposes of determining nudity if not running Ideology.
- New situational mood: Exposed underwear. Non-Exhibitionists will be upset if they are not wearing enough clothing to cover up their underwear. This mood can be toggled on or off.
- Any lewd fluids that people produce will not be marked for cleaning until they are done with what they are doing.
- Any lewd fluids that people produce during sex will not be marked for cleaning until they are done.

View File

@ -23,7 +23,7 @@
<defName>Exhibitionism_Acceptable</defName>
<issue>Exhibitionism</issue>
<label>acceptable</label>
<description>Sex between contenting individuals draws no special attention.</description>
<description>Sex between contenting individuals deserves no special attention.</description>
<impact>Low</impact>
<displayOrderInIssue>20</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
@ -34,7 +34,7 @@
<defName>Exhibitionism_Approved</defName>
<issue>Exhibitionism</issue>
<label>approved</label>
<description>Displays of physical intimacy bring a smile and knowing wink to those who see it.</description>
<description>Displays of physical intimacy bring a knowing grin to those who witness it.</description>
<impact>Medium</impact>
<displayOrderInIssue>10</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>

View File

@ -205,6 +205,10 @@
<requiredPreceptDef>Exhibitionism_Approved</requiredPreceptDef>
<replacementThoughtDef>SawExhibitionism_Approved</replacementThoughtDef>
</li>
<li>
<requiredQuirk>Voyeur</requiredQuirk>
<replacementThoughtDef>SawExhibitionism_Approved</replacementThoughtDef>
</li>
</replacementThoughts>
</witnessReaction>
</Privacy_Please.SexActReactionDef>
@ -278,16 +282,26 @@
</replacementThoughts>
</pawnReaction>
<witnessReaction>
<defaultThoughtDef>SawMasturbation_Disapproved</defaultThoughtDef>
<defaultThoughtDef>SawExhibitionism_Disapproved</defaultThoughtDef>
<preceptThoughtDefs>
<li>SawMasturbation_Abhorrent</li>
<li>SawMasturbation_Disapproved</li>
<li>SawMasturbation_Acceptable</li>
</preceptThoughtDefs>
<replacementThoughts>
<li>
<requiredPreceptDef>Exhibitionism_Disapproved</requiredPreceptDef>
<replacementThoughtDef>SawExhibitionism_Disapproved</replacementThoughtDef>
</li>
<li>
<requiredPreceptDef>Exhibitionism_Acceptable</requiredPreceptDef>
<replacementThoughtDef>SawExhibitionism_Acceptable</replacementThoughtDef>
</li>
<li>
<requiredPreceptDef>Exhibitionism_Approved</requiredPreceptDef>
<replacementThoughtDef>SawExhibitionism_Approved</replacementThoughtDef>
</li>
<li>
<requiredQuirk>Voyeur</requiredQuirk>
<replacementThoughtDef>SawMasturbation_Approved</replacementThoughtDef>
<replacementThoughtDef>SawExhibitionism_Approved</replacementThoughtDef>
</li>
</replacementThoughts>
</witnessReaction>

View File

@ -4,7 +4,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawBestiality_Abhorrent</defName>
<durationDays>3</durationDays>
<durationDays>30</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -17,12 +17,12 @@
<nullifyingTraits>
<li>Zoophile</li>
</nullifyingTraits>
<reactionToSexDiscovery>Outrage</reactionToSexDiscovery>
<reactionToSexDiscovery>Panic</reactionToSexDiscovery>
</Privacy_Please.SexActThoughtDef>
<Privacy_Please.SexActThoughtDef>
<defName>SawBestiality_Horrible</defName>
<durationDays>3</durationDays>
<durationDays>20</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -40,7 +40,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawBestiality_Disapproved</defName>
<durationDays>3</durationDays>
<durationDays>10</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -58,7 +58,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawBestiality_Acceptable</defName>
<durationDays>3</durationDays>
<durationDays>5</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -76,7 +76,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawBestiality_Honorable</defName>
<durationDays>3</durationDays>
<durationDays>2</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>

View File

@ -5,23 +5,25 @@
<Privacy_Please.SexActThoughtDef>
<defName>PartookInExhibitionism_Disapproved</defName>
<thoughtClass>Thought_Memory</thoughtClass>
<durationDays>1.0</durationDays>
<stackLimit>1</stackLimit>
<durationDays>5.0</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
<li>
<label>accidental exhibitionist</label>
<label>involuntary exhibitionist</label>
<description>Well, that was awkward...</description>
<baseMoodEffect>-8</baseMoodEffect>
<baseMoodEffect>-5</baseMoodEffect>
</li>
</stages>
<reactionToSexDiscovery>Discomfort</reactionToSexDiscovery>
<reactionToSexDiscovery>Acceptance</reactionToSexDiscovery>
</Privacy_Please.SexActThoughtDef>
<Privacy_Please.SexActThoughtDef>
<defName>PartookInExhibitionism_Acceptable</defName>
<thoughtClass>Thought_Memory</thoughtClass>
<durationDays>1.0</durationDays>
<stackLimit>1</stackLimit>
<durationDays>0.5</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
<li>
<label>uncaring exhibitionist</label>
@ -35,13 +37,14 @@
<Privacy_Please.SexActThoughtDef>
<defName>PartookInExhibitionism_Approved</defName>
<thoughtClass>Thought_Memory</thoughtClass>
<durationDays>1.0</durationDays>
<stackLimit>1</stackLimit>
<durationDays>2.0</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
<li>
<label>excited by exhibitionism</label>
<label>exhilerated by exhibitionism</label>
<description>Heh, hope they enjoyed the show!</description>
<baseMoodEffect>4</baseMoodEffect>
<baseMoodEffect>2</baseMoodEffect>
</li>
</stages>
<reactionToSexDiscovery>Approval</reactionToSexDiscovery>
@ -51,23 +54,25 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawExhibitionism_Disapproved</defName>
<thoughtClass>Thought_Memory</thoughtClass>
<durationDays>1.0</durationDays>
<stackLimit>1</stackLimit>
<durationDays>5.0</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
<li>
<label>accidental voyeur</label>
<description>Jeez! Get a room!</description>
<baseMoodEffect>-4</baseMoodEffect>
<baseMoodEffect>-5</baseMoodEffect>
</li>
</stages>
<reactionToSexDiscovery>Discomfort</reactionToSexDiscovery>
<reactionToSexDiscovery>Acceptance</reactionToSexDiscovery>
</Privacy_Please.SexActThoughtDef>
<Privacy_Please.SexActThoughtDef>
<defName>SawExhibitionism_Acceptable</defName>
<thoughtClass>Thought_Memory</thoughtClass>
<durationDays>1.0</durationDays>
<stackLimit>1</stackLimit>
<durationDays>0.5</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
<li>
<label>unfazed voyeur</label>
@ -81,11 +86,12 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawExhibitionism_Approved</defName>
<thoughtClass>Thought_Memory</thoughtClass>
<durationDays>1.0</durationDays>
<stackLimit>1</stackLimit>
<durationDays>2.0</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
<li>
<label>excited by voyeurism</label>
<label>aroused by voyeurism</label>
<description>Damn, that was hot!</description>
<baseMoodEffect>2</baseMoodEffect>
</li>

View File

@ -5,7 +5,7 @@
<!-- Pawn thoughts -->
<Privacy_Please.SexActThoughtDef>
<defName>PartookInInfidelity_Heartbreaking</defName>
<durationDays>3</durationDays>
<durationDays>25</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -20,7 +20,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>PartookInInfidelity_Disapproved</defName>
<durationDays>3</durationDays>
<durationDays>10</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -35,7 +35,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>PartookInInfidelity_Acceptable</defName>
<durationDays>3</durationDays>
<durationDays>0.5</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -50,7 +50,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>PartookInInfidelity_Approved</defName>
<durationDays>3</durationDays>
<durationDays>2</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -66,7 +66,7 @@
<!-- Witness thoughts -->
<Privacy_Please.SexActThoughtDef>
<defName>SawInfidelity_Heartbreaking</defName>
<durationDays>3</durationDays>
<durationDays>25</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -76,12 +76,12 @@
<baseMoodEffect>-20</baseMoodEffect>
</li>
</stages>
<reactionToSexDiscovery>Outrage</reactionToSexDiscovery>
<reactionToSexDiscovery>Panic</reactionToSexDiscovery>
</Privacy_Please.SexActThoughtDef>
<Privacy_Please.SexActThoughtDef>
<defName>SawInfidelity_Disapproved</defName>
<durationDays>3</durationDays>
<durationDays>10</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -96,7 +96,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawInfidelity_Acceptable</defName>
<durationDays>3</durationDays>
<durationDays>0.5</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -111,7 +111,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawInfidelity_Approved</defName>
<durationDays>3</durationDays>
<durationDays>2</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>

View File

@ -4,23 +4,25 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawMasturbation_Abhorrent</defName>
<durationDays>3</durationDays>
<durationDays>10</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
<li>
<label>disgusted by masturbaton</label>
<label>disgusted by masturbation</label>
<description>You'll go blind if up keep that up!</description>
<baseMoodEffect>-10</baseMoodEffect>
</li>
</stages>
<reactionToSexDiscovery>Outrage</reactionToSexDiscovery>
<reactionToSexDiscovery>Discomfort</reactionToSexDiscovery>
</Privacy_Please.SexActThoughtDef>
<Privacy_Please.SexActThoughtDef>
<!-- It just counts as exhibitionism from this point on -->
<!-- <Privacy_Please.SexActThoughtDef>
<defName>SawMasturbation_Disapproved</defName>
<thoughtClass>Thought_Memory</thoughtClass>
<durationDays>3</durationDays>
<durationDays>5</durationDays>
<stackLimit>3</stackLimit>
<stages>
<li>
@ -32,7 +34,7 @@
<reactionToSexDiscovery>Discomfort</reactionToSexDiscovery>
</Privacy_Please.SexActThoughtDef>
<Privacy_Please.SexActThoughtDef>
<Privacy_Please.SexActThoughtDef>
<defName>SawMasturbation_Acceptable</defName>
<thoughtClass>Thought_Memory</thoughtClass>
<durationDays>1</durationDays>
@ -60,6 +62,6 @@
</li>
</stages>
<reactionToSexDiscovery>Approval</reactionToSexDiscovery>
</Privacy_Please.SexActThoughtDef>
</Privacy_Please.SexActThoughtDef> -->
</Defs>

View File

@ -4,7 +4,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawNecrophilia_Abhorrent</defName>
<durationDays>3</durationDays>
<durationDays>30</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -17,12 +17,12 @@
<nullifyingTraits>
<li>Necrophiliac</li>
</nullifyingTraits>
<reactionToSexDiscovery>Outrage</reactionToSexDiscovery>
<reactionToSexDiscovery>Nausea</reactionToSexDiscovery>
</Privacy_Please.SexActThoughtDef>
<Privacy_Please.SexActThoughtDef>
<defName>SawNecrophilia_Horrible</defName>
<durationDays>3</durationDays>
<durationDays>20</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -40,7 +40,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawNecrophilia_Disapproved</defName>
<durationDays>3</durationDays>
<durationDays>10</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -58,7 +58,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawNecrophilia_Acceptable</defName>
<durationDays>3</durationDays>
<durationDays>5</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -76,7 +76,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawNecrophilia_Honorable</defName>
<durationDays>3</durationDays>
<durationDays>2</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>

View File

@ -4,7 +4,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawRape_Abhorrent</defName>
<durationDays>3</durationDays>
<durationDays>30</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -17,12 +17,12 @@
<nullifyingTraits>
<li>Rapist</li>
</nullifyingTraits>
<reactionToSexDiscovery>Outrage</reactionToSexDiscovery>
<reactionToSexDiscovery>Panic</reactionToSexDiscovery>
</Privacy_Please.SexActThoughtDef>
<Privacy_Please.SexActThoughtDef>
<defName>SawRape_Horrible</defName>
<durationDays>3</durationDays>
<durationDays>20</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -40,7 +40,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawRape_Disapproved</defName>
<durationDays>3</durationDays>
<durationDays>10</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -58,7 +58,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawRape_Acceptable</defName>
<durationDays>3</durationDays>
<durationDays>5</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
@ -76,7 +76,7 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawRape_Honorable</defName>
<durationDays>3</durationDays>
<durationDays>2</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>

View File

@ -4,34 +4,34 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawHAR_AlienDating_Prohibited</defName>
<durationDays>3</durationDays>
<durationDays>30</durationDays>
<stackLimit>3</stackLimit>
<hediff>Indignant</hediff>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
<li>
<label>horrified by xenophilia</label>
<description>The filthy degenerates!</description>
<description>Filthy degenerates!</description>
<baseMoodEffect>-20</baseMoodEffect>
</li>
</stages>
<nullifyingTraitDegrees>
<Xenophobia>-1</Xenophobia>
</nullifyingTraitDegrees>
<reactionToSexDiscovery>Outrage</reactionToSexDiscovery>
<reactionToSexDiscovery>Discomfort</reactionToSexDiscovery>
</Privacy_Please.SexActThoughtDef>
<Privacy_Please.SexActThoughtDef>
<defName>SawHAR_AlienDating_Horrible</defName>
<durationDays>3</durationDays>
<durationDays>20</durationDays>
<stackLimit>3</stackLimit>
<hediff>Disquiet</hediff>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
<li>
<label>disturbed by xenophilia</label>
<description></description>
<baseMoodEffect>-10</baseMoodEffect>
<description>Digusting.</description>
<baseMoodEffect>-15</baseMoodEffect>
</li>
</stages>
<nullifyingTraitDegrees>
@ -42,13 +42,13 @@
<Privacy_Please.SexActThoughtDef>
<defName>SawHAR_AlienDating_Disapproved</defName>
<durationDays>3</durationDays>
<durationDays>10</durationDays>
<stackLimit>3</stackLimit>
<stackLimitForSameOtherPawn>1</stackLimitForSameOtherPawn>
<stages>
<li>
<label>upset about xenophilia</label>
<description>It's just not right.</description>
<description>It's just not right...</description>
<baseMoodEffect>-10</baseMoodEffect>
</li>
</stages>
@ -58,7 +58,7 @@
<reactionToSexDiscovery>Discomfort</reactionToSexDiscovery>
</Privacy_Please.SexActThoughtDef>
<!-- Exhibitism from this point on -->
<!-- It just counts as exhibitionism from this point on -->
<!--<Privacy_Please.SexActThoughtDef>
<defName>SawHAR_AlienDating_Acceptable</defName>

View File

@ -32,9 +32,14 @@
<slaves_ignore_sex_desc>Prisoners and slaves have discovered that it is better to simply ignore what is occurring around them.</slaves_ignore_sex_desc>
<other_factions_ignore_sex> People belonging to other factions will ignore sexual acts</other_factions_ignore_sex>
<other_factions_ignore_sex_desc>Members of friendly factions will politely ignore any sexual acts occurring around them.\n\nHostile factions will always ignore such frivolities, regardless of this setting.</other_factions_ignore_sex_desc>
<rape_is_uninteruptable>Rape will not be interrupted by witnesses</rape_is_uninteruptable>
<rape_is_uninteruptable_desc>Rape will not be interrupted by witnesses</rape_is_uninteruptable_desc>
<whoring_is_uninteruptable>Whoring will not be interrupted by witnesses</whoring_is_uninteruptable>
<whoring_is_uninteruptable_desc>Whoring will not be interrupted by witnesses</whoring_is_uninteruptable_desc>
<chance_for_other_to_join_in_sex> People who are lovin' have a chance to invite passers-by to join them for some fun (default is 0.25)</chance_for_other_to_join_in_sex>
<chance_for_other_to_join_in_sex_desc>Note that setting this value to its maximum will not guarantee that this event will occur, it will just maximize the chance of an invitation being made.\n\nAll individuals involved must be attracted to and have a good opinion of each other, and the activity must not violate their traits or ideology.\n\nSet this value to zero to prevent these invitations being made.</chance_for_other_to_join_in_sex_desc>
<privacy_please_clothing>Clothing options</privacy_please_clothing>
<underwear_sufficent_for_ideos> Underwear satisfies ideological needs for modesty</underwear_sufficent_for_ideos>
<underwear_sufficent_for_ideos_desc>If an ideology demands that certain body parts must be covered, wearing underwear (clothing that only covers the chest or groin) can help fulfill this requirement.\n\nYou may want to turn this setting off if you want ideologies to be more strict about what they consider to be 'modestly clothed'.\n\nIdeologies which prefer to wear fewer clothes than normal are not affected by this setting.</underwear_sufficent_for_ideos_desc>

View File

@ -2,13 +2,13 @@
<LanguageData>
<VoyeurQuirk><![CDATA[
{pawn} gets a thrill out of spying upon others while they are engaged in intimate acts.
{pawn} will sneakily spy upon others engaged in intimate acts.
]]></VoyeurQuirk>
<CuckoldQuirk><![CDATA[
{pawn} gets turned on when watching their partner have sex with others.
{pawn} has a fetish for watching their partner having sex with other people.
]]></CuckoldQuirk>
<CuckolderQuirk><![CDATA[
{pawn} gets a perverse pleasure out of having their partner watching them having sex with others.
{pawn} experiences a perverse pleasure when their partner catches them having sex with others.
]]></CuckolderQuirk>
</LanguageData>

Binary file not shown.

View File

@ -151,22 +151,6 @@ namespace Privacy_Please
return pawn.story.traits.HasTrait(traitDef);
}
public static bool IsUnfazedBySex(this Pawn pawn)
{
if (IsUnableToSenseSex(pawn))
{ return true; }
if (pawn.AnimalOrWildMan() || pawn.RaceProps.IsMechanoid)
{ return true; }
if (BasicSettings.slavesIgnoreSex && (pawn.IsPrisoner || pawn.IsSlave)) return true;
if (BasicSettings.otherFactionsIgnoreSex && pawn.Faction.IsPlayer == false) return true;
if (pawn.Faction.HostileTo(Faction.OfPlayer)) return true;
if (pawn.Drafted == false && pawn.mindState?.duty?.def?.alwaysShowWeapon == true) return true;
return false;
}
public static bool IsUnableToSenseSex(this Pawn pawn)
{
if (pawn.Dead ||

View File

@ -23,7 +23,7 @@ namespace Privacy_Please
(__instance is JobDriver_JoinInSex) == false &&
Random.value < BasicSettings.chanceForOtherToJoinInSex)
{
DebugMode.Message("Find another to join in sex");
DebugMode.Message("Find another to join in sex?");
List<Pawn> candidates = new List<Pawn>();
float radius = 4f;
@ -31,10 +31,12 @@ namespace Privacy_Please
foreach (Thing thing in GenRadial.RadialDistinctThingsAround(pawn.Position, pawn.Map, radius, true))
{
Pawn other = thing as Pawn;
ThoughtDef thoughtDef = null; // SexInteractionUtility.GetThoughtsAboutSexAct(other, __instance, out Precept precept);
if (other == null) continue;
SexInteractionUtility.GetReactionsToSexDiscovery(pawn.jobs.curDriver as JobDriver_Sex, other, out ReactionToSexDiscovery reactionOfPawn, out ReactionToSexDiscovery reactionOfOther, false);
// Find candidates to invite
if (other != null && thoughtDef?.hediff == null && SexInteractionUtility.PasserbyCanBePropositionedForSex(other, pawn.GetAllSexParticipants()))
if ((int)reactionOfOther >= (int)ReactionToSexDiscovery.Acceptance && SexInteractionUtility.PasserbyCanBePropositionedForSex(other, pawn.GetAllSexParticipants()))
{
DebugMode.Message(other.NameShortColored + " is a potential candidate");
candidates.Add(other);
@ -59,7 +61,7 @@ namespace Privacy_Please
[HarmonyPatch(typeof(JobDriver_Sex), "SexTick")]
public static class HarmonyPatch_JobDriver_Sex_SexTick
{
// If pawns don't have privacy, they'll stop having sex
// When pawns are having sex, intermittently check their surrounds for privacy
public static void Postfix(ref JobDriver_Sex __instance, Pawn pawn)
{
if (pawn.IsHashIntervalTick(90))

View File

@ -25,6 +25,7 @@ namespace Privacy_Please
public static bool ignoreRitualAndPartySex = true;
public static bool slavesIgnoreSex = false;
public static bool otherFactionsIgnoreSex = false;
public static bool rapeIsUninteruptable = true;
public static bool whoringIsUninteruptable = true;
public static bool underwearSufficentForIdeos = true;
@ -48,8 +49,10 @@ namespace Privacy_Please
Scribe_Values.Look(ref ignoreRitualAndPartySex, "ignoreRitualAndPartySex", false);
Scribe_Values.Look(ref slavesIgnoreSex, "slavesIgnoreSex", false);
Scribe_Values.Look(ref otherFactionsIgnoreSex, "otherFactionsIgnoreSex", false);
Scribe_Values.Look(ref rapeIsUninteruptable, "slavesIgnoreSex", true);
Scribe_Values.Look(ref whoringIsUninteruptable, "otherFactionsIgnoreSex", true);
Scribe_Values.Look(ref underwearSufficentForIdeos, "underwearSufficentForIdeos", true);
Scribe_Values.Look(ref underwearSufficentForIdeos, "exposedUnderwearMood", true);
Scribe_Values.Look(ref exposedUnderwearMood, "exposedUnderwearMood", true);
}
}
@ -107,7 +110,9 @@ namespace Privacy_Please
listingStandard.CheckboxLabeled("slaves_ignore_sex".Translate(), ref BasicSettings.slavesIgnoreSex, "slaves_ignore_sex_desc".Translate());
listingStandard.CheckboxLabeled("other_factions_ignore_sex".Translate(), ref BasicSettings.otherFactionsIgnoreSex, "other_factions_ignore_sex_desc".Translate());
listingStandard.CheckboxLabeled("major_taboo_can_start_fights".Translate(), ref BasicSettings.majorTabooCanStartFights, "major_taboo_can_start_fights_desc".Translate());
listingStandard.CheckboxLabeled("rape_is_uninteruptable".Translate(), ref BasicSettings.rapeIsUninteruptable, "rape_is_uninteruptable_desc".Translate());
listingStandard.CheckboxLabeled("whoring_is_uninteruptable".Translate(), ref BasicSettings.whoringIsUninteruptable, "whoring_is_uninteruptable".Translate());
listingStandard.Gap(20f);
listingStandard.Label("chance_for_other_to_join_in_sex".Translate() + ": " + BasicSettings.chanceForOtherToJoinInSex.ToString("F"), -1f, "chance_for_other_to_join_in_sex_desc".Translate());

View File

@ -5,9 +5,7 @@
Approval = 1,
Acceptance = 0,
Discomfort = -1,
Outrage = -2,
Panick = -3,
Nauseated = -3,
Random = -99,
Panic = -2,
Nausea = -3,
}
}

View File

@ -12,20 +12,6 @@ namespace Privacy_Please
public static BodyPartGroupDef ChestBPG;
}
/*[DefOf]
public static class ModThoughtDefOf
{
public static ThoughtDef SeenHavingSex;
public static ThoughtDef SeenHavingSexExhibitionist;
public static ThoughtDef SeenMasturbating;
public static ThoughtDef SeenMasturbatingExhibitionist;
public static ThoughtDef SawSex;
public static ThoughtDef SawSexVoyeur;
public static ThoughtDef SawMasturbation;
public static ThoughtDef SawMasturbationVoyeur;
public static ThoughtDef CaughtCheating;
}*/
[DefOf]
public static class ModPreceptDefOf
{

View File

@ -30,7 +30,6 @@ namespace Privacy_Please
Pawn witness = thing as Pawn;
if (witness == null) continue;
// Caught having sex
if (SexInteractionUtility.PawnCaughtLovinByWitness(pawn, witness))
{
// Get the pawn's and witness' reaction to the discovery
@ -63,20 +62,17 @@ namespace Privacy_Please
}
}
// Threesome
else if (pawn.GetSexReceiver() != null)
// Group sex
else
{
Job job = new Job(DefDatabase<JobDef>.GetNamed("JoinInSex", false), pawn.GetSexReceiver(), bed);
witness.jobs.TryTakeOrderedJob(job);
}
}
// The proposition failed. Awwkkkwaaarrddd....
else if (pawn.IsUnfazedBySex() == false && (int)reactionOfPawn < (int)ReactionToSexDiscovery.Approval)
{
if (BasicSettings.whoringIsUninteruptable && jobDriver?.Sexprops.isWhoring == true)
{ return; }
// The proposition failed. Is this awkward for those having sex?
else if (SexInteractionUtility.PawnWorriesAboutSexWitness(pawn, witness) && (int)reactionOfPawn < (int)ReactionToSexDiscovery.Approval)
{
// The pawn is uncomfortable and is stopping sex
foreach (Pawn participant in pawn.GetAllSexParticipants())
{ participant.jobs.EndCurrentJob(JobCondition.InterruptForced, false, false); }

View File

@ -14,18 +14,35 @@ namespace Privacy_Please
{
public static bool PawnCaughtLovinByWitness(Pawn pawn, Pawn witness)
{
if (witness == null || pawn == witness || witness.IsUnableToSenseSex() || witness.CanSee(pawn) == false)
{ return false; }
if (witness == null || pawn == witness || witness.IsUnableToSenseSex() || witness.CanSee(pawn) == false) return false;
List<Pawn> sexParticipants = pawn.GetAllSexParticipants();
bool witnessIsJoiningSex = witness.jobs.curDriver is JobDriver_SexBaseInitiator && sexParticipants.Contains((witness.jobs.curDriver as JobDriver_SexBaseInitiator).Partner);
if (sexParticipants.Contains(witness) || witnessIsJoiningSex)
{ return false; }
if (sexParticipants.Contains(witness) || witnessIsJoiningSex) return false;
return true;
}
public static bool PawnWorriesAboutSexWitness(Pawn pawn, Pawn witness)
{
JobDriver_Sex jobDriver = pawn.jobs.curDriver as JobDriver_Sex;
if (pawn.IsUnableToSenseSex() || pawn.AnimalOrWildMan() || pawn.RaceProps.IsMechanoid || pawn.Faction.HostileTo(Faction.OfPlayer)) return false;
if (BasicSettings.rapeIsUninteruptable && jobDriver?.Sexprops.isRape == true) return true;
if (witness.HostileTo(pawn)) return true;
if (witness.RaceProps.Animal || witness.RaceProps.IsMechanoid) return false;
if (pawn.Drafted == true || pawn.mindState?.duty?.def?.alwaysShowWeapon == true) return false;
if (BasicSettings.slavesIgnoreSex && (pawn.IsPrisoner || pawn.IsSlave || witness.IsPrisoner || witness.IsSlave)) return false;
if (BasicSettings.otherFactionsIgnoreSex && (pawn.Faction.IsPlayer == false || witness.Faction.IsPlayer == false)) return false;
if (BasicSettings.whoringIsUninteruptable && jobDriver?.Sexprops.isWhoring == true) return true;
return true;
}
public static bool PawnIsCheatingOnPartner(Pawn pawn, Pawn partner)
{
List<Pawn> spouses = pawn.GetSpouses(false);
@ -36,8 +53,8 @@ namespace Privacy_Please
partner.HasTrait("Polygamous") ||
partner.IsMasturbating() ||
partner.IsHavingSex() == false ||
partner.GetSexPartner()?.Dead == true ||
partner.GetSexPartner()?.IsAnimal() == true ||
SexActIsXenophilia(partner.jobs.curDriver as JobDriver_Sex) ||
SexActIsBestiality(partner.jobs.curDriver as JobDriver_Sex) ||
partner.GetAllSexParticipants().Contains(pawn) ||
(spouses.NullOrEmpty() == false && partner.GetAllSexParticipants().Any(x => spouses.Contains(x))))
{ return false; }
@ -94,10 +111,36 @@ namespace Privacy_Please
{ DebugMode.Message("Method '" + sexActReactionDef.sexActCheck + "' was not found"); continue; }
if ((bool)methodInfo.Invoke(null, new object[] { jobDriver }))
{ sexActReactionDef.DetermineReactionOfPawns(pawn, witness, out reactionOfPawn, out reactionOfWitness, applyThoughtDefs); }
}
// Exit here if thoughtDefs are not being applied
if (applyThoughtDefs == false) return;
// Panic reaction
if (reactionOfWitness == ReactionToSexDiscovery.Panic)
{
Job job = JobMaker.MakeJob(JobDefOf.FleeAndCower, CellFinderLoose.GetFleeDest(witness, new List<Thing>() { pawn }, 24f), pawn);
witness.jobs.EndCurrentJob(JobCondition.InterruptForced, false, false);
witness.jobs.StartJob(job);
}
// Vomit reaction
else if (reactionOfWitness == ReactionToSexDiscovery.Nausea)
{
Job jobVomit = JobMaker.MakeJob(JobDefOf.Vomit);
Job jobFlee = JobMaker.MakeJob(JobDefOf.FleeAndCower, CellFinderLoose.GetFleeDest(witness, new List<Thing>() { pawn }, 24f), pawn);
witness.jobs.EndCurrentJob(JobCondition.InterruptForced, false, false);
if (Random.value <= 0.25f)
{
DebugMode.Message(sexActReactionDef.defName);
sexActReactionDef.DetermineReactionOfPawns(pawn, witness, out reactionOfPawn, out reactionOfWitness, applyThoughtDefs);
witness.jobs.StartJob(jobVomit);
witness.jobs.jobQueue.EnqueueFirst(jobFlee);
}
else
{ witness.jobs.StartJob(jobFlee); }
}
}

Binary file not shown.

Binary file not shown.