更新 2.209
2026/8/2
v2.209.0.0BETAMINOR
Seymour2026年8月1日
Aurora × noclip:3D 戰鬥橋接(編輯器現在以編輯過的陣型渲染 REAL 遊戲場地)
- 發現: noclip 的
parseEncounter(bin.ts:2494) 使用 EXACTLY 我們的Battle_File配置(script@0x4,怪物 ID i16@+0xC,float32 16B 位置)—0e/<id>.bin是 byte-identical 至btl_*.bin(雜湊證明:0e/0002 == bjyt02_00)。 EncounterIndexBridge(FfxLib/Battle):SHA-256 battleId↔encounterId 索引 — 614/858 場戰鬥匹配(azit03_00→0e/00EF,klyt00_00→0e/001E,mihn00_00→0e/002F);244 場未匹配已誠實回報。Aurora3DLauncher+「🐉 以 3D 檢視戰鬥 (noclip)」按鈕位於 Aurora 室:以0e/<encId>.binbtl 覆寫 CURRENT(.aurora3d.bak原始備份,「↩️ 還原 3D」按鈕)並開啟index.html?battle=<encId>#ffx/b<mapIndex>(mapIndex 來自 EncounterTable 戰場 & 0xFF)— noclip 原生 PS2 渲染顯示編輯過的陣型/位置。- 附加 noclip 修補(scenes.ts
selectEncounter,約 20 行):?battle=參數強制特定遭遇(跳過權重選擇);距離重建 + 更新於 8769 serve-dir(已於提供之套件中驗證)。 - 閘門:
--filter AuroraOverlayEnrichment9/9 PASS;完整套件 357/357 PASS;Aurora3DLinkLab --override azit03_00複製=True/還原=True;HTTP E2E:8769 提供覆蓋 byte-for-byte。文件:docs/reverse/FFX_AURORA_NOCLIP_3D_BATTLE_BRIDGE_2026-08-01.md。 - 第二階段(下一步): noclip 中的拖曳/攝影機 → POST 傳送至編輯器(AuroraDragBridge 模式)→ 寫入二進位檔 → 重新載入。Per-field 視覺效果待處理。 ### PATCH
v2.208.0.1
v2.209.1.0BETAPATCH
Seymour2026年8月1日
Aurora: 檢視器 INSIDE 編輯器 (WebView2) + RealGame/EditViewer 命名 + battle-preview 無需遊戲選單
- 內嵌: Aurora Chamber 新增了一個
WebView2Host欄位 — 「渲染 EditViewer」與「🐉 在 RealGame 中檢視(遊戲內)」現在會開啟 INSIDE 編輯器(無瀏覽器);⟳ 重新載入檢視器按鈕;EmbeddedReloadRequestedauto-reloads 於儲存後。 - 頂部動作: 修復了 ActionBar(渲染 EditViewer · 在 RealGame 中檢視 · 還原 · 儲存位置 · +/- 怪物 · 匯出錨點)— 不再有內容隱藏在捲動中。
- UI 重新命名:
noclip→ RealGame(遊戲內);MapViewer→ EditViewer(文字、狀態、橫幅)。 - 無遊戲選單: 修復了 noclip
battle-preview目錄中的 FFX 場景描述 — URL?battle=<encId>&map=<mapIndex>#ffx/battle-preview總是直接解析為 FFX(mapIndex 不需要在 55 個已編目之中);dist 已重建並在提供的套件中驗證(包含battle-preview+get("battle"))。 - Auto-sync: SaveDraggedPositions/SaveCameraShots/SaveCameraFloats/AddMonster/RemoveMonster re-apply 覆蓋 RealGame + 重新載入檢視器(儲存的位置顯示 in-game,無需 re-clicking)。
- 閘門: 完整套件 359/359 PASS;發行版本建置 0 錯誤;提供的套件已驗證。 ### MINOR
v2.209.0.0
v2.209.2.0BETA
Seymour2026年8月1日
Aurora UI/UX: 清理儀表板 + 專用 pop-up 檢視器
- 儀錶板: 主畫面現在是地圖選擇 — 帶有 徽章 的清單 ([ gLTF ] [ N 紋理 ] [ N/N 子網格 ] [ STUB ] [ map-only ],tone-colored),高級深色卡片 用於該位置 (#16121F 背景 + 白色文字),在 ONE 位置的動作 (卡片下方: Renderizar EditViewer · 🐉 在 RealGame 中檢視 · 💾 儲存位置 · ➕/➖ 怪物 · 匯出錨點 · ↩️ 還原) — 移除重複按鈕。
- Pop-ups (新架構): 專用
AuroraViewerWindow(WebView2) 用於 EditViewer (原始編輯) 和 RealGame (read-only) — 它們彼此NOT互動;在儀錶板中切換地圖/戰鬥會自動關閉所有視窗 (防止在錯誤的地圖上編輯怪物/洩漏)。 - 側邊欄疊加層: 浮動檢視器面板變成了 可摺疊側邊欄 (❮ 隱藏 → 58px 條狀區域) — 不再阻擋 3D 視圖。
- 過長文字 → [?] 帶提示 (HonestyBanner 移至「?」按鈕提示中)。
- 閘門: 完整套件 360/360 PASS · 發行版本 0 錯誤 ·
node --checkOK. ### PATCH
v2.209.1.0
v2.209.3.0BETA
Seymour2026年8月2日
自訂 Mix / Arena+ 解鎖: 實驗室路徑已修復 + ArenaMultiBossLab 已部署至遊戲 + vanilla-root 已設定
- 實驗室路徑修復 (
ArenaPlusComposePick.cppResolveLabExe): 已新增候選路徑..\data\modules\tools\ArenaMultiBossLab\ArenaMultiBossLab.exe— 即專案的工具模式 (data\modules\tools,位於 SinScaleInject)。此前,鉤子僅在modules\tools\...中尋找 — 實驗室從未被找到 → CreateProcess 失敗 → 自訂 Mix 從未 in-game 構成任何內容。 - 實驗室已部署至遊戲:
ArenaMultiBossLab已建置 (Release,0 錯誤/0 警告) 並複製 (exe+dll+deps+recipes) 至data\modules\tools\ArenaMultiBossLab\. - Vanilla-root configured:
modules\config\arena_plus_compose_vanilla_btl.txtcreated pointing toFFX Extracted\FFX\ffx_ps2\ffx\master\jppc\battle\btl(config txts were empty before →--vanilla-root ""→ lab failed). Mod-root default OK ({gameRoot}\data\mods\...\btlexists). - v6 rollback absorbed: HEAD's dllmain is already the v5 state (DrawString
0x9016B0crash in DIFF — the new navigation will be reintroduced with IDA available). Note on the 2.207.6.0 changelog entry. - RT2
Needs Testing(自訂 Mix): F7 → Arena+ → 自訂 Mix → 選擇召喚獸 → 啟動 → 已構成的戰鬥 (e.g。 Bikanel + 4 暗黑召喚獸,戰鬥編號 bika02_01)。重新啟動會使用第一次啟動時建立的清單。 ### PATCH
v2.209.2.0
v2.209.4.0BETAPATCH
Seymour2026年8月2日
SIN 已解除封鎖: SinScaleInject 路徑已修正 (data\modules\tools) + 角色清單目錄已修正 + Macalania/Thunder 角色清單已從 git + tool deployed
- 還原
- 可執行檔路徑修正 (
SinCurseHook.cpp):{DLL_DIR}\tools\SinScaleInject\→..\data\modules\tools\SinScaleInject\SinScaleInject.exe(project tools pattern — before, CreateProcessA failed and SIN never ran in-game). - Roster dir fix (
SinScaleInject/Program.cs): default now{gameRoot}\data\modules\tools\SinScaleInject\data\rosters(wasmodules\tools\...— one level off). - Rosters restored from git (commit
eb2e93ed):spira-sin-area-rosters/withmacalania_all/bosses/field/woods.csv+thunder_plains.csv(monster_id,role,note,allowed_presetswith UNI-001..006 allowlist) + README. - Deployed to game:
SinScaleInjectbuilt (Release, 0 errors) and copied todata\modules\tools\SinScaleInject\+ 角色清單至data\modules\tools\SinScaleInject\data\rosters\. - RT2
Needs Testing(SIN): area transition withsin_curse.flag→ SinScaleInject runs (logSinCurseHook SinScaleInject SUCCESS) → area monsters with scaled HP/stats (T) +[UNI]核心名稱 + ATEL 處理器於 AiFile → 戰鬥. - ffx-hooks 搭配 SIN 路徑修正: 建置就緒,部署待定(遊戲在提交時處於開啟狀態 — 關閉後再部署)。 ### PATCH
v2.209.3.0
v2.209.5.0BETAPATCH
Seymour2026年8月2日
自訂 Mix/競技場+ 頭目音樂已解除封鎖:心跳閘門不再封鎖 MusicHook
- 問題: MusicHook(套用 battle-music 覆寫)被
WaitForProbeHeartbeat閘門封鎖——ffx-probe 心跳從未上升(探測未掛鉤 GetDeviceState)→MusicHook install skipped: ffx-probe heartbeat gate failed→ 競技場+ 音樂從未播放。 - 音樂:
ARENA_PLUS_MUSIC_TRACK_DEFAULT 145 = "Challenge"(boss-battle 曲目——所有競技場+ F7 列:黑暗召喚獸 + Penance;透過arena_plus_music_<row>.txt/FFXHOOKS_ARENAPLUS_MUSIC_TRACK_<N>覆寫)。 - 修正: 閘門現在是 non-blocking——等待探測 10 秒(若探測回應,額外的 SOUNDCMD 也會啟動),並在無心跳情況下安裝 MusicHook(透過 FFXHooksBlock + battle-entry 掛鉤 Prep/PlayTrackWithPreload/SwitchCrossfade 無需探測即可運作;僅 SOUNDCMD 觸發會降級——日誌中顯示 WARN)。
- RT2
Needs Testing: 自訂 Mix → 啟動 → 組合戰鬥應播放 挑戰 (145) 而非一般戰鬥主題曲。 - 待處理備註: ffx-probe 心跳從未上升(dinput8 66.560 來自 07-19)——調查為何 GetDeviceState 未掛鉤(影響透過探測的 SOUNDCMD/FORCEBATTLE;音樂不再依賴於此)。 ### MINOR
v2.209.4.0
v2.209.6.0BETAPATCH
Seymour2026年8月2日
自訂 Mix 音樂,無靜音/外洩 + composed-bin 還原 (永不永久覆蓋正典)
- Silence/外洩修正 (MusicHook.cpp
MusicPlayWithPreload_Shim): 在 SOUNDCMD 降級 (無探測心跳) 的情況下,墊層抑制了原版音樂並依賴於 soundcmd 播放覆蓋內容 → 戰鬥無聲 + 覆蓋外洩至下一個 PlayTrack (退出時播放了「預期」的音樂)。現在,無 soundcmd 時:取代曲目並播放原版 (無靜音、無外洩);有 soundcmd 時:維持實驗室配方 (抑制+配方)。 - Composed-bin 在正常自訂 Mix 路徑上還原:
ArmDeferredFileRestore僅在 781D60 (cross-map) 路徑上啟動 — 正常路徑 (e.g. 組合的 bika02_01) 將二進位檔案永久留在 mod-root 中 (覆蓋區域正典戰鬥)。現在正常路徑也啟動還原 (約30秒)。 - 開機還原 (
ArenaPlus_RestorePendingComposeOnBoot): 若前一個會話在延遲還原 (約30秒) 前關閉,開機時會從.spiraforge.bak還原正典 (從battle_idgameRoot 讀取compose_last.json) — 組合永遠不會保持永久。 - 建置 PASS + LabDeploy 至 Steam。
- RT2
Needs Testing: 自訂 Mix → 啟動 → 組合的戰鬥搭配正確音樂 (無靜音) → 約30秒後正典二進位檔案還原 → 區域隨機遭遇恢復正常;在30秒前關閉遊戲 → 下次開機還原。 ### PATCH
v2.209.5.0
v2.209.7.0BETAPATCH
Seymour2026年8月2日
自訂 Mix 音樂:僅在探針存活時設定 soundcmd 回呼 (無 soundcmd → 墊片取代音軌並播放原版)
- 為何 2.209.6.0 修正還不夠:
g_arenaSoundCmdFn並非空值 (dllmain 在掛鉤安裝時設定了ArenaPlus_MusicHookProbeSoundCmd) — 它只在執行時期失敗 (無探針心跳) → 墊片看到回呼 → 使用 lab 路徑 (抑制 + 配方) → soundcmd 失敗 → 靜音與洩漏持續存在。 - 修正: dllmain 現在保留
probeAlive = FFXHOOKS_SKIP_PROBE_WAIT || WaitForProbeHeartbeat(10000),並且僅在探針存活時才設定 soundcmd 回呼 (3 個安裝點)。探針死亡 → 回呼為空 →PlayTrackWithPreload墊片取代音軌並播放原版 → 挑戰 (145) 在編曲戰鬥中播放,無靜音,無洩漏至退出。 - Idle-crash 判定 (在 IDA 中透過 MCP 13337 調查): fmodex AV 是 pre-existing —
AsyncTask_InvokeCallbackThunk(0x691480) 以 this+4/this+8 = 已釋放的堆積 ((*(this+4))(*(this+8))) 呼叫 0x10CDCDCD;thunk 指標位於表格0xB46FA0(音訊區域)。None 我們的掛鉤觸及此路徑 (AsyncTask/0x691480/0xB46FA0) — 存取違規早於 F7。全域 VEH 擷取並記錄它 (診斷)。修正它 = 找出誰釋放了音訊 AsyncTask (單獨的焦點)。 - 建置 PASS + LabDeploy 到 Steam (20:09)。 ### MINOR
v2.209.6.0
v2.209.8.0BETA
Seymour2026年8月2日
開機還原已修復(實際清單位於 `modules\compose_last.json`)+ 測試的組合二進位檔已還原 + 自訂 Mix 支援場景已確認
- 開機還原已修復: 實際清單由實驗室寫入
modules\compose_last.json(module-relative) — 開機還原原本只檢查 gameRoot → 中斷工作階段的組合二進位檔仍留在磁碟上。現在依序檢查:modules\compose_last.json→{gameRoot}\compose_last.json→{gameRoot}\mods\Spira Reforge\arena\compose_last.json。 - 磁碟清理: 測試的組合
bika02_01.bin(19:37)已還原為原始版本(.spiraforge.bak,來自 2024-09-06,24,016 位元組)— 已透過大小/時間戳確認。 - 自訂 Mix 支援場景(透過實驗室 --compose dry-run 驗證): bikanel (bika02_01)、macalania_forest/open/open2 (mcfr00_00/mcyt00_00/mcyt00_21)、remiem (kino00_00)、cavern/cavern_alt (nagi05_50/24/25)。蘑菇巖 NOT 是支援的場景(組合時備用方案為 cavern — 這就是 x4 在那裡「沒有開啟」的原因)。x3/x4 (3-4 個角色) 在支援的場景上完美組合 (dry-run 已證實:4 個插槽,區塊2/區塊3 正常)。
- 建置 PASS + LabDeploy 至 Steam。 ### PATCH
v2.209.7.0