Add proxy visual sneak scaffolding

Introduce default-off scaffolding for proxy visual sneak experiments: add kEnableProxyVisualSneakSync and kEnableProxyVisualSneakExperimentalGraph flags (false), include ACTOR_STANCE, and add a non-mutating ApplyProxyVisualSneakIfEnabled helper that reads proxy sneak/stance/forceSneak and emits one-time diagnostics when visual sneak is disabled. Add per-slot tracking fields (hasAppliedVisualSneakingState, hasLoggedVisualSneakDisabled, lastAppliedVisualSneakingState), ResetSlotVisualSneakTracking and calls to reset tracking when holding/reusing/disconnecting slots, and switch UpdateProxyAnimationStateDebug to accept a non-const RE::Actor&. Update docs/dev-log.md with an entry describing the change. Comments/TODOs note a future, separately approved experiment to call RE::Actor::SetSneaking(...) behind a disabled gate; current scaffolding intentionally avoids mutating actors, animation graph writes/events, or AI/package crouch logic. Build tested locally (plugin rebuild).
This commit is contained in:
2026-06-03 11:51:04 +12:00
parent 44ea1b98da
commit 18379f2b28
2 changed files with 139 additions and 2 deletions
+61
View File
@@ -2314,6 +2314,67 @@ each remote `playerId` without visually applying animation.
---
## 2026-06-03 - Proxy Visual Sneak Scaffolding
### Summary
Added default-off runtime proxy visual sneak scaffolding so future sneak/crouch
visual experiments have isolated slot-local gates and reset tracking without
mutating actors by default.
### Files Changed
- `plugin/src/F4TProxyActorController.cpp`
- `docs/dev-log.md`
### Details
- Added default-off `kEnableProxyVisualSneakSync` and
`kEnableProxyVisualSneakExperimentalGraph` flags near the existing proxy
controller constants.
- Added runtime-proxy-slot visual sneak tracking separate from existing
animation debug observation state.
- Added a runtime-proxy-only game-thread helper that reads proxy-side
`IsSneaking()`, stance, and `forceSneak` diagnostics and logs once per slot
when no visual sneak method is enabled.
- Kept the helper non-mutating with the default flags. It does not call
animation graph events, write animation graph variables, call `PerformAction`,
write `ActorState`, or use package/procedure/AI crouch behavior.
- Left a TODO for a separately approved future experiment using
`RE::Actor::SetSneaking(remoteState.isSneaking)` behind the existing disabled
gate.
- Reset visual sneak tracking through the existing slot observation reset path,
when runtime proxies are moved to holding, and when disconnected slots become
reusable.
- Left networking, protocol, Python server code, fake-client tooling, placed
fallback behavior, runtime spawning, movement smoothing, snap behavior,
same-cell gating, held/reusable lifecycle, and combat/AI neutralization
unchanged.
### Testing
- Ran `xmake build` from `plugin`; it succeeded and rebuilt
`Fallout4Together.dll`.
- Pending manual validation: use the Dev Server GUI to add fake clients, toggle
sneak on/off, and confirm existing animation debug logs plus one-time disabled
visual sneak diagnostics without any visual crouch by default.
### Known Issues
- Visual sneak/crouch application remains intentionally unimplemented.
- The safe visual writer candidate still needs a manually approved
`RE::Actor::SetSneaking(...)` experiment before any proxy crouch behavior is
enabled.
### Next Steps
- Manually validate fake-client sneak toggles in `F4TTestCell01`.
- If approved later, test `RE::Actor::SetSneaking(...)` behind the disabled
visual sneak gate with explicit clear handling for false, disconnect, hold,
reassignment, and reuse.
---
## Entry Template
Use this format for future updates: