Repository navigation
v1.1.14
v1.1.14
ALPHA build. Install by dropping the F4SE folder into Data or installing the ZIP through your mod manager.
Fixed
- NPC animations were being treated as the player's. The Havok context OAR used to identify a clip's actor is a static dummy on this runtime, so the lookup never resolved anyone and every miss fell back to the player. Consequences:
IsFormplayer conditions passed on NPC clips, NPC reload replacements were installed with the player's submods, and their annotations (sound cues,reloadComplete) fired on the player, refilling the player's ammo whenever a nearby NPC reloaded. Clips are now resolved to their owning actor through the behavior graph registry, and there is no player fallback anywhere on the replacement path. An unresolvable clip is skipped with a rate-limitedhas no resolvable actorwarning. - Welcome banner drew over gameplay. It now appears only while the main menu is open, starts its timer when the menu is actually on screen, and disappears the moment a save starts loading.
Performance
- Unreplaced clips no longer pay for OAR every frame. A per-clip match memo turns the common "no replacement registered" case into a single lock-free check instead of several shared locks, string hashes, and string copies per clip per frame. Measured in a ~200 clips/frame test scene: no-match cost down about 25%, total Update cost down about 15%.
- Animation event log is off until a log window opens. Previously every animation event on every actor built strings and took a mutex even with no UI open. The sound-suppression window check is now guarded by an atomic armed counter.
- Runtime animation cache reads take a shared lock, so Havok job threads no longer serialise on one global lock when fetching an existing clone. Retired clones are bounded by bytes (64 MB) as well as count.
- BA2 donor loads are spread across frames (24 per frame) instead of one main-thread hitch, and a config reload cancels any in-flight chain.
- Optional
[Debug] bPerfInstrumentation=1logs an[OAR-Perf]timing block every 10 seconds. Default off.
Added
- Preserve Extracted Motion (off by default), an integration of PR #7 onto the per-class vtable system: keeps a replacement's root-motion reference frame so animations with authored motion move the actor as intended. Enable per submod in the editor.
- Animation Event Log attribution. Engine events show
from <clip>when the firing clip can be matched through its trigger array, orfrom ~<clip>as a best guess.
Internal
- Plugin version now comes from the CMake project version.
docs/PERFORMANCE_PLAN.mdrecords the audit, invariants, phases, and measurements.