Implemented basic exhibitionism precept

This commit is contained in:
AblativeAbsolute 2022-09-17 02:18:16 +00:00
parent 696b0a9f07
commit bfdcac73ef
4 changed files with 89 additions and 6 deletions

View file

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>Exhibitionism</defName>
<label>exhibitionism</label>
<iconPath>UI/Issues/Exhibitionism</iconPath>
</IssueDef>
<!-- Precepts -->
<PreceptDef>
<defName>Exhibitionism_Disapproved</defName>
<issue>Exhibitionism</issue>
<label>disapproved</label>
<description>Pawns will care about others performing sexual acts before them and will feel embarassed.</description>
<impact>Low</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>100</defaultSelectionWeight>
</PreceptDef>
<PreceptDef>
<defName>Exhibitionism_Forbidden</defName>
<issue>Exhibitionism</issue>
<label>forbidden</label>
<description>The display of physical affections in front of others is a major taboo.</description>
<impact>High</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>100</defaultSelectionWeight>
</PreceptDef>
<PreceptDef>
<defName>Exhibitionism_Acceptable</defName>
<issue>Exhibitionism</issue>
<label>acceptable</label>
<description>Pawns will not care about others performing sexual acts before them.</description>
<impact>Low</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>100</defaultSelectionWeight>
</PreceptDef>
<PreceptDef>
<defName>Exhibitionism_Approved</defName>
<issue>Exhibitionism</issue>
<label>approved</label>
<description>The display of physical affection before others is encouraged.</description>
<impact>Medium</impact>
<displayOrderInIssue>20</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>100</defaultSelectionWeight>
</PreceptDef>
<!--
<PreceptDef>
<defName>Exhibitionism_Required</defName>
<issue>Exhibitionism</issue>
<label>required</label>
<description>The display of physical affection before others is required.</description>
<impact>High</impact>
<displayOrderInIssue>10</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
<defaultSelectionWeight>100</defaultSelectionWeight>
</PreceptDef>
-->
</Defs>

View file

@ -129,7 +129,14 @@ namespace Rimworld_Animations_Patch
{ return true; }
bool hasPrivacy = true;
bool isExhibitionist = pawn.HasTrait("Exhibitionist") || xxx.has_quirk(pawn, "Exhibitionist");
bool isExhibitionismAllowedByPrecept = false;
Precept precept = new Precept();
if (HasPreceptForIssue(pawn, DefDatabase<IssueDef>.GetNamedSilentFail("Exhibitionism"), out precept)) {
isExhibitionismAllowedByPrecept = !IssueIsMajorTaboo(pawn, DefDatabase<IssueDef>.GetNamedSilentFail("Exhibitionism"), out precept) && !IssueIsMinorTaboo(pawn, DefDatabase<IssueDef>.GetNamedSilentFail("Exhibitionism"), out precept);
}
bool isExhibitionist = pawn.HasTrait("Exhibitionist") || xxx.has_quirk(pawn, "Exhibitionist") || isExhibitionismAllowedByPrecept;
pawn.IsInBed(out Building bed);

View file

@ -91,7 +91,10 @@ namespace Rimworld_Animations_Patch
else if (BasicSettings.worryAboutXeno && sexIsXeno)
{ tabooStatus = GetTabooStatusOfIssue(pawn, DefDatabase<IssueDef>.GetNamedSilentFail("HAR_AlienDating"), TabooStatus.NotTaboo, out precept); }
else
{ tabooStatus = GetTabooStatusOfIssue(pawn, DefDatabase<IssueDef>.GetNamedSilentFail("Exhibitionism"), TabooStatus.NotTaboo, out precept); }
//DebugMode.Message("Sex job is: " + jobDriver + " Issue is: " + (precept?.def?.issue?.defName).ToStringSafe() + " Opinion is: " + (precept?.def?.defName).ToStringSafe() + " Judgement is: " + tabooStatus.ToString());
return tabooStatus;
@ -120,15 +123,18 @@ namespace Rimworld_Animations_Patch
JobDriver_Sex jobDriver = pawn.jobs.curDriver as JobDriver_Sex;
bool pawnExhibitionismAllowedByPrecept = pawn.Ideo.HasPrecept(DefDatabase<PreceptDef>.GetNamedSilentFail("Exhibitionism_Approved"));
bool witnessVoyeurismAllowedByPrecept = witness.Ideo.HasPrecept(DefDatabase<PreceptDef>.GetNamedSilentFail("Exhibitionism_Approved"));
string pawnThoughtDefName = pawn.IsMasturbating() ? "SeenMasturbating" : "SeenHavingSex";
string witnessThoughtDefName = pawn.IsMasturbating() ? "SawMasturbation" : "SawSex";
bool pawnIsExhibitionist = pawn.HasTrait("Exhibitionist") || xxx.has_quirk(pawn, "Exhibitionist");
if (pawnIsExhibitionist)
if (pawnIsExhibitionist || pawnExhibitionismAllowedByPrecept)
{ pawnThoughtDefName += "Exhibitionist"; }
bool witnessIsVoyeur = witness.HasTrait("Voyeur") || xxx.has_quirk(witness, "Voyeur");
if (witnessIsVoyeur)
if (witnessIsVoyeur || witnessVoyeurismAllowedByPrecept)
{ witnessThoughtDefName += "Voyeur"; }
bool sexIsRitual = pawn.GetLord() != null && pawn.GetLord().LordJob is LordJob_Ritual && witness?.Ideo == pawn?.Ideo;
@ -140,6 +146,8 @@ namespace Rimworld_Animations_Patch
// Determine if there are any issues with the witness' morals
TabooStatus tabooStatus = CheckSexJobAgainstMorals(witness, jobDriver, out Precept precept);
bool witnessNoSpecialReaction = witness.Ideo.HasPrecept(DefDatabase<PreceptDef>.GetNamedSilentFail("Exhibitionism_Acceptable")) && !witnessIsVoyeur;
if (tabooStatus == TabooStatus.MajorTaboo)
{ witnessThoughtDefName = "SawMajorTaboo"; witnessJoiningSex = false; }
@ -149,7 +157,7 @@ namespace Rimworld_Animations_Patch
else if (pawnIsCheating)
{ witnessThoughtDefName = "CheatedOnMe"; witnessJoiningSex = false; }
else if (BasicSettings.needPrivacy == false)
else if (BasicSettings.needPrivacy == false || witnessNoSpecialReaction)
{ witnessThoughtDefName = ""; }
// Apply thoughts to witness
@ -212,6 +220,8 @@ namespace Rimworld_Animations_Patch
// Check issue against pawn precepts
tabooStatus = CheckSexJobAgainstMorals(pawn, jobDriver, out precept);
bool pawnNoSpecialReaction = pawn.Ideo.HasPrecept(DefDatabase<PreceptDef>.GetNamedSilentFail("Exhibitionism_Acceptable")) && !pawnIsExhibitionist;
if (tabooStatus == TabooStatus.MajorTaboo)
{ pawnThoughtDefName = "SeenCommittingMajorTaboo"; witnessJoiningSex = false; }
@ -221,7 +231,7 @@ namespace Rimworld_Animations_Patch
else if (pawnIsCheating)
{ pawnThoughtDefName = "CaughtCheating"; witnessJoiningSex = false; }
else if (BasicSettings.needPrivacy == false)
else if (BasicSettings.needPrivacy == false || pawnNoSpecialReaction)
{ pawnThoughtDefName = ""; }
// Apply thoughts to pawn

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB