Implement proxy weapon animation sync for ranged guns

Milestone 1: Proxy actors now equip remote players' right-hand weapons and play armed idle/locomotion poses when weaponDrawn=true. Adds rightHand weapon slot to equippedItems protocol, weapon graph variable support (iSyncGunDown: 0=drawn, 1=holstered), and weapon FSM events (weaponDraw, readyStateEnter, gunDownStateEnter). Fixes two critical animation state churn bugs: frustum-visibility flicker no longer resets animation state on every update tick, and idle proxies no longer register as changed on every frame. Includes WeaponBehavior graph loading via AIProcess::RequestLoadAnimationsForWeaponChange() and manual weapon attachment fallback. New docs/weapon-animation-sync.md reference guide maps animation events and variables from F4-Animation-Research. Experimental alert-state reassertion for armed proxies to test NPC combat state gating of weapon-ready poses.
This commit is contained in:
2026-07-02 17:23:09 +12:00
parent a6d4cc2ba6
commit 89c3e82554
11 changed files with 837 additions and 41 deletions
+3
View File
@@ -33,6 +33,9 @@ namespace F4T::ProxyAnimationSync
inline constexpr const char* kSyncWalkRun = "iSyncWalkRun";
inline constexpr const char* kSyncLocomotionSpeed = "iSyncLocomotionSpeed";
inline constexpr const char* kSyncJumpState = "iSyncJumpState";
// Weapon animation graph variables (RaiderRootBehavior / WeaponBehavior)
inline constexpr const char* kSyncGunDown = "iSyncGunDown";
inline constexpr const char* kRifleDrawnStateID = "iRifleDrawnStateID";
}
// MTLocomotionBlend_SM sub-states: Walk(0), Jog(1), Run(2). Selected by graph events