更新 2.61
2026/6/9
原生選單 STEP 3: native-list 行來源 reverse-engineered + `list-read` (探查) + 即時選擇讀取。 持續進行原生 in-game 選單工作線 (Yojimbo→Jarvis-BAHAMUT),step-3 缺口 #1(「原生清單的行從何而來?」)已透過 IDA 封閉:該清單 INPUT (`FFX_Menu_List_UpdateInput 0x8B4460`) 是 100% 通用型 — 純粹對 152 位元組物件進行欄位數學運算 (`+40` 狀態、`+48` 計數、`+50` 頂部、`+52` 目標、`+58` 頁面、`+66` 插槽、`+69` 結果、`+70` 捲動、`+72` 已選取、`+28` 驗證器),不碰觸任何全域變數,並由 10 個不同的建構器 重複使用 — 但 每個原生繪製都是 item-shaped:場景3 清單 (`FFX_Menu_CreateScene3ScrollableList 0x8B4FB0` → 繪製 `0x8B4A00` → 行 `0x8B4B20`) 從 `unk_159EC30[64i]` (64 位元組結構) + `byte_1866250[]` (型別) 讀取行,其中物品名稱由 `0x86C3C0(id→table)` 解析,並在 `rowPtr+32` (型別 1) 處有選項的直接標籤;它載入 scene3/33/34 並依賴自訂全域變數。二進位檔中不存在「free-text 清單」繪製 — 因此一個帶有 OUR 文字(競技場 / Aurora Photo-Mode 外殼)的原生清單需要 DLL 繪製回呼(步驟 5,即 tick-bible §4 中所預見的路徑),hand-rolled 配方已記錄(通用輸入 `0x8B4460` + 使用 DLL 視窗 / `sub_8F5F70` 字串 / `sub_9016B0` 遊標的 `sub_8C0640` 繪製,讀取 `+69`/`+72`)。透過探查 TODAY 出貨: 新的動詞 `ffxprobectl list-read [handleHex]` (READ-only),會掃描 menu-object POOL (`g_FFX_MenuObjPool 0x18408C0`,32 個槽 × 152B) — 找到 ANY 活躍的原生列表/彈出視窗,並透過其回呼識別它 — 加上捷徑「目前列表」的全域變數 (`dword_1866214`/`186A5DC`/`23CC120`)。✅ RT2 PASS (即時,2026-06-09): 在遊戲處於自訂裝備選單時,池掃描捕捉到了被導航的列表 (slot[3] `@0x017A0A88`,`input=0x8D57E0`,是通用 `0x8B4460` 的一個薄包裝) 並且 `+72`/`SELECTED` 即時追蹤了遊標 (35→42),當操作者移動它時 → step-3「讀取了一個原生可導航列表的選取項」PROVEN 而不寫入任何東西。(加分項:重置物件的 `+62 = group 0x101` 與 `FFX_MenuObj_Reset` 相符 (IDA) — 偏移量已與記憶體確認。) 未觸及任何相機 RAM / Aurora / `dllmain.cpp` / 存檔;IDA read-only (`_claude_ida` 副本,位於文件中的 rename-queue)。`ffxprobectl` 建置 0 個錯誤。步驟 5 (藍圖): paste-ready 原生外殼的骨架位於 `RuntimeTools/NativeMenuShell/NativeMenuShell.h` (+README) — 物件 hand-roll + 繪製回呼 (視窗+行+遊標) + FFX 字型編碼器 + 與 Aurora 的拍照模式動作解耦的橋接;ABI/偏移量已確認 (IDA 驗證工作流程) 並經對抗性審查 (2 個鏡頭 FFX-vs-IDA + C++ → 無當機/編譯阻礙);x86 防護 + anti-OOB 鉗位 + load-bearing 不變量已註解;未接線,不觸及 `dllmain.cpp`。 步驟 5.1 (接線藍圖, 已套用 NOT): 計劃 + 修補草稿 (`docs/ai/HANDOFF_BAHAMUT_NATIVE_MENU_WIRE_BLUEPRINT_2026-06-09.md` + `docs/patches/BAHAMUT_NATIVE_MENU_WIRE_DRAFT_2026-06-09.patch`) 透過選單泵 `ffx-hooks.dll` 上的繞道將外殼接線至 `FFX_Menu_PerFramePump 0x8A9C50` (`int __cdecl(uint)`, IDA-verified, main-thread) — 預設為 OFF (`FFXHOOKS_ENABLE_NATIVE_MENU` + F7 快速鍵), 橋接僅呼叫 `PhotoMode::`; 經對抗性審查 (2 個視角) 無阻礙 (編譯審查員將其套用至暫存樹, `git apply --recount --check` exit 0); `dllmain.cpp` NOT touched/committed. Doc: `docs/reverse/FFX_NATIVE_MENU_LIST_ROW_SOURCE_2026-06-09.md`.
閱讀說明