업데이트 2.209
2026. 8. 2.
v2.209.0.0BETAMINOR
Seymour2026년 8월 1일
Aurora × noclip: 3D 전투 브리지 (이제 에디터에서 편집된 전술을 적용한 ‘REAL’ 게임 필드를 렌더링합니다)
- 드이스크오브어이: 느오크르이프'스
parseEncounter(bin.ts:2494) 사용함 EXACTLY 우리의Battle_File레이아웃 (스크립트@0x4, 몬스터 이드스 i16@+0xC, float32 16B 프오스이션스) —0e/<id>.bin임 byte-identical 로btl_*.bin(흐아시 증명: 0e/0002 == bjyt02_00). EncounterIndexBridge(FfxLib/전투): SHA-256 battleId↔encounterId 인덱스 — 614/858 전투 일치 (azit03_00→0e/00EF, klyt00_00→0e/001E, mihn00_00→0e/002F); 244 우느姆아트치드 르프오르트드 정직하게.Aurora3DLauncher+ "🐉 보기 전투 에서 3D (느오크르이프)" 버튼 에서 아우르오르아 챔버: 덮어씀0e/<encId>.bin와 함께 해당 CURRENT 브트르 (.aurora3d.bak바닐라 백업, "↩️ 복원 3D" 버튼) 및 열림index.html?battle=<encId>#ffx/b<mapIndex>(mapIndex 에서 EncounterTable 브아트트을프이에르드&0xFF) — 해당 느오크르이프 네이티브 PS2 르느드어 표시함 해당 편집됨 포메이션/프오스이션스.- 추가적인 느오크르이프 patch (scenes.ts
selectEncounter, ~20 르이느에스):?battle=매개변수 프오르크에스 해당 정확한 조우 (스크이프스 우에이그흐트 선택); 드이스트 재구축됨 + 새로 고쳐짐 에서 해당 8769 serve-dir (검증된 에서 해당 스어브드 번들). - 게이트:
--filter AuroraOverlayEnrichment9/9 PASS; 전체 스위트 357/357 PASS;Aurora3DLinkLab --override azit03_00복사=참/복원=참; HTTP E2E: 8769 제공함 해당 재정의 byte-for-byte. 문서:docs/reverse/FFX_AURORA_NOCLIP_3D_BATTLE_BRIDGE_2026-08-01.md. - 단계 2 (다음): 드래그/카메라 에서 느오크르이프 → POST 로 해당 편집기 (AuroraDragBridge 패턴) → 기록 로 브이느 → 다시 로드. Per-field 시각적 스姆오크에 보류 중. ### PATCH
v2.208.0.1
v2.209.1.0BETAPATCH
Seymour2026년 8월 1일
Aurora: viewers INSIDE the editor (WebView2) + RealGame/EditViewer naming + battle-preview without the game menu
- 내장 기능: 오로라 챔버(Aurora Chamber)에 ‘
WebView2Host’ 칼럼이 추가되었습니다. — “Renderizar EditViewer” 및 “🐉 Ver 없음 RealGame (ingame)”은 이제 편집기(브라우저 아님)에서 INSIDE 열 수 있습니다; ⟳ 뷰어 새로 고침 버튼;EmbeddedReloadRequestedauto-reloads 저장 후. - 상단 메뉴: “ActionBar” (Renderizar EditViewer · Ver 없음 RealGame · Restaurar · Salvar posições · +/- monster · Exportar âncoras)가 수정되었습니다. 이제 스크롤 시 숨겨지는 항목이 없습니다.
- 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; 릴리스 build 0 오류; 스어브드 번들 검증된. ### MINOR
v2.209.0.0
v2.209.2.0BETAPATCH
Seymour2026년 8월 1일
Aurora UI/UX: clean dashboard + dedicated pop-up viewers
- 대시보드: 메인 화면이 이제 지도 선택 화면으로 변경되었습니다 — 배지가 표시된 목록 ([ gLTF ] [ N tex ] [ N/N submeshes ] [ STUB ] [ map-only ], tone-colored), 해당 장소를 나타내는 프리미엄 다크 카드 (#16121F 배경 + 흰색 텍스트), ONE 장소의 작업 (카드 하단: Renderizar EditViewer · 🐉 RealGame에서 보기 · 💾 위치 저장 · ➕/➖ 몬스터 · 앵커 내보내기 · ↩️ 복원) — 버튼 중복 제거.
- Pop-ups (새 아키텍처): dedicated
AuroraViewerWindow(원시 편집) 및 WebView2 (EditViewer)를 위한 전용 RealGame (read-only) — 서로 아님 상호 작용함 대시보드에서 맵/전투 변경 시 모든 창이 자동으로 닫힘 (잘못된 맵에서 몬스터 편집/누수 방지; changing map/battle 내 해당 dashboard closes 모든 windows automatically (prevents editing monsters 에 해당 wrong map / leaks). - 사이드바 오버레이: 플로팅 뷰어 패널이 접을 수 있는 사이드바(❮ 숨기기 → 58px 띠)로 변경되어 더 이상 3D 뷰를 가리지 않습니다.
- 너무 큰 텍스트 → [?] (툴팁 추가, HonestyBanner는 “?” 버튼의 툴팁으로 이동됨).
- 게이트: 전체 스위트 360/360 PASS · 릴리스 build 0 오류 ·
node --checkOK. ### PATCH
v2.209.1.0
v2.209.3.0BETAPATCH
Seymour2026년 8월 2일
Custom Mix / Arena+ unblocked: lab path fixed + ArenaMultiBossLab deployed to the game + vanilla-root configured
- Lab 경로 수정 (
ArenaPlusComposePick.cppResolveLabExe): 후보 경로..\data\modules\tools\ArenaMultiBossLab\ArenaMultiBossLab.exe를 추가했습니다. 이는 프로젝트의 도구 패턴(data\modules\tools, SinScaleInject가 위치한 곳)입니다. 이전에는 훅이modules\tools\...만 검색했기 때문에 lab이 전혀 발견되지 않아 → CreateProcess이 실패했고 → Custom Mix이 in-game을 전혀 구성하지 못했습니다. - 게임에 랩 배포:
ArenaMultiBossLab를 빌드(릴리스, 오류 0개/경고 0개)하고,data\modules\tools\ArenaMultiBossLab\디렉터리에 (exe+dll+deps+recipes)를 복사했습니다. - Vanilla-root 설정 완료:
modules\config\arena_plus_compose_vanilla_btl.txt을 가리키도록FFX Extracted\FFX\ffx_ps2\ffx\master\jppc\battle\btl이 생성되었습니다(이전에는 설정 텍스트가 비어 있었음 →--vanilla-root ""→ 테스트 실패). Mod-root의 기본값은 OK입니다({gameRoot}\data\mods\...\btl이 존재함). - v6 롤백 반영: HEAD의 dllmain은 이미 v5 상태입니다(DrawString
0x9016B0, DIFF에서 발생하는 오류 — IDA가 출시되면 새로운 탐색 기능이 다시 도입될 예정입니다). 2.207.6.0 변경 내역 항목에 대한 참고 사항. - RT2
Needs Testing(사용자 지정 Mix): F7 → Arena+ → 사용자 지정 Mix → 에온 선택 → 실행 → 구성 전투 (e.g. Bikanel + 4 Dark Aeons, battle_id bika02_01). 다시 실행하면 첫 번째 실행 시 생성된 매니페스트가 사용됩니다. ### PATCH
v2.209.2.0
v2.209.4.0BETAPATCH
Seymour2026년 8월 2일
SIN unblocked: SinScaleInject path fixed (data\modules\tools) + roster dir fixed + Macalania/Thunder rosters restored from git + tool deployed
- Exe 경로 수정 (
SinCurseHook.cpp):{DLL_DIR}\tools\SinScaleInject\→..\data\modules\tools\SinScaleInject\SinScaleInject.exe(프로젝트 도구 패턴 — 이전에는 CreateProcessA이 실패했고 SIN은 한 번도 실행되지 않았습니다 in-game). - 로스터 디렉토리 수정 (
SinScaleInject/Program.cs): 이제 기본값이{gameRoot}\data\modules\tools\SinScaleInject\data\rosters입니다 (이전에는modules\tools\...이었음 — 한 단계 차이가 났습니다). - Git에서 로스터 복원 (커밋
eb2e93ed):spira-sin-area-rosters/(macalania_all/bosses/field/woods.csv및thunder_plains.csv포함) (monster_id,role,note,allowed_presets, UNI-001..006 허용 목록 포함) + README. - 게임에 배포됨:
SinScaleInject가 빌드되었으며(릴리스, 오류 0개),data\modules\tools\SinScaleInject\+ rosters 으로data\modules\tools\SinScaleInject\data\rosters\로 복사되었습니다. - RT2
Needs Testing(SIN):sin_curse.flag를 통해 영역 전환 → SinScaleInject 실행 (logSinCurseHook SinScaleInject SUCCESS) → 스케일링된 HP/stats (T)를 가진 영역 몬스터 +[UNI]커널 이름 + ATEL 내의 AiFile 핸들러 → 전투. - ffx-hooks ( 경로 수정 사항 포함SIN): 빌드 완료, 배포 대기 중 (커밋 시점에 게임이 실행 중이었으므로, 게임이 종료된 후 배포할 예정: build 준비됨, deploy pending (game 였음 open 에서 commit time — deploy 때 closed). ### PATCH
v2.209.3.0
v2.209.5.0BETAPATCH
Seymour2026년 8월 2일
Custom Mix/Arena+ boss music unblocked: heartbeat gate no longer blocks MusicHook
- 문제: MusicHook (battle-music 오버라이드를 적용하는 페이지)이
WaitForProbeHeartbeat게이트에 의해 차단되었습니다. ffx-probe 하트비트가 절대 상승하지 않습니다(GetDeviceState가 연결되지 않은 상태에서 프로브 실행 시) →MusicHook install skipped: ffx-probe heartbeat gate failed→ Arena+ 음악이 재생되지 않았습니다. - 음악:
ARENA_PLUS_MUSIC_TRACK_DEFAULT 145 = "Challenge"(boss-battle 트랙 — 모든 Arena+ F7 열: Dark Aeons + 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 → 실행 → 구성된 전투에서 일반 전투 테마 대신 Challenge (145) 가 재생되어야 함. - 미해결 사항으로 기록: ffx-probe 하트비트가 절대 상승하지 않음 (dinput8 66.560, 07-19일자) — GetDeviceState가 호출되지 않는 이유 조사 (프로브를 통해 SOUNDCMD/FORCEBATTLE에 영향을 미침; 음악 기능은 더 이상 이에 의존하지 않음). ### MINOR
v2.209.4.0
v2.209.6.0BETAPATCH
Seymour2026년 8월 2일
Custom Mix music without silence/leak + composed-bin restore (never overwrites canonicals forever)
- Silence/누수 수정 (MusicHook.cpp
MusicPlayWithPreload_Shim): SOUNDCMD의 성능이 저하되었을 때(프로브 하트비트 없음), 심(shim)은 기본 음악을 억제하고 soundcmd에 의존하여 오버라이드 음악을 재생했습니다 → 전투 중 소리가 나지 않음 + 오버라이드 음악이 다음 PlayTrack로 누수됨(“원하는” 음악이 종료 시 재생됨). 이제, soundcmd가 없는 경우: 트랙을 대체하고 기본 음악을 재생합니다 (침묵 없음, 유출 없음); soundcmd가 있는 경우: 실험실 레시피를 유지합니다 (억제 + 레시피). - 일반 맞춤형 Composed-bin 경로의 Mix 복원:
ArmDeferredFileRestore는 781D60 (cross-map) 경로에서만 장착되었음 — 일반 경로(e.g. 구성된 bika02_01)는 bin을 mod-root에 영원히 남겨두어(지역 정식 전투를 덮어씀). 이제 일반 경로도 복원을 장착함(~30초). - 부트 복원 (
ArenaPlus_RestorePendingComposeOnBoot): 이전 세션이 지연 복원(약 30초)이 완료되기 전에 종료된 경우, 부트는.spiraforge.bak에서 캐노니컬을 복원합니다(battle_id의 gameRoot에서compose_last.json를 읽음). — 컴포즈는 절대 영구적으로 유지되지 않습니다. - Build PASS + LabDeploy 로 스트이姆.
- RT2
Needs Testing: 사용자 정의 Mix → 실행 → 적절한 음악이 나오는 전투를 진행(침묵 없음) → 약 30초 후 표준 bin 파일이 복원됨 → 지역 무작위 전투가 정상으로 돌아옴; 30초가 지나기 전에 게임을 종료하면 → 다음 부팅 시 복원됨. ### PATCH
v2.209.5.0
v2.209.7.0BETAPATCH
Seymour2026년 8월 2일
Custom Mix music: soundcmd callback only set when the probe is alive (no soundcmd → shim substitutes the track and plays the vanilla)
- 2.209.6.0 수정만으로는 충분하지 않았던 이유:
g_arenaSoundCmdFnnull이 아니었음(훅이 설치될 때 dllmain이ArenaPlus_MusicHookProbeSoundCmd를 설정함) — 단지 실행 시 오류가 발생했을 뿐(프로브 하트비트 없음) → 심(shim)이 콜백을 감지함 → 랩 경로(suppress + recipe)를 사용함 → soundcmd가 실패함 → 소리가 나지 않고 메모리 누수가 지속됨. - 수정 사항: 이제 dllmain이
probeAlive = FFXHOOKS_SKIP_PROBE_WAIT || WaitForProbeHeartbeat(10000)를 유지하며, 프로브가 활성 상태일 때만 soundcmd 콜백을 설정합니다 (설치 지점 3곳). 프로브 비활성화 → 콜백 null →PlayTrackWithPreload심이 트랙을 대체하고 기본 버전을 재생함 → 챌린지(145)가 구성된 전투에서 재생되며, 침묵도 없고 종료로 이어지는 누수 현상도 없음. - Idle-crash에 대한 결론 (IDA에서 MCP 13337을 통해 조사됨): fmodex AV는 pre-existing —
AsyncTask_InvokeCallbackThunk(0x691480)는 이+4/이+8 = 해방된 힙((*(this+4))(*(this+8)))을 사용하여 0x10CDCDCD를 호출합니다; 썽 포인터는 테이블0xB46FA0(오디오 영역)에 존재합니다. 우리 후크 중None가 이 경로를 건드림 (AsyncTask/0x691480/0xB46FA0) — AV는 F7보다 먼저 발생합니다. 전역 변수 VEH가 이를 포착하여 기록합니다(진단). 이를 수정하려면 오디오 AsyncTask를 해제하는 주체를 찾아야 합니다(별도의 초점). - Build PASS + LabDeploy 로 스트이姆 (20:09). ### MINOR
v2.209.6.0
v2.209.8.0BETAPATCH
Seymour2026년 8월 2일
Boot restore fixed (real manifest at `modules\compose_last.json`) + test composed bin restored + Custom Mix supported scenarios confirmed
- 부트 복원 문제 수정: 실제 매니페스트는
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)이 기본 상태로 복원되었습니다(2024년 9월 6일자.spiraforge.bak, 24,016바이트) — 파일 크기 및 타임스탬프를 통해 확인됨. - Mix를 지원하는 사용자 정의 시나리오 (lab --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). Mushroom Rock은 아님 지원되는 시나리오입니다 (구성 시 cavern으로 대체됩니다 — 그래서 그곳에서 x4가 "열리지 않았습니다"). x3/x4 (3-4명의 액터)는 지원되는 시나리오에서 완벽하게 구성됩니다 (dry-run 검증됨: 4슬롯, chunk2/chunk3 정상).
- Build PASS + LabDeploy 로 스트이姆. ### PATCH
v2.209.7.0