mirror of
https://gitgud.io/LonelyRain/rjw-quirks.git
synced 2024-08-15 00:03:31 +00:00
Updated to refactored quirk removal
Updated to parity with quirk removal updates that added helper functions
This commit is contained in:
parent
7585da099c
commit
be5f2bdf9a
17 changed files with 151 additions and 395 deletions
Binary file not shown.
|
@ -1,64 +0,0 @@
|
||||||
using rjw;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Verse;
|
|
||||||
|
|
||||||
namespace rjwquirks.Data
|
|
||||||
{
|
|
||||||
public class RaceTags
|
|
||||||
{
|
|
||||||
private readonly static Dictionary<string, RaceTags> tagDatabase = new Dictionary<string, RaceTags>();
|
|
||||||
|
|
||||||
// I only created tags for RaceGroupDef properties that seemed like keywords (like slime) rather than behavior (like oviPregnancy).
|
|
||||||
public readonly static RaceTags Chitin = new RaceTags("Chitin");
|
|
||||||
public readonly static RaceTags Demon = new RaceTags("Demon");
|
|
||||||
public readonly static RaceTags Feathers = new RaceTags("Feathers");
|
|
||||||
public readonly static RaceTags Fur = new RaceTags("Fur");
|
|
||||||
public readonly static RaceTags Plant = new RaceTags("Plant");
|
|
||||||
public readonly static RaceTags Robot = new RaceTags("Robot");
|
|
||||||
public readonly static RaceTags Scales = new RaceTags("Scales");
|
|
||||||
public readonly static RaceTags Skin = new RaceTags("Skin");
|
|
||||||
public readonly static RaceTags Slime = new RaceTags("Slime");
|
|
||||||
|
|
||||||
|
|
||||||
public string Key { get; }
|
|
||||||
|
|
||||||
private RaceTags(string key)
|
|
||||||
{
|
|
||||||
Key = key;
|
|
||||||
tagDatabase.Add(key, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool TryParse(string key, out RaceTags raceTag)
|
|
||||||
{
|
|
||||||
return tagDatabase.TryGetValue(key, out raceTag);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For backwards compatability only. Shouldn't add more special cases here.
|
|
||||||
/// </summary>
|
|
||||||
public bool DefaultWhenNoRaceGroupDef(Pawn pawn)
|
|
||||||
{
|
|
||||||
if (this == Demon)
|
|
||||||
{
|
|
||||||
return xxx.is_demon(pawn);
|
|
||||||
}
|
|
||||||
else if (this == Slime)
|
|
||||||
{
|
|
||||||
return xxx.is_slime(pawn);
|
|
||||||
}
|
|
||||||
else if (this == Skin)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -49,10 +49,10 @@ namespace rjwquirks.HarmonyPatches
|
||||||
// Readd the 30 score removed in regular RJW
|
// Readd the 30 score removed in regular RJW
|
||||||
__result += 30;
|
__result += 30;
|
||||||
// Readd the 100 score taken from being in a doorway in regular RJW
|
// Readd the 100 score taken from being in a doorway in regular RJW
|
||||||
__result += 100;
|
if (room.IsDoorway) __result += 100;
|
||||||
|
|
||||||
if (might_be_seen)
|
if (might_be_seen)
|
||||||
__result += 5;
|
__result += 35;
|
||||||
else
|
else
|
||||||
__result -= 10;
|
__result -= 10;
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,7 @@ namespace rjwquirks.HarmonyPatches
|
||||||
[HarmonyPatch(nameof(CondomUtility.TryUseCondom))]
|
[HarmonyPatch(nameof(CondomUtility.TryUseCondom))]
|
||||||
public static bool UseCondomPrefix(Pawn pawn)
|
public static bool UseCondomPrefix(Pawn pawn)
|
||||||
{
|
{
|
||||||
if (xxx.is_human(pawn) && pawn.HasQuirk(QuirkDefOf.ImpregnationFetish))
|
if (xxx.is_human(pawn) && pawn.HasQuirk(QuirkDefOf.ImpregnationFetish)) return false;
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -28,8 +27,7 @@ namespace rjwquirks.HarmonyPatches
|
||||||
[HarmonyPatch(nameof(CondomUtility.GetCondomFromRoom))]
|
[HarmonyPatch(nameof(CondomUtility.GetCondomFromRoom))]
|
||||||
public static bool GetCondomPrefix(Pawn pawn)
|
public static bool GetCondomPrefix(Pawn pawn)
|
||||||
{
|
{
|
||||||
if (xxx.is_human(pawn) && pawn.HasQuirk(QuirkDefOf.ImpregnationFetish))
|
if (xxx.is_human(pawn) && pawn.HasQuirk(QuirkDefOf.ImpregnationFetish)) return false;
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
using HarmonyLib;
|
|
||||||
using rjw;
|
|
||||||
using rjwquirks.Modules.Quirks;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Verse;
|
|
||||||
|
|
||||||
namespace rjwquirks.HarmonyPatches
|
|
||||||
{
|
|
||||||
[HarmonyPatch(typeof(SexUtility), nameof(SexUtility.DrawNude))]
|
|
||||||
public class Patch_DrawNude
|
|
||||||
{
|
|
||||||
public static bool Prefix(Pawn pawn)
|
|
||||||
{
|
|
||||||
if (pawn.HasQuirk(QuirkDefOf.Endytophile))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
using HarmonyLib;
|
|
||||||
using rjw;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection.Emit;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Verse;
|
|
||||||
|
|
||||||
namespace rjwquirks.HarmonyPatches
|
|
||||||
{
|
|
||||||
/*[HarmonyPatch(typeof(Hediff_BasePregnancy))]
|
|
||||||
public class Patch_Hediff_BasePregnancy
|
|
||||||
{
|
|
||||||
[HarmonyTranspiler]
|
|
||||||
[HarmonyPatch("GenerateBabies")]
|
|
||||||
public static IEnumerable<CodeInstruction> AdjustMaxLitterSize(IEnumerable<CodeInstruction> instructions)
|
|
||||||
{
|
|
||||||
bool found = false;
|
|
||||||
|
|
||||||
foreach (CodeInstruction i in instructions)
|
|
||||||
{
|
|
||||||
if (i.opcode == OpCodes.Ldc_R4 && i.operand as string == "0.33333334")
|
|
||||||
found = true;
|
|
||||||
|
|
||||||
if (found && i.opcode == OpCodes.Stloc_S)
|
|
||||||
Log.Warning(i.operand as string);
|
|
||||||
|
|
||||||
|
|
||||||
yield return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
using HarmonyLib;
|
|
||||||
using rjw;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Reflection.Emit;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Verse;
|
|
||||||
|
|
||||||
namespace rjwquirks.HarmonyPatches
|
|
||||||
{
|
|
||||||
[HarmonyPatch(typeof(Hediff_PartBaseArtifical))]
|
|
||||||
public class Patch_Hediff_PartBaseArtifical
|
|
||||||
{
|
|
||||||
[HarmonyTranspiler]
|
|
||||||
[HarmonyPatch(nameof(Hediff_PartBaseArtifical.Tick))]
|
|
||||||
public static IEnumerable<CodeInstruction> ChangeMaxEggsSize(IEnumerable<CodeInstruction> instructions)
|
|
||||||
{
|
|
||||||
FieldInfo Pawn = AccessTools.Field(typeof(Hediff_PartBaseArtifical), nameof(Hediff_PartBaseArtifical.pawn));
|
|
||||||
MethodInfo EggSize = AccessTools.Method(typeof(Patch_Hediff_PartBaseArtifical), nameof(EditMaxEggsSize));
|
|
||||||
|
|
||||||
foreach (CodeInstruction i in instructions)
|
|
||||||
{
|
|
||||||
if (i.opcode == OpCodes.Ldc_R4 && i.operand as string == "0.0")
|
|
||||||
{
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldfld, Pawn);
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldloc_3);
|
|
||||||
yield return new CodeInstruction(OpCodes.Call, EggSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
yield return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void EditMaxEggsSize(Pawn pawn, float eggsSize)
|
|
||||||
{
|
|
||||||
if (pawn.GetQuirks() != null)
|
|
||||||
pawn.GetQuirks().ApplyValueModifiers("maxEggsSize", ref eggsSize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,47 +0,0 @@
|
||||||
using HarmonyLib;
|
|
||||||
using rjw;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection.Emit;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Verse;
|
|
||||||
|
|
||||||
namespace rjwquirks.HarmonyPatches
|
|
||||||
{
|
|
||||||
[HarmonyPatch(typeof(Hediff_PartBaseNatural))]
|
|
||||||
public class Patch_Hediff_PartBaseNatural
|
|
||||||
{
|
|
||||||
[HarmonyTranspiler]
|
|
||||||
[HarmonyPatch(nameof(Hediff_PartBaseNatural.Tick))]
|
|
||||||
public static IEnumerable<CodeInstruction> ChangeMaxEggsSize(IEnumerable<CodeInstruction> instructions)
|
|
||||||
{
|
|
||||||
FieldInfo Pawn = AccessTools.Field(typeof(Hediff_PartBaseNatural), nameof(Hediff_PartBaseNatural.pawn));
|
|
||||||
MethodInfo EggSize = AccessTools.Method(typeof(Patch_Hediff_PartBaseNatural), nameof(EditMaxEggsSize));
|
|
||||||
bool found = false;
|
|
||||||
|
|
||||||
foreach (CodeInstruction i in instructions)
|
|
||||||
{
|
|
||||||
if (i.opcode == OpCodes.Ldc_R4 && i.operand as string == "0.0" && found)
|
|
||||||
{
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldfld, Pawn);
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldloc_3);
|
|
||||||
yield return new CodeInstruction(OpCodes.Call, EggSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i.opcode == OpCodes.Ldc_R4 && i.operand as string == "0.0")
|
|
||||||
found = true;
|
|
||||||
|
|
||||||
yield return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void EditMaxEggsSize(Pawn pawn, float eggsSize)
|
|
||||||
{
|
|
||||||
if (pawn.GetQuirks() != null)
|
|
||||||
pawn.GetQuirks().ApplyValueModifiers("maxEggsSize", ref eggsSize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -12,48 +12,16 @@ using rjwquirks.Modules.Quirks;
|
||||||
|
|
||||||
namespace rjwquirks.HarmonyPatches
|
namespace rjwquirks.HarmonyPatches
|
||||||
{
|
{
|
||||||
/*[HarmonyPatch(typeof(JobGiver_Masturbate))]
|
[HarmonyPatch(typeof(JobGiver_Masturbate), nameof(JobGiver_Masturbate.WantsToMasturbate))]
|
||||||
public class Patch_JobGiver_Masturbate
|
public class Patch_JobGiver_Masturbate
|
||||||
{
|
{
|
||||||
[HarmonyTranspiler]
|
[HarmonyPostfix]
|
||||||
[HarmonyPatch("TryGiveJob")]
|
public static void ApplyQuirkToMasturbate(Pawn pawn, ref bool __result)
|
||||||
public static IEnumerable<CodeInstruction> ApplyQuirkToMasturbate(IEnumerable<CodeInstruction> instructions)
|
|
||||||
{
|
{
|
||||||
MethodInfo Frustrated = AccessTools.Method(typeof(xxx), nameof(xxx.is_frustrated));
|
if (!__result && pawn.HasQuirk(QuirkDefOf.Exhibitionist))
|
||||||
MethodInfo Apply = AccessTools.Method(typeof(Patch_JobGiver_Masturbate), nameof(ApplyQuirk));
|
|
||||||
var labels = instructions.ElementAt(0).labels.ListFullCopy<Label>();
|
|
||||||
Log.Warning(labels.Count.ToString());
|
|
||||||
bool found = false;
|
|
||||||
|
|
||||||
foreach (CodeInstruction i in instructions)
|
|
||||||
{
|
{
|
||||||
if (i.opcode == OpCodes.Call && i.operand as MethodInfo == Frustrated)
|
__result = true;
|
||||||
{
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldarg_1);
|
|
||||||
yield return new CodeInstruction(OpCodes.Call, Apply);
|
|
||||||
yield return new CodeInstruction(OpCodes.Brtrue_S, labels[4]);
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (found && i.opcode == OpCodes.Call && i.operand as MethodInfo == Frustrated)
|
|
||||||
{
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldarg_1);
|
|
||||||
yield return new CodeInstruction(OpCodes.Call, Apply);
|
|
||||||
yield return new CodeInstruction(OpCodes.Brtrue_S, labels[5]);
|
|
||||||
found = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
yield return i;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public static bool ApplyQuirk(Pawn pawn)
|
|
||||||
{
|
|
||||||
if (pawn.GetQuirks() != null)
|
|
||||||
return pawn.HasQuirk(QuirkDefOf.Exhibitionist);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,16 +13,14 @@ using Verse;
|
||||||
namespace rjwquirks.HarmonyPatches
|
namespace rjwquirks.HarmonyPatches
|
||||||
{
|
{
|
||||||
[HarmonyPatch(typeof(PartPreferenceDetectorService), nameof(PartPreferenceDetectorService.DetectPartPreferences))]
|
[HarmonyPatch(typeof(PartPreferenceDetectorService), nameof(PartPreferenceDetectorService.DetectPartPreferences))]
|
||||||
public class Patch_QuirkPartPreference
|
public class Patch_PartPreferenceDetectorService
|
||||||
{
|
{
|
||||||
public static void Prefix(InteractionContext context, IList<IPartPreferenceRule> ____partKindUsageRules)
|
public static void Prefix(InteractionContext context, IList<IPartPreferenceRule> ____partKindUsageRules)
|
||||||
{
|
{
|
||||||
if (____partKindUsageRules.Any(x => x.GetType() == typeof(QuirksPartKindUsageRule)) || (context.Internals.Submissive.Pawn.GetQuirks() == null || context.Internals.Dominant.Pawn.GetQuirks() == null))
|
if (____partKindUsageRules.Any(x => x.GetType() == typeof(QuirksPartKindUsageRule)) || (context.Internals.Submissive.Pawn.GetQuirks() == null || context.Internals.Dominant.Pawn.GetQuirks() == null))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Log.Warning(____partKindUsageRules.Count().ToString());
|
|
||||||
____partKindUsageRules.Add(new QuirksPartKindUsageRule());
|
____partKindUsageRules.Add(new QuirksPartKindUsageRule());
|
||||||
Log.Warning(____partKindUsageRules.Count().ToString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
27
RJW-Quirks/HarmonyPatches/Patch_PawnExtensions.cs
Normal file
27
RJW-Quirks/HarmonyPatches/Patch_PawnExtensions.cs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
using HarmonyLib;
|
||||||
|
using rjw;
|
||||||
|
using rjwquirks.Modules.Quirks;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Reflection.Emit;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace rjwquirks.HarmonyPatches
|
||||||
|
{
|
||||||
|
[HarmonyPatch(typeof(rjw.PawnExtensions), nameof(rjw.PawnExtensions.MaxEggSize))]
|
||||||
|
public class Patch_PawnExtensions
|
||||||
|
{
|
||||||
|
[HarmonyPostfix]
|
||||||
|
public static void AdjustMaxEggsSize(Pawn pawn, ref float __result)
|
||||||
|
{
|
||||||
|
if (pawn.HasQuirk(QuirkDefOf.Incubator))
|
||||||
|
{
|
||||||
|
__result *= 2f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
26
RJW-Quirks/HarmonyPatches/Patch_PregnancyHelper.cs
Normal file
26
RJW-Quirks/HarmonyPatches/Patch_PregnancyHelper.cs
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
using HarmonyLib;
|
||||||
|
using rjw;
|
||||||
|
using rjwquirks.Modules.Quirks;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection.Emit;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace rjwquirks.HarmonyPatches
|
||||||
|
{
|
||||||
|
[HarmonyPatch(typeof(PregnancyHelper), nameof(PregnancyHelper.MaxLitterSize))]
|
||||||
|
public class Patch_PregnancyHelper
|
||||||
|
{
|
||||||
|
[HarmonyPostfix]
|
||||||
|
public static void AdjustMaxLitterSize(Pawn mother, ref float __result)
|
||||||
|
{
|
||||||
|
if (mother.HasQuirk(QuirkDefOf.Breeder) || mother.HasQuirk(QuirkDefOf.Incubator))
|
||||||
|
{
|
||||||
|
__result *= 2f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,6 +17,16 @@ namespace rjwquirks.HarmonyPatches
|
||||||
[HarmonyPatch(typeof(SexUtility))]
|
[HarmonyPatch(typeof(SexUtility))]
|
||||||
public class Patch_SexUtility
|
public class Patch_SexUtility
|
||||||
{
|
{
|
||||||
|
[HarmonyPrefix]
|
||||||
|
[HarmonyPatch(nameof(SexUtility.DrawNude))]
|
||||||
|
public static bool Prefix(Pawn pawn)
|
||||||
|
{
|
||||||
|
if (pawn.HasQuirk(QuirkDefOf.Endytophile))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// Increases cum filth generated by pawn
|
// Increases cum filth generated by pawn
|
||||||
[HarmonyPostfix]
|
[HarmonyPostfix]
|
||||||
[HarmonyPatch(nameof(SexUtility.CumOutputModifier))]
|
[HarmonyPatch(nameof(SexUtility.CumOutputModifier))]
|
||||||
|
@ -27,42 +37,16 @@ namespace rjwquirks.HarmonyPatches
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change how much the pawn wants to clean post sex
|
// Change how much the pawn wants to clean post sex
|
||||||
[HarmonyTranspiler]
|
[HarmonyPostfix]
|
||||||
[HarmonyPatch(nameof(SexUtility.ConsiderCleaning))]
|
[HarmonyPatch(nameof(SexUtility.CleaningChance))]
|
||||||
static IEnumerable<CodeInstruction> ConsiderCleanup(IEnumerable<CodeInstruction> instructions)
|
public static void AdjustConsiderScore(Pawn fapper, ref float __result)
|
||||||
{
|
{
|
||||||
FieldInfo PawnNeeds = AccessTools.Field(typeof(Pawn), nameof(Pawn.needs));
|
fapper.GetQuirks().ApplyValueModifiers("cleanAfterFapChance", ref __result);
|
||||||
MethodInfo Cleanup = AccessTools.Method(typeof(Patch_SexUtility), nameof(CleanupChanceAdjuster));
|
|
||||||
|
|
||||||
bool found = false;
|
|
||||||
|
|
||||||
foreach (CodeInstruction i in instructions)
|
|
||||||
{
|
|
||||||
if (found)
|
|
||||||
{
|
|
||||||
yield return i;
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldloc_0);
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldarg_0);
|
|
||||||
yield return new CodeInstruction(OpCodes.Call, Cleanup);
|
|
||||||
found = false;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i.opcode == OpCodes.Ldfld && i.operand as FieldInfo == PawnNeeds)
|
|
||||||
found = true;
|
|
||||||
|
|
||||||
yield return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void CleanupChanceAdjuster(float chance, Pawn pawn)
|
|
||||||
{
|
|
||||||
pawn.GetQuirks().ApplyValueModifiers("cleanAfterFapChance", ref chance);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change satisfaction from sex
|
// Change satisfaction from sex
|
||||||
[HarmonyPostfix]
|
[HarmonyPostfix]
|
||||||
[HarmonyPatch(nameof(SexUtility.GetExtraSatisfaction))]
|
[HarmonyPatch(nameof(SexUtility.ExtraSatisfaction))]
|
||||||
public static void Satisfaction(SexProps props, ref float __result)
|
public static void Satisfaction(SexProps props, ref float __result)
|
||||||
{
|
{
|
||||||
var quirkCount = props.pawn.GetQuirks().GetSatisfiedBySex(props).Count();
|
var quirkCount = props.pawn.GetQuirks().GetSatisfiedBySex(props).Count();
|
||||||
|
@ -75,71 +59,22 @@ namespace rjwquirks.HarmonyPatches
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change ticks to next lovin
|
// Change ticks to next lovin
|
||||||
[HarmonyTranspiler]
|
[HarmonyPostfix]
|
||||||
[HarmonyPatch(nameof(SexUtility.GenerateMinTicksToNextLovin))]
|
[HarmonyPatch(nameof(SexUtility.MinLovinTicks))]
|
||||||
public static IEnumerable<CodeInstruction> ChangeTicksToNextLovin(IEnumerable<CodeInstruction> instructions)
|
public static void ChangeTicksToNextLovin(Pawn pawn, ref float __result)
|
||||||
{
|
{
|
||||||
MethodInfo SexDrive = AccessTools.Method(typeof(xxx), nameof(xxx.get_sex_drive));
|
if(pawn.GetQuirks() != null)
|
||||||
MethodInfo AdjustTicks = AccessTools.Method(typeof(Patch_SexUtility), nameof(AdjustTicksToNextLovin));
|
|
||||||
bool found = false;
|
|
||||||
|
|
||||||
foreach (var i in instructions)
|
|
||||||
{
|
{
|
||||||
if (found)
|
pawn.GetQuirks().ApplyValueModifiers("ticksToNextLovin", ref __result);
|
||||||
{
|
|
||||||
yield return i;
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldloc_0);
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldarg_0);
|
|
||||||
yield return new CodeInstruction(OpCodes.Call, AdjustTicks);
|
|
||||||
found = false;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i.opcode == OpCodes.Call && i.operand as MethodInfo == SexDrive)
|
|
||||||
found = true;
|
|
||||||
|
|
||||||
yield return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void AdjustTicksToNextLovin(float ticks, Pawn pawn)
|
|
||||||
{
|
|
||||||
if (pawn.GetQuirks() != null)
|
|
||||||
{
|
|
||||||
pawn.GetQuirks().ApplyValueModifiers("ticksToNextLovin", ref ticks);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rest adjustments
|
// Rest adjustments
|
||||||
[HarmonyTranspiler]
|
[HarmonyPrefix]
|
||||||
[HarmonyPatch(nameof(SexUtility.reduce_rest))]
|
[HarmonyPatch(nameof(SexUtility.reduce_rest))]
|
||||||
public static IEnumerable<CodeInstruction> AdjustRest(IEnumerable<CodeInstruction> instructions)
|
public static void AdjustRest(Pawn pawn, ref float x)
|
||||||
{
|
{
|
||||||
MethodInfo Adjustment = AccessTools.Method(typeof(Patch_SexUtility), nameof(AdjustRestFromQuirk));
|
if (pawn.GetQuirks() != null)
|
||||||
bool found = false;
|
|
||||||
bool completed = false;
|
|
||||||
|
|
||||||
foreach (CodeInstruction i in instructions)
|
|
||||||
{
|
|
||||||
if (found && !completed)
|
|
||||||
{
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldarg_0);
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldarg_1);
|
|
||||||
yield return new CodeInstruction(OpCodes.Call, Adjustment);
|
|
||||||
completed = true;
|
|
||||||
found = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i.opcode == OpCodes.Dup)
|
|
||||||
found = true;
|
|
||||||
|
|
||||||
yield return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void AdjustRestFromQuirk(Pawn pawn, float x)
|
|
||||||
{
|
|
||||||
if(pawn.GetQuirks() != null)
|
|
||||||
pawn.GetQuirks().ApplyValueModifiers("reduceRest", ref x);
|
pawn.GetQuirks().ApplyValueModifiers("reduceRest", ref x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
using HarmonyLib;
|
||||||
|
using rjw;
|
||||||
|
using rjwquirks.Modules.Quirks;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
using Verse.AI;
|
||||||
|
|
||||||
|
namespace rjwquirks.HarmonyPatches
|
||||||
|
{
|
||||||
|
[HarmonyPatch(typeof(ThinkNode_ChancePerHour_Fappin), nameof(ThinkNode_ChancePerHour_Fappin.AloneFactor))]
|
||||||
|
public static class Patch_ThinkNode_ChancePerHour_Fappin
|
||||||
|
{
|
||||||
|
[HarmonyPostfix]
|
||||||
|
public static void Postfix(Pawn pawn, ref float __result)
|
||||||
|
{
|
||||||
|
bool isAlone = !pawn.Map.mapPawns.AllPawnsSpawned.Any(x => pawn.CanSee(x) && xxx.is_human(x));
|
||||||
|
|
||||||
|
if (pawn.HasQuirk(QuirkDefOf.Exhibitionist))
|
||||||
|
{
|
||||||
|
__result = isAlone ? 1.0f : 0.6f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,44 +1,44 @@
|
||||||
using rjw;
|
using rjw;
|
||||||
using rjwquirks.Data;
|
using rjwquirks.Modules.Shared.PawnSelectors;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Verse;
|
using Verse;
|
||||||
|
|
||||||
namespace rjwquirks.Modules.Shared.PawnSelectors
|
namespace rjwquirks.Modules.Shared.PawnSelectors
|
||||||
{
|
{
|
||||||
public class HasRaceTag : PawnSelector
|
public class HasRaceTag : PawnSelector
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// For def load only. Use RaceTag property
|
/// For def load only. Use RaceTag property
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string raceTag;
|
public string raceTag;
|
||||||
|
|
||||||
public RaceTags RaceTag
|
public RaceTag RaceTag
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (RaceTags.TryParse(raceTag, out RaceTags tag))
|
if (RaceTag.TryParse(raceTag, out RaceTag tag))
|
||||||
return tag;
|
return tag;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool PawnSatisfies(Pawn pawn) => pawn.HasRaceTag(RaceTag);
|
public override bool PawnSatisfies(Pawn pawn) => pawn.Has(RaceTag);
|
||||||
|
|
||||||
public override IEnumerable<string> ConfigErrors()
|
public override IEnumerable<string> ConfigErrors()
|
||||||
{
|
{
|
||||||
foreach (string error in base.ConfigErrors())
|
foreach (string error in base.ConfigErrors())
|
||||||
{
|
{
|
||||||
yield return error;
|
yield return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (raceTag.NullOrEmpty())
|
if (raceTag.NullOrEmpty())
|
||||||
{
|
{
|
||||||
yield return "<raceTag> is empty";
|
yield return "<raceTag> is empty";
|
||||||
}
|
}
|
||||||
else if (!RaceTags.TryParse(raceTag, out _))
|
else if (!RaceTag.TryParse(raceTag, out _))
|
||||||
{
|
{
|
||||||
yield return $"\"{raceTag}\" is not a valid RaceTag";
|
yield return $"\"{raceTag}\" is not a valid RaceTag";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using rjw;
|
using rjw;
|
||||||
using rjwquirks.Data;
|
|
||||||
using rjwquirks.Modules.Quirks;
|
using rjwquirks.Modules.Quirks;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Verse;
|
using Verse;
|
||||||
|
@ -17,16 +16,5 @@ namespace rjwquirks
|
||||||
{
|
{
|
||||||
return pawn.GetComp<QuirkSet>();
|
return pawn.GetComp<QuirkSet>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool HasRaceTag(this Pawn pawn, RaceTags tag)
|
|
||||||
{
|
|
||||||
if (RaceGroupDef_Helper.TryGetRaceGroupDef(pawn, out var raceGroupDef))
|
|
||||||
{
|
|
||||||
return raceGroupDef.tags != null && raceGroupDef.tags.Contains(tag.Key);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
return tag.DefaultWhenNoRaceGroupDef(pawn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,19 +71,17 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Core.cs" />
|
<Compile Include="Core.cs" />
|
||||||
<Compile Include="Data\RaceTags.cs" />
|
|
||||||
<Compile Include="HarmonyPatches\Patch_CasualSex_Helper.cs" />
|
<Compile Include="HarmonyPatches\Patch_CasualSex_Helper.cs" />
|
||||||
<Compile Include="HarmonyPatches\Patch_CondomUtility.cs" />
|
<Compile Include="HarmonyPatches\Patch_CondomUtility.cs" />
|
||||||
<Compile Include="HarmonyPatches\Patch_Dialog_Sexcard.cs" />
|
<Compile Include="HarmonyPatches\Patch_Dialog_Sexcard.cs" />
|
||||||
<Compile Include="HarmonyPatches\Patch_DrawNude.cs" />
|
<Compile Include="HarmonyPatches\Patch_PregnancyHelper.cs" />
|
||||||
<Compile Include="HarmonyPatches\Patch_Hediff_BasePregnancy.cs" />
|
<Compile Include="HarmonyPatches\Patch_PawnExtensions.cs" />
|
||||||
<Compile Include="HarmonyPatches\Patch_Hediff_PartBaseArtifical.cs" />
|
|
||||||
<Compile Include="HarmonyPatches\Patch_Hediff_PartBaseNatural.cs" />
|
|
||||||
<Compile Include="HarmonyPatches\Patch_JobGiver_Masturbate.cs" />
|
<Compile Include="HarmonyPatches\Patch_JobGiver_Masturbate.cs" />
|
||||||
<Compile Include="HarmonyPatches\Patch_QuirkPartPreference.cs" />
|
<Compile Include="HarmonyPatches\Patch_PartPreferenceDetectorService.cs" />
|
||||||
<Compile Include="HarmonyPatches\Patch_RecordsTracker_NotifyRecordChanged.cs" />
|
<Compile Include="HarmonyPatches\Patch_RecordsTracker_NotifyRecordChanged.cs" />
|
||||||
<Compile Include="HarmonyPatches\Patch_SexAppraiser.cs" />
|
<Compile Include="HarmonyPatches\Patch_SexAppraiser.cs" />
|
||||||
<Compile Include="HarmonyPatches\Patch_SexUtility.cs" />
|
<Compile Include="HarmonyPatches\Patch_SexUtility.cs" />
|
||||||
|
<Compile Include="HarmonyPatches\Patch_ThinkNode_ChancePerHour_Fappin.cs" />
|
||||||
<Compile Include="Modules\Interactions\QuirksPartKindUsageRule.cs" />
|
<Compile Include="Modules\Interactions\QuirksPartKindUsageRule.cs" />
|
||||||
<Compile Include="Modules\Quirks\CompProperties_QuirkSet.cs" />
|
<Compile Include="Modules\Quirks\CompProperties_QuirkSet.cs" />
|
||||||
<Compile Include="Modules\Quirks\Comps\CompAdder.cs" />
|
<Compile Include="Modules\Quirks\Comps\CompAdder.cs" />
|
||||||
|
@ -167,5 +165,8 @@
|
||||||
<Compile Include="PawnExtensions.cs" />
|
<Compile Include="PawnExtensions.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Data\" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
</Project>
|
</Project>
|
Loading…
Reference in a new issue