From 71fef3848f1f4817c7fe0aaa9162f96081b0362d Mon Sep 17 00:00:00 2001 From: moreoreganostodump Date: Sat, 25 Sep 2021 00:14:02 +0900 Subject: [PATCH] 1.0.2.0 --- About/Manifest.xml | 2 +- Assemblies/RJWSexperience.dll | Bin 34816 -> 77312 bytes Assemblies/UnityEngine.TextCoreModule.dll | Bin 0 -> 186368 bytes .../UnityEngine.TextRenderingModule.dll | Bin 0 -> 27648 bytes Defs/JobDefs/Jobs_CleanSelfwithBucket.xml | 10 + Defs/KeyBindings/KeyBindings_Sexperience.xml | 8 + Defs/Recipe_Surgery/Recipes_Surgery_Hymen.xml | 38 ++ Defs/RecordDefs/Records_Sexperiences.xml | 9 +- Defs/RecordDefs/Records_Sextypes.xml | 2 +- Defs/ThingDefs/Items_Resource_Cum.xml | 122 +--- Defs/TraitDefs/Traits_sex.xml | 58 +- Languages/English/Keyed/RJW_Sexperience.xml | 78 +++ .../Translations_PawnRelationDefs.xml | 5 + Languages/Korean/Keyed/RJW_Sexperience.xml | 6 + Patches/RJW_ThingDefs.xml | 75 ++ .../PreceptComp_SelftTookThoughtExtended.cs | 47 +- .../PreceptDef_RequirementExtended.cs | 19 + .../IdeologyAddon/Ideology/RJW_Patch_Ideo.cs | 38 +- .../IdeologyAddon/Ideology/Rimworld_Patch.cs | 31 + .../Rituals/JobGiver_GangbangConsensual.cs | 162 +++++ .../Rituals/JobGiver_GangbangVictim.cs | 3 +- .../Ideology/Rituals/LordJob_Rituals.cs | 4 +- .../Ideology/Rituals/RitualBehaviorWorkers.cs | 24 +- .../Ideology/Sexperience_Patch.cs | 75 ++ .../IdeologyAddon/Ideology/Utility.cs | 18 +- .../IdeologyAddon/IdeologyAddon.csproj | 3 + RJWSexperience/IdeologyAddon/VariousDefOf.cs | 6 + .../{Buildings.cs => Building_Cumbucket.cs} | 7 +- .../RJWSexperience/Configurations.cs | 3 + RJWSexperience/RJWSexperience/DebugAction.cs | 19 + .../RJWSexperience/IngestionOutcomeDoers.cs | 23 + RJWSexperience/RJWSexperience/JobDrivers.cs | 108 +++ RJWSexperience/RJWSexperience/Keyed.cs | 92 ++- .../RJWSexperience/Patches/DefInjection.cs | 35 + .../RJWSexperience/Patches/GetGizmos.cs | 57 ++ .../RJWSexperience/Patches/RJW_Patch.cs | 207 ++++++ .../RJWSexperience/Patches/Rimworld_Patch.cs | 145 ++++ .../RJWSexperience/RJWSexperience.csproj | 25 +- RJWSexperience/RJWSexperience/RJWUtility.cs | 409 +++++++++++ RJWSexperience/RJWSexperience/RJW_Patch.cs | 305 --------- .../RJWSexperience/Recipe_HymenSurgery.cs | 55 ++ .../RJWSexperience/Rimworld_Patch.cs | 91 --- RJWSexperience/RJWSexperience/SexHistory.cs | 284 -------- .../SexHistory/HistoryUtility.cs | 73 ++ .../RJWSexperience/SexHistory/SexHistory.cs | 638 ++++++++++++++++++ .../RJWSexperience/Thought_Opinionbased.cs | 42 ++ .../RJWSexperience/Thought_Recordbased.cs | 13 - .../RJWSexperience/UI/RJWUIUtility.cs | 89 +++ RJWSexperience/RJWSexperience/UI/SexStatus.cs | 608 +++++++++++++++++ RJWSexperience/RJWSexperience/Utility.cs | 185 ++++- RJWSexperience/RJWSexperience/VariousDefOf.cs | 10 +- .../Assemblies/RJWSexperience.Ideology.dll | Bin 39936 -> 46592 bytes .../Defs/DutyDefs/Duties_Rituals_sex.xml | 27 +- .../Defs/JobDefs/Jobs_Ritual_Sex.xml | 16 + .../Defs/PreceptDefs/Precepts_Ritual_sex.xml | 48 +- .../Defs/PreceptDefs/Precepts_Sex.xml | 24 - .../Defs/PreceptDefs/Precepts_Virginity.xml | 342 ++++++++++ .../RitualPatternDefs/RitualPatterns_sex.xml | 22 + .../Defs/Rituals/Ritual_Behaviors_sex.xml | 188 +++++- .../Defs/Rituals/Ritual_Outcomes_sex.xml | 162 ++++- .../Textures/UI/Issues/Female.png | Bin 0 -> 5681 bytes .../UI/Issues/Gangbang_Consensual.png | Bin 0 -> 13273 bytes .../Textures/UI/Issues/Gender.png | Bin 0 -> 6209 bytes .../Textures/UI/Issues/Male.png | Bin 0 -> 3600 bytes Textures/UI/Icon/FirstBG.png | Bin 0 -> 5282 bytes Textures/UI/Icon/Incest.png | Bin 0 -> 3461 bytes Textures/UI/Icon/RSLocked.png | Bin 0 -> 2996 bytes Textures/UI/Icon/RSUnlocked.png | Bin 0 -> 3005 bytes Textures/UI/Icon/UnknownPawn.png | Bin 0 -> 3842 bytes changelogs.txt | 19 +- 70 files changed, 4292 insertions(+), 922 deletions(-) create mode 100644 Assemblies/UnityEngine.TextCoreModule.dll create mode 100644 Assemblies/UnityEngine.TextRenderingModule.dll create mode 100644 Defs/JobDefs/Jobs_CleanSelfwithBucket.xml create mode 100644 Defs/KeyBindings/KeyBindings_Sexperience.xml create mode 100644 Defs/Recipe_Surgery/Recipes_Surgery_Hymen.xml create mode 100644 Languages/Korean/DefInjected/PawnRelationDefDefs/Translations_PawnRelationDefs.xml create mode 100644 Patches/RJW_ThingDefs.xml create mode 100644 RJWSexperience/IdeologyAddon/Ideology/PreceptDef_RequirementExtended.cs create mode 100644 RJWSexperience/IdeologyAddon/Ideology/Rituals/JobGiver_GangbangConsensual.cs create mode 100644 RJWSexperience/IdeologyAddon/Ideology/Sexperience_Patch.cs rename RJWSexperience/RJWSexperience/{Buildings.cs => Building_Cumbucket.cs} (82%) create mode 100644 RJWSexperience/RJWSexperience/IngestionOutcomeDoers.cs create mode 100644 RJWSexperience/RJWSexperience/JobDrivers.cs create mode 100644 RJWSexperience/RJWSexperience/Patches/DefInjection.cs create mode 100644 RJWSexperience/RJWSexperience/Patches/GetGizmos.cs create mode 100644 RJWSexperience/RJWSexperience/Patches/RJW_Patch.cs create mode 100644 RJWSexperience/RJWSexperience/Patches/Rimworld_Patch.cs create mode 100644 RJWSexperience/RJWSexperience/RJWUtility.cs delete mode 100644 RJWSexperience/RJWSexperience/RJW_Patch.cs create mode 100644 RJWSexperience/RJWSexperience/Recipe_HymenSurgery.cs delete mode 100644 RJWSexperience/RJWSexperience/Rimworld_Patch.cs delete mode 100644 RJWSexperience/RJWSexperience/SexHistory.cs create mode 100644 RJWSexperience/RJWSexperience/SexHistory/HistoryUtility.cs create mode 100644 RJWSexperience/RJWSexperience/SexHistory/SexHistory.cs create mode 100644 RJWSexperience/RJWSexperience/Thought_Opinionbased.cs create mode 100644 RJWSexperience/RJWSexperience/UI/RJWUIUtility.cs create mode 100644 RJWSexperience/RJWSexperience/UI/SexStatus.cs create mode 100644 RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Virginity.xml create mode 100644 RJWSexperience_Ideology/Textures/UI/Issues/Female.png create mode 100644 RJWSexperience_Ideology/Textures/UI/Issues/Gangbang_Consensual.png create mode 100644 RJWSexperience_Ideology/Textures/UI/Issues/Gender.png create mode 100644 RJWSexperience_Ideology/Textures/UI/Issues/Male.png create mode 100644 Textures/UI/Icon/FirstBG.png create mode 100644 Textures/UI/Icon/Incest.png create mode 100644 Textures/UI/Icon/RSLocked.png create mode 100644 Textures/UI/Icon/RSUnlocked.png create mode 100644 Textures/UI/Icon/UnknownPawn.png diff --git a/About/Manifest.xml b/About/Manifest.xml index 3e1adcf..40ce23d 100644 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,7 +1,7 @@ RJW Sexperience - 1.0.1.11b + 1.0.2.0 diff --git a/Assemblies/RJWSexperience.dll b/Assemblies/RJWSexperience.dll index acb5320a324421a64ef35544d118a2a7e00decda..4fc9b6792108e75208dfc6f483a2722d3980d41f 100644 GIT binary patch literal 77312 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 Z>Uj+OKMIe=OeX%i*!A!Keb-^&{{q_&Q!)Sm literal 34816 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�kFxg3rM9$~WRd--S~IzOm5B{X$z` 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 BdZqvX literal 0 HcmV?d00001 diff --git a/Defs/JobDefs/Jobs_CleanSelfwithBucket.xml b/Defs/JobDefs/Jobs_CleanSelfwithBucket.xml new file mode 100644 index 0000000..7b8b8cd --- /dev/null +++ b/Defs/JobDefs/Jobs_CleanSelfwithBucket.xml @@ -0,0 +1,10 @@ + + + + + CleanSelfwithBucket + RJWSexperience.JobDriver_CleanSelfWithBucket + collecting cum + true + + \ No newline at end of file diff --git a/Defs/KeyBindings/KeyBindings_Sexperience.xml b/Defs/KeyBindings/KeyBindings_Sexperience.xml new file mode 100644 index 0000000..977f08a --- /dev/null +++ b/Defs/KeyBindings/KeyBindings_Sexperience.xml @@ -0,0 +1,8 @@ + + + + + OpenSexStatistics + + + diff --git a/Defs/Recipe_Surgery/Recipes_Surgery_Hymen.xml b/Defs/Recipe_Surgery/Recipes_Surgery_Hymen.xml new file mode 100644 index 0000000..07900d2 --- /dev/null +++ b/Defs/Recipe_Surgery/Recipes_Surgery_Hymen.xml @@ -0,0 +1,38 @@ + + + + Surgery_RestoreHymen + + Disguises as virgin. + RJWSexperience.Recipe_HymenSurgery + restoring hymen + Surgery + Recipe_Surgery + MedicalOperationSpeed + Medicine + 0.2 + 400 + false + +

  • Human
  • + + 100 + +
  • + + +
  • Medicine
  • + + + 1 + +
    + + +
  • Medicine
  • +
    +
    + + + + diff --git a/Defs/RecordDefs/Records_Sexperiences.xml b/Defs/RecordDefs/Records_Sexperiences.xml index c7c4057..731d4a9 100644 --- a/Defs/RecordDefs/Records_Sexperiences.xml +++ b/Defs/RecordDefs/Records_Sexperiences.xml @@ -4,7 +4,14 @@ NumofEatenCum - The number of times that i swalloed cum. + The number of times that i swallowed cum. + Int + + + + AmountofEatenCum + + The amount of cum that i swallowed. Int diff --git a/Defs/RecordDefs/Records_Sextypes.xml b/Defs/RecordDefs/Records_Sextypes.xml index 824b66f..2e98b49 100644 --- a/Defs/RecordDefs/Records_Sextypes.xml +++ b/Defs/RecordDefs/Records_Sextypes.xml @@ -44,7 +44,7 @@ - HadnjobCount + HandjobCount The number of times of handjob. Int diff --git a/Defs/ThingDefs/Items_Resource_Cum.xml b/Defs/ThingDefs/Items_Resource_Cum.xml index ffb7c64..d01cc7e 100644 --- a/Defs/ThingDefs/Items_Resource_Cum.xml +++ b/Defs/ThingDefs/Items_Resource_Cum.xml @@ -1,102 +1,47 @@ - - GatheredCum - - Gathered cum. - -
  • AnimalProductRaw
  • -
    - - Things/Item/GatheredCum - 1 - Graphic_StackCount - - true - - 0.1 - 0.1 - 0.01 - -5 - -1 - 0.00 - 60 - 0.1 - - - Fluid, AnimalProduct - DesperateOnlyForHumanlikes - AteCum - AteCum - -10 - -10 - -
  • - CumTolerance - 0.032 - true -
  • -
  • - 0.05 -
  • -
    -
    - -
  • - Cum - 0.050 - 0.8 - 0.1 - 1 - 30 -
  • -
    -
    - - - UsedCondom - - A condom filled with sperm. MMMM So good and tasty! + + GatheredCum + + Gathered cum. + +
  • AnimalProductRaw
  • +
    - Things/Item/UsedCondom + Things/Item/GatheredCum + 1 Graphic_StackCount - 50 - true - true - 0.0 - Industrial + true - -10 - 1 - 0.05 - 0.05 + 0.1 + 0.1 + 0.01 + -5 + -1 + 0.00 + 60 + 0.1 Fluid, AnimalProduct DesperateOnlyForHumanlikes - AteCum - AteCum - -
  • - CumTolerance - 0.032 - true -
  • -
  • - 0.05 -
  • -
    + AteCum + AteCum + -10 + -10 + +
  • + CumTolerance + 0.032 + true +
  • +
  • + 0.05 +
  • +
  • + - Item - Never - -
  • Exotic
  • - - Sellable - -
  • AnimalProductRaw
  • -
  • Cum @@ -109,6 +54,7 @@ + Cum diff --git a/Defs/TraitDefs/Traits_sex.xml b/Defs/TraitDefs/Traits_sex.xml index 4c023b5..d6361eb 100644 --- a/Defs/TraitDefs/Traits_sex.xml +++ b/Defs/TraitDefs/Traits_sex.xml @@ -7,17 +7,57 @@ 0.0
  • - - [PAWN_nameDef] has no experience. + BUGGED! MALE CANNOT HAS THIS TRAIT + damaged virgin + [PAWN_nameDef] never experienced. However, her hymen had damaged for some reason. + -1 + 0.05 - 0.1 + 0.2 - -
  • - Sex - -4 -
  • - + +
  • + Sex + -4 +
  • +
    + +
  • + + [PAWN_nameDef] never experienced. + 0 + + 0.2 + + +
  • + Sex + -4 +
  • + + +
  • + BUGGED! MALE CANNOT HAS THIS TRAIT + virgin? + [PAWN_nameDef] looks experienced. But the hymen is still threre. + 0.10 + 1 +
  • +
  • + BUGGED! MALE CANNOT HAS THIS TRAIT + virgin + [PAWN_nameDef] never experienced. + 2 + + 0.2 + + +
  • + Sex + -4 +
  • + + 0.20 diff --git a/Languages/English/Keyed/RJW_Sexperience.xml b/Languages/English/Keyed/RJW_Sexperience.xml index 12cc018..b7561f6 100644 --- a/Languages/English/Keyed/RJW_Sexperience.xml +++ b/Languages/English/Keyed/RJW_Sexperience.xml @@ -13,6 +13,48 @@ capable of sex is required Total gathered cum: {1} took {0}'s virginity. + Gather cums on body + Best sextype + Recent sextype + Sex partners + Cum swallowed + Selected Partner's Info + {0}: {1} times + Avg: {0} + Sex count: + Orgasms: + Recent Sex Partner + A recent sex partner. + First Sex Partner + The first sex partner. + Most Sex Partner + The most sex partner. + Best Sex Partner + The partner who had most satisfying sex. + Taken virgins + The number of partners who i taken first. + Total sex had + Total number of sex. + Raped: + Raped me: + Sex History + Sex Statistics + Partner List + Sexuality + Had been raped + Raped someone + Prefer Race + Bestiality + Interspecies + Normal + Necrophile + Gather cum + Sex skill + Cum addiction + Addicted to cum. + Cum addictiveness + More likely to get addicted to cum. + times Enable record randomizer Randomize pawn's sex records. @@ -37,4 +79,40 @@ + Vaginal + Anal + Oral + Masturbation + Double penetration + Boobjob + Handjob + Footjob + Fingering + Scissoring + Mutual masturbation + Fisting + Mech implant + Rimming + Fellatio + Cunnilingus + Sixtynine + + None + Asexual + Pansexual + Hetero + Mostly hetero + Bisexual, leaning hetero + Bisexual + Bisexual, leaning gay + Mostly gay + Gay + + + + lust + unknown + virgin + incest + \ No newline at end of file diff --git a/Languages/Korean/DefInjected/PawnRelationDefDefs/Translations_PawnRelationDefs.xml b/Languages/Korean/DefInjected/PawnRelationDefDefs/Translations_PawnRelationDefs.xml new file mode 100644 index 0000000..8ec5e25 --- /dev/null +++ b/Languages/Korean/DefInjected/PawnRelationDefDefs/Translations_PawnRelationDefs.xml @@ -0,0 +1,5 @@ + + + 사생아 + 사생아 + \ No newline at end of file diff --git a/Languages/Korean/Keyed/RJW_Sexperience.xml b/Languages/Korean/Keyed/RJW_Sexperience.xml index a542592..7daa25b 100644 --- a/Languages/Korean/Keyed/RJW_Sexperience.xml +++ b/Languages/Korean/Keyed/RJW_Sexperience.xml @@ -11,6 +11,8 @@ 사람이 아님 동물이 아님 성관계가 가능해야 합니다. + 수집한 정액 양: + {1}이(가) {0}의 아다를 뗐습니다. 기록 생성기 활성화 폰의 섹스기록을 무작위로 생성합니다. @@ -28,4 +30,8 @@ 활성화할 경우 노예는 강간당한 경험을 가집니다. 음란함 한계 음란함의 한계치를 설정합니다. 음란함의 절대값이 이 값에 가까워지거나 클수록, 음란함이 적게 변합니다. + 섹스가능 최소나이 + 섹스 가능한 최소나이를 설정합니다. 이 값은 RJW의 최소 나이 설정과 관계가 없고 기록을 생성하는데만 사용됩니다. + 동정 비율 + 나이 상관없이 동정일 확률을 설정합니다. \ No newline at end of file diff --git a/Patches/RJW_ThingDefs.xml b/Patches/RJW_ThingDefs.xml new file mode 100644 index 0000000..4df0f34 --- /dev/null +++ b/Patches/RJW_ThingDefs.xml @@ -0,0 +1,75 @@ + + + + + + Defs/ThingDef[defName="UsedCondom"]/ingestible/outcomeDoers + + Defs/ThingDef[defName="UsedCondom"]/ingestible + + +
  • + CumTolerance + 0.032 + true +
  • +
  • + 0.05 +
  • +
  • + 5.2 +
  • +
    +
    +
    + + Defs/ThingDef[defName="UsedCondom"]/ingestible/outcomeDoers + +
  • + CumTolerance + 0.032 + true +
  • +
  • + 0.05 +
  • +
  • + 5.2 +
  • +
    +
    +
    + + + Defs/ThingDef[defName="UsedCondom"]/comps + + Defs/ThingDef[defName="UsedCondom"] + + +
  • + Cum + 0.050 + 0.8 + 0.1 + 1 + 30 +
  • +
    +
    +
    + + Defs/ThingDef[defName="UsedCondom"]/comps + +
  • + Cum + 0.050 + 0.8 + 0.1 + 1 + 30 +
  • +
    +
    +
    + +
    \ No newline at end of file diff --git a/RJWSexperience/IdeologyAddon/Ideology/PreceptComp_SelftTookThoughtExtended.cs b/RJWSexperience/IdeologyAddon/Ideology/PreceptComp_SelftTookThoughtExtended.cs index 4520d5d..b3af6c2 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/PreceptComp_SelftTookThoughtExtended.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/PreceptComp_SelftTookThoughtExtended.cs @@ -19,16 +19,21 @@ namespace RJWSexperience.Ideology public const string Incestous = "[Incestuos]"; public const string BeenRaped = "[BeenRaped]"; public const string Rape = "[Rape]"; + public const string Spouse = "[Spouse]"; + public const string NotSpouse = "[NotSpouse]"; + 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 RecordDef recordDef; + //public float? recordoffset; public PreceptComp_SelfTookThoughtTagged() { } @@ -41,28 +46,28 @@ namespace RJWSexperience.Ideology if (tags.ContainAll(tag.Replace(" ","").Split(',')) ^ exclusive) { TookThought(ev, precept, canApplySelfTookThoughts); - if (ev.args.TryGetArg(HistoryEventArgsNames.Doer, out Pawn pawn)) - { - AdjustRecord(pawn); - } + //if (ev.args.TryGetArg(HistoryEventArgsNames.Doer, out Pawn pawn)) + //{ + // AdjustRecord(pawn); + //} } } else if (exclusive) { TookThought(ev, precept, canApplySelfTookThoughts); - if (ev.args.TryGetArg(HistoryEventArgsNames.Doer, out Pawn pawn)) - { - AdjustRecord(pawn); - } + //if (ev.args.TryGetArg(HistoryEventArgsNames.Doer, out Pawn pawn)) + //{ + // AdjustRecord(pawn); + //} } } else { TookThought(ev, precept, canApplySelfTookThoughts); - if (ev.args.TryGetArg(HistoryEventArgsNames.Doer, out Pawn pawn)) - { - AdjustRecord(pawn); - } + //if (ev.args.TryGetArg(HistoryEventArgsNames.Doer, out Pawn pawn)) + //{ + // AdjustRecord(pawn); + //} } } @@ -99,13 +104,13 @@ namespace RJWSexperience.Ideology } - protected void AdjustRecord(Pawn pawn) - { - if (recordDef != null) - { - pawn.records.AddTo(recordDef, recordoffset ?? 1f); - } - } + //protected void AdjustRecord(Pawn pawn) + //{ + // if (recordDef != null) + // { + // pawn.records.AddTo(recordDef, recordoffset ?? 1f); + // } + //} } diff --git a/RJWSexperience/IdeologyAddon/Ideology/PreceptDef_RequirementExtended.cs b/RJWSexperience/IdeologyAddon/Ideology/PreceptDef_RequirementExtended.cs new file mode 100644 index 0000000..62e4321 --- /dev/null +++ b/RJWSexperience/IdeologyAddon/Ideology/PreceptDef_RequirementExtended.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using RimWorld; +using Verse; + + + +namespace RJWSexperience.Ideology +{ + public class PreceptDef_RequirementExtended : PreceptDef + { + public List requiredAllMemes = new List(); + } + + +} diff --git a/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs b/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs index c7c7c38..f5a67f0 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs @@ -59,8 +59,8 @@ namespace RJWSexperience.Ideology public static float BestialityByPrecept(Ideo ideo) { - if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) return 0.3f; - else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated)) return 0.6f; + if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) return 0.5f; + else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated)) return 0.65f; else if (ideo.HasPrecept(VariousDefOf.Bestiality_Acceptable)) return 0.75f; else if (ideo.HasPrecept(VariousDefOf.Bestiality_Disapproved)) return 1.0f; else return 5f; @@ -78,13 +78,30 @@ namespace RJWSexperience.Ideology public static float RapeByPrecept(Ideo ideo) { - if (ideo.HasPrecept(VariousDefOf.Rape_Honorable)) return 0.25f; - else if (ideo.HasPrecept(VariousDefOf.Rape_Acceptable)) return 0.5f; + if (ideo.HasPrecept(VariousDefOf.Rape_Honorable)) return 0.5f; + else if (ideo.HasPrecept(VariousDefOf.Rape_Acceptable)) return 0.75f; else if (ideo.HasPrecept(VariousDefOf.Rape_Disapproved)) return 1.0f; else return 3f; } } + [HarmonyPatch(typeof(ThinkNode_ChancePerHour_Necro), "MtbHours")] + public static class RJW_Patch_ThinkNode_ChancePerHour_Necro + { + public static void Postfix(Pawn pawn, ref float __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null) __result *= NecroByPrecept(ideo); // ideo is null if don't have dlc + } + + public static float NecroByPrecept(Ideo ideo) + { + if (ideo.HasPrecept(VariousDefOf.Necrophilia_Approved)) return 0.5f; + else if (ideo.HasPrecept(VariousDefOf.Necrophilia_Acceptable)) return 0.75f; + else if (ideo.HasPrecept(VariousDefOf.Necrophilia_Disapproved)) return 1.0f; + else return 8f; + } + } [HarmonyPatch(typeof(xxx), "is_rapist")] public static class RJW_Patch_is_rapist @@ -371,6 +388,19 @@ namespace RJWSexperience.Ideology } } + [HarmonyPatch(typeof(PawnDesignations_Comfort), "UpdateCanDesignateComfort")] + public static class RJW_PatchUpdateCanDesignateComfort + { + public static void Postfix(Pawn pawn, ref bool __result) + { + if (pawn.IsSubmissive()) + { + SaveStorage.DataStore.GetPawnData(pawn).CanDesignateComfort = true; + __result = true; + } + } + } + [HarmonyPatch(typeof(Hediff_BasePregnancy), "PostBirth")] public static class RJW_Patch_PostBirth { diff --git a/RJWSexperience/IdeologyAddon/Ideology/Rimworld_Patch.cs b/RJWSexperience/IdeologyAddon/Ideology/Rimworld_Patch.cs index 934969c..a4520a0 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/Rimworld_Patch.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/Rimworld_Patch.cs @@ -55,5 +55,36 @@ namespace RJWSexperience.Ideology } } + [HarmonyPatch(typeof(IdeoFoundation), "CanAdd")] + public static class Rimworld_Patch_IdeoFoundation + { + public static void Postfix(PreceptDef precept, bool checkDuplicates, ref IdeoFoundation __instance, ref AcceptanceReport __result) + { + if (precept is PreceptDef_RequirementExtended) + { + PreceptDef_RequirementExtended def = precept as PreceptDef_RequirementExtended; + if (!def.requiredAllMemes.NullOrEmpty()) + { + for (int i=0; i< def.requiredAllMemes.Count; i++) + { + if (!__instance.ideo.memes.Contains(def.requiredAllMemes[i])) + { + List report = new List(); + foreach (MemeDef meme in def.requiredAllMemes) report.Add(meme.LabelCap); + + __result = new AcceptanceReport("RequiresMeme".Translate() + ": " + report.ToCommaList()); + return; + } + } + } + + } + + + } + + + + } } diff --git a/RJWSexperience/IdeologyAddon/Ideology/Rituals/JobGiver_GangbangConsensual.cs b/RJWSexperience/IdeologyAddon/Ideology/Rituals/JobGiver_GangbangConsensual.cs new file mode 100644 index 0000000..56bf498 --- /dev/null +++ b/RJWSexperience/IdeologyAddon/Ideology/Rituals/JobGiver_GangbangConsensual.cs @@ -0,0 +1,162 @@ +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.Ideology +{ + public class JobGiver_GangbangConsensual : 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_fuck(pawn)) + { + return null; + } + + Pawn target = duty.focusSecond.Pawn; + + if (!pawn.CanReach(target, PathEndMode.ClosestTouch, Danger.None)) return null; + + return JobMaker.MakeJob(VariousDefOf.Gangbang, target); + } + } + + + public class JobDriver_Gangbang : JobDriver_SexBaseInitiator + { + public override bool TryMakePreToilReservations(bool errorOnFailed) + { + return true; + } + + protected override IEnumerable MakeNewToils() + { + //ModLog.Message("" + this.GetType().ToString() + "::MakeNewToils() called"); + setup_ticks(); + + this.FailOnDespawnedNullOrForbidden(iTarget); + this.FailOn(() => Partner == null); + this.FailOn(() => pawn.Drafted); + this.FailOn(() => Partner.Drafted); + yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell); + + 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_loved = JobMaker.MakeJob(VariousDefOf.GettinGangbang, pawn, Bed); + Partner.jobs.StartJob(gettin_loved, JobCondition.InterruptForced); + } + }; + yield return StartPartnerJob; + + Toil SexToil = new Toil(); + SexToil.defaultCompleteMode = ToilCompleteMode.Never; + SexToil.defaultDuration = duration; + SexToil.handlingFacing = true; + SexToil.FailOn(() => Partner.CurJob.def != VariousDefOf.GettinGangbang); + SexToil.initAction = delegate + { + Start(); + Sexprops.usedCondom = CondomUtility.TryUseCondom(pawn) || CondomUtility.TryUseCondom(Partner); + }; + SexToil.AddPreTickAction(delegate + { + 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(Sexprops); + }, + defaultCompleteMode = ToilCompleteMode.Instant + }; + } + } + + public class JobDriver_GangbangReceiver : JobDriver_SexBaseRecieverLoved + { + protected override IEnumerable MakeNewToils() + { + setup_ticks(); + parteners.Add(Partner);// add job starter, so this wont fail, before Initiator starts his job + + Toil get_banged = new Toil(); + get_banged.defaultCompleteMode = ToilCompleteMode.Never; + get_banged.handlingFacing = true; + get_banged.initAction = delegate + { + pawn.pather.StopDead(); + pawn.jobs.curDriver.asleep = false; + }; + get_banged.tickAction = delegate + { + if ((parteners.Count > 0) && (pawn.IsHashIntervalTick(ticks_between_hearts / parteners.Count))) + if (pawn.IsHashIntervalTick(ticks_between_hearts)) + ThrowMetaIconF(pawn.Position, pawn.Map, FleckDefOf.Heart); + }; + get_banged.AddEndCondition(new Func(() => + { + if (parteners.Count <= 0) + { + return JobCondition.Succeeded; + } + return JobCondition.Ongoing; + })); + get_banged.AddFinishAction(delegate + { + if (xxx.is_human(pawn)) + pawn.Drawer.renderer.graphics.ResolveApparelGraphics(); + GlobalTextureAtlasManager.TryMarkPawnFrameSetDirty(pawn); + + if (Bed != null && pawn.Downed) + { + Job tobed = JobMaker.MakeJob(JobDefOf.Rescue, pawn, Bed); + tobed.count = 1; + Partner.jobs.jobQueue.EnqueueFirst(tobed); + //Log.Message(xxx.get_pawnname(Initiator) + ": job tobed:" + tobed); + } + else if (pawn.HostileTo(Partner)) + pawn.health.AddHediff(xxx.submitting); + }); + get_banged.socialMode = RandomSocialMode.Off; + yield return get_banged; + + } + } + +} diff --git a/RJWSexperience/IdeologyAddon/Ideology/Rituals/JobGiver_GangbangVictim.cs b/RJWSexperience/IdeologyAddon/Ideology/Rituals/JobGiver_GangbangVictim.cs index 35335bd..44ad646 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/Rituals/JobGiver_GangbangVictim.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/Rituals/JobGiver_GangbangVictim.cs @@ -26,7 +26,7 @@ namespace RJWSexperience.Ideology } else return null; - if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_rape(pawn, true)) + if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_fuck(pawn)) { return null; } @@ -57,7 +57,6 @@ namespace RJWSexperience.Ideology 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); diff --git a/RJWSexperience/IdeologyAddon/Ideology/Rituals/LordJob_Rituals.cs b/RJWSexperience/IdeologyAddon/Ideology/Rituals/LordJob_Rituals.cs index 832f809..e976d61 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/Rituals/LordJob_Rituals.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/Rituals/LordJob_Rituals.cs @@ -14,11 +14,11 @@ namespace RJWSexperience.Ideology { public LordJob_Ritual_Gangbang() { } - public LordJob_Ritual_Gangbang(TargetInfo selectedTarget, Precept_Ritual ritual, RitualObligation obligation, List allStages, RitualRoleAssignments assignments, Pawn organizer = null) : base(selectedTarget, ritual, obligation, allStages, assignments, organizer) + public LordJob_Ritual_Gangbang(string targetID ,TargetInfo selectedTarget, Precept_Ritual ritual, RitualObligation obligation, List allStages, RitualRoleAssignments assignments, Pawn organizer = null) : base(selectedTarget, ritual, obligation, allStages, assignments, organizer) { foreach (RitualRole ritualRole in assignments.AllRolesForReading) { - if (ritualRole != null && ritualRole.id.Contains("victim")) + if (ritualRole != null && ritualRole.id.Contains(targetID)) { Pawn item = assignments.FirstAssignedPawn(ritualRole); pawnsDeathIgnored.Add(item); diff --git a/RJWSexperience/IdeologyAddon/Ideology/Rituals/RitualBehaviorWorkers.cs b/RJWSexperience/IdeologyAddon/Ideology/Rituals/RitualBehaviorWorkers.cs index 6d00196..ec831f2 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/Rituals/RitualBehaviorWorkers.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/Rituals/RitualBehaviorWorkers.cs @@ -23,17 +23,27 @@ namespace RJWSexperience.Ideology { WorkGiver_Warden_TakeToBed.TryTakePrisonerToBed(pawn, warden); pawn.guest.WaitInsteadOfEscapingFor(1250); - } } protected override LordJob CreateLordJob(TargetInfo target, Pawn organizer, Precept_Ritual ritual, RitualObligation obligation, RitualRoleAssignments assignments) { - return new LordJob_Ritual_Gangbang(target, ritual, obligation, def.stages, assignments, organizer); + return new LordJob_Ritual_Gangbang("victim", target, ritual, obligation, def.stages, assignments, organizer); } - } + public class RitualBehaviorWorker_Gangbang_Consensual : RitualBehaviorWorker + { + public RitualBehaviorWorker_Gangbang_Consensual() { } + + public RitualBehaviorWorker_Gangbang_Consensual(RitualBehaviorDef def) : base(def) { } + + protected override LordJob CreateLordJob(TargetInfo target, Pawn organizer, Precept_Ritual ritual, RitualObligation obligation, RitualRoleAssignments assignments) + { + return new LordJob_Ritual_Gangbang("initiator", target, ritual, obligation, def.stages, assignments, organizer); + } + } + public class RitualStage_InteractWithVictim : RitualStage { public override TargetInfo GetSecondFocus(LordJob_Ritual ritual) @@ -49,5 +59,11 @@ namespace RJWSexperience.Ideology return ritual.assignments.AssignedPawns("victim").FirstOrDefault(); } } - + public class RitualStage_InteractWithInitiator : RitualStage + { + public override TargetInfo GetSecondFocus(LordJob_Ritual ritual) + { + return ritual.assignments.AssignedPawns("initiator").FirstOrDefault(); + } + } } diff --git a/RJWSexperience/IdeologyAddon/Ideology/Sexperience_Patch.cs b/RJWSexperience/IdeologyAddon/Ideology/Sexperience_Patch.cs new file mode 100644 index 0000000..7a5433e --- /dev/null +++ b/RJWSexperience/IdeologyAddon/Ideology/Sexperience_Patch.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using rjw; +using RJWSexperience; +using Verse; +using RimWorld; + + +namespace RJWSexperience.Ideology +{ + [HarmonyPatch(typeof(RJWUtility), "ThrowVirginHIstoryEvent")] + public static class Sexperience_Patch_ThrowVirginHIstoryEvent + { + public static void Postfix(Pawn pawn, Pawn partner, SexProps props, int degree) + { + string tag = ""; + if (props.isRape) + { + if (pawn == props.pawn && props.isRapist) tag += HETag.Rape; + else tag += HETag.BeenRaped; + } + if (!pawn.relations.DirectRelationExists(PawnRelationDefOf.Spouse, partner)) + { + tag += HETag.NotSpouse; + } + + + if (pawn.gender == Gender.Male) + { + if (degree > 1) Find.HistoryEventsManager.RecordEvent(VariousDefOf.Virgin_TakenM.TaggedEvent(pawn, tag + HETag.Gender(pawn), partner)); + Find.HistoryEventsManager.RecordEvent(VariousDefOf.Virgin_TookM.TaggedEvent(partner, tag + HETag.Gender(pawn), pawn)); + } + else + { + if (degree > 1) Find.HistoryEventsManager.RecordEvent(VariousDefOf.Virgin_TakenF.TaggedEvent(pawn, tag + HETag.Gender(pawn), partner)); + Find.HistoryEventsManager.RecordEvent(VariousDefOf.Virgin_TookF.TaggedEvent(partner, tag + HETag.Gender(pawn), pawn)); + } + + + + } + } + + [HarmonyPatch(typeof(Utility), "IsIncest")] + public static class Sexperience_Patch_IsIncest + { + public static bool Prefix(Pawn pawn, Pawn otherpawn, ref bool __result) + { + __result = IsIncest(pawn, otherpawn); + return false; + } + + private static bool IsIncest(Pawn pawn, Pawn partner) + { + IEnumerable relations = pawn.GetRelations(partner); + Ideo ideo = pawn.Ideo; + bool wide = false; + if (ideo != null) wide = ideo.HasPrecept(VariousDefOf.Incestuos_Disapproved_CloseOnly); + if (!relations.EnumerableNullOrEmpty()) foreach (PawnRelationDef relation in relations) + { + if (wide) + { + if (relation.incestOpinionOffset < 0) return true; + } + else if (relation.familyByBloodRelation) return true; + } + return false; + } + } + +} diff --git a/RJWSexperience/IdeologyAddon/Ideology/Utility.cs b/RJWSexperience/IdeologyAddon/Ideology/Utility.cs index 398b4ef..9f678b2 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/Utility.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/Utility.cs @@ -10,25 +10,9 @@ using UnityEngine; namespace RJWSexperience.Ideology { - public static class Utility + public static class IdeoUtility { - public static bool IsIncest(this Pawn pawn, Pawn partner) - { - IEnumerable relations = pawn.GetRelations(partner); - Ideo ideo = pawn.Ideo; - bool wide = false; - if (ideo != null) wide = ideo.HasPrecept(VariousDefOf.Incestuos_Disapproved_CloseOnly); - if (!relations.EnumerableNullOrEmpty()) foreach (PawnRelationDef relation in relations) - { - if (wide) - { - if (relation.incestOpinionOffset < 0) return true; - } - else if (relation.familyByBloodRelation) return true; - } - return false; - } public static bool IsSubmissive(this Pawn pawn) { diff --git a/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj b/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj index f8b8004..e87fbed 100644 --- a/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj +++ b/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj @@ -95,9 +95,12 @@ + + + diff --git a/RJWSexperience/IdeologyAddon/VariousDefOf.cs b/RJWSexperience/IdeologyAddon/VariousDefOf.cs index bbb4695..a8b11d5 100644 --- a/RJWSexperience/IdeologyAddon/VariousDefOf.cs +++ b/RJWSexperience/IdeologyAddon/VariousDefOf.cs @@ -11,6 +11,8 @@ namespace RJWSexperience.Ideology public static class VariousDefOf { public static readonly JobDef RapeVictim = DefDatabase.GetNamed("RapeVictim"); + public static readonly JobDef Gangbang = DefDatabase.GetNamed("Gangbang"); + public static readonly JobDef GettinGangbang = DefDatabase.GetNamed("GettinGangbang"); public static readonly JobDef DrugSex = DefDatabase.GetNamed("DrugSex"); public static readonly JobDef GettinDrugSex = DefDatabase.GetNamed("GettinDrugSex"); public static readonly JobDef DrugMasturbate = DefDatabase.GetNamed("DrugMasturbate"); @@ -34,6 +36,10 @@ namespace RJWSexperience.Ideology [MayRequireIdeology] public static readonly HistoryEventDef PromiscuousSex = DefDatabase.GetNamed("PromiscuousSex"); [MayRequireIdeology] public static readonly HistoryEventDef Incestuos_Marriage = DefDatabase.GetNamed("Incestuos_Marriage"); [MayRequireIdeology] public static readonly HistoryEventDef SexWithCorpse = DefDatabase.GetNamed("SexWithCorpse"); + [MayRequireIdeology] public static readonly HistoryEventDef Virgin_TakenF = DefDatabase.GetNamed("Virgin_TakenF"); + [MayRequireIdeology] public static readonly HistoryEventDef Virgin_TakenM = DefDatabase.GetNamed("Virgin_TakenM"); + [MayRequireIdeology] public static readonly HistoryEventDef Virgin_TookF = DefDatabase.GetNamed("Virgin_TookF"); + [MayRequireIdeology] public static readonly HistoryEventDef Virgin_TookM = DefDatabase.GetNamed("Virgin_TookM"); [MayRequireIdeology] public static readonly PreceptDef Bestiality_Abhorrent = DefDatabase.GetNamed("Bestiality_Abhorrent"); [MayRequireIdeology] public static readonly PreceptDef Bestiality_Horrible = DefDatabase.GetNamed("Bestiality_Horrible"); [MayRequireIdeology] public static readonly PreceptDef Bestiality_Disapproved = DefDatabase.GetNamed("Bestiality_Disapproved"); diff --git a/RJWSexperience/RJWSexperience/Buildings.cs b/RJWSexperience/RJWSexperience/Building_Cumbucket.cs similarity index 82% rename from RJWSexperience/RJWSexperience/Buildings.cs rename to RJWSexperience/RJWSexperience/Building_Cumbucket.cs index e913598..a1f3586 100644 --- a/RJWSexperience/RJWSexperience/Buildings.cs +++ b/RJWSexperience/RJWSexperience/Building_Cumbucket.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using Verse; using RimWorld; +using rjw; namespace RJWSexperience { @@ -43,7 +44,11 @@ namespace RJWSexperience int num = (int)storedcum; cum.stackCount = num; - if (cum.stackCount > 0) GenPlace.TryPlaceThing(cum, PositionHeld, Map, ThingPlaceMode.Direct, out Thing res); + if (cum.stackCount > 0) + { + if (!GenPlace.TryPlaceThing(cum, PositionHeld, Map, ThingPlaceMode.Direct, out Thing res)) + FilthMaker.TryMakeFilth(PositionHeld, Map, VariousDefOf.FilthCum, num); + } storedcum -= num; } diff --git a/RJWSexperience/RJWSexperience/Configurations.cs b/RJWSexperience/RJWSexperience/Configurations.cs index a10122d..6662846 100644 --- a/RJWSexperience/RJWSexperience/Configurations.cs +++ b/RJWSexperience/RJWSexperience/Configurations.cs @@ -36,6 +36,8 @@ namespace RJWSexperience public static float MinSexablePercent = MinSexablePercentDefault; public static float VirginRatio = VirginRatioDefault; + public static bool SelectionLocked = false; + public static void ResettoDefault() { MaxLustDeviation = MaxInitialLustDefault; @@ -62,6 +64,7 @@ namespace RJWSexperience Scribe_Values.Look(ref LustLimit, "LustLimit", LustLimit, true); Scribe_Values.Look(ref MinSexablePercent, "MinSexablePercent", MinSexablePercent, true); Scribe_Values.Look(ref VirginRatio, "VirginRatio", VirginRatio, true); + Scribe_Values.Look(ref SelectionLocked, "SelectionLocked", SelectionLocked, true); base.ExposeData(); } } diff --git a/RJWSexperience/RJWSexperience/DebugAction.cs b/RJWSexperience/RJWSexperience/DebugAction.cs index f2610aa..901b5ac 100644 --- a/RJWSexperience/RJWSexperience/DebugAction.cs +++ b/RJWSexperience/RJWSexperience/DebugAction.cs @@ -11,6 +11,25 @@ namespace RJWSexperience { public static class DebugToolsSexperience { + [DebugAction("RJW Sexperience", "Reset pawn's record", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.PlayingOnMap)] + private static void ResetRecords(Pawn p) + { + Trait virgin = p.story?.traits?.GetTrait(VariousDefOf.Virgin); + if (virgin != null) p.story.traits.RemoveTrait(virgin); + p.ResetRecord(true); + p.ResetRecord(false); + MoteMaker.ThrowText(p.TrueCenter(), p.Map, "Records resetted!"); + } + + [DebugAction("RJW Sexperience", "Reset pawn's record(virgin)", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.PlayingOnMap)] + private static void ResetRecordsZero(Pawn p) + { + p.ResetRecord(true); + p.AddVirginTrait(); + MoteMaker.ThrowText(p.TrueCenter(), p.Map, "Records resetted!\nVirginified!"); + } + + [DebugAction("RJW Sexperience", "Reset lust", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.PlayingOnMap)] private static void ResetLust(Pawn p) { diff --git a/RJWSexperience/RJWSexperience/IngestionOutcomeDoers.cs b/RJWSexperience/RJWSexperience/IngestionOutcomeDoers.cs new file mode 100644 index 0000000..6b44141 --- /dev/null +++ b/RJWSexperience/RJWSexperience/IngestionOutcomeDoers.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using rjw; +using RimWorld; +using Verse; + + + +namespace RJWSexperience +{ + public class CumOutcomeDoers : IngestionOutcomeDoer + { + public float unitAmount = 1.0f; + + protected override void DoIngestionOutcomeSpecial(Pawn pawn, Thing ingested) + { + pawn.AteCum(ingested.stackCount * unitAmount); + } + } +} diff --git a/RJWSexperience/RJWSexperience/JobDrivers.cs b/RJWSexperience/RJWSexperience/JobDrivers.cs new file mode 100644 index 0000000..a0bcd5a --- /dev/null +++ b/RJWSexperience/RJWSexperience/JobDrivers.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using Verse.AI; +using RimWorld; +using rjw; + +namespace RJWSexperience +{ + public class JobGiver_UseBucket : ThinkNode_JobGiver + { + protected override Job TryGiveJob(Pawn pawn) + { + throw new NotImplementedException(); + } + + + } + + public class JobDriver_CleanSelfWithBucket : JobDriver + { + const int UNITTIME = 240;//ticks - 120 = 2 real seconds, 3 in-game minutes + protected float progress = 0; + protected float severitycache = 1; + protected Hediff hediffcache; + protected float CleaningTime + { + get + { + return severitycache * UNITTIME; + } + } + + + protected Building_CumBucket Bucket => TargetB.Thing as Building_CumBucket; + + public override bool TryMakePreToilReservations(bool errorOnFailed) + { + return pawn.Reserve(pawn, job, 1, -1, null, errorOnFailed); + } + + protected override IEnumerable MakeNewToils() + { + + this.FailOn(delegate + { + List hediffs = pawn.health.hediffSet.hediffs; + return !hediffs.Exists(x => x.def == RJW_SemenoOverlayHediffDefOf.Hediff_Bukkake); + }); + yield return Toils_Goto.GotoThing(TargetIndex.B, PathEndMode.ClosestTouch); + Toil cleaning = new Toil(); + cleaning.initAction = CleaningInit; + cleaning.tickAction = CleaningTick; + cleaning.AddFinishAction(Finish); + cleaning.defaultCompleteMode = ToilCompleteMode.Never; + cleaning.WithProgressBar(TargetIndex.A, () => progress/CleaningTime); + + yield return cleaning; + yield break; + } + + protected void CleaningInit() + { + hediffcache = pawn.health.hediffSet.hediffs.Find(x => (x.def == RJW_SemenoOverlayHediffDefOf.Hediff_Semen || x.def == RJW_SemenoOverlayHediffDefOf.Hediff_InsectSpunk)); + if (hediffcache == null) + { + pawn.jobs.EndCurrentJob(JobCondition.Succeeded); + } + else + { + progress = 0; + severitycache = hediffcache.Severity; + } + } + + protected void CleaningTick() + { + progress += 1; + if (progress > CleaningTime) + { + Cleaned(); + } + } + + protected void Cleaned() + { + if (hediffcache != null) + { + float cumamount = hediffcache.Severity * 10; + hediffcache.Severity = 0; + Bucket.AddCum(cumamount); + } + CleaningInit(); + } + + protected void Finish() + { + if (pawn.CurJobDef == JobDefOf.Wait_MaintainPosture) + { + pawn.jobs.EndCurrentJob(JobCondition.InterruptForced); + } + } + + } +} diff --git a/RJWSexperience/RJWSexperience/Keyed.cs b/RJWSexperience/RJWSexperience/Keyed.cs index 530dfb7..d3f7bac 100644 --- a/RJWSexperience/RJWSexperience/Keyed.cs +++ b/RJWSexperience/RJWSexperience/Keyed.cs @@ -5,7 +5,8 @@ using System.Text; using System.Threading.Tasks; using Verse; using RimWorld; - +using rjw; +using UnityEngine; namespace RJWSexperience { @@ -14,7 +15,9 @@ namespace RJWSexperience 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 string RS_LostVirgin(string pawn, string partner) => "RS_LostVirgin".Translate(pawn,partner); + public static string RS_LostVirgin(string pawn, string partner) => "RS_LostVirgin".Translate(pawn.Colorize(Color.yellow),partner.Colorize(Color.yellow)); + public static string RS_Sex_Info(string sextype, string sexcount) => "RS_Sex_Info".Translate(sextype, sexcount); + public static string RS_SAT_AVG(string avgsat) => "RS_SAT_AVG".Translate(avgsat); public static readonly string Mod_Title = "RS_Mod_Title".Translate(); public static readonly string SlaveStatFactorDefault = "SlaveStatFactorDefault".Translate(); @@ -24,6 +27,50 @@ namespace RJWSexperience public static readonly string RSNotAnimal = "RSNotAnimal".Translate(); public static readonly string RSShouldCanFuck = "RSShouldCanFuck".Translate(); public static readonly string RSTotalGatheredCum = "RSTotalGatheredCum".Translate(); + public static readonly string RS_FloatMenu_CleanSelf = "RS_FloatMenu_CleanSelf".Translate(); + public static readonly string RS_Best_Sextype = "RS_Best_Sextype".Translate(); + public static readonly string RS_Recent_Sextype = "RS_Recent_Sextype".Translate(); + public static readonly string RS_Sex_Partners = "RS_Sex_Partners".Translate(); + public static readonly string RS_Cum_Swallowed = "RS_Cum_Swallowed".Translate(); + public static readonly string RS_Selected_Partner = "RS_Selected_Partner".Translate(); + public static readonly string RS_Sex_Count = "RS_Sex_Count".Translate(); + public static readonly string RS_Orgasms = "RS_Orgasms".Translate(); + public static readonly string RS_Recent_Sex_Partner = "RS_Recent_Sex_Partner".Translate(); + public static readonly string RS_First_Sex_Partner = "RS_First_Sex_Partner".Translate(); + public static readonly string RS_Most_Sex_Partner = "RS_Most_Sex_Partner".Translate(); + public static readonly string RS_Best_Sex_Partner = "RS_Best_Sex_Partner".Translate(); + public static readonly string RS_VirginsTaken = "RS_VirginsTaken".Translate(); + public static readonly string RS_TotalSexHad = "RS_TotalSexHad".Translate(); + public static readonly string RS_Recent_Sex_Partner_ToolTip = "RS_Recent_Sex_Partner_ToolTip".Translate(); + public static readonly string RS_First_Sex_Partner_ToolTip = "RS_First_Sex_Partner_ToolTip".Translate(); + public static readonly string RS_Most_Sex_Partner_ToolTip = "RS_Most_Sex_Partner_ToolTip".Translate(); + public static readonly string RS_Best_Sex_Partner_ToolTip = "RS_Best_Sex_Partner_ToolTip".Translate(); + public static readonly string RS_VirginsTaken_ToolTip = "RS_VirginsTaken_ToolTip".Translate(); + public static readonly string RS_TotalSexHad_ToolTip = "RS_TotalSexHad_ToolTip".Translate(); + public static readonly string RS_Raped = "RS_Raped".Translate(); + public static readonly string RS_RapedMe = "RS_RapedMe".Translate(); + public static readonly string RS_Sex_History = "RS_Sex_History".Translate(); + public static readonly string RS_Statistics = "RS_Statistics".Translate(); + public static readonly string RS_PartnerList = "RS_PartnerList".Translate(); + public static readonly string RS_Sexuality = "RS_Sexuality".Translate(); + public static readonly string RS_BeenRaped = "RS_BeenRaped".Translate(); + public static readonly string RS_RapedSomeone = "RS_RapedSomeone".Translate(); + public static readonly string RS_PreferRace = "RS_PreferRace".Translate(); + public static readonly string Lust = "Lust".Translate(); + public static readonly string Unknown = "Unknown".Translate(); + public static readonly string Incest = "Incest".Translate(); + public static readonly string None = "None".Translate(); + public static readonly string RS_Bestiality = "RS_Bestiality".Translate(); + public static readonly string RS_Interspecies = "RS_Interspecies".Translate(); + public static readonly string RS_Normal = "RS_Normal".Translate(); + public static readonly string RS_Necrophile = "RS_Necrophile".Translate(); + public static readonly string RS_GatherCum = "RS_GatherCum".Translate(); + public static readonly string RS_SexSkill = "RS_SexSkill".Translate(); + public static readonly string RS_CumAddiction = "RS_CumAddiction".Translate(); + public static readonly string RS_CumAddiction_Tooltip = "RS_CumAddiction_Tooltip".Translate(); + public static readonly string RS_CumAddictiveness = "RS_CumAddictiveness".Translate(); + public static readonly string RS_CumAddictiveness_Tooltip = "RS_CumAddictiveness_Tooltip".Translate(); + public static readonly string RS_NumofTimes = "RS_NumofTimes".Translate(); public static readonly string Option_1_Label = "RSOption_1_Label".Translate(); @@ -49,5 +96,46 @@ namespace RJWSexperience public static readonly string Option_11_Label = "RSOption_11_Label".Translate(); public static readonly string Option_11_Desc = "RSOption_11_Desc".Translate(); + + public static readonly string[] Sextype = + { + ((xxx.rjwSextype)0).ToString().Translate(), + ((xxx.rjwSextype)1).ToString().Translate(), + ((xxx.rjwSextype)2).ToString().Translate(), + ((xxx.rjwSextype)3).ToString().Translate(), + ((xxx.rjwSextype)4).ToString().Translate(), + ((xxx.rjwSextype)5).ToString().Translate(), + ((xxx.rjwSextype)6).ToString().Translate(), + ((xxx.rjwSextype)7).ToString().Translate(), + ((xxx.rjwSextype)8).ToString().Translate(), + ((xxx.rjwSextype)9).ToString().Translate(), + ((xxx.rjwSextype)10).ToString().Translate(), + ((xxx.rjwSextype)11).ToString().Translate(), + ((xxx.rjwSextype)12).ToString().Translate(), + ((xxx.rjwSextype)13).ToString().Translate(), + ((xxx.rjwSextype)14).ToString().Translate(), + ((xxx.rjwSextype)15).ToString().Translate(), + ((xxx.rjwSextype)16).ToString().Translate(), + ((xxx.rjwSextype)17).ToString().Translate(), + ((xxx.rjwSextype)18).ToString().Translate(), + ((xxx.rjwSextype)19).ToString().Translate(), + ((xxx.rjwSextype)20).ToString().Translate() + }; + + public static readonly string[] Sexuality = + { + ((Orientation)0).ToString().Translate(), + ((Orientation)1).ToString().Translate(), + ((Orientation)2).ToString().Translate(), + ((Orientation)3).ToString().Translate(), + ((Orientation)4).ToString().Translate(), + ((Orientation)5).ToString().Translate(), + ((Orientation)6).ToString().Translate(), + ((Orientation)7).ToString().Translate(), + ((Orientation)8).ToString().Translate(), + ((Orientation)9).ToString().Translate(), + ((Orientation)10).ToString().Translate() + }; + } } diff --git a/RJWSexperience/RJWSexperience/Patches/DefInjection.cs b/RJWSexperience/RJWSexperience/Patches/DefInjection.cs new file mode 100644 index 0000000..15fafee --- /dev/null +++ b/RJWSexperience/RJWSexperience/Patches/DefInjection.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using HarmonyLib; + + +namespace RJWSexperience +{ + [StaticConstructorOnStartup] + public static class DefInjection + { + static DefInjection() + { + InjectRaces(); + } + + private static void InjectRaces() + { + List PawnDefs = DefDatabase.AllDefs.Where(x => x.race != null).ToList(); + InjectComp(PawnDefs); + } + + private static void InjectComp(List PawnDefs) + { + CompProperties comp = new CompProperties(typeof(SexPartnerHistory)); + if (!PawnDefs.NullOrEmpty()) foreach(ThingDef def in PawnDefs) + { + def.comps.Add(comp); + } + } + } +} diff --git a/RJWSexperience/RJWSexperience/Patches/GetGizmos.cs b/RJWSexperience/RJWSexperience/Patches/GetGizmos.cs new file mode 100644 index 0000000..e6ffa0a --- /dev/null +++ b/RJWSexperience/RJWSexperience/Patches/GetGizmos.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using RimWorld; +using Verse; +using HarmonyLib; +using rjw; +using RJWSexperience.UI; + +namespace RJWSexperience +{ + [HarmonyPatch(typeof(Pawn),"GetGizmos")] + public class Pawn_GetGizmos + { + public static void Postfix(ref IEnumerable __result, Pawn __instance) + { + + List gizmoList = __result.ToList(); + + AddHistoryGizmo(__instance, ref gizmoList); + + + __result = gizmoList; + } + + private static void AddHistoryGizmo(Pawn pawn, ref List gizmos) + { + SexPartnerHistory history = pawn.GetPartnerHistory(); + if (history != null) gizmos.Add(CreateHIstoryGizmo(pawn,history)); + } + + private static Gizmo CreateHIstoryGizmo(Pawn pawn, SexPartnerHistory history) + { + Gizmo gizmo = new Command_Action + { + defaultLabel = Keyed.RS_Sex_History, + icon = HistoryUtility.HistoryIcon, + defaultIconColor = HistoryUtility.HistoryColor, + hotKey = VariousDefOf.OpenSexStatistics, + action = delegate + { + SexStatusWindow.ToggleWindow(pawn, history); + } + + }; + + return gizmo; + } + + + } + + + +} diff --git a/RJWSexperience/RJWSexperience/Patches/RJW_Patch.cs b/RJWSexperience/RJWSexperience/Patches/RJW_Patch.cs new file mode 100644 index 0000000..f58973c --- /dev/null +++ b/RJWSexperience/RJWSexperience/Patches/RJW_Patch.cs @@ -0,0 +1,207 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using rjw; +using RimWorld; +using Verse; +using Verse.AI; +using UnityEngine; + + +namespace RJWSexperience +{ + + + + [HarmonyPatch(typeof(JobDriver_Sex), "Orgasm")] + public static class RJW_Patch_Orgasm + { + public static void Postfix(JobDriver_Sex __instance) + { + if (__instance.Sexprops.sexType != xxx.rjwSextype.Masturbation && !(__instance is JobDriver_Masturbate)) + { + if (__instance.Sexprops.isRape) + { + __instance.pawn?.skills?.Learn(VariousDefOf.SexSkill, 0.05f, true); + } + { + __instance.pawn?.skills?.Learn(VariousDefOf.SexSkill, 0.35f, true); + } + } + } + } + + [HarmonyPatch(typeof(WhoringHelper), "WhoreAbilityAdjustmentMin")] + public static class RJW_Patch_WhoreAbilityAdjustmentMin + { + public static void Postfix(Pawn whore, ref float __result) + { + __result *= whore.GetSexStat(); + } + } + + [HarmonyPatch(typeof(WhoringHelper), "WhoreAbilityAdjustmentMax")] + public static class RJW_Patch_WhoreAbilityAdjustmentMax + { + public static void Postfix(Pawn whore, ref float __result) + { + __result *= whore.GetSexStat(); + } + } + + [HarmonyPatch(typeof(SexUtility), "SatisfyPersonal")] + public static class RJW_Patch_SatisfyPersonal + { + private const float base_sat_per_fuck = 0.4f; + + public static void Prefix(SexProps props, ref float satisfaction) + { + Pawn pawn = props.pawn; + Pawn partner = props.partner; + satisfaction = Mathf.Max(base_sat_per_fuck, satisfaction * partner.GetSexStat()); + } + + public static void Postfix(SexProps props, ref float satisfaction) + { + Pawn pawn = props.pawn; + Pawn partner = props.partner; + float? lust = pawn.records?.GetValue(VariousDefOf.Lust); + xxx.rjwSextype sextype = props.sexType; + if (lust != null) + { + if (sextype != xxx.rjwSextype.Masturbation || partner != null) pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp((satisfaction - base_sat_per_fuck) * RJWUtility.LustIncrementFactor(lust ?? 0), -0.5f, 0.5f)); // If the sex is satisfactory, lust grows up. Declines at the opposite. + else pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp(satisfaction * satisfaction * RJWUtility.LustIncrementFactor(lust ?? 0), 0, 0.5f)); // Masturbation always increases lust. + } + + if (sextype == xxx.rjwSextype.Masturbation || partner == null) + { + Building_CumBucket cumbucket = (Building_CumBucket)pawn.GetAdjacentBuilding(); + if (cumbucket != null) + { + cumbucket.AddCum(pawn.GetCumVolume()); + } + } + + RJWUtility.UpdateSatisfactionHIstory(pawn, partner, props, satisfaction); + pawn.records?.Increment(VariousDefOf.OrgasmCount); + + } + + + + + } + + [HarmonyPatch(typeof(SexUtility), "TransferNutrition")] + public static class RJW_Patch_TransferNutrition + { + public static void Postfix(SexProps props) + { + Pawn pawn = props.pawn; + Pawn partner = props.partner; + xxx.rjwSextype sextype = props.sexType; + Pawn giver = null; + Pawn receiver = null; + + if (Genital_Helper.has_penis_fertile(pawn)) + { + giver = pawn; + receiver = partner; + } + else if (Genital_Helper.has_penis_fertile(partner)) + { + giver = partner; + receiver = pawn; + } + + if (receiver != null && ( + sextype == xxx.rjwSextype.Oral || + sextype == xxx.rjwSextype.Fellatio || + sextype == xxx.rjwSextype.Sixtynine)) + { + receiver.AteCum(giver.GetCumVolume(), true); + } + } + } + + [HarmonyPatch(typeof(Nymph_Generator), "set_skills")] + public static class RJW_Patch_Nymph_set_skills + { + public static void Postfix(Pawn pawn) + { + SkillRecord sexskill = pawn.skills.GetSkill(VariousDefOf.SexSkill); + if (sexskill != null) + { + sexskill.passion = Passion.Major; + sexskill.Level = (int)Utility.RandGaussianLike(7f, 20.99f); + sexskill.xpSinceLastLevel = sexskill.XpRequiredForLevelUp * Rand.Range(0.10f, 0.90f); + } + } + } + + [HarmonyPatch(typeof(AfterSexUtility), "UpdateRecords")] + public static class RJW_Patch_UpdateRecords + { + public static void Postfix(SexProps props) + { + RJWUtility.UpdateSextypeRecords(props); + RJWUtility.UpdatePartnerHistory(props.pawn, props.partner, props); + RJWUtility.UpdatePartnerHistory(props.partner, props.pawn, props); + } + + } + + [HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "Start")] + public static class RJW_Patch_LogSextype + { + public static void Postfix(JobDriver_SexBaseInitiator __instance) + { + if (__instance.Partner != null) + { + __instance.pawn.PoptheCherry(__instance.Partner, __instance.Sexprops); + __instance.Partner.PoptheCherry(__instance.pawn, __instance.Sexprops); + } + } + } + + + [HarmonyPatch(typeof(WorkGiver_CleanSelf), "JobOnThing")] + public static class RJW_Patch_CleanSelf_JobOnThing + { + public static bool Prefix(Pawn pawn, Thing t, bool forced, ref Job __result) + { + Building_CumBucket bucket = pawn.GetAdjacentBuilding(); + if (bucket == null) bucket = pawn.FindClosestBucket(); + if (bucket != null) + { + __result = JobMaker.MakeJob(VariousDefOf.CleanSelfwithBucket, null, bucket, bucket.Position); + return false; + } + + + return true; + } + } + + [HarmonyPatch(typeof(JobGiver_Masturbate), "TryGiveJob")] + public static class RJW_Patch_Masturabte_TryGiveJob + { + public static void Postfix(Pawn pawn, ref Job __result) + { + if (RJWPreferenceSettings.FapEverywhere && __result != null) + { + Building_CumBucket bucket = pawn.FindClosestBucket(); + if (bucket != null) + { + __result.Clear(); + __result = JobMaker.MakeJob(xxx.Masturbate, null, null, bucket.RandomAdjacentCell8Way()); + } + } + + } + } + +} diff --git a/RJWSexperience/RJWSexperience/Patches/Rimworld_Patch.cs b/RJWSexperience/RJWSexperience/Patches/Rimworld_Patch.cs new file mode 100644 index 0000000..d3740a9 --- /dev/null +++ b/RJWSexperience/RJWSexperience/Patches/Rimworld_Patch.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using RimWorld; +using Verse; +using rjw; +using UnityEngine; + + + + +namespace RJWSexperience +{ + [HarmonyPatch(typeof(PawnGenerator), "GeneratePawn", new Type[] { typeof(PawnGenerationRequest) })] + public static class Rimworld_Patch_GeneratePawn + { + public static void Postfix(PawnGenerationRequest request, ref Pawn __result) + { + if (Configurations.EnableRecordRandomizer && __result != null && !request.Newborn && xxx.is_human(__result)) + { + int avgsex = -500; + bool isvirgin = Rand.Chance(Configurations.VirginRatio); + int totalsex = 0; + int totalbirth = 0; + int deviation = (int)Configurations.MaxSexCountDeviation; + 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); + + int sexableage = 0; + int minsexage = (int)(__result.RaceProps.lifeExpectancy * Configurations.MinSexablePercent); + if (__result.ageTracker.AgeBiologicalYears > minsexage) + { + sexableage = __result.ageTracker.AgeBiologicalYears - minsexage; + avgsex = (int)(sexableage * Configurations.SexPerYear * __result.LustFactor()); + } + + + if (__result.relations != null && __result.gender == Gender.Female) + { + totalbirth += __result.relations.ChildrenCount; + totalsex += totalbirth; + __result.records?.AddTo(xxx.CountOfSexWithHumanlikes, totalbirth); + __result.records?.SetTo(xxx.CountOfBirthHuman, totalbirth); + if (totalbirth > 0) isvirgin = false; + } + if (!isvirgin) + { + if (xxx.is_rapist(__result)) + { + if (xxx.is_zoophile(__result)) + { + if (__result.Has(Quirk.ChitinLover)) totalsex += __result.RecordRandomizer(xxx.CountOfRapedInsects, avgsex, deviation); + else totalsex += __result.RecordRandomizer(xxx.CountOfRapedAnimals, avgsex, deviation); + } + else totalsex += __result.RecordRandomizer(xxx.CountOfRapedHumanlikes, avgsex, deviation); + avgsex /= 8; + } + + if (xxx.is_zoophile(__result)) + { + if (__result.Has(Quirk.ChitinLover)) totalsex += __result.RecordRandomizer(xxx.CountOfRapedInsects, avgsex, deviation); + else totalsex += __result.RecordRandomizer(xxx.CountOfSexWithAnimals, avgsex, deviation); + avgsex /= 10; + } + else if (xxx.is_necrophiliac(__result)) + { + totalsex += __result.RecordRandomizer(xxx.CountOfSexWithCorpse, avgsex, deviation); + avgsex /= 4; + } + + if (__result.IsSlave) + { + totalsex += __result.RecordRandomizer(xxx.CountOfBeenRapedByAnimals, Rand.Range(-50, 10), Rand.Range(0, 10) * sexableage); + totalsex += __result.RecordRandomizer(xxx.CountOfBeenRapedByHumanlikes, 0, Rand.Range(0, 100) * sexableage); + } + + + totalsex += __result.RecordRandomizer(xxx.CountOfSexWithHumanlikes, avgsex, deviation); + + if (totalsex > 0) __result.records.AddTo(VariousDefOf.SexPartnerCount, Math.Max(1, Rand.Range(0, totalsex/7))); + } + } + __result.records?.SetTo(xxx.CountOfSex, totalsex); + RJWUtility.GenerateSextypeRecords(__result, totalsex); + } + if (__result.story?.traits != null) + { + if (__result.IsVirgin()) + { + int degree = 0; + if (__result.gender == Gender.Female) degree = 2; + Trait virgin = new Trait(VariousDefOf.Virgin, degree ,true); + __result.story.traits.GainTrait(virgin); + } + else if (__result.gender == Gender.Female && Rand.Chance(0.05f)) + { + Trait virgin = new Trait(VariousDefOf.Virgin, 1, true); + __result.story.traits.GainTrait(virgin); + } + } + } + } + + + + [HarmonyPatch(typeof(FloatMenuMakerMap), "AddHumanlikeOrders")] + public class HumanlikeOrder_Patch + { + public static void Postfix(Vector3 clickPos, Pawn pawn, List opts) + { + var targets = GenUI.TargetsAt(clickPos, TargetingParameters.ForBuilding()); + + if (pawn.health.hediffSet.HasHediff(RJW_SemenoOverlayHediffDefOf.Hediff_Bukkake)) + foreach (LocalTargetInfo t in targets) + { + Building building = t.Thing as Building; + if (building != null) + { + if (building is Building_CumBucket) + { + opts.AddDistinct(MakeMenu(pawn, building)); + break; + } + } + } + } + + public static FloatMenuOption MakeMenu(Pawn pawn, LocalTargetInfo target) + { + FloatMenuOption option = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(Keyed.RS_FloatMenu_CleanSelf, delegate () + { + pawn.jobs.TryTakeOrderedJob(new Verse.AI.Job(VariousDefOf.CleanSelfwithBucket, null, target, target.Cell)); + }, MenuOptionPriority.Low), pawn, target); + + return option; + } + } + +} diff --git a/RJWSexperience/RJWSexperience/RJWSexperience.csproj b/RJWSexperience/RJWSexperience/RJWSexperience.csproj index 45fe3cc..1878a3e 100644 --- a/RJWSexperience/RJWSexperience/RJWSexperience.csproj +++ b/RJWSexperience/RJWSexperience/RJWSexperience.csproj @@ -63,6 +63,12 @@ ..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll False + + ..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TextCoreModule.dll + + + ..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.TextRenderingModule.dll + ..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UI.dll False @@ -77,20 +83,31 @@ - + - + + + + + + + + - - + + + + + + \ No newline at end of file diff --git a/RJWSexperience/RJWSexperience/RJWUtility.cs b/RJWSexperience/RJWSexperience/RJWUtility.cs new file mode 100644 index 0000000..6655d24 --- /dev/null +++ b/RJWSexperience/RJWSexperience/RJWUtility.cs @@ -0,0 +1,409 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using rjw; +using RimWorld; +using Verse; +using Verse.AI; +using UnityEngine; + +namespace RJWSexperience +{ + public static class RJWUtility + { + public static float GetSexStat(this Pawn pawn) + { + if (xxx.is_human(pawn) && !pawn.Dead) + { + return pawn.GetStatValue(xxx.sex_stat); + } + else return 1.0f; + } + + public static float LustIncrementFactor(float lust) + { + return Mathf.Exp(-Mathf.Pow(lust / Configurations.LustLimit, 2)); + } + + /// + /// If the pawn is virgin, return true. + /// + public static bool IsVirgin(this Pawn pawn) + { + if (pawn.records.GetValue(VariousDefOf.VaginalSexCount) == 0) return true; + return false; + } + public static bool HasHymen(this Pawn pawn) + { + Trait virgin = pawn.story?.traits?.GetTrait(VariousDefOf.Virgin); + if (virgin != null) + { + if (virgin.Degree > 0) return true; + } + return false; + } + + /// + /// If pawn is virgin, lose his/her virginity. + /// + public static void PoptheCherry(this Pawn pawn, Pawn partner, SexProps props) + { + if (props != null && props.sexType == xxx.rjwSextype.Vaginal) + { + if (pawn.IsVirgin()) + { + SexPartnerHistory history = pawn.GetPartnerHistory(); + if (history != null) + { + history.RecordFirst(partner, props); + } + if (RemoveVirginTrait(pawn, partner, props)) + { + Messages.Message(Keyed.RS_LostVirgin(pawn.LabelShort, partner.LabelShort), MessageTypeDefOf.NeutralEvent, true); + } + } + else + { + RemoveVirginTrait(pawn, partner, props); + } + } + } + + public static bool RemoveVirginTrait(Pawn pawn, Pawn partner, SexProps props) + { + int degree; + Trait virgin = pawn.story?.traits?.GetTrait(VariousDefOf.Virgin); + if (virgin != null) + { + degree = virgin.Degree; + if (pawn.gender == Gender.Female && degree > 0) + { + FilthMaker.TryMakeFilth(pawn.Position, pawn.Map, ThingDefOf.Filth_Blood, pawn.LabelShort, 1, FilthSourceFlags.Pawn); + } + ThrowVirginHIstoryEvent(pawn, partner, props, degree); + pawn.story.traits.RemoveTrait(virgin); + return true; + } + return false; + } + + + /// + /// For ideo patch + /// + public static void ThrowVirginHIstoryEvent(Pawn pawn, Pawn partner, SexProps props, int degree) + { + //for non-ideo + if (partner.Ideo == null) + { + partner.needs?.mood?.thoughts?.memories.TryGainMemory(xxx.took_virginity, pawn); + } + } + + public static void UpdateSextypeRecords(SexProps props) + { + xxx.rjwSextype sextype = props.sexType; + Pawn pawn = props.pawn; + Pawn partner = props.partner; + Pawn receiver = props.reciever; + Pawn giver = props.giver; + + if (partner != null) + { + + switch (sextype) + { + case xxx.rjwSextype.Vaginal: + case xxx.rjwSextype.Scissoring: + IncreaseSameRecords(pawn, partner, VariousDefOf.VaginalSexCount); + break; + case xxx.rjwSextype.Anal: + IncreaseSameRecords(pawn, partner, VariousDefOf.AnalSexCount); + break; + case xxx.rjwSextype.Oral: + case xxx.rjwSextype.Fellatio: + if (Genital_Helper.has_penis_fertile(giver) || Genital_Helper.has_penis_infertile(giver)) + { + IncreaseRecords(giver, receiver, VariousDefOf.OralSexCount, VariousDefOf.BlowjobCount); + } + else if (Genital_Helper.has_penis_infertile(receiver) || Genital_Helper.has_penis_infertile(receiver)) + { + IncreaseRecords(giver, receiver, VariousDefOf.BlowjobCount, VariousDefOf.OralSexCount); + } + break; + case xxx.rjwSextype.Sixtynine: + IncreaseSameRecords(pawn, partner, VariousDefOf.OralSexCount); + RecordDef recordpawn, recordpartner; + if (Genital_Helper.has_penis_fertile(pawn) || Genital_Helper.has_penis_infertile(pawn)) + { + recordpartner = VariousDefOf.BlowjobCount; + } + else + { + recordpartner = VariousDefOf.CunnilingusCount; + } + + if (Genital_Helper.has_penis_fertile(partner) || Genital_Helper.has_penis_infertile(partner)) + { + recordpawn = VariousDefOf.BlowjobCount; + } + else + { + recordpawn = VariousDefOf.CunnilingusCount; + } + IncreaseRecords(pawn, partner, recordpawn, recordpartner); + break; + case xxx.rjwSextype.Cunnilingus: + if (Genital_Helper.has_vagina(giver)) + { + IncreaseRecords(giver, receiver, VariousDefOf.OralSexCount, VariousDefOf.CunnilingusCount); + } + else if (Genital_Helper.has_vagina(receiver)) + { + IncreaseRecords(giver, receiver, VariousDefOf.CunnilingusCount, VariousDefOf.OralSexCount); + } + break; + case xxx.rjwSextype.Masturbation: + break; + case xxx.rjwSextype.Handjob: + if (Genital_Helper.has_penis_fertile(giver) || Genital_Helper.has_penis_infertile(giver)) + { + IncreaseRecords(giver, receiver, VariousDefOf.GenitalCaressCount, VariousDefOf.HandjobCount); + } + else + { + IncreaseRecords(giver, receiver, VariousDefOf.HandjobCount, VariousDefOf.GenitalCaressCount); + } + break; + case xxx.rjwSextype.Fingering: + case xxx.rjwSextype.Fisting: + if (Genital_Helper.has_vagina(giver)) + { + IncreaseRecords(giver, receiver, VariousDefOf.GenitalCaressCount, VariousDefOf.FingeringCount); + } + else + { + IncreaseRecords(giver, receiver, VariousDefOf.FingeringCount, VariousDefOf.GenitalCaressCount); + } + break; + case xxx.rjwSextype.Footjob: + IncreaseSameRecords(pawn, partner, VariousDefOf.FootjobCount); + break; + default: + IncreaseSameRecords(pawn, partner, VariousDefOf.MiscSexualBehaviorCount); + break; + } + } + } + + public static void UpdatePartnerHistory(Pawn pawn, Pawn partner, SexProps props) + { + if (partner != null) + { + SexPartnerHistory pawnshistory = pawn.TryGetComp(); + pawnshistory?.RecordHistory(partner, props); + } + } + + public static void UpdateSatisfactionHIstory(Pawn pawn, Pawn partner, SexProps props, float satisfaction) + { + if (partner != null) + { + SexPartnerHistory pawnshistory = pawn.TryGetComp(); + pawnshistory?.RecordSatisfactionHistory(partner, props, satisfaction); + } + } + + public static void IncreaseSameRecords(Pawn pawn, Pawn partner, RecordDef record) + { + pawn.records?.AddTo(record, 1); + partner.records?.AddTo(record, 1); + } + + public static void IncreaseRecords(Pawn pawn, Pawn partner, RecordDef recordforpawn, RecordDef recordforpartner) + { + pawn.records?.AddTo(recordforpawn, 1); + partner.records?.AddTo(recordforpartner, 1); + } + + public static void GenerateSextypeRecords(Pawn pawn, int totalsex) + { + float totalweight = + RJWPreferenceSettings.vaginal + + RJWPreferenceSettings.anal + + RJWPreferenceSettings.fellatio + + RJWPreferenceSettings.cunnilingus + + RJWPreferenceSettings.rimming + + RJWPreferenceSettings.double_penetration + + RJWPreferenceSettings.breastjob + + RJWPreferenceSettings.handjob + + RJWPreferenceSettings.mutual_masturbation + + RJWPreferenceSettings.fingering + + RJWPreferenceSettings.footjob + + RJWPreferenceSettings.scissoring + + RJWPreferenceSettings.fisting + + RJWPreferenceSettings.sixtynine; + Gender prefer = pawn.PreferGender(); + int sex = (int)(totalsex * RJWPreferenceSettings.vaginal / totalweight); + totalsex -= sex; + pawn.records.AddTo(VariousDefOf.VaginalSexCount, sex); + + sex = (int)(totalsex * RJWPreferenceSettings.anal / totalweight); + totalsex -= sex; + pawn.records.AddTo(VariousDefOf.AnalSexCount, sex); + + sex = (int)(totalsex * RJWPreferenceSettings.fellatio / totalweight); + totalsex -= sex; + if (prefer == Gender.Male) pawn.records.AddTo(VariousDefOf.BlowjobCount, sex); + else pawn.records.AddTo(VariousDefOf.OralSexCount, sex); + + sex = (int)(totalsex * RJWPreferenceSettings.cunnilingus / totalweight); + totalsex -= sex; + if (prefer == Gender.Male) pawn.records.AddTo(VariousDefOf.OralSexCount, sex); + else pawn.records.AddTo(VariousDefOf.CunnilingusCount, sex); + + sex = (int)(totalsex * RJWPreferenceSettings.rimming / totalweight); + totalsex -= sex; + pawn.records.AddTo(VariousDefOf.MiscSexualBehaviorCount, sex); + + sex = (int)(totalsex * RJWPreferenceSettings.double_penetration / totalweight) / 2; + totalsex -= sex; + totalsex -= sex; + pawn.records.AddTo(VariousDefOf.VaginalSexCount, sex); + pawn.records.AddTo(VariousDefOf.AnalSexCount, sex); + + sex = (int)(totalsex * RJWPreferenceSettings.breastjob / totalweight); + totalsex -= sex; + pawn.records.AddTo(VariousDefOf.MiscSexualBehaviorCount, sex); + + sex = (int)(totalsex * RJWPreferenceSettings.handjob / totalweight); + totalsex -= sex; + if (prefer == Gender.Male) pawn.records.AddTo(VariousDefOf.HandjobCount, sex); + else pawn.records.AddTo(VariousDefOf.GenitalCaressCount, sex); + + sex = (int)(totalsex * RJWPreferenceSettings.fingering / totalweight); + totalsex -= sex; + if (prefer == Gender.Female) pawn.records.AddTo(VariousDefOf.FingeringCount, sex); + else pawn.records.AddTo(VariousDefOf.GenitalCaressCount, sex); + + sex = (int)(totalsex * RJWPreferenceSettings.mutual_masturbation / totalweight); + totalsex -= sex; + if (prefer == Gender.Male) pawn.records.AddTo(VariousDefOf.HandjobCount, sex); + else pawn.records.AddTo(VariousDefOf.FingeringCount, sex); + pawn.records.AddTo(VariousDefOf.GenitalCaressCount, sex); + + sex = (int)(totalsex * RJWPreferenceSettings.footjob / totalweight); + totalsex -= sex; + pawn.records.AddTo(VariousDefOf.FootjobCount, sex); + + sex = (int)(totalsex * RJWPreferenceSettings.scissoring / totalweight); + totalsex -= sex; + pawn.records.AddTo(VariousDefOf.MiscSexualBehaviorCount, sex); + + sex = (int)(totalsex * RJWPreferenceSettings.fisting / totalweight); + totalsex -= sex; + pawn.records.AddTo(VariousDefOf.MiscSexualBehaviorCount, sex); + + pawn.records.AddTo(VariousDefOf.OralSexCount, totalsex); + if (prefer == Gender.Male) pawn.records.AddTo(VariousDefOf.BlowjobCount, totalsex); + else pawn.records.AddTo(VariousDefOf.CunnilingusCount, totalsex); + + } + + public static Gender PreferGender(this Pawn pawn) + { + if (pawn.gender == Gender.Male) + { + if (xxx.is_homosexual(pawn)) return Gender.Male; + else return Gender.Female; + } + else + { + if (xxx.is_homosexual(pawn)) return Gender.Female; + else return Gender.Male; + } + } + + public static bool GetRapist(this SexProps props, out Pawn rapist) + { + if (!props.isRape) + { + rapist = null; + return false; + } + + rapist = props.pawn; + return true; + } + + public static bool IsBestiality(this SexProps props) + { + if (props.partner != null) + { + return props.pawn.IsAnimal() ^ props.partner.IsAnimal(); + } + return false; + } + + public static Building_CumBucket FindClosestBucket(this Pawn pawn) + { + List buckets = pawn.Map.listerBuildings.allBuildingsColonist.FindAll(x => x is Building_CumBucket); + Dictionary targets = new Dictionary(); + if (!buckets.NullOrEmpty()) for (int i = 0; i < buckets.Count; i++) + { + if (pawn.CanReach(buckets[i], PathEndMode.ClosestTouch, Danger.None)) + { + targets.Add(buckets[i], pawn.Position.DistanceTo(buckets[i].Position)); + } + } + if (!targets.NullOrEmpty()) + { + return (Building_CumBucket)targets.MinBy(x => x.Value).Key; + } + return null; + } + + public static void AteCum(this Pawn pawn, float amount, bool doDrugEffect = false) + { + pawn.records.AddTo(VariousDefOf.NumofEatenCum, 1); + pawn.records.AddTo(VariousDefOf.AmountofEatenCum, amount); + if (doDrugEffect) pawn.CumDrugEffect(); + } + + public static void CumDrugEffect(this Pawn pawn) + { + Need need = pawn.needs?.TryGetNeed(VariousDefOf.Chemical_Cum); + if (need != null) need.CurLevel += VariousDefOf.CumneedLevelOffset; + Hediff addictive = HediffMaker.MakeHediff(VariousDefOf.CumTolerance, pawn); + addictive.Severity = 0.032f; + pawn.health.AddHediff(addictive); + Hediff addiction = pawn.health.hediffSet.GetFirstHediffOfDef(VariousDefOf.CumAddiction); + if (addiction != null) addiction.Severity += VariousDefOf.CumexistingAddictionSeverityOffset; + + pawn.needs?.mood?.thoughts?.memories?.TryGainMemoryFast(VariousDefOf.AteCum); + } + + public static void AddVirginTrait(this Pawn pawn) + { + if (pawn.story?.traits != null) + { + if (pawn.IsVirgin()) + { + int degree = 0; + if (pawn.gender == Gender.Female) degree = 2; + Trait virgin = new Trait(VariousDefOf.Virgin, degree, true); + pawn.story.traits.GainTrait(virgin); + } + else if (pawn.gender == Gender.Female && Rand.Chance(0.05f)) + { + Trait virgin = new Trait(VariousDefOf.Virgin, 1, true); + pawn.story.traits.GainTrait(virgin); + } + } + } + + + } +} diff --git a/RJWSexperience/RJWSexperience/RJW_Patch.cs b/RJWSexperience/RJWSexperience/RJW_Patch.cs deleted file mode 100644 index 998837f..0000000 --- a/RJWSexperience/RJWSexperience/RJW_Patch.cs +++ /dev/null @@ -1,305 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using HarmonyLib; -using rjw; -using RimWorld; -using Verse; -using UnityEngine; - - -namespace RJWSexperience -{ - public static class RJWUtility - { - public static float GetSexStat(this Pawn pawn) - { - if (xxx.is_human(pawn) && !pawn.Dead) - { - return pawn.GetStatValue(xxx.sex_stat); - } - else return 1.0f; - } - - public static float LustIncrementFactor(float lust) - { - return Mathf.Exp(-Mathf.Pow(lust / Configurations.LustLimit, 2)); - } - - /// - /// If the pawn is virgin, return true. - /// - public static bool IsVirgin(this Pawn pawn) - { - if (pawn.records.GetValue(xxx.CountOfSex) == 0) return true; - return false; - } - - /// - /// If pawn is virgin, lose his/her virginity. - /// - public static void PoptheCherry(this Pawn pawn, Pawn partner, bool violent) - { - if (pawn.IsVirgin()) - { - Messages.Message(Keyed.RS_LostVirgin(pawn.LabelShort, partner.LabelShort), MessageTypeDefOf.NeutralEvent, true); - RemoveVirginTrait(pawn); - FilthMaker.TryMakeFilth(pawn.Position, pawn.Map, ThingDefOf.Filth_Blood, 1, FilthSourceFlags.Pawn); - } - } - - public static void RemoveVirginTrait(Pawn pawn) - { - Trait virgin = pawn.story?.traits?.GetTrait(VariousDefOf.Virgin); - if (virgin != null) - { - pawn.story.traits.RemoveTrait(virgin); - } - } - - public static void UpdateSextypeRecords(SexProps props) - { - xxx.rjwSextype sextype = props.sexType; - Pawn pawn = props.pawn; - Pawn partner = props.partner; - Pawn receiver = props.reciever; - Pawn giver = props.giver; - - if (partner != null) - { - - switch (sextype) - { - case xxx.rjwSextype.Vaginal: - case xxx.rjwSextype.Scissoring: - IncreaseSameRecords(pawn, partner, VariousDefOf.VaginalSexCount); - break; - case xxx.rjwSextype.Anal: - IncreaseSameRecords(pawn, partner, VariousDefOf.AnalSexCount); - break; - case xxx.rjwSextype.Oral: - case xxx.rjwSextype.Fellatio: - if (Genital_Helper.has_penis_fertile(giver) || Genital_Helper.has_penis_infertile(giver)) - { - IncreaseRecords(giver, receiver, VariousDefOf.OralSexCount, VariousDefOf.BlowjobCount); - } - else if (Genital_Helper.has_penis_infertile(receiver) || Genital_Helper.has_penis_infertile(receiver)) - { - IncreaseRecords(giver, receiver, VariousDefOf.BlowjobCount, VariousDefOf.OralSexCount); - } - break; - case xxx.rjwSextype.Sixtynine: - IncreaseSameRecords(pawn, partner, VariousDefOf.OralSexCount); - RecordDef recordpawn, recordpartner; - if (Genital_Helper.has_penis_fertile(pawn) || Genital_Helper.has_penis_infertile(pawn)) - { - recordpartner = VariousDefOf.BlowjobCount; - } - else - { - recordpartner = VariousDefOf.CunnilingusCount; - } - - if (Genital_Helper.has_penis_fertile(partner) || Genital_Helper.has_penis_infertile(partner)) - { - recordpawn = VariousDefOf.BlowjobCount; - } - else - { - recordpawn = VariousDefOf.CunnilingusCount; - } - IncreaseRecords(pawn, partner, recordpawn, recordpartner); - break; - case xxx.rjwSextype.Cunnilingus: - if (Genital_Helper.has_vagina(giver)) - { - IncreaseRecords(giver, receiver, VariousDefOf.OralSexCount, VariousDefOf.CunnilingusCount); - } - else if (Genital_Helper.has_vagina(receiver)) - { - IncreaseRecords(giver, receiver, VariousDefOf.CunnilingusCount, VariousDefOf.OralSexCount); - } - break; - case xxx.rjwSextype.Masturbation: - break; - case xxx.rjwSextype.Handjob: - if (Genital_Helper.has_penis_fertile(giver) || Genital_Helper.has_penis_infertile(giver)) - { - IncreaseRecords(giver, receiver, VariousDefOf.GenitalCaressCount, VariousDefOf.HadnjobCount); - } - else - { - IncreaseRecords(giver, receiver, VariousDefOf.HadnjobCount, VariousDefOf.GenitalCaressCount); - } - break; - case xxx.rjwSextype.Fingering: - case xxx.rjwSextype.Fisting: - if (Genital_Helper.has_vagina(giver)) - { - IncreaseRecords(giver, receiver, VariousDefOf.GenitalCaressCount, VariousDefOf.FingeringCount); - } - else - { - IncreaseRecords(giver, receiver, VariousDefOf.FingeringCount, VariousDefOf.GenitalCaressCount); - } - break; - case xxx.rjwSextype.Footjob: - IncreaseSameRecords(pawn, partner, VariousDefOf.FootjobCount); - break; - default: - IncreaseSameRecords(pawn, partner, VariousDefOf.MiscSexualBehaviorCount); - break; - } - } - } - - public static void UpdatePartnerHistory(Pawn pawn, Pawn partner, SexProps props, float satisfaction) - { - SexPartnerHistory pawnshistory = pawn.GetComp(); - pawnshistory.RecordHistory(partner, props); - } - - public static void IncreaseSameRecords(Pawn pawn, Pawn partner, RecordDef record) - { - pawn.records?.AddTo(record, 1); - partner.records?.AddTo(record, 1); - } - - public static void IncreaseRecords(Pawn pawn, Pawn partner, RecordDef recordforpawn, RecordDef recordforpartner) - { - pawn.records?.AddTo(recordforpawn, 1); - partner.records?.AddTo(recordforpartner, 1); - } - - } - - - - [HarmonyPatch(typeof(JobDriver_Sex), "Orgasm")] - public static class RJW_Patch_Orgasm - { - public static void Postfix(JobDriver_Sex __instance) - { - if (__instance.Sexprops.sexType != xxx.rjwSextype.Masturbation && !(__instance is JobDriver_Masturbate)) - { - if (__instance.Sexprops.isRape) - { - __instance.pawn?.skills?.Learn(VariousDefOf.SexSkill, 0.05f, true); - } - { - __instance.pawn?.skills?.Learn(VariousDefOf.SexSkill, 0.35f, true); - } - } - } - } - - [HarmonyPatch(typeof(WhoringHelper), "WhoreAbilityAdjustmentMin")] - public static class RJW_Patch_WhoreAbilityAdjustmentMin - { - public static void Postfix(Pawn whore, ref float __result) - { - __result *= whore.GetSexStat(); - } - } - - [HarmonyPatch(typeof(WhoringHelper), "WhoreAbilityAdjustmentMax")] - public static class RJW_Patch_WhoreAbilityAdjustmentMax - { - public static void Postfix(Pawn whore, ref float __result) - { - __result *= whore.GetSexStat(); - } - } - - [HarmonyPatch(typeof(SexUtility), "SatisfyPersonal")] - public static class RJW_Patch_SatisfyPersonal - { - private const float base_sat_per_fuck = 0.4f; - - public static void Prefix(SexProps props, ref float satisfaction) - { - Pawn pawn = props.pawn; - Pawn partner = props.partner; - satisfaction = Mathf.Max(base_sat_per_fuck, satisfaction * partner.GetSexStat()); - } - - public static void Postfix(SexProps props, float satisfaction) - { - Pawn pawn = props.pawn; - Pawn partner = props.partner; - float? lust = pawn.records?.GetValue(VariousDefOf.Lust); - xxx.rjwSextype sextype = props.sexType; - if (lust != null) - { - if (sextype != xxx.rjwSextype.Masturbation || partner != null) pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp((satisfaction - base_sat_per_fuck) * RJWUtility.LustIncrementFactor(lust ?? 0), -0.5f, 0.5f)); // If the sex is satisfactory, lust grows up. Declines at the opposite. - else pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp(satisfaction * satisfaction * RJWUtility.LustIncrementFactor(lust ?? 0), 0, 0.5f)); // Masturbation always increases lust. - } - - if (sextype == xxx.rjwSextype.Masturbation || partner == null) - { - Building_CumBucket cumbucket = (Building_CumBucket)pawn.GetAdjacentBuilding(); - if (cumbucket != null) - { - cumbucket.AddCum(pawn.GetCumVolume()); - } - } - } - - - - - } - - [HarmonyPatch(typeof(SexUtility), "TransferNutrition")] - public static class RJW_Patch_TransferNutrition - { - public static void Postfix(SexProps props) - { - Pawn pawn = props.pawn; - Pawn partner = props.partner; - xxx.rjwSextype sextype = props.sexType; - Pawn receiver = null; - - if (Genital_Helper.has_penis_fertile(pawn)) receiver = partner; - else if (Genital_Helper.has_penis_fertile(partner)) receiver = pawn; - - if (receiver != null && ( - sextype == xxx.rjwSextype.Oral || - sextype == xxx.rjwSextype.Fellatio || - sextype == xxx.rjwSextype.Sixtynine)) - { - receiver.CumDrugEffect(); - } - } - } - - [HarmonyPatch(typeof(Nymph_Generator), "set_skills")] - public static class RJW_Patch_Nymph_set_skills - { - public static void Postfix(Pawn pawn) - { - SkillRecord sexskill = pawn.skills.GetSkill(VariousDefOf.SexSkill); - if (sexskill != null) - { - sexskill.passion = Passion.Major; - sexskill.Level = (int)Utility.RandGaussianLike(7f, 20.99f); - sexskill.xpSinceLastLevel = sexskill.XpRequiredForLevelUp * Rand.Range(0.10f, 0.90f); - } - } - } - - [HarmonyPatch(typeof(AfterSexUtility), "UpdateRecords")] - public static class RJW_Patch_UpdateRecords - { - public static void Postfix(SexProps props) - { - RJWUtility.UpdateSextypeRecords(props); - } - - } - - - -} diff --git a/RJWSexperience/RJWSexperience/Recipe_HymenSurgery.cs b/RJWSexperience/RJWSexperience/Recipe_HymenSurgery.cs new file mode 100644 index 0000000..62962d2 --- /dev/null +++ b/RJWSexperience/RJWSexperience/Recipe_HymenSurgery.cs @@ -0,0 +1,55 @@ +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 Recipe_HymenSurgery : Recipe_Surgery + { + public override IEnumerable GetPartsToApplyOn(Pawn pawn, RecipeDef recipe) + { + + if (pawn.gender != Gender.Female) + { + yield break; + } + + BodyPartRecord part = Genital_Helper.get_genitalsBPR(pawn); + if (part != null) + { + List hediffs = Genital_Helper.get_PartsHediffList(pawn, part); + if (Genital_Helper.has_vagina(pawn, hediffs) && !pawn.HasHymen()) + { + yield return part; + } + + } + } + + public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, Bill bill) + { + if (billDoer != null) + { + TaleRecorder.RecordTale(TaleDefOf.DidSurgery, new object[] + { + billDoer, + pawn + }); + SurgeryResult(pawn); + } + } + + protected void SurgeryResult(Pawn pawn) + { + int degree = 1; + if (pawn.IsVirgin()) degree = 2; + Trait virgin = new Trait(VariousDefOf.Virgin, degree, true); + pawn.story.traits.GainTrait(virgin); + } + } +} diff --git a/RJWSexperience/RJWSexperience/Rimworld_Patch.cs b/RJWSexperience/RJWSexperience/Rimworld_Patch.cs deleted file mode 100644 index f495a8c..0000000 --- a/RJWSexperience/RJWSexperience/Rimworld_Patch.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using HarmonyLib; -using RimWorld; -using Verse; -using rjw; - - - - -namespace RJWSexperience -{ - [HarmonyPatch(typeof(PawnGenerator), "GeneratePawn", new Type[] { typeof(PawnGenerationRequest) })] - public static class Rimworld_Patch_GeneratePawn - { - public static void Postfix(PawnGenerationRequest request, ref Pawn __result) - { - if (__result != null && !request.Newborn && xxx.is_human(__result)) - { - float avgsex = -500; - bool isvirgin = Rand.Chance(Configurations.VirginRatio); - 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; - float minsexage = __result.RaceProps.lifeExpectancy * Configurations.MinSexablePercent; - if (__result.ageTracker.AgeBiologicalYears > minsexage) - { - sexableage = __result.ageTracker.AgeBiologicalYearsFloat - minsexage; - avgsex = sexableage * Configurations.SexPerYear * __result.LustFactor(); - } - - - if (__result.relations != null && __result.gender == Gender.Female) - { - totalbirth += __result.relations.ChildrenCount; - totalsex += (int)totalbirth; - __result.records?.AddTo(xxx.CountOfSexWithHumanlikes, totalbirth); - __result.records?.SetTo(xxx.CountOfBirthHuman, totalbirth); - if (totalbirth > 0) isvirgin = false; - } - if (!isvirgin) - { - if (xxx.is_rapist(__result)) - { - if (xxx.is_zoophile(__result)) - { - 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 += (int)__result.RecordRandomizer(xxx.CountOfRapedHumanlikes, avgsex, Configurations.MaxSexCountDeviation); - avgsex /= 4; - } - - if (xxx.is_zoophile(__result)) - { - 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 += (int)__result.RecordRandomizer(xxx.CountOfSexWithCorpse, avgsex, Configurations.MaxSexCountDeviation); - avgsex /= 2; - } - - if (__result.IsSlave) - { - 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 += (int)__result.RecordRandomizer(xxx.CountOfSexWithHumanlikes, avgsex, Configurations.MaxSexCountDeviation); - } - } - __result.records?.SetTo(xxx.CountOfSex, totalsex); - } - } - } - - -} diff --git a/RJWSexperience/RJWSexperience/SexHistory.cs b/RJWSexperience/RJWSexperience/SexHistory.cs deleted file mode 100644 index 0e40701..0000000 --- a/RJWSexperience/RJWSexperience/SexHistory.cs +++ /dev/null @@ -1,284 +0,0 @@ -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 SexPartnerHistory : ThingComp - { - public SexPartnerHistory() { } - - - //protected List histories = new List(); - protected Dictionary histories = new Dictionary(); - protected string first = ""; - protected bool dirty = true; - protected string bestaffinity = ""; - protected float bestaffinitysat = 0; - protected xxx.rjwSextype recentsex = xxx.rjwSextype.None; - protected string recentpartner = ""; - protected int[] sextypecount = new int[20]; - protected float[] sextypesat = new float[20]; - - protected string mostpartnercache = ""; - protected xxx.rjwSextype mostsextypecache = xxx.rjwSextype.None; - protected xxx.rjwSextype mostsatsextypecache = xxx.rjwSextype.None; - - - public string FirstSexInfo - { - get - { - Update(); - return - "Partner: " + histories.TryGetValue(first)?.Label ?? "Unknown" + - ""; - } - } - public string MostSexPartner - { - get - { - Update(); - return histories.TryGetValue(mostpartnercache)?.Label ?? "Unknown"; - } - } - public xxx.rjwSextype MostSextype - { - get - { - Update(); - return mostsextypecache; - } - } - public xxx.rjwSextype MostSatisfiedSex - { - get - { - Update(); - return mostsatsextypecache; - } - } - - - - public override void PostExposeData() - { - Scribe_Collections.Look(ref histories, "histories", LookMode.Deep); - Scribe_Values.Look(ref first, "first", "", true); - Scribe_Values.Look(ref bestaffinity, "bestaffinity", "", true); - Scribe_Values.Look(ref bestaffinitysat, "bestaffinitysat", bestaffinitysat, true); - Scribe_Values.Look(ref recentsex, "recentsex", recentsex, true); - Scribe_Values.Look(ref recentpartner, "recentpartner", recentpartner, true); - Scribe_Values.Look(ref sextypecount, "sextypecount", sextypecount, true); - Scribe_Values.Look(ref sextypesat, "sextypesat", sextypesat, true); - base.PostExposeData(); - } - - public void RecordHistory(Pawn partner, SexProps props) - { - TryAddHistory(partner); - recentpartner = partner.ThingID; - SexHistory history = histories[partner.ThingID]; - history?.RecordSex(props); - recentsex = props.sexType; - sextypecount[(int)props.sexType]++; - - dirty = true; - } - - public void RecordSatisfactionHistory(Pawn partner, SexProps props, float satisfaction) - { - TryAddHistory(partner); - RecordFirst(partner, props); - SexHistory history = histories[partner.ThingID]; - history?.RecordSatisfaction(props, satisfaction); - sextypesat[(int)props.sexType] += satisfaction; - dirty = true; - } - - protected bool TryAddHistory(Pawn partner) - { - if (!histories.ContainsKey(partner.ThingID)) - { - histories.Add(partner.ThingID, new SexHistory(partner)); - Pawn pawn = parent as Pawn; - if (pawn != null) - { - pawn.records.AddTo(VariousDefOf.SexPartnerCount, 1); - } - return true; - } - return false; - } - - protected void RecordFirst(Pawn partner, SexProps props) - { - if (VirginCheck() && props.sexType == xxx.rjwSextype.Vaginal) - { - first = partner.ThingID; - } - } - - protected void Update() - { - if (dirty) - { - UpdateStatistics(); - dirty = false; - } - } - - protected void UpdateStatistics() - { - int max = 0; - float maxf = 0; - int maxindex = 0; - string mostID = "Unknown"; - - foreach (KeyValuePair element in histories) - { - SexHistory h = element.Value; - - //find most sex partner - if (max < h.TotalSexCount) - { - max = h.TotalSexCount; - mostID = element.Key; - } - } - - max = 0; - for (int i=0; i < sextypecount.Length; i++) - { - float avgsat = sextypesat[i] / sextypecount[i]; - if (maxf < avgsat) - { - maxf = avgsat; - maxindex = i; - } - } - - mostsatsextypecache = (xxx.rjwSextype)maxindex; - mostsextypecache = (xxx.rjwSextype)sextypecount.FirstIndexOf(x => x == sextypecount.Max()); - mostpartnercache = mostID; - } - - protected bool VirginCheck() - { - Pawn pawn = parent as Pawn; - if (pawn != null) - { - if (pawn.IsVirgin()) return true; - } - return false; - } - - } - - - public class SexHistory : IExposable - { - protected Pawn partner; - protected string namecache; - protected int totalsexhad = 0; - protected int raped = 0; - protected int rapedme = 0; - protected int orgasms = 0; - protected xxx.rjwSextype bestsextype = xxx.rjwSextype.None; - protected float bestsatisfaction = 0; - - - - public string Label - { - get - { - if (partner != null) - { - namecache = partner.Label; - return namecache; - } - else return namecache; - } - } - public xxx.rjwSextype BestSextype - { - get - { - return bestsextype; - } - } - public float BestSatisfaction - { - get - { - return bestsatisfaction; - } - } - public int TotalSexCount - { - get - { - return totalsexhad; - } - } - - - public SexHistory() { } - - public SexHistory(Pawn pawn) - { - partner = pawn; - namecache = pawn.Label; - } - - - public void ExposeData() - { - Scribe_References.Look(ref partner, "partner", true); - Scribe_Values.Look(ref namecache, "namecache", namecache, true); - Scribe_Values.Look(ref totalsexhad, "totalsexhad", totalsexhad, true); - Scribe_Values.Look(ref raped, "raped", raped, true); - Scribe_Values.Look(ref rapedme, "rapedme", rapedme, true); - Scribe_Values.Look(ref orgasms, "orgasms", orgasms, true); - Scribe_Values.Look(ref bestsextype, "bestsextype", bestsextype, true); - Scribe_Values.Look(ref bestsatisfaction, "bestsatisfaction", bestsatisfaction, true); - } - - public void RecordSex(SexProps props) - { - totalsexhad++; - if (props.isRape) - { - if (partner == props.giver) - { - rapedme++; - } - else if (partner == props.reciever) - { - raped++; - } - } - } - - public void RecordSatisfaction(SexProps props, float satisfaction) - { - if (satisfaction > bestsatisfaction) - { - orgasms++; - bestsextype = props.sexType; - bestsatisfaction = satisfaction; - } - } - - - } - -} diff --git a/RJWSexperience/RJWSexperience/SexHistory/HistoryUtility.cs b/RJWSexperience/RJWSexperience/SexHistory/HistoryUtility.cs new file mode 100644 index 0000000..8388e5d --- /dev/null +++ b/RJWSexperience/RJWSexperience/SexHistory/HistoryUtility.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using RimWorld; +using Verse; +using rjw; +using UnityEngine; + +namespace RJWSexperience +{ + [StaticConstructorOnStartup] + public static class HistoryUtility + { + public static readonly Texture2D HistoryIcon = ContentFinder.Get("UI/buttons/OpenStatsReport"); + public static readonly Texture2D UnknownPawn = ContentFinder.Get("UI/Icon/UnknownPawn"); + public static readonly Texture2D FirstOverlay = ContentFinder.Get("UI/Icon/FirstBG"); + public static readonly Texture2D Heart = ContentFinder.Get("Things/Mote/Heart"); + public static readonly Texture2D Incest = ContentFinder.Get("UI/Icon/Incest"); + public static readonly Texture2D Locked = ContentFinder.Get("UI/Icon/RSLocked"); + public static readonly Texture2D Unlocked = ContentFinder.Get("UI/Icon/RSUnlocked"); + public static Texture2D Slaanesh = SolidColorMaterials.NewSolidColorTexture(0.686f, 0.062f, 0.698f, 1.0f); + public static Texture2D Khorne = SolidColorMaterials.NewSolidColorTexture(0.415f, 0.0f, 0.003f, 1.0f); + public static Texture2D Tzeentch = SolidColorMaterials.NewSolidColorTexture(0.082f, 0.453f, 0.6f, 1.0f); + public static Texture2D Nurgle = SolidColorMaterials.NewSolidColorTexture(0.6f, 0.83f, 0.35f, 1.0f); + public static Texture2D Partners = SolidColorMaterials.NewSolidColorTexture(0.843f, 0.474f, 0.6f, 1.0f); + public static Texture2D TotalSex = SolidColorMaterials.NewSolidColorTexture(0.878f, 0.674f, 0.411f, 1.0f); + public static Texture2D Satisfaction = SolidColorMaterials.NewSolidColorTexture(0.325f, 0.815f, 0.729f,1.0f); + public static readonly Color HistoryColor = new Color(0.9f,0.5f,0.5f); + + public static readonly Texture2D[] SextypeColor = new Texture2D[] + { + Texture2D.linearGrayTexture, //None = 0, + SolidColorMaterials.NewSolidColorTexture(0.900f, 0.500f, 0.500f, 1.0f), //Vaginal = 1, + SolidColorMaterials.NewSolidColorTexture(0.529f, 0.313f, 0.113f, 1.0f), //Anal = 2, + SolidColorMaterials.NewSolidColorTexture(0.529f, 0.113f, 0.305f, 1.0f), //Oral = 3, + SolidColorMaterials.NewSolidColorTexture(0.000f, 0.819f, 0.219f, 1.0f), //Masturbation = 4, + SolidColorMaterials.NewSolidColorTexture(0.000f, 0.560f, 0.090f, 1.0f), //DoublePenetration + SolidColorMaterials.NewSolidColorTexture(0.839f, 0.850f, 0.505f, 1.0f), //Boobjob = 6, + SolidColorMaterials.NewSolidColorTexture(0.858f, 0.886f, 0.113f, 1.0f), //Handjob = 7, + SolidColorMaterials.NewSolidColorTexture(0.752f, 0.780f, 0.000f, 1.0f), //Footjob = 8, + SolidColorMaterials.NewSolidColorTexture(0.484f, 0.500f, 0.241f, 1.0f), //Fingering = 9, + SolidColorMaterials.NewSolidColorTexture(0.913f, 0.909f, 0.909f, 1.0f), //Scissoring = 10, + SolidColorMaterials.NewSolidColorTexture(0.588f, 0.576f, 0.431f, 1.0f), //MutualMasturbation + SolidColorMaterials.NewSolidColorTexture(0.741f, 0.000f, 0.682f, 1.0f), //Fisting = 12, + SolidColorMaterials.NewSolidColorTexture(0.121f, 0.929f, 1.000f, 1.0f), //MechImplant = 13, + SolidColorMaterials.NewSolidColorTexture(0.478f, 0.274f, 0.160f, 1.0f), //Rimming = 14, + SolidColorMaterials.NewSolidColorTexture(0.819f, 0.301f, 0.552f, 1.0f), //Fellatio = 15, + SolidColorMaterials.NewSolidColorTexture(0.819f, 0.301f, 0.552f, 1.0f), //Cunnilingus = 16, + SolidColorMaterials.NewSolidColorTexture(0.529f, 0.113f, 0.305f, 1.0f), //Sixtynine = 17 + Texture2D.linearGrayTexture, //? = 18 + Texture2D.linearGrayTexture, //? = 19 + Texture2D.linearGrayTexture //? = 20 + }; + + public static readonly Texture2D[] PassionBG = new Texture2D[] + { + + Texture2D.blackTexture, //None = 0, + SolidColorMaterials.NewSolidColorTexture(0.800f, 0.800f, 0.800f, 1.0f), //Minor = 1, + SolidColorMaterials.NewSolidColorTexture(1.000f, 0.875f, 0.000f, 1.0f) //Major = 2, + }; + + public static SexPartnerHistory GetPartnerHistory(this Pawn pawn) + { + return pawn.TryGetComp(); + } + + + + } +} diff --git a/RJWSexperience/RJWSexperience/SexHistory/SexHistory.cs b/RJWSexperience/RJWSexperience/SexHistory/SexHistory.cs new file mode 100644 index 0000000..09cdb17 --- /dev/null +++ b/RJWSexperience/RJWSexperience/SexHistory/SexHistory.cs @@ -0,0 +1,638 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using RimWorld; +using Verse; +using rjw; +using UnityEngine; + +namespace RJWSexperience +{ + public class SexPartnerHistory : ThingComp + { + public SexPartnerHistory() { } + public const int ARRLEN = 20; + + //protected List histories = new List(); + protected Dictionary histories = new Dictionary(); + protected string first = ""; + protected bool dirty = true; + protected xxx.rjwSextype recentsex = xxx.rjwSextype.None; + protected float recentsat = 0; + protected string recentpartner = ""; + protected int[] sextypecount = new int[ARRLEN]; + protected float[] sextypesat = new float[ARRLEN]; + protected int virginstaken = 0; + protected int incestuous = 0; + protected int bestiality = 0; + protected int corpsefuck = 0; + protected int interspecies = 0; + + protected string mostpartnercache = ""; + protected xxx.rjwSextype mostsextypecache = xxx.rjwSextype.None; + protected xxx.rjwSextype mostsatsextypecache = xxx.rjwSextype.None; + protected xxx.rjwSextype bestsextypecache = xxx.rjwSextype.None; + protected float bestsextypesatcache = 0; + protected string bestpartnercache = ""; + protected int totalsexcache = 0; + protected int totalrapedcache = 0; + protected int totalbeenrapedcache = 0; + protected ThingDef preferracecache = null; + protected int preferracesexcountcache = 0; + protected Pawn preferracepawncache = null; + protected float avtsatcache = 0; + + + private List partnerlistcache; + private List sextypecountsave; + private List sextypesatsave; + + + public SexHistory GetFirstPartnerHistory + { + get + { + Update(); + return histories.TryGetValue(first); + } + } + public SexHistory GetMostPartnerHistory + { + get + { + Update(); + return histories.TryGetValue(mostpartnercache); + } + } + public xxx.rjwSextype MostSextype + { + get + { + Update(); + return mostsextypecache; + } + } + public xxx.rjwSextype MostSatisfiedSex + { + get + { + Update(); + return mostsatsextypecache; + } + } + public SexHistory GetRecentPartnersHistory + { + get + { + return histories.TryGetValue(recentpartner); + } + } + public SexHistory GetBestSexPartnerHistory + { + get + { + Update(); + SexHistory history = histories.TryGetValue(bestpartnercache); + return history; + } + } + public float TotalSexHad + { + get + { + Update(); + return totalsexcache; + } + } + public int VirginsTaken + { + get + { + return virginstaken; + } + } + public List PartnerList + { + get + { + Update(); + return partnerlistcache; + } + } + public int PartnerCount + { + get + { + if (histories == null) histories = new Dictionary(); + return histories.Count; + } + } + public int IncestuousCount + { + get + { + return incestuous; + } + } + public int RapedCount + { + get + { + Update(); + return totalrapedcache; + } + } + public int BeenRapedCount + { + get + { + Update(); + return totalbeenrapedcache; + } + } + public ThingDef PreferRace + { + get + { + Update(); + return preferracecache; + } + } + public int PreferRaceSexCount + { + get + { + Update(); + return preferracesexcountcache; + } + } + public int BestialityCount + { + get + { + return bestiality; + } + } + public int CorpseFuckCount + { + get + { + return corpsefuck; + } + } + public int InterspeciesCount + { + get + { + return interspecies; + } + } + public float AVGSat + { + get + { + Update(); + if (totalsexcache == 0) return 0; + return sextypesat.Sum() / totalsexcache; + } + } + public Texture GetPreferRaceIcon(Vector2 size) + { + Update(); + if (preferracepawncache != null) return PortraitsCache.Get(preferracepawncache, size, Rot4.South, default, 1, true, true, false, false); + else return HistoryUtility.UnknownPawn; + + } + + public float GetBestSextype(out xxx.rjwSextype sextype) + { + if (dirty) Update(); + sextype = bestsextypecache; + return bestsextypesatcache; + } + + public float GetRecentSextype(out xxx.rjwSextype sextype) + { + if (dirty) Update(); + sextype = recentsex; + return recentsat; + } + + public SexHistory this[Pawn pawn] + { + get + { + return histories.TryGetValue(pawn.ThingID); + } + } + + public float GetAVGSat(xxx.rjwSextype sextype) + { + int index = (int)sextype; + return GetAVGSat(index); + } + + public float GetAVGSat(int index) + { + float res = sextypesat[index] / sextypecount[index]; + return float.IsNaN(res) ? 0f : res; + } + + public int GetSexCount(int index) + { + return sextypecount[index]; + } + + + + public override void PostExposeData() + { + if (Scribe.mode == LoadSaveMode.Saving) + { + sextypecountsave = sextypecount.ToList(); + sextypesatsave = sextypesat.ToList(); + } + + Scribe_Collections.Look(ref histories, "histories", LookMode.Value, LookMode.Deep); + Scribe_Values.Look(ref first, "first", "", true); + Scribe_Values.Look(ref recentsex, "recentsex", recentsex, true); + Scribe_Values.Look(ref recentsat, "recentsat", recentsat, true); + Scribe_Values.Look(ref recentpartner, "recentpartner", recentpartner, true); + Scribe_Values.Look(ref virginstaken, "virginstaken", virginstaken, true); + Scribe_Values.Look(ref incestuous, "incestous", incestuous, true); + Scribe_Values.Look(ref bestiality, "bestiality", bestiality, true); + Scribe_Values.Look(ref corpsefuck, "corpsefuck", corpsefuck, true); + Scribe_Values.Look(ref interspecies, "interspecies", interspecies, true); + Scribe_Collections.Look(ref sextypecountsave, "sextypecountsave", LookMode.Value); + Scribe_Collections.Look(ref sextypesatsave, "sextypesatsave", LookMode.Value); + //Scribe_Values.Look(ref sextypecount, "sextypecount", new int[ARRLEN], true); // not work + //Scribe_Values.Look(ref sextypesat, "sextypesat", new float[ARRLEN], true); + if (Scribe.mode == LoadSaveMode.LoadingVars) + { + sextypecount = sextypecountsave?.ToArray() ?? new int[ARRLEN]; + sextypesat = sextypesatsave?.ToArray() ?? new float[ARRLEN]; + } + + if (histories == null) histories = new Dictionary(); + + base.PostExposeData(); + } + + public void RecordHistory(Pawn partner, SexProps props) + { + Pawn pawn = parent as Pawn; + TryAddHistory(partner); + RecordFirst(partner, props); + recentpartner = partner.ThingID; + SexHistory history = histories[partner.ThingID]; + history?.RecordSex(props); + recentsex = props.sexType; + sextypecount[(int)props.sexType]++; + if (partner.IsIncest(pawn)) incestuous++; + if (partner.Dead) corpsefuck++; + if (props.IsBestiality()) bestiality++; + else if (pawn.def != partner.def) interspecies++; + dirty = true; + } + + public void RecordSatisfactionHistory(Pawn partner, SexProps props, float satisfaction) + { + TryAddHistory(partner); + RecordFirst(partner, props); + SexHistory history = histories[partner.ThingID]; + history?.RecordSatisfaction(props, satisfaction); + recentsat = satisfaction; + sextypesat[(int)props.sexType] += satisfaction; + dirty = true; + } + + protected bool TryAddHistory(Pawn partner) + { + if (!histories.ContainsKey(partner.ThingID)) + { + SexHistory newhistory = new SexHistory(partner,partner.IsIncest(parent as Pawn)); + histories.Add(partner.ThingID, newhistory); + Pawn pawn = parent as Pawn; + if (pawn != null) + { + pawn.records.AddTo(VariousDefOf.SexPartnerCount, 1); + } + return true; + } + return false; + } + + public void RecordFirst(Pawn partner, SexProps props) + { + if (VirginCheck() && props.sexType == xxx.rjwSextype.Vaginal) + { + TryAddHistory(partner); + first = partner.ThingID; + SexPartnerHistory history = partner.GetPartnerHistory(); + if (history != null) + { + history.TakeSomeonesVirgin(parent as Pawn); + } + + } + } + + public void TakeSomeonesVirgin(Pawn partner) + { + TryAddHistory(partner); + SexHistory history = histories[partner.ThingID]; + if (history != null) history.TookVirgin(); + virginstaken++; + } + + protected void Update() + { + if (dirty) + { + UpdateStatistics(); + UpdateBestSex(); + UpdatePartnerList(); + dirty = false; + } + } + + protected void UpdateStatistics() + { + int max = 0; + float maxsat = 0; + float maxf = 0; + int maxindex = 0; + string mostID = Keyed.Unknown; + string bestID = Keyed.Unknown; + totalsexcache = 0; + totalrapedcache = 0; + totalbeenrapedcache = 0; + Dictionary racetotalsat = new Dictionary(); + List allpartners = new List(); + + foreach (KeyValuePair element in histories) + { + SexHistory h = element.Value; + + //find most sex partner + if (max < h.TotalSexCount) + { + max = h.TotalSexCount; + mostID = element.Key; + } + if (maxsat < h.BestSatisfaction) + { + maxsat = h.BestSatisfaction; + bestID = element.Key; + } + + if (h.Partner != null) + { + Pawn partner = h.Partner; + allpartners.Add(partner); + if (racetotalsat.ContainsKey(partner.def)) + { + racetotalsat[partner.def] += h.TotalSexCount - h.RapedMe; + } + else + { + racetotalsat.Add(partner.def, h.TotalSexCount - h.RapedMe); + } + } + + totalsexcache += h.TotalSexCount; + totalrapedcache += h.Raped; + totalbeenrapedcache += h.RapedMe; + } + + if (!racetotalsat.NullOrEmpty()) + { + KeyValuePair prefer = racetotalsat.MaxBy(x => x.Value); + preferracecache = prefer.Key; + preferracesexcountcache = prefer.Value; + preferracepawncache = allpartners.FirstOrDefault(x => x.def == preferracecache); + } + + max = 0; + for (int i=0; i < sextypecount.Length; i++) + { + float avgsat = sextypesat[i] / sextypecount[i]; + if (maxf < avgsat) + { + maxf = avgsat; + maxindex = i; + } + } + + mostsatsextypecache = (xxx.rjwSextype)maxindex; + mostsextypecache = (xxx.rjwSextype)sextypecount.FirstIndexOf(x => x == sextypecount.Max()); + mostpartnercache = mostID; + bestpartnercache = bestID; + + racetotalsat.Clear(); + allpartners.Clear(); + } + + protected void UpdateBestSex() + { + int bestindex = 0; + float bestsat = 0; + float avgsat; + for(int i=0; i< sextypecount.Length; i++) + { + avgsat = sextypesat[i] / sextypecount[i]; + if (bestsat < avgsat) + { + bestindex = i; + bestsat = avgsat; + } + } + bestsextypecache = (xxx.rjwSextype)bestindex; + bestsextypesatcache = bestsat; + } + + protected void UpdatePartnerList() + { + if (partnerlistcache == null) partnerlistcache = new List(); + partnerlistcache.Clear(); + if (!histories.NullOrEmpty()) foreach (SexHistory history in histories.Values) + { + if (history != null) partnerlistcache.Add(history); + } + } + + protected bool VirginCheck() + { + if (histories.TryGetValue(first) != null) return false; + + Pawn pawn = parent as Pawn; + if (pawn != null) + { + if (pawn.IsVirgin()) return true; + } + return false; + } + + + + } + + + public class SexHistory : IExposable + { + protected Pawn partner = null; + protected string namecache; + protected int totalsexhad = 0; + protected int raped = 0; + protected int rapedme = 0; + protected int orgasms = 0; + protected xxx.rjwSextype bestsextype = xxx.rjwSextype.None; + protected float bestsatisfaction = 0; + protected bool itookvirgin = false; + protected bool incest = false; + + public string Label + { + get + { + if (partner != null) + { + namecache = partner.Label; + return namecache; + } + else return namecache; + } + } + public xxx.rjwSextype BestSextype + { + get + { + return bestsextype; + } + } + public float BestSatisfaction + { + get + { + return bestsatisfaction; + } + } + public int TotalSexCount + { + get + { + return totalsexhad; + } + } + public Pawn Partner + { + get + { + return partner; + } + } + public string RapeInfo + { + get + { + string res = ""; + if (raped > 0) res += Keyed.RS_Raped + raped + " "; + if (rapedme > 0) res += Keyed.RS_RapedMe + rapedme + " "; + return res; + } + } + public int OrgasmCount + { + get + { + return orgasms; + } + } + public bool IamFirst + { + get + { + return itookvirgin; + } + } + public bool Incest + { + get + { + return incest; + } + } + public int Raped + { + get + { + return raped; + } + } + public int RapedMe + { + get + { + return rapedme; + } + } + + public SexHistory() { } + + public SexHistory(Pawn pawn, bool incest = false) + { + this.partner = pawn; + this.namecache = pawn.Label; + this.incest = incest; + } + + + public void ExposeData() + { + Scribe_References.Look(ref partner, "partner", true); + Scribe_Values.Look(ref namecache, "namecache", namecache, true); + Scribe_Values.Look(ref totalsexhad, "totalsexhad", totalsexhad, true); + Scribe_Values.Look(ref raped, "raped", raped, true); + Scribe_Values.Look(ref rapedme, "rapedme", rapedme, true); + Scribe_Values.Look(ref orgasms, "orgasms", orgasms, true); + Scribe_Values.Look(ref bestsextype, "bestsextype", bestsextype, true); + Scribe_Values.Look(ref bestsatisfaction, "bestsatisfaction", bestsatisfaction, true); + Scribe_Values.Look(ref itookvirgin, "itookvirgin", itookvirgin, true); + Scribe_Values.Look(ref incest, "incest", incest, true); + } + + public void RecordSex(SexProps props) + { + totalsexhad++; + if (props.isRape) + { + if (partner == props.giver) + { + rapedme++; + } + else if (partner == props.reciever) + { + raped++; + } + } + } + + public void RecordSatisfaction(SexProps props, float satisfaction) + { + if (satisfaction > bestsatisfaction) + { + orgasms++; + bestsextype = props.sexType; + bestsatisfaction = satisfaction; + } + } + + public void TookVirgin() + { + itookvirgin = true; + } + } + +} diff --git a/RJWSexperience/RJWSexperience/Thought_Opinionbased.cs b/RJWSexperience/RJWSexperience/Thought_Opinionbased.cs new file mode 100644 index 0000000..7442e35 --- /dev/null +++ b/RJWSexperience/RJWSexperience/Thought_Opinionbased.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; + + +namespace RJWSexperience +{ + /// + /// ThoughtDef using opinion + /// + public class ThoughtDef_Opinionbased : ThoughtDef + { + public List minimumValueforStage = new List(); + } + + /// + /// Thought class using record. + /// + public class Thought_Opinionbased : Thought_Memory + { + protected ThoughtDef_Opinionbased Def => (ThoughtDef_Opinionbased)def; + protected List minimumValueforStage => Def.minimumValueforStage; + + public override int CurStageIndex + { + get + { + float value = 0f; + if (otherPawn != null) value = pawn.relations?.OpinionOf(otherPawn) ?? 0f; + for (int i = minimumValueforStage.Count - 1; i > 0; i--) + { + if (minimumValueforStage[i] < value) return i; + } + return 0; + } + } + } +} diff --git a/RJWSexperience/RJWSexperience/Thought_Recordbased.cs b/RJWSexperience/RJWSexperience/Thought_Recordbased.cs index 364032d..b99e623 100644 --- a/RJWSexperience/RJWSexperience/Thought_Recordbased.cs +++ b/RJWSexperience/RJWSexperience/Thought_Recordbased.cs @@ -45,9 +45,6 @@ namespace RJWSexperience public class Thought_AteCum : Thought_Recordbased { - - protected int recordIncrement = 1; - public override int CurStageIndex { get @@ -60,21 +57,13 @@ namespace RJWSexperience public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref recordIncrement, "recordIncrement", recordIncrement, true); } - //There is no direct way to modify custom records via ingestion. So i increase it from thought. public override void ThoughtInterval() { base.ThoughtInterval(); - if (recordIncrement >= 1) - { - recordIncrement--; - pawn.records.AddTo(VariousDefOf.NumofEatenCum, 1); - } - } public override bool TryMergeWithExistingMemory(out bool showBubble) @@ -97,13 +86,11 @@ namespace RJWSexperience public override void Init() { base.Init(); - recordIncrement = 1; } protected virtual void Merged() { age = 0; - recordIncrement += 1; } } diff --git a/RJWSexperience/RJWSexperience/UI/RJWUIUtility.cs b/RJWSexperience/RJWSexperience/UI/RJWUIUtility.cs new file mode 100644 index 0000000..b6bc4e6 --- /dev/null +++ b/RJWSexperience/RJWSexperience/UI/RJWUIUtility.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; +using UnityEngine; +using rjw; + + +namespace RJWSexperience.UI +{ + public static class RJWUIUtility + { + public const float FONTHEIGHT = 22f; + public const float CARDHEIGHT = 110f; + public const float LISTPAWNSIZE = 100f; + public const float BASESAT = 0.40f; + public const float ICONSIZE = 30f; + + + public static void DrawQuirk(this Rect rect, Pawn pawn) + { + List quirks = Quirk.All.FindAll(x => pawn.Has(x)); + string quirkstr = quirks.Select(x => x.Key).ToCommaList(); + string tooltip = ""; + + Widgets.Label(rect, "Quirks".Translate() + quirkstr); + + if (Mouse.IsOver(rect)) + { + if (quirks.NullOrEmpty()) + { + tooltip = "NoQuirks".Translate(); + } + else + { + StringBuilder stringBuilder = new StringBuilder(); + foreach (var q in quirks) + { + stringBuilder.AppendLine(q.Key.Colorize(Color.yellow)); + stringBuilder.AppendLine(q.LocaliztionKey.Translate(pawn.Named("pawn")).AdjustedFor(pawn).Resolve()); + stringBuilder.AppendLine(""); + } + tooltip = stringBuilder.ToString().TrimEndNewlines(); + } + Widgets.DrawHighlight(rect); + } + + TooltipHandler.TipRegion(rect, tooltip); + } + + public static void DrawSexuality(this Rect rect, CompRJW comp) + { + if (comp != null) + { + string sexuality = Keyed.Sexuality[(int)comp.orientation]; + Widgets.Label(rect, Keyed.RS_Sexuality + ": " + sexuality); + Widgets.DrawHighlightIfMouseover(rect); + } + } + + public static string GetRelationsString(this Pawn pawn, Pawn otherpawn) + { + if (otherpawn != null) + { + IEnumerable relations = pawn.GetRelations(otherpawn); + if (!relations.EnumerableNullOrEmpty()) return relations.Select(x => x.GetGenderSpecificLabel(otherpawn)).ToCommaList().CapitalizeFirst(); + } + return ""; + } + + public static void DrawBorder(this Rect rect, Texture border, float thickness = 1f) + { + GUI.DrawTexture(new Rect(rect.x,rect.y,rect.width, thickness), border); + GUI.DrawTexture(new Rect(rect.x+rect.width-thickness,rect.y, thickness, rect.height), border); + GUI.DrawTexture(new Rect(rect.x,rect.y+rect.height - thickness,rect.width, thickness), border); + GUI.DrawTexture(new Rect(rect.x, rect.y, thickness, rect.height), border); + } + + public static string GetStatExplanation(Pawn pawn, StatDef stat, float val) + { + return stat.description + "\n" + + stat.Worker.GetExplanationFull(StatRequest.For(pawn), ToStringNumberSense.Undefined, val); + } + + } +} diff --git a/RJWSexperience/RJWSexperience/UI/SexStatus.cs b/RJWSexperience/RJWSexperience/UI/SexStatus.cs new file mode 100644 index 0000000..b36139d --- /dev/null +++ b/RJWSexperience/RJWSexperience/UI/SexStatus.cs @@ -0,0 +1,608 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using Verse; +using Verse.Sound; +using RimWorld; +using rjw; + + +namespace RJWSexperience.UI +{ + public class SexStatusWindow : Window + { + public const float FONTHEIGHT = RJWUIUtility.FONTHEIGHT; + public const float CARDHEIGHT = RJWUIUtility.CARDHEIGHT; + public const float LISTPAWNSIZE = RJWUIUtility.LISTPAWNSIZE; + public const float BASESAT = RJWUIUtility.BASESAT; + public const float ICONSIZE = RJWUIUtility.ICONSIZE; + + public static readonly int[] Sextype = + { + (int)xxx.rjwSextype.Vaginal, + (int)xxx.rjwSextype.Anal, + (int)xxx.rjwSextype.Oral, + (int)xxx.rjwSextype.Fellatio, + (int)xxx.rjwSextype.Cunnilingus, + (int)xxx.rjwSextype.DoublePenetration, + (int)xxx.rjwSextype.Boobjob, + (int)xxx.rjwSextype.Handjob, + (int)xxx.rjwSextype.Footjob, + (int)xxx.rjwSextype.Fingering, + (int)xxx.rjwSextype.Scissoring, + (int)xxx.rjwSextype.MutualMasturbation, + (int)xxx.rjwSextype.Fisting, + (int)xxx.rjwSextype.Rimming, + (int)xxx.rjwSextype.Sixtynine + }; + + + protected Pawn pawn; + protected SexHistory selectedPawn; + protected SexPartnerHistory history; + protected CompRJW rjwcomp; + + private static GUIStyleState fontstylestate = new GUIStyleState() { textColor = Color.white }; + private static GUIStyleState boxstylestate = GUI.skin.textArea.normal; + private static GUIStyleState buttonstylestate = GUI.skin.button.normal; + private static GUIStyle fontstylecenter = new GUIStyle() { alignment = TextAnchor.MiddleCenter, normal = fontstylestate }; + private static GUIStyle fontstyleright = new GUIStyle() { alignment = TextAnchor.MiddleRight, normal = fontstylestate }; + private static GUIStyle fontstyleleft = new GUIStyle() { alignment = TextAnchor.MiddleLeft, normal = fontstylestate }; + private static GUIStyle boxstyle = new GUIStyle(GUI.skin.textArea) { hover = boxstylestate, onHover = boxstylestate, onNormal = boxstylestate }; + private static GUIStyle buttonstyle = new GUIStyle(GUI.skin.button) { hover = buttonstylestate, onHover = buttonstylestate, onNormal = buttonstylestate }; + + private static Vector2 pos; + private static Vector2 scroll; + private static bool opened; + + public SexStatusWindow(Pawn pawn, SexPartnerHistory history) + { + this.pawn = pawn; + this.history = history; + this.selectedPawn = null; + this.rjwcomp = pawn.TryGetComp(); + } + + protected override void SetInitialSizeAndPosition() + { + Vector2 initialSize = InitialSize; + if (!opened) + { + windowRect = new Rect((Verse.UI.screenWidth - initialSize.x) / 2f, ((float)Verse.UI.screenHeight - initialSize.y) / 2f, initialSize.x, initialSize.y); + opened = true; + } + else + { + windowRect = new Rect(pos, initialSize); + } + windowRect = windowRect.Rounded(); + + } + + public override Vector2 InitialSize + { + get + { + float width = 900f; + float height = 600f; + soundClose = SoundDefOf.CommsWindow_Close; + absorbInputAroundWindow = false; + forcePause = false; + preventCameraMotion = false; + draggable = true; + doCloseX = true; + return new Vector2(width, height); + } + } + + + public override void DoWindowContents(Rect inRect) + { + pos = windowRect.position; + if (!Configurations.SelectionLocked) + { + List selected = Find.Selector.SelectedPawns; + if (selected.Count == 1) + { + Pawn p = selected.First(); + if (p != pawn) + { + SexPartnerHistory h = p.GetPartnerHistory(); + if (h != null) ChangePawn(p, h); + } + } + } + + + DrawSexStatus(inRect,history); + } + + public static void ToggleWindow(Pawn pawn, SexPartnerHistory history) + { + SexStatusWindow window = (SexStatusWindow)Find.WindowStack.Windows.FirstOrDefault(x => x.GetType() == typeof(SexStatusWindow)); + if (window != null) + { + if (window.pawn != pawn) + { + SoundDefOf.TabOpen.PlayOneShotOnCamera(); + window.ChangePawn(pawn, history); + } + } + else + { + Find.WindowStack.Add(new SexStatusWindow(pawn, history)); + } + } + + public void ChangePawn(Pawn pawn, SexPartnerHistory history) + { + List selected = Find.Selector.SelectedPawns; + if (!selected.NullOrEmpty()) foreach(Pawn p in selected) + { + Find.Selector.Deselect(p); + } + this.pawn = pawn; + this.history = history; + this.selectedPawn = null; + this.rjwcomp = pawn.TryGetComp(); + if (!pawn.DestroyedOrNull() && Find.CurrentMap == pawn.Map) Find.Selector.Select(pawn); + } + + /// + /// Main contents + /// + protected void DrawSexStatus(Rect mainrect, SexPartnerHistory history) + { + float sectionwidth = mainrect.width / 3; + + Rect leftRect = new Rect(mainrect.x, mainrect.y, sectionwidth, mainrect.height); + Rect centerRect = new Rect(mainrect.x + sectionwidth, mainrect.y, sectionwidth, mainrect.height); + Rect rightRect = new Rect(mainrect.x + sectionwidth * 2, mainrect.y, sectionwidth, mainrect.height); + + if (history != null) + { + //Left section + DrawBaseSexInfoLeft(leftRect.ContractedBy(4f)); + + //Center section + DrawBaseSexInfoCenter(centerRect.ContractedBy(4f),history.parent as Pawn); + + //Right section + DrawBaseSexInfoRight(rightRect.ContractedBy(4f)); + } + + + + } + + protected void DrawInfoWithPortrait(Rect rect, SexHistory history, string tooltip = "") + { + Widgets.DrawMenuSection(rect); + string str = tooltip; + Rect portraitRect = new Rect(rect.x, rect.y, rect.height - FONTHEIGHT, rect.height - FONTHEIGHT); + Rect nameRect = new Rect(rect.x + portraitRect.width, rect.y, rect.width - portraitRect.width, FONTHEIGHT); + Rect sexinfoRect = new Rect(rect.x + portraitRect.width, rect.y + FONTHEIGHT, rect.width - portraitRect.width, FONTHEIGHT); + Rect sexinfoRect2 = new Rect(rect.x + portraitRect.width, rect.y + FONTHEIGHT * 2, rect.width - portraitRect.width, FONTHEIGHT); + Rect bestsexRect = new Rect(rect.x + 2f, rect.y + FONTHEIGHT * 3, rect.width - 4f, FONTHEIGHT - 2f); + + if (history != null) + { + if (history.Incest) str += " - " + Keyed.Incest; + Pawn partner = history.Partner; + DrawPawn(portraitRect, history); + Widgets.DrawHighlightIfMouseover(portraitRect); + if (Widgets.ButtonInvisible(portraitRect)) + { + SexPartnerHistory pawnhistory = partner?.GetPartnerHistory(); + if (pawnhistory != null) + { + ChangePawn(partner, pawnhistory); + SoundDefOf.Click.PlayOneShotOnCamera(); + } + else SoundDefOf.ClickReject.PlayOneShotOnCamera(); + } + GUI.Label(nameRect, partner?.Name?.ToStringFull ?? history.Label.CapitalizeFirst(), fontstyleleft); + GUI.Label(sexinfoRect, Keyed.RS_Sex_Count + history.TotalSexCount + " " + history.RapeInfo, fontstyleleft); + GUI.Label(sexinfoRect2, Keyed.RS_Orgasms + history.OrgasmCount, fontstyleleft); + GUI.Label(sexinfoRect2, pawn.GetRelationsString(partner) + " ", fontstyleright); + float p = history.BestSatisfaction / BASESAT; + FillableBarLabeled(bestsexRect,String.Format(Keyed.RS_Best_Sextype+": {0}", Keyed.Sextype[(int)history.BestSextype]), p / 2, HistoryUtility.SextypeColor[(int)history.BestSextype], Texture2D.blackTexture, null, String.Format("{0:P2}", p)); + + if (history.IamFirst) str += "\n" + Keyed.RS_LostVirgin(history.Label, pawn.LabelShort); + + + TooltipHandler.TipRegion(rect, str); + } + else + { + Widgets.DrawTextureFitted(portraitRect, HistoryUtility.UnknownPawn, 1.0f); + Widgets.Label(nameRect, Keyed.Unknown); + Widgets.Label(sexinfoRect, Keyed.RS_Sex_Count + "?"); + Widgets.Label(sexinfoRect2, Keyed.RS_Orgasms+"?"); + FillableBarLabeled(bestsexRect,String.Format(Keyed .RS_Best_Sextype + ": {0}", Keyed.Sextype[(int)xxx.rjwSextype.None]), 0, Texture2D.linearGrayTexture, Texture2D.blackTexture); + } + } + + protected void DrawSexInfoCard(Rect rect, SexHistory history, string label, string tooltip) + { + Rect labelRect = new Rect(rect.x, rect.y, rect.width, FONTHEIGHT); + Rect infoRect = new Rect(rect.x, rect.y + FONTHEIGHT, rect.width, rect.height - FONTHEIGHT); + GUI.Label(labelRect, label, fontstyleleft); + DrawInfoWithPortrait(infoRect,history, tooltip); + + + } + + /// + /// Right section + /// + protected void DrawBaseSexInfoRight(Rect rect) + { + Listing_Standard listmain = new Listing_Standard(); + listmain.Begin(rect.ContractedBy(4f)); + DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), history.GetRecentPartnersHistory, Keyed.RS_Recent_Sex_Partner, Keyed.RS_Recent_Sex_Partner_ToolTip); + DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), history.GetFirstPartnerHistory, Keyed.RS_First_Sex_Partner, Keyed.RS_First_Sex_Partner_ToolTip); + DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), history.GetMostPartnerHistory, Keyed.RS_Most_Sex_Partner, Keyed.RS_Most_Sex_Partner_ToolTip); + DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), history.GetBestSexPartnerHistory, Keyed.RS_Best_Sex_Partner, Keyed.RS_Best_Sex_Partner_ToolTip); + GUI.Label(listmain.GetRect(FONTHEIGHT), Keyed.RS_PreferRace, fontstyleleft); + DrawPreferRace(listmain.GetRect(66f+15f)); + listmain.GetRect(15f); + + + listmain.End(); + } + + protected void DrawPreferRace(Rect rect) + { + Widgets.DrawMenuSection(rect); + Rect portraitRect = new Rect(rect.x, rect.y, rect.height-15f, rect.height-15f); + Rect infoRect1 = new Rect(rect.x + portraitRect.width, rect.y, rect.width - portraitRect.width, FONTHEIGHT); + Rect infoRect2 = new Rect(rect.x + portraitRect.width, rect.y + FONTHEIGHT, rect.width - portraitRect.width, FONTHEIGHT); + Rect infoRect3 = new Rect(rect.x + portraitRect.width, rect.y + FONTHEIGHT*2, rect.width - portraitRect.width - 2f, FONTHEIGHT); + + if (history.PreferRace != null) + { + Widgets.DrawTextureFitted(portraitRect, history.GetPreferRaceIcon(portraitRect.size), 1.0f); + GUI.Label(infoRect1, history.PreferRace?.label.CapitalizeFirst() ?? Keyed.None, fontstyleleft); + GUI.Label(infoRect2, Keyed.RS_Sex_Count + history.PreferRaceSexCount, fontstyleleft); + if (history.PreferRace != pawn.def) + { + if (history.PreferRace.race.Animal ^ pawn.def.race.Animal) + { + GUI.Label(infoRect1, Keyed.RS_Bestiality + " ", fontstyleright); + FillableBarLabeled(infoRect3, Keyed.RS_Sex_Info(Keyed.RS_Bestiality, history.BestialityCount.ToString()), history.BestialityCount/100f, Texture2D.linearGrayTexture, Texture2D.blackTexture); + } + else + { + GUI.Label(infoRect1, Keyed.RS_Interspecies + " ", fontstyleright); + FillableBarLabeled(infoRect3, Keyed.RS_Sex_Info(Keyed.RS_Interspecies, history.InterspeciesCount.ToString()), history.InterspeciesCount / 100f, Texture2D.linearGrayTexture, Texture2D.blackTexture); + } + } + else + { + GUI.Label(infoRect1, Keyed.RS_Normal + " ", fontstyleright); + } + } + else + { + Widgets.DrawTextureFitted(portraitRect, HistoryUtility.UnknownPawn, 1.0f); + GUI.Label(infoRect1, Keyed.None, fontstyleleft); + } + } + + + /// + /// Center section + /// + protected void DrawBaseSexInfoCenter(Rect rect, Pawn pawn) + { + Rect portraitRect = new Rect(rect.x + rect.width / 4, rect.y, rect.width / 2, rect.width / 1.5f); + Rect nameRect = new Rect(portraitRect.x, portraitRect.yMax - FONTHEIGHT * 2, portraitRect.width, FONTHEIGHT * 2); + Rect infoRect = new Rect(rect.x, rect.y + portraitRect.height, rect.width, rect.height - portraitRect.height); + Rect lockRect = new Rect(portraitRect.xMax - ICONSIZE, portraitRect.y, ICONSIZE, ICONSIZE); + Rect tmp; + + if (Mouse.IsOver(portraitRect)) + { + Texture lockicon = Configurations.SelectionLocked ? HistoryUtility.Locked : HistoryUtility.Unlocked; + Widgets.DrawTextureFitted(lockRect, lockicon, 1.0f); + if (Widgets.ButtonInvisible(lockRect)) + { + SoundDefOf.Click.PlayOneShotOnCamera(); + Configurations.SelectionLocked = !Configurations.SelectionLocked; + } + } + + + GUI.Box(portraitRect, "", boxstyle); + Widgets.DrawTextureFitted(portraitRect, PortraitsCache.Get(pawn, portraitRect.size, Rot4.South, default, 1, true, true, false, false), 1.0f); + Widgets.DrawHighlightIfMouseover(portraitRect); + if (Widgets.ButtonInvisible(portraitRect)) + { + SoundDefOf.Click.PlayOneShotOnCamera(); + selectedPawn = null; + } + + GUI.Box(nameRect, "", boxstyle); + GUI.Label(nameRect.TopHalf(), pawn.Name?.ToStringFull ?? pawn.Label, fontstylecenter); + if (pawn.story != null) GUI.Label(nameRect.BottomHalf(), pawn.ageTracker.AgeBiologicalYears + ", " + pawn.story.Title, fontstylecenter); + else GUI.Label(nameRect.BottomHalf(), pawn.ageTracker.AgeBiologicalYears + ", " + pawn.def.label, fontstylecenter); + + Listing_Standard listmain = new Listing_Standard(); + listmain.Begin(infoRect); + listmain.Gap(20f); + float p; + + if (pawn.IsVirgin()) + { + tmp = listmain.GetRect(FONTHEIGHT); + GUI.color = Color.red; + GUI.Box(tmp, "", boxstyle); + GUI.color = Color.white; + GUI.Label(tmp, "Virgin", fontstylecenter); + } + else + { + p = history.TotalSexHad; + FillableBarLabeled(listmain.GetRect(FONTHEIGHT), String.Format(Keyed.RS_TotalSexHad + ": {0:0} ({1:0})", p, pawn.records.GetValue(xxx.CountOfSex)), p / 100, HistoryUtility.TotalSex, Texture2D.blackTexture, null, Keyed.RS_SAT_AVG(String.Format("{0:P2}", history.AVGSat))); + } + listmain.Gap(1f); + + + tmp = listmain.GetRect(FONTHEIGHT); + p = pawn.records.GetValue(VariousDefOf.Lust); + FillableBarLabeled(tmp, String.Format(Keyed.Lust +": {0:0.00}", p), Mathf.Clamp01(p.Normalization(-Configurations.LustLimit*3, Configurations.LustLimit*3)), HistoryUtility.Slaanesh, Texture2D.blackTexture, null, String.Format(xxx.sex_drive_stat.LabelCap.CapitalizeFirst() + ": {0:P2}", pawn.GetStatValue(xxx.sex_drive_stat))); + listmain.Gap(1f); + if (Mouse.IsOver(tmp)) + { + TooltipHandler.TipRegion(tmp, RJWUIUtility.GetStatExplanation(pawn, xxx.sex_drive_stat, pawn.GetStatValue(xxx.sex_drive_stat))); + } + + p = history.GetBestSextype(out xxx.rjwSextype sextype) / BASESAT; + FillableBarLabeled(listmain.GetRect(FONTHEIGHT),String.Format(Keyed.RS_Best_Sextype+": {0}", Keyed.Sextype[(int)sextype]), p / 2, HistoryUtility.SextypeColor[(int)sextype], Texture2D.blackTexture, null, Keyed.RS_SAT_AVG(String.Format("{0:P2}", p))); + listmain.Gap(1f); + + p = history.GetRecentSextype(out sextype) / BASESAT; + FillableBarLabeled(listmain.GetRect(FONTHEIGHT),String.Format(Keyed.RS_Recent_Sextype+": {0}", Keyed.Sextype[(int)sextype]), p / 2, HistoryUtility.SextypeColor[(int)sextype], Texture2D.blackTexture, null, String.Format("{0:P2}", p)); + listmain.Gap(1f); + + if (history.IncestuousCount < history.CorpseFuckCount) + { + p = history.CorpseFuckCount; + FillableBarLabeled(listmain.GetRect(FONTHEIGHT), String.Format(Keyed.RS_Necrophile + ": {0}", p), p / 50, HistoryUtility.Nurgle, Texture2D.blackTexture); + listmain.Gap(1f); + } + else + { + p = history.IncestuousCount; + FillableBarLabeled(listmain.GetRect(FONTHEIGHT), String.Format(Keyed.Incest + ": {0}", p), p / 50, HistoryUtility.Nurgle, Texture2D.blackTexture); + listmain.Gap(1f); + } + + p = pawn.records.GetValue(VariousDefOf.AmountofEatenCum); + FillableBarLabeled(listmain.GetRect(FONTHEIGHT), String.Format(Keyed.RS_Cum_Swallowed + ": {0:0.00} mL, {1} " + Keyed.RS_NumofTimes, p, pawn.records.GetValue(VariousDefOf.NumofEatenCum)), p / 1000, Texture2D.linearGrayTexture, Texture2D.blackTexture); + listmain.Gap(1f); + + Hediff addiction = pawn.health.hediffSet.GetFirstHediffOfDef(VariousDefOf.CumAddiction); + if (addiction != null) + { + p = addiction.Severity; + FillableBarLabeled(listmain.GetRect(FONTHEIGHT), String.Format(Keyed.RS_CumAddiction + ": {0:P2}", p), p, Texture2D.linearGrayTexture, Texture2D.blackTexture, Keyed.RS_CumAddiction_Tooltip); + listmain.Gap(1f); + } + else if ((addiction = pawn.health.hediffSet.GetFirstHediffOfDef(VariousDefOf.CumTolerance)) != null) + { + p = addiction.Severity; + FillableBarLabeled(listmain.GetRect(FONTHEIGHT), String.Format(Keyed.RS_CumAddictiveness + ": {0:P}", p), p, Texture2D.linearGrayTexture, Texture2D.blackTexture, Keyed.RS_CumAddictiveness_Tooltip); + listmain.Gap(1f); + } + else + { + listmain.GetRect(FONTHEIGHT); + listmain.Gap(1f); + } + + + //listmain.GetRect(FONTHEIGHT); + //listmain.Gap(1f); + + p = history.RapedCount; + tmp = listmain.GetRect(FONTHEIGHT); + if (p < history.BeenRapedCount) + { + p = history.BeenRapedCount; + FillableBarLabeled(tmp, String.Format(Keyed.RS_BeenRaped + ": {0}", p), p / 50, Texture2D.grayTexture, Texture2D.blackTexture, null, String.Format(xxx.vulnerability_stat.LabelCap.CapitalizeFirst() + ": {0:P2}", pawn.GetStatValue(xxx.vulnerability_stat))); + listmain.Gap(1f); + } + else + { + FillableBarLabeled(tmp, String.Format(Keyed.RS_RapedSomeone + ": {0}", p), p / 50, HistoryUtility.Khorne, Texture2D.blackTexture, null, String.Format(xxx.vulnerability_stat.LabelCap.CapitalizeFirst() + ": {0:P2}", pawn.GetStatValue(xxx.vulnerability_stat))); + listmain.Gap(1f); + } + if (Mouse.IsOver(tmp)) + { + TooltipHandler.TipRegion(tmp, RJWUIUtility.GetStatExplanation(pawn, xxx.vulnerability_stat, pawn.GetStatValue(xxx.vulnerability_stat))); + } + + + p = pawn.GetStatValue(xxx.sex_satisfaction); + tmp = listmain.GetRect(FONTHEIGHT); + FillableBarLabeled(tmp, String.Format(xxx.sex_satisfaction.LabelCap.CapitalizeFirst() + ": {0:P2}", p), p/2, HistoryUtility.Satisfaction, Texture2D.blackTexture); + listmain.Gap(1f); + if (Mouse.IsOver(tmp)) + { + TooltipHandler.TipRegion(tmp, RJWUIUtility.GetStatExplanation(pawn, xxx.sex_satisfaction, pawn.GetStatValue(xxx.sex_satisfaction))); + } + + //p = pawn.GetStatValue(xxx.vulnerability_stat); + //FillableBarLabeled(listmain.GetRect(FONTHEIGHT), String.Format(xxx.vulnerability_stat.LabelCap.CapitalizeFirst() + ": {0:P2}", p), p / 2, HistoryUtility.Khorne, Texture2D.blackTexture, xxx.vulnerability_stat.description); + //listmain.Gap(1f); + + SkillRecord skill = pawn.skills?.GetSkill(VariousDefOf.SexSkill); + p = skill?.Level ?? 0; + tmp = listmain.GetRect(FONTHEIGHT); + FillableBarLabeled(tmp, String.Format(Keyed.RS_SexSkill + ": {0}, {1:P2}", p, skill?.xpSinceLastLevel/ skill?.XpRequiredForLevelUp), p / 20, HistoryUtility.Tzeentch, Texture2D.blackTexture, null, String.Format(xxx.sex_stat.LabelCap.CapitalizeFirst() + ": {0:P2}", pawn.GetStatValue(xxx.sex_stat)), HistoryUtility.PassionBG[(int)(skill?.passion ?? 0)]); + if (Mouse.IsOver(tmp)) + { + TooltipHandler.TipRegion(tmp, RJWUIUtility.GetStatExplanation(pawn, xxx.sex_stat, pawn.GetStatValue(xxx.sex_stat))); + } + + + listmain.Gap(1f); + + if (selectedPawn != null) DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), selectedPawn, Keyed.RS_Selected_Partner, Keyed.RS_Selected_Partner); + else DrawExtraInfo(listmain.GetRect(CARDHEIGHT)); + + listmain.End(); + } + + protected void DrawExtraInfo(Rect rect) + { + Widgets.DrawMenuSection(rect); + Rect inRect = rect.ContractedBy(4f); + Listing_Standard listmain = new Listing_Standard(); + listmain.Begin(inRect); + listmain.Gap(4f); + listmain.GetRect(FONTHEIGHT).DrawSexuality(rjwcomp); + listmain.Gap(1f); + listmain.GetRect(FONTHEIGHT).DrawQuirk(pawn); + listmain.Gap(1f); + + + + listmain.End(); + + + } + + + + /// + /// Left section + /// + protected void DrawBaseSexInfoLeft(Rect rect) + { + + Listing_Standard listmain = new Listing_Standard(); + listmain.Begin(rect); + float p; + + //Sex statistics + GUI.Label(listmain.GetRect(FONTHEIGHT), " " + Keyed.RS_Statistics, fontstyleleft); + listmain.Gap(1f); + for (int i = 0; i < Sextype.Length; i++) + { + int sexindex = Sextype[i]; + p = history.GetAVGSat(sexindex) / BASESAT; + string label = Keyed.RS_Sex_Info(Keyed.Sextype[sexindex], history.GetSexCount(sexindex).ToString()); + FillableBarLabeled(listmain.GetRect(FONTHEIGHT),label, p / 2, HistoryUtility.SextypeColor[sexindex], Texture2D.blackTexture, null, Keyed.RS_SAT_AVG(String.Format("{0:P2}", p))); + listmain.Gap(1f); + } + + p = history.PartnerCount; + FillableBarLabeled(listmain.GetRect(FONTHEIGHT), String.Format(Keyed.RS_Sex_Partners + ": {0} ({1})", p, pawn.records.GetValue(VariousDefOf.SexPartnerCount)), p / 50, HistoryUtility.Partners, Texture2D.blackTexture); + listmain.Gap(1f); + + p = history.VirginsTaken; + FillableBarLabeled(listmain.GetRect(FONTHEIGHT), String.Format(Keyed.RS_VirginsTaken + ": {0:0}", p), p / 100, HistoryUtility.Partners, Texture2D.blackTexture); + listmain.Gap(1f); + + //Partner list + GUI.Label(listmain.GetRect(FONTHEIGHT)," "+Keyed.RS_PartnerList, fontstyleleft); + listmain.Gap(1f); + + Rect scrollRect = listmain.GetRect(CARDHEIGHT+1f); + GUI.Box(scrollRect,"", buttonstyle); + List partnerList = history.PartnerList; + Rect listRect = new Rect(scrollRect.x, scrollRect.y, LISTPAWNSIZE * partnerList.Count, scrollRect.height - 30f); + Widgets.BeginScrollView(scrollRect, ref scroll, listRect); + Widgets.ScrollHorizontal(scrollRect, ref scroll, listRect); + DrawPartnerList(listRect, partnerList); + Widgets.EndScrollView(); + + listmain.End(); + } + + protected void DrawPartnerList(Rect rect, List partnerList) + { + Rect pawnRect = new Rect(rect.x, rect.y, LISTPAWNSIZE, LISTPAWNSIZE); + for (int i = 0; i < partnerList.Count; i++) + { + Rect labelRect = new Rect(pawnRect.x,pawnRect.yMax - FONTHEIGHT,pawnRect.width,FONTHEIGHT); + + DrawPawn(pawnRect, partnerList[i]); + Widgets.DrawHighlightIfMouseover(pawnRect); + GUI.Label(labelRect, partnerList[i].Label, fontstylecenter); + if (Widgets.ButtonInvisible(pawnRect)) + { + selectedPawn = partnerList[i]; + SoundDefOf.Click.PlayOneShotOnCamera(); + } + if (partnerList[i] == selectedPawn) + { + Widgets.DrawHighlightSelected(pawnRect); + } + + pawnRect.x += LISTPAWNSIZE; + } + } + + protected void DrawPawn(Rect rect, SexHistory history) + { + if (history != null) + { + bool drawheart = false; + Rect iconRect = new Rect(rect.x + rect.width * 3 / 4, rect.y, rect.width / 4, rect.height / 4); + Texture img = HistoryUtility.UnknownPawn; + if (history.Partner != null) + { + img = PortraitsCache.Get(history.Partner, rect.size, Rot4.South, default, 1, true, true, false, false); + if (history.IamFirst) + { + GUI.color = HistoryUtility.HistoryColor; + Widgets.DrawTextureFitted(rect, HistoryUtility.FirstOverlay, 1.0f); + GUI.color = Color.white; + } + + drawheart = LovePartnerRelationUtility.LovePartnerRelationExists(pawn, history.Partner); + + } + + if (history.Incest) + { + Widgets.DrawTextureFitted(iconRect, HistoryUtility.Incest, 1.0f); + iconRect.x -= iconRect.width; + } + Widgets.DrawTextureFitted(rect, img, 1.0f); + if (drawheart) + { + Widgets.DrawTextureFitted(iconRect, HistoryUtility.Heart,1.0f); + iconRect.x -= iconRect.width; + } + } + } + + + + + public static void FillableBarLabeled(Rect rect, string label, float fillPercent, Texture2D filltexture, Texture2D bgtexture, string tooltip = null, string rightlabel = "", Texture2D border = null) + { + Widgets.FillableBar(rect, Math.Min(fillPercent, 1.0f), filltexture, bgtexture, true); + GUI.Label(rect, " " + label.CapitalizeFirst(), fontstyleleft); + GUI.Label(rect, rightlabel.CapitalizeFirst() + " ", fontstyleright); + Widgets.DrawHighlightIfMouseover(rect); + if (tooltip != null) TooltipHandler.TipRegion(rect, tooltip); + if (border != null) + { + rect.DrawBorder(border,2f); + } + + } + + } + + +} diff --git a/RJWSexperience/RJWSexperience/Utility.cs b/RJWSexperience/RJWSexperience/Utility.cs index 199e6f3..dc94fd5 100644 --- a/RJWSexperience/RJWSexperience/Utility.cs +++ b/RJWSexperience/RJWSexperience/Utility.cs @@ -10,26 +10,23 @@ using UnityEngine; namespace RJWSexperience { + public static class Utility { public static System.Random random = new System.Random(Environment.TickCount); - //public static readonly Dictionary sextypeRecords = new Dictionary { - // { xxx.rjwSextype.Vaginal, xxx.CountOfSex }, - // { xxx.rjwSextype.Vaginal, xxx.CountOfSex }, - // { xxx.rjwSextype.Vaginal, xxx.CountOfSex }, - // { xxx.rjwSextype.Vaginal, xxx.CountOfSex }, - // { xxx.rjwSextype.Vaginal, xxx.CountOfSex }, - // { xxx.rjwSextype.Vaginal, xxx.CountOfSex }, - // { xxx.rjwSextype.Vaginal, xxx.CountOfSex }, - // { xxx.rjwSextype.Vaginal, xxx.CountOfSex }, - // { xxx.rjwSextype.Vaginal, xxx.CountOfSex }, - // { xxx.rjwSextype.Vaginal, xxx.CountOfSex }, - // { xxx.rjwSextype.Vaginal, xxx.CountOfSex }, - // { xxx.rjwSextype.Vaginal, xxx.CountOfSex } - // - // - //}; + public static bool IsIncest(this Pawn pawn, Pawn otherpawn) + { + if (otherpawn != null) + { + IEnumerable relations = pawn.GetRelations(otherpawn); + if (!relations.EnumerableNullOrEmpty()) foreach (PawnRelationDef relation in relations) + { + if (relation.incestOpinionOffset < 0) return true; + } + } + return false; + } public static float RandGaussianLike(float min, float max, int iterations = 3) { @@ -59,6 +56,15 @@ namespace RJWSexperience return value; } + public static int RecordRandomizer(this Pawn pawn, RecordDef record, int avg, int dist, int min = 0, int max = int.MaxValue) + { + int value = (int)Mathf.Clamp(RandGaussianLike(avg - dist, avg + dist), min, max); + int recordvalue = pawn.records.GetAsInt(record); + pawn.records.AddTo(record, value - recordvalue); + + return value; + } + public static bool ContainAll(this string str, string[] tags) { string lstr = str.ToLower(); @@ -86,17 +92,17 @@ namespace RJWSexperience } - public static Building GetAdjacentBuilding(this Pawn pawn) where T : Building + public static T GetAdjacentBuilding(this Pawn pawn) where T : Building { if (pawn.Spawned) { EdificeGrid edifice = pawn.Map.edificeGrid; - if (edifice[pawn.Position] is T) return edifice[pawn.Position]; + if (edifice[pawn.Position] is T) return (T)edifice[pawn.Position]; IEnumerable adjcells = GenAdjFast.AdjacentCells8Way(pawn.Position); foreach(IntVec3 pos in adjcells) { - if (edifice[pos] is T) return edifice[pos]; + if (edifice[pos] is T) return (T)edifice[pos]; } } return null; @@ -139,18 +145,6 @@ namespace RJWSexperience return res; } - public static void CumDrugEffect(this Pawn pawn) - { - Need need = pawn.needs?.TryGetNeed(VariousDefOf.Chemical_Cum); - if (need != null) need.CurLevel += VariousDefOf.CumneedLevelOffset; - Hediff addictive = HediffMaker.MakeHediff(VariousDefOf.CumTolerance, pawn); - addictive.Severity = 0.032f; - pawn.health.AddHediff(addictive); - Hediff addiction = pawn.health.hediffSet.GetFirstHediffOfDef(VariousDefOf.CumAddiction); - if (addiction != null) addiction.Severity += VariousDefOf.CumexistingAddictionSeverityOffset; - - pawn.needs?.mood?.thoughts?.memories?.TryGainMemoryFast(VariousDefOf.AteCum); - } public static float Normalization(this float num, float min, float max) { @@ -163,5 +157,134 @@ namespace RJWSexperience return num * (max - min) + min; } + public static void ResetRecord(this Pawn pawn, bool allzero) + { + if (!allzero) + { + if (Configurations.EnableRecordRandomizer && pawn != null && xxx.is_human(pawn)) + { + int avgsex = -500; + bool isvirgin = Rand.Chance(Configurations.VirginRatio); + int totalsex = 0; + int totalbirth = 0; + int deviation = (int)Configurations.MaxSexCountDeviation; + if (pawn.story != null) + { + float lust; + if (xxx.is_nympho(pawn)) lust = pawn.RecordRandomizer(VariousDefOf.Lust, Configurations.AvgLust, Configurations.MaxLustDeviation, 0); + else lust = pawn.RecordRandomizer(VariousDefOf.Lust, Configurations.AvgLust, Configurations.MaxLustDeviation, float.MinValue); + + int sexableage = 0; + int minsexage = (int)(pawn.RaceProps.lifeExpectancy * Configurations.MinSexablePercent); + if (pawn.ageTracker.AgeBiologicalYears > minsexage) + { + sexableage = pawn.ageTracker.AgeBiologicalYears - minsexage; + avgsex = (int)(sexableage * Configurations.SexPerYear * pawn.LustFactor()); + } + + + if (pawn.relations != null && pawn.gender == Gender.Female) + { + totalbirth += pawn.relations.ChildrenCount; + totalsex += totalbirth; + pawn.records?.AddTo(xxx.CountOfSexWithHumanlikes, totalbirth); + pawn.records?.SetTo(xxx.CountOfBirthHuman, totalbirth); + if (totalbirth > 0) isvirgin = false; + } + if (!isvirgin) + { + if (xxx.is_rapist(pawn)) + { + if (xxx.is_zoophile(pawn)) + { + if (pawn.Has(Quirk.ChitinLover)) totalsex += pawn.RecordRandomizer(xxx.CountOfRapedInsects, avgsex, deviation); + else totalsex += pawn.RecordRandomizer(xxx.CountOfRapedAnimals, avgsex, deviation); + } + else totalsex += pawn.RecordRandomizer(xxx.CountOfRapedHumanlikes, avgsex, deviation); + avgsex /= 8; + } + + if (xxx.is_zoophile(pawn)) + { + if (pawn.Has(Quirk.ChitinLover)) totalsex += pawn.RecordRandomizer(xxx.CountOfRapedInsects, avgsex, deviation); + else totalsex += pawn.RecordRandomizer(xxx.CountOfSexWithAnimals, avgsex, deviation); + avgsex /= 10; + } + else if (xxx.is_necrophiliac(pawn)) + { + totalsex += pawn.RecordRandomizer(xxx.CountOfSexWithCorpse, avgsex, deviation); + avgsex /= 4; + } + + if (pawn.IsSlave) + { + totalsex += pawn.RecordRandomizer(xxx.CountOfBeenRapedByAnimals, Rand.Range(-50, 10), Rand.Range(0, 10) * sexableage); + totalsex += pawn.RecordRandomizer(xxx.CountOfBeenRapedByHumanlikes, 0, Rand.Range(0, 100) * sexableage); + } + + + totalsex += pawn.RecordRandomizer(xxx.CountOfSexWithHumanlikes, avgsex, deviation); + + if (totalsex > 0) pawn.records.AddTo(VariousDefOf.SexPartnerCount, Math.Max(1, Rand.Range(0, totalsex / 7))); + } + } + pawn.records?.SetTo(xxx.CountOfSex, totalsex); + RJWUtility.GenerateSextypeRecords(pawn, totalsex); + } + if (pawn.story?.traits != null) + { + if (pawn.IsVirgin()) + { + int degree = 0; + if (pawn.gender == Gender.Female) degree = 2; + Trait virgin = new Trait(VariousDefOf.Virgin, degree, true); + pawn.story.traits.GainTrait(virgin); + } + else if (pawn.gender == Gender.Female && Rand.Chance(0.05f)) + { + Trait virgin = new Trait(VariousDefOf.Virgin, 1, true); + pawn.story.traits.GainTrait(virgin); + } + } + } + else + { + pawn.records.SetTo(VariousDefOf.Lust, 0); + pawn.records.SetTo(VariousDefOf.NumofEatenCum, 0); + pawn.records.SetTo(VariousDefOf.AmountofEatenCum, 0); + pawn.records.SetTo(VariousDefOf.VaginalSexCount, 0); + pawn.records.SetTo(VariousDefOf.AnalSexCount, 0); + pawn.records.SetTo(VariousDefOf.OralSexCount, 0); + pawn.records.SetTo(VariousDefOf.BlowjobCount, 0); + pawn.records.SetTo(VariousDefOf.CunnilingusCount, 0); + pawn.records.SetTo(VariousDefOf.GenitalCaressCount, 0); + pawn.records.SetTo(VariousDefOf.HandjobCount, 0); + pawn.records.SetTo(VariousDefOf.FingeringCount, 0); + pawn.records.SetTo(VariousDefOf.FootjobCount, 0); + pawn.records.SetTo(VariousDefOf.MiscSexualBehaviorCount, 0); + pawn.records.SetTo(VariousDefOf.SexPartnerCount, 0); + pawn.records.SetTo(VariousDefOf.OrgasmCount, 0); + pawn.records.SetTo(xxx.CountOfBeenRapedByAnimals, 0); + pawn.records.SetTo(xxx.CountOfBeenRapedByHumanlikes, 0); + pawn.records.SetTo(xxx.CountOfBeenRapedByInsects, 0); + pawn.records.SetTo(xxx.CountOfBeenRapedByOthers, 0); + pawn.records.SetTo(xxx.CountOfBirthAnimal, 0); + pawn.records.SetTo(xxx.CountOfBirthEgg, 0); + pawn.records.SetTo(xxx.CountOfBirthHuman, 0); + pawn.records.SetTo(xxx.CountOfFappin, 0); + pawn.records.SetTo(xxx.CountOfRapedAnimals, 0); + pawn.records.SetTo(xxx.CountOfRapedHumanlikes, 0); + pawn.records.SetTo(xxx.CountOfRapedInsects, 0); + pawn.records.SetTo(xxx.CountOfRapedOthers, 0); + pawn.records.SetTo(xxx.CountOfSex, 0); + pawn.records.SetTo(xxx.CountOfSexWithAnimals, 0); + pawn.records.SetTo(xxx.CountOfSexWithCorpse, 0); + pawn.records.SetTo(xxx.CountOfSexWithHumanlikes, 0); + pawn.records.SetTo(xxx.CountOfSexWithInsects, 0); + pawn.records.SetTo(xxx.CountOfSexWithOthers, 0); + pawn.records.SetTo(xxx.CountOfWhore, 0); + } + } + } } diff --git a/RJWSexperience/RJWSexperience/VariousDefOf.cs b/RJWSexperience/RJWSexperience/VariousDefOf.cs index 2210db1..48730bc 100644 --- a/RJWSexperience/RJWSexperience/VariousDefOf.cs +++ b/RJWSexperience/RJWSexperience/VariousDefOf.cs @@ -11,6 +11,7 @@ namespace RJWSexperience public static class VariousDefOf { public static readonly RecordDef NumofEatenCum = DefDatabase.GetNamed("NumofEatenCum"); + public static readonly RecordDef AmountofEatenCum = DefDatabase.GetNamed("AmountofEatenCum"); public static readonly RecordDef Lust = DefDatabase.GetNamed("Lust"); public static readonly RecordDef VaginalSexCount = DefDatabase.GetNamed("VaginalSexCount"); public static readonly RecordDef AnalSexCount = DefDatabase.GetNamed("AnalSexCount"); @@ -18,20 +19,27 @@ namespace RJWSexperience public static readonly RecordDef BlowjobCount = DefDatabase.GetNamed("BlowjobCount"); public static readonly RecordDef CunnilingusCount = DefDatabase.GetNamed("CunnilingusCount"); public static readonly RecordDef GenitalCaressCount = DefDatabase.GetNamed("GenitalCaressCount"); - public static readonly RecordDef HadnjobCount = DefDatabase.GetNamed("HadnjobCount"); + public static readonly RecordDef HandjobCount = DefDatabase.GetNamed("HandjobCount"); public static readonly RecordDef FingeringCount = DefDatabase.GetNamed("FingeringCount"); public static readonly RecordDef FootjobCount = DefDatabase.GetNamed("FootjobCount"); public static readonly RecordDef MiscSexualBehaviorCount = DefDatabase.GetNamed("MiscSexualBehaviorCount"); public static readonly RecordDef SexPartnerCount = DefDatabase.GetNamed("SexPartnerCount"); + public static readonly RecordDef OrgasmCount = DefDatabase.GetNamed("OrgasmCount"); public static readonly SkillDef SexSkill = DefDatabase.GetNamed("Sex"); public static readonly ThoughtDef_Recordbased AteCum = DefDatabase.GetNamed("AteCum"); public static readonly PawnRelationDef Bastard = DefDatabase.GetNamed("Bastard"); public static readonly ThingDef GatheredCum = DefDatabase.GetNamed("GatheredCum"); + public static readonly ThingDef FilthCum = ThingDef.Named("FilthCum"); + public static readonly ThingDef FilthGirlcum = ThingDef.Named("FilthGirlCum"); public static readonly HediffDef CumAddiction = DefDatabase.GetNamed("CumAddiction"); public static readonly HediffDef CumTolerance = DefDatabase.GetNamed("CumTolerance"); public static readonly ChemicalDef Cum = DefDatabase.GetNamed("Cum"); public static readonly NeedDef Chemical_Cum = DefDatabase.GetNamed("Chemical_Cum"); public static readonly TraitDef Virgin = DefDatabase.GetNamed("Virgin"); + public static readonly JobDef CleanSelfwithBucket = DefDatabase.GetNamed("CleanSelfwithBucket"); + public static readonly PawnRelationDef relation_birthgiver = DefDatabase.GetNamed("RJW_Sire"); + public static readonly PawnRelationDef relation_spawn = DefDatabase.GetNamed("RJW_Pup"); + public static readonly KeyBindingDef OpenSexStatistics = DefDatabase.GetNamed("OpenSexStatistics"); public static float CumneedLevelOffset { diff --git a/RJWSexperience_Ideology/Assemblies/RJWSexperience.Ideology.dll b/RJWSexperience_Ideology/Assemblies/RJWSexperience.Ideology.dll index 05346b855a2546b525880a2267a5c592532f245d..34aea9e962140c6192bcafdd851386c4b1164da0 100644 GIT binary patch literal 46592 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 literal 39936 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 st!N?Nsr16j_%^p19-iB)rq77djJ3c diff --git a/RJWSexperience_Ideology/Defs/DutyDefs/Duties_Rituals_sex.xml b/RJWSexperience_Ideology/Defs/DutyDefs/Duties_Rituals_sex.xml index b831aff..87b4ade 100644 --- a/RJWSexperience_Ideology/Defs/DutyDefs/Duties_Rituals_sex.xml +++ b/RJWSexperience_Ideology/Defs/DutyDefs/Duties_Rituals_sex.xml @@ -2,7 +2,7 @@ - Gangbang + Gangbang_Rape HighPriority Off @@ -25,6 +25,31 @@ + + + Gangbang_Consensual + HighPriority + Off + + +
  • + +
  • + 0.25 + +
  • + +
  • +
    + + +
  • + Jog + 50~250 +
  • + +
    +
    FuckVictim diff --git a/RJWSexperience_Ideology/Defs/JobDefs/Jobs_Ritual_Sex.xml b/RJWSexperience_Ideology/Defs/JobDefs/Jobs_Ritual_Sex.xml index 3098074..3f3151b 100644 --- a/RJWSexperience_Ideology/Defs/JobDefs/Jobs_Ritual_Sex.xml +++ b/RJWSexperience_Ideology/Defs/JobDefs/Jobs_Ritual_Sex.xml @@ -28,4 +28,20 @@ masturbatin'. false
    + + + Gangbang + RJWSexperience.Ideology.JobDriver_Gangbang + lovin'. + false + + + + GettinGangbang + RJWSexperience.Ideology.JobDriver_GangbangReceiver + gettin' gangbanged. + Never + false + +
    \ No newline at end of file diff --git a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Ritual_sex.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Ritual_sex.xml index f7280cb..002d760 100644 --- a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Ritual_sex.xml +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Ritual_sex.xml @@ -25,8 +25,30 @@
  • Rapist
  • - + + GangbangCeremony_Consensual + + A ritualistic gangbang where a organizer being fucked. The audience will fuck the organizer. + Ritual + Medium + UI/Issues/Gangbang_Consensual + Precept_Ritual + Gangbang_Consensual + true + false + 1.0 + 100 + false + true + false + true + +
  • Lewd
  • +
    +
    + + AnimalGangbangCeremony A ritualistic gangbang where animals rape a victim. @@ -43,12 +65,36 @@ true false true + +
  • Rapist
  • +
  • Zoophile
  • +
    +
    + + + AnimalGangbangCeremony_Consensual + + A ritualistic gangbang where animals fuck the organizer. + Ritual + Medium + UI/Commands/Breeding_Pawn_on + Precept_Ritual + GangbangByAnimal_Consensual + true + false + 1.0 + 100 + false + true + false + true
  • Zoophile
  • + DrugOrgyCeremony diff --git a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Sex.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Sex.xml index 9d2a904..cbe18a9 100644 --- a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Sex.xml +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Sex.xml @@ -58,8 +58,6 @@
  • AnalSex Sex_Promiscuous - Lust - 2.0
  • AnalSex @@ -68,8 +66,6 @@
  • OralSex Sex_Promiscuous - Lust - 2.0
  • OralSex @@ -78,8 +74,6 @@
  • MiscSex Sex_Promiscuous - Lust - 2.0
  • MiscSex @@ -88,8 +82,6 @@
  • PromiscuousSex Sex_Promiscuous - Lust - 3.0
  • PromiscuousSex @@ -111,8 +103,6 @@
  • VaginalSex Sex_Promiscuous - Lust - 2.0
  • VaginalSex @@ -121,8 +111,6 @@
  • OralSex Sex_Promiscuous - Lust - 2.0
  • OralSex @@ -131,8 +119,6 @@
  • MiscSex Sex_Promiscuous - Lust - 2.0
  • MiscSex @@ -141,8 +127,6 @@
  • PromiscuousSex Sex_Promiscuous - Lust - 3.0
  • PromiscuousSex @@ -164,8 +148,6 @@
  • VaginalSex Sex_Promiscuous - Lust - 2.0
  • VaginalSex @@ -174,8 +156,6 @@
  • AnalSex Sex_Promiscuous - Lust - 2.0
  • AnalSex @@ -184,8 +164,6 @@
  • MiscSex Sex_Promiscuous - Lust - 2.0
  • MiscSex @@ -194,8 +172,6 @@
  • PromiscuousSex Sex_Promiscuous - Lust - 3.0
  • PromiscuousSex diff --git a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Virginity.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Virginity.xml new file mode 100644 index 0000000..a171b25 --- /dev/null +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Virginity.xml @@ -0,0 +1,342 @@ + + + + + Virginity_Female + + UI/Issues/Female + + + + Virginity_Male + + UI/Issues/Male + + + + Virgin_TakenF + + + + + Virgin_TakenM + + + + + Virgin_TookF + + + + + Virgin_TookM + + + + + + + Virgin_UselessF + Virginity_Female + + Female's virginity is useless. + Medium + 50 + 1000 + 10 + + + + Virgin_UselessM + Virginity_Male + + Male's virginity is useless. + Low + 50 + 1000 + 80 + + + + Virgin_PreciousF + Virginity_Female + + Female's virginity is precious. + Medium + 40 + 1000 + 80 + +
  • + Virgin_TakenF + Virgin_Precious_Taken_Forcefully + BeenRaped +
  • +
  • + Virgin_TakenF + Virgin_Precious_Taken + BeenRaped + true +
  • +
  • + Virgin_TookF + TookVirginity +
  • + +
    + + + Virgin_PreciousM + Virginity_Male + + Male's virginity is precious. + Medium + 40 + 1000 + 1 + +
  • + Virgin_TakenM + Virgin_Precious_Taken_Forcefully + BeenRaped +
  • +
  • + Virgin_TakenM + Virgin_Precious_Taken + BeenRaped + true +
  • +
  • + Virgin_TookM + TookVirginity +
  • +
    +
    + + + Virgin_OnlyForSpouseF + Virginity_Female + + Losing virginity before marriage is evil. + Medium + 40 + 1000 + 80 + +
  • MaleSupremacy
  • +
    + +
  • FemaleSupremacy
  • +
    + +
  • MaleSupremacy
  • +
    + +
  • + Virgin_TakenF + Virgin_Precious_Taken_Forcefully + BeenRaped +
  • +
  • + Virgin_TakenF + Virgin_Precious_Taken + BeenRaped + true +
  • +
  • + Virgin_TakenF + Virgin_OnlyForSpouse_Know_Taken + Female, NotSpouse +
  • +
  • + Virgin_TookF + TookVirginity +
  • +
    +
    + + + Virgin_OnlyForSpouseM + Virginity_Male + + Losing virginity before marriage is evil. + Medium + 40 + 1000 + 20 + +
  • FemaleSupremacy
  • +
    + +
  • MaleSupremacy
  • +
    + +
  • FemaleSupremacy
  • +
    + +
  • + Virgin_TakenM + Virgin_Precious_Taken_Forcefully + BeenRaped +
  • +
  • + Virgin_TakenM + Virgin_Precious_Taken + BeenRaped + true +
  • +
  • + Virgin_TakenM + Virgin_OnlyForSpouse_Know_Taken + Male, NotSpouse +
  • +
  • + Virgin_TookM + TookVirginity +
  • +
    +
    + + + Virgin_ShamefulF + Virginity_Female + + Remaining as virgin is shameful thing and being laughed at. + Medium + 30 + 1000 + 1 + +
  • FemaleSupremacy
  • +
    + +
  • + Virgin_TakenF + Virgin_Shameful_Taken + BeenRaped + true +
  • +
    +
    + + + Virgin_ShamefulM + Virginity_Male + + Remaining as virgin is shameful thing and being laughed at. + Medium + 30 + 1000 + 40 + +
  • MaleSupremacy
  • +
    + +
  • + Virgin_TakenM + Virgin_Shameful_Taken + BeenRaped + true +
  • +
    +
    + + + + + Virgin_Precious_Taken_Forcefully + Thought_MemorySocial + 30 + 1 + +
  • + + I lost my virginity forcefully. + -10 + -200 +
  • +
    +
    + + + Virgin_Precious_Taken + RJWSexperience.Thought_Opinionbased + 7 + 1 + +
  • -100
  • +
  • -50
  • +
  • 0
  • +
  • 75
  • +
    + +
  • + + I am no longer virgin. + -5 +
  • +
  • + + I am no longer virgin. + -3 +
  • +
  • + + I am no longer virgin. + -1 +
  • +
  • + + I Gave my virginity to my love. + 5 +
  • +
    +
    + + + Virgin_Shameful_Taken + RJWSexperience.Thought_Opinionbased + 7 + 1 + +
  • -100
  • +
  • 0
  • +
  • 75
  • +
    + +
  • + + Finally! + 5 +
  • +
  • + + Finally! + 10 +
  • +
  • + + Finally! + 20 +
  • +
    +
    + + + + Virgin_OnlyForSpouse_Know_Taken + Thought_MemorySocial + 30 + 100 + 3 + +
  • Nymphomaniac
  • +
    + +
  • + + -30 +
  • +
    +
    + \ No newline at end of file diff --git a/RJWSexperience_Ideology/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml index 60e28d5..cd63d8c 100644 --- a/RJWSexperience_Ideology/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml @@ -21,6 +21,17 @@ + + Gangbang_Consensual + Gangbang_Consensual + gangbang + A ritualistic gangbang. The organizer will give a speech to excite the crowd, then fucked by the crowd. + UI/Issues/Gangbang_Consensual + false + Gangbang_Consensual + + + GangbangByAnimal GangbangByAnimal @@ -32,6 +43,17 @@ + + GangbangByAnimal_Consensual + GangbangByAnimal_Consensual + gangbang by animal + A ritualistic animal gangbang. The organizer will give a speech to excite the crowd, then animals begin fuck the organizer. + UI/Commands/Breeding_Pawn_on + false + BestialGangbang_Consensual + + + DrugOrgy drug orgy diff --git a/RJWSexperience_Ideology/Defs/Rituals/Ritual_Behaviors_sex.xml b/RJWSexperience_Ideology/Defs/Rituals/Ritual_Behaviors_sex.xml index 12accc6..aff19a9 100644 --- a/RJWSexperience_Ideology/Defs/Rituals/Ritual_Behaviors_sex.xml +++ b/RJWSexperience_Ideology/Defs/Rituals/Ritual_Behaviors_sex.xml @@ -2,7 +2,9 @@ -
  • + +
  • + 7500
  • @@ -84,7 +86,7 @@
  • - Gangbang + Gangbang_Rape True
  • @@ -102,7 +104,7 @@
  • - Gangbang + Gangbang_Rape
  • 0.1 @@ -122,6 +124,85 @@ + + Gangbang_Consensual + RJWSexperience.Ideology.RitualBehaviorWorker_Gangbang_Consensual + +
  • + Spectate + +
  • + +
  • initiator
  • + + + + +
  • + initiator + ArriveToCell +
  • +
    + +
  • + Spectate + +
  • + 0.1 +
  • + + +
  • + initiator + SpeakOnCellFacingSpectators + Speech_Gangbang + +
  • + 5 +
  • +
  • + +
  • +
    + +
  • + Gangbang_Consensual + True + +
  • + 1.0 +
  • + + +
  • + initiator + LayDownAwake + +
  • + +
  • +
    + +
  • + Spectate + +
  • + 0.1 +
  • + + +
  • + initiator + SpeakOnCellFacingSpectators + Speech_Gangbang + +
  • + +
  • +
    + + +
    @@ -228,7 +309,7 @@
  • animal - Gangbang + Gangbang_Rape
  • @@ -263,7 +344,106 @@
  • + + + GangbangByAnimal_Consensual + RJWSexperience.Ideology.RitualBehaviorWorker_Gangbang_Consensual + +
  • + + animal + 30 + false + a breedable animal + false +
  • +
    + +
  • + Spectate + +
  • + +
  • initiator
  • + + + + +
  • + initiator + ArriveToCell +
  • +
    + +
  • + Spectate + +
  • + 0.1 +
  • + + +
  • + initiator + SpeakOnCellFacingSpectators + Speech_Zoophile + +
  • + 5 +
  • +
  • + +
  • +
  • + animal + Spectate +
  • +
    + +
  • + Spectate + True + +
  • + 0.9 +
  • + + +
  • + animal + Gangbang_Consensual + +
  • + +
  • +
  • + initiator + LayDownAwake +
  • +
    + +
  • + Spectate + +
  • + 0.1 +
  • + + +
  • + initiator + SpeakOnCellFacingSpectators + Speech_Zoophile + +
  • + +
  • +
    + +
    +
    + DrugOrgy 7500 diff --git a/RJWSexperience_Ideology/Defs/Rituals/Ritual_Outcomes_sex.xml b/RJWSexperience_Ideology/Defs/Rituals/Ritual_Outcomes_sex.xml index c3f5664..a6c9646 100644 --- a/RJWSexperience_Ideology/Defs/Rituals/Ritual_Outcomes_sex.xml +++ b/RJWSexperience_Ideology/Defs/Rituals/Ritual_Outcomes_sex.xml @@ -32,31 +32,114 @@
  • - 0.2 + 0.15 FeelingBroken 0.3 victim
  • - 0.2 + 0.15 FeelingBroken 0.5 victim
  • - 0.4 + 0.3 FeelingBroken 0.9 victim
  • - 0.2 + 0.4 Sex 0.7
  • +
  • + + 0.4 + Sex + 0.9 +
  • + + +
  • + + 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.10 + 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.25 + 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 +
  • +
    + + + + Gangbang_Consensual + 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.
  • +
    + +
  • + initiator + + 0.10 +
  • +
  • + + + +
  • (1, -0.20)
  • +
  • (3, -0.05)
  • +
  • (5, 0.05)
  • +
  • (10, 0.10)
  • + + + +
  • + true + + 0.2 + an altar +
  • +
  • + + 0.4 + Sex + 0.7 +
  • +
  • + + 1.0 + Sex + 0.8 +
  • @@ -92,7 +175,6 @@ - BestialGangbang Depending on ritual quality, participants will get between {MINMOOD} and {MAXMOOD} mood for {MOODDAYS} days. @@ -125,21 +207,21 @@
  • - 0.3 + 0.45 FeelingBroken 0.3 victim
  • - 0.3 + 0.45 FeelingBroken 0.5 victim
  • - 0.6 + 0.8 FeelingBroken 0.9 victim @@ -179,6 +261,70 @@ + + BestialGangbang_Consensual + 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.
  • + + +
  • + initiator + + 0.10 +
  • +
  • + + + +
  • (1, 0.20)
  • +
  • (3, 0.40)
  • +
  • (5, 0.65)
  • +
  • (10, 1.20)
  • + + + +
  • + true + + 0.2 + an altar +
  • +
    + +
  • + + 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.10 + BoringGangbang + The {0} was boring. The speech was repetitive and the victim was noticeably flawed. It just didn't feel dignified. + -1 +
  • +
  • + + 0.65 + 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 +
  • +
    +
    DrugOrgy diff --git a/RJWSexperience_Ideology/Textures/UI/Issues/Female.png b/RJWSexperience_Ideology/Textures/UI/Issues/Female.png new file mode 100644 index 0000000000000000000000000000000000000000..d2bece2c79efb9ef4fd5518c50c61dde525c8bfb GIT binary patch literal 5681 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 M5{lwAqQ-&$111ND2mk;8 literal 0 HcmV?d00001 diff --git a/RJWSexperience_Ideology/Textures/UI/Issues/Gender.png b/RJWSexperience_Ideology/Textures/UI/Issues/Gender.png new file mode 100644 index 0000000000000000000000000000000000000000..9b73621b13c6d58575a4c351d0750b5810fd17da GIT binary patch literal 6209 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 literal 0 HcmV?d00001 diff --git a/Textures/UI/Icon/FirstBG.png b/Textures/UI/Icon/FirstBG.png new file mode 100644 index 0000000000000000000000000000000000000000..c8bc00700cdbe53e41a7b1332563309727e022c1 GIT binary patch literal 5282 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 literal 0 HcmV?d00001 diff --git a/Textures/UI/Icon/Incest.png b/Textures/UI/Icon/Incest.png new file mode 100644 index 0000000000000000000000000000000000000000..ff01ab0bd134417b2ae23c39caaec41617e8ca83 GIT binary patch literal 3461 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 literal 0 HcmV?d00001 diff --git a/Textures/UI/Icon/RSLocked.png b/Textures/UI/Icon/RSLocked.png new file mode 100644 index 0000000000000000000000000000000000000000..0dc275434d9bd21446945a8c212cff85835431a9 GIT binary patch literal 2996 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 literal 0 HcmV?d00001 diff --git a/Textures/UI/Icon/UnknownPawn.png b/Textures/UI/Icon/UnknownPawn.png new file mode 100644 index 0000000000000000000000000000000000000000..90c72254604ece21280b0f8dbd468222d508da97 GIT binary patch literal 3842 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 Eg33G<%>V!Z literal 0 HcmV?d00001 diff --git a/changelogs.txt b/changelogs.txt index 119a9c9..6e3286c 100644 --- a/changelogs.txt +++ b/changelogs.txt @@ -1,7 +1,22 @@ Version Beta 1.0.2.0 +This update will mess your pawn's record. Use debug tools. + - requires RimWorld 1.3.3117 or later + - requires RJW 4.8.1 or later + - submissive gender can be designated as comfort - added virgin - - added sex history - - + - added virgin precept + - added hymenoplasty(hymen restoration surgery) + - added sex history(not applied retroactively) + - you can change hotkey in keyboard configuration(default: none) + - can collect cum on body + - cum can spill out from cum buckets if over the stack count + - fixed disabling sex record generation was not worked + - removed lust adjustment from precepts that causing massive lust increment + - changed gangbang condition + - now pawns will go to the nearest cum bucket when cleaning self or masturbating + - added consensual ganbang rituals(requires lewd meme) + - non-consensual animal gangbang requires both rapist and zoophile memes + - adjusted gangbang outcome values Version Beta 1.0.1.11b - fixed erros on masturbations