Implemented basic exhibitionism precept
This commit is contained in:
parent
696b0a9f07
commit
bfdcac73ef
4 changed files with 89 additions and 6 deletions
66
Defs/PreceptDefs/Precepts_Exhibitionism.xml
Normal file
66
Defs/PreceptDefs/Precepts_Exhibitionism.xml
Normal 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>
|
|
@ -129,7 +129,14 @@ namespace Rimworld_Animations_Patch
|
||||||
{ return true; }
|
{ return true; }
|
||||||
|
|
||||||
bool hasPrivacy = 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);
|
pawn.IsInBed(out Building bed);
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,10 @@ namespace Rimworld_Animations_Patch
|
||||||
|
|
||||||
else if (BasicSettings.worryAboutXeno && sexIsXeno)
|
else if (BasicSettings.worryAboutXeno && sexIsXeno)
|
||||||
{ tabooStatus = GetTabooStatusOfIssue(pawn, DefDatabase<IssueDef>.GetNamedSilentFail("HAR_AlienDating"), TabooStatus.NotTaboo, out precept); }
|
{ 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());
|
//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;
|
return tabooStatus;
|
||||||
|
@ -120,15 +123,18 @@ namespace Rimworld_Animations_Patch
|
||||||
|
|
||||||
JobDriver_Sex jobDriver = pawn.jobs.curDriver as JobDriver_Sex;
|
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 pawnThoughtDefName = pawn.IsMasturbating() ? "SeenMasturbating" : "SeenHavingSex";
|
||||||
string witnessThoughtDefName = pawn.IsMasturbating() ? "SawMasturbation" : "SawSex";
|
string witnessThoughtDefName = pawn.IsMasturbating() ? "SawMasturbation" : "SawSex";
|
||||||
|
|
||||||
bool pawnIsExhibitionist = pawn.HasTrait("Exhibitionist") || xxx.has_quirk(pawn, "Exhibitionist");
|
bool pawnIsExhibitionist = pawn.HasTrait("Exhibitionist") || xxx.has_quirk(pawn, "Exhibitionist");
|
||||||
if (pawnIsExhibitionist)
|
if (pawnIsExhibitionist || pawnExhibitionismAllowedByPrecept)
|
||||||
{ pawnThoughtDefName += "Exhibitionist"; }
|
{ pawnThoughtDefName += "Exhibitionist"; }
|
||||||
|
|
||||||
bool witnessIsVoyeur = witness.HasTrait("Voyeur") || xxx.has_quirk(witness, "Voyeur");
|
bool witnessIsVoyeur = witness.HasTrait("Voyeur") || xxx.has_quirk(witness, "Voyeur");
|
||||||
if (witnessIsVoyeur)
|
if (witnessIsVoyeur || witnessVoyeurismAllowedByPrecept)
|
||||||
{ witnessThoughtDefName += "Voyeur"; }
|
{ witnessThoughtDefName += "Voyeur"; }
|
||||||
|
|
||||||
bool sexIsRitual = pawn.GetLord() != null && pawn.GetLord().LordJob is LordJob_Ritual && witness?.Ideo == pawn?.Ideo;
|
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
|
// Determine if there are any issues with the witness' morals
|
||||||
TabooStatus tabooStatus = CheckSexJobAgainstMorals(witness, jobDriver, out Precept precept);
|
TabooStatus tabooStatus = CheckSexJobAgainstMorals(witness, jobDriver, out Precept precept);
|
||||||
|
|
||||||
|
bool witnessNoSpecialReaction = witness.Ideo.HasPrecept(DefDatabase<PreceptDef>.GetNamedSilentFail("Exhibitionism_Acceptable")) && !witnessIsVoyeur;
|
||||||
|
|
||||||
if (tabooStatus == TabooStatus.MajorTaboo)
|
if (tabooStatus == TabooStatus.MajorTaboo)
|
||||||
{ witnessThoughtDefName = "SawMajorTaboo"; witnessJoiningSex = false; }
|
{ witnessThoughtDefName = "SawMajorTaboo"; witnessJoiningSex = false; }
|
||||||
|
|
||||||
|
@ -149,7 +157,7 @@ namespace Rimworld_Animations_Patch
|
||||||
else if (pawnIsCheating)
|
else if (pawnIsCheating)
|
||||||
{ witnessThoughtDefName = "CheatedOnMe"; witnessJoiningSex = false; }
|
{ witnessThoughtDefName = "CheatedOnMe"; witnessJoiningSex = false; }
|
||||||
|
|
||||||
else if (BasicSettings.needPrivacy == false)
|
else if (BasicSettings.needPrivacy == false || witnessNoSpecialReaction)
|
||||||
{ witnessThoughtDefName = ""; }
|
{ witnessThoughtDefName = ""; }
|
||||||
|
|
||||||
// Apply thoughts to witness
|
// Apply thoughts to witness
|
||||||
|
@ -212,6 +220,8 @@ namespace Rimworld_Animations_Patch
|
||||||
// Check issue against pawn precepts
|
// Check issue against pawn precepts
|
||||||
tabooStatus = CheckSexJobAgainstMorals(pawn, jobDriver, out precept);
|
tabooStatus = CheckSexJobAgainstMorals(pawn, jobDriver, out precept);
|
||||||
|
|
||||||
|
bool pawnNoSpecialReaction = pawn.Ideo.HasPrecept(DefDatabase<PreceptDef>.GetNamedSilentFail("Exhibitionism_Acceptable")) && !pawnIsExhibitionist;
|
||||||
|
|
||||||
if (tabooStatus == TabooStatus.MajorTaboo)
|
if (tabooStatus == TabooStatus.MajorTaboo)
|
||||||
{ pawnThoughtDefName = "SeenCommittingMajorTaboo"; witnessJoiningSex = false; }
|
{ pawnThoughtDefName = "SeenCommittingMajorTaboo"; witnessJoiningSex = false; }
|
||||||
|
|
||||||
|
@ -221,7 +231,7 @@ namespace Rimworld_Animations_Patch
|
||||||
else if (pawnIsCheating)
|
else if (pawnIsCheating)
|
||||||
{ pawnThoughtDefName = "CaughtCheating"; witnessJoiningSex = false; }
|
{ pawnThoughtDefName = "CaughtCheating"; witnessJoiningSex = false; }
|
||||||
|
|
||||||
else if (BasicSettings.needPrivacy == false)
|
else if (BasicSettings.needPrivacy == false || pawnNoSpecialReaction)
|
||||||
{ pawnThoughtDefName = ""; }
|
{ pawnThoughtDefName = ""; }
|
||||||
|
|
||||||
// Apply thoughts to pawn
|
// Apply thoughts to pawn
|
||||||
|
|
BIN
Textures/UI/Issues/Exhibitionism.png
Normal file
BIN
Textures/UI/Issues/Exhibitionism.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.7 KiB |
Loading…
Reference in a new issue