Aggiornamento 2.61
09/06/2026
menu nativo STEP 3: row source lista nativa reverse-engineered + (letterale tecnico: native-list)`list-read` (probe) + lettura selezione live. Continuando la lane menu nativo in-game (Yojimbo→Jarvis-BAHAMUT), il gap #1 dello step-3 ("da dove vengono le righe della lista nativa?") è chiuso via IDA: l'INPUT della lista (`FFX_Menu_List_UpdateInput 0x8B4460`) è 100% generico — pura matematica di campo sull'oggetto 152-byte (`+40` state, `+48` count, `+50` top, `+52` target, `+58` page, `+66` slots, `+69` result, `+70` scroll, `+72` selected, `+28` validator), non tocca nessun global, ed è riusato da 10 builder distinti — ma ogni draw nativo è item-shaped: la lista scene3 (`FFX_Menu_CreateScene3ScrollableList 0x8B4FB0` → draw `0x8B4A00` → row `0x8B4B20`) legge le righe da `unk_159EC30[64i]` (struct 64-byte) + `byte_1866250[]` (tipo), con il nome item risolto da `0x86C3C0(id→table)` e un'etichetta diretta opzionale a `rowPtr+32` (tipo 1); carica scene3/33/34 e dipende dai global Customize. Non esiste un draw "lista free-text" nel binario — quindi una lista nativa con il NOSTRO testo (la shell arena / Aurora Photo-Mode) richiede un callback draw DLL (step 5, il percorso previsto in tick-bible §4), con la ricetta hand-rolled documentata (input generico `0x8B4460` + un draw DLL che usa la finestra `sub_8F5F70` / la stringa `sub_9016B0` / il cursore `sub_8C0640`, leggendo `+69`/`+72`). Distribuito via probe OGGI: nuovo verbo (letterale tecnico: TODAY)`ffxprobectl list-read [handleHex]` (READ-only) che scansiona il POOL oggetti menu (letterale tecnico: menu-object) (`g_FFX_MenuObjPool 0x18408C0`, 32 slot × 152B) — trova QUALSIASI lista/popup nativa attiva e la identifica dai suoi callback — più la scorciatoia global "current list" ( (letterale tecnico: ANY)`dword_1866214`/`186A5DC`/`23CC120`). ✅ RT2 PASS (live, 2026-06-09): con il gioco nel menu Customize equipment, la scansione del pool ha catturato la lista navigata (slot[3] `@0x017A0A88`, `input=0x8D57E0`, un wrapper sottile del generico `0x8B4460`) e `+72`/`SELECTED` ha tracciato il cursore in tempo reale (35→42) mentre l'operatore lo muoveva → lo step-3 "leggi la selezione di una lista nativa navigabile" PROVEN senza scrivere nulla. (Bonus: l'oggetto reset `+62 = group 0x101` corrisponde a `FFX_MenuObj_Reset` (IDA) — offset confermati contro la memoria.) Nessuna RAM camera / Aurora / `dllmain.cpp` / save toccati; IDA read-only (copia `_claude_ida`, rename-queue nel doc). `ffxprobectl` build 0 errori. Step 5 (blueprint): skeleton paste-ready della shell nativa in `RuntimeTools/NativeMenuShell/NativeMenuShell.h` (+README) — hand-roll oggetto + callback draw (window+rows+cursor) + encoder font FFX + bridge disaccoppiato alle azioni Photo Mode di Aurora; ABI/offset confermati (workflow verify IDA) e rivisti avversarialmente (2 lens FFX-vs-IDA + C++ → nessun blocker crash/compile); guardia x86 + clamp anti-OOB + invarianti load-bearing annotate; non wired, non tocca `dllmain.cpp`. Step 5.1 (wire blueprint, NON applicato): piano + bozza patch (`docs/ai/HANDOFF_BAHAMUT_NATIVE_MENU_WIRE_BLUEPRINT_2026-06-09.md` + `docs/patches/BAHAMUT_NATIVE_MENU_WIRE_DRAFT_2026-06-09.patch`) che collega la shell in `ffx-hooks.dll` via un detour sul pump menu `FFX_Menu_PerFramePump 0x8A9C50` (`int __cdecl(uint)`, IDA-verified, main-thread) — OFF di default (`FFXHOOKS_ENABLE_NATIVE_MENU` + hotkey F7), il bridge chiama solo `PhotoMode::`; rivisto avversarialmente (2 lens) nessun blocker (il reviewer compile lo ha applicato a un albero 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`.
Leggi le note