mirror of
				https://github.com/amevarashi/RJW-Sexperience.git
				synced 2024-08-14 23:54:08 +00:00 
			
		
		
		
	Implement HistoryEvent overrides
This commit is contained in:
		
							parent
							
								
									724bcbe86b
								
							
						
					
					
						commit
						bfddab0cf1
					
				
					 8 changed files with 213 additions and 98 deletions
				
			
		| 
						 | 
					@ -0,0 +1,29 @@
 | 
				
			||||||
 | 
					using RimWorld;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Diagnostics.CodeAnalysis;
 | 
				
			||||||
 | 
					using Verse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace RJWSexperience.Ideology
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						public class HistoryEventDefExtension_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);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -37,7 +37,7 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
			return true;
 | 
								return true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public static bool IsIncest(Pawn pawn, Pawn partner, bool close)
 | 
							public static bool IsIncest(Pawn pawn, Pawn partner)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			IEnumerable<PawnRelationDef> relations = pawn.GetRelations(partner);
 | 
								IEnumerable<PawnRelationDef> relations = pawn.GetRelations(partner);
 | 
				
			||||||
			if (relations.EnumerableNullOrEmpty())
 | 
								if (relations.EnumerableNullOrEmpty())
 | 
				
			||||||
| 
						 | 
					@ -45,16 +45,9 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			foreach (PawnRelationDef relation in relations)
 | 
								foreach (PawnRelationDef relation in relations)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (close)
 | 
									if (relation.familyByBloodRelation)
 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					if (relation.incestOpinionOffset < 0)
 | 
					 | 
				
			||||||
					return true;
 | 
										return true;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
				else if (relation.familyByBloodRelation)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					return true;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			return false;
 | 
								return false;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,6 +21,10 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
		[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
 | 
							[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
 | 
				
			||||||
		public List<PawnRelationDef> hasNoneOfRelations;
 | 
							public List<PawnRelationDef> hasNoneOfRelations;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private bool initialized = false;
 | 
				
			||||||
 | 
							private HashSet<PawnRelationDef> hasOneOfRelationsHashed;
 | 
				
			||||||
 | 
							private HashSet<PawnRelationDef> hasNoneOfRelationsHashed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public bool Applies(Pawn pawn, Pawn partner)
 | 
							public bool Applies(Pawn pawn, Pawn partner)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (isAnimal != null && isAnimal != partner.IsAnimal())
 | 
								if (isAnimal != null && isAnimal != partner.IsAnimal())
 | 
				
			||||||
| 
						 | 
					@ -35,34 +39,48 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
			//if (isAlien != null && isAlien != partner)
 | 
								//if (isAlien != null && isAlien != partner)
 | 
				
			||||||
			//	return false;
 | 
								//	return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (!hasOneOfRelations.NullOrEmpty())
 | 
								if (!CheckRelations(pawn, partner))
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				if (pawn.relations == null)
 | 
					 | 
				
			||||||
				return false;
 | 
									return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				bool found = false;
 | 
								return true;
 | 
				
			||||||
				foreach (PawnRelationDef relationDef in hasOneOfRelations)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					if (pawn.relations?.DirectRelationExists(relationDef, partner) == true)
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						found = true;
 | 
					 | 
				
			||||||
						break;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
				}
 | 
					
 | 
				
			||||||
				if (!found)
 | 
							private bool CheckRelations(Pawn pawn, Pawn partner)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (!initialized)
 | 
				
			||||||
 | 
									Initialize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (hasNoneOfRelationsHashed == null && hasOneOfRelationsHashed == null)
 | 
				
			||||||
 | 
									return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								IEnumerable<PawnRelationDef> relations = pawn.GetRelations(partner);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (hasOneOfRelationsHashed != null)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (relations.EnumerableNullOrEmpty())
 | 
				
			||||||
 | 
										return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (!hasOneOfRelationsHashed.Overlaps(relations))
 | 
				
			||||||
					return false;
 | 
										return false;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (!hasNoneOfRelations.NullOrEmpty() && pawn.relations != null)
 | 
								if (hasNoneOfRelationsHashed != null && !relations.EnumerableNullOrEmpty() && hasNoneOfRelationsHashed.Overlaps(relations))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				foreach (PawnRelationDef relationDef in hasNoneOfRelations)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					if (pawn.relations.DirectRelationExists(relationDef, partner))
 | 
					 | 
				
			||||||
				return false;
 | 
									return false;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			return true;
 | 
								return true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private void Initialize()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (!hasNoneOfRelations.NullOrEmpty())
 | 
				
			||||||
 | 
									hasNoneOfRelationsHashed = new HashSet<PawnRelationDef>(hasNoneOfRelations);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (!hasOneOfRelations.NullOrEmpty())
 | 
				
			||||||
 | 
									hasOneOfRelationsHashed = new HashSet<PawnRelationDef>(hasOneOfRelations);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								initialized = true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,11 +16,28 @@ namespace RJWSexperience.Ideology.Patches
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer), tag.Named(HistoryEventArgsNamesCustom.Tag), partner.Named(HistoryEventArgsNamesCustom.Partner));
 | 
								return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer), tag.Named(HistoryEventArgsNamesCustom.Tag), partner.Named(HistoryEventArgsNamesCustom.Partner));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public static HistoryEvent CreateEvent(this HistoryEventDef def, Pawn pawn)
 | 
							public static HistoryEvent CreateEvent(this HistoryEventDef def, Pawn pawn)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer));
 | 
								return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public static HistoryEvent CreateEventWithPartner(this HistoryEventDef def, Pawn pawn, Pawn partner)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								HistoryEventDefExtension_PartnerDependentOverrides overrides = def.GetModExtension<HistoryEventDefExtension_PartnerDependentOverrides>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (overrides == null)
 | 
				
			||||||
 | 
									return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer), partner.Named(HistoryEventArgsNamesCustom.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(HistoryEventArgsNamesCustom.Partner));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public static Faction GetFactionUsingPrecept(this Pawn baby, out Ideo ideo)
 | 
							public static Faction GetFactionUsingPrecept(this Pawn baby, out Ideo ideo)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Faction playerfaction = Find.FactionManager.OfPlayer;
 | 
								Faction playerfaction = Find.FactionManager.OfPlayer;
 | 
				
			||||||
| 
						 | 
					@ -90,56 +107,60 @@ namespace RJWSexperience.Ideology.Patches
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		public static void Postfix(SexProps props)
 | 
							public static void Postfix(SexProps props)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Pawn pawn = props.pawn;
 | 
								InteractionDefExtension_HistoryEvents interactionEvents = props.dictionaryKey.GetModExtension<InteractionDefExtension_HistoryEvents>();
 | 
				
			||||||
			Pawn partner = props.partner;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (props.hasPartner())
 | 
								if (props.hasPartner())
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (xxx.is_human(pawn))
 | 
									if (xxx.is_human(props.pawn))
 | 
				
			||||||
					AfterSexHuman(pawn, partner, props.isRape);
 | 
										AfterSexHuman(props.pawn, props.partner, props.isRape);
 | 
				
			||||||
				else if (xxx.is_human(partner))
 | 
									else if (xxx.is_human(props.partner))
 | 
				
			||||||
					AfterSexHuman(partner, pawn, false, true);
 | 
										AfterSexHuman(props.partner, props.pawn, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (xxx.is_human(props.partner) && props.isRape)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										if (props.partner.IsPrisoner)
 | 
				
			||||||
 | 
											props.partner.guest.will = Math.Max(0, props.partner.guest.will - 0.2f);
 | 
				
			||||||
 | 
										if (props.partner.IsSlave)
 | 
				
			||||||
 | 
											RapeEffectSlave(props.partner);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			InteractionDefExtension_HistoryEvents interactionEvents = props.dictionaryKey.GetModExtension<InteractionDefExtension_HistoryEvents>();
 | 
					 | 
				
			||||||
				if (interactionEvents != null)
 | 
									if (interactionEvents != null)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					foreach (HistoryEventDef eventDef in interactionEvents.pawnEvents)
 | 
										foreach (HistoryEventDef eventDef in interactionEvents.pawnEvents)
 | 
				
			||||||
					Find.HistoryEventsManager.RecordEvent(eventDef.CreateEvent(pawn));
 | 
											Find.HistoryEventsManager.RecordEvent(eventDef.CreateEventWithPartner(props.pawn, props.partner));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					foreach (HistoryEventDef eventDef in interactionEvents.partnerEvents)
 | 
										foreach (HistoryEventDef eventDef in interactionEvents.partnerEvents)
 | 
				
			||||||
					Find.HistoryEventsManager.RecordEvent(eventDef.CreateEvent(partner));
 | 
											Find.HistoryEventsManager.RecordEvent(eventDef.CreateEventWithPartner(props.partner, props.pawn));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (interactionEvents != null)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										foreach (HistoryEventDef eventDef in interactionEvents.pawnEvents)
 | 
				
			||||||
 | 
											Find.HistoryEventsManager.RecordEvent(eventDef.CreateEvent(props.pawn));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public static void AfterSexHuman(Pawn human, Pawn partner, bool rape, bool isHumanReceiving = false)
 | 
							public static void AfterSexHuman(Pawn human, Pawn partner, bool rape)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			HistoryEventDef incestEvent = GetIncestTypeEvent(human, partner);
 | 
								Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_NonIncestuosSex.CreateEventWithPartner(human, partner));
 | 
				
			||||||
			Find.HistoryEventsManager.RecordEvent(incestEvent.CreateEvent(human));
 | 
								Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_NonIncestuosSex.CreateEventWithPartner(partner, human));
 | 
				
			||||||
			Find.HistoryEventsManager.RecordEvent(incestEvent.CreateEvent(partner));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (partner.IsAnimal())
 | 
								if (partner.IsAnimal())
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				string tag = HETag.Gender(human);
 | 
					 | 
				
			||||||
				if (isHumanReceiving && rape)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					tag += HETag.BeenRaped;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
					if (human.IsSlave)
 | 
					 | 
				
			||||||
						RapeEffectSlave(human);
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				if (human.Ideo?.IsVeneratedAnimal(partner) ?? false)
 | 
									if (human.Ideo?.IsVeneratedAnimal(partner) ?? false)
 | 
				
			||||||
					Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.CreateTaggedEvent(human, tag, partner));
 | 
										Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.CreateEventWithPartner(human, partner));
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
					Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithNonVeneratedAnimal.CreateTaggedEvent(human, tag, partner));
 | 
										Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithNonVeneratedAnimal.CreateEventWithPartner(human, partner));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (human.Ideo != null && human.relations?.DirectRelationExists(PawnRelationDefOf.Bond, partner) == true)
 | 
									if (human.Ideo != null && human.relations?.DirectRelationExists(PawnRelationDefOf.Bond, partner) == true)
 | 
				
			||||||
					Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithBondedAnimal.CreateTaggedEvent(human, tag, partner));
 | 
										Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithBondedAnimal.CreateEventWithPartner(human, partner));
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
					Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithNonBondAnimal.CreateTaggedEvent(human, tag, partner));
 | 
										Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithNonBondAnimal.CreateEventWithPartner(human, partner));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.CreateTaggedEvent(human, tag, partner));
 | 
									Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.CreateEventWithPartner(human, partner));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else if (xxx.is_human(partner))
 | 
								else if (xxx.is_human(partner))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
| 
						 | 
					@ -149,13 +170,11 @@ namespace RJWSexperience.Ideology.Patches
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedSlave.CreateTaggedEvent(human, HETag.Rape + HETag.Gender(human), partner));
 | 
											Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedSlave.CreateTaggedEvent(human, HETag.Rape + HETag.Gender(human), partner));
 | 
				
			||||||
						Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedSlave.CreateTaggedEvent(partner, HETag.BeenRaped + HETag.Gender(partner), human));
 | 
											Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedSlave.CreateTaggedEvent(partner, HETag.BeenRaped + HETag.Gender(partner), human));
 | 
				
			||||||
						RapeEffectSlave(partner);
 | 
					 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					else if (partner.IsPrisoner)
 | 
										else if (partner.IsPrisoner)
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedPrisoner.CreateTaggedEvent(human, HETag.Rape + HETag.Gender(human), partner));
 | 
											Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedPrisoner.CreateTaggedEvent(human, HETag.Rape + HETag.Gender(human), partner));
 | 
				
			||||||
						Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedPrisoner.CreateTaggedEvent(partner, HETag.BeenRaped + HETag.Gender(partner), human));
 | 
											Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedPrisoner.CreateTaggedEvent(partner, HETag.BeenRaped + HETag.Gender(partner), human));
 | 
				
			||||||
						partner.guest.will = Math.Max(0, partner.guest.will - 0.2f);
 | 
					 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					else
 | 
										else
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
| 
						 | 
					@ -166,17 +185,6 @@ namespace RJWSexperience.Ideology.Patches
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private static HistoryEventDef GetIncestTypeEvent(Pawn pawn, Pawn partner)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			if (IdeoUtility.IsIncest(pawn, partner, true))
 | 
					 | 
				
			||||||
				return VariousDefOf.RSI_CloseRelativeSex;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (IdeoUtility.IsIncest(pawn, partner, false))
 | 
					 | 
				
			||||||
				return VariousDefOf.RSI_IncestuosSex;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			return VariousDefOf.RSI_NonIncestuosSex;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		public static void RapeEffectSlave(Pawn victim)
 | 
							public static void RapeEffectSlave(Pawn victim)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Need_Suppression suppression = victim.needs.TryGetNeed<Need_Suppression>();
 | 
								Need_Suppression suppression = victim.needs.TryGetNeed<Need_Suppression>();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,21 +12,8 @@ namespace RJWSexperience.Ideology.Patches
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		public static void Postfix(Pawn firstPawn, Pawn secondPawn)
 | 
							public static void Postfix(Pawn firstPawn, Pawn secondPawn)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (IdeoUtility.IsIncest(firstPawn, secondPawn, false))
 | 
								Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_NonIncestuosMarriage.CreateEventWithPartner(firstPawn, secondPawn));
 | 
				
			||||||
			{
 | 
								Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_NonIncestuosMarriage.CreateEventWithPartner(secondPawn, firstPawn));
 | 
				
			||||||
				if (IdeoUtility.IsIncest(firstPawn, secondPawn, true))
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_CloseRelativeMarriage.CreateEvent(firstPawn));
 | 
					 | 
				
			||||||
					Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_CloseRelativeMarriage.CreateEvent(secondPawn));
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_IncestuosMarriage.CreateEvent(firstPawn));
 | 
					 | 
				
			||||||
				Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_IncestuosMarriage.CreateEvent(secondPawn));
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_NonIncestuosMarriage.CreateEvent(firstPawn));
 | 
					 | 
				
			||||||
				Find.HistoryEventsManager.RecordEvent(VariousDefOf.RSI_NonIncestuosMarriage.CreateEvent(secondPawn));
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,7 +23,7 @@ namespace RJWSexperience.Ideology.Patches
 | 
				
			||||||
		public static void Postfix(Pawn otherPawn, Pawn ___pawn, ref float __result)
 | 
							public static void Postfix(Pawn otherPawn, Pawn ___pawn, ref float __result)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Ideo ideo = ___pawn.Ideo;
 | 
								Ideo ideo = ___pawn.Ideo;
 | 
				
			||||||
			if (ideo?.HasPrecept(VariousDefOf.Incestuos_IncestOnly) == true && IdeoUtility.IsIncest(___pawn, otherPawn, false))
 | 
								if (ideo?.HasPrecept(VariousDefOf.Incestuos_IncestOnly) == true && IdeoUtility.IsIncest(___pawn, otherPawn))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				__result *= 8f;
 | 
									__result *= 8f;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,6 +43,7 @@
 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
    <Compile Include="GlobalSuppressions.cs" />
 | 
					    <Compile Include="GlobalSuppressions.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="Ideology\HistoryEventDefExtension_PartnerDependentOverrides.cs" />
 | 
				
			||||||
    <Compile Include="Ideology\InteractionDefExtension_HistoryEvents.cs" />
 | 
					    <Compile Include="Ideology\InteractionDefExtension_HistoryEvents.cs" />
 | 
				
			||||||
    <Compile Include="Ideology\GoodwillSituationWorker_MemeCompatibility.cs" />
 | 
					    <Compile Include="Ideology\GoodwillSituationWorker_MemeCompatibility.cs" />
 | 
				
			||||||
    <Compile Include="Harmony.cs" />
 | 
					    <Compile Include="Harmony.cs" />
 | 
				
			||||||
| 
						 | 
					@ -58,6 +59,7 @@
 | 
				
			||||||
    <Compile Include="Ideology\Precepts\DefExtension_ModifyBestialityMtb.cs" />
 | 
					    <Compile Include="Ideology\Precepts\DefExtension_ModifyBestialityMtb.cs" />
 | 
				
			||||||
    <Compile Include="Ideology\Precepts\DefExtension_ModifyPreference.cs" />
 | 
					    <Compile Include="Ideology\Precepts\DefExtension_ModifyPreference.cs" />
 | 
				
			||||||
    <Compile Include="Ideology\Precepts\DefExtension_MultipleMemesRequired.cs" />
 | 
					    <Compile Include="Ideology\Precepts\DefExtension_MultipleMemesRequired.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="Ideology\PartnerFilter.cs" />
 | 
				
			||||||
    <Compile Include="Ideology\Precepts\PreceptComp_KnowsMemoryThoughtTagged.cs" />
 | 
					    <Compile Include="Ideology\Precepts\PreceptComp_KnowsMemoryThoughtTagged.cs" />
 | 
				
			||||||
    <Compile Include="Ideology\Rituals\JobGiver_GangbangConsensual.cs" />
 | 
					    <Compile Include="Ideology\Rituals\JobGiver_GangbangConsensual.cs" />
 | 
				
			||||||
    <Compile Include="Ideology\Rituals\LordJob_Rituals.cs" />
 | 
					    <Compile Include="Ideology\Rituals\LordJob_Rituals.cs" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,18 +26,8 @@ namespace RJWSexperience.Ideology
 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef WasRaped = DefDatabase<HistoryEventDef>.GetNamed("WasRaped");
 | 
							[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 WasRapedSlave = DefDatabase<HistoryEventDef>.GetNamed("WasRapedSlave");
 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef WasRapedPrisoner = DefDatabase<HistoryEventDef>.GetNamed("WasRapedPrisoner");
 | 
							[MayRequireIdeology] public static readonly HistoryEventDef WasRapedPrisoner = DefDatabase<HistoryEventDef>.GetNamed("WasRapedPrisoner");
 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef VaginalSex = DefDatabase<HistoryEventDef>.GetNamed("VaginalSex");
 | 
					 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef AnalSex = DefDatabase<HistoryEventDef>.GetNamed("AnalSex");
 | 
					 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef OralSex = DefDatabase<HistoryEventDef>.GetNamed("OralSex");
 | 
					 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef MiscSex = DefDatabase<HistoryEventDef>.GetNamed("MiscSex");
 | 
					 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef PromiscuousSex = DefDatabase<HistoryEventDef>.GetNamed("PromiscuousSex");
 | 
					 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef RSI_CloseRelativeMarriage = DefDatabase<HistoryEventDef>.GetNamed("RSI_CloseRelativeMarriage");
 | 
					 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef RSI_IncestuosMarriage = DefDatabase<HistoryEventDef>.GetNamed("RSI_IncestuosMarriage");
 | 
					 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef RSI_NonIncestuosMarriage = DefDatabase<HistoryEventDef>.GetNamed("RSI_NonIncestuosMarriage");
 | 
							[MayRequireIdeology] public static readonly HistoryEventDef RSI_NonIncestuosMarriage = DefDatabase<HistoryEventDef>.GetNamed("RSI_NonIncestuosMarriage");
 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef RSI_CloseRelativeSex = DefDatabase<HistoryEventDef>.GetNamed("RSI_CloseRelativeSex");
 | 
					 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef RSI_IncestuosSex = DefDatabase<HistoryEventDef>.GetNamed("RSI_IncestuosSex");
 | 
					 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef RSI_NonIncestuosSex = DefDatabase<HistoryEventDef>.GetNamed("RSI_NonIncestuosSex");
 | 
							[MayRequireIdeology] public static readonly HistoryEventDef RSI_NonIncestuosSex = DefDatabase<HistoryEventDef>.GetNamed("RSI_NonIncestuosSex");
 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef SexWithCorpse = DefDatabase<HistoryEventDef>.GetNamed("SexWithCorpse");
 | 
					 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef Virgin_TakenF = DefDatabase<HistoryEventDef>.GetNamed("Virgin_TakenF");
 | 
							[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_TakenM = DefDatabase<HistoryEventDef>.GetNamed("Virgin_TakenM");
 | 
				
			||||||
		[MayRequireIdeology] public static readonly HistoryEventDef Virgin_TookF = DefDatabase<HistoryEventDef>.GetNamed("Virgin_TookF");
 | 
							[MayRequireIdeology] public static readonly HistoryEventDef Virgin_TookF = DefDatabase<HistoryEventDef>.GetNamed("Virgin_TookF");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,6 +21,50 @@
 | 
				
			||||||
  <HistoryEventDef>
 | 
					  <HistoryEventDef>
 | 
				
			||||||
    <defName>RSI_NonIncestuosMarriage</defName>
 | 
					    <defName>RSI_NonIncestuosMarriage</defName>
 | 
				
			||||||
    <label>Non-incestuos marriage</label>
 | 
					    <label>Non-incestuos marriage</label>
 | 
				
			||||||
 | 
					    <modExtensions>
 | 
				
			||||||
 | 
					      <li Class="RJWSexperience.Ideology.HistoryEventDefExtension_PartnerDependentOverrides">
 | 
				
			||||||
 | 
					        <overrideRules>
 | 
				
			||||||
 | 
					          <li>
 | 
				
			||||||
 | 
					            <filter>
 | 
				
			||||||
 | 
					              <hasOneOfRelations>
 | 
				
			||||||
 | 
					                <li>Parent</li>
 | 
				
			||||||
 | 
					                <li>Child</li>
 | 
				
			||||||
 | 
					                <li>Sibling</li>
 | 
				
			||||||
 | 
					                <li>HalfSibling</li>
 | 
				
			||||||
 | 
					                <li>Grandparent</li>
 | 
				
			||||||
 | 
					                <li>Grandchild</li>
 | 
				
			||||||
 | 
					                <li>NephewOrNiece</li>
 | 
				
			||||||
 | 
					                <li>UncleOrAunt</li>
 | 
				
			||||||
 | 
					              </hasOneOfRelations>
 | 
				
			||||||
 | 
					            </filter>
 | 
				
			||||||
 | 
					            <historyEventDef>RSI_CloseRelativeMarriage</historyEventDef>
 | 
				
			||||||
 | 
					          </li>
 | 
				
			||||||
 | 
					          <li>
 | 
				
			||||||
 | 
					            <filter>
 | 
				
			||||||
 | 
					              <hasOneOfRelations>
 | 
				
			||||||
 | 
					                <li>Parent</li>
 | 
				
			||||||
 | 
					                <li>Child</li>
 | 
				
			||||||
 | 
					                <li>Sibling</li>
 | 
				
			||||||
 | 
					                <li>HalfSibling</li>
 | 
				
			||||||
 | 
					                <li>Grandparent</li>
 | 
				
			||||||
 | 
					                <li>Grandchild</li>
 | 
				
			||||||
 | 
					                <li>NephewOrNiece</li>
 | 
				
			||||||
 | 
					                <li>UncleOrAunt</li>
 | 
				
			||||||
 | 
					                <li>GreatGrandparent</li>
 | 
				
			||||||
 | 
					                <li>GreatGrandchild</li>
 | 
				
			||||||
 | 
					                <li>GranduncleOrGrandaunt</li>
 | 
				
			||||||
 | 
					                <li>GrandnephewOrGrandniece</li>
 | 
				
			||||||
 | 
					                <li>CousinOnceRemoved</li>
 | 
				
			||||||
 | 
					                <li>SecondCousin</li>
 | 
				
			||||||
 | 
					                <li>Cousin</li>
 | 
				
			||||||
 | 
					                <li>Kin</li>
 | 
				
			||||||
 | 
					              </hasOneOfRelations>
 | 
				
			||||||
 | 
					            </filter>
 | 
				
			||||||
 | 
					            <historyEventDef>RSI_IncestuosMarriage</historyEventDef>
 | 
				
			||||||
 | 
					          </li>
 | 
				
			||||||
 | 
					        </overrideRules>
 | 
				
			||||||
 | 
					      </li>
 | 
				
			||||||
 | 
					    </modExtensions>
 | 
				
			||||||
  </HistoryEventDef>
 | 
					  </HistoryEventDef>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <HistoryEventDef>
 | 
					  <HistoryEventDef>
 | 
				
			||||||
| 
						 | 
					@ -36,6 +80,50 @@
 | 
				
			||||||
  <HistoryEventDef>
 | 
					  <HistoryEventDef>
 | 
				
			||||||
    <defName>RSI_NonIncestuosSex</defName>
 | 
					    <defName>RSI_NonIncestuosSex</defName>
 | 
				
			||||||
    <label>Non-incestuos sex</label>
 | 
					    <label>Non-incestuos sex</label>
 | 
				
			||||||
 | 
					    <modExtensions>
 | 
				
			||||||
 | 
					      <li Class="RJWSexperience.Ideology.HistoryEventDefExtension_PartnerDependentOverrides">
 | 
				
			||||||
 | 
					        <overrideRules>
 | 
				
			||||||
 | 
					          <li>
 | 
				
			||||||
 | 
					            <filter>
 | 
				
			||||||
 | 
					              <hasOneOfRelations>
 | 
				
			||||||
 | 
					                <li>Parent</li>
 | 
				
			||||||
 | 
					                <li>Child</li>
 | 
				
			||||||
 | 
					                <li>Sibling</li>
 | 
				
			||||||
 | 
					                <li>HalfSibling</li>
 | 
				
			||||||
 | 
					                <li>Grandparent</li>
 | 
				
			||||||
 | 
					                <li>Grandchild</li>
 | 
				
			||||||
 | 
					                <li>NephewOrNiece</li>
 | 
				
			||||||
 | 
					                <li>UncleOrAunt</li>
 | 
				
			||||||
 | 
					              </hasOneOfRelations>
 | 
				
			||||||
 | 
					            </filter>
 | 
				
			||||||
 | 
					            <historyEventDef>RSI_CloseRelativeSex</historyEventDef>
 | 
				
			||||||
 | 
					          </li>
 | 
				
			||||||
 | 
					          <li>
 | 
				
			||||||
 | 
					            <filter>
 | 
				
			||||||
 | 
					              <hasOneOfRelations>
 | 
				
			||||||
 | 
					                <li>Parent</li>
 | 
				
			||||||
 | 
					                <li>Child</li>
 | 
				
			||||||
 | 
					                <li>Sibling</li>
 | 
				
			||||||
 | 
					                <li>HalfSibling</li>
 | 
				
			||||||
 | 
					                <li>Grandparent</li>
 | 
				
			||||||
 | 
					                <li>Grandchild</li>
 | 
				
			||||||
 | 
					                <li>NephewOrNiece</li>
 | 
				
			||||||
 | 
					                <li>UncleOrAunt</li>
 | 
				
			||||||
 | 
					                <li>GreatGrandparent</li>
 | 
				
			||||||
 | 
					                <li>GreatGrandchild</li>
 | 
				
			||||||
 | 
					                <li>GranduncleOrGrandaunt</li>
 | 
				
			||||||
 | 
					                <li>GrandnephewOrGrandniece</li>
 | 
				
			||||||
 | 
					                <li>CousinOnceRemoved</li>
 | 
				
			||||||
 | 
					                <li>SecondCousin</li>
 | 
				
			||||||
 | 
					                <li>Cousin</li>
 | 
				
			||||||
 | 
					                <li>Kin</li>
 | 
				
			||||||
 | 
					              </hasOneOfRelations>
 | 
				
			||||||
 | 
					            </filter>
 | 
				
			||||||
 | 
					            <historyEventDef>RSI_IncestuosSex</historyEventDef>
 | 
				
			||||||
 | 
					          </li>
 | 
				
			||||||
 | 
					        </overrideRules>
 | 
				
			||||||
 | 
					      </li>
 | 
				
			||||||
 | 
					    </modExtensions>
 | 
				
			||||||
  </HistoryEventDef>
 | 
					  </HistoryEventDef>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <!-- Precepts -->
 | 
					  <!-- Precepts -->
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue