First Person Base Character AnimBP (ABP_TFA_FP_BaseCharacter)
Core AnimBP for first-person character animation state, IK, procedural offsets, and grip blending.
Asset path: /Game/InfimaGames/TacticalFPSAnimations/Common/Core/Characters/ABP_TFA_FP_BaseCharacter
ABP_TFA_FP_BaseCharacter is the main first-person animation hub for the pack. It reads gameplay state from Base Character (BP_TFA_BaseCharacter), applies ADS, recoil, and crouch offsets, and drives the grip and IK behavior used by the notify-state system.
Quick Navigation
Dependencies
This AnimBP expects three things:
The owning pawn is
BP_TFA_BaseCharacteror a child classThe AnimBP implements BPI_TFA_AnimationState
The skeleton includes the IK chain bones used by FABRIK:
ik_hand_r,hand_r,clavicle_rik_hand_l,hand_l,clavicle_l
If one is missing, the AnimBP can still evaluate, but you will lose features. The clearest symptoms are floaty hands and grip blending that appears to do nothing.
Variables Exposed by This AnimBP
References
CharacterBP(BP_TFA_BaseCharacter)Cached owner reference set during initialization
State Pulled from CharacterBP
CharacterBPbIsRunningbIsWalkingbIsSprintingbIsAimingbAnimateCameraStance(E_TFA_Stance)CurrentGrip(E_TFA_GripAttachment)
Animation Data Pulled from CharacterBP
CharacterBPAimDownSightsTransformRecoilTransformCrouchTransform
Grip State Driven by Notify States
bIsLeftHandOnWeaponCurrentGripAlphaGripBlendSpeedGripPoseBlendSpeed
The AnimGraph uses these values to drive grip overlays, procedural offsets, and hand pinning.
Initialization
On BlueprintInitializeAnimation, the AnimBP calls TryGetPawnOwner, casts the owner to BP_TFA_BaseCharacter, and stores the result in CharacterBP. If the owning pawn is not a BP_TFA_BaseCharacter, all of the pull-from-character logic stays idle.
Per-Frame Update Flow
On BlueprintUpdateAnimation, the AnimBP validates CharacterBP, builds InputMoveVector from CharacterBP.SimulatedVelocity.XY, copies the relevant state booleans and procedural transforms, copies CurrentGrip, and then calls Interpolate Grip Alpha.
InputMoveVector exists because the demo simulates movement instead of physically moving the capsule. The character handles that in SimulateVelocity, and this AnimBP reads the resulting 2D motion input.
Unlock Actions Notify Hook
This AnimBP implements AnimNotify_AN_UnlockActions. When that notify fires, it clears the busy flag on the character by setting CharacterBP.bIsBusy = false.
That notify is emitted by Unlock Actions (AN_TFA_UnlockActions).
Left Hand Grip Flow
The pack’s Left Hand Grip (ANS_TFA_LeftHandGrip) notify state calls BPI_TFA_AnimationState.UpdateLeftHandGrip(bool IsLeftHandOnWeapon, float BlendSpeed). This AnimBP stores IsLeftHandOnWeapon in bIsLeftHandOnWeapon and stores the incoming BlendSpeed in GripBlendSpeed.
GripPoseBlendSpeed is separate tuning for pose swaps when CurrentGrip changes. If your graph never reads it, it is effectively unused.
Interpolate Grip Alpha
Interpolate Grip AlphaEvery frame, the AnimBP interpolates CurrentGripAlpha toward 1.0 or 0.0 based on bIsLeftHandOnWeapon, using GripBlendSpeed with FInterpTo and GetWorldDeltaSeconds. The notify state sets the target and speed. The AnimBP performs the smoothing.
AnimGraph Overview
Locomotion Base Pose
The locomotion layer is the base pose. It is driven by InputMoveVector, movement flags, and Stance, which lets the pack preview movement without moving the capsule.
Main inputs:
InputMoveVectorfromSimulatedVelocity.XandSimulatedVelocity.YbIsWalking,bIsRunning,bIsSprintingStance
If you replace the locomotion assets, keep the same input convention. Treat zero input as idle, and keep X and Y as forward and strafe.
If you switch to real movement, use actual velocity instead of the simulated value, but keep it as a 2D vector so the blend spaces continue to behave correctly.
Mesh-Space Additive Stack
The first-person feel comes from additive layers placed on top of locomotion. This pack expects those layers to be mesh-space additive so the motion stays stable. Typical content here includes recoil, ADS offsets, subtle sway, stance overlays, and grip overlays tied to CurrentGrip.
Typical Evaluation Order
This AnimBP follows a familiar order:
Build the locomotion base pose
Apply mesh-space additive layers for ADS, recoil, and crouch
Run hand IK to pin the hands to the weapon
Optionally blend camera or head motion
That order keeps the hands stable during ADS and recoil.
Cached Poses
The graph caches the base pose and reuses it downstream with UseCachedPose. That avoids duplicate evaluation. If you refactor the graph, keep the cached pose close to the locomotion output and reuse it for both additive layers and IK.
Mesh-Space Additive Setup Checklist
When you import or author new additive sequences, use:
Additive type: Mesh Space
Base pose: Reference Pose, or the same base pose used by the pack
Root motion: usually disabled for additive clips
If those settings are wrong, you can get double transforms, arm twisting during recoil, or ADS offsets sliding in the wrong direction.
If an additive breaks the pose stack, check mesh-space versus local-space first. That is the most common cause.
Hand IK with FABRIK
The AnimGraph converts to component space and runs FABRIK on both arms to pin the hands to weapon IK targets. That is what keeps the hands stable once additive layers start stacking.
Both FABRIK nodes expose LODThreshold, which is useful if you want to disable IK at distant LODs and trim CPU cost.
Camera and Head Animation Toggle
The graph uses a LayeredBoneBlend on the head branch, with bAnimateCamera controlling the blend weight. In this AnimBP, the blend pose is the reference pose, so the toggle overrides head motion with a stable reference pose.
Weight
0keeps head motion from the base poseWeight
1forces the head branch to the reference pose
This is mostly demo-friendly behavior, and it is a simple way to remove camera or head motion without rewriting the base pose.
Procedural Offsets
The graph consumes character-driven transforms for ADS through AimDownSightsTransform, recoil through RecoilTransform, and crouch through CrouchTransform. The AnimBP does not generate these values. It applies them as part of the additive stack, and they should stay before IK.
Grip Overlays
The grip system has two parts:
CurrentGripselects which grip pose to useCurrentGripAlphacontrols how much of that grip overlay is visible
ANS_TFA_LeftHandGrip drives the alpha window, while CurrentGrip usually comes from weapon or config state on the character. That lets the graph keep the correct grip pose selected and smoothly fade the left-hand overlay in or out during reloads or interactions.
Integration Checklist
If grip behavior or additive layers look inactive, check these first:
The mesh uses
ABP_TFA_FP_BaseCharacteras its Anim ClassThe AnimBP implements
BPI_TFA_AnimationStateThe montages include
ANS_TFA_LeftHandGripwindows where neededBP_TFA_BaseCharacteris updating:SimulatedVelocityADS, recoil, and crouch transforms
CurrentGrip
Troubleshooting
CharacterBP Is None
CharacterBP Is NoneConfirm the mesh using this AnimBP belongs to
BP_TFA_BaseCharacterConfirm the mesh actually uses
ABP_TFA_FP_BaseCharacteras its Anim Class
Grip Blending Does Nothing
Confirm this AnimBP implements
BPI_TFA_AnimationStateConfirm your montages include
ANS_TFA_LeftHandGripConfirm
GripBlendSpeedis not0
IK Looks Broken
Confirm the skeleton has the required IK bones
Confirm the weapon sets up IK targets on the intended bones or sockets
Related Pages
Owner state source: Base Character (BP_TFA_BaseCharacter)
Grip contract: Animation State Interface (BPI_TFA_AnimationState)
Grip driver: Left Hand Grip (ANS_TFA_LeftHandGrip)
Action unlock: Unlock Actions (AN_TFA_UnlockActions)
Last updated
Was this helpful?

