Update 2.61
9.6.2026
Natives Menü SCHRITT 3: Quelle der nativen Listenzeilen per RE ermittelt + `list-read` (Probe) + Live-Auswahl lesen. Weiter in der lane des nativen In-Game-Menüs (Yojinbo→Jarvis-BAHAMUT): Die Lücke Nr. 1 von Schritt 3 ("Woher kommen die Zeilen der nativen Liste?") ist per IDA geschlossen: Die EINGABE (`FFX_Menu_List_UpdateInput 0x8B4460`) ist zu 100 % generisch — reine Feld-Mathematik über dem 152-Byte-Objekt (`+40` state, `+48` count, `+50` top, `+52` target, `+58` page, `+66` slots, `+69` result, `+70` scroll, `+72` selected, `+28` validator), berührt kein Global und wird von 10 verschiedenen Buildern wiederverwendet — aber jedes native Zeichnen ist item-förmig: Die Scene3-Liste (`FFX_Menu_CreateScene3ScrollableList 0x8B4FB0` → draw `0x8B4A00` → row `0x8B4B20`) liest Zeilen aus `unk_159EC30[64i]` (64-Byte-Strukturen) + `byte_1866250[]` (Typ), wobei der Item-Name über `0x86C3C0(id→table)` aufgelöst wird und ein optionales direktes Label bei `rowPtr+32` liegt (Typ 1); sie lädt scene3/33/34 und hängt von Customize-Globals ab. Es gibt kein "Freitext-Listen"-Zeichnen im Binär — eine native Liste mit UNSEREM Text (die Arena / Aurora-Photo-Mode-Shell) erfordert daher einen DLL-Zeichnen-Callback (Schritt 5, der in tick-bible §4 vorgesehene Weg), mit dem handgefertigten Rezept dokumentiert (generische Eingabe `0x8B4460` \+ ein DLL-Zeichnen mit `sub_8F5F70`-Fenster / `sub_9016B0`-String / `sub_8C0640`-Cursor, das `+69`/`+72` liest). HEUTE per Probe ausgeliefert: neues Verb `ffxprobectl list-read [handleHex]` (nur-lesend), das den Pool der Menüobjekte (`g_FFX_MenuObjPool 0x18408C0`, 32 Tombola × 152B) — findet JEDE aktive native Liste/Popup und identifiziert sie über ihre Callbacks — plus die Abkürzungen "aktuelle Liste"-Globals (`dword_1866214`/`186A5DC`/`23CC120`). ✅ RT2 PASS (live, 2026-06-09): Bei geöffnetem Customize-Ausrüstungs-Menü im Spiel erfasste der Pool-Scan die navigierte Liste (slot\[3\] `@0x017A0A88`, `input=0x8D57E0`, ein dünner Wrapper des generischen `0x8B4460`), und `+72`/`SELECTED` verfolgte den Cursor in Echtzeit (35→42), als der Bediener ihn bewegte → "Auswahl einer nativen navigierbaren Liste lesen" aus Schritt 3 BEWIESEN, ohne etwas zu schreiben. (Bonus: Das `+62 = group 0x101` des Reset-Objekts stimmt mit `FFX_MenuObj_Reset` (IDA) überein — Offsets gegen den Speicher bestätigt.) Kein Kamera-RAM / Aurora / `dllmain.cpp` / Save angefasst; IDA nur-lesend (`_claude_ida`-Kopie, rename-queue im Doc). `ffxprobectl`-Build 0 Fehler. Schritt 5 (Blueprint): Paste-ready-Gerüst der nativen Shell unter `RuntimeTools/NativeMenuShell/NativeMenuShell.h` (+README) — Objekt-Hand-Roll + Zeichnen-Callback (Fenster+Zeilen+Cursor) + FFX-Font-Encoder + entkoppelte Brücke zu Auroras Photo-Mode-Aktionen; ABIs/Offsets bestätigt (IDA-Verify-Workflow) und adversarially geprüft (2 Linsen FFX-vs-IDA + C++ → kein Crash/Compile-Blocker); x86-Guard + Anti-OOB-Klemmung + tragende Invarianten annotiert; nicht verdrahtet, fasst `dllmain.cpp`. an. Schritt 5.1 (Wire-Blueprint, NICHT angewendet): Plan + Patch-Entwurf (`docs/ai/HANDOFF_BAHAMUT_NATIVE_MENU_WIRE_BLUEPRINT_2026-06-09.md` + `docs/patches/BAHAMUT_NATIVE_MENU_WIRE_DRAFT_2026-06-09.patch`), der die Shell über `ffx-hooks.dll`einen Detour auf der Menü-Pumpe `FFX_Menu_PerFramePump 0x8A9C50` (`int __cdecl(uint)`, IDA-verifiziert, Main-Thread) in einbindet — standardmäßig AUS (`FFXHOOKS_ENABLE_NATIVE_MENU` \+ F7), die Brücke ruft nur `PhotoMode::`; adversarially geprüft (2 Linsen) kein Blocker (Compile-Reviewer hat es auf einen Scratch-Tree angewendet, `git apply --recount --check` exit 0); `dllmain.cpp` NICHT angefasst/committet. Doc: `docs/reverse/FFX_NATIVE_MENU_LIST_ROW_SOURCE_2026-06-09.md`. \[previous: `v2.60.2`\] — Jarvis-BAHAMUT
Hinweise lesen