Skip to content

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_H
  • AOWL_NR_MAX_FAULTS
  • AOWL_NR_MAX_STRINGS
  • AOWL_NR_SIG_BYTES
  • AOWL_NR_STR_LEN
  • AOWL_NR_TARGET_COUNT
  • AOWL_NR_T_GET_MATCHMAKEROP
  • AOWL_NR_T_GET_RAIDSETTINGS
  • AOWL_NR_T_ONREADYPRESSED
  • AOWL_NR_T_SET_SELECTEDLOC
  • AOWL_NR_T_TRYGETLOCATION
  • AOWL_NR_T_TRYGETLOCBYID
  • AOWL_NR_WHY_BADINDEX
  • AOWL_NR_WHY_DISABLED
  • AOWL_NR_WHY_MISMATCH
  • AOWL_NR_WHY_NOT_COMMIT
  • AOWL_NR_WHY_NOT_EXEC
  • AOWL_NR_WHY_NO_MODULE
  • AOWL_NR_WHY_OK
  • AOWL_NR_WHY_PROFULL
  • AOWL_NR_WHY_UNTRIED

Functions

SignatureLine
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

aoughwl — self-hosted platform for things n stuff. Contact / Support on Discord for access to the private backends.