2022-07-26 03:55:56 +00:00
|
|
|
|
using HarmonyLib;
|
|
|
|
|
using RimWorld;
|
|
|
|
|
using rjw;
|
|
|
|
|
using RJWSexperience.Ideology.HistoryEvents;
|
|
|
|
|
using RJWSexperience.Ideology.Precepts;
|
|
|
|
|
using System.Collections.Generic;
|
2022-11-20 13:47:55 +00:00
|
|
|
|
using System.Linq;
|
2022-07-26 03:55:56 +00:00
|
|
|
|
using Verse;
|
|
|
|
|
|
|
|
|
|
namespace RJWSexperience.Ideology.Patches
|
|
|
|
|
{
|
|
|
|
|
[HarmonyPatch(typeof(MarriageCeremonyUtility), nameof(MarriageCeremonyUtility.Married))]
|
|
|
|
|
public static class Rimworld_Patch_Marriage
|
|
|
|
|
{
|
|
|
|
|
public static void Postfix(Pawn firstPawn, Pawn secondPawn)
|
|
|
|
|
{
|
|
|
|
|
RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(firstPawn, secondPawn);
|
|
|
|
|
RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(secondPawn, firstPawn);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HarmonyPatch(typeof(RitualOutcomeEffectWorker_FromQuality), "GiveMemoryToPawn")]
|
|
|
|
|
public static class Rimworld_Patch_RitualOutcome_DontGiveMemoryToAnimals
|
|
|
|
|
{
|
|
|
|
|
public static bool Prefix(Pawn pawn)
|
|
|
|
|
{
|
|
|
|
|
return !pawn.IsAnimal();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HarmonyPatch(typeof(IdeoFoundation), nameof(IdeoFoundation.CanAdd))]
|
|
|
|
|
public static class Rimworld_Patch_IdeoFoundation
|
|
|
|
|
{
|
|
|
|
|
public static void Postfix(PreceptDef precept, ref IdeoFoundation __instance, ref AcceptanceReport __result)
|
|
|
|
|
{
|
|
|
|
|
DefExtension_MultipleMemesRequired extension = precept.GetModExtension<DefExtension_MultipleMemesRequired>();
|
|
|
|
|
|
|
|
|
|
if (extension == null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (extension.requiredAllMemes.NullOrEmpty())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < extension.requiredAllMemes.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
if (!__instance.ideo.memes.Contains(extension.requiredAllMemes[i]))
|
|
|
|
|
{
|
|
|
|
|
List<string> report = new List<string>();
|
|
|
|
|
foreach (MemeDef meme in extension.requiredAllMemes) report.Add(meme.LabelCap);
|
|
|
|
|
|
|
|
|
|
__result = new AcceptanceReport("RequiresMeme".Translate() + ": " + report.ToCommaList());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-11-20 13:47:55 +00:00
|
|
|
|
|
|
|
|
|
public static class Rimworld_Patch_IncestuousManualRomance
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Override incestuous check in the manual romance
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="one">Pawn to try do romance</param>
|
|
|
|
|
/// <param name="two">Target for romance</param>
|
|
|
|
|
/// <param name="__result">Result of the original method</param>
|
|
|
|
|
/// <returns>Run original method implementation</returns>
|
|
|
|
|
[HarmonyPatch(typeof(RelationsUtility), "Incestuous")]
|
|
|
|
|
public static bool Prefix(Pawn one, Pawn two, ref bool __result)
|
|
|
|
|
{
|
|
|
|
|
__result = RsiIncestuous(one, two);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Check if Ideology allows romance attempt
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="one">Pawn to try do romance</param>
|
|
|
|
|
/// <param name="two">Target for romance</param>
|
|
|
|
|
/// <returns>Forbid romance option</returns>
|
|
|
|
|
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 == VariousDefOf.Incestuos_Disapproved ||
|
|
|
|
|
incestuousPrecept == VariousDefOf.Incestuos_Forbidden)
|
|
|
|
|
{
|
|
|
|
|
return relationDegree < BloodRelationDegree.NotRelated;
|
|
|
|
|
}
|
|
|
|
|
else if (incestuousPrecept == VariousDefOf.Incestuos_Free)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
else if (incestuousPrecept == VariousDefOf.Incestuos_Disapproved_CloseOnly)
|
|
|
|
|
{
|
|
|
|
|
return relationDegree == BloodRelationDegree.CloseRelative;
|
|
|
|
|
}
|
|
|
|
|
else if (incestuousPrecept == VariousDefOf.Incestuos_IncestOnly)
|
|
|
|
|
{
|
|
|
|
|
return relationDegree == BloodRelationDegree.NotRelated;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Modded incestuous precept?
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-07-26 03:55:56 +00:00
|
|
|
|
}
|