diff --git a/RJWSexperience/IdeologyAddon/Ideology/IssueDefOf.cs b/RJWSexperience/IdeologyAddon/Ideology/IssueDefOf.cs new file mode 100644 index 0000000..26ec063 --- /dev/null +++ b/RJWSexperience/IdeologyAddon/Ideology/IssueDefOf.cs @@ -0,0 +1,10 @@ +using RimWorld; + +namespace RJWSexperience.Ideology.Ideology +{ + [DefOf] + public static class IssueDefOf + { + [MayRequireIdeology] public static readonly IssueDef Sextype; + } +} diff --git a/RJWSexperience/IdeologyAddon/Ideology/IssueUtility.cs b/RJWSexperience/IdeologyAddon/Ideology/IssueUtility.cs new file mode 100644 index 0000000..ffa3955 --- /dev/null +++ b/RJWSexperience/IdeologyAddon/Ideology/IssueUtility.cs @@ -0,0 +1,33 @@ +using RimWorld; +using System.Collections.Generic; +using Verse; + +namespace RJWSexperience.Ideology +{ + public static class IssueUtility + { + private static readonly Dictionary> issuePrecepts = new Dictionary>(); + + public static List GetAllPrecepts(this IssueDef issue) + { + if (issuePrecepts.TryGetValue(issue, out List precepts)) + return precepts; + + precepts = DefDatabase.AllDefsListForReading.FindAll(x => x.issue == issue); + issuePrecepts.Add(issue, precepts); + return precepts; + } + + public static Precept GetPreceptOfIssue(this Ideo ideo, IssueDef issue) + { + foreach (PreceptDef preceptDef in issue.GetAllPrecepts()) + { + Precept precept = ideo.GetPrecept(preceptDef); + if (precept != null) + return precept; + } + + return null; + } + } +} diff --git a/RJWSexperience/IdeologyAddon/Ideology/PreceptDefExtension_PreferSextype.cs b/RJWSexperience/IdeologyAddon/Ideology/PreceptDefExtension_PreferSextype.cs new file mode 100644 index 0000000..89a94e6 --- /dev/null +++ b/RJWSexperience/IdeologyAddon/Ideology/PreceptDefExtension_PreferSextype.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using Verse; + +namespace RJWSexperience.Ideology +{ + public class PreceptDefExtension_PreferSextype : DefModExtension + { + [SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")] + public HashSet sextypes = new HashSet(); + } +} diff --git a/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs b/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs index 3e77b30..ea46896 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs @@ -279,31 +279,16 @@ namespace RJWSexperience.Ideology if (!context.Inputs.IsRape && ideo != null) PreceptSextype(ideo, context.Inputs.Partner.GetStatValue(xxx.sex_drive_stat), ref __result, interaction); } - private static readonly Dictionary PreceptBySextype = new Dictionary - { - { "Vaginal", VariousDefOf.Sex_VaginalOnly }, - { "Anal", VariousDefOf.Sex_AnalOnly }, - { "Rimming", VariousDefOf.Sex_AnalOnly }, - { "Cunnilingus", VariousDefOf.Sex_OralOnly }, - { "Fellatio", VariousDefOf.Sex_OralOnly }, - { "Beakjob", VariousDefOf.Sex_OralOnly }, - { "DoublePenetration", VariousDefOf.Sex_Promiscuous }, - { "Scissoring", VariousDefOf.Sex_Promiscuous }, - { "Sixtynine", VariousDefOf.Sex_Promiscuous }, - { "Fisting", VariousDefOf.Sex_Promiscuous } - }; - public static void PreceptSextype(Ideo ideo, float sexdrive, ref float result, InteractionWithExtension interaction) { - if (!PreceptBySextype.TryGetValue(interaction.Extension.rjwSextype, out PreceptDef preceptDef)) + Precept sextypePrecept = ideo.GetPreceptOfIssue(Ideology.IssueDefOf.Sextype); + bool boostSextype = sextypePrecept.def.GetModExtension().sextypes.Contains(interaction.Extension.rjwSextype); + + if (!boostSextype) return; float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, sexdrive)); - - if (ideo.HasPrecept(preceptDef)) - { - result *= mult; - } + result *= mult; } } diff --git a/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj b/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj index cae5470..203e5b5 100644 --- a/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj +++ b/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj @@ -45,7 +45,10 @@ + + + @@ -60,7 +63,7 @@ - + diff --git a/RJWSexperience/IdeologyAddon/VariousDefOf.cs b/RJWSexperience/IdeologyAddon/VariousDefOf.cs index a8b11d5..a708ef1 100644 --- a/RJWSexperience/IdeologyAddon/VariousDefOf.cs +++ b/RJWSexperience/IdeologyAddon/VariousDefOf.cs @@ -1,76 +1,64 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using RimWorld; using Verse; -using RimWorld; 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"); - - [MayRequireIdeology] public static readonly MemeDef Zoophile = DefDatabase.GetNamed("Zoophile"); - [MayRequireIdeology] public static readonly MemeDef Rapist = DefDatabase.GetNamed("Rapist"); - [MayRequireIdeology] public static readonly MemeDef Lewd = DefDatabase.GetNamed("Lewd"); - [MayRequireIdeology] public static readonly MemeDef Necrophile = DefDatabase.GetNamed("Necrophile"); - [MayRequireIdeology] public static readonly HistoryEventDef SexWithAnimal = DefDatabase.GetNamed("SexWithAnimal"); - [MayRequireIdeology] public static readonly HistoryEventDef SexWithVeneratedAnimal = DefDatabase.GetNamed("SexWithVeneratedAnimal"); - [MayRequireIdeology] public static readonly HistoryEventDef Raped = DefDatabase.GetNamed("Raped"); - [MayRequireIdeology] public static readonly HistoryEventDef RapedSlave = DefDatabase.GetNamed("RapedSlave"); - [MayRequireIdeology] public static readonly HistoryEventDef RapedPrisoner = DefDatabase.GetNamed("RapedPrisoner"); - [MayRequireIdeology] public static readonly HistoryEventDef WasRaped = DefDatabase.GetNamed("WasRaped"); - [MayRequireIdeology] public static readonly HistoryEventDef WasRapedSlave = DefDatabase.GetNamed("WasRapedSlave"); - [MayRequireIdeology] public static readonly HistoryEventDef WasRapedPrisoner = DefDatabase.GetNamed("WasRapedPrisoner"); - [MayRequireIdeology] public static readonly HistoryEventDef VaginalSex = DefDatabase.GetNamed("VaginalSex"); - [MayRequireIdeology] public static readonly HistoryEventDef AnalSex = DefDatabase.GetNamed("AnalSex"); - [MayRequireIdeology] public static readonly HistoryEventDef OralSex = DefDatabase.GetNamed("OralSex"); - [MayRequireIdeology] public static readonly HistoryEventDef MiscSex = DefDatabase.GetNamed("MiscSex"); - [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"); - [MayRequireIdeology] public static readonly PreceptDef Bestiality_Acceptable = DefDatabase.GetNamed("Bestiality_Acceptable"); - [MayRequireIdeology] public static readonly PreceptDef Bestiality_OnlyVenerated = DefDatabase.GetNamed("Bestiality_OnlyVenerated"); - [MayRequireIdeology] public static readonly PreceptDef Bestiality_Honorable = DefDatabase.GetNamed("Bestiality_Honorable"); - [MayRequireIdeology] public static readonly PreceptDef Rape_Abhorrent = DefDatabase.GetNamed("Rape_Abhorrent"); - [MayRequireIdeology] public static readonly PreceptDef Rape_Horrible = DefDatabase.GetNamed("Rape_Horrible"); - [MayRequireIdeology] public static readonly PreceptDef Rape_Disapproved = DefDatabase.GetNamed("Rape_Disapproved"); - [MayRequireIdeology] public static readonly PreceptDef Rape_Acceptable = DefDatabase.GetNamed("Rape_Acceptable"); - [MayRequireIdeology] public static readonly PreceptDef Rape_Honorable = DefDatabase.GetNamed("Rape_Honorable"); - [MayRequireIdeology] public static readonly PreceptDef Sex_Free = DefDatabase.GetNamed("Sex_Free"); - [MayRequireIdeology] public static readonly PreceptDef Sex_VaginalOnly = DefDatabase.GetNamed("Sex_VaginalOnly"); - [MayRequireIdeology] public static readonly PreceptDef Sex_AnalOnly = DefDatabase.GetNamed("Sex_AnalOnly"); - [MayRequireIdeology] public static readonly PreceptDef Sex_OralOnly = DefDatabase.GetNamed("Sex_OralOnly"); - [MayRequireIdeology] public static readonly PreceptDef Sex_Promiscuous = DefDatabase.GetNamed("Sex_Promiscuous"); - [MayRequireIdeology] public static readonly PreceptDef Incestuos_Free = DefDatabase.GetNamed("Incestuos_Free"); - [MayRequireIdeology] public static readonly PreceptDef Incestuos_Disapproved = DefDatabase.GetNamed("Incestuos_Disapproved"); - [MayRequireIdeology] public static readonly PreceptDef Incestuos_Forbidden = DefDatabase.GetNamed("Incestuos_Forbidden"); - [MayRequireIdeology] public static readonly PreceptDef Incestuos_IncestOnly = DefDatabase.GetNamed("Incestuos_IncestOnly"); - [MayRequireIdeology] public static readonly PreceptDef Incestuos_Disapproved_CloseOnly = DefDatabase.GetNamed("Incestuos_Disapproved_CloseOnly"); - [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysMother = DefDatabase.GetNamed("BabyFaction_AlwaysMother"); - [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysFather = DefDatabase.GetNamed("BabyFaction_AlwaysFather"); - [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysColony = DefDatabase.GetNamed("BabyFaction_AlwaysColony"); - [MayRequireIdeology] public static readonly PreceptDef Submissive_None = DefDatabase.GetNamed("Submissive_None"); - [MayRequireIdeology] public static readonly PreceptDef Submissive_Male = DefDatabase.GetNamed("Submissive_Male"); - [MayRequireIdeology] public static readonly PreceptDef Submissive_Female = DefDatabase.GetNamed("Submissive_Female"); - [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Abhorrent = DefDatabase.GetNamed("Necrophilia_Abhorrent"); - [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Horrible = DefDatabase.GetNamed("Necrophilia_Horrible"); - [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Disapproved = DefDatabase.GetNamed("Necrophilia_Disapproved"); - [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Acceptable = DefDatabase.GetNamed("Necrophilia_Acceptable"); - [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Approved = DefDatabase.GetNamed("Necrophilia_Approved"); - } + 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"); + + [MayRequireIdeology] public static readonly MemeDef Zoophile = DefDatabase.GetNamed("Zoophile"); + [MayRequireIdeology] public static readonly MemeDef Rapist = DefDatabase.GetNamed("Rapist"); + [MayRequireIdeology] public static readonly MemeDef Lewd = DefDatabase.GetNamed("Lewd"); + [MayRequireIdeology] public static readonly MemeDef Necrophile = DefDatabase.GetNamed("Necrophile"); + [MayRequireIdeology] public static readonly HistoryEventDef SexWithAnimal = DefDatabase.GetNamed("SexWithAnimal"); + [MayRequireIdeology] public static readonly HistoryEventDef SexWithVeneratedAnimal = DefDatabase.GetNamed("SexWithVeneratedAnimal"); + [MayRequireIdeology] public static readonly HistoryEventDef Raped = DefDatabase.GetNamed("Raped"); + [MayRequireIdeology] public static readonly HistoryEventDef RapedSlave = DefDatabase.GetNamed("RapedSlave"); + [MayRequireIdeology] public static readonly HistoryEventDef RapedPrisoner = DefDatabase.GetNamed("RapedPrisoner"); + [MayRequireIdeology] public static readonly HistoryEventDef WasRaped = DefDatabase.GetNamed("WasRaped"); + [MayRequireIdeology] public static readonly HistoryEventDef WasRapedSlave = DefDatabase.GetNamed("WasRapedSlave"); + [MayRequireIdeology] public static readonly HistoryEventDef WasRapedPrisoner = DefDatabase.GetNamed("WasRapedPrisoner"); + [MayRequireIdeology] public static readonly HistoryEventDef VaginalSex = DefDatabase.GetNamed("VaginalSex"); + [MayRequireIdeology] public static readonly HistoryEventDef AnalSex = DefDatabase.GetNamed("AnalSex"); + [MayRequireIdeology] public static readonly HistoryEventDef OralSex = DefDatabase.GetNamed("OralSex"); + [MayRequireIdeology] public static readonly HistoryEventDef MiscSex = DefDatabase.GetNamed("MiscSex"); + [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"); + [MayRequireIdeology] public static readonly PreceptDef Bestiality_Acceptable = DefDatabase.GetNamed("Bestiality_Acceptable"); + [MayRequireIdeology] public static readonly PreceptDef Bestiality_OnlyVenerated = DefDatabase.GetNamed("Bestiality_OnlyVenerated"); + [MayRequireIdeology] public static readonly PreceptDef Bestiality_Honorable = DefDatabase.GetNamed("Bestiality_Honorable"); + [MayRequireIdeology] public static readonly PreceptDef Rape_Abhorrent = DefDatabase.GetNamed("Rape_Abhorrent"); + [MayRequireIdeology] public static readonly PreceptDef Rape_Horrible = DefDatabase.GetNamed("Rape_Horrible"); + [MayRequireIdeology] public static readonly PreceptDef Rape_Disapproved = DefDatabase.GetNamed("Rape_Disapproved"); + [MayRequireIdeology] public static readonly PreceptDef Rape_Acceptable = DefDatabase.GetNamed("Rape_Acceptable"); + [MayRequireIdeology] public static readonly PreceptDef Rape_Honorable = DefDatabase.GetNamed("Rape_Honorable"); + [MayRequireIdeology] public static readonly PreceptDef Incestuos_Disapproved = DefDatabase.GetNamed("Incestuos_Disapproved"); + [MayRequireIdeology] public static readonly PreceptDef Incestuos_Forbidden = DefDatabase.GetNamed("Incestuos_Forbidden"); + [MayRequireIdeology] public static readonly PreceptDef Incestuos_IncestOnly = DefDatabase.GetNamed("Incestuos_IncestOnly"); + [MayRequireIdeology] public static readonly PreceptDef Incestuos_Disapproved_CloseOnly = DefDatabase.GetNamed("Incestuos_Disapproved_CloseOnly"); + [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysMother = DefDatabase.GetNamed("BabyFaction_AlwaysMother"); + [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysFather = DefDatabase.GetNamed("BabyFaction_AlwaysFather"); + [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysColony = DefDatabase.GetNamed("BabyFaction_AlwaysColony"); + [MayRequireIdeology] public static readonly PreceptDef Submissive_Male = DefDatabase.GetNamed("Submissive_Male"); + [MayRequireIdeology] public static readonly PreceptDef Submissive_Female = DefDatabase.GetNamed("Submissive_Female"); + [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Abhorrent = DefDatabase.GetNamed("Necrophilia_Abhorrent"); + [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Horrible = DefDatabase.GetNamed("Necrophilia_Horrible"); + [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Disapproved = DefDatabase.GetNamed("Necrophilia_Disapproved"); + [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Acceptable = DefDatabase.GetNamed("Necrophilia_Acceptable"); + [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Approved = DefDatabase.GetNamed("Necrophilia_Approved"); + } } diff --git a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Sex.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Sex.xml index 262ec54..9a3d755 100644 --- a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Sex.xml +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Sex.xml @@ -88,6 +88,13 @@ Sex_Know_Promiscuous + +
  • + +
  • Vaginal
  • + + +
    @@ -133,6 +140,14 @@ Sex_Know_Promiscuous + +
  • + +
  • Anal
  • +
  • Rimming
  • + + +
    @@ -178,6 +193,15 @@ Sex_Know_Promiscuous + +
  • + +
  • Cunnilingus
  • +
  • Fellatio
  • +
  • Beakjob
  • + + +
    @@ -230,6 +254,16 @@ Sex_Know_Promiscuous_Approval + +
  • + +
  • DoublePenetration
  • +
  • Scissoring
  • +
  • Sixtynine
  • +
  • Fisting
  • + + +