Add local animation graph read-only debug
Introduce a game-thread-only, read-only diagnostic helper to probe local player animation graph variables and (optionally) numeric cache IDs. Adds F4TLocalAnimationGraphDebug.h/cpp with UpdateLocalPlayerAnimationGraphDebug(...) and wires a call into plugin/src/main.cpp immediately after GetPlayerMovementState. The helper probes curated variable names via CommonLibF4 read-only APIs, logs availability/changes, and includes a disabled-by-default numeric cache ID scan (kEnableLocalPlayerAnimationGraphCacheIdReadOnlyDebug = false) due to a reported crash during testing. Update also adds extensive dev-log documentation (docs/dev-log.md) describing behavior, testing notes, and rollback instructions. Build succeeded; manual F4SE in-game verification remains pending.
This commit is contained in:
+219
@@ -2489,6 +2489,225 @@ Next investigation should focus on read-only animation graph variable discovery
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-03 - Proxy Animation Graph Read-Only Investigation
|
||||
|
||||
### Summary
|
||||
|
||||
Added a local-player-only, read-only animation graph diagnostic helper to probe
|
||||
known candidate graph variable names and compare them with existing local
|
||||
movement, sneak, jump, and weapon state signals.
|
||||
|
||||
### Files Changed
|
||||
|
||||
- `plugin/include/F4TLocalAnimationGraphDebug.h`
|
||||
- `plugin/src/F4TLocalAnimationGraphDebug.cpp`
|
||||
- `plugin/src/main.cpp`
|
||||
- `docs/dev-log.md`
|
||||
|
||||
### Details
|
||||
|
||||
- Added `UpdateLocalPlayerAnimationGraphDebug(...)` on the existing game-thread
|
||||
local polling path, immediately after `GetPlayerMovementState(...)` and
|
||||
before any transform send decision.
|
||||
- Added explicit read-only gates:
|
||||
`kEnableLocalPlayerAnimationGraphReadOnlyDebug = true` and
|
||||
`kEnableProxyAnimationGraphReadOnlyDebug = false`.
|
||||
- The helper only inspects the local player. It does not inspect runtime
|
||||
proxies by default and does not change proxy movement, lifecycle,
|
||||
neutralization, placed fallback behavior, networking, protocol, server code,
|
||||
or fake-client tooling.
|
||||
- Graph access is limited to read-only CommonLibF4 APIs:
|
||||
`GetAnimationGraphManagerImpl`, `GetGraphVariableCacheSize`,
|
||||
`GetGraphVariableImplBool`, `GetGraphVariableImplInt`,
|
||||
`GetGraphVariableImplFloat`, and
|
||||
`BGSAnimationSystemUtils::IsActiveGraphInTransition`.
|
||||
- Candidate variables are probed by curated name only. There is no raw cache
|
||||
walking, no fake enumeration, no graph variable writes, no graph events, no
|
||||
`NotifyAnimationGraphImpl`, no `PerformAction`, no `InitializeActorInstant`,
|
||||
and no `ActorState` writes.
|
||||
- Unavailable candidate reads are logged once per variable/type. Successful
|
||||
reads are logged when their value changes or when local state / graph metadata
|
||||
changes.
|
||||
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded and linked
|
||||
`Fallout4Together.dll`.
|
||||
- Manual Fallout 4 / F4SE testing is still pending:
|
||||
- Launch through F4SE.
|
||||
- `coc F4TTestCell01`.
|
||||
- Toggle local sneak on/off.
|
||||
- Move/stop and sprint if safe.
|
||||
- Jump.
|
||||
- Draw/holster weapon if safe.
|
||||
- Check `Fallout4Together.log` for `Local animation graph debug` lines.
|
||||
- Optionally add one fake client to confirm runtime proxies still spawn and
|
||||
move while proxy graph diagnostics remain disabled.
|
||||
|
||||
### Known Issues
|
||||
|
||||
- Useful graph variables have not yet been confirmed in-game; log review from
|
||||
the manual test sequence is required.
|
||||
- Candidate variable failures will only prove that those names/types were
|
||||
unavailable through the current read-by-name API, not that the underlying
|
||||
graph has no equivalent state.
|
||||
- CommonLibF4 does not expose a safe graph variable name enumeration API here,
|
||||
so this pass intentionally uses curated read-by-name probes only.
|
||||
|
||||
### Rollback Note
|
||||
|
||||
- If the helper causes a crash, severe log spam, local control issues,
|
||||
performance problems, proxy movement/lifecycle regressions, or unexpected
|
||||
network send behavior, set `kEnableLocalPlayerAnimationGraphReadOnlyDebug`
|
||||
back to `false` or remove the single helper call from `plugin/src/main.cpp`.
|
||||
|
||||
### Next Steps
|
||||
|
||||
- Run the manual F4SE test sequence and record which graph candidates are
|
||||
available, unavailable, or transition with sneak/movement/jump/weapon state.
|
||||
- If no safe graph reads produce useful values, investigate another read-only
|
||||
route such as animation graph event observation research or known Fallout 4
|
||||
graph variable references before planning any write/event milestone.
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-03 - Animation Graph Cache ID Read-Only Investigation
|
||||
|
||||
### Summary
|
||||
|
||||
Added a local-player-only numeric animation graph cache ID diagnostic pass that
|
||||
uses CommonLibF4 read-only virtual getter overloads to probe cache IDs from
|
||||
`0` through `GetGraphVariableCacheSize() - 1`.
|
||||
|
||||
### Files Changed
|
||||
|
||||
- `plugin/src/F4TLocalAnimationGraphDebug.cpp`
|
||||
- `docs/dev-log.md`
|
||||
|
||||
### Details
|
||||
|
||||
- Added `kEnableLocalPlayerAnimationGraphCacheIdReadOnlyDebug = true` as a
|
||||
separate gate from the existing local-player read-only debug gate.
|
||||
- Kept the existing read-by-name candidate probing intact.
|
||||
- Numeric probing only uses:
|
||||
`GetGraphVariableImpl(std::uint32_t, bool&)`,
|
||||
`GetGraphVariableImpl(std::uint32_t, std::int32_t&)`, and
|
||||
`GetGraphVariableImpl(std::uint32_t, float&)`.
|
||||
- `GetGraphVariableCacheSize()` is the strict upper bound, so a cache size of
|
||||
`64` probes only IDs `0` through `63`.
|
||||
- Tracks per-ID/per-type availability and last value, logs initial readable
|
||||
values once, and logs later values only when they change.
|
||||
- Change logs include local movement, sprint, sneak, jump, weapon, speed,
|
||||
actor stance, and force-sneak context.
|
||||
- Added compact candidate buckets for sneak bool/int IDs, movement float IDs,
|
||||
weapon bool/int IDs, jump bool/int IDs, and sprint bool/int IDs.
|
||||
- Candidate logs intentionally use cautious wording such as candidate IDs and
|
||||
movement-speed-related hints. No permanent graph variable names are claimed.
|
||||
- This remains local-player-only. No proxy actor graph reads were added.
|
||||
- No graph writes, graph events, `NotifyAnimationGraphImpl`, `PerformAction`,
|
||||
raw memory reads, cache walking, guessed offsets, `ActorState` writes,
|
||||
networking changes, protocol changes, Python server changes, fake-client
|
||||
changes, proxy movement changes, proxy lifecycle changes, proxy
|
||||
neutralization changes, or placed fallback behavior changes were added.
|
||||
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; it succeeded and linked
|
||||
`Fallout4Together.dll`.
|
||||
- Linter diagnostics for `plugin/src/F4TLocalAnimationGraphDebug.cpp` reported
|
||||
no errors.
|
||||
- Manual Fallout 4 / F4SE testing is still pending:
|
||||
- Launch through F4SE.
|
||||
- `coc F4TTestCell01`.
|
||||
- Confirm startup logs show graph manager availability, cache size, and
|
||||
readable cache ID summary.
|
||||
- Toggle local sneak on/off and check for transition logs plus related
|
||||
numeric cache ID changes.
|
||||
- Move/stop, sprint if safe, jump, and draw/holster weapon if safe.
|
||||
- Optionally add one fake client and confirm runtime proxy spawning/movement
|
||||
still works while proxy graph cache probing remains absent.
|
||||
|
||||
### Observations To Record After Manual Testing
|
||||
|
||||
- Cache size observed: not yet observed in-game for this milestone.
|
||||
- Readable bool ID count: not yet observed in-game.
|
||||
- Readable int ID count: not yet observed in-game.
|
||||
- Readable float ID count: not yet observed in-game.
|
||||
- Candidate IDs discovered: none recorded yet; requires manual log review.
|
||||
|
||||
### Known Issues
|
||||
|
||||
- Runtime usefulness is unknown until the F4SE manual test pass records actual
|
||||
cache size, readable counts, and candidate IDs.
|
||||
- If all numeric cache ID reads return unavailable, this path will only confirm
|
||||
that the safe numeric read API is not useful for the local player in that
|
||||
state; it does not justify raw memory probing or graph writes.
|
||||
|
||||
### Rollback Note
|
||||
|
||||
- If the cache ID diagnostic causes a crash, severe log spam, performance
|
||||
drops, local control issues, proxy movement regressions, network cadence
|
||||
changes, or unexpected outgoing transform JSON changes, set
|
||||
`kEnableLocalPlayerAnimationGraphCacheIdReadOnlyDebug` to `false` or revert
|
||||
this milestone.
|
||||
|
||||
### Next Steps
|
||||
|
||||
- Run the manual F4SE test sequence and record cache size, readable ID counts,
|
||||
and any candidate sneak/movement/weapon/jump/sprint IDs from
|
||||
`Fallout4Together.log`.
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-03 - Animation Graph Cache ID Investigation Rollback
|
||||
|
||||
### Summary
|
||||
|
||||
Disabled numeric animation graph cache ID probing by default after a Fallout 4
|
||||
crash during read-only testing. Safer local animation graph diagnostics remain
|
||||
enabled.
|
||||
|
||||
### Files Changed
|
||||
|
||||
- `plugin/src/F4TLocalAnimationGraphDebug.cpp`
|
||||
- `docs/dev-log.md`
|
||||
|
||||
### Details
|
||||
|
||||
- Set `kEnableLocalPlayerAnimationGraphCacheIdReadOnlyDebug = false` with a
|
||||
crash-safety comment above the gate.
|
||||
- Left numeric cache ID investigation code in place behind the disabled gate for
|
||||
future manual single-ID experiments.
|
||||
- No networking, protocol, Python server, fake-client, proxy, or
|
||||
`main.cpp` changes.
|
||||
|
||||
### Animation Graph Cache ID Investigation Result
|
||||
|
||||
Numeric cache ID probing through `GetGraphVariableImpl(id, bool/int/float&)` was tested as a read-only investigation path. Fallout 4 crashed during/after the test, while the server and fake client continued running. The numeric cache ID path has been disabled by default.
|
||||
|
||||
The existing local animation graph debug helper remains active for safer diagnostics: local state transitions, graph manager availability, graph cache size, graph transition state, and read-by-name candidate probing.
|
||||
|
||||
Future graph investigation should avoid full cache scans and instead test one known/suspected variable or ID at a time behind a stricter manual gate.
|
||||
|
||||
### Testing
|
||||
|
||||
- Ran `xmake build` from `plugin`; build succeeded.
|
||||
- Manual F4SE retest pending: `coc F4TTestCell01`, toggle sneak, move/jump/weapon,
|
||||
add one fake client. Expect `Local animation graph debug:` logs without
|
||||
`Local animation graph cache debug:` lines and no crash.
|
||||
|
||||
### Known Issues
|
||||
|
||||
- Full-cache numeric ID probing is treated as unsafe until single-ID manual
|
||||
gates exist.
|
||||
|
||||
### Next Steps
|
||||
|
||||
- Run the manual F4SE test sequence to confirm no crash and that safer local
|
||||
animation debug logs still appear.
|
||||
|
||||
---
|
||||
|
||||
## Entry Template
|
||||
|
||||
Use this format for future updates:
|
||||
|
||||
Reference in New Issue
Block a user