Skip to content

aowlspt_settingsui.h

Source: abi/aowlspt_settingsui.h — 166 lines, 18 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_settingsui.h -- Phase 1 field offsets for the native SettingsScreen
control-tree probe.

READ-ONLY. This header carries nothing but the static field offsets the host's
settings-UI probe walks, exposed as small accessor functions (the same shape
as `aowl_uxpatch_version_label_offset`) so the compiled host literally uses the
numbers recorded here and a future build's different layout is a one-file edit.

The offsets come from the offline field-offset tool (Phase 0,
`tools/il2cpp_resolve.py settings-table`, build 1.1.0.1.46777, imagebase
0x180000000) which reads `Il2CppMetadataRegistration.fieldOffsets` and is
cross-checked against `System.String` (0x10/0x14). Every one is a CANDIDATE
until the live read-only probe logs a known stock label at it -- that content
match is what validates the offset before any write is ever attempted (Phase 2+).

PHASE 1.5 UPDATE (from the live Phase-1 log): `Show` fires correctly on the
Unity thread and the tab fields below all resolve, but at `Show` time every
tab's `_createdControls` (0x88) is still NULL -- the controls are built later,
lazily, by `SettingsScreen::EnsureTabInitialized`. The probe therefore now
ALSO hooks that method as a POSTFIX (target + prologue in `aowlspt_bridge.h`)
and walks the one tab that call just built. `Show` stays hooked as the
arming/thread confirmation it already proved itself to be.

The detour target itself (SettingsScreen::Show @ RVA 0x171FA00) is already
verified and handed out by `aowl_bridge_settings_target_at` in
`aowlspt_bridge.h`; this header adds only the layout the probe reads once it is
on the Unity thread with `this` = the live SettingsScreen.

## The walk (all reads cIsReadable-guarded on the host/Nim side)

  SettingsScreen (this)
    + 0x118  _currentTab           -> SettingsTab
    + 0xF0   _gameSettingsScreen    (typed tab field)
    + 0xF8   _graphicsSettingsScreen
    + 0x100  _postFXSettingsScreen
    + 0x108  _soundSettingsScreen
    + 0x110  _controlsSettingsTabScreen

  SettingsTab
    + 0x88   _createdControls  -> List<SettingControl>

  List<T>  (fixed IL2CPP layout, same as every generic List)
    + 0x10   _items  -> T[]          (array object)
    + 0x18   _size   -> int32 count
  T[]  elements are inline starting at  + 0x20  (8 bytes each, a pointer)

  SettingControl
    + 0x80   Text   -> LocalizedText (label wrapper)
    + 0xA8   value widget (NumberSlider / UpdatableToggle / DropDownBox,
             per subclass) -- logged raw this phase, not decoded
    + 0x00   klass (Il2CppObject header) -> the control's il2cpp type pointer,
             logged raw so slider/toggle/dropdown can later be told apart by
             matching known type pointers, no reflection

  LocalizedText
    + 0x78   List<TextMeshProUGUI>   (the same List layout above)
  TextMeshProUGUI
    + 0xE0   m_text -> System.String  (length @ +0x10, UTF-16 chars @ +0x14)

Constants

  • AOWLSPT_SETTINGSUI_H
  • AOWL_SUI_ARR_ELEMS
  • AOWL_SUI_CTRL_TEXT
  • AOWL_SUI_CTRL_VALUE
  • AOWL_SUI_GROUP_COUNT
  • AOWL_SUI_LIST_ITEMS
  • AOWL_SUI_LIST_SIZE
  • AOWL_SUI_LOCTEXT_LIST
  • AOWL_SUI_SS_CONTROLSTAB
  • AOWL_SUI_SS_CURRENTTAB
  • AOWL_SUI_SS_GAMETAB
  • AOWL_SUI_SS_GRAPHICSTAB
  • AOWL_SUI_SS_POSTFXTAB
  • AOWL_SUI_SS_SOUNDTAB
  • AOWL_SUI_TAB_CREATEDCTRLS
  • AOWL_SUI_TAB_FIRSTSELECTED
  • AOWL_SUI_TMP_MTEXT

Functions

SignatureLine
int32_t aowl_sui_group_tab_offset(int32_t group)119
char aowl_sui_group_name(int32_t group)131
int32_t aowl_sui_group_count(void)145
int32_t aowl_sui_off_currenttab(void)149
int32_t aowl_sui_off_gametab(void)150
int32_t aowl_sui_off_graphicstab(void)151
int32_t aowl_sui_off_postfxtab(void)152
int32_t aowl_sui_off_soundtab(void)153
int32_t aowl_sui_off_controlstab(void)154
int32_t aowl_sui_off_createdctrls(void)155
int32_t aowl_sui_off_firstselected(void)156
int32_t aowl_sui_off_list_items(void)157
int32_t aowl_sui_off_list_size(void)158
int32_t aowl_sui_off_arr_elems(void)159
int32_t aowl_sui_off_ctrl_text(void)160
int32_t aowl_sui_off_ctrl_value(void)161
int32_t aowl_sui_off_loctext_list(void)162
int32_t aowl_sui_off_tmp_mtext(void)163

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