RurouniCoder Posted October 1, 2025 Posted October 1, 2025 (edited) On 9/28/2025 at 4:56 AM, ESeeker said: in all my mods/forks (excluding Slime) there is a debug setting, on startup it will log all patches by said mod/fork(both first and last part are always logged) [mod name] <TIME> Initializing... [mod name] X patched [mod name] Done (if this isn't in log it means a patch failed) for Apparel Tweaks: (7 patches)"RJW patched", (2 patches)"PawnRenderTree patched", "RJW Events patched"(needs said mod), "Rimnude unpatched"(needs said mod), (2 patches)"Holster patched"(needs said mod) rimworld should throw an error if patch fails, this debug info will tell me where I did more testing with debug messages activated, and what is causing the null reference exception is the Holsters mod: Spoiler [RJW Apparel Tweaks] 10/1/2025 1:46:29 PM: Initializing... [RJW Apparel Tweaks] 10/1/2025 1:46:29 PM: RJW patched [RJW Apparel Tweaks] 10/1/2025 1:46:29 PM: PawnRenderTree patched [RJW Apparel Tweaks] 10/1/2025 1:46:29 PM: RJW Events patched Error in static constructor of AbsCon_Apparel_Settings_For_RJW.Harmony_PatchAll: System.TypeInitializationException: The type initializer for 'AbsCon_Apparel_Settings_For_RJW.Harmony_PatchAll' threw an exception. ---> System.NullReferenceException: Null method for Abscon_Apparel_Settings_For_RJW [Ref A2685571] at HarmonyLib.PatchProcessor.Patch () [0x0001d] in <e53399289d9b419d83f9f5b02c5cf609>:0 at HarmonyLib.Harmony.Patch (System.Reflection.MethodBase original, HarmonyLib.HarmonyMethod prefix, HarmonyLib.HarmonyMethod postfix, HarmonyLib.HarmonyMethod transpiler, HarmonyLib.HarmonyMethod finalizer) [0x0002a] in <e53399289d9b419d83f9f5b02c5cf609>:0 AbsCon_Apparel_Settings_For_RJW.Harmony_PatchAll..cctor() --- End of inner exception stack trace --- [Ref 319773C0] (wrapper managed-to-native) System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(intptr) at System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor (System.RuntimeTypeHandle type) [0x0002a] in <51fded79cd284d4d911c5949aff4cb21>:0 at Verse.StaticConstructorOnStartupUtility.CallAll () [0x00025] in <545b26faba1c49b798d4efe7362d2e92>:0 Also, I noticed that loading just Apparel Tweaks with RJW will throw an error about Equal Milking, and if you load EM then it will complain about RJW-Events, not even showing the "Initializing..." log. When you load the 4, no problem. About the Core button, with just Apparel Tweaks + relevant mods loaded it works fine, so I'm going to guess that I was just impatient and didn't give it enough time to load all the mods with apparels I have. Edited October 1, 2025 by RurouniCoder
ESeeker Posted October 1, 2025 Author Posted October 1, 2025 6 hours ago, RurouniCoder said: I did more testing with debug messages activated, and what is causing the null reference exception is the Holsters mod: Reveal hidden contents [RJW Apparel Tweaks] 10/1/2025 1:46:29 PM: Initializing... [RJW Apparel Tweaks] 10/1/2025 1:46:29 PM: RJW patched [RJW Apparel Tweaks] 10/1/2025 1:46:29 PM: PawnRenderTree patched [RJW Apparel Tweaks] 10/1/2025 1:46:29 PM: RJW Events patched Error in static constructor of AbsCon_Apparel_Settings_For_RJW.Harmony_PatchAll: System.TypeInitializationException: The type initializer for 'AbsCon_Apparel_Settings_For_RJW.Harmony_PatchAll' threw an exception. ---> System.NullReferenceException: Null method for Abscon_Apparel_Settings_For_RJW [Ref A2685571] at HarmonyLib.PatchProcessor.Patch () [0x0001d] in <e53399289d9b419d83f9f5b02c5cf609>:0 at HarmonyLib.Harmony.Patch (System.Reflection.MethodBase original, HarmonyLib.HarmonyMethod prefix, HarmonyLib.HarmonyMethod postfix, HarmonyLib.HarmonyMethod transpiler, HarmonyLib.HarmonyMethod finalizer) [0x0002a] in <e53399289d9b419d83f9f5b02c5cf609>:0 AbsCon_Apparel_Settings_For_RJW.Harmony_PatchAll..cctor() --- End of inner exception stack trace --- [Ref 319773C0] (wrapper managed-to-native) System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(intptr) at System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor (System.RuntimeTypeHandle type) [0x0002a] in <51fded79cd284d4d911c5949aff4cb21>:0 at Verse.StaticConstructorOnStartupUtility.CallAll () [0x00025] in <545b26faba1c49b798d4efe7362d2e92>:0 Also, I noticed that loading just Apparel Tweaks with RJW will throw an error about Equal Milking, and if you load EM then it will complain about RJW-Events, not even showing the "Initializing..." log. When you load the 4, no problem. About the Core button, with just Apparel Tweaks + relevant mods loaded it works fine, so I'm going to guess that I was just impatient and didn't give it enough time to load all the mods with apparels I have. Equal Milking: compatibility was done rather hastily result first missing end tag(invalid XML) then continuously forgeting to add MayRequire Holster: 1.6 version on github lacks source code(only 1.3-1.4 has) meaning I ended up patching outdated code RJW Events: me & original creator have different approaches for harmony patches
RurouniCoder Posted October 2, 2025 Posted October 2, 2025 16 hours ago, ESeeker said: Equal Milking: compatibility was done rather hastily result first missing end tag(invalid XML) then continuously forgeting to add MayRequire Holster: 1.6 version on github lacks source code(only 1.3-1.4 has) meaning I ended up patching outdated code RJW Events: me & original creator have different approaches for harmony patches Have you tried to decompile Holsters 1.6 assembly? Not as good as having the source code, but a close second.
furel Posted October 6, 2025 Posted October 6, 2025 (edited) Error testing FamilyOverhaul 1.8.3 https://gist.github.com/HugsLibRecordKeeper/78992997d7547a8a40ceca2125e0d4a5 I can't even start a test run. Android.cs is still dependent on VREAndroid.dll because of if (VREAndroids.Utils.IsAndroid(p). Copy the code I posted. Despite being inside an if that checks if the mod is installed, the game wants all the pieces before start running the function and it fails when it can't find VREAndroids.Utils.IsAndroid(p). Edit: After change the code I found another error. https://gist.github.com/HugsLibRecordKeeper/b7dac1e86cb57564651c3de699cab896 This time I tried to view a slave's statistics. Everything was empty; no statistics appeared. The problems are TransformValue and ExplanationPart, you can't send req.Pawn to ValueFor, you have to use it like in ActiveFor and make req.Thing as a Pawn input, like this: Spoiler TransformValue(StatRequest req, ref float val) { if (ActiveFor(req.Thing)) { if (req.Thing is Pawn pawn) { val *= ValueFor(pawn); } } } public override string ExplanationPart(StatRequest req) { if (req.HasThing && ActiveFor(req.Thing)) { if (req.Thing is Pawn pawn) { return "StatsReport_Slave".Translate() + (": x" + ValueFor(pawn).ToStringPercent()); } } return null; } Edited October 6, 2025 by furel More bugs 1
SecretAgentClank Posted October 6, 2025 Posted October 6, 2025 Was trying to trade and family overhaul prevented me from doing so. Error: Spoiler JobDriver threw exception in toil MakeNewToils's initAction for pawn Sam driver=JobDriver_TradeWithPawn (toilIndex=1) driver.job=(TradeWithPawn (Job_1964697) A = Thing_OG_Alien_Tau452471 Giver = ThinkNode_QueuedJob [workGiverDef: null]) System.NullReferenceException: Object reference not set to an instance of an object [Ref 173547E8] at FamilyOverhaul.Comp_FamilyData.get_HasMaster () [0x000e8] in <450b289196a04794903f38dceb8cf8f3>:0 at FamilyOverhaul.Family.PreventSellingPersonal_Patch (System.Boolean& __result, Verse.Pawn __instance, System.String& reason) [0x00015] in <450b289196a04794903f38dceb8cf8f3>:0 at Verse.Pawn.PreventPlayerSellingThingsNearby (System.String& reason) [0x00016] in <24d25868955f4df08b02c73b55f389fe>:0 - PREFIX ESeeker.FO: Boolean FamilyOverhaul.Family:PreventSellingPersonal_Patch(Boolean& __result, Pawn __instance, String& reason) at RimWorld.TradeDeal.InSellablePosition (Verse.Thing t, System.String& reason) [0x00136] in <24d25868955f4df08b02c73b55f389fe>:0 - PREFIX com.spdskatr.projectrimfactory: Boolean ProjectRimFactory.Common.HarmonyPatches.Patch_TradeDeal_InSellablePosition:Prefix(Thing t, String& reason, Boolean& __result) - POSTFIX SmashPhil.VehicleFramework: Void Vehicles.Patch_CaravanHandling:NegotiatorInVehicle(Boolean& __result) at RimWorld.TradeDeal.AddAllTradeables () [0x00037] in <24d25868955f4df08b02c73b55f389fe>:0 at RimWorld.TradeDeal.Reset () [0x00016] in <24d25868955f4df08b02c73b55f389fe>:0 RimWorld.TradeDeal..ctor() at RimWorld.TradeSession.SetupWith (RimWorld.ITrader newTrader, Verse.Pawn newPlayerNegotiator, System.Boolean giftMode) [0x00024] in <24d25868955f4df08b02c73b55f389fe>:0 RimWorld.Dialog_Trade..ctor(Pawn playerNegotiator, ITrader trader, Boolean giftsOnly) at RimWorld.JobDriver_TradeWithPawn+<>c__DisplayClass3_0.<MakeNewToils>b__1 () [0x0002f] in <24d25868955f4df08b02c73b55f389fe>:0 at Verse.AI.JobDriver.TryActuallyStartNextToil () [0x001b0] in <24d25868955f4df08b02c73b55f389fe>:0 UnityEngine.StackTraceUtility:ExtractStackTrace () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Log.Error_Patch3 (string) (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.AI.JobUtility.TryStartErrorRecoverJob_Patch1 (Verse.Pawn,string,System.Exception,Verse.AI.JobDriver) Verse.AI.JobDriver:TryActuallyStartNextToil () Verse.AI.JobDriver:ReadyForNextToil () Verse.AI.JobDriver:Notify_PatherArrived () Verse.AI.Pawn_PathFollower:PatherArrived () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.AI.Pawn_PathFollower.TryEnterNextPathCell_Patch1 (Verse.AI.Pawn_PathFollower) (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.AI.Pawn_PathFollower.PatherTick_Patch2 (Verse.AI.Pawn_PathFollower) (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Pawn.Tick_Patch4 (Verse.Pawn) Verse.Thing:DoTick () Verse.TickList:Tick () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.TickManager.DoSingleTick_Patch3 (Verse.TickManager) Verse.TickManager:TickManagerUpdate () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Game.UpdatePlay_Patch4 (Verse.Game) Verse.Root_Play:Update () I believe I managed to fix it. The issue is with HasMaster. I opened the mod in Visual Studio and added a null check to it: Before: Spoiler public bool HasMaster { get { return parentPawn.relations.GetFirstDirectRelationPawn(PawnRelationDefOf.Master) != null; } } After: Spoiler public bool HasMaster { get { if (parentPawn == null) return false; if (parentPawn.relations == null) return false; return parentPawn.relations.GetFirstDirectRelationPawn(PawnRelationDefOf.Master) != null; } } And then fixed the PreventSellingPersonal_Patch inside of Family.cs Before: Spoiler public static bool PreventSellingPersonal_Patch(ref bool __result, Pawn __instance, ref string reason) { if (__instance.GetComp<Comp_FamilyData>().HasMaster) { __result = true; reason = "Cannot sell a pawn with a master."; return false; } return true; } After: Spoiler public static bool PreventSellingPersonal_Patch(ref bool __result, Pawn __instance, ref string reason) { var comp = __instance?.GetComp<Comp_FamilyData>(); if (comp != null && comp.HasMaster) { __result = true; reason = "Cannot sell a pawn with a master."; return false; } return true; } I'm not sure if this will cause me any issues down the line but the mod was calling for .HasMaster without checking if they had a Compy_FamilyData component and was getting the above exception.... I'm not sure whether or not my pawn was supposed to have a Comp_FamilyData component, but they are neither a master or under a master.
ESeeker Posted October 7, 2025 Author Posted October 7, 2025 22 hours ago, SecretAgentClank said: Was trying to trade and family overhaul prevented me from doing so. Error: Reveal hidden contents JobDriver threw exception in toil MakeNewToils's initAction for pawn Sam driver=JobDriver_TradeWithPawn (toilIndex=1) driver.job=(TradeWithPawn (Job_1964697) A = Thing_OG_Alien_Tau452471 Giver = ThinkNode_QueuedJob [workGiverDef: null]) System.NullReferenceException: Object reference not set to an instance of an object [Ref 173547E8] at FamilyOverhaul.Comp_FamilyData.get_HasMaster () [0x000e8] in <450b289196a04794903f38dceb8cf8f3>:0 at FamilyOverhaul.Family.PreventSellingPersonal_Patch (System.Boolean& __result, Verse.Pawn __instance, System.String& reason) [0x00015] in <450b289196a04794903f38dceb8cf8f3>:0 at Verse.Pawn.PreventPlayerSellingThingsNearby (System.String& reason) [0x00016] in <24d25868955f4df08b02c73b55f389fe>:0 - PREFIX ESeeker.FO: Boolean FamilyOverhaul.Family:PreventSellingPersonal_Patch(Boolean& __result, Pawn __instance, String& reason) at RimWorld.TradeDeal.InSellablePosition (Verse.Thing t, System.String& reason) [0x00136] in <24d25868955f4df08b02c73b55f389fe>:0 - PREFIX com.spdskatr.projectrimfactory: Boolean ProjectRimFactory.Common.HarmonyPatches.Patch_TradeDeal_InSellablePosition:Prefix(Thing t, String& reason, Boolean& __result) - POSTFIX SmashPhil.VehicleFramework: Void Vehicles.Patch_CaravanHandling:NegotiatorInVehicle(Boolean& __result) at RimWorld.TradeDeal.AddAllTradeables () [0x00037] in <24d25868955f4df08b02c73b55f389fe>:0 at RimWorld.TradeDeal.Reset () [0x00016] in <24d25868955f4df08b02c73b55f389fe>:0 RimWorld.TradeDeal..ctor() at RimWorld.TradeSession.SetupWith (RimWorld.ITrader newTrader, Verse.Pawn newPlayerNegotiator, System.Boolean giftMode) [0x00024] in <24d25868955f4df08b02c73b55f389fe>:0 RimWorld.Dialog_Trade..ctor(Pawn playerNegotiator, ITrader trader, Boolean giftsOnly) at RimWorld.JobDriver_TradeWithPawn+<>c__DisplayClass3_0.<MakeNewToils>b__1 () [0x0002f] in <24d25868955f4df08b02c73b55f389fe>:0 at Verse.AI.JobDriver.TryActuallyStartNextToil () [0x001b0] in <24d25868955f4df08b02c73b55f389fe>:0 UnityEngine.StackTraceUtility:ExtractStackTrace () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Log.Error_Patch3 (string) (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.AI.JobUtility.TryStartErrorRecoverJob_Patch1 (Verse.Pawn,string,System.Exception,Verse.AI.JobDriver) Verse.AI.JobDriver:TryActuallyStartNextToil () Verse.AI.JobDriver:ReadyForNextToil () Verse.AI.JobDriver:Notify_PatherArrived () Verse.AI.Pawn_PathFollower:PatherArrived () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.AI.Pawn_PathFollower.TryEnterNextPathCell_Patch1 (Verse.AI.Pawn_PathFollower) (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.AI.Pawn_PathFollower.PatherTick_Patch2 (Verse.AI.Pawn_PathFollower) (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Pawn.Tick_Patch4 (Verse.Pawn) Verse.Thing:DoTick () Verse.TickList:Tick () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.TickManager.DoSingleTick_Patch3 (Verse.TickManager) Verse.TickManager:TickManagerUpdate () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Game.UpdatePlay_Patch4 (Verse.Game) Verse.Root_Play:Update () I believe I managed to fix it. The issue is with HasMaster. I opened the mod in Visual Studio and added a null check to it: Before: Reveal hidden contents public bool HasMaster { get { return parentPawn.relations.GetFirstDirectRelationPawn(PawnRelationDefOf.Master) != null; } } After: Reveal hidden contents public bool HasMaster { get { if (parentPawn == null) return false; if (parentPawn.relations == null) return false; return parentPawn.relations.GetFirstDirectRelationPawn(PawnRelationDefOf.Master) != null; } } And then fixed the PreventSellingPersonal_Patch inside of Family.cs Before: Reveal hidden contents public static bool PreventSellingPersonal_Patch(ref bool __result, Pawn __instance, ref string reason) { if (__instance.GetComp<Comp_FamilyData>().HasMaster) { __result = true; reason = "Cannot sell a pawn with a master."; return false; } return true; } After: Reveal hidden contents public static bool PreventSellingPersonal_Patch(ref bool __result, Pawn __instance, ref string reason) { var comp = __instance?.GetComp<Comp_FamilyData>(); if (comp != null && comp.HasMaster) { __result = true; reason = "Cannot sell a pawn with a master."; return false; } return true; } I'm not sure if this will cause me any issues down the line but the mod was calling for .HasMaster without checking if they had a Compy_FamilyData component and was getting the above exception.... I'm not sure whether or not my pawn was supposed to have a Comp_FamilyData component, but they are neither a master or under a master. Vehicles & drones don't have family comp, I forgot to add "__instance.HasFamily_PawnData()" file Family.cs: lines 71-98 gives comp lines 692-706 HasMaster lines 808-819 IsMaster(Pawn master) line 684 Masters, add/removed when adding/removing servant from master
SecretAgentClank Posted October 8, 2025 Posted October 8, 2025 18 hours ago, ESeeker said: Vehicles & drones don't have family comp, I forgot to add "__instance.HasFamily_PawnData()" file Family.cs: lines 71-98 gives comp lines 692-706 HasMaster lines 808-819 IsMaster(Pawn master) line 684 Masters, add/removed when adding/removing servant from master Was neither vehicle nor drone, was my pawn trying to trade with another pawn, neither of which had a master.
ESeeker Posted October 9, 2025 Author Posted October 9, 2025 8 hours ago, SecretAgentClank said: Was neither vehicle nor drone, was my pawn trying to trade with another pawn, neither of which had a master. no the patch is for whether or not pawn in colony can be sold meaning if you have any vehicle/drone in colony the patch would break also I don't think vehicle/drone can actually trade fixed in 1.8.4
Sidereal Posted October 9, 2025 Posted October 9, 2025 Hello! Is the interspecies intercompatibility out or being reworked? If it's in, how does it work? I looked at the code and the see the animal/humanlike chances, but not how they are defined apart from being between 0 and 1, or whether they increase with time/experience. Thanks!
ESeeker Posted October 9, 2025 Author Posted October 9, 2025 4 hours ago, Sidereal said: Hello! Is the interspecies intercompatibility out or being reworked? If it's in, how does it work? I looked at the code and the see the animal/humanlike chances, but not how they are defined apart from being between 0 and 1, or whether they increase with time/experience. Thanks! After I wrote the code I looked at rjw code for this then at bear defs in rjw compatibility(complex setting) is determined by bodyDef and body size with greater the difference the lower the compatibility factor the original idea was to increase compatibility between animals with known viable offspring how ever with rjw complex setting my patch is useless unless I add multiplier nerfing the result the statDefs(default .5) don't change but can be used by other modder to make race/xenotype more or less compatible(with a patch giving all dryad a humanlike compatibility of 1) r: result from rjw compatibility formula if value 0 or 1: incompatible or 100% compatibility respectively if value >= .5: lerp(r, 1, (value-.5)*2) if value < .5: lerp(r*.1, r, value*2) rjw\<version>\Source\Modules\Pregnancy\Pregnancy_helper.cs, lines 501 for entire calculation, line 525 for method being patched rjw\<version>\Source\Common\Helpers\SexUtility.cs, line 414 for method being patched
DaMan1 Posted October 9, 2025 Posted October 9, 2025 Can you add the new features/changes added in every new update with a different color? I really like what you are doing but trying to catch what is new is kinda 'gotta read it all' to catch a change. Take care and thanks for the mod! 1
SecretAgentClank Posted October 13, 2025 Posted October 13, 2025 On 10/8/2025 at 6:58 PM, ESeeker said: no the patch is for whether or not pawn in colony can be sold meaning if you have any vehicle/drone in colony the patch would break also I don't think vehicle/drone can actually trade fixed in 1.8.4 I should further clarify by saying that there was no vehicle or drone in the entire colony at all. Ran into another issue with a slave trying to construct... Spoiler Exception in JobDriver tick for pawn Woundwort driver=JobDriver_ConstructFinishFrame (toilIndex=1) driver.job=(FinishFrame (Job_2278964) A = Thing_Frame_SleepAccelerator665208 Giver = ThinkNode_QueuedJob [workGiverDef: ConstructFinishFrames]) System.NullReferenceException: Object reference not set to an instance of an object [Ref 22B0718E] at FamilyOverhaul.StatPart_SlaveAdv.ValueFor (Verse.Pawn pawn) [0x00007] in <954a005b6f8c48ca8a3f15bfc4665f2b>:0 at FamilyOverhaul.StatPart_SlaveAdv.TransformValue (RimWorld.StatRequest req, System.Single& val) [0x0001e] in <954a005b6f8c48ca8a3f15bfc4665f2b>:0 at RimWorld.StatWorker.FinalizeValue (RimWorld.StatRequest req, System.Single& val, System.Boolean applyPostProcess) [0x00022] in <24d25868955f4df08b02c73b55f389fe>:0 at RimWorld.StatWorker.GetValue (RimWorld.StatRequest req, System.Boolean applyPostProcess) [0x0005c] in <24d25868955f4df08b02c73b55f389fe>:0 - TRANSPILER Krkr.RocketMan: IEnumerable`1 RocketMan.Optimizations.StatWorker_Patch:Transpiler(IEnumerable`1 instructions, MethodBase original) at RimWorld.StatWorker.GetValue (Verse.Thing thing, System.Boolean applyPostProcess, System.Int32 cacheStaleAfterTicks) [0x0007c] in <24d25868955f4df08b02c73b55f389fe>:0 at RimWorld.StatExtension.GetStatValue (Verse.Thing thing, RimWorld.StatDef stat, System.Boolean applyPostProcess, System.Int32 cacheStaleAfterTicks) [0x00006] in <24d25868955f4df08b02c73b55f389fe>:0 at RimWorld.JobDriver_ConstructFinishFrame+<>c__DisplayClass8_0.<MakeNewToils>b__1 (System.Int32 delta) [0x0008c] in <24d25868955f4df08b02c73b55f389fe>:0 - TRANSPILER OskarPotocki.VEF: IEnumerable`1 VEF.Pawns.VanillaExpandedFramework_JobDriver_ConstructFinishFrame_MakeNewToils_TickAction_Patch:Transpiler(IEnumerable`1 codeInstructions, MethodBase method) - TRANSPILER PeteTimesSix.ResearchReinvented: IEnumerable`1 PeteTimesSix.ResearchReinvented.HarmonyPatches.Prototypes.JobDriver_ConstructFinishFrame_MakeNewToils_Patches:JobDriver_ConstructFinishFrame_MakeNewToils_initAction_Transpiler(IEnumerable`1 instructions) - TRANSPILER vanillaexpanded.skills: IEnumerable`1 VSE.Stats.StatPatches:FloorStatOptionTranspiler(IEnumerable`1 instructions) at Verse.AI.JobDriver.DriverTickInterval (System.Int32 delta) [0x0009f] in <24d25868955f4df08b02c73b55f389fe>:0 UnityEngine.StackTraceUtility:ExtractStackTrace () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Log.Error_Patch3 (string) (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.AI.JobUtility.TryStartErrorRecoverJob_Patch1 (Verse.Pawn,string,System.Exception,Verse.AI.JobDriver) Verse.AI.JobDriver:DriverTickInterval (int) Verse.AI.Pawn_JobTracker:JobTrackerTickInterval (int) Verse.Pawn:TickInterval (int) Verse.Thing:DoTick () Verse.TickList:Tick () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.TickManager.DoSingleTick_Patch3 (Verse.TickManager) Verse.TickManager:TickManagerUpdate () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Game.UpdatePlay_Patch4 (Verse.Game) Verse.Root_Play:Update () Will see if I can fix it myself....
furel Posted October 13, 2025 Posted October 13, 2025 15 hours ago, SecretAgentClank said: I should further clarify by saying that there was no vehicle or drone in the entire colony at all. Ran into another issue with a slave trying to construct... Reveal hidden contents Exception in JobDriver tick for pawn Woundwort driver=JobDriver_ConstructFinishFrame (toilIndex=1) driver.job=(FinishFrame (Job_2278964) A = Thing_Frame_SleepAccelerator665208 Giver = ThinkNode_QueuedJob [workGiverDef: ConstructFinishFrames]) System.NullReferenceException: Object reference not set to an instance of an object [Ref 22B0718E] at FamilyOverhaul.StatPart_SlaveAdv.ValueFor (Verse.Pawn pawn) [0x00007] in <954a005b6f8c48ca8a3f15bfc4665f2b>:0 at FamilyOverhaul.StatPart_SlaveAdv.TransformValue (RimWorld.StatRequest req, System.Single& val) [0x0001e] in <954a005b6f8c48ca8a3f15bfc4665f2b>:0 at RimWorld.StatWorker.FinalizeValue (RimWorld.StatRequest req, System.Single& val, System.Boolean applyPostProcess) [0x00022] in <24d25868955f4df08b02c73b55f389fe>:0 at RimWorld.StatWorker.GetValue (RimWorld.StatRequest req, System.Boolean applyPostProcess) [0x0005c] in <24d25868955f4df08b02c73b55f389fe>:0 - TRANSPILER Krkr.RocketMan: IEnumerable`1 RocketMan.Optimizations.StatWorker_Patch:Transpiler(IEnumerable`1 instructions, MethodBase original) at RimWorld.StatWorker.GetValue (Verse.Thing thing, System.Boolean applyPostProcess, System.Int32 cacheStaleAfterTicks) [0x0007c] in <24d25868955f4df08b02c73b55f389fe>:0 at RimWorld.StatExtension.GetStatValue (Verse.Thing thing, RimWorld.StatDef stat, System.Boolean applyPostProcess, System.Int32 cacheStaleAfterTicks) [0x00006] in <24d25868955f4df08b02c73b55f389fe>:0 at RimWorld.JobDriver_ConstructFinishFrame+<>c__DisplayClass8_0.<MakeNewToils>b__1 (System.Int32 delta) [0x0008c] in <24d25868955f4df08b02c73b55f389fe>:0 - TRANSPILER OskarPotocki.VEF: IEnumerable`1 VEF.Pawns.VanillaExpandedFramework_JobDriver_ConstructFinishFrame_MakeNewToils_TickAction_Patch:Transpiler(IEnumerable`1 codeInstructions, MethodBase method) - TRANSPILER PeteTimesSix.ResearchReinvented: IEnumerable`1 PeteTimesSix.ResearchReinvented.HarmonyPatches.Prototypes.JobDriver_ConstructFinishFrame_MakeNewToils_Patches:JobDriver_ConstructFinishFrame_MakeNewToils_initAction_Transpiler(IEnumerable`1 instructions) - TRANSPILER vanillaexpanded.skills: IEnumerable`1 VSE.Stats.StatPatches:FloorStatOptionTranspiler(IEnumerable`1 instructions) at Verse.AI.JobDriver.DriverTickInterval (System.Int32 delta) [0x0009f] in <24d25868955f4df08b02c73b55f389fe>:0 UnityEngine.StackTraceUtility:ExtractStackTrace () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Log.Error_Patch3 (string) (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.AI.JobUtility.TryStartErrorRecoverJob_Patch1 (Verse.Pawn,string,System.Exception,Verse.AI.JobDriver) Verse.AI.JobDriver:DriverTickInterval (int) Verse.AI.Pawn_JobTracker:JobTrackerTickInterval (int) Verse.Pawn:TickInterval (int) Verse.Thing:DoTick () Verse.TickList:Tick () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.TickManager.DoSingleTick_Patch3 (Verse.TickManager) Verse.TickManager:TickManagerUpdate () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Game.UpdatePlay_Patch4 (Verse.Game) Verse.Root_Play:Update () Will see if I can fix it myself.... This is the solution On 10/6/2025 at 11:35 AM, furel said: The problems are TransformValue and ExplanationPart, you can't send req.Pawn to ValueFor, you have to use it like in ActiveFor and make req.Thing as a Pawn input, like this: Reveal hidden contents TransformValue(StatRequest req, ref float val) { if (ActiveFor(req.Thing)) { if (req.Thing is Pawn pawn) { val *= ValueFor(pawn); } } } public override string ExplanationPart(StatRequest req) { if (req.HasThing && ActiveFor(req.Thing)) { if (req.Thing is Pawn pawn) { return "StatsReport_Slave".Translate() + (": x" + ValueFor(pawn).ToStringPercent()); } } return null; }
ESeeker Posted October 13, 2025 Author Posted October 13, 2025 53 minutes ago, furel said: This is the solution thanks, I figured that was the problem but accidentally loaded my main save instead test save so was unable to confirm 1
Rimworld Traveller Posted October 14, 2025 Posted October 14, 2025 I am also having problems with Family Overhaul 1.6. My slaves just stand still when asked to tend wounds. I've just updated to 1.8.6 and hopefully that'll fix it. This mod worked great in my last colony and for this new one I added Equal Milking and it sounds like that's the problem. I love the concept of concubines so much. subtypes: Maid(butler for male), Acolyte/Squire/Apprentice(probably needs renaming), Pet, Concubine, Broodmother, Breeder, Toy Could you explain what the differences are? Or are these just different flavor names for the same type of relationship?
Rimworld Traveller Posted October 14, 2025 Posted October 14, 2025 (edited) 3 hours ago, Rimworld Traveller said: I am also having problems with Family Overhaul 1.6. My slaves just stand still when asked to tend wounds. I've just updated to 1.8.6 and hopefully that'll fix it. This mod worked great in my last colony and for this new one I added Equal Milking and it sounds like that's the problem. I love the concept of concubines so much. subtypes: Maid(butler for male), Acolyte/Squire/Apprentice(probably needs renaming), Pet, Concubine, Broodmother, Breeder, Toy Could you explain what the differences are? Or are these just different flavor names for the same type of relationship? I can report that my slaves can tend wounds just fine in 1.8.6. Thank you for your hard work! Edit: The old way of assigning concubines was DevMode "Add Family Relationship" then choosing concubine. But the concubine option is gone now? Is "overseer" the same thing? Concubine used to give the pain a +20 opinion of each other, which was useful to get new slaves to do lovin' with their master. Edit again: ESeeker explains how to do it in the updated OP and it works super well! I "added" new master/servant relationship and only had the choice of Maid or Acolyte. I chose acolyte then clicked "edit relationship" and concubine was an option! Edited October 14, 2025 by Rimworld Traveller
Sidereal Posted October 14, 2025 Posted October 14, 2025 On 10/9/2025 at 4:54 PM, ESeeker said: After I wrote the code I looked at rjw code for this then at bear defs in rjw compatibility(complex setting) is determined by bodyDef and body size with greater the difference the lower the compatibility factor the original idea was to increase compatibility between animals with known viable offspring how ever with rjw complex setting my patch is useless unless I add multiplier nerfing the result the statDefs(default .5) don't change but can be used by other modder to make race/xenotype more or less compatible(with a patch giving all dryad a humanlike compatibility of 1) r: result from rjw compatibility formula if value 0 or 1: incompatible or 100% compatibility respectively if value >= .5: lerp(r, 1, (value-.5)*2) if value < .5: lerp(r*.1, r, value*2) rjw\<version>\Source\Modules\Pregnancy\Pregnancy_helper.cs, lines 501 for entire calculation, line 525 for method being patched rjw\<version>\Source\Common\Helpers\SexUtility.cs, line 414 for method being patched Thanks! Understood. So at the moment it is not active at all, or only working for animals to be compatible with humans and not the other way around? I see the statdef for animalcompatibility is not as complete as for humancompatibility? Which I guess would explain why I could not find it in pawn's stats
ESeeker Posted October 14, 2025 Author Posted October 14, 2025 42 minutes ago, Sidereal said: Thanks! Understood. So at the moment it is not active at all, or only working for animals to be compatible with humans and not the other way around? I see the statdef for animalcompatibility is not as complete as for humancompatibility? Which I guess would explain why I could not find it in pawn's stats slight clarification, both statDefs are the same but only one gets used based on if other pawn is humanlike/animal if used stat value is 0 for either pawn then they're incompatible the 2 values from the pawns are merged with lerp(dad, mom, .6) example: dad is humanlike, mom is dryad, OV = value form rjw compatibility(complex setting) values: dad = .5(default), mom = 1(dad is humanlike so use humancompatibility) formula: lerp(.5, 1, .6) = .8 then (.8*2)-1 = .6 then lerp(OV, 1, .6) will add bonus for trainableDefs from eltoro's bestiality mod so the statDefs aren't essentially useless
GenericUsername234 Posted October 14, 2025 Posted October 14, 2025 (edited) Apparel Tweaks For RJW Breaks something in the display of bondage items the likes from RJW-Extension. Maybe something to do with the bondage layer, not sure. Doesn't display any of the items from RJW-EX in either sex or just a pawn walking around. Tried messing with the mod settings, but that doesn't seem to affect this issue. Removed the mod from the load order and all of the items display correctly. Currently just cycling through the releases to see if any worked at some point. On current RJW and 1.6 edit: process of elimination, seems like something in 1.6.1.2 broke this functionality. 1.6.1.1 displays the aforementioned items just fine. Edited October 14, 2025 by Bignickdigger69
ESeeker Posted October 15, 2025 Author Posted October 15, 2025 7 hours ago, Bignickdigger69 said: Apparel Tweaks For RJW Breaks something in the display of bondage items the likes from RJW-Extension. Maybe something to do with the bondage layer, not sure. Doesn't display any of the items from RJW-EX in either sex or just a pawn walking around. Tried messing with the mod settings, but that doesn't seem to affect this issue. Removed the mod from the load order and all of the items display correctly. Currently just cycling through the releases to see if any worked at some point. On current RJW and 1.6 edit: process of elimination, seems like something in 1.6.1.2 broke this functionality. 1.6.1.1 displays the aforementioned items just fine. in 1.6.1.2 I merged s16 Extension's underwhere layer into UnderWhere's looking at rjw-ex mod it's apparel uses both mods layers but since I removed s16's meaning it would try and apply UnderWhere's layer twice
striker345 Posted October 15, 2025 Posted October 15, 2025 Holy crap the family overhaul mod causes huge spike in lags when I open a pawn's social tab
GenericUsername234 Posted October 15, 2025 Posted October 15, 2025 14 hours ago, ESeeker said: in 1.6.1.2 I merged s16 Extension's underwhere layer into UnderWhere's looking at rjw-ex mod it's apparel uses both mods layers but since I removed s16's meaning it would try and apply UnderWhere's layer twice 1.6.1.5 is still borked. Still not displaying chastity belts. Didn't do extensive testing though. Thanks for taking a crack at it!
ESeeker Posted October 15, 2025 Author Posted October 15, 2025 On 10/14/2025 at 10:38 PM, Bignickdigger69 said: Apparel Tweaks For RJW Breaks something in the display of bondage items the likes from RJW-Extension. Maybe something to do with the bondage layer, not sure. Doesn't display any of the items from RJW-EX in either sex or just a pawn walking around. Tried messing with the mod settings, but that doesn't seem to affect this issue. Removed the mod from the load order and all of the items display correctly. Currently just cycling through the releases to see if any worked at some point. On current RJW and 1.6 edit: process of elimination, seems like something in 1.6.1.2 broke this functionality. 1.6.1.1 displays the aforementioned items just fine. wait a sec 1.6.1.2? the merge was in 1.6.1.3 looking git changes made in 1.6.1.2 I found: if (!apparel?.TryGetComp<CompApparelVisibility>()?.IsVisibleOnPawns() ?? true) <-- changed false to true in 1.6.1.2 return __result = false; return true; the comp only given to things with "Apparel" thingClass and it's likely RJW Extension apparel use different thingClass
GenericUsername234 Posted October 15, 2025 Posted October 15, 2025 51 minutes ago, ESeeker said: wait a sec 1.6.1.2? the merge was in 1.6.1.3 looking git changes made in 1.6.1.2 I found: if (!apparel?.TryGetComp<CompApparelVisibility>()?.IsVisibleOnPawns() ?? true) <-- changed false to true in 1.6.1.2 return __result = false; return true; the comp only given to things with "Apparel" thingClass and it's likely RJW Extension apparel use different thingClass Seems to have done the trick! The belts now display normally, and during animation if the settings are set that way. But since 1.6.1.5 two new red errors are thrown out during startup. Due to me not running S16 it seems. Spoiler XML error: <xpath>Defs/ThingDef/apparel/layers[li="S16_Underwear" and li="Underwear"]/li[text()="S16_Underwear"]</xpath> doesn't correspond to any field in type PatchOperation. Context: <li Class="PatchOperationRemoved"><xpath>Defs/ThingDef/apparel/layers[li="S16_Underwear" and li="Underwear"]/li[text()="S16_Underwear"]</xpath></li> UnityEngine.StackTraceUtility:ExtractStackTrace () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Log.Error_Patch1 (string) Verse.XmlToObjectUtils:DoFieldSearch (System.Type,System.Xml.XmlNode,System.Xml.XmlNode) Verse.DirectXmlToObject:ObjectFromXml<Verse.PatchOperation> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ListFromXml<Verse.PatchOperation> (System.Xml.XmlNode) Verse.DirectXmlToObject:ListFromXmlReflection<Verse.PatchOperation> (System.Xml.XmlNode) Verse.DirectXmlToObject:ObjectFromXml<System.Collections.Generic.List`1<Verse.PatchOperation>> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXmlReflection<System.Collections.Generic.List`1<Verse.PatchOperation>> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXml<Verse.PatchOperation> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXmlReflection<Verse.PatchOperation> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXml<Verse.PatchOperation> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ListFromXml<Verse.PatchOperation> (System.Xml.XmlNode) Verse.DirectXmlToObject:ListFromXmlReflection<Verse.PatchOperation> (System.Xml.XmlNode) Verse.DirectXmlToObject:ObjectFromXml<System.Collections.Generic.List`1<Verse.PatchOperation>> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXmlReflection<System.Collections.Generic.List`1<Verse.PatchOperation>> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXml<Verse.PatchOperation> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXmlReflection<Verse.PatchOperation> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXml<Verse.PatchOperation> (System.Xml.XmlNode,bool) (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.ModContentPack.LoadPatches_Patch1 (Verse.ModContentPack) Verse.ModContentPack:get_Patches () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.LoadedModManager.ErrorCheckPatches_Patch1 () Verse.LoadedModManager:LoadAllActiveMods (bool) Verse.PlayDataLoader:DoPlayLoad () Verse.PlayDataLoader:LoadAllPlayData (bool) Verse.Root/<>c:<Start>b__10_1 () Verse.LongEventHandler:RunEventFromAnotherThread (System.Action) Verse.LongEventHandler/<>c:<UpdateCurrentAsynchronousEvent>b__28_0 () System.Threading.ThreadHelper:ThreadStart_Context (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object) System.Threading.ThreadHelper:ThreadStart () and Spoiler Could not find type named PatchOperationRemoved from node <li Class="PatchOperationRemoved"><xpath>Defs/ThingDef/apparel/layers[li="S16_Underwear" and li="Underwear"]/li[text()="S16_Underwear"]</xpath></li> UnityEngine.StackTraceUtility:ExtractStackTrace () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Log.Error_Patch1 (string) Verse.DirectXmlToObject:ClassTypeOf<Verse.PatchOperation> (System.Xml.XmlNode) Verse.DirectXmlToObject:ObjectFromXml<Verse.PatchOperation> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ListFromXml<Verse.PatchOperation> (System.Xml.XmlNode) Verse.DirectXmlToObject:ListFromXmlReflection<Verse.PatchOperation> (System.Xml.XmlNode) Verse.DirectXmlToObject:ObjectFromXml<System.Collections.Generic.List`1<Verse.PatchOperation>> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXmlReflection<System.Collections.Generic.List`1<Verse.PatchOperation>> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXml<Verse.PatchOperation> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXmlReflection<Verse.PatchOperation> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXml<Verse.PatchOperation> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ListFromXml<Verse.PatchOperation> (System.Xml.XmlNode) Verse.DirectXmlToObject:ListFromXmlReflection<Verse.PatchOperation> (System.Xml.XmlNode) Verse.DirectXmlToObject:ObjectFromXml<System.Collections.Generic.List`1<Verse.PatchOperation>> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXmlReflection<System.Collections.Generic.List`1<Verse.PatchOperation>> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXml<Verse.PatchOperation> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXmlReflection<Verse.PatchOperation> (System.Xml.XmlNode,bool) Verse.DirectXmlToObject:ObjectFromXml<Verse.PatchOperation> (System.Xml.XmlNode,bool) (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.ModContentPack.LoadPatches_Patch1 (Verse.ModContentPack) Verse.ModContentPack:get_Patches () (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.LoadedModManager.ErrorCheckPatches_Patch1 () Verse.LoadedModManager:LoadAllActiveMods (bool) Verse.PlayDataLoader:DoPlayLoad () Verse.PlayDataLoader:LoadAllPlayData (bool) Verse.Root/<>c:<Start>b__10_1 () Verse.LongEventHandler:RunEventFromAnotherThread (System.Action) Verse.LongEventHandler/<>c:<UpdateCurrentAsynchronousEvent>b__28_0 () System.Threading.ThreadHelper:ThreadStart_Context (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object) System.Threading.ThreadHelper:ThreadStart () 1
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now