diff --git a/1.4/Defs/PreceptDefs/Precepts_Incest.xml b/1.4/Defs/PreceptDefs/Precepts_Incest.xml
index ddcc32a..df0e490 100644
--- a/1.4/Defs/PreceptDefs/Precepts_Incest.xml
+++ b/1.4/Defs/PreceptDefs/Precepts_Incest.xml
@@ -320,6 +320,9 @@
High
0
1000
+
+ Zoophile
+
RSI_NonIncestuosMarriage
diff --git a/Languages/English/Keyed/RJW_Sexperience.xml b/Languages/English/Keyed/RJW_Sexperience.xml
index 92fe2bc..9550b00 100644
--- a/Languages/English/Keyed/RJW_Sexperience.xml
+++ b/Languages/English/Keyed/RJW_Sexperience.xml
@@ -9,6 +9,4 @@
not animal
capable of sex is required
-
- forbidden by ideology
\ No newline at end of file
diff --git a/Source/IdeologyAddon/BloodRelationDegree.cs b/Source/IdeologyAddon/BloodRelationDegree.cs
deleted file mode 100644
index e23f9ee..0000000
--- a/Source/IdeologyAddon/BloodRelationDegree.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace RJWSexperience.Ideology
-{
- public enum BloodRelationDegree
- {
- CloseRelative,
- FarRelative,
- NotRelated
- }
-}
diff --git a/Source/IdeologyAddon/DebugAction.cs b/Source/IdeologyAddon/DebugAction.cs
index 91f5b20..9655f50 100644
--- a/Source/IdeologyAddon/DebugAction.cs
+++ b/Source/IdeologyAddon/DebugAction.cs
@@ -1,7 +1,5 @@
using rjw;
using RJWSexperience.Ideology.HistoryEvents;
-using RJWSexperience.Ideology.Patches;
-using System.Collections.Generic;
using System.Linq;
using Verse;
@@ -18,20 +16,5 @@ namespace RJWSexperience.Ideology
RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(hero, p);
RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(p, hero);
}
-
- [DebugAction("RJW Sexperience Ideology", "Manual romance check", false, true, actionType = DebugActionType.Action, allowedGameStates = AllowedGameStates.PlayingOnMap)]
- public static void DisplayDebugTable()
- {
- IEnumerable pawns = Find.CurrentMap.mapPawns.AllPawnsSpawned.Where(pawn => pawn.IsColonist);
-
- IEnumerable> columns = pawns
- .Select(pawn => new TableDataGetter(pawn.Name.ToStringShort, (Pawn p) => Rimworld_Patch_IncestuousManualRomance.RsiIncestuous(p, pawn)));
-
- var name = new TableDataGetter("Name", (Pawn pawn) => pawn.Name.ToStringShort);
-
- TableDataGetter[] getters = (new List>() { name }).Concat(columns).ToArray();
-
- DebugTables.MakeTablesDialog(pawns, getters);
- }
}
}
diff --git a/Source/IdeologyAddon/IdeoUtility.cs b/Source/IdeologyAddon/IdeoUtility.cs
index 206b8eb..4b44cce 100644
--- a/Source/IdeologyAddon/IdeoUtility.cs
+++ b/Source/IdeologyAddon/IdeoUtility.cs
@@ -12,9 +12,9 @@ namespace RJWSexperience.Ideology
if (ideo == null)
return false;
- if (ideo.HasPrecept(RsiPreceptDefOf.Submissive_Female) && pawn.gender == Gender.Female)
+ if (ideo.HasPrecept(VariousDefOf.Submissive_Female) && pawn.gender == Gender.Female)
return true;
- else if (ideo.HasPrecept(RsiPreceptDefOf.Submissive_Male) && pawn.gender == Gender.Male)
+ else if (ideo.HasPrecept(VariousDefOf.Submissive_Male) && pawn.gender == Gender.Male)
return true;
return false;
diff --git a/Source/IdeologyAddon/IdeologyAddon.csproj b/Source/IdeologyAddon/IdeologyAddon.csproj
index 0636e40..651dd5b 100644
--- a/Source/IdeologyAddon/IdeologyAddon.csproj
+++ b/Source/IdeologyAddon/IdeologyAddon.csproj
@@ -42,7 +42,6 @@
-
@@ -60,10 +59,7 @@
-
-
-
@@ -98,7 +94,7 @@
- 1.4.3542
+ 1.4.3537
2.2.2
diff --git a/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs b/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs
index e52b361..f387f14 100644
--- a/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs
+++ b/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs
@@ -213,14 +213,14 @@ namespace RJWSexperience.Ideology.Patches
Ideo mainideo = playerfaction.ideos.PrimaryIdeo;
if (mainideo != null)
{
- if (mainideo.HasPrecept(RsiPreceptDefOf.BabyFaction_AlwaysFather))
+ if (mainideo.HasPrecept(VariousDefOf.BabyFaction_AlwaysFather))
{
Pawn parent = baby.GetFather() ?? baby.GetMother();
ideo = parent.Ideo;
return parent.Faction;
}
- else if (mainideo.HasPrecept(RsiPreceptDefOf.BabyFaction_AlwaysColony))
+ else if (mainideo.HasPrecept(VariousDefOf.BabyFaction_AlwaysColony))
{
ideo = mainideo;
return playerfaction;
@@ -241,7 +241,7 @@ namespace RJWSexperience.Ideology.Patches
if (props.pawn?.Ideo == null || !props.hasPartner())
return;
- if (props.partner.Ideo?.HasPrecept(RsiPreceptDefOf.ProselyzingByOrgasm) == true)
+ if (props.partner.Ideo?.HasPrecept(VariousDefOf.ProselyzingByOrgasm) == true)
{
// Pawn is the one having the orgasm
// Partner is "giving" the orgasm, hence the pawn will be converted towards the partners ideology
diff --git a/Source/IdeologyAddon/Patches/Rimworld_Patch.cs b/Source/IdeologyAddon/Patches/Rimworld_Patch.cs
index 55f3ba6..e50098e 100644
--- a/Source/IdeologyAddon/Patches/Rimworld_Patch.cs
+++ b/Source/IdeologyAddon/Patches/Rimworld_Patch.cs
@@ -4,7 +4,6 @@ using rjw;
using RJWSexperience.Ideology.HistoryEvents;
using RJWSexperience.Ideology.Precepts;
using System.Collections.Generic;
-using System.Linq;
using Verse;
namespace RJWSexperience.Ideology.Patches
@@ -54,55 +53,4 @@ namespace RJWSexperience.Ideology.Patches
}
}
}
-
- public static class Rimworld_Patch_IncestuousManualRomance
- {
- ///
- /// Override incestuous check in the manual romance
- ///
- /// Pawn to try do romance
- /// Target for romance
- /// Result of the original method
- /// Run original method implementation
- [HarmonyPatch(typeof(RelationsUtility), "Incestuous")]
- public static bool Prefix(Pawn one, Pawn two, ref bool __result)
- {
- __result = RsiIncestuous(one, two);
- return false;
- }
-
- ///
- /// Check if Ideology allows romance attempt
- ///
- /// Pawn to try do romance
- /// Target for romance
- /// Forbid romance option
- public static bool RsiIncestuous(Pawn one, Pawn two)
- {
- PreceptDef incestuousPrecept = one.Ideo?.PreceptsListForReading.Select(precept => precept.def).FirstOrFallback(def => def.issue == VariousDefOf.Incestuos);
- BloodRelationDegree relationDegree = RelationHelpers.GetBloodRelationDegree(one, two);
-
- if (incestuousPrecept == null ||
- incestuousPrecept == RsiPreceptDefOf.Incestuos_Disapproved ||
- incestuousPrecept == RsiPreceptDefOf.Incestuos_Forbidden)
- {
- return relationDegree < BloodRelationDegree.NotRelated;
- }
- else if (incestuousPrecept == RsiPreceptDefOf.Incestuos_Free)
- {
- return false;
- }
- else if (incestuousPrecept == RsiPreceptDefOf.Incestuos_Disapproved_CloseOnly)
- {
- return relationDegree == BloodRelationDegree.CloseRelative;
- }
- else if (incestuousPrecept == RsiPreceptDefOf.Incestuos_IncestOnly)
- {
- return relationDegree == BloodRelationDegree.NotRelated;
- }
-
- // Modded incestuous precept?
- return true;
- }
- }
}
diff --git a/Source/IdeologyAddon/RelationHelpers.cs b/Source/IdeologyAddon/RelationHelpers.cs
deleted file mode 100644
index 2a5fe77..0000000
--- a/Source/IdeologyAddon/RelationHelpers.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using RimWorld;
-using System.Linq;
-using Verse;
-
-namespace RJWSexperience.Ideology
-{
- public static class RelationHelpers
- {
- ///
- /// Get degree of blood relation between two pawns
- ///
- public static BloodRelationDegree GetBloodRelationDegree(Pawn pawn, Pawn partner)
- {
- PawnRelationDef closestBloodRelation = pawn
- .GetRelations(partner)
- ?.Where(def => def.familyByBloodRelation)
- ?.OrderByDescending(def => def.importance)
- ?.FirstOrFallback();
-
- if (closestBloodRelation == null)
- {
- return BloodRelationDegree.NotRelated;
- }
-
- return GetBloodRelationDegree(closestBloodRelation);
- }
-
- ///
- /// Get degree of blood relation for a relationDef
- ///
- public static BloodRelationDegree GetBloodRelationDegree(PawnRelationDef relationDef)
- {
- if (!relationDef.familyByBloodRelation)
- {
- return BloodRelationDegree.NotRelated;
- }
- else if (relationDef.importance <= PawnRelationDefOf.Cousin.importance)
- {
- return BloodRelationDegree.FarRelative;
- }
- else
- {
- return BloodRelationDegree.CloseRelative;
- }
- }
- }
-}
diff --git a/Source/IdeologyAddon/Rituals/RitualRoles.cs b/Source/IdeologyAddon/Rituals/RitualRoles.cs
index 691bb28..0d26048 100644
--- a/Source/IdeologyAddon/Rituals/RitualRoles.cs
+++ b/Source/IdeologyAddon/Rituals/RitualRoles.cs
@@ -92,7 +92,7 @@ namespace RJWSexperience.Ideology
public static bool CanBeBreeder(Pawn animal, Precept_Ritual precept)
{
- if (precept != null && precept.ideo.HasPrecept(RsiPreceptDefOf.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal))
+ if (precept != null && precept.ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal))
{
return false;
}
diff --git a/Source/IdeologyAddon/RomanceChanceFactorHelpers.cs b/Source/IdeologyAddon/RomanceChanceFactorHelpers.cs
deleted file mode 100644
index 298916c..0000000
--- a/Source/IdeologyAddon/RomanceChanceFactorHelpers.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-using RimWorld;
-using System.Collections.Generic;
-using System.Linq;
-using Verse;
-
-namespace RJWSexperience.Ideology
-{
- public static class RomanceChanceFactorHelpers
- {
- ///
- /// Default value for parent relation
- ///
- private const float parentRomanceChanceFactor = 0.03f;
-
- ///
- /// Get ideology adjusted romanceChanceFactor
- ///
- public static float GetRomanceChanceFactor(Pawn pawn, Pawn partner)
- {
- IEnumerable relations = pawn.GetRelations(partner).Where(def => def.familyByBloodRelation);
- PreceptDef incestuousPrecept = pawn.Ideo?.PreceptsListForReading.Select(precept => precept.def).FirstOrFallback(def => def.issue == VariousDefOf.Incestuos);
- float romanceChanceFactor = 1f;
-
- if (!relations.Any())
- {
- if (incestuousPrecept == RsiPreceptDefOf.Incestuos_IncestOnly)
- {
- return parentRomanceChanceFactor;
- }
- else
- {
- return romanceChanceFactor;
- }
- }
-
- foreach (PawnRelationDef relationDef in relations)
- {
- romanceChanceFactor *= GetRomanceChanceFactor(relationDef, incestuousPrecept);
- }
-
- return romanceChanceFactor;
- }
-
- ///
- /// Get ideology adjusted romanceChanceFactor for the relation
- ///
- public static float GetRomanceChanceFactor(PawnRelationDef relationDef, PreceptDef incestuousPrecept)
- {
- if (incestuousPrecept == null || incestuousPrecept == RsiPreceptDefOf.Incestuos_Disapproved) // Default game setup
- {
- return relationDef.romanceChanceFactor;
- }
-
- if (incestuousPrecept == RsiPreceptDefOf.Incestuos_Free)
- {
- return 1f;
- }
- else if (incestuousPrecept == RsiPreceptDefOf.Incestuos_Disapproved_CloseOnly)
- {
- if (relationDef.familyByBloodRelation && relationDef.importance > PawnRelationDefOf.Cousin.importance)
- {
- return relationDef.romanceChanceFactor;
- }
- else
- {
- return 1f;
- }
- }
- else if (incestuousPrecept == RsiPreceptDefOf.Incestuos_Forbidden)
- {
- if (relationDef.familyByBloodRelation)
- {
- return parentRomanceChanceFactor;
- }
- }
- else if (incestuousPrecept == RsiPreceptDefOf.Incestuos_IncestOnly)
- {
- if (!relationDef.familyByBloodRelation)
- {
- return parentRomanceChanceFactor;
- }
- else
- {
- return 1f;
- }
- }
-
- return relationDef.romanceChanceFactor;
- }
-
- [DebugAction("RJW Sexperience Ideology", "Show romanceChanceFactors", false, true, actionType = DebugActionType.Action, allowedGameStates = AllowedGameStates.Entry)]
- public static void DisplayDebugTable()
- {
- IEnumerable incestuousPrecepts = DefDatabase
- .AllDefsListForReading
- .Where(def => def.issue == VariousDefOf.Incestuos);
-
- IEnumerable> preceptGetters = incestuousPrecepts
- .Select(precept => new TableDataGetter(precept.defName,(PawnRelationDef rel) => GetRomanceChanceFactor(rel, precept)));
-
- var relName = new TableDataGetter("Relation Def", (PawnRelationDef rel) => rel.defName);
-
- TableDataGetter[] getters = (new List>() { relName }).Concat(preceptGetters).ToArray();
-
- DebugTables.MakeTablesDialog(DefDatabase.AllDefsListForReading, getters);
- }
- }
-}
\ No newline at end of file
diff --git a/Source/IdeologyAddon/RsiHistoryEventDefOf.cs b/Source/IdeologyAddon/RsiHistoryEventDefOf.cs
index 4cb9bc7..0155d66 100644
--- a/Source/IdeologyAddon/RsiHistoryEventDefOf.cs
+++ b/Source/IdeologyAddon/RsiHistoryEventDefOf.cs
@@ -5,14 +5,14 @@ namespace RJWSexperience.Ideology
[DefOf]
public static class RsiHistoryEventDefOf
{
- public static readonly HistoryEventDef RSI_SexWithAnimal;
- public static readonly HistoryEventDef RSI_Raped;
- public static readonly HistoryEventDef RSI_NonIncestuosMarriage;
- public static readonly HistoryEventDef RSI_NonIncestuosSex;
- public static readonly HistoryEventDef RSI_SexWithCorpse;
- public static readonly HistoryEventDef RSI_VirginTaken;
- public static readonly HistoryEventDef RSI_VirginStolen;
- public static readonly HistoryEventDef RSI_TookVirgin;
- public static readonly HistoryEventDef RSI_Masturbated;
+ [MayRequireIdeology] public static readonly HistoryEventDef RSI_SexWithAnimal;
+ [MayRequireIdeology] public static readonly HistoryEventDef RSI_Raped;
+ [MayRequireIdeology] public static readonly HistoryEventDef RSI_NonIncestuosMarriage;
+ [MayRequireIdeology] public static readonly HistoryEventDef RSI_NonIncestuosSex;
+ [MayRequireIdeology] public static readonly HistoryEventDef RSI_SexWithCorpse;
+ [MayRequireIdeology] public static readonly HistoryEventDef RSI_VirginTaken;
+ [MayRequireIdeology] public static readonly HistoryEventDef RSI_VirginStolen;
+ [MayRequireIdeology] public static readonly HistoryEventDef RSI_TookVirgin;
+ [MayRequireIdeology] public static readonly HistoryEventDef RSI_Masturbated;
}
}
diff --git a/Source/IdeologyAddon/RsiPreceptDefOf.cs b/Source/IdeologyAddon/RsiPreceptDefOf.cs
deleted file mode 100644
index 977954a..0000000
--- a/Source/IdeologyAddon/RsiPreceptDefOf.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using RimWorld;
-
-namespace RJWSexperience.Ideology
-{
- [DefOf]
- public static class RsiPreceptDefOf
- {
- public static readonly PreceptDef Incestuos_Free;
- public static readonly PreceptDef Incestuos_Disapproved_CloseOnly;
- public static readonly PreceptDef Incestuos_Disapproved;
- public static readonly PreceptDef Incestuos_Forbidden;
- public static readonly PreceptDef Incestuos_IncestOnly;
- public static readonly PreceptDef Bestiality_OnlyVenerated;
- public static readonly PreceptDef BabyFaction_AlwaysFather;
- public static readonly PreceptDef BabyFaction_AlwaysColony;
- public static readonly PreceptDef Submissive_Male;
- public static readonly PreceptDef Submissive_Female;
- public static readonly PreceptDef ProselyzingByOrgasm;
- }
-}
\ No newline at end of file
diff --git a/Source/IdeologyAddon/VariousDefOf.cs b/Source/IdeologyAddon/VariousDefOf.cs
index 19a104d..fb926ce 100644
--- a/Source/IdeologyAddon/VariousDefOf.cs
+++ b/Source/IdeologyAddon/VariousDefOf.cs
@@ -13,10 +13,15 @@ namespace RJWSexperience.Ideology
public static readonly JobDef GettinDrugSex;
public static readonly JobDef DrugMasturbate;
- public static readonly MemeDef Zoophile;
- public static readonly MemeDef Rapist;
- public static readonly MemeDef Necrophile;
- public static readonly IssueDef Incestuos;
+ [MayRequireIdeology] public static readonly MemeDef Zoophile;
+ [MayRequireIdeology] public static readonly MemeDef Rapist;
+ [MayRequireIdeology] public static readonly MemeDef Necrophile;
+ [MayRequireIdeology] public static readonly PreceptDef Bestiality_OnlyVenerated;
+ [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysFather;
+ [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysColony;
+ [MayRequireIdeology] public static readonly PreceptDef Submissive_Male;
+ [MayRequireIdeology] public static readonly PreceptDef Submissive_Female;
+ [MayRequireIdeology] public static readonly PreceptDef ProselyzingByOrgasm;
[MayRequireBiotech] public static readonly HediffDef PregnantHuman;
}
}