Brings opponent_substitution.h and cop_traffic_disable.h - the
native32/launcher branch's proven, live-confirmed multiplayer-mod hooks
(opponent car/color substitution, cop dispatcher removal with a live
before/after roadblock proof, full traffic elimination) - into this repo
as source, plus DebugFeatures.kt/DebugMenuOverlay.kt (debug-only money/menu
scaffold) and this session's GameActivityMain.kt thread-safety fix
(BroadcastReceiver.onReceive wrapping native calls in
gameGLSurfaceView.queueEvent{} instead of calling straight into JNI from
the main thread - a real cross-thread race, independently useful on both
branches).
Two real conflicts, both resolved to preserve architecture rather than
naively keep both sides:
- main.cpp: kept this branch's own structure. The new .h files, like
lan_event_injection.h before them, are NOT #include'd or wired into
JNI_OnLoad - every hook in both files resolves and calls raw
"libapp_base + OFFSET" function pointers, which on a real dlopen'd
libapp.so is a valid jump target but here is only Unicorn-backed guest
memory - including them unmodified would crash immediately, not just
misbehave. Left as source for the same GuestFn/CallGuestFunction porting
session already planned for lan_event_injection.h.
- GameActivityMain.kt: trivial, a code comment disagreeing on this build's
own package id (nfs13_arm here vs nfs13_mod on native32) - merged to
document both.
Verified after resolving: compileTranslatedDebugKotlin,
compileNative32DebugKotlin, and externalNativeBuildDebug (arm64-v8a +
x86_64, confirmed via a fresh main.cpp.o/mpcore.so rebuild, not a cache
hit) all succeed - this merge compiles clean on both Kotlin flavors and
the native side, not just resolves textually.
Co-Authored-By: Claude <noreply@anthropic.com>
60 lines
2.2 KiB
XML
60 lines
2.2 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<project version="4">
|
|
<component name="deploymentTargetSelector">
|
|
<selectionStates>
|
|
<SelectionState runConfigName="savemanager">
|
|
<option name="selectionMode" value="DROPDOWN" />
|
|
<DialogSelection />
|
|
</SelectionState>
|
|
<SelectionState runConfigName="app">
|
|
<option name="selectionMode" value="DROPDOWN" />
|
|
<DialogSelection />
|
|
</SelectionState>
|
|
<SelectionState runConfigName="main">
|
|
<option name="selectionMode" value="DROPDOWN" />
|
|
<DialogSelection />
|
|
</SelectionState>
|
|
<SelectionState runConfigName="unitTest">
|
|
<option name="selectionMode" value="DROPDOWN" />
|
|
<DialogSelection />
|
|
</SelectionState>
|
|
<SelectionState runConfigName="androidTest">
|
|
<option name="selectionMode" value="DROPDOWN" />
|
|
<DialogSelection />
|
|
</SelectionState>
|
|
<SelectionState runConfigName="main">
|
|
<option name="selectionMode" value="DROPDOWN" />
|
|
<DropdownSelection timestamp="2025-08-28T12:35:54.649730307Z">
|
|
<Target type="DEFAULT_BOOT">
|
|
<handle>
|
|
<DeviceId pluginId="PhysicalDevice" identifier="serial=2B101JEGR07875" />
|
|
</handle>
|
|
</Target>
|
|
</DropdownSelection>
|
|
<DialogSelection />
|
|
</SelectionState>
|
|
<SelectionState runConfigName="unitTest">
|
|
<option name="selectionMode" value="DROPDOWN" />
|
|
<DropdownSelection timestamp="2025-08-28T12:35:54.649730307Z">
|
|
<Target type="DEFAULT_BOOT">
|
|
<handle>
|
|
<DeviceId pluginId="PhysicalDevice" identifier="serial=2B101JEGR07875" />
|
|
</handle>
|
|
</Target>
|
|
</DropdownSelection>
|
|
<DialogSelection />
|
|
</SelectionState>
|
|
<SelectionState runConfigName="androidTest">
|
|
<option name="selectionMode" value="DROPDOWN" />
|
|
<DropdownSelection timestamp="2025-08-28T12:35:54.649730307Z">
|
|
<Target type="DEFAULT_BOOT">
|
|
<handle>
|
|
<DeviceId pluginId="PhysicalDevice" identifier="serial=2B101JEGR07875" />
|
|
</handle>
|
|
</Target>
|
|
</DropdownSelection>
|
|
<DialogSelection />
|
|
</SelectionState>
|
|
</selectionStates>
|
|
</component>
|
|
</project> |