Atualização 2.61
09/06/2026
Menu nativo STEP 3: fonte de linhas native-list reverse-engineered + `list-read` (probe) + leitura de seleção ao vivo. Continuando a lane de menu nativo in-game (Yojimbo→Jarvis-BAHAMUT), o gap step-3 #1 ("de onde vêm as linhas da lista nativa?") é fechado via IDA: a lista INPUT (`FFX_Menu_List_UpdateInput 0x8B4460`) é 100% genérica — matemática pura de campo sobre o objeto de 152 bytes (estado `+40`, count `+48`, top `+50`, target `+52`, page `+58`, slots `+66`, result `+69`, scroll `+70`, selected `+72`, validator `+28`), toca nenhum global, e é reutilizada por 10 builders distintos — mas todo draw nativo é item-shaped: a lista scene3 (`FFX_Menu_CreateScene3ScrollableList 0x8B4FB0` → draw `0x8B4A00` → linha `0x8B4B20`) lê linhas de `unk_159EC30[64i]` (structs de 64 bytes) + `byte_1866250[]` (tipo), com o nome do item resolvido por `0x86C3C0(id→table)` e um label direto opcional em `rowPtr+32` (tipo 1); carrega scene3/33/34 e depende de globals do Customize. Não há draw de "free-text list" no binário — então uma lista nativa com texto OUR (o shell da arena / Aurora Photo-Mode) exige um callback de draw DLL (passo 5, o caminho previsto em tick-bible §4), com a receita hand-rolled documentada (input genérico `0x8B4460` + um draw DLL usando janela `sub_8F5F70` / string `sub_9016B0` / cursor `sub_8C0640`, lendo `+69`/`+72`). Shipado via probe TODAY: novo verbo `ffxprobectl list-read [handleHex]` (READ-only) que escaneia o menu-object POOL (`g_FFX_MenuObjPool 0x18408C0`, 32 slots × 152B) — encontra ANY lista/popup nativo ativo e o identifica pelos callbacks — mais o atalho "current list" globals (`dword_1866214`/`186A5DC`/`23CC120`). ✅ RT2 PASS (ao vivo, 2026-06-09): com o jogo no menu Customize equipment, o scan do pool pegou a lista navegada (slot[3] `@0x017A0A88`, `input=0x8D57E0`, um wrapper fino do genérico `0x8B4460`) e `+72`/`SELECTED` rastrearam o cursor em tempo real (35→42) enquanto o operador o movia → step-3 "ler a seleção de uma lista nativa navegável" PROVEN sem escrever nada. (Bônus: o `+62 = group 0x101` do objeto reset casa com `FFX_MenuObj_Reset` (IDA) — offsets confirmados contra memória.) Sem câmera RAM / Aurora / `dllmain.cpp` / save tocados; IDA read-only (cópia `_claude_ida`, rename-queue no doc). Build `ffxprobectl` 0 erros. Passo 5 (blueprint): esqueleto paste-ready do shell nativo em `RuntimeTools/NativeMenuShell/NativeMenuShell.h` (+README) — objeto hand-roll + callback de draw (janela+linhas+cursor) + encoder de fonte FFX + ponte desacoplada para as ações do Photo Mode da Aurora; ABIs/offsets confirmados (workflow verify IDA) e revisados adversarialmente (2 lentes FFX-vs-IDA + C++ → sem blocker de crash/compile); guard x86 + clamp anti-OOB + invariantes load-bearing anotados; não ligado, não toca `dllmain.cpp`. Passo 5.1 (blueprint de wire, NOT aplicado): plano + rascunho de patch (`docs/ai/HANDOFF_BAHAMUT_NATIVE_MENU_WIRE_BLUEPRINT_2026-06-09.md` + `docs/patches/BAHAMUT_NATIVE_MENU_WIRE_DRAFT_2026-06-09.patch`) ligando o shell em `ffx-hooks.dll` via um detour no pump de menu `FFX_Menu_PerFramePump 0x8A9C50` (`int __cdecl(uint)`, IDA-verified, main-thread) — OFF por default (`FFXHOOKS_ENABLE_NATIVE_MENU` + hotkey F7), a ponte só chama `PhotoMode::`; revisado adversarialmente (2 lentes) sem blocker (revisor de compile aplicou numa árvore scratch, `git apply --recount --check` exit 0); `dllmain.cpp` NOT touched/committed. Doc: `docs/reverse/FFX_NATIVE_MENU_LIST_ROW_SOURCE_2026-06-09.md`.
Ler notas