Add live-tunable GPS solver highway weight

This commit is contained in:
2026-06-26 23:33:20 -05:00
parent 3fa723c3cc
commit 92287bd8e1
12 changed files with 363 additions and 43 deletions
+16 -6
View File
@@ -66,12 +66,22 @@ Current behavior:
Active build note:
- The currently installed build is disabled on disk:
`EdgeWeightGPS.dll.disabled`. There is no active `EdgeWeightGPS.dll` in the
game plugin directory.
- Source defaults are still read-only for route behavior. They disable provider
class multiplier overrides and the spatial edge-cost patch, while keeping GPS
query lifecycle tracing available for probe builds.
- The currently installed build is active as
`red4ext/plugins/EdgeWeightGPS/EdgeWeightGPS.dll`.
- Source defaults enable the stable inline solver-cost patch at `0x40bb98`
(`kEnableGpsNodeMultiplierInlinePatch = true`) and keep the old full-function
`0x40bb40` C++ detour disabled (`kEnableGpsMultiplierHooks = false`).
- The inline patch preserves vanilla road cost except for highway lanes in the
road-tail branch. Highway lanes are multiplied by the live value in
`solver_weights.bin`, defaulting to `0.80`.
- The patch is intentionally not hard-gated on `solver+0xc4 == 2`; the vanilla
branch already limits it to road-style modes `0/2/4`, which keeps manual
drive and autodrive-like callers from diverging while leaving pedestrian mode
`1` alone.
- `solver_weights.bin` lives beside the DLL and is exactly one little-endian
float32. The plugin polls it every 500 ms from the Running game-state update.
`tools/write_solver_weights.py` writes the installed file or generates preset
binaries under `presets/solver_weights/`.
- The async route-job hooks are split behind `kEnableGpsRouteJobLifecycleHooks`
and are disabled in the active probe; this keeps the log focused on
`0x70a42c` submissions, `0x7094b8` result records, and local