From 95c8c95a939272bba593e6df444abaeb7dbda136 Mon Sep 17 00:00:00 2001 From: moreoreganostodump Date: Sat, 31 Jul 2021 02:25:46 +0900 Subject: [PATCH] 1.0.1.6 --- About/Manifest.xml | 4 +- Assemblies/RJWSexperience.dll | Bin 26112 -> 42496 bytes Defs/DutyDefs/Duties_Rituals_sex.xml | 41 +++ .../Interactions_Speech_sex.xml | 66 +++++ Defs/JobDefs/Jobs_Ritual_Rape.xml | 10 + .../PawnRelations_Family.xml | 25 -- Defs/PreceptDefs/Precepts_Bestiality.xml | 35 ++- Defs/PreceptDefs/Precepts_Rape.xml | 9 + Defs/PreceptDefs/Precepts_Ritual_sex.xml | 51 ++++ Defs/PreceptDefs/Precepts_Sex.xml | 48 +++- Defs/PreceptDefs/Precepts_Submissive.xml | 206 +++++++++++++ .../RitualPatternDefs/RitualPatterns_sex.xml | 35 +++ Defs/Rituals/Ritual_Behaviors_sex.xml | 272 ++++++++++++++++++ Defs/Rituals/Ritual_Outcomes_sex.xml | 183 ++++++++++++ Defs/Rituals/Ritual_Targets_sex.xml | 7 + .../Thoughts_Ritual_sex_Quality.xml | 60 ++++ Languages/English/Keyed/RJW_Sexperience.xml | 26 ++ .../IssueDefs/Translations_IssueDefs.xml | 1 + .../MemeDefs/Translations_MemeDef.xml | 4 +- .../PreceptDefs/Translations_PreceptDefs.xml | 11 + .../Translations_RitualOutcomeEffectDefs.xml | 9 + .../ThoughtDefs/Translations_ThoughtDef.xml | 6 +- Languages/Korean/Keyed/RJW_Sexperience.xml | 25 ++ Patches/RJW_ThoughtDefs.xml | 20 ++ .../RJWSexperience/Configurations.cs | 149 ++++++++++ RJWSexperience/RJWSexperience/Keyed.cs | 30 +- .../PreceptComp_SelftTookThoughtExtended.cs | 71 ++++- .../RJWSexperience/RJWSexperience.csproj | 5 + RJWSexperience/RJWSexperience/RJW_Patch.cs | 63 ++-- .../RJWSexperience/Rimworld_Patch.cs | 51 ++-- .../Rituals/JobGiver_GangbangVictim.cs | 133 +++++++++ .../Rituals/RitualBehaviorWorkers.cs | 47 +++ .../Rituals/RitualOutcomeComps.cs | 93 ++++++ .../RJWSexperience/Rituals/RitualRoles.cs | 112 ++++++++ RJWSexperience/RJWSexperience/StatParts.cs | 13 +- RJWSexperience/RJWSexperience/Utility.cs | 21 ++ RJWSexperience/RJWSexperience/VariousDefOf.cs | 1 + Textures/UI/Issues/Gangbang.png | Bin 0 -> 11249 bytes Textures/UI/Issues/Submissive.png | Bin 0 -> 5332 bytes changelogs.txt | 8 + 40 files changed, 1839 insertions(+), 112 deletions(-) create mode 100644 Defs/DutyDefs/Duties_Rituals_sex.xml create mode 100644 Defs/InteractionDefs/Interactions_Speech_sex.xml create mode 100644 Defs/JobDefs/Jobs_Ritual_Rape.xml delete mode 100644 Defs/PawnRelationsDefs/PawnRelations_Family.xml create mode 100644 Defs/PreceptDefs/Precepts_Ritual_sex.xml create mode 100644 Defs/PreceptDefs/Precepts_Submissive.xml create mode 100644 Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml create mode 100644 Defs/Rituals/Ritual_Behaviors_sex.xml create mode 100644 Defs/Rituals/Ritual_Outcomes_sex.xml create mode 100644 Defs/Rituals/Ritual_Targets_sex.xml create mode 100644 Defs/ThoughtDefs/Thoughts_Ritual_sex_Quality.xml create mode 100644 Languages/Korean/DefInjected/RitualOutcomeEffectDefs/Translations_RitualOutcomeEffectDefs.xml create mode 100644 RJWSexperience/RJWSexperience/Configurations.cs create mode 100644 RJWSexperience/RJWSexperience/Rituals/JobGiver_GangbangVictim.cs create mode 100644 RJWSexperience/RJWSexperience/Rituals/RitualBehaviorWorkers.cs create mode 100644 RJWSexperience/RJWSexperience/Rituals/RitualOutcomeComps.cs create mode 100644 RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs create mode 100644 Textures/UI/Issues/Gangbang.png create mode 100644 Textures/UI/Issues/Submissive.png diff --git a/About/Manifest.xml b/About/Manifest.xml index 62c6b5d..c701bdb 100644 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,7 +1,7 @@ RJW Sexperience - 1.0.1.5 + 1.0.1.6 @@ -9,4 +9,6 @@ + https://raw.githubusercontent.com/moreoreganostodump/RJW-Sexperience/master/About/Manifest.xml + https://github.com/moreoreganostodump/RJW-Sexperience \ No newline at end of file diff --git a/Assemblies/RJWSexperience.dll b/Assemblies/RJWSexperience.dll index 5a252018245df1dad4c59e2ff833ebb684274836..2f609cbcd5568bccdc2fffd6305cd0aadf4dc4c4 100644 GIT binary patch literal 42496 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 literal 26112 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 KeE$El!2brV + + + + Gangbang + HighPriority + Off + + +
  • + +
  • + 0.25 + +
  • + +
  • +
    + + +
  • + Jog + 50~250 +
  • + +
    +
    + + + FuckVictim + HighPriority + Off + + +
  • + + + + + + \ No newline at end of file diff --git a/Defs/InteractionDefs/Interactions_Speech_sex.xml b/Defs/InteractionDefs/Interactions_Speech_sex.xml new file mode 100644 index 0000000..4840a1b --- /dev/null +++ b/Defs/InteractionDefs/Interactions_Speech_sex.xml @@ -0,0 +1,66 @@ + + + + + Speech_Gangbang + + InteractionWorker + True + Things/Mote/SpeechSymbols/Speech + +
  • SpeechUtility
  • + +
  • r_logentry->[INITIATOR_nameDef] [spokeof] [speechtopic].
  • +
  • r_logentry(p=0.2)->[INITIATOR_nameDef] [crazy].
  • + +
  • speechtopic->the meaning and true value of rape
  • +
  • speechtopic->expressions of rape
  • +
  • speechtopic->controlled lustful
  • +
  • speechtopic->the warmth of pussy
  • +
  • speechtopic->the meaning of cum
  • +
  • speechtopic->love and rape
  • +
  • speechtopic->symbolizing rape
  • +
  • speechtopic->dick and pussy
  • +
  • speechtopic->the art of rape
  • +
  • speechtopic->the seduction of victim
  • +
  • speechtopic->the music of screams
  • +
  • speechtopic->cums on the floor
  • + +
  • crazy->screamed maniacally
  • +
  • crazy->broke into a chant
  • +
  • crazy->chanted towards the heavens
  • +
  • crazy->spat in the sacrifice's genital
  • +
  • crazy->cackled
  • +
  • crazy->brandished a condom
  • +
  • crazy->muttered repetitively while masturbating
  • +
    + + + + + Speech_Zoophile + + InteractionWorker + True + Things/Mote/SpeechSymbols/Speech + +
  • SpeechUtility
  • + +
  • r_logentry->[INITIATOR_nameDef] [spokeof] [speechtopic].
  • + +
  • speechtopic->the meaning and true value of bestiality
  • +
  • speechtopic->expressions of bestiality
  • +
  • speechtopic->controlled lustful
  • +
  • speechtopic->the warmth of cum
  • +
  • speechtopic->the meaning of interspecies breeding
  • +
  • speechtopic->animal and love
  • +
  • speechtopic->symbolizing bestiality
  • +
  • speechtopic->breed and birth
  • +
  • speechtopic->the art of breeding
  • +
  • speechtopic->the seduction of animals
  • +
  • speechtopic->cums on the floor
  • +
    +
    +
    + +
    \ No newline at end of file diff --git a/Defs/JobDefs/Jobs_Ritual_Rape.xml b/Defs/JobDefs/Jobs_Ritual_Rape.xml new file mode 100644 index 0000000..26f3e59 --- /dev/null +++ b/Defs/JobDefs/Jobs_Ritual_Rape.xml @@ -0,0 +1,10 @@ + + + + + RapeVictim + RJWSexperience.JobDriver_RapeVictim + rapin' victim + false + + \ No newline at end of file diff --git a/Defs/PawnRelationsDefs/PawnRelations_Family.xml b/Defs/PawnRelationsDefs/PawnRelations_Family.xml deleted file mode 100644 index 1b6111d..0000000 --- a/Defs/PawnRelationsDefs/PawnRelations_Family.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - PawnRelationWorker_Child - Bastard - - bastard - 190 - MySonDied - MyDaughterDied - KilledMySon - KilledMyDaughter - MySonLost - MyDaughterLost - -
  • SoldMyLovedOne
  • -
    - 30 - 1.0 - 0.03 - -30 - true - true -
    -
    \ No newline at end of file diff --git a/Defs/PreceptDefs/Precepts_Bestiality.xml b/Defs/PreceptDefs/Precepts_Bestiality.xml index 27de45d..50db142 100644 --- a/Defs/PreceptDefs/Precepts_Bestiality.xml +++ b/Defs/PreceptDefs/Precepts_Bestiality.xml @@ -40,17 +40,21 @@ SexWithVeneratedAnimal Bestiality_Abhorrent -
  • +
  • SexWithVeneratedAnimal Bestiality_Know_Abhorrent + BeenRaped + true
  • SexWithAnimal Bestiality_Abhorrent
  • -
  • +
  • SexWithAnimal Bestiality_Know_Abhorrent + BeenRaped + true
  • @@ -75,17 +79,21 @@ SexWithVeneratedAnimal Bestiality_Horrible -
  • +
  • SexWithVeneratedAnimal Bestiality_Know_Horrible + BeenRaped + true
  • SexWithAnimal Bestiality_Horrible
  • -
  • +
  • SexWithAnimal Bestiality_Know_Horrible + BeenRaped + true
  • @@ -110,17 +118,21 @@ SexWithVeneratedAnimal Bestiality_Disapproved -
  • +
  • SexWithVeneratedAnimal Bestiality_Know_Disapproved + BeenRaped + true
  • SexWithAnimal Bestiality_Disapproved
  • -
  • +
  • SexWithAnimal Bestiality_Know_Disapproved + BeenRaped + true
  • @@ -203,6 +215,17 @@ Someone sex with animal true +
  • + SexWithVeneratedAnimal + Bestiality_Honorable + true +
  • +
  • + SexWithVeneratedAnimal + Bestiality_Know_Honorable + Someone sex with animal + true +
  • diff --git a/Defs/PreceptDefs/Precepts_Rape.xml b/Defs/PreceptDefs/Precepts_Rape.xml index 6709eea..f651035 100644 --- a/Defs/PreceptDefs/Precepts_Rape.xml +++ b/Defs/PreceptDefs/Precepts_Rape.xml @@ -48,6 +48,9 @@ 40 1000 30 + +
  • RapeBad
  • +
  • Rapist
  • @@ -97,6 +100,9 @@ 30 1000 30 + +
  • RapeBad
  • +
  • Rapist
  • @@ -135,6 +141,9 @@ 20 1000 20 + +
  • RapeBad
  • +
  • Rapist
  • diff --git a/Defs/PreceptDefs/Precepts_Ritual_sex.xml b/Defs/PreceptDefs/Precepts_Ritual_sex.xml new file mode 100644 index 0000000..87d0c7b --- /dev/null +++ b/Defs/PreceptDefs/Precepts_Ritual_sex.xml @@ -0,0 +1,51 @@ + + + + + GangbangCeremony + + A ritualistic gangbang where a initiator rape a victim. The audience will rape as the initiator. + Ritual + Medium + UI/Issues/Gangbang + Precept_Ritual + Gangbang + true + false + 1.0 + 100 + false + true + false + true + +
  • RapeBad
  • +
    + +
  • Rapist
  • +
    +
    + + + AnimalGangbangCeremony + + A ritualistic gangbang where animals rape a victim. + Ritual + Medium + UI/Commands/Breeding_Pawn_off + Precept_Ritual + GangbangByAnimal + true + false + 1.0 + 100 + false + true + false + true + +
  • Zoophile
  • +
    +
    + +
    \ No newline at end of file diff --git a/Defs/PreceptDefs/Precepts_Sex.xml b/Defs/PreceptDefs/Precepts_Sex.xml index 22555b1..37242ba 100644 --- a/Defs/PreceptDefs/Precepts_Sex.xml +++ b/Defs/PreceptDefs/Precepts_Sex.xml @@ -55,33 +55,41 @@ 1000 100 -
  • +
  • AnalSex Sex_Promiscuous + Lust + 2.0
  • AnalSex Sex_Know_Promiscuous
  • -
  • +
  • OralSex Sex_Promiscuous + Lust + 2.0
  • OralSex Sex_Know_Promiscuous
  • -
  • +
  • MiscSex Sex_Promiscuous + Lust + 2.0
  • MiscSex Sex_Know_Promiscuous
  • -
  • +
  • PromiscuousSex Sex_Promiscuous + Lust + 3.0
  • PromiscuousSex @@ -100,33 +108,41 @@ 1000 10 -
  • +
  • VaginalSex Sex_Promiscuous + Lust + 2.0
  • VaginalSex Sex_Know_Promiscuous
  • -
  • +
  • OralSex Sex_Promiscuous + Lust + 2.0
  • OralSex Sex_Know_Promiscuous
  • -
  • +
  • MiscSex Sex_Promiscuous + Lust + 2.0
  • MiscSex Sex_Know_Promiscuous
  • -
  • +
  • PromiscuousSex Sex_Promiscuous + Lust + 3.0
  • PromiscuousSex @@ -145,33 +161,41 @@ 1000 5 -
  • +
  • VaginalSex Sex_Promiscuous + Lust + 2.0
  • VaginalSex Sex_Know_Promiscuous
  • -
  • +
  • AnalSex Sex_Promiscuous + Lust + 2.0
  • AnalSex Sex_Know_Promiscuous
  • -
  • +
  • MiscSex Sex_Promiscuous + Lust + 2.0
  • MiscSex Sex_Know_Promiscuous
  • -
  • +
  • PromiscuousSex Sex_Promiscuous + Lust + 3.0
  • PromiscuousSex diff --git a/Defs/PreceptDefs/Precepts_Submissive.xml b/Defs/PreceptDefs/Precepts_Submissive.xml new file mode 100644 index 0000000..1d7ab15 --- /dev/null +++ b/Defs/PreceptDefs/Precepts_Submissive.xml @@ -0,0 +1,206 @@ + + + + + + Submissive + + UI/Issues/Submissive + + + + + + Submissive_None + Submissive + + Just normal. + Low + 50 + 1000 + + + + Submissive_Male + Submissive + + Males are submissive. They will obey and accept even being raped. + High + 40 + 1000 + +
  • FemaleSupremacy
  • + + +
  • + WasRaped + BeenRaped_Submissive + Male, BeenRaped +
  • +
  • + WasRaped + BeenRaped_NotSubmissive + Female, BeenRaped +
  • +
  • + Raped + Raped_Know_NotBeingSubmissive + not obedient + Female, Raped +
  • +
  • + WasRapedPrisoner + BeenRaped_Submissive + Male, BeenRaped +
  • +
  • + WasRapedPrisoner + BeenRaped_NotSubmissive + Female, BeenRaped +
  • +
  • + RapedPrisoner + Raped_Know_NotBeingSubmissive + not obedient + Female, Raped +
  • +
  • + WasRapedSlave + BeenRaped_Submissive + Male, BeenRaped +
  • +
  • + WasRapedSlave + BeenRaped_NotSubmissive + Female, BeenRaped +
  • +
  • + RapedSlave + Raped_Know_NotBeingSubmissive + not obedient + Female, Raped +
  • +
    + + + + Submissive_Female + Submissive + + Females are submissive. They will obey and accept even being raped. + High + 30 + 1000 + +
  • MaleSupremacy
  • +
    + +
  • + WasRaped + BeenRaped_Submissive + Female, BeenRaped +
  • +
  • + WasRaped + BeenRaped_NotSubmissive + Male, BeenRaped +
  • +
  • + Raped + Raped_Know_NotBeingSubmissive + not obedient + Male, Raped +
  • +
  • + WasRapedPrisoner + BeenRaped_Submissive + Female, BeenRaped +
  • +
  • + WasRapedPrisoner + BeenRaped_NotSubmissive + Male, BeenRaped +
  • +
  • + RapedPrisoner + Raped_Know_NotBeingSubmissive + not obedient + Male, Raped +
  • +
  • + WasRapedSlave + BeenRaped_Submissive + Female, BeenRaped +
  • +
  • + WasRapedSlave + BeenRaped_NotSubmissive + Male, BeenRaped +
  • +
  • + RapedSlave + Raped_Know_NotBeingSubmissive + not obedient + Male, Raped +
  • +
    +
    + + + + + + + BeenRaped_Submissive + 10 + 100 + Thought_Memory + 0.4 + +
  • Masochist
  • +
    + +
  • + + I had to accept. But i don't feel so good. + -3 +
  • +
    +
    + + + BeenRaped_NotSubmissive + 15 + 100 + Thought_MemorySocial + 0.4 + +
  • Masochist
  • +
    + +
  • + + How dare... + -30 + -200 +
  • +
    +
    + + + Raped_Know_NotBeingSubmissive + Thought_MemorySocial + 15 + 100 + 3 + +
  • Masochist
  • +
    + +
  • + + -30 +
  • +
    +
    + \ No newline at end of file diff --git a/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml b/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml new file mode 100644 index 0000000..fdc2c0c --- /dev/null +++ b/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml @@ -0,0 +1,35 @@ + + + + NamerRitualFestival + true + RitualSpotOrAltar + {0} {1} want to carry out the gangbang as soon as possible. + +
  • Rape
  • +
    +
    + + + Gangbang + Gangbang + gangbang + 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. + UI/Issues/Gangbang + false + + Gangbang + + + + GangbangByAnimal + GangbangByAnimal + gangbang by animal + A ritualistic animal gangbang. The organizer will give a speech to excite the crowd, then animals begin fuck victim. + UI/Commands/Breeding_Pawn_off + false + + BestialGangbang + + +
    \ No newline at end of file diff --git a/Defs/Rituals/Ritual_Behaviors_sex.xml b/Defs/Rituals/Ritual_Behaviors_sex.xml new file mode 100644 index 0000000..ac225d5 --- /dev/null +++ b/Defs/Rituals/Ritual_Behaviors_sex.xml @@ -0,0 +1,272 @@ + + + + +
  • + 7500 + +
  • + + initiator + Initiator + IdeoRole_Moralist + True + true + 1 + False +
  • + +
    + + + Gangbang + RJWSexperience.RitualBehaviorWorker_Gangbang + +
  • + + a victim + victim + 1 + True + False + true +
  • +
    + +
  • + Spectate + +
  • + + +
  • + initiator + victim + Victim is not reachable. +
  • + + +
  • + initiator + DeliverPawnToAltar +
  • +
  • + victim + Idle +
  • +
    + +
  • + Spectate + +
  • + 0.1 +
  • + + +
  • + initiator + SpeakOnCellFacingSpectators + Speech_Gangbang + +
  • + 5 +
  • +
  • + +
  • +
  • + victim + LayDownAwake +
  • +
    + +
  • + Gangbang + True + +
  • + 0.9 +
  • + + +
  • + initiator + FuckVictim + +
  • + +
  • +
  • + victim + LayDownAwake +
  • +
    + +
  • + Gangbang + +
  • + 0.1 +
  • + + +
  • + initiator + SpeakOnCellFacingSpectators + Speech_Gangbang + +
  • + +
  • +
  • + victim + LayDownAwake +
  • +
    + +
    +
    + + + + + GangbangByAnimal + +
  • + + a breedee who will be fucked by animal + victim + 1 + True + False + true +
  • +
  • + + animal + 8 + True + a breedable animal. + false +
  • +
    + +
  • + +
  • + initiator + victim +
  • + + Spectate + 5~7 + +
  • + initiator + victim + Victim is not reachable. +
  • +
    + +
  • + +
  • initiator
  • + + true + +
    + +
  • + initiator + DeliverPawnToCellIfAliveThenIdle + +
  • + 2 + 0 +
  • + + +
  • + victim + Idle +
  • +
    + +
  • + Spectate + +
  • + 0.1 +
  • + + +
  • + initiator + SpeakOnCellFacingSpectators + Speech_Zoophile + +
  • + 5 +
  • +
  • + +
  • +
  • + animal + Spectate +
  • +
  • + victim + LayDownAwake +
  • +
    + +
  • + Spectate + True + +
  • + 0.9 +
  • + + +
  • + animal + Gangbang + +
  • + +
  • +
  • + victim + LayDownAwake +
  • +
    + +
  • + Spectate + +
  • + 0.1 +
  • + + +
  • + initiator + SpeakOnCellFacingSpectators + Speech_Zoophile + +
  • + +
  • +
  • + victim + LayDownAwake +
  • +
    + +
    +
    + +
    \ No newline at end of file diff --git a/Defs/Rituals/Ritual_Outcomes_sex.xml b/Defs/Rituals/Ritual_Outcomes_sex.xml new file mode 100644 index 0000000..7bad3ba --- /dev/null +++ b/Defs/Rituals/Ritual_Outcomes_sex.xml @@ -0,0 +1,183 @@ + + + + Gangbang + Depending on ritual quality, participants will get between {MINMOOD} and {MAXMOOD} mood for {MOODDAYS} days. + RitualOutcomeEffectWorker_Consumable + +
  • If the {0} is satisfying, one of the participants might gain an inspiration.
  • +
    + +
  • + moralist + + 0.10 +
  • +
  • + + + +
  • (1, -0.20)
  • +
  • (3, -0.05)
  • +
  • (5, 0.05)
  • +
  • (10, 0.10)
  • + + + +
  • + true + + 0.2 + an altar +
  • +
  • + + 0.2 + FeelingBroken + 0.3 + victim +
  • +
  • + + 0.2 + FeelingBroken + 0.5 + victim +
  • +
  • + + 0.4 + FeelingBroken + 0.9 + victim +
  • +
  • + + 0.2 + Sex + 0.7 +
  • +
    + +
  • + + 0.05 + TerribleGangbang + The {0} was terrible! The speech was stuttering and incoherent, and the victim was botched - everyone was waiting for it to end. + -2 +
  • +
  • + + 0.15 + BoringGangbang + The {0} was boring. The speech was repetitive and the victim was noticeably flawed. It just didn't feel dignified. + -1 +
  • +
  • + + 0.6 + FunGangbang + The {0} was satisfying. The speech felt meaningful, and the victim was precise and dignified. + There's a 5% chance that a random participant gets an inspiration. + 1 +
  • +
  • + + 0.2 + UnforgettableGangbang + The {0} was spectacular! The speech brought everyone to the edge of a frenzy and the victim was like succubus. + There's a 10% chance that a random participant gets an inspiration. + 2 +
  • +
    +
    + + + + BestialGangbang + Depending on ritual quality, participants will get between {MINMOOD} and {MAXMOOD} mood for {MOODDAYS} days. + RitualOutcomeEffectWorker_Consumable + +
  • If the {0} is satisfying, one of the participants might gain an inspiration.
  • +
    + +
  • + moralist + + 0.10 +
  • +
  • + + + +
  • (1, -0.50)
  • +
  • (3, -0.30)
  • +
  • (5, -0.15)
  • +
  • (10, -0.10)
  • + + + +
  • + true + + 0.2 + an altar +
  • +
  • + + 0.3 + FeelingBroken + 0.3 + victim +
  • +
  • + + 0.3 + FeelingBroken + 0.5 + victim +
  • +
  • + + 0.6 + FeelingBroken + 0.9 + victim +
  • +
    + +
  • + + 0.05 + TerribleGangbang + The {0} was terrible! The speech was stuttering and incoherent, and the victim was botched - everyone was waiting for it to end. + -2 +
  • +
  • + + 0.15 + BoringGangbang + The {0} was boring. The speech was repetitive and the victim was noticeably flawed. It just didn't feel dignified. + -1 +
  • +
  • + + 0.6 + FunGangbang + The {0} was satisfying. The speech felt meaningful, and the victim was precise and dignified. + There's a 5% chance that a random participant gets an inspiration. + 1 +
  • +
  • + + 0.2 + UnforgettableGangbang + The {0} was spectacular! The speech brought everyone to the edge of a frenzy and the victim was like succubus. + There's a 10% chance that a random participant gets an inspiration. + 2 +
  • +
    +
    + + +
    \ No newline at end of file diff --git a/Defs/Rituals/Ritual_Targets_sex.xml b/Defs/Rituals/Ritual_Targets_sex.xml new file mode 100644 index 0000000..67e9ca5 --- /dev/null +++ b/Defs/Rituals/Ritual_Targets_sex.xml @@ -0,0 +1,7 @@ + + + + RitualSpotOrAltar_Gangbang + RitualObligationTargetWorker_AnyRitualSpotOrAltar_Scarification + + \ No newline at end of file diff --git a/Defs/ThoughtDefs/Thoughts_Ritual_sex_Quality.xml b/Defs/ThoughtDefs/Thoughts_Ritual_sex_Quality.xml new file mode 100644 index 0000000..be1c2ed --- /dev/null +++ b/Defs/ThoughtDefs/Thoughts_Ritual_sex_Quality.xml @@ -0,0 +1,60 @@ + + + + + TerribleGangbang + Thought_AttendedRitual + 6 + 3 + +
  • + + That gangbang was terrible. ugh. + -3 +
  • +
    +
    + + + BoringGangbang + Thought_AttendedRitual + 6 + 3 + +
  • + + That gangbang was not good. Wish I never went. + -1 +
  • +
    +
    + + + FunGangbang + Thought_AttendedRitual + 6 + 3 + +
  • + + That was a fun gangbang. It really satisfied me. + 8 +
  • +
    +
    + + + UnforgettableGangbang + Thought_AttendedRitual + 6 + 3 + +
  • + + That gangbang was awesome! Everything was perfect. + 16 +
  • +
    +
    + +
    \ No newline at end of file diff --git a/Languages/English/Keyed/RJW_Sexperience.xml b/Languages/English/Keyed/RJW_Sexperience.xml index bb1c8f7..363f408 100644 --- a/Languages/English/Keyed/RJW_Sexperience.xml +++ b/Languages/English/Keyed/RJW_Sexperience.xml @@ -1,7 +1,33 @@  + RJW Sexperience + Lust: x{0}% Slave: x{0}% Not Slave: x100% Meme: x{0}% + + Enable record randomizer + Randomize pawn's sex records. + Lust effect power + Set how much lust affect to sex drive. + Maximum lust deviation + Set maximum deviation of lust. The lust value can be negative depending on its average. + Average Lust + Set average of lust. + Maximum sex count deviation + Set maximum deviation of sex count. + Average sex count per year + Set average sex count. + Enable slaves get raped experience + Slaves will have experience of being raped + + + + + + + + + \ No newline at end of file diff --git a/Languages/Korean/DefInjected/IssueDefs/Translations_IssueDefs.xml b/Languages/Korean/DefInjected/IssueDefs/Translations_IssueDefs.xml index 684bdcc..205fde2 100644 --- a/Languages/Korean/DefInjected/IssueDefs/Translations_IssueDefs.xml +++ b/Languages/Korean/DefInjected/IssueDefs/Translations_IssueDefs.xml @@ -4,4 +4,5 @@ 강간 수간 근친상간 + 순종적인 성별 \ No newline at end of file diff --git a/Languages/Korean/DefInjected/MemeDefs/Translations_MemeDef.xml b/Languages/Korean/DefInjected/MemeDefs/Translations_MemeDef.xml index ad28ac0..0a3aa60 100644 --- a/Languages/Korean/DefInjected/MemeDefs/Translations_MemeDef.xml +++ b/Languages/Korean/DefInjected/MemeDefs/Translations_MemeDef.xml @@ -21,10 +21,10 @@ memeConcept->수간 memeConcept->수간 memeLeaderNoun->가축 - 번식모판 + 브리더 번식 수간 - 번식기 + 브리더 포켓몬스터 갤러리 수간 수간 diff --git a/Languages/Korean/DefInjected/PreceptDefs/Translations_PreceptDefs.xml b/Languages/Korean/DefInjected/PreceptDefs/Translations_PreceptDefs.xml index 2302e33..6aff5db 100644 --- a/Languages/Korean/DefInjected/PreceptDefs/Translations_PreceptDefs.xml +++ b/Languages/Korean/DefInjected/PreceptDefs/Translations_PreceptDefs.xml @@ -16,6 +16,7 @@ 장려됨 수간은 장려되어야 합니다. 수간 + 혐오스러움 강간은 절대 용납할수 없는 행위입니다. 강간 @@ -36,6 +37,7 @@ 자랑스러움 강간은 자랑할만한 일입니다. 강간 + 자유 어떠한것도 배척받지 않습니다. 성기만 사용 @@ -46,6 +48,7 @@ 구강성교만이 일반적인 것으로 받아들여집니다. 그 외에는 문란한것으로 간주됩니다. 문란함 문란한 성생활이 선호됩니다. + 자유 근친상간이 허용됩니다. 가까운 친척만 싫어함 @@ -56,4 +59,12 @@ 근친상간은 용납되지 않습니다. 근친만 가능 순수혈통을 보존하기위해 근친상간만을 허용합니다. + + 없음 + 평범합니다. + 순종적인 남성 + 남성들은 순종적입니다. 심지어 강간당하더라도 받아들일 것입니다. + 순종적인 여성 + 여성들은 순종적입니다. 심지어 강간당하더라도 받아들일 것입니다. + \ No newline at end of file diff --git a/Languages/Korean/DefInjected/RitualOutcomeEffectDefs/Translations_RitualOutcomeEffectDefs.xml b/Languages/Korean/DefInjected/RitualOutcomeEffectDefs/Translations_RitualOutcomeEffectDefs.xml new file mode 100644 index 0000000..7f07cf6 --- /dev/null +++ b/Languages/Korean/DefInjected/RitualOutcomeEffectDefs/Translations_RitualOutcomeEffectDefs.xml @@ -0,0 +1,9 @@ + + + 제단에서 시작 + 희생양 무너짐 + 제단에서 시작 + 제단에서 시작 + 제단에서 시작 + + \ No newline at end of file diff --git a/Languages/Korean/DefInjected/ThoughtDefs/Translations_ThoughtDef.xml b/Languages/Korean/DefInjected/ThoughtDefs/Translations_ThoughtDef.xml index 7c5c980..1b7d3dc 100644 --- a/Languages/Korean/DefInjected/ThoughtDefs/Translations_ThoughtDef.xml +++ b/Languages/Korean/DefInjected/ThoughtDefs/Translations_ThoughtDef.xml @@ -41,6 +41,10 @@ 근친 근친 혈족이 아닌사람과 성관계 - 혈통을 더럽힘 + 강간당함 + 받아들여야해. 하지만 기분이 안좋아. + {0}에게 강간당함 + 어떻게 감히... + 순종적이지 않음 \ No newline at end of file diff --git a/Languages/Korean/Keyed/RJW_Sexperience.xml b/Languages/Korean/Keyed/RJW_Sexperience.xml index c337d3f..1c469a2 100644 --- a/Languages/Korean/Keyed/RJW_Sexperience.xml +++ b/Languages/Korean/Keyed/RJW_Sexperience.xml @@ -1,7 +1,32 @@  + RJW Sexperience + 음란함: x{0}% 노예: x{0}% 노예가 아님: x100% 문화 요소: x{0}% + + 기록 생성기 활성화 + 폰의 섹스기록을 무작위로 생성합니다. + 음란함 효과 강도 + 음란함이 성욕에 얼마나 영향을 미칠지 설정합니다. + 음란함 최대 편차 + 음란함의 최대 편차를 설정합니다. 평균에 따라 음수가 나올수도 있습니다. + 평균 음란함 + 음란함의 평균을 설정합니다. + 섹스횟수 최대 편차 + 섹스횟수의 최대 편차를 설정합니다. + 연평균 섹스 횟수 + 평균 섹스 횟수를 설정합니다. + 노예 강간 경험 활성화 + 활성화할 경우 노예는 강간당한 경험을 가집니다. + + + + + + + + \ No newline at end of file diff --git a/Patches/RJW_ThoughtDefs.xml b/Patches/RJW_ThoughtDefs.xml index 01a6142..e52f0c9 100644 --- a/Patches/RJW_ThoughtDefs.xml +++ b/Patches/RJW_ThoughtDefs.xml @@ -79,4 +79,24 @@ + + + Defs/ThoughtDef[defName="GotRaped" or defName="GotAnalRaped" or defName="GotAnalRapedByFemale" or defName="GotRapedUnconscious" or defName="HateMyRapist" or defName="AllowedMeToGetRaped"]/nullifyingPrecepts + + Defs/ThoughtDef[defName="GotRaped" or defName="GotAnalRaped" or defName="GotAnalRapedByFemale" or defName="GotRapedUnconscious" or defName="HateMyRapist" or defName="AllowedMeToGetRaped"] + + +
  • Submissive_Male
  • +
  • Submissive_Female
  • +
    +
    +
    + + Defs/ThoughtDef[defName="GotRaped" or defName="GotAnalRaped" or defName="GotAnalRapedByFemale" or defName="GotRapedUnconscious" or defName="HateMyRapist" or defName="AllowedMeToGetRaped"]/nullifyingPrecepts + +
  • Submissive_Male
  • +
  • Submissive_Female
  • +
    +
    +
    \ No newline at end of file diff --git a/RJWSexperience/RJWSexperience/Configurations.cs b/RJWSexperience/RJWSexperience/Configurations.cs new file mode 100644 index 0000000..bcc8940 --- /dev/null +++ b/RJWSexperience/RJWSexperience/Configurations.cs @@ -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(); + } + + 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); + } + + + } + +} diff --git a/RJWSexperience/RJWSexperience/Keyed.cs b/RJWSexperience/RJWSexperience/Keyed.cs index a7ad31f..38013f1 100644 --- a/RJWSexperience/RJWSexperience/Keyed.cs +++ b/RJWSexperience/RJWSexperience/Keyed.cs @@ -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(); + } } diff --git a/RJWSexperience/RJWSexperience/PreceptComp_SelftTookThoughtExtended.cs b/RJWSexperience/RJWSexperience/PreceptComp_SelftTookThoughtExtended.cs index 90bb850..7047b63 100644 --- a/RJWSexperience/RJWSexperience/PreceptComp_SelftTookThoughtExtended.cs +++ b/RJWSexperience/RJWSexperience/PreceptComp_SelftTookThoughtExtended.cs @@ -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(HistoryEventArgsNames.Doer); + Pawn partner = ev.args.GetArg(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(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(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) { diff --git a/RJWSexperience/RJWSexperience/RJWSexperience.csproj b/RJWSexperience/RJWSexperience/RJWSexperience.csproj index 970d2be..c338c17 100644 --- a/RJWSexperience/RJWSexperience/RJWSexperience.csproj +++ b/RJWSexperience/RJWSexperience/RJWSexperience.csproj @@ -77,11 +77,16 @@ + + + + + diff --git a/RJWSexperience/RJWSexperience/RJW_Patch.cs b/RJWSexperience/RJWSexperience/RJW_Patch.cs index b281c19..10ab7a5 100644 --- a/RJWSexperience/RJWSexperience/RJW_Patch.cs +++ b/RJWSexperience/RJWSexperience/RJW_Patch.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; - } + } } } diff --git a/RJWSexperience/RJWSexperience/Rimworld_Patch.cs b/RJWSexperience/RJWSexperience/Rimworld_Patch.cs index 848f81e..76c6599 100644 --- a/RJWSexperience/RJWSexperience/Rimworld_Patch.cs +++ b/RJWSexperience/RJWSexperience/Rimworld_Patch.cs @@ -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); } } diff --git a/RJWSexperience/RJWSexperience/Rituals/JobGiver_GangbangVictim.cs b/RJWSexperience/RJWSexperience/Rituals/JobGiver_GangbangVictim.cs new file mode 100644 index 0000000..57776ae --- /dev/null +++ b/RJWSexperience/RJWSexperience/Rituals/JobGiver_GangbangVictim.cs @@ -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); + } + } + + + /// + /// copied from rjw + /// + public class JobDriver_RapeVictim : JobDriver_Rape + { + public override bool TryMakePreToilReservations(bool errorOnFailed) + { + return true; + } + + protected override IEnumerable 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 + }; + } + } +} diff --git a/RJWSexperience/RJWSexperience/Rituals/RitualBehaviorWorkers.cs b/RJWSexperience/RJWSexperience/Rituals/RitualBehaviorWorkers.cs new file mode 100644 index 0000000..ed28c9c --- /dev/null +++ b/RJWSexperience/RJWSexperience/Rituals/RitualBehaviorWorkers.cs @@ -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(); + } + } +} diff --git a/RJWSexperience/RJWSexperience/Rituals/RitualOutcomeComps.cs b/RJWSexperience/RJWSexperience/Rituals/RitualOutcomeComps.cs new file mode 100644 index 0000000..b871a0d --- /dev/null +++ b/RJWSexperience/RJWSexperience/Rituals/RitualOutcomeComps.cs @@ -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 + }; + } + } + + + +} diff --git a/RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs b/RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs new file mode 100644 index 0000000..bc3daa7 --- /dev/null +++ b/RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs @@ -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; + } + + } + + +} diff --git a/RJWSexperience/RJWSexperience/StatParts.cs b/RJWSexperience/RJWSexperience/StatParts.cs index 798a107..f88b155 100644 --- a/RJWSexperience/RJWSexperience/StatParts.cs +++ b/RJWSexperience/RJWSexperience/StatParts.cs @@ -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; diff --git a/RJWSexperience/RJWSexperience/Utility.cs b/RJWSexperience/RJWSexperience/Utility.cs index 8350f57..22aeab3 100644 --- a/RJWSexperience/RJWSexperience/Utility.cs +++ b/RJWSexperience/RJWSexperience/Utility.cs @@ -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; + } + } } diff --git a/RJWSexperience/RJWSexperience/VariousDefOf.cs b/RJWSexperience/RJWSexperience/VariousDefOf.cs index c0a19e7..d6c341f 100644 --- a/RJWSexperience/RJWSexperience/VariousDefOf.cs +++ b/RJWSexperience/RJWSexperience/VariousDefOf.cs @@ -14,6 +14,7 @@ namespace RJWSexperience public static readonly RecordDef Lust = DefDatabase.GetNamed("Lust"); public static readonly SkillDef SexSkill = DefDatabase.GetNamed("Sex"); public static readonly ThoughtDef_Recordbased AteCum = DefDatabase.GetNamed("AteCum"); + public static readonly JobDef RapeVictim = DefDatabase.GetNamed("RapeVictim"); [MayRequireIdeology] public static readonly MemeDef Zoophile = DefDatabase.GetNamed("Zoophile"); [MayRequireIdeology] public static readonly MemeDef Rapist = DefDatabase.GetNamed("Rapist"); diff --git a/Textures/UI/Issues/Gangbang.png b/Textures/UI/Issues/Gangbang.png new file mode 100644 index 0000000000000000000000000000000000000000..d7b27cf462e1b03b8379a9b1b1d99ea2c67f8324 GIT binary patch literal 11249 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 BgkJyv literal 0 HcmV?d00001 diff --git a/Textures/UI/Issues/Submissive.png b/Textures/UI/Issues/Submissive.png new file mode 100644 index 0000000000000000000000000000000000000000..ba8917a7a9d9c6af394c095d70ccfd6c414cf4fb GIT binary patch literal 5332 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 mm