Fix custom partial animations from custom IFP banks staying rigid - #5128
Merged
FileEX merged 1 commit intoAug 2, 2026
Merged
Conversation
CClientIFP pads every animation to 32 bones regardless of what the source IFP defines; playing a partial one straight from a custom bank had no built-in association to trim against, so the padding drove the root, pelvis and legs and froze the ped. CClientIFP now records which bones an animation actually defines while parsing it. CAnimBlendAssociation gains RestrictToBones(mask), a sibling of RestrictToBonesOf driven by that record instead of a built-in original. CClientPed applies it once the gateway swap to the custom hierarchy lands.
|
Works. Tested this and it makes all partials play after engineLoadIFP like they should. now you can freeze by using parm time at -1 and it'll 100% freeze. |
FileEX
approved these changes
Aug 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes custom partial animations played straight from a custom IFP bank (via
engineLoadIFP+setPedAnimation) leaving the ped rigid, the same padding problem #5101 fixed forengineReplaceAnimation.CClientIFPpads every loaded animation out to 32 bones regardless of what the source IFP actually defines. #5101 trimmed that padding by comparing against the built-in animation being replaced, but an animation played directly from a custom bank has no built-in original to compare against, so the fix never applied there and the padding kept driving the root, pelvis and legs.CClientIFPnow records which bones an animation actually defines while parsing it.CAnimBlendAssociationgainsRestrictToBones(mask), a sibling ofRestrictToBonesOfdriven by that record instead of a built-in original;CClientPedapplies it once the animation is actually playing.Motivation
Continuation of #5101. That fix only covered animations replacing a built-in one; partial animations loaded into their own custom bank and played directly still went rigid. Fixes #5121.
Test plan
Loaded a custom IFP with a partial animation (upper body only, e.g.
crry_prtial) into a custom bank viaengineLoadIFP, played it withsetPedAnimationon a ped. Before the fix the ped froze in place; after, the custom animation plays on the upper body while walking, turning and leg movement keep working normally. Also re-tested #5101's originalengineReplaceAnimationscenario to confirm that path is untouched.Test script, thanks to @RughCuttle
partialtest.zip
Checklist