Implement HistoryEvent secondary events

This commit is contained in:
amevarashi 2022-07-03 22:04:13 +05:00
parent 6a1978414d
commit 2fe5d3272f
9 changed files with 217 additions and 151 deletions

View File

@ -1,5 +1,4 @@
using RimWorld;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Verse;
@ -8,22 +7,6 @@ namespace RJWSexperience.Ideology.HistoryEvents
public class DefExtension_PartnerDependentOverrides : DefModExtension
{
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public List<PartnerDependentOverride> overrideRules = new List<PartnerDependentOverride>();
public class PartnerDependentOverride
{
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public HistoryEventDef historyEventDef;
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public PartnerFilter filter;
public bool Applies(Pawn pawn, Pawn partner)
{
if (filter == null)
return false;
return filter.Applies(pawn, partner);
}
}
public List<PartnerDependentRule> overrideRules = new List<PartnerDependentRule>();
}
}

View File

@ -0,0 +1,12 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Verse;
namespace RJWSexperience.Ideology.HistoryEvents
{
public class DefExtension_PartnerDependentSecondaryEvents : DefModExtension
{
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public List<PartnerDependentRule> generationRules = new List<PartnerDependentRule>();
}
}

View File

@ -0,0 +1,22 @@
using RimWorld;
using System.Diagnostics.CodeAnalysis;
using Verse;
namespace RJWSexperience.Ideology.HistoryEvents
{
public class PartnerDependentRule
{
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public HistoryEventDef historyEventDef;
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public PartnerFilter filter;
public bool Applies(Pawn pawn, Pawn partner)
{
if (filter == null)
return false;
return filter.Applies(pawn, partner);
}
}
}

View File

@ -11,59 +11,6 @@ using Verse;
namespace RJWSexperience.Ideology.Patches
{
public static class RJWUtility_Ideo
{
public static HistoryEvent CreateTaggedEvent(this HistoryEventDef def, Pawn pawn, string tag, Pawn partner)
{
return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer), tag.Named(ArgsNamesCustom.Tag), partner.Named(ArgsNamesCustom.Partner));
}
public static HistoryEvent CreateEvent(this HistoryEventDef def, Pawn pawn)
{
return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer));
}
public static HistoryEvent CreateEventWithPartner(this HistoryEventDef def, Pawn pawn, Pawn partner)
{
DefExtension_PartnerDependentOverrides overrides = def.GetModExtension<DefExtension_PartnerDependentOverrides>();
if (overrides == null)
return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer), partner.Named(ArgsNamesCustom.Partner));
foreach (var rule in overrides.overrideRules)
{
if (rule.Applies(pawn, partner))
return rule.historyEventDef.CreateEventWithPartner(pawn, partner);
}
return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer), partner.Named(ArgsNamesCustom.Partner));
}
public static Faction GetFactionUsingPrecept(this Pawn baby, out Ideo ideo)
{
Faction playerfaction = Find.FactionManager.OfPlayer;
Ideo mainideo = playerfaction.ideos.PrimaryIdeo;
if (mainideo != null)
{
if (mainideo.HasPrecept(VariousDefOf.BabyFaction_AlwaysFather))
{
Pawn parent = baby.GetFather() ?? baby.GetMother();
ideo = parent.Ideo;
return parent.Faction;
}
else if (mainideo.HasPrecept(VariousDefOf.BabyFaction_AlwaysColony))
{
ideo = mainideo;
return playerfaction;
}
}
Pawn mother = baby.GetMother();
ideo = mother?.Ideo;
return mother?.Faction ?? baby.Faction;
}
}
[HarmonyPatch(typeof(xxx), "is_rapist")]
public static class RJW_Patch_is_rapist
{
@ -128,10 +75,10 @@ namespace RJWSexperience.Ideology.Patches
if (interactionEvents != null)
{
foreach (HistoryEventDef eventDef in interactionEvents.pawnEvents)
Find.HistoryEventsManager.RecordEvent(eventDef.CreateEventWithPartner(props.pawn, props.partner));
eventDef.RecordEventWithPartner(props.pawn, props.partner);
foreach (HistoryEventDef eventDef in interactionEvents.partnerEvents)
Find.HistoryEventsManager.RecordEvent(eventDef.CreateEventWithPartner(props.partner, props.pawn));
eventDef.RecordEventWithPartner(props.partner, props.pawn);
}
}
else
@ -146,22 +93,12 @@ namespace RJWSexperience.Ideology.Patches
public static void AfterSexHuman(Pawn human, Pawn partner, bool rape)
{
Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_NonIncestuosSex.CreateEventWithPartner(human, partner));
Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_NonIncestuosSex.CreateEventWithPartner(partner, human));
VariousDefOf.RSI_NonIncestuosSex.RecordEventWithPartner(human, partner);
VariousDefOf.RSI_NonIncestuosSex.RecordEventWithPartner(partner, human);
if (partner.IsAnimal())
{
if (human.Ideo?.IsVeneratedAnimal(partner) ?? false)
Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.CreateEventWithPartner(human, partner));
else
Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithNonVeneratedAnimal.CreateEventWithPartner(human, partner));
if (human.Ideo != null && human.relations?.DirectRelationExists(PawnRelationDefOf.Bond, partner) == true)
Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithBondedAnimal.CreateEventWithPartner(human, partner));
else
Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithNonBondAnimal.CreateEventWithPartner(human, partner));
Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.CreateEventWithPartner(human, partner));
VariousDefOf.RSI_SexWithAnimal.RecordEventWithPartner(human, partner);
}
else if (xxx.is_human(partner))
{

View File

@ -12,8 +12,8 @@ namespace RJWSexperience.Ideology.Patches
{
public static void Postfix(Pawn firstPawn, Pawn secondPawn)
{
Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_NonIncestuosMarriage.CreateEventWithPartner(firstPawn, secondPawn));
Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_NonIncestuosMarriage.CreateEventWithPartner(secondPawn, firstPawn));
VariousDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(firstPawn, secondPawn);
VariousDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(secondPawn, firstPawn);
}
}

View File

@ -0,0 +1,75 @@
using RimWorld;
using RJWSexperience.Ideology.HistoryEvents;
using Verse;
namespace RJWSexperience.Ideology
{
public static class RJWUtility_Ideo
{
public static void RecordEventWithPartner(this HistoryEventDef def, Pawn pawn, Pawn partner)
{
DefExtension_PartnerDependentSecondaryEvents secondaryEvents = def.GetModExtension<DefExtension_PartnerDependentSecondaryEvents>();
if (secondaryEvents != null)
{
foreach (PartnerDependentRule rule in secondaryEvents.generationRules)
{
if (rule.Applies(pawn, partner))
rule.historyEventDef.RecordEventWithPartner(pawn, partner);
}
}
Find.HistoryEventsManager.RecordEvent(def.CreateEventWithPartner(pawn, partner));
}
public static HistoryEvent CreateTaggedEvent(this HistoryEventDef def, Pawn pawn, string tag, Pawn partner)
{
return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer), tag.Named(ArgsNamesCustom.Tag), partner.Named(ArgsNamesCustom.Partner));
}
public static HistoryEvent CreateEvent(this HistoryEventDef def, Pawn pawn)
{
return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer));
}
public static HistoryEvent CreateEventWithPartner(this HistoryEventDef def, Pawn pawn, Pawn partner)
{
DefExtension_PartnerDependentOverrides overrides = def.GetModExtension<DefExtension_PartnerDependentOverrides>();
if (overrides == null)
return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer), partner.Named(ArgsNamesCustom.Partner));
foreach (PartnerDependentRule rule in overrides.overrideRules)
{
if (rule.Applies(pawn, partner))
return rule.historyEventDef.CreateEventWithPartner(pawn, partner);
}
return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer), partner.Named(ArgsNamesCustom.Partner));
}
public static Faction GetFactionUsingPrecept(this Pawn baby, out Ideo ideo)
{
Faction playerfaction = Find.FactionManager.OfPlayer;
Ideo mainideo = playerfaction.ideos.PrimaryIdeo;
if (mainideo != null)
{
if (mainideo.HasPrecept(VariousDefOf.BabyFaction_AlwaysFather))
{
Pawn parent = baby.GetFather() ?? baby.GetMother();
ideo = parent.Ideo;
return parent.Faction;
}
else if (mainideo.HasPrecept(VariousDefOf.BabyFaction_AlwaysColony))
{
ideo = mainideo;
return playerfaction;
}
}
Pawn mother = baby.GetMother();
ideo = mother?.Ideo;
return mother?.Faction ?? baby.Faction;
}
}
}

View File

@ -43,7 +43,9 @@
</ItemGroup>
<ItemGroup>
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="Ideology\HistoryEvents\DefExtension_PartnerDependentSecondaryEvents.cs" />
<Compile Include="Ideology\HistoryEvents\DefExtension_PartnerDependentOverrides.cs" />
<Compile Include="Ideology\HistoryEvents\PartnerDependentRule.cs" />
<Compile Include="Ideology\InteractionDefExtension_HistoryEvents.cs" />
<Compile Include="Ideology\GoodwillSituationWorker_MemeCompatibility.cs" />
<Compile Include="Harmony.cs" />
@ -51,6 +53,7 @@
<Compile Include="Ideology\HistoryEvents\ArgsNamesCustom.cs" />
<Compile Include="Ideology\IssueUtility.cs" />
<Compile Include="Ideology\Keyed.cs" />
<Compile Include="Ideology\RJWUtility_Ideo.cs" />
<Compile Include="Ideology\Patches\RJW_Patch_ChancePerHour.cs" />
<Compile Include="Ideology\Precepts\DefExtension_ModifyMtb.cs" />
<Compile Include="Ideology\Precepts\DefExtension_ModifyFappinMtb.cs" />

View File

@ -3,41 +3,38 @@ using Verse;
namespace RJWSexperience.Ideology
{
[DefOf]
public static class VariousDefOf
{
public static readonly JobDef RapeVictim = DefDatabase<JobDef>.GetNamed("RapeVictim");
public static readonly JobDef Gangbang = DefDatabase<JobDef>.GetNamed("Gangbang");
public static readonly JobDef GettinGangbang = DefDatabase<JobDef>.GetNamed("GettinGangbang");
public static readonly JobDef DrugSex = DefDatabase<JobDef>.GetNamed("DrugSex");
public static readonly JobDef GettinDrugSex = DefDatabase<JobDef>.GetNamed("GettinDrugSex");
public static readonly JobDef DrugMasturbate = DefDatabase<JobDef>.GetNamed("DrugMasturbate");
public static readonly JobDef RapeVictim;
public static readonly JobDef Gangbang;
public static readonly JobDef GettinGangbang;
public static readonly JobDef DrugSex;
public static readonly JobDef GettinDrugSex;
public static readonly JobDef DrugMasturbate;
[MayRequireIdeology] public static readonly MemeDef Zoophile = DefDatabase<MemeDef>.GetNamed("Zoophile");
[MayRequireIdeology] public static readonly MemeDef Rapist = DefDatabase<MemeDef>.GetNamed("Rapist");
[MayRequireIdeology] public static readonly MemeDef Necrophile = DefDatabase<MemeDef>.GetNamed("Necrophile");
[MayRequireIdeology] public static readonly HistoryEventDef SexWithAnimal = DefDatabase<HistoryEventDef>.GetNamed("SexWithAnimal");
[MayRequireIdeology] public static readonly HistoryEventDef SexWithVeneratedAnimal = DefDatabase<HistoryEventDef>.GetNamed("SexWithVeneratedAnimal");
[MayRequireIdeology] public static readonly HistoryEventDef SexWithNonVeneratedAnimal = DefDatabase<HistoryEventDef>.GetNamed("SexWithNonVeneratedAnimal");
[MayRequireIdeology] public static readonly HistoryEventDef SexWithBondedAnimal = DefDatabase<HistoryEventDef>.GetNamed("SexWithBondedAnimal");
[MayRequireIdeology] public static readonly HistoryEventDef SexWithNonBondAnimal = DefDatabase<HistoryEventDef>.GetNamed("SexWithNonBondAnimal");
[MayRequireIdeology] public static readonly HistoryEventDef Raped = DefDatabase<HistoryEventDef>.GetNamed("Raped");
[MayRequireIdeology] public static readonly HistoryEventDef RapedSlave = DefDatabase<HistoryEventDef>.GetNamed("RapedSlave");
[MayRequireIdeology] public static readonly HistoryEventDef RapedPrisoner = DefDatabase<HistoryEventDef>.GetNamed("RapedPrisoner");
[MayRequireIdeology] public static readonly HistoryEventDef WasRaped = DefDatabase<HistoryEventDef>.GetNamed("WasRaped");
[MayRequireIdeology] public static readonly HistoryEventDef WasRapedSlave = DefDatabase<HistoryEventDef>.GetNamed("WasRapedSlave");
[MayRequireIdeology] public static readonly HistoryEventDef WasRapedPrisoner = DefDatabase<HistoryEventDef>.GetNamed("WasRapedPrisoner");
[MayRequireIdeology] public static readonly HistoryEventDef RSI_NonIncestuosMarriage = DefDatabase<HistoryEventDef>.GetNamed("RSI_NonIncestuosMarriage");
[MayRequireIdeology] public static readonly HistoryEventDef RSI_NonIncestuosSex = DefDatabase<HistoryEventDef>.GetNamed("RSI_NonIncestuosSex");
[MayRequireIdeology] public static readonly HistoryEventDef Virgin_TakenF = DefDatabase<HistoryEventDef>.GetNamed("Virgin_TakenF");
[MayRequireIdeology] public static readonly HistoryEventDef Virgin_TakenM = DefDatabase<HistoryEventDef>.GetNamed("Virgin_TakenM");
[MayRequireIdeology] public static readonly HistoryEventDef Virgin_TookF = DefDatabase<HistoryEventDef>.GetNamed("Virgin_TookF");
[MayRequireIdeology] public static readonly HistoryEventDef Virgin_TookM = DefDatabase<HistoryEventDef>.GetNamed("Virgin_TookM");
[MayRequireIdeology] public static readonly PreceptDef Bestiality_OnlyVenerated = DefDatabase<PreceptDef>.GetNamed("Bestiality_OnlyVenerated");
[MayRequireIdeology] public static readonly PreceptDef Incestuos_IncestOnly = DefDatabase<PreceptDef>.GetNamed("Incestuos_IncestOnly");
[MayRequireIdeology] public static readonly PreceptDef Incestuos_Disapproved_CloseOnly = DefDatabase<PreceptDef>.GetNamed("Incestuos_Disapproved_CloseOnly");
[MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysFather = DefDatabase<PreceptDef>.GetNamed("BabyFaction_AlwaysFather");
[MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysColony = DefDatabase<PreceptDef>.GetNamed("BabyFaction_AlwaysColony");
[MayRequireIdeology] public static readonly PreceptDef Submissive_Male = DefDatabase<PreceptDef>.GetNamed("Submissive_Male");
[MayRequireIdeology] public static readonly PreceptDef Submissive_Female = DefDatabase<PreceptDef>.GetNamed("Submissive_Female");
[MayRequireIdeology] public static readonly MemeDef Zoophile;
[MayRequireIdeology] public static readonly MemeDef Rapist;
[MayRequireIdeology] public static readonly MemeDef Necrophile;
[MayRequireIdeology] public static readonly HistoryEventDef RSI_SexWithAnimal;
[MayRequireIdeology] public static readonly HistoryEventDef Raped;
[MayRequireIdeology] public static readonly HistoryEventDef RapedSlave;
[MayRequireIdeology] public static readonly HistoryEventDef RapedPrisoner;
[MayRequireIdeology] public static readonly HistoryEventDef WasRaped;
[MayRequireIdeology] public static readonly HistoryEventDef WasRapedSlave;
[MayRequireIdeology] public static readonly HistoryEventDef WasRapedPrisoner;
[MayRequireIdeology] public static readonly HistoryEventDef RSI_NonIncestuosMarriage;
[MayRequireIdeology] public static readonly HistoryEventDef RSI_NonIncestuosSex;
[MayRequireIdeology] public static readonly HistoryEventDef Virgin_TakenF;
[MayRequireIdeology] public static readonly HistoryEventDef Virgin_TakenM;
[MayRequireIdeology] public static readonly HistoryEventDef Virgin_TookF;
[MayRequireIdeology] public static readonly HistoryEventDef Virgin_TookM;
[MayRequireIdeology] public static readonly PreceptDef Bestiality_OnlyVenerated;
[MayRequireIdeology] public static readonly PreceptDef Incestuos_IncestOnly;
[MayRequireIdeology] public static readonly PreceptDef Incestuos_Disapproved_CloseOnly;
[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;
}
}

View File

@ -9,27 +9,64 @@
</IssueDef>
<HistoryEventDef>
<defName>SexWithAnimal</defName>
<defName>RSI_SexWithAnimal</defName>
<label>sex with animal</label>
<modExtensions>
<li Class="RJWSexperience.Ideology.HistoryEvents.DefExtension_PartnerDependentSecondaryEvents">
<generationRules>
<li>
<filter>
<isVeneratedAnimal>true</isVeneratedAnimal>
</filter>
<historyEventDef>RSI_SexWithVeneratedAnimal</historyEventDef>
</li>
<li>
<filter>
<isAnimal>true</isAnimal>
<isVeneratedAnimal>false</isVeneratedAnimal>
</filter>
<historyEventDef>RSI_SexWithNonVeneratedAnimal</historyEventDef>
</li>
<li>
<filter>
<isAnimal>true</isAnimal>
<hasOneOfRelations>
<li>Bond</li>
</hasOneOfRelations>
</filter>
<historyEventDef>RSI_SexWithBondedAnimal</historyEventDef>
</li>
<li>
<filter>
<isAnimal>true</isAnimal>
<hasNoneOfRelations>
<li>Bond</li>
</hasNoneOfRelations>
</filter>
<historyEventDef>RSI_SexWithNonBondAnimal</historyEventDef>
</li>
</generationRules>
</li>
</modExtensions>
</HistoryEventDef>
<HistoryEventDef>
<defName>SexWithVeneratedAnimal</defName>
<defName>RSI_SexWithVeneratedAnimal</defName>
<label>sex with venerated animal</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>SexWithNonVeneratedAnimal</defName>
<defName>RSI_SexWithNonVeneratedAnimal</defName>
<label>sex with non venerated animal</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>SexWithBondedAnimal</defName>
<defName>RSI_SexWithBondedAnimal</defName>
<label>Sex with bonded</label>
</HistoryEventDef>
<HistoryEventDef>
<defName>SexWithNonBondAnimal</defName>
<defName>RSI_SexWithNonBondAnimal</defName>
<label>Sex with non Bonded</label>
</HistoryEventDef>
@ -52,21 +89,21 @@
</associatedMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>SexWithVeneratedAnimal</eventDef>
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Abhorrent</thought>
</li>
<li Class="RJWSexperience.Ideology.Precepts.PreceptComp_KnowsMemoryThoughtTagged">
<eventDef>SexWithVeneratedAnimal</eventDef>
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Know_Abhorrent</thought>
<tag>BeenRaped</tag>
<exclusive>true</exclusive>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>SexWithAnimal</eventDef>
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Abhorrent</thought>
</li>
<li Class="RJWSexperience.Ideology.Precepts.PreceptComp_KnowsMemoryThoughtTagged">
<eventDef>SexWithAnimal</eventDef>
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Know_Abhorrent</thought>
<tag>BeenRaped</tag>
<exclusive>true</exclusive>
@ -106,21 +143,21 @@
</associatedMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>SexWithVeneratedAnimal</eventDef>
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Horrible</thought>
</li>
<li Class="RJWSexperience.Ideology.Precepts.PreceptComp_KnowsMemoryThoughtTagged">
<eventDef>SexWithVeneratedAnimal</eventDef>
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Know_Horrible</thought>
<tag>BeenRaped</tag>
<exclusive>true</exclusive>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>SexWithAnimal</eventDef>
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Horrible</thought>
</li>
<li Class="RJWSexperience.Ideology.Precepts.PreceptComp_KnowsMemoryThoughtTagged">
<eventDef>SexWithAnimal</eventDef>
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Know_Horrible</thought>
<tag>BeenRaped</tag>
<exclusive>true</exclusive>
@ -160,21 +197,21 @@
</associatedMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>SexWithVeneratedAnimal</eventDef>
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Disapproved</thought>
</li>
<li Class="RJWSexperience.Ideology.Precepts.PreceptComp_KnowsMemoryThoughtTagged">
<eventDef>SexWithVeneratedAnimal</eventDef>
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Know_Disapproved</thought>
<tag>BeenRaped</tag>
<exclusive>true</exclusive>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>SexWithAnimal</eventDef>
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Disapproved</thought>
</li>
<li Class="RJWSexperience.Ideology.Precepts.PreceptComp_KnowsMemoryThoughtTagged">
<eventDef>SexWithAnimal</eventDef>
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Know_Disapproved</thought>
<tag>BeenRaped</tag>
<exclusive>true</exclusive>
@ -227,23 +264,23 @@
</requiredMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>SexWithNonVeneratedAnimal</eventDef>
<eventDef>RSI_SexWithNonVeneratedAnimal</eventDef>
<thought>Bestiality_Nonvenerated_Disapproved</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>SexWithNonVeneratedAnimal</eventDef>
<eventDef>RSI_SexWithNonVeneratedAnimal</eventDef>
<thought>Bestiality_Nonvenerated_Know_Disapproved</thought>
<description>Someone sex with any animal</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>SexWithVeneratedAnimal</eventDef>
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Honorable</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>SexWithVeneratedAnimal</eventDef>
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Know_Honorable</thought>
<description>Someone sex with animal</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
@ -290,23 +327,23 @@
</requiredMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>SexWithNonBondAnimal</eventDef>
<eventDef>RSI_SexWithNonBondAnimal</eventDef>
<thought>Bestiality_NonBonded_Disapproved</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>SexWithNonBondAnimal</eventDef>
<eventDef>RSI_SexWithNonBondAnimal</eventDef>
<thought>Bestiality_NonBonded_Know_Disapproved</thought>
<description>Someone sex with any animal</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>SexWithBondedAnimal</eventDef>
<eventDef>RSI_SexWithBondedAnimal</eventDef>
<thought>Bestiality_Bond_Approved</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>SexWithBondedAnimal</eventDef>
<eventDef>RSI_SexWithBondedAnimal</eventDef>
<thought>Bestiality_Bond_Approved_Know</thought>
<description>Someone sex with non bonded animal</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
@ -357,23 +394,23 @@
</requiredMemes>
<comps>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>SexWithAnimal</eventDef>
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Honorable</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>SexWithAnimal</eventDef>
<eventDef>RSI_SexWithAnimal</eventDef>
<thought>Bestiality_Know_Honorable</thought>
<description>Someone sex with animal</description>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_SelfTookMemoryThought">
<eventDef>SexWithVeneratedAnimal</eventDef>
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Honorable</thought>
<onlyForNonSlaves>true</onlyForNonSlaves>
</li>
<li Class="PreceptComp_KnowsMemoryThought">
<eventDef>SexWithVeneratedAnimal</eventDef>
<eventDef>RSI_SexWithVeneratedAnimal</eventDef>
<thought>Bestiality_Know_Honorable</thought>
<description>Someone sex with animal</description>
<onlyForNonSlaves>true</onlyForNonSlaves>