Actualización 2.61
9/6/2026
Menú nativo PASO 3: nativo-lista fuente de fila obtenido mediante ingeniería inversa + `list-read` (sonda) + lectura de selección en vivo. Continuando con el carril del menú nativo en el juego (Yojimbo→Jarvis-BAHAMUT), paso-3 espacio #1 ("de dónde vienen las filas de la lista nativa de?") se cierra a través de IDA: la lista ENTRADA (`FFX_Menu_List_UpdateInput 0x8B4460`) es 100% genérica: matemática de campo pura sobre el objeto de 152 bytes (`+40` estado, `+48` recuento, `+50` superior, `+52` destino, `+58` página, `+66` espacios, `+69` resultado, `+70` desplazamiento, `+72` seleccionado, `+28` validador), no toca no GLOBAL y es reutilizado por 10 constructores distintos, pero cada sorteo nativo es elemento-shaped: la lista de escena3 (`FFX_Menu_CreateScene3ScrollableList 0x8B4FB0` → dibujar `0x8B4A00` → fila `0x8B4B20`) lee filas de `unk_159EC30[64i]` (estructuras de 64 bytes) + `byte_1866250[]` (tipo), con el nombre del elemento resuelto por `0x86C3C0(id→table)` y una etiqueta directa opcional en `rowPtr+32` (tipo 1); Carga la escena 3/33/34 y depende de Personalizar globales. No hay sorteo de "gratuito-texto lista" en el binario, por lo que una lista nativa con texto NUESTRO (la arena/Aurora Photo-Modo shell) requiere una devolución de llamada de sorteo DLL (paso 5, el camino previsto en tick-BIBLIA §4), con la receta hecho a mano documentada (entrada genérica `0x8B4460` + un sorteo DLL usando `sub_8F5F70` ventana / `sub_9016B0` cadena / `sub_8C0640` cursor, leyendo `+69`/`+72`). Enviado a través de la sonda HOY: nuevo verbo `ffxprobectl list-read [handleHex]` (LEER-solo) que escanea el menú-object POOL (`g_FFX_MenuObjPool 0x18408C0`, 32 espacios × 152B): busca CUALQUIER lista nativa/ventana emergente activa y la identifica por sus devoluciones de llamada, además del acceso directo GLOBAL "lista ACTUAL" (`dword_1866214`/`186A5DC`/`23CC120`). ✅ RT2 PASS (en vivo, 2026-06-09): con el juego en el menú Personalizar equipo, el escaneo del grupo captó la lista navegada (espacio[3] `@0x017A0A88`, `input=0x8D57E0`, una fina envoltura del genérico `0x8B4460`) y `+72`/`SELECTED` rastrearon el cursor en tiempo REAL (35→42) mientras el operador lo movía → paso-3 "leer la selección de una lista navegable nativa" PROBADO sin escribir nada. (Bonificación: el `+62 = group 0x101` del objeto reiniciado coincide con `FFX_MenuObj_Reset` (IDA): compensaciones confirmadas en la memoria). sin cámara RAM / Aurora / `dllmain.cpp` / guardar tocado; IDA de solo lectura (`_claude_ida` copia, rename-queue en el documento). `ffxprobectl` errores de compilación 0. Paso 5 (plano): paste-ready esqueleto del shell nativo en `RuntimeTools/NativeMenuShell/NativeMenuShell.h` (+README) — objeto hand-tirada + dibujar devolución de llamada (ventana+filas+cursor) + FFX codificador de fuentes + puente desacoplado a las acciones del Modo Foto de Aurora; ABI/compensaciones confirmadas (IDA verificar el flujo de trabajo) y revisadas por el adversario (2 lentes FFX-vs-IDA + C++ → sin bloqueo de fallas/compilación); x86 guardia + anti-OOB abrazadera + cargar-bearing invariantes anotadas; sin cable, no toca `dllmain.cpp`. Paso 5.1 (plano de cableado, NO aplicado): plan + borrador de parche (`docs/ai/HANDOFF_BAHAMUT_NATIVE_MENU_WIRE_BLUEPRINT_2026-06-09.md` + `docs/patches/BAHAMUT_NATIVE_MENU_WIRE_DRAFT_2026-06-09.patch`) cableando la carcasa `ffx-hooks.dll` mediante un desvío en el menú bomba `FFX_Menu_PerFramePump 0x8A9C50` (`int __cdecl(uint)`, IDA-verificado, main-thread) — DESACTIVADO de forma predeterminada (`FFXHOOKS_ENABLE_NATIVE_MENU` + F7 tecla de acceso rápido), solo puente llama a `PhotoMode::`; revisado adversamente (2 lentes) sin bloqueador (el revisor de compilación lo aplicó a un árbol borrador, `git apply --recount --check` salir 0); `dllmain.cpp` NO tocado/registrado. Doc: `docs/reverse/FFX_NATIVE_MENU_LIST_ROW_SOURCE_2026-06-09.md`.
Leer notas