Probe world map tracking script path
This commit is contained in:
@@ -138,6 +138,31 @@ one of them can resolve the mappin system, it also logs concrete vtable RVAs for
|
|||||||
slots `0x1f0`, `0x220`, `0x228`, `0x250`, `0x280`, `0x2e0`, `0x2f0`, `0x368`,
|
slots `0x1f0`, `0x220`, `0x228`, `0x250`, `0x280`, `0x2e0`, `0x2f0`, `0x368`,
|
||||||
and `0x3a8`, then attaches temporary hooks to the route-adjacent slots.
|
and `0x3a8`, then attaches temporary hooks to the route-adjacent slots.
|
||||||
|
|
||||||
|
Live result: this lead appears to be the hover/selection layer, not the route
|
||||||
|
commit layer. In a controlled test window, hovering a world-map icon and then
|
||||||
|
moving back to empty map space fired `SetSelectedMappinWrapper` and
|
||||||
|
`SetSelectedMappinCore`. Pressing the route/track action on that icon did not
|
||||||
|
fire `FrameMappinPath`, `TrackCustomPositionMappin`, `TrackMappin`, the tracked
|
||||||
|
mappin slots, or any of the custom-position slots.
|
||||||
|
|
||||||
|
That pushes the search one layer higher, into the world-map controller script
|
||||||
|
methods around tracking an objective or setting a waypoint. Static REDscript
|
||||||
|
strings name these relevant methods:
|
||||||
|
|
||||||
|
```text
|
||||||
|
WorldMapMenuGameController.TryTrackQuestOrSetWaypoint
|
||||||
|
WorldMapMenuGameController.UpdateTrackedQuest
|
||||||
|
WorldMapMenuGameController.UpdateTravelDestination
|
||||||
|
WorldMapMenuGameController.TrackQuestMappin
|
||||||
|
WorldMapMenuGameController.OnPressInput
|
||||||
|
WorldMapMenuGameController.OnHoldInput
|
||||||
|
```
|
||||||
|
|
||||||
|
The current read-only REDscript probe wraps the no-argument route/tracking
|
||||||
|
methods plus `TrackQuestMappin`. If those fire on route plotting, the next step
|
||||||
|
is to trace their native calls or wrap the specific player-quest/custom-waypoint
|
||||||
|
operation they delegate to.
|
||||||
|
|
||||||
## The High-Level Shape
|
## The High-Level Shape
|
||||||
|
|
||||||
Cyberpunk appears to split "navigation" into at least two major domains:
|
Cyberpunk appears to split "navigation" into at least two major domains:
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
module EdgeWeightGPS
|
||||||
|
|
||||||
|
private func EdgeWeightGPSLog(message: String) -> Void {
|
||||||
|
Log("[EdgeWeightGPS] " + message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@wrapMethod(WorldMapMenuGameController)
|
||||||
|
private final func TryTrackQuestOrSetWaypoint() -> Void {
|
||||||
|
EdgeWeightGPSLog("WorldMapMenuGameController.TryTrackQuestOrSetWaypoint enter");
|
||||||
|
wrappedMethod();
|
||||||
|
EdgeWeightGPSLog("WorldMapMenuGameController.TryTrackQuestOrSetWaypoint exit");
|
||||||
|
}
|
||||||
|
|
||||||
|
@wrapMethod(WorldMapMenuGameController)
|
||||||
|
private final func UpdateTrackedQuest() -> Void {
|
||||||
|
EdgeWeightGPSLog("WorldMapMenuGameController.UpdateTrackedQuest enter");
|
||||||
|
wrappedMethod();
|
||||||
|
EdgeWeightGPSLog("WorldMapMenuGameController.UpdateTrackedQuest exit");
|
||||||
|
}
|
||||||
|
|
||||||
|
@wrapMethod(WorldMapMenuGameController)
|
||||||
|
private final func UpdateTravelDestination() -> Void {
|
||||||
|
EdgeWeightGPSLog("WorldMapMenuGameController.UpdateTravelDestination enter");
|
||||||
|
wrappedMethod();
|
||||||
|
EdgeWeightGPSLog("WorldMapMenuGameController.UpdateTravelDestination exit");
|
||||||
|
}
|
||||||
|
|
||||||
|
@wrapMethod(WorldMapMenuGameController)
|
||||||
|
private final func TrackQuestMappin(mappinController: ref<BaseMappinBaseController>) -> Void {
|
||||||
|
EdgeWeightGPSLog("WorldMapMenuGameController.TrackQuestMappin enter defined=" + ToString(IsDefined(mappinController)));
|
||||||
|
wrappedMethod(mappinController);
|
||||||
|
EdgeWeightGPSLog("WorldMapMenuGameController.TrackQuestMappin exit");
|
||||||
|
}
|
||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
game_dir="${CYBERPUNK2077_GAME_DIR:-/var/home/salt/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/common/Cyberpunk 2077}"
|
||||||
|
script_out="$game_dir/r6/scripts/EdgeWeightGPS"
|
||||||
|
|
||||||
|
mkdir -p "$script_out"
|
||||||
|
install -m 0644 "$repo_root/redscript/EdgeWeightGPS/EdgeWeightGPS.reds" "$script_out/EdgeWeightGPS.reds"
|
||||||
|
|
||||||
|
printf 'Installed %s\n' "$script_out/EdgeWeightGPS.reds"
|
||||||
Reference in New Issue
Block a user