diff --git a/1.4/Assemblies/Privacy-Please.dll b/1.4/Assemblies/Privacy-Please.dll index 8616b86..263b6bc 100644 Binary files a/1.4/Assemblies/Privacy-Please.dll and b/1.4/Assemblies/Privacy-Please.dll differ diff --git a/1.4/Assemblies/Privacy-Please.pdb b/1.4/Assemblies/Privacy-Please.pdb index be0740f..88cfb36 100644 Binary files a/1.4/Assemblies/Privacy-Please.pdb and b/1.4/Assemblies/Privacy-Please.pdb differ diff --git a/Defs/PreceptDefs/PreceptDef_Exhibitionism.xml b/Defs/PreceptDefs/PreceptDef_Exhibitionism.xml index fb35db0..35cedca 100644 --- a/Defs/PreceptDefs/PreceptDef_Exhibitionism.xml +++ b/Defs/PreceptDefs/PreceptDef_Exhibitionism.xml @@ -23,7 +23,7 @@ Exhibitionism_Acceptable Exhibitionism - Having sex out in the open is normal and deserves no special attention. + Sex infront of others is normal and deserves no special attention. Low 20 1000 @@ -34,7 +34,7 @@ Exhibitionism_Approved Exhibitionism - Displays of physical intimacy are to be celebrated. + Physical intimacy is to be celebrated. Medium 10 1000 diff --git a/Defs/PreceptDefs/PreceptDef_Infidelity.xml b/Defs/PreceptDefs/PreceptDef_Infidelity.xml index 731d949..187241f 100644 --- a/Defs/PreceptDefs/PreceptDef_Infidelity.xml +++ b/Defs/PreceptDefs/PreceptDef_Infidelity.xml @@ -12,7 +12,7 @@ Infidelity_Heartbreaking Infidelity - Infidelity is a betrayal that will not soon be forgiven or forgotten. + test Low 30 1000 @@ -23,7 +23,7 @@ Infidelity_Disapproved Infidelity - Cheating on a partner is considered disrespectful. + test Low 20 1000 @@ -34,7 +34,7 @@ Infidelity_Acceptable Infidelity - Physical intimacy is something that should be explored freely with others. + test Low 10 1000 diff --git a/Defs/PreceptDefs/PreceptDef_MasturbationExtension.xml b/Defs/PreceptDefs/PreceptDef_MasturbationExtension.xml deleted file mode 100644 index 95108e8..0000000 --- a/Defs/PreceptDefs/PreceptDef_MasturbationExtension.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Masturbation_Acceptable - Masturbation - - Masturbation is a normal, healthy activity. - Low - 10 - 1000 - 100 - - - \ No newline at end of file diff --git a/Defs/SexActReactionDefs.xml b/Defs/SexActReactionDefs.xml index 23fd8fd..69d2962 100644 --- a/Defs/SexActReactionDefs.xml +++ b/Defs/SexActReactionDefs.xml @@ -1,126 +1,57 @@ - - - reactionToNecrophilia - Necrophilia - SexActIsNecrophilia - - PartookInNecrophilia_Disapproved - -
  • - -
  • Necrophiliac
  • - - PartookInNecrophilia_Honorable - -
    -
    + + reactionToExhibitionism + Exhibitionism + SexActIsExhibitionism - SawNecrophilia_Abhorrent - -
  • SawNecrophilia_Abhorrent
  • -
  • SawNecrophilia_Horrible
  • -
  • SawNecrophilia_Disapproved
  • -
  • SawNecrophilia_Acceptable
  • -
  • SawNecrophilia_Honorable
  • -
    + SawExhibitionism_Disapproved + +
  • SawExhibitionism_Disapproved
  • +
  • SawExhibitionism_Acceptable
  • +
  • SawExhibitionism_Approved
  • +
  • - -
  • Necrophiliac
  • - - SawNecrophilia_Honorable + Voyeur + SawExhibitionism_Approved
    -
    +
    - - reactionToBestiality - Bestiality - SexActIsBestiality - - PartookInBestiality_Disapproved - -
  • - -
  • Zoophile
  • - - PartookInBestiality_Honorable - -
    -
    + + reactionToMasturbation + Masturbation + SexActIsMasturbation - SawBestiality_Abhorrent - -
  • SawBestiality_Abhorrent
  • -
  • SawBestiality_Horrible
  • -
  • SawBestiality_Disapproved
  • -
  • SawBestiality_Acceptable
  • -
  • SawBestiality_Honorable
  • -
    + SawMasturbation_Disapproved + +
  • SawMasturbation_Abhorrent
  • +
  • SawMasturbation_Disapproved
  • +
  • SawMasturbation_Acceptable
  • +
  • - -
  • Zoophile
  • - - SawBestiality_Honorable + Voyeur + SawMasturbation_Approved
    -
    -
    - - - reactionToRape - Rape - SexActIsRape - - PartookInRape_Disapproved - -
  • - -
  • Rapist
  • - - PartookInRape_Honorable - -
    -
    - - SawRape_Abhorrent - -
  • SawRape_Abhorrent
  • -
  • SawRape_Horrible
  • -
  • SawRape_Disapproved
  • -
  • SawRape_Acceptable
  • -
  • SawRape_Honorable
  • -
    - -
  • - -
  • Rapist
  • - - SawRape_Honorable - -
    -
    +
    reactionToInfidelity Infidelity SexActIsInfidelity - - PartookInInfidelity_Disapproved - SawInfidelity_Heartbreaking - +
  • SawInfidelity_Heartbreaking
  • SawInfidelity_Disapproved
  • SawInfidelity_Acceptable
  • -
    +
  • Cuckold @@ -134,32 +65,15 @@ reactionToXenophilia HAR_AlienDating SexActIsRape - - PartookInHAR_AlienDating_Acceptable - -
  • - - 1 - - PartookInHAR_AlienDating_Prohibited -
  • -
  • - - -1 - - PartookInHAR_AlienDating_Know_Honorable -
  • -
    - SawHAR_AlienDating_Acceptable - +
  • SawHAR_AlienDating_Prohibited
  • SawHAR_AlienDating_Horrible
  • SawHAR_AlienDating_Acceptable
  • SawHAR_AlienDating_Preferred
  • SawHAR_AlienDating_Know_Honorable
  • -
    +
  • @@ -176,81 +90,77 @@ - - - reactionToMasturbation - Masturbation - SexActIsMasturbation - - PartookInMasturbation_Disapproved - -
  • PartookInMasturbation_Abhorrent
  • -
  • PartookInMasturbation_Disapproved
  • -
  • PartookInMasturbation_Acceptable
  • - - -
  • - Exhibitionism_Approved - PartookInMasturbation_Exhibitionism_Approved -
  • -
  • - Exhibitionism_Acceptable - PartookInMasturbation_Exhibitionism_Acceptable -
  • -
  • - Exhibitionist - PartookInMasturbation_Approved -
  • -
    - + + + reactionToBestiality + Bestiality + SexActIsBestiality - SawMasturbation_Disapproved - -
  • SawMasturbation_Abhorrent
  • -
  • SawMasturbation_Disapproved
  • -
  • SawMasturbation_Acceptable
  • -
    + SawBestiality_Abhorrent + +
  • SawBestiality_Abhorrent
  • +
  • SawBestiality_Horrible
  • +
  • SawBestiality_Disapproved
  • +
  • SawBestiality_Acceptable
  • +
  • SawBestiality_Honorable
  • +
  • - Voyeur - SawMasturbation_Approved + +
  • Zoophile
  • + + SawBestiality_Honorable
    -
    +
    - - reactionToExhibitionism - Exhibitionism - SexActIsExhibitionism - - PartookInExhibitionism_Disapproved - -
  • PartookInExhibitionism_Disapproved
  • -
  • PartookInExhibitionism_Acceptable
  • -
  • PartookInExhibitionism_Approved
  • -
    - -
  • - Exhibitionist - PartookInExhibitionism_Approved -
  • -
    -
    + + reactionToNecrophilia + Necrophilia + SexActIsNecrophilia - SawExhibitionism_Disapproved - -
  • SawExhibitionism_Disapproved
  • -
  • SawExhibitionism_Acceptable
  • -
  • SawExhibitionism_Approved
  • -
    + SawNecrophilia_Abhorrent + +
  • SawNecrophilia_Abhorrent
  • +
  • SawNecrophilia_Horrible
  • +
  • SawNecrophilia_Disapproved
  • +
  • SawNecrophilia_Acceptable
  • +
  • SawNecrophilia_Honorable
  • +
  • - Voyeur - SawExhibitionism_Approved + +
  • Necrophiliac
  • + + SawNecrophilia_Honorable
    -
    +
    - + + + reactionToRape + Rape + SexActIsRape + + SawRape_Abhorrent + +
  • SawRape_Abhorrent
  • +
  • SawRape_Horrible
  • +
  • SawRape_Disapproved
  • +
  • SawRape_Acceptable
  • +
  • SawRape_Honorable
  • +
    + +
  • + +
  • Rapist
  • + + SawRape_Honorable + +
    +
    +
    +
    \ No newline at end of file diff --git a/Defs/ThoughtDefs/ThoughtDefs.xml b/Defs/ThoughtDefs/ThoughtDefs.xml index 210b581..0ce7311 100644 --- a/Defs/ThoughtDefs/ThoughtDefs.xml +++ b/Defs/ThoughtDefs/ThoughtDefs.xml @@ -2,9 +2,138 @@ + + SeenMasturbating + Thought_Memory + 1.0 + 3 + 0.5 + +
  • + + I'm so embarrassed! + -12 +
  • +
    + +
  • Exhibitionism_Acceptable
  • +
  • Exhibitionism_Approved
  • +
    +
    + + + SeenHavingSex + Thought_Memory + 1.0 + 3 + 0.5 + +
  • + + Well, that was awkward! + -8 +
  • +
    + +
  • Exhibitionism_Acceptable
  • +
  • Exhibitionism_Approved
  • +
    +
    + + SeenMasturbatingExhibitionist + Thought_Memory + 1.0 + 1 + +
  • + + It's OK, come and have a closer look... + 4 +
  • +
    +
    + + SeenHavingSexExhibitionist + Thought_Memory + 1.0 + 1 + +
  • + + Heheh, hope they enjoyed the show! + 6 +
  • +
    +
    + + + SawMasturbation + Thought_Memory + 1.0 + 1 + 0.5 + +
  • + + Argh! I'm so sorry! + -6 +
  • +
    + +
  • Exhibitionism_Acceptable
  • +
  • Exhibitionism_Approved
  • +
    +
    + + SawSex + Thought_Memory + 1.0 + 1 + 0.5 + +
  • + + Jeez! Get a room! + -4 +
  • +
    + +
  • Exhibitionism_Acceptable
  • +
  • Exhibitionism_Approved
  • +
    +
    + + + SawMasturbationVoyeur + Thought_Memory + 1.0 + 1 + +
  • + + I think that awoke something in me... + 4 +
  • +
    +
    + + + SawSexVoyeur + Thought_Memory + 1.0 + 1 + +
  • + + Damn. So hot! + 6 +
  • +
    +
    + CaughtCheating Thought_Memory @@ -20,6 +149,64 @@ + + SeenCommittingTaboo + Thought_Memory + 2.0 + 1 + 0.5 + +
  • + + I'm so ashamed. + -15 +
  • +
    +
    + + SeenCommittingMajorTaboo + Thought_Memory + 3.0 + 1 + 0.5 + +
  • + + How can I face the world after this? + -20 +
  • +
    +
    + + + SawTaboo + Thought_Memory + 2.0 + 1 + 0.5 + +
  • + + What vile degeneracy! + -10 +
  • +
    +
    + + + SawMajorTaboo + Thought_Memory + 3.0 + 1 + 0.5 + +
  • + + Disgusting vermin! You'll get yours! + -15 +
  • +
    +
    diff --git a/Defs/ThoughtDefs/ThoughtDefsBeastiality.xml b/Defs/ThoughtDefs/ThoughtDefsBeastiality.xml index ba5497e..8195103 100644 --- a/Defs/ThoughtDefs/ThoughtDefsBeastiality.xml +++ b/Defs/ThoughtDefs/ThoughtDefsBeastiality.xml @@ -17,7 +17,7 @@
  • Zoophile
  • - Outrage + Outrage @@ -35,7 +35,7 @@
  • Zoophile
  • - Discomfort + Discomfort
    @@ -53,7 +53,7 @@
  • Zoophile
  • - Discomfort + Discomfort
    @@ -71,7 +71,7 @@
  • Zoophile
  • - Acceptance + Acceptance
    @@ -86,7 +86,7 @@ +2 - Approval + Approval diff --git a/Defs/ThoughtDefs/ThoughtDefsExhibitionism.xml b/Defs/ThoughtDefs/ThoughtDefsExhibitionism.xml index 104dff3..b222d05 100644 --- a/Defs/ThoughtDefs/ThoughtDefsExhibitionism.xml +++ b/Defs/ThoughtDefs/ThoughtDefsExhibitionism.xml @@ -1,56 +1,7 @@ - - - PartookInExhibitionism_Disapproved - Thought_Memory - 1.0 - 1 - 0.5 - -
  • - - That was soooo awkward! - -8 -
  • -
    - Discomfort -
    - - PartookInExhibitionism_Acceptable - Thought_Memory - 1.0 - 1 - 0.5 - -
  • - - Eh, it's no big deal. - 0 -
  • -
    - Acceptance -
    - - - PartookInExhibitionism_Approved - Thought_Memory - 1.0 - 1 - 0.5 - -
  • - - Mmm, enjoying the show? - 6 -
  • -
    - Approval -
    - - SawExhibitionism_Disapproved Thought_Memory @@ -60,11 +11,11 @@
  • - Jeez! Get a room! + test -4
  • - Discomfort + Discomfort
    @@ -76,11 +27,11 @@
  • - Don't mind me, just passing through. + test 0
  • - Acceptance + Acceptance
    @@ -92,11 +43,11 @@
  • - Damn, that's hot! - 3 + test + 2
  • - Approval + Approval
    diff --git a/Defs/ThoughtDefs/ThoughtDefsInfidelity.xml b/Defs/ThoughtDefs/ThoughtDefsInfidelity.xml index bdb33d7..4f93c76 100644 --- a/Defs/ThoughtDefs/ThoughtDefsInfidelity.xml +++ b/Defs/ThoughtDefs/ThoughtDefsInfidelity.xml @@ -2,96 +2,42 @@ - - - PartookInInfidelity_Heartbreaking - 3 - 3 - 1 - -
  • - - {1}, I'm so sorry. Please, forgive me... - -20 -
  • -
    - Discomfort -
    - - - PartookInInfidelity_Disapproved - 3 - 3 - 1 - -
  • - - Sorry, {1}. Please don't be too mad? - -10 -
  • -
    - Discomfort -
    - - - PartookInInfidelity_Acceptable - 3 - 3 - 1 - -
  • - - - Oh hey babe, you wanna join us? -
  • -
    - Acceptance -
    - - - PartookInInfidelity_Approved - 3 - 3 - 1 - -
  • - - - -
  • -
    - Approval -
    - - SawInfidelity_Heartbreaking 3 3 + Indignant 1
  • - + Filthy degenerates! - -20 + -15
  • - Outrage + + -1 + + Outrage
    SawInfidelity_Disapproved 3 3 + Disquiet 1
  • - - + + Oh! That's not right... -10
  • - Discomfort + + -1 + + Discomfort
    @@ -101,12 +47,15 @@ 1
  • - - - -5 + + Oops, sorry about walking in on you! + -4
  • - Acceptance + + 1 + + Acceptance
    @@ -116,12 +65,15 @@ 1
  • - - - + + I wonder what their kids would look like? + +1
  • - Approval + + 1 + + Approval
    diff --git a/Defs/ThoughtDefs/ThoughtDefsMasturbation.xml b/Defs/ThoughtDefs/ThoughtDefsMasturbation.xml index f9d27e8..8916705 100644 --- a/Defs/ThoughtDefs/ThoughtDefsMasturbation.xml +++ b/Defs/ThoughtDefs/ThoughtDefsMasturbation.xml @@ -2,132 +2,68 @@ - - - PartookInMasturbation_Abhorrent - 3 - 3 - 1 - -
  • - - I'm disgusted with myself. - -15 -
  • -
    - Discomfort -
    - - - PartookInMasturbation_Disapproved - Thought_Memory - 1.0 - 1 - 0.5 - -
  • - - I feel nothing but shame. - -5 -
  • -
    - Discomfort -
    - - - PartookInMasturbation_Acceptable - Thought_Memory - 1.0 - 1 - 0.5 - -
  • - - That was a little humiliating. - -5 -
  • -
    - Acceptance -
    - - - PartookInMasturbation_Approved - Thought_Memory - 1.0 - 1 - 0.5 - -
  • - - Come closer, that a good look! - -5 -
  • -
    - Approval -
    - - SawMasturbation_Abhorrent 3 3 + Indignant 1
  • - You'll go blind if up keep that up! + You'll go blind you know! -15
  • - Outrage + Outrage
    SawMasturbation_Disapproved Thought_Memory - 3 - 3 - 0.5 - -
  • - - Argh! I'm so sorry! - -10 -
  • -
    - Discomfort -
    - - - SawMasturbation_Acceptable - Thought_Memory - 1 + 1.0 1 0.5
  • - Well, that was embarrassing. + Argh! I'm so sorry! -5
  • - Acceptance + Discomfort +
    + + + SawMasturbation_Acceptable + Thought_Memory + 1.0 + 1 + 0.5 + +
  • + + Argh! I'm so sorry! + -5 +
  • +
    + Acceptance
    SawMasturbation_Approved Thought_Memory - 1 + 1.0 1 0.5
  • - - I think that awoke something in me... - 3 + + Argh! I'm so sorry! + -5
  • - Approval + Approval
    diff --git a/Defs/ThoughtDefs/ThoughtDefsNecrophilia.xml b/Defs/ThoughtDefs/ThoughtDefsNecrophilia.xml index 33fcc74..a2ec228 100644 --- a/Defs/ThoughtDefs/ThoughtDefsNecrophilia.xml +++ b/Defs/ThoughtDefs/ThoughtDefsNecrophilia.xml @@ -17,7 +17,7 @@
  • Necrophiliac
  • - Outrage + Outrage @@ -35,7 +35,7 @@
  • Necrophiliac
  • - Discomfort + Discomfort
    @@ -53,7 +53,7 @@
  • Necrophiliac
  • - Discomfort + Discomfort
    @@ -71,7 +71,7 @@
  • Necrophiliac
  • - Acceptance + Acceptance
    @@ -86,7 +86,7 @@ +2 - Approval + Approval diff --git a/Defs/ThoughtDefs/ThoughtDefsRape.xml b/Defs/ThoughtDefs/ThoughtDefsRape.xml index 9f48aff..8996411 100644 --- a/Defs/ThoughtDefs/ThoughtDefsRape.xml +++ b/Defs/ThoughtDefs/ThoughtDefsRape.xml @@ -17,7 +17,7 @@
  • Rapist
  • - Outrage + Outrage @@ -35,7 +35,7 @@
  • Rapist
  • - Discomfort + Discomfort
    @@ -53,7 +53,7 @@
  • Rapist
  • - Discomfort + Discomfort
    @@ -71,7 +71,7 @@
  • Rapist
  • - Acceptance + Acceptance
    @@ -86,7 +86,7 @@ +2 - Approval + Approval diff --git a/Defs/ThoughtDefs/ThoughtDefsXenophilia.xml b/Defs/ThoughtDefs/ThoughtDefsXenophilia.xml index af0f890..f5f8249 100644 --- a/Defs/ThoughtDefs/ThoughtDefsXenophilia.xml +++ b/Defs/ThoughtDefs/ThoughtDefsXenophilia.xml @@ -18,7 +18,7 @@ -1 - Outrage + Outrage @@ -37,7 +37,7 @@ -1 - Discomfort + Discomfort @@ -55,7 +55,7 @@ 1 - Acceptance + Acceptance @@ -73,7 +73,7 @@ 1 - Approval + Approval @@ -91,7 +91,7 @@ 1 - Approval + Approval diff --git a/Source/.vs/SourceCode/v16/.suo b/Source/.vs/SourceCode/v16/.suo index c7b44e8..2b885e7 100644 Binary files a/Source/.vs/SourceCode/v16/.suo and b/Source/.vs/SourceCode/v16/.suo differ diff --git a/Source/Scripts/Defs/SexActReactionDef.cs b/Source/Scripts/Defs/SexActReactionDef.cs index 4993328..72e2eee 100644 --- a/Source/Scripts/Defs/SexActReactionDef.cs +++ b/Source/Scripts/Defs/SexActReactionDef.cs @@ -33,7 +33,7 @@ namespace Privacy_Please public class SubSexActReactionDef { public SexActThoughtDef defaultThoughtDef; - public List preceptThoughtDefs; + public List associatedThoughtDefs; public List replacementThoughts; } @@ -41,20 +41,21 @@ namespace Privacy_Please { public List requiredTraits; public string requiredQuirk; - public PreceptDef requiredPreceptDef; public SexActThoughtDef replacementThoughtDef; } - - public void DetermineReactionOfPawns(Pawn pawn, Pawn witness, out ReactionToSexDiscovery reactionOfPawn, out ReactionToSexDiscovery reactionOfWitness, bool applyThoughtDefs) + + public ReactionToSexAct DetermineReactionOfPawns(Pawn pawn, Pawn witness, bool applyThoughtDefs) { - reactionOfPawn = DetermineReaction(pawn, witness, pawnReaction, applyThoughtDefs); - reactionOfWitness = DetermineReaction(witness, pawn, witnessReaction, applyThoughtDefs); + DetermineReactionOfPawn(pawn, witness, pawnReaction, applyThoughtDefs); + ReactionToSexAct reactionToSexAct = DetermineReactionOfPawn(witness, pawn, witnessReaction, applyThoughtDefs); + + return reactionToSexAct; } - public ReactionToSexDiscovery DetermineReaction(Pawn reactor, Pawn otherPawn, SubSexActReactionDef reaction, bool applyThoughtDef) + public ReactionToSexAct DetermineReactionOfPawn(Pawn reactor, Pawn otherPawn, SubSexActReactionDef reaction, bool applyThoughtDef) { SexActThoughtDef thoughtDef = GetThoughtDefForReactor(reactor, reaction, out Precept precept); - ReactionToSexDiscovery reactionToSexAct = thoughtDef.reactionToSexDiscovery; + ReactionToSexAct reactionToSexAct = thoughtDef.reactionToSexAct; if (applyThoughtDef) { reactor.needs.mood.thoughts.memories.TryGainMemory(thoughtDef, otherPawn, precept); } @@ -82,22 +83,16 @@ namespace Privacy_Please if (replacementThought.requiredQuirk != null && xxx.has_quirk(reactor, replacementThought.requiredQuirk)) { return replacementThought.replacementThoughtDef; } - - if (replacementThought.requiredPreceptDef != null && reactor.ideo.Ideo.HasPrecept(replacementThought.requiredPreceptDef)) - { - precept = reactor.ideo.Ideo.GetPrecept(replacementThought.requiredPreceptDef); - return replacementThought.replacementThoughtDef; - } } } precept = reactor.GetPreceptForIssue(issueDef); - if (precept != null && reaction.preceptThoughtDefs.NullOrEmpty() == false) + if (precept != null && reaction.associatedThoughtDefs.NullOrEmpty() == false) { string thoughtDefName = precept.def.defName; - foreach (SexActThoughtDef associatedThoughtDef in reaction.preceptThoughtDefs) + foreach (SexActThoughtDef associatedThoughtDef in reaction.associatedThoughtDefs) { if (associatedThoughtDef.defName.Contains(thoughtDefName)) { return associatedThoughtDef; } diff --git a/Source/Scripts/Defs/SexActThoughtDef.cs b/Source/Scripts/Defs/SexActThoughtDef.cs index da08eaa..7777366 100644 --- a/Source/Scripts/Defs/SexActThoughtDef.cs +++ b/Source/Scripts/Defs/SexActThoughtDef.cs @@ -9,6 +9,6 @@ namespace Privacy_Please { public class SexActThoughtDef : ThoughtDef { - public ReactionToSexDiscovery reactionToSexDiscovery = ReactionToSexDiscovery.Acceptance; + public ReactionToSexAct reactionToSexAct = ReactionToSexAct.Acceptance; } } diff --git a/Source/Scripts/Extensions/PawnExtension.cs b/Source/Scripts/Extensions/PawnExtension.cs index 5e611ed..503f9b3 100644 --- a/Source/Scripts/Extensions/PawnExtension.cs +++ b/Source/Scripts/Extensions/PawnExtension.cs @@ -19,9 +19,15 @@ namespace Privacy_Please return bed != null; } + public static bool IsSeated(this Pawn pawn, out Building seat) + { + seat = pawn.Position.GetThingList(pawn.Map).FirstOrDefault(x => x is Building && x.def.building.isSittable) as Building; + return seat != null; + } + public static bool IsHavingSex(this Pawn pawn) { - if (pawn?.jobs?.curDriver == null || pawn.jobs.curDriver is JobDriver_Sex == false) + if (pawn?.jobs?.curDriver == null || pawn.Dead || pawn.jobs.curDriver is JobDriver_Sex == false) { return false; } JobDriver_Sex jobdriver = pawn.jobs.curDriver as JobDriver_Sex; @@ -31,7 +37,7 @@ namespace Privacy_Please public static bool IsMasturbating(this Pawn pawn) { - if (pawn?.jobs?.curDriver == null || pawn.jobs.curDriver is JobDriver_Sex == false) + if (pawn?.jobs?.curDriver == null || pawn.Dead || pawn.jobs.curDriver is JobDriver_Sex == false) { return false; } JobDriver_Sex jobdriver = pawn.jobs.curDriver as JobDriver_Sex; @@ -41,12 +47,12 @@ namespace Privacy_Please public static Pawn GetSexInitiator(this Pawn pawn) { - if (pawn?.jobs?.curDriver != null && pawn.jobs.curDriver is JobDriver_SexBaseInitiator) + if (pawn?.jobs?.curDriver != null && pawn.Dead == false && pawn.jobs.curDriver is JobDriver_SexBaseInitiator) { return pawn; } JobDriver_SexBaseReciever jobDriver = pawn.jobs.curDriver as JobDriver_SexBaseReciever; - if (jobDriver?.Partner?.jobs?.curDriver != null && jobDriver.Partner.jobs.curDriver is JobDriver_SexBaseInitiator) + if (jobDriver?.Partner?.jobs?.curDriver != null && jobDriver.Partner.Dead == false && jobDriver.Partner.jobs.curDriver is JobDriver_SexBaseInitiator) { return jobDriver.Partner; } return null; @@ -59,7 +65,7 @@ namespace Privacy_Please JobDriver_SexBaseInitiator jobDriver = pawn.jobs.curDriver as JobDriver_SexBaseInitiator; - if (jobDriver?.Partner?.jobs?.curDriver != null && jobDriver.Partner.jobs.curDriver is JobDriver_SexBaseReciever) + if (jobDriver?.Partner?.jobs?.curDriver != null && jobDriver.Partner.Dead == false && jobDriver.Partner.jobs.curDriver is JobDriver_SexBaseReciever) { return jobDriver.Partner; } return null; @@ -113,6 +119,11 @@ namespace Privacy_Please return lovers.Any(x => x.otherPawn == other); } + //public static bool GetThoughtOnIssue(this Pawn pawn, string issueDefName, out Precept precept) + //{ + + //} + public static Precept GetPreceptForIssue(this Pawn pawn, IssueDef issueDef) { if (issueDef == null || pawn?.Ideo == null) @@ -153,27 +164,16 @@ namespace Privacy_Please public static bool IsUnfazedBySex(this Pawn pawn) { - if (IsUnableToSenseSex(pawn)) - { return true; } - - if (pawn.AnimalOrWildMan() || pawn.RaceProps.IsMechanoid) + if (pawn.Dead || + pawn.AnimalOrWildMan() || + pawn.RaceProps.IsMechanoid || + pawn.Awake() == false || + pawn.Suspended) { 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 || - pawn.Awake() == false || - pawn.Suspended || - pawn.MentalState != null) - { return true; } return false; } diff --git a/Source/Scripts/Patches/HarmonyPatch_RJW.cs b/Source/Scripts/Patches/HarmonyPatch_RJW.cs index fac5146..3d5912a 100644 --- a/Source/Scripts/Patches/HarmonyPatch_RJW.cs +++ b/Source/Scripts/Patches/HarmonyPatch_RJW.cs @@ -34,7 +34,7 @@ namespace Privacy_Please ThoughtDef thoughtDef = null; // SexInteractionUtility.GetThoughtsAboutSexAct(other, __instance, out Precept precept); // Find candidates to invite - if (other != null && thoughtDef?.hediff == null && SexInteractionUtility.PasserbyCanBePropositionedForSex(other, pawn.GetAllSexParticipants())) + if (other != null && thoughtDef?.hediff == null && SexInteractionUtility.CouldInvitePasserbyForSex(other, pawn.GetAllSexParticipants())) { DebugMode.Message(other.NameShortColored + " is a potential candidate"); candidates.Add(other); @@ -64,8 +64,29 @@ namespace Privacy_Please { if (pawn.IsHashIntervalTick(90)) { - if (pawn.IsMasturbating() || pawn.IsHavingSex()) - { PrivacyUtility.PrivacyCheckForPawn(pawn, 8f); } + if (pawn.IsMasturbating() && PrivacyUtility.PawnHasPrivacy(pawn, 8f) == false) + { pawn.jobs.EndCurrentJob(JobCondition.InterruptForced, false, false); } + + else if (pawn.IsHavingSex()) + { + bool havePrivacy = true; + List participants = pawn.GetAllSexParticipants(); + + foreach (Pawn participant in participants) + { + if (PrivacyUtility.PawnHasPrivacy(participant, 8f) == false) + { havePrivacy = false; } + } + + if (__instance.Sexprops != null && (__instance.Sexprops.isRape || __instance.Sexprops.isWhoring)) + { return; } + + if (havePrivacy == false) + { + foreach (Pawn participant in participants) + { participant.jobs.EndCurrentJob(JobCondition.InterruptForced, false, false); } + } + } } } } diff --git a/Source/Scripts/Settings/BasicSettings.cs b/Source/Scripts/Settings/BasicSettings.cs index b2a0a91..11f6532 100644 --- a/Source/Scripts/Settings/BasicSettings.cs +++ b/Source/Scripts/Settings/BasicSettings.cs @@ -24,8 +24,8 @@ namespace Privacy_Please public static bool majorTabooCanStartFights = false; public static bool ignoreRitualAndPartySex = true; public static bool slavesIgnoreSex = false; + public static bool ignoreSlaveRape = false; public static bool otherFactionsIgnoreSex = false; - public static bool whoringIsUninteruptable = true; public static bool underwearSufficentForIdeos = true; public static bool exposedUnderwearMood = true; @@ -44,6 +44,7 @@ namespace Privacy_Please Scribe_Values.Look(ref worryAboutXeno, "worryAboutXeno", true); Scribe_Values.Look(ref worryAboutMasturbation, "worryAboutMasturbation", true); Scribe_Values.Look(ref worryAboutIncest, "worryAboutIncest", true); + Scribe_Values.Look(ref ignoreSlaveRape, "ignoreSlaveRape", false); Scribe_Values.Look(ref majorTabooCanStartFights, "majorTabooCanStartFights", false); Scribe_Values.Look(ref ignoreRitualAndPartySex, "ignoreRitualAndPartySex", false); Scribe_Values.Look(ref slavesIgnoreSex, "slavesIgnoreSex", false); @@ -98,6 +99,10 @@ namespace Privacy_Please listingStandard.CheckboxLabeled("worry_about_infidelity".Translate(), ref BasicSettings.worryAboutInfidelity, "worry_about_infidelity_desc".Translate()); listingStandard.CheckboxLabeled("worry_about_beastiality".Translate(), ref BasicSettings.worryAboutBeastiality, "worry_about_beastiality_desc".Translate()); listingStandard.CheckboxLabeled("worry_about_rape".Translate(), ref BasicSettings.worryAboutRape, "worry_about_rape_desc".Translate()); + + if (BasicSettings.worryAboutRape) + { listingStandard.CheckboxLabeled("ignore_slave_rape".Translate(), ref BasicSettings.ignoreSlaveRape); } + listingStandard.CheckboxLabeled("worry_about_necro".Translate(), ref BasicSettings.worryAboutNecro, "worry_about_necro_desc".Translate()); listingStandard.CheckboxLabeled("worry_about_xeno".Translate(), ref BasicSettings.worryAboutXeno, "worry_about_xeno_desc".Translate()); diff --git a/Source/Scripts/Utilities/Enums.cs b/Source/Scripts/Utilities/Enums.cs index 5014d47..dc7da1b 100644 --- a/Source/Scripts/Utilities/Enums.cs +++ b/Source/Scripts/Utilities/Enums.cs @@ -1,13 +1,10 @@ namespace Privacy_Please { - public enum ReactionToSexDiscovery + public enum ReactionToSexAct { Approval = 1, Acceptance = 0, Discomfort = -1, Outrage = -2, - Panick = -3, - Nauseated = -3, - Random = -99, } } diff --git a/Source/Scripts/Utilities/PrivacyUtility.cs b/Source/Scripts/Utilities/PrivacyUtility.cs index db9152b..b8abc44 100644 --- a/Source/Scripts/Utilities/PrivacyUtility.cs +++ b/Source/Scripts/Utilities/PrivacyUtility.cs @@ -1,8 +1,8 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using UnityEngine; using RimWorld; using Verse; using Verse.AI; @@ -13,16 +13,18 @@ namespace Privacy_Please { public static class PrivacyUtility { - public static void PrivacyCheckForPawn(Pawn pawn, float radius) + public static bool PawnHasPrivacy(Pawn pawn, float radius) { + //if (pawn.IsUnfazedBySex()) + //{ return true; } + if (pawn.IsHavingSex() == false && pawn.IsMasturbating() == false) - { return; } + { return true; } - if (BasicSettings.ignoreRitualAndPartySex && pawn.IsPartOfRitualOrGathering()) - { return; } + //if (pawn.GetLord() != null && (pawn.GetLord().LordJob is LordJob_Ritual || pawn.GetLord().LordJob is LordJob_Joinable_Party) && BasicSettings.ignoreRitualAndPartySex) + //{ return true; } - // Local variables - JobDriver_Sex jobDriver = pawn.jobs.curDriver as JobDriver_Sex; + bool hasPrivacy = true; pawn.IsInBed(out Building bed); foreach (Thing thing in GenRadial.RadialDistinctThingsAround(pawn.Position, pawn.Map, radius, true)) @@ -33,21 +35,18 @@ namespace Privacy_Please // Caught having sex if (SexInteractionUtility.PawnCaughtLovinByWitness(pawn, witness)) { - // Get the pawn's and witness' reaction to the discovery - SexInteractionUtility.GetReactionsToSexDiscovery(jobDriver, witness, out ReactionToSexDiscovery reactionOfPawn, out ReactionToSexDiscovery reactionOfWitness, true); - bool tryToPropositionTheWitness = Random.value < BasicSettings.chanceForOtherToJoinInSex && SexInteractionUtility.PasserbyCanBePropositionedForSex(witness, pawn.GetAllSexParticipants()); - - // Try to proposition the witness - if ((int)reactionOfPawn >= (int)ReactionToSexDiscovery.Acceptance && (int)reactionOfWitness >= (int)ReactionToSexDiscovery.Acceptance && tryToPropositionTheWitness) + // Try to invite intruder to join in + if (SexInteractionUtility.GetReactionToSexAct(witness, pawn.jobs.curDriver as JobDriver_Sex) >= (int)ReactionToSexAct.Acceptance) { - // Voyeurism - if (pawn.IsVoyeur() || (pawn.IsCuckold() && SexInteractionUtility.SexParticipantsIncludesACheatingPartner(witness, pawn.GetAllSexParticipants()))) + // TODO roll for sex + + if (CasualSex_Helper.CanHaveSex(witness) && xxx.IsTargetPawnOkay(witness) && + (xxx.has_quirk(witness, "Voyeur") || (xxx.has_quirk(witness, "Cuckold") && SexInteractionUtility.SexParticipantsIncludesACheatingPartner(witness, pawn.GetAllSexParticipants())))) { Job job = new Job(DefDatabase.GetNamed("WatchSex", false), pawn.GetSexReceiver(), bed); witness.jobs.TryTakeOrderedJob(job); } - // Consensual sex else if (pawn.IsMasturbating()) { if (bed == null) @@ -63,7 +62,6 @@ namespace Privacy_Please } } - // Threesome else if (pawn.GetSexReceiver() != null) { Job job = new Job(DefDatabase.GetNamed("JoinInSex", false), pawn.GetSexReceiver(), bed); @@ -71,18 +69,16 @@ namespace Privacy_Please } } - // The proposition failed. Awwkkkwaaarrddd.... - else if (pawn.IsUnfazedBySex() == false && (int)reactionOfPawn < (int)ReactionToSexDiscovery.Approval) - { - if (BasicSettings.whoringIsUninteruptable && jobDriver?.Sexprops.isWhoring == true) - { return; } - - // The pawn is uncomfortable and is stopping sex - foreach (Pawn participant in pawn.GetAllSexParticipants()) - { participant.jobs.EndCurrentJob(JobCondition.InterruptForced, false, false); } - } + else + { hasPrivacy = false; } } } + + return BasicSettings.needPrivacy == false || + hasPrivacy || + xxx.has_quirk(pawn, "Exhibitionist") || + pawn?.ideo?.Ideo.HasPrecept(ModPreceptDefOf.Exhibitionism_Acceptable) == true || + pawn?.ideo?.Ideo.HasPrecept(ModPreceptDefOf.Exhibitionism_Approved) == true; } } } diff --git a/Source/Scripts/Utilities/SexInteractionUtility.cs b/Source/Scripts/Utilities/SexInteractionUtility.cs index ee31fa0..aca5842 100644 --- a/Source/Scripts/Utilities/SexInteractionUtility.cs +++ b/Source/Scripts/Utilities/SexInteractionUtility.cs @@ -14,13 +14,19 @@ namespace Privacy_Please { public static bool PawnCaughtLovinByWitness(Pawn pawn, Pawn witness) { - if (witness == null || pawn == witness || witness.IsUnableToSenseSex() || witness.CanSee(pawn) == false) + return true; + + if (witness == null || + pawn == witness || + (pawn.IsMasturbating() == false && pawn.IsHavingSex() == false) || + witness.IsUnfazedBySex() == false || + witness.CanSee(pawn) == false) { return false; } List sexParticipants = pawn.GetAllSexParticipants(); - bool witnessIsJoiningSex = witness.jobs.curDriver is JobDriver_SexBaseInitiator && sexParticipants.Contains((witness.jobs.curDriver as JobDriver_SexBaseInitiator).Partner); + bool witnessIsApproachingSexParticipant = witness.jobs.curDriver is JobDriver_SexBaseInitiator && sexParticipants.Contains((witness.jobs.curDriver as JobDriver_SexBaseInitiator).Partner); - if (sexParticipants.Contains(witness) || witnessIsJoiningSex) + if (sexParticipants.Contains(witness) || witnessIsApproachingSexParticipant) { return false; } return true; @@ -56,34 +62,41 @@ namespace Privacy_Please return false; } - public static bool PasserbyCanBePropositionedForSex(Pawn passerby, List participants) + public static bool CouldInvitePasserbyForSex(Pawn passerby, List participants) { if (passerby == null || - participants.Contains(passerby) || - participants.Any(x => x.CanSee(passerby) == false)) + participants.Contains(passerby) || + passerby.IsUnfazedBySex() == false || + participants.All(x => x.CanSee(passerby) == false)) { return false; } if (participants.Count > 2 || - participants.Any(x => x.IsForbidden(passerby) || x.HostileTo(passerby)) || + participants.Any(x => x.IsForbidden(passerby) || x.HostileTo(passerby) || PawnIsCheatingOnPartner(x, passerby)) || CasualSex_Helper.CanHaveSex(passerby) == false || - xxx.IsTargetPawnOkay(passerby) == false) + xxx.IsTargetPawnOkay(passerby) == false) + { return false; } + + if (passerby.MentalState != null || + passerby.jobs.curDriver is JobDriver_Flee || + passerby.jobs.curDriver is JobDriver_AttackMelee || + passerby.jobs.curDriver is JobDriver_Vomit) { return false; } if (SexUtility.ReadyForHookup(passerby) && (passerby?.jobs?.curJob == null || (passerby.jobs.curJob.playerForced == false && CasualSex_Helper.quickieAllowedJobs.Contains(passerby.jobs.curJob.def))) && participants.Any(x => SexAppraiser.would_fuck(x, passerby) > 0.1f && SexAppraiser.would_fuck(passerby, x) > 0.1f) && participants.All(x => SexAppraiser.would_fuck(x, passerby, false, false, true) > 0.1f && SexAppraiser.would_fuck(passerby, x, false, false, true) > 0.1f)) - { return true; } + { + return true; + } return false; } - public static void GetReactionsToSexDiscovery(JobDriver_Sex jobDriver, Pawn witness, out ReactionToSexDiscovery reactionOfPawn, out ReactionToSexDiscovery reactionOfWitness, bool applyThoughtDefs = false) + public static ReactionToSexAct GetReactionToSexAct(Pawn witness, JobDriver_Sex jobDriver, bool applyThoughtDefs = false) { Pawn pawn = jobDriver.pawn; - - reactionOfPawn = ReactionToSexDiscovery.Acceptance; - reactionOfWitness = ReactionToSexDiscovery.Acceptance; + ReactionToSexAct reactionOfWitness = ReactionToSexAct.Acceptance; // Determine if there are any issues with the sex event and the witness' morals foreach (SexActReactionDef sexActReactionDef in DefDatabase.AllDefs) @@ -96,9 +109,11 @@ namespace Privacy_Please if ((bool)methodInfo.Invoke(null, new object[] { jobDriver })) { DebugMode.Message(sexActReactionDef.defName); - sexActReactionDef.DetermineReactionOfPawns(pawn, witness, out reactionOfPawn, out reactionOfWitness, applyThoughtDefs); + reactionOfWitness = sexActReactionDef.DetermineReactionOfPawns(pawn, witness, applyThoughtDefs); } } + + return reactionOfWitness; } public static bool SexActIsNecrophilia(JobDriver_Sex jobDriver) diff --git a/Source/obj/Debug/Privacy-Please.dll b/Source/obj/Debug/Privacy-Please.dll index 8616b86..263b6bc 100644 Binary files a/Source/obj/Debug/Privacy-Please.dll and b/Source/obj/Debug/Privacy-Please.dll differ diff --git a/Source/obj/Debug/Privacy-Please.pdb b/Source/obj/Debug/Privacy-Please.pdb index be0740f..88cfb36 100644 Binary files a/Source/obj/Debug/Privacy-Please.pdb and b/Source/obj/Debug/Privacy-Please.pdb differ diff --git a/Source/obj/Debug/SourceCode.csprojAssemblyReference.cache b/Source/obj/Debug/SourceCode.csprojAssemblyReference.cache index 7ba9202..481df48 100644 Binary files a/Source/obj/Debug/SourceCode.csprojAssemblyReference.cache and b/Source/obj/Debug/SourceCode.csprojAssemblyReference.cache differ