XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8

Original galaxy frame fade state and production binding

The offline source is the read-only client copy with SHA-256 6891f70a021fa9f3a0e00458c284f48d1226e68ae7fc02ad48081aed47857e93. These RVAs describe that copy only; they are not native addresses for the current ed5 client. No game process was opened or invoked.

Run research/Trace-OriginalGalaxyFrameFadeState.py and research/Trace-OriginalGalaxyFrameClock.py with the reverse toolkit Python. Their byte-guarded results are artifacts/galaxy-query-research/power-outer-sources/frame-fade-state/original-frame-fade-state.json and original-frame-clock.json. The numerical tests are in that directory's clock-tests/test-results.json (18 passed: 9 existing fade tests, 5 state tests and 4 clock tests).

State initialization is zero at activation

Input component 3AC8790 exposes its general interface at component8, vtable 552B3E0. Virtual60 is activation 3B37630. That function binds the real controls and enables the dependency at component68. Its this pointer is component8; the store at 3B3765C writes zero to this1A0, which is component1A8. Thus the recovered initial current transition is 0 at activation. The constructor alone did not prove this value.

The state advances in 3AF5D70 and remains separate from its distance-derived target. The clock trace now closes its source: ordinary main loop 7F8CC0 obtains GetSystemTimeAsFileTime through 54D7D0, subtracts the previous timestamp through 53E6E0, and 52C3F0 converts seconds64 plus nanoseconds32/1e9 to float seconds. 7F3430 clamps raw seconds to at least1e-5, with an upper limit of.5 unless raw is strictly greater than4 seconds, in which case the upper limit is1/30. Explicit fixed-step mode uses1/app9B0 before the same clamps. This value goes through actual app virtualD0 (1EB9C0, stores8494), then virtualC8 (1EB050) publishes8494 unchanged to global 5F007A0. 5FDB7D0 is the subscription type/dependency key, not the publisher. Dispatch 1EC720 ->1E7040 ->5529D98[0]/3ABA020 ->3AF5D70 forwards the float without further arithmetic; its parallel wrapper uses the same worker. The event is emitted before the5F052C0 and input5F05BC0 phases within1EB050. No fixed wall-time cadence is inferred.

Settings threshold and renderer radius are the same actual value

The Settings dependency ID at 5FA0A10 is read by the input constructor into its dependency at componentE8/F0. Renderer provider 3A5E4E0 publishes renderer component60 for that ID. The renderer constructor 3A06740 places vtable 551F408 at component58. Input's threshold call first subtracts8 from its F0 pointer, then calls virtual30. Vtable 551F408+30 is 1A3C960, whose entire getter is lea rax,[rcx+228]; ret. Its returned pointer is therefore renderer component280.

This is the same component280 updated by radius publisher 3AB5A60 through interface228, and the same source consumed by frame builder 3A26260 ->3ACA010. The tool can bind the current ordinary catalogue Descriptor.InnerRadius to both the target threshold and prepared fade radius. Constructor50, sparse OuterRadius and QueryFar are not substitutes. A verified zero radius is valid: the original strict-less-than comparisons take the mode endpoint branch without entering the linear division.

Tool-owned state API

GalaxyOriginalFrameFadeState owns one tool camera/input lifetime. Activate() resets its current transition to the proved initial0. Call TryAdvanceForCamera(actualCamera, rendererInnerRadius, originalViewMode, inputFrameValue) once per input event, using the actual smoothed camera and the explicit input-frame float. The same radius drives both threshold and prepared radii. Multiple consumers then call TryCreateForCamera(actualCamera, rendererInnerRadius, out fade) without advancing the state again.

Null or invalid required event inputs invalidate transition history. Later valid distance/radius parameters cannot recover a missing current value from the target. A new tool activation starts a fresh known-zero lifetime. GalaxyOriginalFrameFadeClock.TryFromElapsedSeconds binds tool elapsed seconds through the now-proved normal clock policy; fixed step remains explicit. The API does not import another game camera's live transition or assume a timer cadence.

The previously recovered frame mapping remains: native camera is embedded at frame20; frame40 is its Forward and frame50 its Eye; the ellipsoid uses the independent orbit Focus. TryCreateForCamera binds these from the tool's actual camera. Near depth fade is1.5..3ly and far fade600..700ly. The tests establish numerical/state behavior, not live or visual parity.