Appearance
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_HAOWL_SUI_ARR_ELEMSAOWL_SUI_CTRL_TEXTAOWL_SUI_CTRL_VALUEAOWL_SUI_GROUP_COUNTAOWL_SUI_LIST_ITEMSAOWL_SUI_LIST_SIZEAOWL_SUI_LOCTEXT_LISTAOWL_SUI_SS_CONTROLSTABAOWL_SUI_SS_CURRENTTABAOWL_SUI_SS_GAMETABAOWL_SUI_SS_GRAPHICSTABAOWL_SUI_SS_POSTFXTABAOWL_SUI_SS_SOUNDTABAOWL_SUI_TAB_CREATEDCTRLSAOWL_SUI_TAB_FIRSTSELECTEDAOWL_SUI_TMP_MTEXT
Functions
| Signature | Line |
|---|---|
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 |

