diff --git a/RJWSexperience/IdeologyAddon/Ideology/IdeoUtility.cs b/RJWSexperience/IdeologyAddon/Ideology/IdeoUtility.cs index 49cd963..4901bd1 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/IdeoUtility.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/IdeoUtility.cs @@ -55,5 +55,17 @@ namespace RJWSexperience.Ideology } return false; } + + public static float GetPreceptsMtbMultiplier(Ideo ideo) where T : Precepts.DefExtension_ModifyMtb + { + float finalMultiplier = 1f; + for (int i = 0; i < ideo.PreceptsListForReading.Count; i++) + { + float? multiplier = ideo.PreceptsListForReading[i].def.GetModExtension()?.multiplier; + if (multiplier != null) + finalMultiplier *= (float)multiplier; + } + return finalMultiplier; + } } } diff --git a/RJWSexperience/IdeologyAddon/Ideology/Precepts/DefExtension_ModifyBestialityMtb.cs b/RJWSexperience/IdeologyAddon/Ideology/Precepts/DefExtension_ModifyBestialityMtb.cs new file mode 100644 index 0000000..1d97595 --- /dev/null +++ b/RJWSexperience/IdeologyAddon/Ideology/Precepts/DefExtension_ModifyBestialityMtb.cs @@ -0,0 +1,6 @@ +namespace RJWSexperience.Ideology.Precepts +{ + public class DefExtension_ModifyBestialityMtb : DefExtension_ModifyMtb + { + } +} diff --git a/RJWSexperience/IdeologyAddon/Ideology/Precepts/DefExtension_ModifyMtb.cs b/RJWSexperience/IdeologyAddon/Ideology/Precepts/DefExtension_ModifyMtb.cs new file mode 100644 index 0000000..e1553f3 --- /dev/null +++ b/RJWSexperience/IdeologyAddon/Ideology/Precepts/DefExtension_ModifyMtb.cs @@ -0,0 +1,11 @@ +using System.Diagnostics.CodeAnalysis; +using Verse; + +namespace RJWSexperience.Ideology.Precepts +{ + public abstract class DefExtension_ModifyMtb : DefModExtension + { + [SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")] + public float multiplier = 1f; + } +} diff --git a/RJWSexperience/IdeologyAddon/Ideology/Precepts/DefExtension_ModifyNecroMtb.cs b/RJWSexperience/IdeologyAddon/Ideology/Precepts/DefExtension_ModifyNecroMtb.cs new file mode 100644 index 0000000..3e544f7 --- /dev/null +++ b/RJWSexperience/IdeologyAddon/Ideology/Precepts/DefExtension_ModifyNecroMtb.cs @@ -0,0 +1,6 @@ +namespace RJWSexperience.Ideology.Precepts +{ + public class DefExtension_ModifyNecroMtb : DefExtension_ModifyMtb + { + } +} diff --git a/RJWSexperience/IdeologyAddon/Ideology/Precepts/DefExtension_ModifyRapeCPMtb.cs b/RJWSexperience/IdeologyAddon/Ideology/Precepts/DefExtension_ModifyRapeCPMtb.cs new file mode 100644 index 0000000..e83be70 --- /dev/null +++ b/RJWSexperience/IdeologyAddon/Ideology/Precepts/DefExtension_ModifyRapeCPMtb.cs @@ -0,0 +1,6 @@ +namespace RJWSexperience.Ideology.Precepts +{ + public class DefExtension_ModifyRapeCPMtb : DefExtension_ModifyMtb + { + } +} diff --git a/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs b/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs index 3b7432e..36ddb5c 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs @@ -47,16 +47,8 @@ namespace RJWSexperience.Ideology public static void Postfix(Pawn pawn, ref float __result) { Ideo ideo = pawn.Ideo; - if (ideo != null) __result *= BestialityByPrecept(ideo); // ideo is null if don't have dlc - } - - public static float BestialityByPrecept(Ideo ideo) - { - 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; + if (ideo != null) // ideo is null if don't have dlc + __result *= IdeoUtility.GetPreceptsMtbMultiplier(ideo); } } @@ -66,15 +58,8 @@ namespace RJWSexperience.Ideology public static void Postfix(Pawn pawn, ref float __result) { Ideo ideo = pawn.Ideo; - if (ideo != null) __result *= RapeByPrecept(ideo); // ideo is null if don't have dlc - } - - public static float RapeByPrecept(Ideo ideo) - { - 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; + if (ideo != null) // ideo is null if don't have dlc + __result *= IdeoUtility.GetPreceptsMtbMultiplier(ideo); } } @@ -84,15 +69,8 @@ namespace RJWSexperience.Ideology 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; + if (ideo != null) // ideo is null if don't have dlc + __result *= IdeoUtility.GetPreceptsMtbMultiplier(ideo); } } @@ -142,13 +120,11 @@ namespace RJWSexperience.Ideology { Pawn pawn = props.pawn; Pawn partner = props.partner; - bool rape = props.isRape; - xxx.rjwSextype sextype = props.sexType; if (partner != null) { - if (xxx.is_human(pawn)) AfterSexHuman(pawn, partner, rape, sextype); - else if (xxx.is_human(partner)) AfterSexHuman(partner, pawn, false, sextype, true); + if (xxx.is_human(pawn)) AfterSexHuman(pawn, partner, props.isRape, props.sexType); + else if (xxx.is_human(partner)) AfterSexHuman(partner, pawn, false, props.sexType, true); } } @@ -271,10 +247,12 @@ namespace RJWSexperience.Ideology public static void Postfix(InteractionWithExtension interaction, InteractionPawn dominant, InteractionPawn submissive, ref InteractionScore __result) { Ideo ideo = dominant.Pawn.Ideo; - if (ideo != null) __result.Dominant = PreceptSextype(ideo, dominant.Pawn.GetStatValue(xxx.sex_drive_stat), __result.Dominant, interaction); + if (ideo != null) + __result.Dominant = PreceptSextype(ideo, dominant.Pawn.GetStatValue(xxx.sex_drive_stat), __result.Dominant, interaction); ideo = submissive.Pawn.Ideo; - if (ideo != null) __result.Submissive = PreceptSextype(ideo, submissive.Pawn.GetStatValue(xxx.sex_drive_stat), __result.Submissive, interaction); + if (ideo != null) + __result.Submissive = PreceptSextype(ideo, submissive.Pawn.GetStatValue(xxx.sex_drive_stat), __result.Submissive, interaction); } public static float PreceptSextype(Ideo ideo, float sexdrive, float score, InteractionWithExtension interaction) diff --git a/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj b/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj index 2c389aa..c9a2774 100644 --- a/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj +++ b/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj @@ -49,6 +49,10 @@ + + + + diff --git a/RJWSexperience/IdeologyAddon/VariousDefOf.cs b/RJWSexperience/IdeologyAddon/VariousDefOf.cs index 752a784..9c9f242 100644 --- a/RJWSexperience/IdeologyAddon/VariousDefOf.cs +++ b/RJWSexperience/IdeologyAddon/VariousDefOf.cs @@ -14,7 +14,6 @@ namespace RJWSexperience.Ideology [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"); @@ -35,26 +34,12 @@ namespace RJWSexperience.Ideology [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_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_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_Bestiality.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Bestiality.xml index 20e2c74..e1be78f 100644 --- a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Bestiality.xml +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Bestiality.xml @@ -68,6 +68,9 @@ +
  • + 5.0 +
  • @@ -119,6 +122,9 @@ +
  • + 5.0 +
  • @@ -182,6 +188,11 @@ 10 10 true + +
  • + 0.75 +
  • +
    @@ -240,6 +251,9 @@ +
  • + 0.65 +
  • @@ -292,6 +306,9 @@ +
  • + 0.5 +
  • diff --git a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Necrophilia.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Necrophilia.xml index 43042a8..0c2213a 100644 --- a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Necrophilia.xml +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Necrophilia.xml @@ -37,6 +37,11 @@ Necrophilia_Know_Abhorrent + +
  • + 8.0 +
  • +
    @@ -61,6 +66,11 @@ Necrophilia_Know_Horrible + +
  • + 8.0 +
  • +
    @@ -99,6 +109,11 @@
  • Necrophile
  • + +
  • + 0.75 +
  • +
    @@ -123,6 +138,11 @@ Necrophilia_Know_Approved + +
  • + 0.5 +
  • +
    diff --git a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Rape.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Rape.xml index ca6e7ce..a2f9ba0 100644 --- a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Rape.xml +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Rape.xml @@ -89,6 +89,11 @@ Someone raped slave + +
  • + 3.0 +
  • +
    @@ -130,6 +135,11 @@ Someone raped prisoner + +
  • + 3.0 +
  • +
    @@ -172,6 +182,11 @@ 10 10 true + +
  • + 0.75 +
  • +
    @@ -226,6 +241,11 @@ true + +
  • + 0.5 +
  • +