Appearance
aowlspt_natraid.h
Source: abi/aowlspt_natraid.h — 468 lines, 23 file-scope functions.
What this header owns
Reproduced verbatim from the header's own banner comment — these notes are frequently the only written record of why the subsystem is shaped the way it is.
text
aowlspt_natraid.h -- NATIVE RAID ENTRY: the byte-verified target table, the
call thunks, and the guarded scalar read/write primitives.
WHAT THIS IS FOR
----------------
The UI-automation auto-raid (`autoraid.nim`) drives the menu by finding and
pressing GameObjects. It stalls on the character/side-select screen, whose
control is not reliably pressable. This layer replaces the pressing with a
DIRECT call at a static RVA into the game's own commit path, so no
GameObject has to be found or pressed at all.
THE ROUTE (all offline-measured; see the header comment of `natraid.nim`)
TarkovApplication (the `this` of the Update drain we already ride)
-> get_CurrentRaidSettings() @0x691340 RaidSettings
-> get_MatchmakerOperation() @0x977360 MatchmakerOperation
RaidSettings.<Side>k__BackingField @0x20 ESideType (Pmc = 0)
RaidSettings.LocationId @0x30 string
RaidSettings.<RaidMode>k__BackingField @0x44 ERaidMode (Local = 1)
RaidSettings.IsPveOffline @0xa0 bool
RaidSettings._selectedLocation @0xa8 Location
MatchmakerOperation._raidSettings @0x40 RaidSettings
MatchmakerOperation._offlineRaidSettings@0x48 RaidSettings
MatchmakerOperation._readyPressed @0x60 bool
MatchmakerOperation.<MatchmakerPlayersController>k__BackingField @0xa0
-> OnReadyPressed() @0xA312E0 void
SHAREDNESS, measured with `il2cpp_resolve.py ... shared <RVA>`:
0x977360 UNIQUE (1 owner)
0xA312E0 UNIQUE (1 owner)
0x691340 SHARED, 36 owners -- this table CALLS it and NOTHING here ever
detours anything, so the 36-owner blast radius does not apply.
Its whole body is `mov rax,[rcx+0xd8]; ret`, i.e. calling it IS
a field read, with the game's own offset rather than a guess.
SAFETY (CLAUDE.md section 5, all of it)
* Every target is 16-byte prologue-verified against the STARTUP SNAPSHOT
(`aowl_pro_verify`), never against live memory -- so a verify here can
never read another feature's trampoline and self-reject.
* VirtualQuery (`aowl_is_readable`) on EVERY hop, and additionally a
writable-protection check before the ONE kind of write this makes.
* NO detour is installed by this file. It rides the existing
`TarkovApplication::Update` drain.
* The refusal reason is RECORDED per target, exactly as `aowl_nu_fn` does,
so "GameAssembly.dll is not loaded yet" can never be reported as "this
build's bytes do not match".
MUST be included AFTER `aowlspt_shim.h` (aowl_is_readable) and
`aowlspt_prologue.h` (aowl_pro_verify / aowl_pro_prime).Constants
AOWLSPT_NATRAID_HAOWL_NR_MAX_FAULTSAOWL_NR_MAX_STRINGSAOWL_NR_SIG_BYTESAOWL_NR_STR_LENAOWL_NR_TARGET_COUNTAOWL_NR_T_GET_MATCHMAKEROPAOWL_NR_T_GET_RAIDSETTINGSAOWL_NR_T_ONREADYPRESSEDAOWL_NR_T_SET_SELECTEDLOCAOWL_NR_T_TRYGETLOCATIONAOWL_NR_T_TRYGETLOCBYIDAOWL_NR_WHY_BADINDEXAOWL_NR_WHY_DISABLEDAOWL_NR_WHY_MISMATCHAOWL_NR_WHY_NOT_COMMITAOWL_NR_WHY_NOT_EXECAOWL_NR_WHY_NO_MODULEAOWL_NR_WHY_OKAOWL_NR_WHY_PROFULLAOWL_NR_WHY_UNTRIED
Functions
| Signature | Line |
|---|---|
int32_t aowl_nr_disabled(void) | 186 |
void aowl_nr_note_fault(void) | 189 |
int32_t aowl_nr_fault_count(void) | 190 |
int32_t aowl_nr_target_count(void) | 191 |
int32_t aowl_nr_profull_count(void) | 192 |
char aowl_nr_name(int32_t i) | 199 |
uint32_t aowl_nr_rva(int32_t i) | 203 |
int32_t aowl_nr_why_of(int32_t i) | 207 |
char aowl_nr_why_text(int32_t w) | 211 |
void aowl_nr_fn(int32_t i) | 227 |
void aowl_nr_prime_all(void) | 267 |
void aowl_nr_call_getter(void* fn, void* self) | 283 |
void aowl_nr_call_void(void* fn, void* self) | 287 |
int32_t aowl_nr_try_get_location(void* fn, void* locSettings, void* idStr, void** out) | 314 |
int32_t aowl_nr_try_get_location_by_id(void* fn, void* self, void* idStr, void** out) | 327 |
void aowl_nr_set_selected_location(void* fn, void* self, void* loc) | 340 |
void aowl_nr_string(const char* s) | 369 |
int32_t aowl_nr_string_export_ok(void) | 397 |
int32_t aowl_nr_read_i32(void* base, int32_t off, int32_t* out) | 405 |
int32_t aowl_nr_read_u8(void* base, int32_t off, int32_t* out) | 413 |
void aowl_nr_read_ptr(void* base, int32_t off) | 421 |
int32_t aowl_nr_writable(void* p, SIZE_T n) | 433 |
int32_t aowl_nr_write_i32_checked(void* base, int32_t off, int32_t v) | 453 |

