Disable GPS tracing for calibration build

This commit is contained in:
2026-06-20 15:44:34 -05:00
parent f2e8e76650
commit 3fbad9f8c3
+228 -201
View File
@@ -97,7 +97,10 @@ constexpr bool kEnableVerboseRouteObserverHooks = false;
constexpr bool kEnableVerboseMappinRouteState = false; constexpr bool kEnableVerboseMappinRouteState = false;
constexpr bool kEnableGpsMultiplierHooks = false; constexpr bool kEnableGpsMultiplierHooks = false;
constexpr bool kEnableGpsCostTablePatch = true; constexpr bool kEnableGpsCostTablePatch = true;
constexpr bool kEnableGpsTraceHooks = false;
constexpr bool kEnableGpsRouteJobStartTrace = false;
constexpr bool kEnableGpsLocalSearchHooks = false; constexpr bool kEnableGpsLocalSearchHooks = false;
constexpr bool kEnableRouteUiTraceHooks = false;
constexpr uintptr_t kGpsSystemTickRva = 0x0E6B62C; constexpr uintptr_t kGpsSystemTickRva = 0x0E6B62C;
constexpr uintptr_t kJournalTrackEntryImplRva = 0x05944FC; constexpr uintptr_t kJournalTrackEntryImplRva = 0x05944FC;
constexpr uintptr_t kJournalListenerArrayOffset = 0x210; constexpr uintptr_t kJournalListenerArrayOffset = 0x210;
@@ -1678,7 +1681,7 @@ private:
void LogPatch(const char* aMessage, const char* aReason) void LogPatch(const char* aMessage, const char* aReason)
{ {
const auto patchLogCall = NextGpsAsyncLogCall(gGpsCostTablePatchLogCount); const auto patchLogCall = NextGpsAsyncLogCall(gGpsCostTablePatchLogCount);
if (patchLogCall >= 64) if (patchLogCall >= 16)
{ {
return; return;
} }
@@ -3324,7 +3327,7 @@ bool DetourGpsRouteJobStart(void* aRouteSystem, void* aActiveEntry, float aDelta
constexpr uint32_t kMaxCalls = 128; constexpr uint32_t kMaxCalls = 128;
const auto callCount = NextGpsAsyncLogCall(gGpsRouteJobStartLogCount); const auto callCount = NextGpsAsyncLogCall(gGpsRouteJobStartLogCount);
const auto shouldLog = callCount < kMaxCalls; const auto shouldLog = kEnableGpsRouteJobStartTrace && callCount < kMaxCalls;
if (shouldLog) if (shouldLog)
{ {
std::ostringstream line; std::ostringstream line;
@@ -4027,43 +4030,49 @@ RED4EXT_C_EXPORT bool RED4EXT_CALL Main(RED4ext::v1::PluginHandle aHandle, RED4e
const auto added = aSdk->gameStates->Add(aHandle, kGameStateRunning, &gRunningState); const auto added = aSdk->gameStates->Add(aHandle, kGameStateRunning, &gRunningState);
LogRed4ext(added ? "registered Running game-state callbacks" : "failed to register Running game-state callbacks"); LogRed4ext(added ? "registered Running game-state callbacks" : "failed to register Running game-state callbacks");
AttachProbeHook("RunGPSQuery body 0x29bd128", kRunGpsQueryBodyRva, if (kEnableGpsTraceHooks)
reinterpret_cast<void*>(&DetourRunGpsQueryBody), {
reinterpret_cast<void**>(&gOriginalRunGpsQueryBody)); AttachProbeHook("RunGPSQuery body 0x29bd128", kRunGpsQueryBodyRva,
AttachProbeHook("UpdateGPSQuery body 0x29bd254", kUpdateGpsQueryBodyRva, reinterpret_cast<void*>(&DetourRunGpsQueryBody),
reinterpret_cast<void*>(&DetourUpdateGpsQueryBody), reinterpret_cast<void**>(&gOriginalRunGpsQueryBody));
reinterpret_cast<void**>(&gOriginalUpdateGpsQueryBody)); AttachProbeHook("UpdateGPSQuery body 0x29bd254", kUpdateGpsQueryBodyRva,
AttachProbeHook("GPSQuerySubmit 0x70a42c", kGpsQuerySubmitRva, reinterpret_cast<void*>(&DetourUpdateGpsQueryBody),
reinterpret_cast<void*>(&DetourGpsQuerySubmit), reinterpret_cast<void**>(&gOriginalUpdateGpsQueryBody));
reinterpret_cast<void**>(&gOriginalGpsQuerySubmit)); AttachProbeHook("GPSQuerySubmit 0x70a42c", kGpsQuerySubmitRva,
AttachProbeHook("GPSQueryDispatch 0x70a570", kGpsQueryDispatchRva, reinterpret_cast<void*>(&DetourGpsQuerySubmit),
reinterpret_cast<void*>(&DetourGpsQueryDispatch), reinterpret_cast<void**>(&gOriginalGpsQuerySubmit));
reinterpret_cast<void**>(&gOriginalGpsQueryDispatch)); AttachProbeHook("GPSQueryDispatch 0x70a570", kGpsQueryDispatchRva,
AttachProbeHook("GPSQueryResultFetch 0x7094b8", kGpsQueryResultFetchRva, reinterpret_cast<void*>(&DetourGpsQueryDispatch),
reinterpret_cast<void*>(&DetourGpsQueryResultFetch), reinterpret_cast<void**>(&gOriginalGpsQueryDispatch));
reinterpret_cast<void**>(&gOriginalGpsQueryResultFetch)); AttachProbeHook("GPSQueryResultFetch 0x7094b8", kGpsQueryResultFetchRva,
AttachProbeHook("GPSQueryStatus 0xaa5704", kGpsQueryStatusRva, reinterpret_cast<void*>(&DetourGpsQueryResultFetch),
reinterpret_cast<void*>(&DetourGpsQueryStatus), reinterpret_cast<void**>(&gOriginalGpsQueryResultFetch));
reinterpret_cast<void**>(&gOriginalGpsQueryStatus)); AttachProbeHook("GPSQueryStatus 0xaa5704", kGpsQueryStatusRva,
AttachProbeHook("GPSDispatchAdvance 0x8d17d8", kGpsDispatchAdvanceRva, reinterpret_cast<void*>(&DetourGpsQueryStatus),
reinterpret_cast<void*>(&DetourGpsDispatchAdvance), reinterpret_cast<void**>(&gOriginalGpsQueryStatus));
reinterpret_cast<void**>(&gOriginalGpsDispatchAdvance)); AttachProbeHook("GPSDispatchAdvance 0x8d17d8", kGpsDispatchAdvanceRva,
AttachProbeHook("GPSAsyncWorkerTick 0x126b28", kGpsAsyncWorkerTickRva, reinterpret_cast<void*>(&DetourGpsDispatchAdvance),
reinterpret_cast<void*>(&DetourGpsAsyncWorkerTick), reinterpret_cast<void**>(&gOriginalGpsDispatchAdvance));
reinterpret_cast<void**>(&gOriginalGpsAsyncWorkerTick)); AttachProbeHook("GPSAsyncWorkerTick 0x126b28", kGpsAsyncWorkerTickRva,
AttachProbeHook("GPSRouteJobStart 0x818928", kGpsRouteJobStartRva, reinterpret_cast<void*>(&DetourGpsAsyncWorkerTick),
reinterpret_cast<void*>(&DetourGpsRouteJobStart), reinterpret_cast<void**>(&gOriginalGpsAsyncWorkerTick));
reinterpret_cast<void**>(&gOriginalGpsRouteJobStart)); AttachProbeHook("GPSRouteJobPoll 0x883cd8", kGpsRouteJobPollRva,
AttachProbeHook("GPSRouteJobPoll 0x883cd8", kGpsRouteJobPollRva, reinterpret_cast<void*>(&DetourGpsRouteJobPoll),
reinterpret_cast<void*>(&DetourGpsRouteJobPoll), reinterpret_cast<void**>(&gOriginalGpsRouteJobPoll));
reinterpret_cast<void**>(&gOriginalGpsRouteJobPoll)); AttachProbeHook("GPSRouteFinish 0x11f5f60", kGpsRouteFinishRva,
AttachProbeHook("GPSRouteFinish 0x11f5f60", kGpsRouteFinishRva, reinterpret_cast<void*>(&DetourGpsRouteFinish),
reinterpret_cast<void*>(&DetourGpsRouteFinish), reinterpret_cast<void**>(&gOriginalGpsRouteFinish));
reinterpret_cast<void**>(&gOriginalGpsRouteFinish)); AttachProbeHook("GPSRouteJobBuild 0x818ba8", kGpsRouteJobBuildRva,
AttachProbeHook("GPSRouteJobBuild 0x818ba8", kGpsRouteJobBuildRva, reinterpret_cast<void*>(&DetourGpsRouteJobBuild),
reinterpret_cast<void*>(&DetourGpsRouteJobBuild), reinterpret_cast<void**>(&gOriginalGpsRouteJobBuild));
reinterpret_cast<void**>(&gOriginalGpsRouteJobBuild)); }
if (kEnableGpsLocalSearchHooks) if (kEnableGpsCostTablePatch || kEnableGpsRouteJobStartTrace)
{
AttachProbeHook("GPSRouteJobStart 0x818928", kGpsRouteJobStartRva,
reinterpret_cast<void*>(&DetourGpsRouteJobStart),
reinterpret_cast<void**>(&gOriginalGpsRouteJobStart));
}
if (kEnableGpsTraceHooks && kEnableGpsLocalSearchHooks)
{ {
AttachProbeHook("GPSRouteProducer 0x44cc7c", kGpsRouteProducerRva, AttachProbeHook("GPSRouteProducer 0x44cc7c", kGpsRouteProducerRva,
reinterpret_cast<void*>(&DetourGpsRouteProducer), reinterpret_cast<void*>(&DetourGpsRouteProducer),
@@ -4082,126 +4091,141 @@ RED4EXT_C_EXPORT bool RED4EXT_CALL Main(RED4ext::v1::PluginHandle aHandle, RED4e
reinterpret_cast<void*>(&DetourGpsNodeMultiplier), reinterpret_cast<void*>(&DetourGpsNodeMultiplier),
reinterpret_cast<void**>(&gOriginalGpsNodeMultiplier)); reinterpret_cast<void**>(&gOriginalGpsNodeMultiplier));
} }
AttachProbeHook("GPSSystem/Tick", kGpsSystemTickRva, reinterpret_cast<void*>(&DetourGpsSystemTick), if (kEnableRouteUiTraceHooks)
reinterpret_cast<void**>(&gOriginalGpsSystemTick));
AttachProbeHook("JournalManager::TrackEntry impl", kJournalTrackEntryImplRva,
reinterpret_cast<void*>(&DetourJournalTrackEntry),
reinterpret_cast<void**>(&gOriginalJournalTrackEntry));
if (kEnableVerboseJournalListenerHooks)
{ {
AttachProbeHook("JournalListener::Objective vt28", kJournalListenerObjectiveVt28Rva, AttachProbeHook("GPSSystem/Tick", kGpsSystemTickRva, reinterpret_cast<void*>(&DetourGpsSystemTick),
reinterpret_cast<void*>(&DetourJournalListenerObjectiveVt28), reinterpret_cast<void**>(&gOriginalGpsSystemTick));
reinterpret_cast<void**>(&gOriginalJournalListenerObjectiveVt28)); AttachProbeHook("JournalManager::TrackEntry impl", kJournalTrackEntryImplRva,
AttachProbeHook("JournalListener::Objective vt30", kJournalListenerObjectiveVt30Rva, reinterpret_cast<void*>(&DetourJournalTrackEntry),
reinterpret_cast<void*>(&DetourJournalListenerObjectiveVt30), reinterpret_cast<void**>(&gOriginalJournalTrackEntry));
reinterpret_cast<void**>(&gOriginalJournalListenerObjectiveVt30)); if (kEnableVerboseJournalListenerHooks)
AttachProbeHook("JournalListener::Route vt28", kJournalListenerRouteVt28Rva, {
reinterpret_cast<void*>(&DetourJournalListenerRouteVt28), AttachProbeHook("JournalListener::Objective vt28", kJournalListenerObjectiveVt28Rva,
reinterpret_cast<void**>(&gOriginalJournalListenerRouteVt28)); reinterpret_cast<void*>(&DetourJournalListenerObjectiveVt28),
AttachProbeHook("JournalListener::Route vt30", kJournalListenerRouteVt30Rva, reinterpret_cast<void**>(&gOriginalJournalListenerObjectiveVt28));
reinterpret_cast<void*>(&DetourJournalListenerRouteVt30), AttachProbeHook("JournalListener::Objective vt30", kJournalListenerObjectiveVt30Rva,
reinterpret_cast<void**>(&gOriginalJournalListenerRouteVt30)); reinterpret_cast<void*>(&DetourJournalListenerObjectiveVt30),
AttachProbeHook("JournalListener::RouteAlt vt28", kJournalListenerRouteAltVt28Rva, reinterpret_cast<void**>(&gOriginalJournalListenerObjectiveVt30));
reinterpret_cast<void*>(&DetourJournalListenerRouteAltVt28), AttachProbeHook("JournalListener::Route vt28", kJournalListenerRouteVt28Rva,
reinterpret_cast<void**>(&gOriginalJournalListenerRouteAltVt28)); reinterpret_cast<void*>(&DetourJournalListenerRouteVt28),
AttachProbeHook("JournalListener::RouteAlt vt30", kJournalListenerRouteAltVt30Rva, reinterpret_cast<void**>(&gOriginalJournalListenerRouteVt28));
reinterpret_cast<void*>(&DetourJournalListenerRouteAltVt30), AttachProbeHook("JournalListener::Route vt30", kJournalListenerRouteVt30Rva,
reinterpret_cast<void**>(&gOriginalJournalListenerRouteAltVt30)); reinterpret_cast<void*>(&DetourJournalListenerRouteVt30),
AttachProbeHook("JournalListener::UI vt28", kJournalListenerUiVt28Rva, reinterpret_cast<void**>(&gOriginalJournalListenerRouteVt30));
reinterpret_cast<void*>(&DetourJournalListenerUiVt28), AttachProbeHook("JournalListener::RouteAlt vt28", kJournalListenerRouteAltVt28Rva,
reinterpret_cast<void**>(&gOriginalJournalListenerUiVt28)); reinterpret_cast<void*>(&DetourJournalListenerRouteAltVt28),
AttachProbeHook("JournalListener::UI vt30", kJournalListenerUiVt30Rva, reinterpret_cast<void**>(&gOriginalJournalListenerRouteAltVt28));
reinterpret_cast<void*>(&DetourJournalListenerUiVt30), AttachProbeHook("JournalListener::RouteAlt vt30", kJournalListenerRouteAltVt30Rva,
reinterpret_cast<void**>(&gOriginalJournalListenerUiVt30)); reinterpret_cast<void*>(&DetourJournalListenerRouteAltVt30),
AttachProbeHook("JournalListener::Tracker vt28", kJournalListenerTrackerVt28Rva, reinterpret_cast<void**>(&gOriginalJournalListenerRouteAltVt30));
reinterpret_cast<void*>(&DetourJournalListenerTrackerVt28), AttachProbeHook("JournalListener::UI vt28", kJournalListenerUiVt28Rva,
reinterpret_cast<void**>(&gOriginalJournalListenerTrackerVt28)); reinterpret_cast<void*>(&DetourJournalListenerUiVt28),
reinterpret_cast<void**>(&gOriginalJournalListenerUiVt28));
AttachProbeHook("JournalListener::UI vt30", kJournalListenerUiVt30Rva,
reinterpret_cast<void*>(&DetourJournalListenerUiVt30),
reinterpret_cast<void**>(&gOriginalJournalListenerUiVt30));
AttachProbeHook("JournalListener::Tracker vt28", kJournalListenerTrackerVt28Rva,
reinterpret_cast<void*>(&DetourJournalListenerTrackerVt28),
reinterpret_cast<void**>(&gOriginalJournalListenerTrackerVt28));
}
AttachProbeHook("JournalRouteBridge::Update candidate", kJournalRouteBridgeRva,
reinterpret_cast<void*>(&DetourJournalRouteBridge),
reinterpret_cast<void**>(&gOriginalJournalRouteBridge));
AttachProbeHook("MappinSystem::RouteEventEnqueue slot240", kMappinRouteEventEnqueueRva,
reinterpret_cast<void*>(&DetourMappinRouteEventEnqueue),
reinterpret_cast<void**>(&gOriginalMappinRouteEventEnqueue));
AttachProbeHook("MappinRouteEvent::Handle", kMappinRouteEventHandlerRva,
reinterpret_cast<void*>(&DetourMappinRouteEventHandler),
reinterpret_cast<void**>(&gOriginalMappinRouteEventHandler));
AttachProbeHook("MappinSystem::RouteActivate", kMappinRouteActivateRva,
reinterpret_cast<void*>(&DetourMappinRouteActivate),
reinterpret_cast<void**>(&gOriginalMappinRouteActivate));
AttachProbeHook("MappinSystem::RouteDeactivate", kMappinRouteDeactivateRva,
reinterpret_cast<void*>(&DetourMappinRouteDeactivate),
reinterpret_cast<void**>(&gOriginalMappinRouteDeactivate));
AttachProbeHook("RouteBuildCandidate 0x5625a4", kRouteBuildCandidateRva,
reinterpret_cast<void*>(&DetourRouteBuildCandidate),
reinterpret_cast<void**>(&gOriginalRouteBuildCandidate));
if (kEnableVerboseRouteObserverHooks)
{
AttachProbeHook("RouteObserver0::Activate slot48", kRouteObserver0ActivateRva,
reinterpret_cast<void*>(&DetourRouteObserver0Activate),
reinterpret_cast<void**>(&gOriginalRouteObserver0Activate));
AttachProbeHook("RouteObserver1::Activate slot48", kRouteObserver1ActivateRva,
reinterpret_cast<void*>(&DetourRouteObserver1Activate),
reinterpret_cast<void**>(&gOriginalRouteObserver1Activate));
AttachProbeHook("RouteObserver23::Activate slot48", kRouteObserver23ActivateRva,
reinterpret_cast<void*>(&DetourRouteObserver23Activate),
reinterpret_cast<void**>(&gOriginalRouteObserver23Activate));
AttachProbeHook("RouteObserver0::Deactivate slot50", kRouteObserver0DeactivateRva,
reinterpret_cast<void*>(&DetourRouteObserver0Deactivate),
reinterpret_cast<void**>(&gOriginalRouteObserver0Deactivate));
AttachProbeHook("RouteObserver1::Deactivate slot50", kRouteObserver1DeactivateRva,
reinterpret_cast<void*>(&DetourRouteObserver1Deactivate),
reinterpret_cast<void**>(&gOriginalRouteObserver1Deactivate));
AttachProbeHook("RouteObserver23::Deactivate slot50", kRouteObserver23DeactivateRva,
reinterpret_cast<void*>(&DetourRouteObserver23Deactivate),
reinterpret_cast<void**>(&gOriginalRouteObserver23Deactivate));
}
AttachProbeHook("FrameMappinPathWrapper", kFrameMappinPathWrapperRva,
reinterpret_cast<void*>(&DetourFrameMappinPathWrapper),
reinterpret_cast<void**>(&gOriginalFrameMappinPathWrapper));
AttachProbeHook("FrameMappinPathCore", kFrameMappinPathCoreRva,
reinterpret_cast<void*>(&DetourFrameMappinPathCore),
reinterpret_cast<void**>(&gOriginalFrameMappinPathCore));
AttachProbeHook("SetSelectedMappinWrapper", kSetSelectedMappinWrapperRva,
reinterpret_cast<void*>(&DetourSetSelectedMappinWrapper),
reinterpret_cast<void**>(&gOriginalSetSelectedMappinWrapper));
AttachProbeHook("SetSelectedMappinByIdWrapper", kSetSelectedMappinByIdWrapperRva,
reinterpret_cast<void*>(&DetourSetSelectedMappinByIdWrapper),
reinterpret_cast<void**>(&gOriginalSetSelectedMappinByIdWrapper));
AttachProbeHook("SetSelectedMappinByPositionWrapper", kSetSelectedMappinByPositionWrapperRva,
reinterpret_cast<void*>(&DetourSetSelectedMappinByPositionWrapper),
reinterpret_cast<void**>(&gOriginalSetSelectedMappinByPositionWrapper));
AttachProbeHook("SetSelectedMappinCore", kSetSelectedMappinCoreRva,
reinterpret_cast<void*>(&DetourSetSelectedMappinCore),
reinterpret_cast<void**>(&gOriginalSetSelectedMappinCore));
AttachProbeHook("TrackCustomPositionMappinWrapper", kTrackCustomPositionMappinWrapperRva,
reinterpret_cast<void*>(&DetourTrackCustomPositionMappinWrapper),
reinterpret_cast<void**>(&gOriginalTrackCustomPositionMappinWrapper));
AttachProbeHook("TrackCustomPositionMappinCore", kTrackCustomPositionMappinCoreRva,
reinterpret_cast<void*>(&DetourTrackCustomPositionMappinCore),
reinterpret_cast<void**>(&gOriginalTrackCustomPositionMappinCore));
AttachProbeHook("UntrackCustomPositionMappinWrapper", kUntrackCustomPositionMappinWrapperRva,
reinterpret_cast<void*>(&DetourUntrackCustomPositionMappinWrapper),
reinterpret_cast<void**>(&gOriginalUntrackCustomPositionMappinWrapper));
AttachProbeHook("TrackMappinWrapper", kTrackMappinWrapperRva,
reinterpret_cast<void*>(&DetourTrackMappinWrapper),
reinterpret_cast<void**>(&gOriginalTrackMappinWrapper));
AttachProbeHook("TrackMappinCore", kTrackMappinCoreRva, reinterpret_cast<void*>(&DetourTrackMappinCore),
reinterpret_cast<void**>(&gOriginalTrackMappinCore));
AttachProbeHook("SetMappinTrackingAlternativeWrapper", kSetMappinTrackingAlternativeWrapperRva,
reinterpret_cast<void*>(&DetourSetMappinTrackingAlternativeWrapper),
reinterpret_cast<void**>(&gOriginalSetMappinTrackingAlternativeWrapper));
} }
AttachProbeHook("JournalRouteBridge::Update candidate", kJournalRouteBridgeRva,
reinterpret_cast<void*>(&DetourJournalRouteBridge),
reinterpret_cast<void**>(&gOriginalJournalRouteBridge));
AttachProbeHook("MappinSystem::RouteEventEnqueue slot240", kMappinRouteEventEnqueueRva,
reinterpret_cast<void*>(&DetourMappinRouteEventEnqueue),
reinterpret_cast<void**>(&gOriginalMappinRouteEventEnqueue));
AttachProbeHook("MappinRouteEvent::Handle", kMappinRouteEventHandlerRva,
reinterpret_cast<void*>(&DetourMappinRouteEventHandler),
reinterpret_cast<void**>(&gOriginalMappinRouteEventHandler));
AttachProbeHook("MappinSystem::RouteActivate", kMappinRouteActivateRva,
reinterpret_cast<void*>(&DetourMappinRouteActivate),
reinterpret_cast<void**>(&gOriginalMappinRouteActivate));
AttachProbeHook("MappinSystem::RouteDeactivate", kMappinRouteDeactivateRva,
reinterpret_cast<void*>(&DetourMappinRouteDeactivate),
reinterpret_cast<void**>(&gOriginalMappinRouteDeactivate));
AttachProbeHook("RouteBuildCandidate 0x5625a4", kRouteBuildCandidateRva,
reinterpret_cast<void*>(&DetourRouteBuildCandidate),
reinterpret_cast<void**>(&gOriginalRouteBuildCandidate));
if (kEnableVerboseRouteObserverHooks)
{
AttachProbeHook("RouteObserver0::Activate slot48", kRouteObserver0ActivateRva,
reinterpret_cast<void*>(&DetourRouteObserver0Activate),
reinterpret_cast<void**>(&gOriginalRouteObserver0Activate));
AttachProbeHook("RouteObserver1::Activate slot48", kRouteObserver1ActivateRva,
reinterpret_cast<void*>(&DetourRouteObserver1Activate),
reinterpret_cast<void**>(&gOriginalRouteObserver1Activate));
AttachProbeHook("RouteObserver23::Activate slot48", kRouteObserver23ActivateRva,
reinterpret_cast<void*>(&DetourRouteObserver23Activate),
reinterpret_cast<void**>(&gOriginalRouteObserver23Activate));
AttachProbeHook("RouteObserver0::Deactivate slot50", kRouteObserver0DeactivateRva,
reinterpret_cast<void*>(&DetourRouteObserver0Deactivate),
reinterpret_cast<void**>(&gOriginalRouteObserver0Deactivate));
AttachProbeHook("RouteObserver1::Deactivate slot50", kRouteObserver1DeactivateRva,
reinterpret_cast<void*>(&DetourRouteObserver1Deactivate),
reinterpret_cast<void**>(&gOriginalRouteObserver1Deactivate));
AttachProbeHook("RouteObserver23::Deactivate slot50", kRouteObserver23DeactivateRva,
reinterpret_cast<void*>(&DetourRouteObserver23Deactivate),
reinterpret_cast<void**>(&gOriginalRouteObserver23Deactivate));
}
AttachProbeHook("FrameMappinPathWrapper", kFrameMappinPathWrapperRva,
reinterpret_cast<void*>(&DetourFrameMappinPathWrapper),
reinterpret_cast<void**>(&gOriginalFrameMappinPathWrapper));
AttachProbeHook("FrameMappinPathCore", kFrameMappinPathCoreRva,
reinterpret_cast<void*>(&DetourFrameMappinPathCore),
reinterpret_cast<void**>(&gOriginalFrameMappinPathCore));
AttachProbeHook("SetSelectedMappinWrapper", kSetSelectedMappinWrapperRva,
reinterpret_cast<void*>(&DetourSetSelectedMappinWrapper),
reinterpret_cast<void**>(&gOriginalSetSelectedMappinWrapper));
AttachProbeHook("SetSelectedMappinByIdWrapper", kSetSelectedMappinByIdWrapperRva,
reinterpret_cast<void*>(&DetourSetSelectedMappinByIdWrapper),
reinterpret_cast<void**>(&gOriginalSetSelectedMappinByIdWrapper));
AttachProbeHook("SetSelectedMappinByPositionWrapper", kSetSelectedMappinByPositionWrapperRva,
reinterpret_cast<void*>(&DetourSetSelectedMappinByPositionWrapper),
reinterpret_cast<void**>(&gOriginalSetSelectedMappinByPositionWrapper));
AttachProbeHook("SetSelectedMappinCore", kSetSelectedMappinCoreRva,
reinterpret_cast<void*>(&DetourSetSelectedMappinCore),
reinterpret_cast<void**>(&gOriginalSetSelectedMappinCore));
AttachProbeHook("TrackCustomPositionMappinWrapper", kTrackCustomPositionMappinWrapperRva,
reinterpret_cast<void*>(&DetourTrackCustomPositionMappinWrapper),
reinterpret_cast<void**>(&gOriginalTrackCustomPositionMappinWrapper));
AttachProbeHook("TrackCustomPositionMappinCore", kTrackCustomPositionMappinCoreRva,
reinterpret_cast<void*>(&DetourTrackCustomPositionMappinCore),
reinterpret_cast<void**>(&gOriginalTrackCustomPositionMappinCore));
AttachProbeHook("UntrackCustomPositionMappinWrapper", kUntrackCustomPositionMappinWrapperRva,
reinterpret_cast<void*>(&DetourUntrackCustomPositionMappinWrapper),
reinterpret_cast<void**>(&gOriginalUntrackCustomPositionMappinWrapper));
AttachProbeHook("TrackMappinWrapper", kTrackMappinWrapperRva,
reinterpret_cast<void*>(&DetourTrackMappinWrapper),
reinterpret_cast<void**>(&gOriginalTrackMappinWrapper));
AttachProbeHook("TrackMappinCore", kTrackMappinCoreRva, reinterpret_cast<void*>(&DetourTrackMappinCore),
reinterpret_cast<void**>(&gOriginalTrackMappinCore));
AttachProbeHook("SetMappinTrackingAlternativeWrapper", kSetMappinTrackingAlternativeWrapperRva,
reinterpret_cast<void*>(&DetourSetMappinTrackingAlternativeWrapper),
reinterpret_cast<void**>(&gOriginalSetMappinTrackingAlternativeWrapper));
} }
if (aReason == RED4ext::v1::EMainReason::Unload) if (aReason == RED4ext::v1::EMainReason::Unload)
{ {
DetachProbeHook("RunGPSQuery body 0x29bd128", kRunGpsQueryBodyRva); if (kEnableGpsTraceHooks)
DetachProbeHook("UpdateGPSQuery body 0x29bd254", kUpdateGpsQueryBodyRva); {
DetachProbeHook("GPSQuerySubmit 0x70a42c", kGpsQuerySubmitRva); DetachProbeHook("RunGPSQuery body 0x29bd128", kRunGpsQueryBodyRva);
DetachProbeHook("GPSQueryDispatch 0x70a570", kGpsQueryDispatchRva); DetachProbeHook("UpdateGPSQuery body 0x29bd254", kUpdateGpsQueryBodyRva);
DetachProbeHook("GPSQueryResultFetch 0x7094b8", kGpsQueryResultFetchRva); DetachProbeHook("GPSQuerySubmit 0x70a42c", kGpsQuerySubmitRva);
DetachProbeHook("GPSQueryStatus 0xaa5704", kGpsQueryStatusRva); DetachProbeHook("GPSQueryDispatch 0x70a570", kGpsQueryDispatchRva);
if (kEnableGpsLocalSearchHooks) DetachProbeHook("GPSQueryResultFetch 0x7094b8", kGpsQueryResultFetchRva);
DetachProbeHook("GPSQueryStatus 0xaa5704", kGpsQueryStatusRva);
DetachProbeHook("GPSDispatchAdvance 0x8d17d8", kGpsDispatchAdvanceRva);
DetachProbeHook("GPSAsyncWorkerTick 0x126b28", kGpsAsyncWorkerTickRva);
DetachProbeHook("GPSRouteJobPoll 0x883cd8", kGpsRouteJobPollRva);
DetachProbeHook("GPSRouteFinish 0x11f5f60", kGpsRouteFinishRva);
DetachProbeHook("GPSRouteJobBuild 0x818ba8", kGpsRouteJobBuildRva);
}
if (kEnableGpsCostTablePatch || kEnableGpsRouteJobStartTrace)
{
DetachProbeHook("GPSRouteJobStart 0x818928", kGpsRouteJobStartRva);
}
if (kEnableGpsTraceHooks && kEnableGpsLocalSearchHooks)
{ {
DetachProbeHook("GPSRouteProducer 0x44cc7c", kGpsRouteProducerRva); DetachProbeHook("GPSRouteProducer 0x44cc7c", kGpsRouteProducerRva);
DetachProbeHook("GPSSearch 0x44f054", kGpsSearchRva); DetachProbeHook("GPSSearch 0x44f054", kGpsSearchRva);
@@ -4212,56 +4236,59 @@ RED4EXT_C_EXPORT bool RED4EXT_CALL Main(RED4ext::v1::PluginHandle aHandle, RED4e
DetachProbeHook("GPSAuxMultiplier 0x40bb00", kGpsAuxMultiplierRva); DetachProbeHook("GPSAuxMultiplier 0x40bb00", kGpsAuxMultiplierRva);
DetachProbeHook("GPSNodeMultiplier 0x40bb40", kGpsNodeMultiplierRva); DetachProbeHook("GPSNodeMultiplier 0x40bb40", kGpsNodeMultiplierRva);
} }
DetachProbeHook("GPSSystem/Tick", kGpsSystemTickRva); if (kEnableRouteUiTraceHooks)
DetachProbeHook("JournalManager::TrackEntry impl", kJournalTrackEntryImplRva);
if (kEnableVerboseJournalListenerHooks)
{ {
DetachProbeHook("JournalListener::Objective vt28", kJournalListenerObjectiveVt28Rva); DetachProbeHook("GPSSystem/Tick", kGpsSystemTickRva);
DetachProbeHook("JournalListener::Objective vt30", kJournalListenerObjectiveVt30Rva); DetachProbeHook("JournalManager::TrackEntry impl", kJournalTrackEntryImplRva);
DetachProbeHook("JournalListener::Route vt28", kJournalListenerRouteVt28Rva); if (kEnableVerboseJournalListenerHooks)
DetachProbeHook("JournalListener::Route vt30", kJournalListenerRouteVt30Rva); {
DetachProbeHook("JournalListener::RouteAlt vt28", kJournalListenerRouteAltVt28Rva); DetachProbeHook("JournalListener::Objective vt28", kJournalListenerObjectiveVt28Rva);
DetachProbeHook("JournalListener::RouteAlt vt30", kJournalListenerRouteAltVt30Rva); DetachProbeHook("JournalListener::Objective vt30", kJournalListenerObjectiveVt30Rva);
DetachProbeHook("JournalListener::UI vt28", kJournalListenerUiVt28Rva); DetachProbeHook("JournalListener::Route vt28", kJournalListenerRouteVt28Rva);
DetachProbeHook("JournalListener::UI vt30", kJournalListenerUiVt30Rva); DetachProbeHook("JournalListener::Route vt30", kJournalListenerRouteVt30Rva);
DetachProbeHook("JournalListener::Tracker vt28", kJournalListenerTrackerVt28Rva); DetachProbeHook("JournalListener::RouteAlt vt28", kJournalListenerRouteAltVt28Rva);
DetachProbeHook("JournalListener::RouteAlt vt30", kJournalListenerRouteAltVt30Rva);
DetachProbeHook("JournalListener::UI vt28", kJournalListenerUiVt28Rva);
DetachProbeHook("JournalListener::UI vt30", kJournalListenerUiVt30Rva);
DetachProbeHook("JournalListener::Tracker vt28", kJournalListenerTrackerVt28Rva);
}
DetachProbeHook("JournalRouteBridge::Update candidate", kJournalRouteBridgeRva);
DetachProbeHook("MappinSystem::RouteEventEnqueue slot240", kMappinRouteEventEnqueueRva);
DetachProbeHook("MappinRouteEvent::Handle", kMappinRouteEventHandlerRva);
DetachProbeHook("MappinSystem::RouteActivate", kMappinRouteActivateRva);
DetachProbeHook("MappinSystem::RouteDeactivate", kMappinRouteDeactivateRva);
DetachProbeHook("RouteBuildCandidate 0x5625a4", kRouteBuildCandidateRva);
if (kEnableVerboseRouteObserverHooks)
{
DetachProbeHook("RouteObserver0::Activate slot48", kRouteObserver0ActivateRva);
DetachProbeHook("RouteObserver1::Activate slot48", kRouteObserver1ActivateRva);
DetachProbeHook("RouteObserver23::Activate slot48", kRouteObserver23ActivateRva);
DetachProbeHook("RouteObserver0::Deactivate slot50", kRouteObserver0DeactivateRva);
DetachProbeHook("RouteObserver1::Deactivate slot50", kRouteObserver1DeactivateRva);
DetachProbeHook("RouteObserver23::Deactivate slot50", kRouteObserver23DeactivateRva);
}
DetachProbeHook("FrameMappinPathWrapper", kFrameMappinPathWrapperRva);
DetachProbeHook("FrameMappinPathCore", kFrameMappinPathCoreRva);
DetachProbeHook("SetSelectedMappinWrapper", kSetSelectedMappinWrapperRva);
DetachProbeHook("SetSelectedMappinByIdWrapper", kSetSelectedMappinByIdWrapperRva);
DetachProbeHook("SetSelectedMappinByPositionWrapper", kSetSelectedMappinByPositionWrapperRva);
DetachProbeHook("SetSelectedMappinCore", kSetSelectedMappinCoreRva);
DetachProbeHook("TrackCustomPositionMappinWrapper", kTrackCustomPositionMappinWrapperRva);
DetachProbeHook("TrackCustomPositionMappinCore", kTrackCustomPositionMappinCoreRva);
DetachProbeHook("UntrackCustomPositionMappinWrapper", kUntrackCustomPositionMappinWrapperRva);
DetachProbeHook("TrackMappinWrapper", kTrackMappinWrapperRva);
DetachProbeHook("TrackMappinCore", kTrackMappinCoreRva);
DetachProbeHook("SetMappinTrackingAlternativeWrapper", kSetMappinTrackingAlternativeWrapperRva);
DetachAbsoluteHook("MappinSystem::UpdateCustomPosition slot1f0", gMappinUpdateCustomPositionTarget);
DetachAbsoluteHook("MappinSystem::SetTracked slot220", gMappinSetTrackedTarget);
DetachAbsoluteHook("MappinSystem::ClearTracked slot228", gMappinClearTrackedTarget);
DetachAbsoluteHook("MappinSystem::FramePath slot280", gMappinFramePathTarget);
DetachAbsoluteHook("MappinSystem::PositionQuery slot2e0", gMappinPositionQueryTarget);
DetachAbsoluteHook("MappinSystem::CreateCustomPosition slot2f0", gMappinCreateCustomPositionTarget);
DetachAbsoluteHook("MappinSystem::ReleaseQuery slot368", gMappinReleaseQueryTarget);
DetachAbsoluteHook("MappinSystem::ActiveRoute slot3a8", gMappinActiveRouteTarget);
DetachAbsoluteHook("Observer1Service::RouteLookup slot220", gObserver1ServiceRouteLookupTarget);
} }
DetachProbeHook("JournalRouteBridge::Update candidate", kJournalRouteBridgeRva);
DetachProbeHook("MappinSystem::RouteEventEnqueue slot240", kMappinRouteEventEnqueueRva);
DetachProbeHook("MappinRouteEvent::Handle", kMappinRouteEventHandlerRva);
DetachProbeHook("MappinSystem::RouteActivate", kMappinRouteActivateRva);
DetachProbeHook("MappinSystem::RouteDeactivate", kMappinRouteDeactivateRva);
DetachProbeHook("RouteBuildCandidate 0x5625a4", kRouteBuildCandidateRva);
if (kEnableVerboseRouteObserverHooks)
{
DetachProbeHook("RouteObserver0::Activate slot48", kRouteObserver0ActivateRva);
DetachProbeHook("RouteObserver1::Activate slot48", kRouteObserver1ActivateRva);
DetachProbeHook("RouteObserver23::Activate slot48", kRouteObserver23ActivateRva);
DetachProbeHook("RouteObserver0::Deactivate slot50", kRouteObserver0DeactivateRva);
DetachProbeHook("RouteObserver1::Deactivate slot50", kRouteObserver1DeactivateRva);
DetachProbeHook("RouteObserver23::Deactivate slot50", kRouteObserver23DeactivateRva);
}
DetachProbeHook("FrameMappinPathWrapper", kFrameMappinPathWrapperRva);
DetachProbeHook("FrameMappinPathCore", kFrameMappinPathCoreRva);
DetachProbeHook("SetSelectedMappinWrapper", kSetSelectedMappinWrapperRva);
DetachProbeHook("SetSelectedMappinByIdWrapper", kSetSelectedMappinByIdWrapperRva);
DetachProbeHook("SetSelectedMappinByPositionWrapper", kSetSelectedMappinByPositionWrapperRva);
DetachProbeHook("SetSelectedMappinCore", kSetSelectedMappinCoreRva);
DetachProbeHook("TrackCustomPositionMappinWrapper", kTrackCustomPositionMappinWrapperRva);
DetachProbeHook("TrackCustomPositionMappinCore", kTrackCustomPositionMappinCoreRva);
DetachProbeHook("UntrackCustomPositionMappinWrapper", kUntrackCustomPositionMappinWrapperRva);
DetachProbeHook("TrackMappinWrapper", kTrackMappinWrapperRva);
DetachProbeHook("TrackMappinCore", kTrackMappinCoreRva);
DetachProbeHook("SetMappinTrackingAlternativeWrapper", kSetMappinTrackingAlternativeWrapperRva);
DetachAbsoluteHook("MappinSystem::UpdateCustomPosition slot1f0", gMappinUpdateCustomPositionTarget);
DetachAbsoluteHook("MappinSystem::SetTracked slot220", gMappinSetTrackedTarget);
DetachAbsoluteHook("MappinSystem::ClearTracked slot228", gMappinClearTrackedTarget);
DetachAbsoluteHook("MappinSystem::FramePath slot280", gMappinFramePathTarget);
DetachAbsoluteHook("MappinSystem::PositionQuery slot2e0", gMappinPositionQueryTarget);
DetachAbsoluteHook("MappinSystem::CreateCustomPosition slot2f0", gMappinCreateCustomPositionTarget);
DetachAbsoluteHook("MappinSystem::ReleaseQuery slot368", gMappinReleaseQueryTarget);
DetachAbsoluteHook("MappinSystem::ActiveRoute slot3a8", gMappinActiveRouteTarget);
DetachAbsoluteHook("Observer1Service::RouteLookup slot220", gObserver1ServiceRouteLookupTarget);
} }
return true; return true;