From 203d0f9decccaa58978c68ac859f6a6a4356efe1 Mon Sep 17 00:00:00 2001 From: Talos Date: Sat, 13 Dec 2025 13:56:11 +0800 Subject: [PATCH 1/6] Edit AnimationPatch_PawnRenderTree_OffsetSubWorker.xml The original implementation conflicts with "Exosuit Framework", causing RJW animation offsets for mechanoids and animals to become unadjustable. Thanks to the Exosuit Framework team for providing a solution. --- ...tionPatch_PawnRenderTree_OffsetSubWorker.xml | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/1.6/Patches/AnimationPatch_PawnRenderTree_OffsetSubWorker.xml b/1.6/Patches/AnimationPatch_PawnRenderTree_OffsetSubWorker.xml index 6aa36a8..a12b7b6 100644 --- a/1.6/Patches/AnimationPatch_PawnRenderTree_OffsetSubWorker.xml +++ b/1.6/Patches/AnimationPatch_PawnRenderTree_OffsetSubWorker.xml @@ -1,20 +1,16 @@ - + Always -
  • - /Defs/PawnRenderTreeDef/root/subworkerClasses +
  • Always - - /Defs/PawnRenderTreeDef/root - - - - + /Defs/PawnRenderTreeDef/root[not(subworkerClasses)] + + +
  • -
  • /Defs/PawnRenderTreeDef/root/subworkerClasses @@ -23,5 +19,4 @@
  • -
    \ No newline at end of file From aacf38c8a269b4f98d171199378a035e1a10c3c2 Mon Sep 17 00:00:00 2001 From: LVKavidya Date: Thu, 2 Jul 2026 12:52:15 +0800 Subject: [PATCH 2/6] Update Simplified Chinese translation --- .../MainButtonDef/MainButtonDef.xml | 5 ++ .../AnimationPropDef_Cowgirl_Xray.xml | 4 ++ .../AnimationPropDef_Xray_Inside.xml | 4 ++ .../AnimationPropDef_Xray_Penis.xml | 4 ++ .../AnimationPropDef_Xray_Race.xml | 5 ++ .../Keyed/RJWAnimations-LanguageData.xml | 49 +++++++++---------- 6 files changed, 45 insertions(+), 26 deletions(-) create mode 100644 Languages/ChineseSimplified/DefInjected/MainButtonDef/MainButtonDef.xml create mode 100644 Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Cowgirl_Xray.xml create mode 100644 Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Xray_Inside.xml create mode 100644 Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Xray_Penis.xml create mode 100644 Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Xray_Race.xml diff --git a/Languages/ChineseSimplified/DefInjected/MainButtonDef/MainButtonDef.xml b/Languages/ChineseSimplified/DefInjected/MainButtonDef/MainButtonDef.xml new file mode 100644 index 0000000..da8bf6c --- /dev/null +++ b/Languages/ChineseSimplified/DefInjected/MainButtonDef/MainButtonDef.xml @@ -0,0 +1,5 @@ + + + 动画管理器 + 编辑角色动画的偏移量。 + \ No newline at end of file diff --git a/Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Cowgirl_Xray.xml b/Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Cowgirl_Xray.xml new file mode 100644 index 0000000..e1991a7 --- /dev/null +++ b/Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Cowgirl_Xray.xml @@ -0,0 +1,4 @@ + + + 女牛仔式-透视 + \ No newline at end of file diff --git a/Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Xray_Inside.xml b/Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Xray_Inside.xml new file mode 100644 index 0000000..5904ef1 --- /dev/null +++ b/Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Xray_Inside.xml @@ -0,0 +1,4 @@ + + + 体内透视 + \ No newline at end of file diff --git a/Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Xray_Penis.xml b/Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Xray_Penis.xml new file mode 100644 index 0000000..dfd781e --- /dev/null +++ b/Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Xray_Penis.xml @@ -0,0 +1,4 @@ + + + 阴茎透视 + \ No newline at end of file diff --git a/Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Xray_Race.xml b/Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Xray_Race.xml new file mode 100644 index 0000000..f6253ee --- /dev/null +++ b/Languages/ChineseSimplified/DefInjected/Rimworld_Animations.AnimationPropDef/AnimationPropDef_Xray_Race.xml @@ -0,0 +1,5 @@ + + + 阴道透视 + 阴道透视 + \ No newline at end of file diff --git a/Languages/ChineseSimplified/Keyed/RJWAnimations-LanguageData.xml b/Languages/ChineseSimplified/Keyed/RJWAnimations-LanguageData.xml index 1d72019..3addfa5 100644 --- a/Languages/ChineseSimplified/Keyed/RJWAnimations-LanguageData.xml +++ b/Languages/ChineseSimplified/Keyed/RJWAnimations-LanguageData.xml @@ -1,28 +1,25 @@ - + - - - RJW Animation Settings - 启用声音覆盖 - 控制生殖器旋转 - 启用高潮颤抖 - 启用强奸颤动 - 性爱时启用心形 - 播放非性行为的动画 (牵手、亲热) - 启用动画管理器选项卡 - 颤抖/颤动强度 (默认为 2): - 在动画期间播放语音 - 如果没有找到外星种族的声音,则默认播放人类的声音 - 调试模式 - 调整渲染树偏移表单的浮动范围: - - - - Animation Manager - 警告--一般情况下,你不想更改人类偏移值,只想更改外星种族偏移值或动物偏移值 - 将偏移值复制到剪贴板 - 将偏移值粘贴到 OffsetDef 中,或在 Discord 中共享 - - - + RJW 动画设置 + 启用声音覆盖 + 控制生殖器旋转 + 启用高潮颤抖 + 启用强奸颤动 + 性爱时启用心形 + 播放非性行为的动画 (牵手、亲热) + 启用动画管理器选项卡 + 颤抖/颤动强度 (默认为 2): + 在动画期间播放语音 + 如果没有找到外星种族的声音,则默认播放人类的声音 + 调试模式 + 调整渲染树偏移表单的浮动范围: + 为男性角色播放肛交动画 + 在动画期间播放声音 + 语音音量: + 声音音量: + 动画管理器 + 警告--一般情况下,你不想更改人类偏移值,只想更改外星种族偏移值或动物偏移值 + 将偏移值复制到剪贴板 + 将偏移值粘贴到 OffsetDef 中,或在 Discord 中共享 + 重置 \ No newline at end of file From 21ef8d24e0b97cf025b6d8843d9546271f412862 Mon Sep 17 00:00:00 2001 From: Rob The Robot Guard <55799-RobTheRobotGuard@users.noreply.gitgud.io> Date: Wed, 7 Oct 2026 17:01:46 +0100 Subject: [PATCH 3/6] Fix necrophilia animations and issues from code review Necrophilia: - Anchor the living pawn to the corpse instead of its inner pawn, whose position is stale once the corpse is hauled - Corpses only TickRare, so a living participant's animator now ticks dead actors' animators; multi-stage animations no longer desync - Save driven corpses with saveDestroyedThings (dead pawns count as destroyed and would otherwise load as null) - Reapply the renderer animation mid-way after loading, since vanilla doesn't save it Review fixes: - Priority-0 fallback contexts can now be selected; negative priorities no longer log "Negative weight" errors; drop no-op OrderBy - Remove dead HAR and SexToys entries from the v1.6 LoadFolders block - Neverending sex: retry about once a second instead of every tick, guard null participants, reset RJW timers, handle corpses - Ignore anchors that were destroyed or despawned - Use pivot (not scale) for the inverse pivot translation in TryGetMatrix - Offset tab Reset removes the saved override and restores def offsets - Merge root/child sound handling; respect playSounds for the root node; read child voices from the child node; no voices from corpses - Force-save settings whose load defaults differ from field defaults - Debug-only interaction logging; null checks for partner, offsetDefs, whitelist and short blacklists - Remove empty or no-op Harmony patch classes Co-Authored-By: Claude Opus 5.5 --- .../GroupAnimationContext.cs | 4 +- .../GroupAnimations/GroupAnimationDef.cs | 4 +- 1.6/Source/Comps/CompExtendedAnimator.cs | 240 ++++++++++-------- .../BaseExtendedAnimatorAnchor.cs | 3 + .../ExtendedAnimatorAnchor_Thing.cs | 3 + .../MainTabWindow_OffsetConfigure.cs | 21 +- .../HarmonyPatch_JobDriver_Masturbate.cs | 55 ---- .../JobDrivers/HarmonyPatch_JobDriver_Sex.cs | 75 ++++-- ...HarmonyPatch_JobDriver_SexBaseInitiator.cs | 17 +- ...onyPatch_JobDriver_SexBaseReceiverRaped.cs | 29 --- .../HarmonyPatch_PawnRenderTree.cs | 4 +- .../RimworldPatches/HarmonyPatch_Thing.cs | 33 --- 1.6/Source/Settings/PawnScaledOffsets.cs | 4 +- 1.6/Source/Settings/RJWAnimationSettings.cs | 14 +- 1.6/Source/Utilities/AnimationUtility.cs | 44 +++- LoadFolders.xml | 2 - 16 files changed, 273 insertions(+), 279 deletions(-) delete mode 100644 1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Masturbate.cs delete mode 100644 1.6/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverRaped.cs delete mode 100644 1.6/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs diff --git a/1.6/Source/Animations/GroupAnimations/GroupAnimationContexts/GroupAnimationContext.cs b/1.6/Source/Animations/GroupAnimations/GroupAnimationContexts/GroupAnimationContext.cs index 74d91da..0cb13b6 100644 --- a/1.6/Source/Animations/GroupAnimations/GroupAnimationContexts/GroupAnimationContext.cs +++ b/1.6/Source/Animations/GroupAnimations/GroupAnimationContexts/GroupAnimationContext.cs @@ -91,7 +91,7 @@ namespace Rimworld_Animations public List FindAnyWorkingSet(List actors) { - if (actors.Count != whitelist.Count) return null; + if (whitelist.NullOrEmpty() || actors.Count != whitelist.Count) return null; int numActors = actors.Count; @@ -170,7 +170,7 @@ namespace Rimworld_Animations return false; } - if (!blacklist.NullOrEmpty() && blacklist[index].PawnTest(actor)) + if (!blacklist.NullOrEmpty() && index < blacklist.Count && blacklist[index] != null && blacklist[index].PawnTest(actor)) { return false; } diff --git a/1.6/Source/Animations/GroupAnimations/GroupAnimationDef.cs b/1.6/Source/Animations/GroupAnimations/GroupAnimationDef.cs index 30c9f61..c314bef 100644 --- a/1.6/Source/Animations/GroupAnimations/GroupAnimationDef.cs +++ b/1.6/Source/Animations/GroupAnimations/GroupAnimationDef.cs @@ -167,7 +167,9 @@ namespace Rimworld_Animations string bodyTypeDef = (pawn.story?.bodyType != null) ? pawn.story.bodyType.ToString() : ""; - if (offsetDefs[actor].FindOffset(pawn, out BaseAnimationOffset animationOffset)) + //defs without offsetDefs (or fewer than numActors) just get no offset + if (!offsetDefs.NullOrEmpty() && actor < offsetDefs.Count && offsetDefs[actor] != null + && offsetDefs[actor].FindOffset(pawn, out BaseAnimationOffset animationOffset)) { position = animationOffset.getOffset(pawn); rotation = animationOffset.getRotation(pawn); diff --git a/1.6/Source/Comps/CompExtendedAnimator.cs b/1.6/Source/Comps/CompExtendedAnimator.cs index 17ce3a3..fe71c2a 100644 --- a/1.6/Source/Comps/CompExtendedAnimator.cs +++ b/1.6/Source/Comps/CompExtendedAnimator.cs @@ -26,6 +26,12 @@ namespace Rimworld_Animations { private VoiceDef voice; private VoiceTagDef lastVoiceTag; + //dead actors (corpses) in this pawn's animation; corpses only TickRare, so this comp ticks their animators for them + private List drivenPawns; + + //the renderer's current animation isn't saved by vanilla; reapply it on the first tick after loading + private bool restoreAnimationAfterLoad; + private bool isAnimating = false; @@ -41,7 +47,7 @@ namespace Rimworld_Animations { { get { - return anchor != null; + return anchor != null && anchor.IsValid; } } @@ -135,6 +141,42 @@ namespace Rimworld_Animations { public override void CompTick() { + AnimatorTick(); + + if (!drivenPawns.NullOrEmpty()) + { + foreach (Pawn drivenPawn in drivenPawns.ToList()) + { + CompExtendedAnimator drivenAnimator = drivenPawn?.TryGetComp(); + + //stop driving if the corpse finished, was destroyed or got resurrected (it ticks itself again) + if (drivenAnimator == null || !drivenAnimator.IsAnimating || !drivenPawn.Dead) + { + drivenPawns.Remove(drivenPawn); + continue; + } + + drivenAnimator.AnimatorTick(); + } + } + + base.CompTick(); + } + + public void AddDrivenPawn(Pawn deadPawn) + { + if (drivenPawns == null) drivenPawns = new List(); + drivenPawns.AddDistinct(deadPawn); + } + + public void AnimatorTick() + { + if (restoreAnimationAfterLoad) + { + restoreAnimationAfterLoad = false; + RestoreAnimationAfterLoad(); + } + if (isAnimating) { animationTicks++; @@ -157,10 +199,6 @@ namespace Rimworld_Animations { CheckAndPlaySounds(); } - - - - base.CompTick(); } //returns false if still more animations @@ -186,8 +224,33 @@ namespace Rimworld_Animations { } } + private void RestoreAnimationAfterLoad() + { + if (!isAnimating || animationQueue.NullOrEmpty()) return; + + PawnRenderer renderer = pawn.Drawer?.renderer; + if (renderer?.renderTree == null) return; + + renderer.SetAnimation(animationQueue[0]); + + //resume partway through the current animation instead of from its first frame + renderer.renderTree.animationStartTick = GenTicks.TicksGame - animationTicks; + renderer.SetAllGraphicsDirty(); + } + public void StopAnimating() { + //stop any corpses this pawn was animating, since they can't stop themselves + if (!drivenPawns.NullOrEmpty()) + { + List pawnsToStop = drivenPawns; + drivenPawns = null; + foreach (Pawn drivenPawn in pawnsToStop) + { + drivenPawn?.TryGetComp()?.StopAnimating(); + } + } + isAnimating = false; animationQueue = null; anchor = null; @@ -203,6 +266,7 @@ namespace Rimworld_Animations { this.actorIndex = actorIndex; this.currentGroupAnimation = groupAnimationDef; + drivenPawns = null; ticksSinceLastVoicePlayed = GenTicks.TicksGame; ticksUntilNextVoice = 0; @@ -236,9 +300,23 @@ namespace Rimworld_Animations { Scribe_Collections.Look(ref animationQueue, "animations_queue"); Scribe_Defs.Look(ref currentGroupAnimation, "animations_groupAnimationDef"); Scribe_Deep.Look(ref this.anchor, "animations_anchor"); + //dead pawns count as destroyed, so their references must be saved with saveDestroyedThings or they load as null + Scribe_Collections.Look(ref this.drivenPawns, "animations_drivenPawns", true, LookMode.Reference); Scribe_Values.Look(ref this.offset, "animations_offset", Vector3.zero); Scribe_Values.Look(ref this.rotation, "animations_rotationOffset", 0); Scribe_Defs.Look(ref this.voice, "animations_voice"); + + if (Scribe.mode == LoadSaveMode.PostLoadInit) + { + drivenPawns?.RemoveAll(x => x == null); + + if (isAnimating) + { + //animation defs can go missing between saves (e.g. an anim pack was removed) + if (animationQueue.NullOrEmpty()) isAnimating = false; + else restoreAnimationAfterLoad = true; + } + } } @@ -311,123 +389,79 @@ namespace Rimworld_Animations { public void CheckAndPlaySounds() { + //use held position/map so it also works for pawns inside corpses + Map map = pawn.MapHeld; + if (map == null) return; PawnRenderNode rootNode = pawn.Drawer?.renderer?.renderTree?.rootNode; - //check if the rootnode has sounds; if so play it - if (rootNode?.AnimationWorker is AnimationWorker_KeyframesExtended animWorker) + //check the rootnode for sounds + if (rootNode != null) { - SoundDef sound = animWorker.soundAtTick(rootNode.tree.AnimationTick, rootNode.tree.currentAnimation, rootNode); + PlaySoundsForNode(rootNode, map); + } + + //do the same for all the child nodes + if (rootNode?.children != null) + { + foreach (PawnRenderNode node in rootNode.children) + { + if (node != null) PlaySoundsForNode(node, map); + } + } + } + + private void PlaySoundsForNode(PawnRenderNode node, Map map) + { + if (!(node.AnimationWorker is AnimationWorker_KeyframesExtended animWorker)) return; + + if (RJWAnimationSettings.playSounds) + { + SoundDef sound = animWorker.soundAtTick(node.tree.AnimationTick, node.tree.currentAnimation, node); if (sound != null) { - SoundInfo soundInfo = new TargetInfo(pawn.Position, pawn.Map); + SoundInfo soundInfo = new TargetInfo(pawn.PositionHeld, map); //temp; does not consider non-rjw animations //todo: replace with value stored in comp or somewhere else? soundInfo.volumeFactor = RJWAnimationSettings.soundVolume; - sound.PlayOneShot(soundInfo); } - - if (RJWAnimationSettings.playVoices) - { - SoundInfo voiceInfo = new TargetInfo(pawn.Position, pawn.Map); - voiceInfo.volumeFactor = RJWAnimationSettings.voicesVolume; - - //play voice sounds - VoiceTagDef voiceTag = animWorker.voiceAtTick(rootNode.tree.AnimationTick, rootNode.tree.currentAnimation, rootNode); - if (voiceTag != null - && (lastVoiceTag != voiceTag || ticksSinceLastVoicePlayed + ticksUntilNextVoice < GenTicks.TicksGame)) //play a new voice tag, or wait until time elapsed - { - lastVoiceTag = voiceTag; - ticksSinceLastVoicePlayed = GenTicks.TicksGame; - - if (voice != null && voice.sounds.ContainsKey(voiceTag)) - { - ticksUntilNextVoice = voice.ticksBetweenPlays.RandomInRange; - voice.sounds[voiceTag].PlayOneShot(voiceInfo); - } - - else if (pawn.RaceProps.Humanlike && RJWAnimationSettings.playHumanlikeVoicesAsDefault) - { - //play default voice - VoiceDef pawnDefaultVoice = (pawn.gender == Gender.Male ? VoiceDefOf.Voice_HumanMale : VoiceDefOf.Voice_HumanFemale); - - ticksUntilNextVoice = pawnDefaultVoice.ticksBetweenPlays.RandomInRange; - - if (pawnDefaultVoice.sounds.ContainsKey(voiceTag)) - { - ticksUntilNextVoice = pawnDefaultVoice.ticksBetweenPlays.RandomInRange; - pawnDefaultVoice.sounds[voiceTag].PlayOneShot(voiceInfo); - } - - - } - - } - } - - } - //check rootnodes and children - if (rootNode?.children != null) + //corpses don't talk + if (!RJWAnimationSettings.playVoices || pawn.Dead) return; + + //play voice sounds + VoiceTagDef voiceTag = animWorker.voiceAtTick(node.tree.AnimationTick, node.tree.currentAnimation, node); + if (voiceTag == null + || (lastVoiceTag == voiceTag && ticksSinceLastVoicePlayed + ticksUntilNextVoice >= GenTicks.TicksGame)) //play a new voice tag, or wait until time elapsed { - foreach (PawnRenderNode node in rootNode?.children) + return; + } + + lastVoiceTag = voiceTag; + ticksSinceLastVoicePlayed = GenTicks.TicksGame; + + SoundInfo voiceInfo = new TargetInfo(pawn.PositionHeld, map); + voiceInfo.volumeFactor = RJWAnimationSettings.voicesVolume; + + if (voice != null && voice.sounds.ContainsKey(voiceTag)) + { + ticksUntilNextVoice = voice.ticksBetweenPlays.RandomInRange; + voice.sounds[voiceTag].PlayOneShot(voiceInfo); + } + else if (pawn.RaceProps.Humanlike && RJWAnimationSettings.playHumanlikeVoicesAsDefault) + { + //play default voice + VoiceDef pawnDefaultVoice = (pawn.gender == Gender.Male ? VoiceDefOf.Voice_HumanMale : VoiceDefOf.Voice_HumanFemale); + if (pawnDefaultVoice.sounds.ContainsKey(voiceTag)) { - if (node?.AnimationWorker is AnimationWorker_KeyframesExtended childrenAnimWorker) - { - - - if (RJWAnimationSettings.playSounds) - { - SoundDef sound = childrenAnimWorker.soundAtTick(node.tree.AnimationTick, node.tree.currentAnimation, node); - - if (sound != null) - { - SoundInfo soundInfo = new TargetInfo(pawn.Position, pawn.Map); - soundInfo.volumeFactor = RJWAnimationSettings.soundVolume; - sound.PlayOneShot(soundInfo); - } - } - - if (RJWAnimationSettings.playVoices) - { - - SoundInfo voiceInfo = new TargetInfo(pawn.Position, pawn.Map); - voiceInfo.volumeFactor = RJWAnimationSettings.voicesVolume; - - //play voice sounds - VoiceTagDef voiceTag = childrenAnimWorker.voiceAtTick(rootNode.tree.AnimationTick, rootNode.tree.currentAnimation, rootNode); - if (voiceTag != null - && (lastVoiceTag != voiceTag || ticksSinceLastVoicePlayed + ticksUntilNextVoice < GenTicks.TicksGame)) //play a new voice tag, or wait until time elapsed - { - lastVoiceTag = voiceTag; - ticksSinceLastVoicePlayed = GenTicks.TicksGame; - - if (voice != null && voice.sounds.ContainsKey(voiceTag)) - { - ticksUntilNextVoice = voice.ticksBetweenPlays.RandomInRange; - voice.sounds[voiceTag].PlayOneShot(voiceInfo); - } - else if (pawn.RaceProps.Humanlike && RJWAnimationSettings.playHumanlikeVoicesAsDefault) - { - - VoiceDef pawnDefaultVoice = (pawn.gender == Gender.Male ? VoiceDefOf.Voice_HumanMale : VoiceDefOf.Voice_HumanFemale); - if (pawnDefaultVoice.sounds.ContainsKey(voiceTag)) - { - ticksUntilNextVoice = pawnDefaultVoice.ticksBetweenPlays.RandomInRange; - pawnDefaultVoice.sounds[voiceTag].PlayOneShot(voiceInfo); - } - } - } - } - } + ticksUntilNextVoice = pawnDefaultVoice.ticksBetweenPlays.RandomInRange; + pawnDefaultVoice.sounds[voiceTag].PlayOneShot(voiceInfo); } } - //do the same for all the child nodes - } diff --git a/1.6/Source/Comps/ExtendedAnimatorAnchor/BaseExtendedAnimatorAnchor.cs b/1.6/Source/Comps/ExtendedAnimatorAnchor/BaseExtendedAnimatorAnchor.cs index 6116a8c..8cf28af 100644 --- a/1.6/Source/Comps/ExtendedAnimatorAnchor/BaseExtendedAnimatorAnchor.cs +++ b/1.6/Source/Comps/ExtendedAnimatorAnchor/BaseExtendedAnimatorAnchor.cs @@ -15,6 +15,9 @@ namespace Rimworld_Animations public virtual void ExposeData() { } public abstract Vector3 getDrawPos(); + //false if the anchor can't be drawn at anymore (e.g. the thing was destroyed) + public virtual bool IsValid => true; + public string GetUniqueLoadID() { throw new NotImplementedException(); diff --git a/1.6/Source/Comps/ExtendedAnimatorAnchor/ExtendedAnimatorAnchor_Thing.cs b/1.6/Source/Comps/ExtendedAnimatorAnchor/ExtendedAnimatorAnchor_Thing.cs index 6f86334..bd1fa4b 100644 --- a/1.6/Source/Comps/ExtendedAnimatorAnchor/ExtendedAnimatorAnchor_Thing.cs +++ b/1.6/Source/Comps/ExtendedAnimatorAnchor/ExtendedAnimatorAnchor_Thing.cs @@ -26,6 +26,9 @@ namespace Rimworld_Animations this.thing = thing; } + //spawned check also covers destroyed things, and things that didn't come back after loading + public override bool IsValid => thing != null && thing.Spawned; + public override Vector3 getDrawPos() { //x and z position, regular altitude for pawns diff --git a/1.6/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs b/1.6/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs index 318e9c2..4b2878a 100644 --- a/1.6/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs +++ b/1.6/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs @@ -58,13 +58,20 @@ namespace Rimworld_Animations { if (listingStandard.ButtonText("RimAnims_Reset".Translate())) { - if (!RJWAnimationSettings.offsets.NullOrEmpty() - && RJWAnimationSettings.offsets.ContainsKey(AnimationUtility.OffsetLookupKey(curPawn))) - { - RJWAnimationSettings.offsets[AnimationUtility.OffsetLookupKey(curPawn)].Reset(); - } - posX = posY = posZ = rot = 0; - + //remove the saved override entirely; an entry left behind would keep overriding the def's offset with zeros + RJWAnimationSettings.offsets?.Remove(AnimationUtility.OffsetLookupKey(curPawn)); + + //go back to the offset from the animation's offsetDefs + extendedAnimator.CurrentGroupAnimation.GetOffset(extendedAnimator.ActorIndex, curPawn, out Vector3? defOffset, out int? defRotation); + extendedAnimator.Offset = defOffset; + extendedAnimator.Rotation = defRotation; + + Vector3 resetOffset = defOffset ?? Vector3.zero; + posX = resetOffset.x; + posY = resetOffset.y; + posZ = resetOffset.z; + rot = defRotation ?? 0; + } listingStandard.GapLine(); diff --git a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Masturbate.cs b/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Masturbate.cs deleted file mode 100644 index d7c9e98..0000000 --- a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Masturbate.cs +++ /dev/null @@ -1,55 +0,0 @@ -using HarmonyLib; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; -using Verse.AI; - -namespace Rimworld_Animations -{ - [HarmonyPatch(typeof(JobDriver_Masturbate), "SetupDurationTicks")] - public class HarmonyPatch_JobDriver_Masturbate - { - public static void Postfix(JobDriver_Masturbate __instance) - { - //prevent early stoppage of masturbate jobdriver during animation - - /* not needed anymore? Ticks are assigned during animation - - __instance.duration = 10000000; - __instance.ticks_left = __instance.duration; - - */ - - } - } - - [HarmonyPatch(typeof(JobDriver_Masturbate), "MakeNewToils")] - public class HarmonyPatch_JobDriver_Masturbate2 - { - public static void Postfix(JobDriver_Masturbate __instance, ref IEnumerable __result) - { - - var toils = __result.ToList(); - - //sex toil - toils[1].initAction += delegate () - { - CompExtendedAnimator pawnAnimator = __instance.pawn.TryGetComp(); - - // if pawn was given an animation to play, - if (pawnAnimator.IsAnimating) - { - //set duration of masturbate toil to anim length - toils[1].defaultDuration = pawnAnimator.AnimationLength; - } - - }; - - __result = toils.AsEnumerable(); - } - } -} diff --git a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Sex.cs b/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Sex.cs index 622b7c1..d8d3ae2 100644 --- a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Sex.cs +++ b/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_Sex.cs @@ -30,36 +30,57 @@ namespace Rimworld_Animations public static void Postfix(JobDriver_Sex __instance, Pawn pawn, Thing target) { //if neverending sex and pawn doesn't have an animation, - if (__instance.neverendingsex - && !pawn.TryGetComp().IsAnimating) + //only retry about once a second; searching every animation def every tick is expensive when none fit + if (!__instance.neverendingsex + || !pawn.IsHashIntervalTick(60) + || !(pawn.TryGetComp() is CompExtendedAnimator animator) + || animator.IsAnimating) { - - //start a new animation for all the pawns paired with receiver job driver - List participants; - if (target is Pawn receiverPawn) - { - participants = (receiverPawn?.jobs?.curDriver as JobDriver_SexBaseReciever)?.parteners; - if (!participants.NullOrEmpty() && !participants.Contains(receiverPawn)) - { - participants = participants.Append(receiverPawn).ToList(); - } - } - else - { - participants = new List { pawn }; - } - - - GroupAnimationDef animation = AnimationUtility.FindGroupAnimation(participants, out List participantsOrdered); - if (animation != null) - { - Thing anchor = (Thing)__instance.Bed ?? pawn; - AnimationUtility.StartGroupAnimation(participantsOrdered, animation, anchor); - } - - + return; } + //start a new animation for all the pawns paired with receiver job driver + List participants; + Thing anchor = __instance.Bed; + if (target is Pawn receiverPawn) + { + participants = (receiverPawn.jobs?.curDriver as JobDriver_SexBaseReciever)?.parteners?.ToList(); + if (participants.NullOrEmpty()) return; + + if (!participants.Contains(receiverPawn)) + { + participants.Add(receiverPawn); + } + anchor = anchor ?? receiverPawn; + } + else if (target is Corpse corpse && corpse.InnerPawn != null) + { + participants = new List { pawn, corpse.InnerPawn }; + anchor = anchor ?? corpse; + } + else + { + participants = new List { pawn }; + anchor = anchor ?? pawn; + } + + GroupAnimationDef animation = AnimationUtility.FindGroupAnimation(participants, out List participantsOrdered); + if (animation == null) return; + + AnimationUtility.StartGroupAnimation(participantsOrdered, animation, anchor); + + //keep rjw's timers in step with the new animation, same as when sex starts + int animTicks = AnimationUtility.GetAnimationLength(pawn); + foreach (Pawn participant in participants) + { + if (participant?.jobs?.curDriver is JobDriver_Sex participantJobDriver) + { + participantJobDriver.ticks_left = animTicks; + participantJobDriver.sex_ticks = animTicks; + participantJobDriver.orgasmStartTick = animTicks; + participantJobDriver.duration = animTicks; + } + } } } diff --git a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs b/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs index 36a1316..d2680ce 100644 --- a/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs +++ b/1.6/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs @@ -24,6 +24,10 @@ namespace Rimworld_Animations { participants = new List() { pawn }; } + else if (partner == null) + { + return; + } else if (__instance is JobDriver_ViolateCorpse) { participants = new List() { pawn, partner }; @@ -52,18 +56,23 @@ namespace Rimworld_Animations if (groupAnimation != null) { - Thing anchor = (Thing)__instance.Bed ?? partner; + //anchor to the corpse itself, not its InnerPawn; a pawn inside a corpse keeps the position it died at + Thing anchor = (Thing)__instance.Bed ?? (Thing)(__instance.Target as Corpse) ?? partner; AnimationUtility.StartGroupAnimation(participantsOrdered, groupAnimation, anchor); int animTicks = AnimationUtility.GetAnimationLength(pawn); - Log.Message("InteractionDef: " + __instance.Sexprops.dictionaryKey); + if (RJWAnimationSettings.debugMode) + { + Log.Message("InteractionDef: " + __instance.Sexprops?.dictionaryKey); + } + foreach (Pawn participant in participants) { if (RJWAnimationSettings.debugMode) { - Log.Message("Participant: " + participant.Name); - Log.Message("JobDriver: " + participant.CurJobDef.defName); + Log.Message("Participant: " + participant?.Name); + Log.Message("JobDriver: " + participant?.CurJobDef?.defName); } //null ref check for pawns that might have lost their jobs or become null for some reason diff --git a/1.6/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverRaped.cs b/1.6/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverRaped.cs deleted file mode 100644 index 703bdcc..0000000 --- a/1.6/Source/Patches/RJWPatches/JobDrivers/SexBaseReceivers/HarmonyPatch_JobDriver_SexBaseReceiverRaped.cs +++ /dev/null @@ -1,29 +0,0 @@ -using HarmonyLib; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse.AI; - -namespace Rimworld_Animations -{ - [HarmonyPatch(typeof(JobDriver_SexBaseRecieverRaped), "MakeNewToils")] - public class HarmonyPatch_JobDriver_SexBaseReceiverRaped - { - /* - * Doesn't work; ienumerables are read-only, can't modify toil - * would need to harmonypatch; stopped partner animating in sexbaseinitiator instead - * - public static void Postfix(JobDriver_SexBaseRecieverRaped __instance, ref IEnumerable __result) - { - //added for sudden end of jobdriver - __result.Last().AddFinishAction(delegate { - AnimationUtility.StopGroupAnimation(__instance.pawn); - }); - } - - */ - } -} diff --git a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderTree.cs b/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderTree.cs index c62bcc4..3070ff7 100644 --- a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderTree.cs +++ b/1.6/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderTree.cs @@ -57,7 +57,7 @@ namespace Rimworld_Animations if (pivot != Vector3.zero) matrix *= Matrix4x4.Translate(pivot); if (quaternion != Quaternion.identity) matrix *= Matrix4x4.Rotate(quaternion); if (scale != Vector3.one) matrix *= Matrix4x4.Scale(scale); - if (pivot != Vector3.zero) matrix *= Matrix4x4.Translate(scale).inverse; + if (pivot != Vector3.zero) matrix *= Matrix4x4.Translate(pivot).inverse; float num = node.Worker.AltitudeFor(node, parms); if (num != 0f) @@ -96,7 +96,7 @@ namespace Rimworld_Animations if (pivot != Vector3.zero) matrix *= Matrix4x4.Translate(pivot); if (canRotate && rotation != Quaternion.identity) matrix *= Matrix4x4.Rotate(rotation); if (canScale && scale != Vector3.one) matrix *= Matrix4x4.Scale(scale); - if (pivot != Vector3.zero) matrix *= Matrix4x4.Translate(scale).inverse; + if (pivot != Vector3.zero) matrix *= Matrix4x4.Translate(pivot).inverse; } float num = node.Worker.AltitudeFor(node, parms); diff --git a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs b/1.6/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs deleted file mode 100644 index ec738f7..0000000 --- a/1.6/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using HarmonyLib; -using RimWorld; -using Verse; - -namespace Rimworld_Animations -{ - [HarmonyPatch(typeof(Thing), "DrawAt")] - public static class HarmonyPatch_Thing - { - /* - public static bool Prefix(Thing __instance) - { - CompThingAnimator thingAnimator = __instance.TryGetComp(); - if (thingAnimator != null && thingAnimator.isAnimating) - { - thingAnimator.AnimateThing(__instance); - return false; - - } - - return true; - - } - - - */ - } -} diff --git a/1.6/Source/Settings/PawnScaledOffsets.cs b/1.6/Source/Settings/PawnScaledOffsets.cs index 8f280a1..38577e4 100644 --- a/1.6/Source/Settings/PawnScaledOffsets.cs +++ b/1.6/Source/Settings/PawnScaledOffsets.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -46,7 +46,7 @@ public class PawnScaledOffsets : IExposable { smallestSizeOffset = largestSizeOffset = Vector3.zero; smallestSizeRotation = largestSizeRotation = 0; - smallestSize = largestSize = 1; + smallestSize = largestSize = -1; //back to uninitialized } public void GetOffsets(Pawn pawn, out Vector3 offset, out int rotation) diff --git a/1.6/Source/Settings/RJWAnimationSettings.cs b/1.6/Source/Settings/RJWAnimationSettings.cs index 2c594bc..184bb7f 100644 --- a/1.6/Source/Settings/RJWAnimationSettings.cs +++ b/1.6/Source/Settings/RJWAnimationSettings.cs @@ -27,21 +27,25 @@ namespace Rimworld_Animations { { base.ExposeData(); + + //some load defaults below differ from the field defaults. keys equal to their load default were never written, + //so a missing key in an existing file usually means the player chose that value; keep those load defaults + //and force-save these keys so the file is always explicit from now on Scribe_Values.Look(ref playVoices, "RJWAnimations_PlayVoices", true); Scribe_Values.Look(ref playSounds, "RJWAnimations_PlaySounds", true); Scribe_Values.Look(ref playHumanlikeVoicesAsDefault, "RJWAnimations-playHumanlikeVoicesAsDefault", true); - Scribe_Values.Look(ref maleSounds, "RJWAnimations-maleSounds", true); - Scribe_Values.Look(ref femaleSounds, "RJWAnimations-femaleSounds", true); + Scribe_Values.Look(ref maleSounds, "RJWAnimations-maleSounds", true, true); + Scribe_Values.Look(ref femaleSounds, "RJWAnimations-femaleSounds", true, true); Scribe_Values.Look(ref debugMode, "RJWAnimations-AnimsDebugMode", false); - Scribe_Values.Look(ref offsetTab, "RJWAnimations-EnableOffsetTab", false); - Scribe_Values.Look(ref hearts, "RJWAnimation-heartsOnLovin"); + Scribe_Values.Look(ref offsetTab, "RJWAnimations-EnableOffsetTab", false, true); + Scribe_Values.Look(ref hearts, "RJWAnimation-heartsOnLovin", false, true); Scribe_Values.Look(ref soundOverride, "RJWAnimations-rjwAnimSoundOverride", true); Scribe_Values.Look(ref maleAnalCanBeFucked, "RJWAnimations-maleAnalCanBeFucked", true); Scribe_Values.Look(ref floatRangeInRenderTreeMenu, "RJWAnimations-FloatRangeRenderMenu", 1f); Scribe_Values.Look(ref soundVolume, "RJWAnimations-soundVolume", 1f); Scribe_Values.Look(ref voicesVolume, "RJWAnimations-voicesVolume", 1f); - Scribe_Values.Look(ref voicesFrequencyTicks, "RJWAnimations-voicesFrequencyTicks", 1f); + Scribe_Values.Look(ref voicesFrequencyTicks, "RJWAnimations-voicesFrequencyTicks", 1f, true); Scribe_Collections.Look(ref offsets, "RJWAnimations-animationScaledOffsets", LookMode.Value, LookMode.Deep); diff --git a/1.6/Source/Utilities/AnimationUtility.cs b/1.6/Source/Utilities/AnimationUtility.cs index dfaddc9..5f3aa2d 100644 --- a/1.6/Source/Utilities/AnimationUtility.cs +++ b/1.6/Source/Utilities/AnimationUtility.cs @@ -27,7 +27,9 @@ namespace Rimworld_Animations { for (int i = 0; i < participants.Count; i++) { - if (anchor is Pawn pawn && pawn == participants[i]) + //don't anchor a pawn to itself, or a dead pawn to its own corpse + if ((anchor is Pawn pawn && pawn == participants[i]) + || (anchor is Corpse corpse && corpse.InnerPawn == participants[i])) { participants[i].TryGetComp().PlayGroupAnimation(groupAnimationDef, null, i, seed, participants); @@ -38,6 +40,27 @@ namespace Rimworld_Animations { participants[i].TryGetComp().PlayGroupAnimation(groupAnimationDef, animatorAnchor, i, seed, participants); } } + + DriveDeadParticipants(participants); + } + + //corpses only TickRare, so their animators never advance on their own; + //hand them to a living participant's animator to tick + private static void DriveDeadParticipants(List participants) + { + Pawn driver = participants.FirstOrDefault(x => !x.Dead); + if (driver == null) return; + + CompExtendedAnimator driverAnimator = driver.TryGetComp(); + if (driverAnimator == null) return; + + foreach (Pawn participant in participants) + { + if (participant.Dead) + { + driverAnimator.AddDrivenPawn(participant); + } + } } //startgroupanimation without anchor; just play where standing @@ -49,6 +72,8 @@ namespace Rimworld_Animations { { participants[i].TryGetComp().PlayGroupAnimation(groupAnimationDef, i, seed, participants); } + + DriveDeadParticipants(participants); } @@ -67,8 +92,9 @@ namespace Rimworld_Animations { public static GroupAnimationDef FindGroupAnimation(List participants, out List pawnOrder) { + pawnOrder = null; + if (participants.NullOrEmpty() || participants.Contains(null)) return null; - /* This method is fooken expensive List<(GroupAnimationDef, List, int Priority)> potentialAnimations = new List<(GroupAnimationDef, List, int)>(); @@ -108,13 +134,17 @@ namespace Rimworld_Animations { } - //Randomize the list, - potentialAnimations.OrderBy(_ => Rand.Int); (GroupAnimationDef, List, int) selectedAnimation; - potentialAnimations.TryRandomElementByWeight(((GroupAnimationDef, List, int) x) => x.Item3, out selectedAnimation); - //Find a highest priority animation, out as selectedAnimation - // .TryMaxBy(((GroupAnimationDef, List, int) x) => x.Item3, out (GroupAnimationDef, List, int) selectedAnimation); + //pick randomly, weighted by priority + //negative priorities count as 0 so they don't log "Negative weight" errors + if (!potentialAnimations.TryRandomElementByWeight(((GroupAnimationDef, List, int) x) => Math.Max(x.Item3, 0), out selectedAnimation) + && potentialAnimations.Count > 0) + { + //every candidate has priority <= 0 (weak/fallback contexts); pick evenly between the best of them + int bestPriority = potentialAnimations.Max(x => x.Item3); + potentialAnimations.Where(x => x.Item3 == bestPriority).TryRandomElement(out selectedAnimation); + } //set pawnOrder as selected animation permutation pawnOrder = selectedAnimation.Item2; diff --git a/LoadFolders.xml b/LoadFolders.xml index b369dab..e41f229 100644 --- a/LoadFolders.xml +++ b/LoadFolders.xml @@ -35,8 +35,6 @@
  • /
  • 1.6
  • -
  • Patch_HumanoidAlienRaces/1.5
  • -
  • Patch_SexToysMasturbation/1.5
  • Patch_NoRimNudeWorld/1.5
  • Patch_NoRimNudeWorldZoo/1.5
  • From 56867bab699ad19d36e593e95279b3d9272424ed Mon Sep 17 00:00:00 2001 From: c0ffeeeeeeee Date: Sun, 11 Oct 2026 21:03:28 +0000 Subject: [PATCH 4/6] updated to version 2.2.1 fixes to necro anims, voices, anim loading, lots of cool stuff by Rob The Robot Guard Simplified Chinese by LVKavidya --- About/About.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/About/About.xml b/About/About.xml index a37de85..9c21172 100644 --- a/About/About.xml +++ b/About/About.xml @@ -8,7 +8,7 @@
  • 1.6
  • c0ffee.rimworld.animations - 2.2.0 + 2.2.1 UI/MainTab
  • From 0c7fe8060da165f8a6ebf226603713d00997f6e1 Mon Sep 17 00:00:00 2001 From: c0ffeeeeeeee Date: Mon, 12 Oct 2026 11:42:30 -0700 Subject: [PATCH 5/6] build --- 1.6/Assemblies/Rimworld-Animations.dll | Bin 75264 -> 75776 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/1.6/Assemblies/Rimworld-Animations.dll b/1.6/Assemblies/Rimworld-Animations.dll index a52d4f5ee36c07de2866fd01c9619891748853ed..cf6a16690df89559bb15170b424b569b5b82eb43 100644 GIT binary patch literal 75776 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 literal 75264 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 X4{y2no1EuQ{vFExLy`aQDe(UQ^D;o2 From 084f3542a165cf3fbd1d46a7f87a9ec0068f2105 Mon Sep 17 00:00:00 2001 From: c0ffeeeeeeee Date: Mon, 12 Oct 2026 11:59:05 -0700 Subject: [PATCH 6/6] fixed actor roles for cunnilingus animation --- .../GroupAnimation_Cunnilingus.xml | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/1.6/Defs/GroupAnimationDefs/Cunnilingus/GroupAnimation_Cunnilingus.xml b/1.6/Defs/GroupAnimationDefs/Cunnilingus/GroupAnimation_Cunnilingus.xml index a7e6f5a..68d4e4b 100644 --- a/1.6/Defs/GroupAnimationDefs/Cunnilingus/GroupAnimation_Cunnilingus.xml +++ b/1.6/Defs/GroupAnimationDefs/Cunnilingus/GroupAnimation_Cunnilingus.xml @@ -82,7 +82,11 @@
  • 1 - + + +
  • + +
  • @@ -95,18 +99,14 @@
  • - -
  • +
  • 1 - -
  • - - +
  • @@ -117,6 +117,12 @@
  • + + + +
  • + +
  • @@ -125,6 +131,15 @@
  • 0 + +
  • + +
  • +
  • + +
  • + +
  • @@ -132,12 +147,6 @@
  • -
  • - -
  • -
  • - -