Retail's real 2000 ms jump-charge ceiling (refs/vtank/decompiled/bi.cs:502-505, bi.a) is enforced at the moment a jump STARTS charging, not by the storage format — metaf's own NJump (metaf_monolithic.py:11708-11820) and VTank's .nav both round-trip the authored value unclamped. The prior slice-1 port misread this as a LOAD-time clamp: MetafSerializer's .af "jmp" parser and the legacy-JSON route migration both clamped JumpChargeMilliseconds on read, silently rewriting an authored 5000 ms waypoint down to 2000 ms even when the route is never executed. Removed both load-time clamps; NavigationController.TickJump now clamps the EFFECTIVE charge duration (Math.Clamp(..., 0, 2000)) only at the one place retail actually enforces it — the charge-hold comparison during execution — leaving the stored/authored value untouched. Renamed MetafSerializerTests.JumpNodeClampsChargeMillisecondsTo2000 to JumpNodeLoadPreservesAuthoredChargeMillisecondsAboveRetailCeiling (now asserts the 5000 ms value survives the .af load) and added a save+load round-trip test and a Navigation execution test asserting the jump releases at ~2000 ms of in-game charging despite a 5000 ms authored value. Mutation: reverted MetafSerializer.cs/MossTankRouteProfileStore.cs/ Navigation.cs to HEAD (keeping only the new/changed tests) and ran the three new/renamed tests — all three failed (load clamped to 2000, execution never released before 5000 ms) — confirming they exercise the bug before the fix. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| AcDream.App | ||
| AcDream.Bake | ||
| AcDream.Cli | ||
| AcDream.Content | ||
| AcDream.Core | ||
| AcDream.Core.Net | ||
| AcDream.Headless | ||
| AcDream.Launcher | ||
| AcDream.Launcher.Core | ||
| AcDream.Platform | ||
| AcDream.Plugin.Abstractions | ||
| AcDream.Plugins.MossTank | ||
| AcDream.Runtime | ||
| AcDream.UI.Abstractions | ||