업데이트 2.224
2026. 8. 6.
v2.224.0.0BETAMINOR
Seymour2026년 8월 2일
OPERATION DEMON WAVE 1+2: F8 DASHBOARD RESTORED + F7/F8 KEY ARBITRATION
- F8 대시보드 복원 (소스는 이미 트리 내에 있었으나, 연결이 누락되어 있었음):
StartInGameMenuDashboard()+StartUnXBoosterHook()를InstallHooks에 추가 (게이트[dashboard] enabled, 기본값 에 —kDefaultIni의 Config.cpp에 추가됨);InGameMenuDashboard.cpp/UnXBoosterHook.cpp/Config.cppre-added를 vcxproj에 추가 (Config.cpp는 프로젝트에 한 번도 포함되지 않았음 —dashboard.enabled게이트는 한 번도 읽히지 않았음). - 주요 중재 사항 (2차):
dashboard.enabled의 경우, F8/INSERT은 DASHBOARD(단일 소유자)에 속합니다.InGameMenuProcessKey은 토글 없이 F8/INSERT을 사용합니다(대시보드 비활성화 시 대체 경로). F7 (NativeMenu/F7_LeverApply) UNTOUCHED. - 배포본(REMOVED — 3/3 크래시 확인됨)의 레거시 UnXINC-002:
unx.dll/dxgi.dll/dxgi.ini/dxgi.dll.055508/dinput8 - Copia.dll가 Steam의modules\_unx_legacy_removed_20260802_*(복원 가능한 백업)으로 이동되었습니다. 및_isolated. - ffx_addresses.h에 추가된 정의:
RVA_FFX_DEBUG_FLAGS(0xD2A8F8),RVA_FFX_PERMANENT_SENSOR,RVA_FFX_BATTLE_PARTICIPATION/RVA_FFX_AP_EARN(0x1F10EA0/ UnX의0x1F10EC4). 플레이 가능 Seymour OFF (파티 구조체 주소가 검증되지 않음 — RE 대기 중; 부스터에서 적용 항목이 제거됨). - 대시보드에 Hooks-EN 규칙 적용: "F8 닫기", "켜기/끄기", "열림/닫힘"; 대시보드
Log→DashLog(OutputDebugStringA — dllmain의Log는 정적임). - ffx-hooks.ini 모델은
RuntimeTools/FfxHooksDll/ffx-hooks.ini에서 생성되었습니다([dashboard] enabled=1를 사용하여). - 게이트: 릴리스 build 0 오류; 드아시브오아르드 문자열 에서 브이느아르이 (4/4); 스트이姆 +
_isolated배포 (브아크우프스.bak_20260802_184354). RT2 pending: F8 열림 드아시브오아르드, F7 이느트아크트, 드아시브오아르드 치이트스 작업. ### MINOR
v2.223.1.0
v2.224.0.1BETAPATCH
Seymour2026년 8월 2일
OPERATION DEMON WAVE 3: DIALOG SKIP 프오르트드 스아프에리 (흐우크, 아님 patch)
DialogSkipHook.{h,cpp}(새로운): 안전한 프오르트 의 해당 우느엑스 을그아크이 흐아르드크오드드ret 8patch (RVA 0x30B040 —FFX_FmodVoice_ReadEventData@ 0x70B040, __thiscall 검증된 에서 IDA): MinHook/PolyHook2 위에 대상; 와 함께input.dialog_skip=1반환함 0 이姆姆드이아트에리 (동일한 효과 처럼 해당 르트 8, REVERSIBLE 및 config-gated).- 대시보드: ‘입력’ 탭의 ‘
Dialog Skip (voices)’ 항목 (input.dialog_skip, 기본적으로 비활성화됨). - 전선:
InstallDialogSkipHook(g_base, LogLine), InstallHooks (대시보드 게이트 내부). - 정의:
RVA_FFX_FMODVOICE_READ_EVENT_DATA에 수록된 ‘0x30B040’ (ffx_addresses.h). - 게이트: 릴리스 build 0 오류; 문자열 에서 브이느아르이; 스트이姆 +
_isolated배포 (백업185543). RT2: 와 함께 해당 아이템 ON, 스프오크에느 드이얼오그스 스크이프 (없음 충돌); OFF = 바닐라 동작. ### MINOR
v2.224.0.0
v2.224.0.2BETAREVISION
Seymour2026년 8월 2일
OPERATION DEMON: Wave 4 문서 마무리 + RT2 스크립트
run_f8_rt2.ps1(신규): 부팅 시 연기 효과 및 F8 확인 (대시보드/F7/치트/대화창 건너뛰기) — 에디터가 닫혀 있어야 하며, 임시 저장 파일과 전후 해시 값이 필요합니다.F8_UNX_INCONSISTENCY_REGISTER(세션 3): INC-002/005 + P1/P2/P5/P7 RESOLVED; P3 (일부만 수록됨, v2.flag는 이미 누락됨); never-port 수록됨 (KillMeNow/auto-update/texture inject/sig-scan).- SESSION_HANDOFF + PORT_STATUS: F8
Needs Testing— in-game RT2 pending 우스어 (편집기 닫힘). - 정리:
ingame_menu_v2.flag은 이미 배포 대상에서 제외되어 있습니다(P3에서 정리 완료 확인됨). ### PATCH
v2.224.0.1
v2.224.0.3BETAREVISION
Seymour2026년 8월 2일
OPERATION DEMON: post-F8 plan — ffx-probe (§9)를 통해 Tier 2 지정 + RT2 확인
- F7F8_RECONCILIATION_PLAN §9: UnX가 배포에서 제외됨에 따라, vtable[9] (GetDeviceState)는 ffx-probe.dll 로 복귀합니다 — in-process main-thread 프로브 (FORCEBATTLE/SETINPUT/SOUNDCMD/읽기/WRITE/CALL — Tier 2: a_ability/arms_rate/Encounter Table/IA/Aurora calibration). 현재 상태: OFF 배포 중 (
.RT2OFF); 로더 존재; 대시보드에 이미plugins.ffx_probe항목이 있음. run_f8_rt2.ps1: 프로브가 활성 상태일 때 프로브의 하트비트 확인(hooked=1).- Gate: doc-only (REVISION); 변경 없이 배포하십시오. ### REVISION
v2.224.0.2
v2.224.0.3BETAREVISION
Seymour2026년 8월 2일
PPP DISPATCH TABLE: CYCLE CLOSED (consumer + main table)
- 소비자 PROVEN:
FFX_MagicHost_RelocatePppSection(0x7121D0) —a2 + 40*index(스트라이드 40 = 코드 내 0x28); 호출자는&pppSysProgTbl(0x72a8eapush offset pppSysProgTbl→ 0xC3A500; 0x761b72)를 전달합니다. 각 슬롯의 on-diskhandler_table_index는 테이블 항목 포인터가 되며, 런타임 슬롯 = 16B ([0]=인덱스, [1]/[2]=재위치된 포인터; 개수는*(int16*)(record+0x26)참조) — 이는 pppSclMove T3의 윈도우와 일치합니다. - pppSysProgTbl @0xC3A500 = MAIN 테이블 — "progtbl" 레이아웃 (name@+0x00, fnMain@+0x08, fnExtra@+0x20), 418개 항목 (2026-07-31 MAGIC 문서와 일치); 슬롯 0-11 = pppAccele..pppColor 요니시(Yonishi) 순위 핸들러 적용 시 (pppSclMove T3 = 0x75C090 @ 슬롯 6; pppScale = 0x75D0D0 @ 슬롯 10; pppAngle = 0x75CF20 @ 슬롯 9; pppSclAccele = 0x75B9F0 @ 슬롯 2).
- 이전 검토에서 수정된 내용: 0xC3A500는 아님로, 이름 벡터입니다(0xC3A4E0 블록 = 디버그 문자열 END/CHR/MAP-G/MAT;
FFX_PppNameVectorrename REVERTED). - 2026-07-31 MAGIC에서 전파된 으로 해당 CANONICAL DB의 이름이 변경됨: 0x716D20→FFX_Render_PppProgramProcessor_2, 0x75B830→FFX_PppHandler_Accele, 0x75B900→FFX_PppHandler_Accele_SetFromGlobalQ, 0xC3E798→FFX_PppHostDispatchTable_AltQ, 0xC86080→FFX_PppKeyholeDispatchTable.
- Extractor에 progtbl 레이아웃과 메인 테이블이 추가되었습니다: 5개의 테이블, 1191개의 핸들러 (
scripts/ppp_dispatch_table.json). 문서:docs/reverse/PPP_DISPATCH_TABLE_RECONCILED_2026-08-02.md(2차 검토). - 전체 체인이 포함된C2: on-disk index → pppSysProgTbl + 40*index → 항목 (name+fn). 다음: 16B 디스크→런타임 슬롯 윈도우 (T3) 및 145개의 별칭. ### PATCH
v2.224.0.2
v2.224.0.4BETAPATCH
Seymour2026년 8월 2일
F8 DISABLED (gate `dashboard.enabled=false`) + 통합된 F8+ 조사 문서
- 2곳에서 게이트 전환 (Config.cpp kDefaultIni + dllmain
GetBool×2) — dashboard/booster/DialogSkipHook이 시작되지 않음; InGameMenu이 다시 F8/INSERT의 소유자가 됨 (자연스러운 폴백). 되돌릴 수 있음 (재활성화 = 전환 + 배포). docs/reverse/FFX_F8_PROBE_CONSOLIDADO_2026-08-02.md(신규): F8 (1~3차 + 마감) + ffx-probe (2단계) + 재활성화 방법 + 처리 대기 중인 항목.- 스트이姆 +
_isolated배포 (백업191908); 릴리스 build 0 오류. Focus 다시 F7. ### REVISION
v2.224.0.3
v2.224.0.5BETAPATCH
Seymour2026년 8월 2일
F7: FLICKER FIXED (레버 와이어의 근본 원인) + 원시 스테퍼 수치 없음 + REAL 난이도 레버
- FLICKER (사용자 RT2 — 로그 증거를 통한 근본 원인): 메뉴를 닫은 행(
CloseMenu→m.obj=0)을 확인한 후, 하지만g_forceSubsystem이 에 상태로 유지됨 — 메뉴가 표시되지 않은 채 게임이 메뉴 모드에 멈춤 (0x13407E4=1) = 렌더링이 번갈아 가며 발생 = 화면 깜빡임 (로그:open→ 확인 →close (force-gate off)은 2번째 F7 →open...에서만 발생). 수정 사항: 이제 와이어는 확인 시g_forceSubsystem를 지웁니다(g_nativeWantClose와 동일한 동작). - F7 toggle debounce (250ms) 내 PresentTick — holding F7 (또는 stuck key) toggled 해당 menu 각 edge = flicker.
- "제자리에 없는 숫자": RT_STEPPER 행에는 편집 전의 원본 값
[0]이 표시되었습니다. 수정:g_rowEdited[]— 스테퍼 값은 후 L/R에서만 표시됩니다([에]/[OFF] 토글은 항상 표시된 상태로 유지됨). - REAL 난이도 레벨 (이전에는 스텁이었습니다): 새
F7_SetDifficultyLevel(0..5)(F7InLive) —g_cfg.diffGlobal(hpMul 1000/1150/1300/1500/1750/2000 — x1.00..x2.00) +F7_SaveConfig()— battle-start auto-apply에서 이를 반영합니다. - 게이트: 릴리스 build 0 오류; 스트이姆 +
_isolated배포 (백업193746). RT2 pending: F7 → 확인 → 메뉴 닫힘 WITHOUT 프르이크어; 없음 초기 [0]; 난이도 적용함 에서 전투.
v2.224.1.0
v2.224.1.0BETAPATCH
Seymour2026년 8월 2일
F3.5 PART 2: DRAG GIZMO 내 Aurora (캔버스 위에서 몬스터를 드래그) + RE: T3 window 검증 완료 + 별칭 해독됨
- noclip 모드의 기즈모 (
scenes.ts,?edit=1): 클릭하면 가장 가까운 액터를 선택하고(투영 선택 —clipFromWorldMatrix+ w-divide), 지면 평면에서 드래그하면(액터의 y-plane에서 투영 해제, FFX↔행렬 역행렬을 통한 noclip 변환), 오버레이(노란색 고리 + 지침), 키 S = 저장 (POST/api/edits/<encId>— 허브 엔드포인트 — 슬롯 델타 포함) 및 R = 초기화 (기본 상태로 복귀). Per-slotsetUpMonsters에 저장된 기본 버전 (이전 사이드카가 있었더라도 정확한 델타 값을 유지). - ViewerShell: 편집 패널의 “Gizmo 3D (캔버스에서 드래그)” 확인란 +
&edit=1/0의 “battle-preview”URL + 기즈모 상태를 표시하는 상태 표시기. - RE (3rd pass): 16B T3 window PROVEN 내 해당 pppSclMove handler (0x75C090 =
FieldMap_AccumulateDoubleLayerDelta_C): reads 해당 4 floats 에서a2+16..+28(해당 T3record+0x10..+0x1Fwindow) 및 accumulates 으로a1+160..+172. Aliases decoded: 해당 418 pppSysProgTbl entries = 273 unique names + 145 re-registrations (해당 MAGIC doc's "145 aliases" = repeated handlers, 아님 alternative names); 해당 extractor gainedfind_all_strings(368 strings 내 해당 region) + 해당isAliasfield. - 게이트: 느오크르이프 트이프에치에크 깨끗한;
rsbuildOK; 번들461.7bf8f17f.js배포됨 로 해당 serve-dir (포함함editUpdate+ POST); C# build 0 오류; ViewerHub 테스트 17/17 PASS. - F3.5 COMPLETE: 사이드카(1부) + 기즈모(2부) — 편집 → 보기 → 저장 → 다시 열기의 순환이 완성되었습니다. ### REVISION
v2.224.1.0
v2.224.1.2BETAPATCH
Seymour2026년 8월 2일
F7 RT2 ROUND 2: “NOTHING OPENS” FIXED (와이어가 확인 메시지를 가로채고 있었다) + 포스 배틀 번호 없음 + 치트 라벨 제거 + 서브 메뉴 잠금 해제 음악
- BUG 4 (중요 — 없음 MENU OPENS): 제 PumpHook 전선이
g_ourClosed이전 원래 펌프 —PollMenu확인 화면을 전혀 표시하지 못했습니다 → 하위 메뉴 NEVER가 열렸습니다. 확실한 해결책: 전선이 REMOVED — 원래 펌프 (CloseMenu →DispatchConfirm→NativeMenu_OnEdge→ submenus/reopen/force-off)가 다시 정상적으로 작동합니다. - BUG 3 (숫자를 사용한 강제 전투): 이전에는 ‘RT_STEPPER’ (0..250)이었으나, 이제는 ‘RT_NONE’ (값 없음; ‘FORCE’ 하위 메뉴에서 해당 기능을 수행함 —
F7_MENU_FORCE)로 변경되었습니다. - BUG 2 (Battle Cheats confusing): renamed 으로 "Party Invincible (debug)" — 해당 lever (0xD2A8F8+1) 임 해당 game's party invincible flag.
- BUG 1 (음악이 없는 메뉴): 음악 하위 메뉴(버그 4로 인해 열리지 않았던)가 이제 열립니다. 사용자는 하위 메뉴에서 트랙을 선택합니다(
F7_MENU_MUSIC). - 레버 위치 변경:
F7_LeverApply는 이제NativeMenu_OnEdge에서 호출됩니다(ACT_AI_SWAP/ACT_BATTLE_CHEATS의 경우 — 하위 메뉴 없이 직접 실행; val은g_ourResult에서 가져옴). - 게이트: 릴리스 build 0 오류; 스트이姆 +
_isolated배포 (백업200713). RT2: 아레나+ 열림, 姆우스이크/프오르크에/난이도 스우브姆에느우스 열기, 파티 이느브이느크이블 전환 적용함. ### PATCH
v2.224.1.1
v2.224.1.3BETAPATCH
Seymour2026년 8월 2일
F7 RT2 ROUND 3: MUSIC TRACK 0 = NONE (무음 타이틀 화면 + CRASH 전투 진입)
- 버그 1 (음악이 재생되지 않는 타이틀/인트로 화면):
music_lock: 0내의f7_inlive.json파일(‘Music’ 하위 메뉴에서 저장됨) —F7_MusicApplyLock파일이 부팅 시 트랙 0 오버라이드(무음/컨텍스트 외)를 적용했습니다. - 버그 2 (MixCRASHED 사용자 정의, 전투 진입 시):
music_battle: 0—F7_ApplyMusicBattle(battle-start auto-apply)에서SetArenaBattleMusicPending(0)→ MusicHook를 적용하고 트랙 0을 적용한 후 → 크래시 발생 (로그: FAULT rva 0x4FB05E, compose 직후). - Fix: track 0 becomes none 내 둘 다 setters (
F7_SetMusicLock/F7_SetMusicBattleTrack:<= 0 → -1) +f7_inlive.jsoncleaned (music_lock/music_battle= -1). - 게이트: 릴리스 build 0 오류; 스트이姆 +
_isolated배포 (백업202945). RT2: 제목 화면 姆우스이크 브아크; 사용자 지정 Mix 에느트어스 전투 없이 충돌. ### PATCH
v2.224.1.2
v2.224.1.4BETAPATCH
Seymour2026년 8월 2일
F7 RT2 ROUND 4: PREVIEW 피드백 + Custom Mix 오류 INVESTIGATED (UpdateWindowTitle/DrawUITextElement)
- 버그 2 (미리보기 "아무 동작 안 함"):
F7_MusicPreview가-1잠금 상태(없음 — 현재 설정 상태)에서 없이 PLAYING를 반환(track < 0가드). 수정: val<= 0로 미리보기를 확인하면 on-screen 상태 "Ajuste a faixa (L/R) antes do Preview" 가 표시됨; 유효한 val에서는 재생됨. (흐름: "Music Lock"에서 L/R → 스테퍼에서 확인 = 미리보기 — 이미 존재함.) - 버그 1 (전투 생성 시 크래시 — PERSISTS): FAULT (동일한 RVA
0x4FB05E)이 IDA에서 매핑됨:FFX_System_UpdateWindowTitle(0x4FAE40) →DrawUITextElement(0x640810,void(ctx, text, x, y, slot)— 창 제목에 SAVE 텍스트를 그립니다; 호출 대상FFX_Save_SystemSaveGame) — 크래시는 메뉴 2D 컨텍스트("NoTexture"/ResolveTextureNameForUI)에서 발생합니다. 컴포지션된 바이너리는 OK (24272 B vs 24080 바닐라 — 192 B, 헤더 조정으로 인해 증가). 격리 진행 중 (사용자): (a) 컴포지팅 없이 일반 전투 → 크래시? (b) 1 이온으로 컴포지팅 → 크래시? (c) 런치 전에 메뉴CLOSED로 컴포지팅 → 크래시? - 게이트: 릴리스 build 0 오류; 스트이姆 +
_isolated배포 (백업205601). ### PATCH
v2.224.1.3
v2.224.1.5BETAPATCH
Seymour2026년 8월 2일
F7 RT2 ROUND 5: PREVIEW CRASH FIXED (OFF = MMF 0xCD) + “미리 보기”가 “저장 + 사용자 지정 열기 Mix”로 변경됨
- 미리보기 CRASH (사용자 재현 — "미리보기에서 Enter = 충돌 이제"):
F7_MusicPreview가 프로브를 통해 soundcmd를 호출(ArenaPlus_MusicHookProbeSoundCmd→LabProbeSoundCmd→ MMFFFXProbeBlock_v1) — 프로브는 배포 시 OFF(.RT2OFF) — MMF는 존재하지만 데이터는 0xCD 패턴(해제/초기화되지 않은 메모리) →AV READ accessed=0x10CDCDCD가 ffx-hooks 내부에서 발생. 수정: SEH(__try/__except)를F7_MusicPreview에 추가(soundcmd가 더 이상 게임을 충돌시킬 수 없음 — 재정의만 가능) + 트랙 스테퍼 확인이 이제 SAVES(재생 안 함). - UX (사용자 요청): 음악 하위 메뉴 "미리보기"가 "저장 + 커스텀 Mix 열기" 가 됨 — Enter는 설정을 저장(f7_inlive.json) + Arena+ → 커스텀 Mix에 대한 네이티브 메뉴를 다시 염(작동 표준 흐름). 음악은 설정(잠금/배틀)에 저장된 상태로 유지되며, 프로브 재생 없이 올바른 컨텍스트(배틀 시작)에서 적용됨.
- 게이트: 릴리스 build 0 오류; 스트이姆 +
_isolated배포 (백업214436). RT2: 입력 위에 "저장 + 열기 사용자 지정 Mix" 함 NOT 충돌; 설정 저장됨; 사용자 지정 Mix 열림. ### PATCH
v2.224.1.4
v2.224.1.6BETAPATCH
Seymour2026년 8월 2일
i18n: 원시 리터럴을 {x:Static}으로 이전함 (StringsIntegrityTests 게이트 상태: 녹색)
- F3.5 기즈모 관련 문제 수정: “Gizmo 3D (캔버스에서 드래그)” 확인란과 힌트(“몬스터를 클릭하여 선택하세요... S = 저장 · R = 초기화”)에서 속성에 원시 리터럴(
Content=/Text=)이 사용되었습니다. —NoXamlHasRawHardcodedUiLiteral테스트를 통해 속성 문제를 감지했습니다.{x:Static res:Strings.U_gizmo_3d_drag_on_canvas_1aa7857f}및U_click_monster_to_select_drag_hint_fe907a09으로 마이그레이션되었습니다(중립 EN, PT, Strings.cs 속성). - 다른 레인's 드에브트 (MonsterAi):
MonsterAiPhaseRotationAdvanced_Window.axaml가지고 있었음 2 원시 리터럴 ("프오크오 아트이브오" / "르이姆프아르 프오크오") — 마이그레이션됨 로U_active_focus_d59334a6/U_clear_focus_91699d35(해당 테스트 임 해당 project-wide 아르브이트어). - 게이트:
StringsIntegrityTests3/3 PASS; build 0 오류.
v2.224.1.5
v2.224.1.7BETAPATCH
Seymour2026년 8월 2일
오로라 시각화: 전투 중 등장하는 몬스터 이름 (라벨 + 기즈모)
export const MONSTER_NAMES(monster_studio.ts) (실명 284개 — “Raldo”, “Bunyip”...).- scenes.ts: 편집 모드(
?edit=1)에서 이제 모든 전투 몬스터 위에 레이블(실제 이름은 흰색, 선택된 몬스터는 노란색)이 표시되며, 기즈모 오버레이에는 단순히 "슬롯 e.g" 대신 선택된 몬스터의 이름(Dark Flan. "N (슬롯 6)")이 표시됩니다. - 게이트: 느오크르이프 트이프에치에크 깨끗한;
rsbuildOK; 번들461.0fe1690d.js배포됨 (포함함 "Raldo"/"Bunyip"); patch 버전 관리된 에서docs/patches/noclip/(scenes.ts + monster_studio.ts).
v2.224.1.6
v2.224.1.8BETAPATCH
Seymour2026년 8월 2일
Aurora: 오로라 모듈 중 메인 오로라(전투 미리보기 기능은 폐지됨) 및 i18n AURORA CHAMBER→PT 역할을 담당하는 ‘EN’가 다시 돌아왔습니다
- 카탈로그 “Aurora”로 등록된 Aurora ChamberREACTIVATED:
MenuItem_Aurora및MenuItem_AuroraChamber이 이제AuroraChamber_Control을 열었습니다 (BIANCA 카탈로그 + MapViewer + RealGame 공개 — 진정한 경쟁). 새로운OpenAuroraChamber()헬퍼. 전투 미리보기(noclip)는 레거시 코드가 됩니다(카탈로그에서 "aurora" 항목 비활성화됨; ViewerHub/aurora 설명은 그대로 유지됨). - ModuleCatalogPolicy:
aurora-chamber항목 재활성화 (“Aurora Chamber”);aurora(전투 미리보기)에 🚫 표시; LEGACY (코멘트 추가).case "aurora-chamber"기사 추가. - 오로라 모듈의 i18n PT→EN: 중립(Strings.resx)에 PT 값이 설정되어 있었음(EN 편집기에서 PT으로 표시됨) — EN로 수정됨: 기존 키 12개(AURORA·Battle Maps, Selected place, Visualization, Editing, Session, Open arena 내 Aurora Chamber, Filter 통해 field..., Selected field, Exports map/..., Field Picker, overworld, MapViewer 3D) + 23개의 새로운 키(Chamber 및 Field Explorer 버튼: Re-scan, Mount missing, Remount 모든, Open EditViewer, Open RealGame, Save positions, Add/Remove monster, Export anchors, RealGame 복원, 전투 재로드, Re-export 및 열기, 장면 재마운트, 폴더 내보내기, 카메라 저장, 카메라 매개변수 저장, 스카우트 게시, 마커 업데이트, 필드 게시 및 열기, 시각적 유효성 검사, 필드 열기, Re-export, 브라우저). 중립 모드에서 EN + 위성 모드에서 PT (확인됨: PT에 이미 존재) + Strings.cs 소품.
- 게이트:
StringsIntegrityTests3/3 PASS; build 0 오류.
v2.224.1.7
v2.224.1.9BETAPATCH
Seymour2026년 8월 2일
버그 수정: RealGame (404) 오류 해결 + 오로라 맵이 거꾸로 표시되는 문제 수정
- 버그 1 — RealGame 404:
Aurora3DLauncher.BuildBattleUrl(상공회의소의 “Open RealGame”에서 사용됨)은 구 버전의 python http.server 에서 해당 noclip root (Downloads) — 하지만 해당 noclip index.html 임 내dist/, so/index.htmlreturned 404 ("page 아님 found"). Fix:BuildBattleUrl이제 사용함ViewerHubService.BuildUrl("aurora", ...)(해당 in-process StudioWebServer 와 해당 noclip serve-dir — 해당 correct index.html). RemovedEnsureViewerServer/IsPortListening(legacy python — retired 내 F2). 해당 MODULE (RealGame 와 monsters) 유지함 working — 만 해당 battle-preview PAGE 임 legacy. - 버그 2 — 지도가 거꾸로 표시됨:
applyAssetOrientation의RuntimeTools/FFXMapViewerWeb/app.js에서rotation.x = Math.PI(오로라 챔버 아레나)에 대해 X(btlmap에서 π 회전)을 적용하여 지도가 뒤집혔습니다. glTF 지도는 이미 Y-up 상태입니다. 수정: 모든 지도에 대해rotation.set(0,0,0)(뒤집기 없음)을 적용 — 바닥은 아래쪽, 하늘은 위쪽에 위치하도록 했습니다. - 게이트: build 0 오류;
node --checkOK on app.js; the MapViewer is served directly from the repo (prefix /map/) — the fixed app.js is already served.
v2.224.1.8
v2.224.1.10BETAPATCH
Seymour2026년 8월 2일
버그 수정: 요소 콘텐츠로 {x:Static}을 사용하면 원시 리터럴이 표시되고(편집기를 열 때 충돌이 발생함)
- 버그: i18n으로 I 마이그레이션된 오로라 모듈(챔버 + Field Explorer)의 버튼 25개가
{x:Static res:Strings.X}를 요소 콘텐츠(<Button>{x:Static}</Button>)로 사용했음. Avalonia는 요소 콘텐츠로{x:Static}을 해석하지 않습니다 — 원시 리터럴("{x:Static res:Strings.U_...}")을 표시하고 버튼 사용 시 런타임에 충돌이 발생할 수 있음 ("맵 편집기 열기 시 충돌"의 원인). - 수정: 25개 모두를 속성
Content="{x:Static res:Strings.X}"(올바른 패턴)으로 변환했습니다.{x:Static}는 속성으로만 해석됩니다(Content=,Text=,Header=,Watermark=,ToolTip.Tip=). - 게이트: build 0 오류;
StringsIntegrityTests3/3 PASS;node --checkOK.
v2.224.1.9
v2.224.1.11BETAPATCH
Seymour2026년 8월 3일
F7: 하위 메뉴(단일 창)의 유리 패널 + 작성 기능 CRASH 수정 (force-gate 출시 전)
- 버그 2 (UX — 사용자가 “새 창”을 요청함):
F7Sub_DrawCb(dllmain ~11580)에 큰 유리 패널(DrawMenuGlassPanel(NX(0.047f), NY(0.20f), NW(0.906f), NH(0.62f), F, 1))이 적용되었습니다. 이제 ‘사운드’ 하위 메뉴는 WINDOW (배경 + 제목 + 행 INSIDE) 형태로, compose-pick 스타일로 변경되었습니다. - 버그 1 (사용자 정의 Mix battle-start 충돌 — 근본 원인):
ArenaPlus_LaunchComboBattleFromPump(MsBattleEncountExe)가 force-gate 에 (g_forceSubsystem = 0는 실행 시에만 후)와 함께 실행되었습니다 — 게임이 0x13407E4=1 (메뉴 모드) 상태로 전투에 진입 →UpdateWindowTitle에서 전투 시작 시 충돌 발생 →DrawUITextElement(rva 0x4FB05E — AV WRITE 0xBD). 수정:g_forceSubsystem = 0+ 0x13407E4를 0으로 초기화 DIRECTLY 이전ArenaPlus_LaunchComboBattleFromPump(실행 + LaunchCached — 재실행). - 게이트: 릴리스 build 0 오류; 스트이姆 +
_isolated배포 (백업095551). RT2 pending: 사용자 지정 Mix → Build + 시작 → 전투 에느트어스 WITHOUT 충돌; 스아우느드 스우브姆에느우 = 단일 창. ### INFRA (CI) ci.yml르아느 해당 CI 위에 어떤 프우시 로main및codexclaudiocodeffxeditor(해당 작동 중 분기 곳에서 레인 크오姆姆이트 크오느스트아느트리) — 2 즈오브스 위에 창 르우느느어스 ($0.010/姆이느) 에엑스흐아우스트드 해당 자유 3,000 姆이느/姆오느스 쿠오트아 (동작 $22.70).- 수정 사항: 이제 push 트리거는
main(branches: [main])로만 제한됩니다. CI은 여전히main(및main으로 제출된 PR)을 검증합니다. 작업 브랜치에는 자동으로 CI이 생성되지 않습니다 (dotnet build).을 사용하여 로컬에서 검증하십시오). - 예상 절감액: Actions 실행 횟수의 약 90% (반복되는 분당 요금을 절감합니다). ### PATCH
v2.224.1.10
v2.224.1.12BETAPATCH
Seymour2026년 8월 3일
LOG: auto-rotation (오픈 수 기준, 최대 10개, `.old1..old9` 기록)
OpenLog(dllmain ~173)에서 이제 파일 열기 횟수(%TEMP%\ffx-hooks.log.cnt)를 집계합니다. 10번 열릴 때마다 현재 로그를ffx-hooks.log.oldN로 이동시키고(.old1..old9의 기록을 누적하며,.old1는 9회 순환 후 덮어씁니다), 카운터를 재설정합니다. 메인 로그는 더 이상 약 10회분의 세션 기록을 넘어서 누적되지 않으며, 사용자는 필요에 따라.old*를 직접 삭제해야 합니다.- 게이트: 릴리스 build 0 오류; 스트이姆 +
_isolated배포 (백업102648). ### PATCH
v2.224.1.11
v2.224.1.13BETAPATCH
Seymour2026년 8월 2일
RealGame 수정 (전투 대 필드) + EditViewer 항상 열림 + DEBUG LOG 일반 규칙 (1~4단계) + full-editor 분석 지도 (5단계)
- RealGame 수정 (전투 복귀):
BuildBattleUrl가 extraQuery 와?을ViewerHubService.BuildUrl에 전달했는데 (이미?을 추가함) → URL이index.html??battle=...이 됨 → noclipURLSearchParams이battle을 읽지 못함 → 필드(맵)만 있고 전투는 없음. 이제 extraQuery이?없이 →?battle=<encId>&map=&actors=1→ 몬스터와의 전투가 복귀합니다. - EditViewer가 더 이상 "아무 작업도 수행하지 않는" 일이 없습니다:
RenderScene의 대체 기능은 이제 없이 내보내기가 실패할 때, glTF 앵커가 있더라도 빈 장면(그리드 + 오버레이)을 열게 됩니다(이전에는 앵커가 필수였으며, 앵커가 없으면 렌더링 과정에서 오류가 발생하고 버튼이 아무 반응도 보이지 않았습니다). 로그에는 내보내기 실패 사유가 기록됩니다. - DEBUG LOG — GENERAL RULE (
FFXProjectEditor/Diagnostics/DebugLog.cs):Info/Warn/Error를 지원하는 핵심[Conditional("DEBUG")]헬퍼(릴리스 버전에서 제거됨 — 오버헤드 없음). 출력: 디버거 +%LOCALAPPDATA%\FFXProjectEditor\debug.log+work/editor-debug.log. 계측 대상: RealGame (생성된 URL), EditViewer (렌더링), SelectSceneByMapKey (bika00_10), ExportSceneGeometry (오류), ViewerHub (BuildUrl/EnsureServer). - 영구 규칙:
AGENTS.md및CLAUDE.md에 추가됨 — 모든 신규 모듈해야 함에 디버그 응답이 포함되어야 함. 문서:docs/ai/DEBUG_LOGGING_RULES.md(규칙) +docs/ai/DEBUG_LOGGING_MAP_2026-08-02.md(5단계 — full-editor 분석: 약 51개 모듈 + 인프라 + 경계; 도메인별 디버그 필드 테이블의 위치 및 종류; 구현 우선순위; UI 대 로그). - i18n 게이트: 5 원시 리터럴 에서
MagicDllEditor_Control.axaml(아르르아우스 + 브아크/프오르우아르드 트우르트이프스 — 다른 레인's 드에브트) 마이그레이션됨 로{x:Static}(해당 테스트 임 해당 project-wide 아르브이트어). - 게이트: 드에브우그 + 릴리스 build 0 오류; 테스트 20/20 PASS (StringsIntegrityTests 3/3 + ViewerHub 17/17).
- 이 후크는 파이프를 통해 랩의 표준 출력(stdout)을 캡처합니다 (CreatePipe + STARTF_USESTDHANDLES — 컴포즈 작업이 출력을 읽어들이고 PREV| 줄을 추출함) 그리고 메뉴에 도트 패널을 표시합니다 (왼쪽 유리 패널 — 전투에 투입될 레이아웃).
- 새로운 "Build 미리보기 (레이아웃 브오르이느흐아스)" 버튼 에서 사용자 지정 Mix: 크오姆프오스에스 WITHOUT 시작 (메뉴 유지됨 열기 — 상태 "미리보기 프르오느트오 — 레이아웃 아크이姆아. 프이그흐트 마지막 Mix p/ 에느트르아르.") → 해당 우스어 스이스 해당 드오트스 BEFORE 에느트어잉 → "프이그흐트 마지막 Mix" (기존) 르아우느치에스 해당 already-composed 브이느.
- 흐름: 선택 에온 + 스크에느아르이오 → Build 미리보기 → 스이 해당 맵 (P 오른쪽 / 몬스터 왼쪽 / 크아姆 h) → 프이그흐트 마지막 Mix → 전투.
- 르아브 build 0 오류 + ffx-hooks (와 함께 PolyHook) 1,113,600 B; LabDeploy 로 스트이姆 (실제 르아브 + 흐우크스).
- RT2
Needs Testing: 사용자 지정 Mix → 4 에온 → Build 미리보기 → 검사 해당 맵 위에 해당 왼쪽 패널 → 프이그흐트 마지막 Mix → 전투 와 함께 해당 시아우느 레이아웃. ## [미공개] ### MINOR
v2.224.1.12
v2.224.1.14BETAPATCH
Seymour2026년 8월 2일
DEBUG LOG v2: 3+1 per-area 플래그 + 전역 auto/dev/prod + UI 이벤트 트레이서 + WebView 콘솔 브리지 + 전역 예외 + “디버그 로그 열기” 메뉴 항목
- DebugLog v2 (
FFXProjectEditor/Diagnostics/DebugLog.cs): GLOBAL 플래그 (auto=드에브우그→드에브/릴리스→프르오드;FFX_DEBUG_MODE=dev|prod프오르크에스) + per-area 플래그 (debug_flags.json:0=OFF,1=ACTIVE르오그스 동안 해당 영역 임 되는 처리됨,2=ALWAYS르오그스 위에 어떤 오류,3=FORCEDEBUG르오그스 EVEN 에서 릴리스). LOGS ALWAYS IN ENGLISH (외부 i18n). 5MB 회전 +.old1..old9(정렬된 와 함께 해당 C++ 흐우크 레인). - UI Event Tracer:
Main_Window는 모든의 버튼 클릭(AddHandler Button.ClickEvent)을 가로채어 활성 모듈(UiTracer)을 통해 자동으로 기록합니다. 따라서 per-click를 통한 별도의 로깅 작업이 필요하지 않습니다. - ActiveScope:
SetModule는 열려 있는 모듈 영역을 활성화하거나 비활성화합니다(플래그 1은 해당 영역을 사용합니다). - WebView 콘솔 브리지:
WebView2Host는 호스팅된console.error/warn/log의 JS(noclip/MapViewer)을WebMessageReceived→DebugLog(WebView.Console)로 리디렉션하는 스크립트를 삽입합니다. — 이제 JS의 버그가 로그에 기록됩니다. - 전역 예외:
AppDomain.CurrentDomain.UnhandledException+TaskScheduler.UnobservedTaskException→DebugLog.Error("Global", ...). - 메뉴: 언어 선택기 플라이아웃의 “디버그 로그 열기” 항목(debug.log를 엽니다).
- Test:
DebugLogTests(3/3 — EN 쓰기, 타임스탬프+영역+유형 형식, 유형이 포함된 예외). - 문서:
DEBUG_LOGGING_RULES.md업데이트됨 (플래그 모델 + EN + 트레이서 + 필수 최소 설명서). - 게이트: 드에브우그 + 릴리스 build 0 오류; 테스트 23/23 PASS (i18n 3/3 + ViewerHub 17/17 + DebugLog 3/3).
v2.224.1.13
v2.224.1.15BETAPATCH
Seymour2026년 8월 3일
사용자 정의 Mix 전투 중 크래시: compose-pick 드로우 비활성화 DURING 컴포즈
- 원인 (IDA에서 확인됨): FAULT (AV WRITE
accessed=0xBD)가DrawUITextElement(0x640810, pc 0x6409A5) 내부로 진입합니다. 이때ctx(FFX_Menu2D_ResolveCaptureCtxCore경로를 통해)가 null이거나 손상되어 있으며,UpdateWindowTitle(0x4FAE40)가 저장 텍스트를 그리는 도중 충돌이 발생합니다. 이 충돌은 DURING compose (ArenaMultiBossLab 실행기)에서, 메뉴(compose pick)가 열려 있는 상태에서 발생합니다. - 수정:
ComposePick_Draw(compose-pick DrawCb)는 이제 early 때g_jobState == JOB_RUNNING— 일 때 조기 반환합니다 — 당사메뉴가 아님를 통해 게임의 2D 메뉴에 텍스트를 컴포즈 중에 추가합니다 (EncodeLabel/DrawString가 텍스트 풀/캐시를 손상시킴: cache-hit → poolcursor-1에 경계 검사 없음 → 잘못된 핸들). 메뉴가 12초 동안 멈추고(컴포즈는 빠름) 이후 정상으로 돌아옵니다. - FIRST WHY COMMENT — 이 수정 사항은 이미 why-comment (영어)에 포함된 코드에서 제공되고 있습니다.
- 게이트: 릴리스 build 0 오류; 스트이姆 +
_isolated배포 (백업140132). RT2 pending: 사용자 지정 Mix → Build + 시작 → 해당 조합 충돌 해야 함 되다 그오느에. ### PATCH
v2.224.1.14
v2.224.1.16BETAREVISION
Seymour2026년 8월 3일
후크용 WHY-COMMENT RULE 및 1차 WHY 통과
- 새로운 규칙 (CLAUDE.md): 훅을 수정할 경우 → 코드에 WHY를 남겨두기 (영문) —
// WHY: ...(이유 설명, 구체적인 내용은 아님),// FIX <date>: ...(배경 설명 포함),// KEY <date>: ...(RE에 대한 통찰). Focus non-obvious 관련 내용 (게이트, 오프셋, 크리티컬 순서, 풀/컨텍스트 충돌, 아키텍처 결정) — 스팸 없음, 기초 교재 없음. - 첫 번째 WHY 패스: dllmain (native-menu 확인 흐름 — 와이어가 제거된 이유; 컴포즈 실행 — force-gate (MsBattleEncountExe 이전)) + ArenaPlusComposePick (컴포즈 중 ComposePick_Draw 비활성화 — 2D 풀 충돌).
- 게이트: 릴리스 build 0 오류 (크오姆먼트스 하지 않음 변경 동작); 없음 배포 (REVISION — 문서/code-comment). ### PATCH
v2.224.1.15
v2.224.1.18BETAPATCH
Lulu2026년 8월 3일
Magic DLL 편집자: `pppVertexApAt` 스키마 분해 (실수형 필드 4개) + `pppMatrixLoc` 정리 (host-only) + DebugLog (`Magic.Parse`/`Magic.Writer`)
- 분해 (IDA 디컴파일 0x7583D0):
pppVertexApAt에는 이제 4개의 편집 가능한 필드가 있습니다 (model_indexu16@+4,vertex_countu8@+6,delay_framesu8@+7,order_modeu8@+8; 창{4,5},editable=true).field_map.json+MagicFieldMapEmbeddedData.cs에 적용되었습니다. - 정확한 수정:
pppMatrixLoc(0x734200 디컴파일)은 호스트 상태에서만 작동합니다(a2/record 읽기 0회) — 3개의param_s32_64/68/72필드는 임의로 지정한 오프셋이었으므로 → 제거되었으며,payload_consumer=false,SEM_PAYLOAD(정확함). - 적용되지 않음 (RE 분석 결과):
pppKeThRes32/48—a2+12는 숫자형 조절기가 아닌 리소스 포인터(체인 빌더)입니다. 이를 u32로 편집하면 포인터가 손상될 수 있습니다. 문서에 명시되어 있습니다. - DebugLog v2:
TryLoad(Magic.Parse) +TryGrowRecord(Magic.Writer)에DebugLog.Info/Warn/Error(영어, 단일 언어)를 적용한 버전. - 게이트: 릴리스 build 0 오류; MagicDll 테스트 76/76 + StringsIntegrity 3/3 (79/79).
- 충돌 현상 (없이의 '작성' 모드에서 재현됨): F7을 열고 (미리보기/전투 후) 메뉴를 탐색 → FAULT AV WRITE
pc=0x2409A5accessed=0xBD(동일한를 '작성' 모드로 사용) —UpdateWindowTitle(0x4FAE40)에서DrawUITextElement에서 충돌이 발생하며, 이 때 메뉴로 인해 2D 메뉴 풀/컨텍스트가 손상됩니다(매 프레임마다 MANY 텍스트를 그리는 중: cache-hit → pool[cursor-1]에 경계 검사 없음). - 수정 (최종):
FFX_System_UpdateWindowTitle(0x4FAE40)에 훅 적용 — 자체 메뉴가 활성화된 상태(F7/submenu/compose pick)에서 훅이 0을 반환함 — 게임이 아님 제목 텍스트를 렌더링하고(외관상의 문제) 손상된 풀을 건드리지 않음 → 충돌 발생 없음. 메뉴가 닫히면 타이틀이 다시 업데이트됩니다. - 게이트: 릴리스 build 0 오류; 스트이姆 +
_isolated배포 (백업144123). RT2: F7 열기 + 르이브잉 전투 → 없음 충돌. ### REVISION
v2.224.1.17
v2.224.1.19BETAPATCH
Seymour2026년 8월 3일
LIVE POSITION 편집 (1부): 훅 내의 “dot-map” 창 (몬스터 + 플레이어)
- 창: 작성 화면(사용자 정의 Mix)에서 ‘미리보기 생성(Build Preview)’을 완료한 후, E를 누르면 그리드 편집 모드(16×8 도트 맵 — 각 bicho는
P, 활성 상태인 것은X)로 들어갑니다. - 조작법: 화살표 키로 커서를 이동합니다(현재 선택된 비초의
P); TAB를 누르면 비초를 변경합니다; ENTER를 누르면modules\arena_positions.json(각 비초의 그리드 gx/gy)를 저장합니다; Cancel를 누르면 되돌립니다. SavePositions/ResolvePositionsPath: 모듈 형식의 JSON (16×8 그리드 — 컴포즈 러너가 나중에 이를 읽어들이고, C#BattleArenaPositionWriter를 빈에 적용합니다 — next-part 링크).- WHY (코드 내): 게임은 빈(bin)의 chunk3 앵커(
pos = bin + chunk3 + 16×a5)에서 비초(bicho)의 위치를 읽어옵니다. 편집된 그리드를 저장하면 컴포즈(compose)에서 사용자 정의 배치 설정을 적용할 수 있습니다. - 게이트: 릴리스 build 0 오류; 스트이姆 +
_isolated배포 (백업153130). RT2: E 에서 조합 선택 (와 함께 미리보기) → 해당 점 창 열림; 이동 + ENTER 스아브에스 해당 JSON. ### PATCH
v2.224.1.18
v2.224.1.20BETAPATCH
Lulu2026년 8월 3일
Magic DLL 편집자: 분할된 폴더/필드의 FORA로 이동된 브레드크럼(뒤로/앞으로) — 이제 리프(항목/필드)에 도달했을 때도 표시됩니다
- 이전: 뒤로 가기 버튼은 폴더 보기(
IsContainer)에서만 표시되었으며, 필드나 리프에 도달하면 사라져서 뒤로 돌아갈 수 없었습니다. - 현재: 항목(폴더OU최하위 항목)이 선택되어 있으면 항상 브레드크럼(⬅ 뒤로 · ➡ 앞으로 · 경로)이 표시되어, 어떤 항목에서든 뒤로/앞으로 이동할 수 있습니다.
- 게이트: 릴리스 build 0 오류; StringsIntegrityTests 3/3.
- A 창: 에서 해당 조합 선택 (해당 사용자 지정 Mix), 와 함께 Build 미리보기 드오느에, 프르스스 E → 에느트어스 그리드 편집 모드 (해당 16×8 지점 맵 — 각 에느트이티 = 하나
P, 해당 활성 하나 =X). - 상호작용: 화살표 키를 누르면 커서(활성 엔티티의 좌표:
P)가 이동합니다. TAB를 누르면 엔티티가 토글됩니다. ENTER를 누르면 각 엔티티의 격자 좌표(modules\arena_positions.json, gx/gy)가 저장됩니다. Cancel를 누르면 이전 화면으로 돌아갑니다. SavePositions/ResolvePositionsPath: 모듈 내 JSON (16×8 그리드 — 컴포즈 러너가 이후에 읽어서 빈 내BattleArenaPositionWriterC#를 적용합니다 — 다음 부분의 연결).- WHY (코드 내): 게임은 빈(
pos = bin + chunk3 + 16×a5)의 chunk3 앵커에서 엔티티 위치를 읽어옵니다. 편집된 그리드를 저장하면 컴포즈가 사용자 정의 위치를 적용할 수 있습니다. - 게이트: 릴리스 build 0 오류; 배포 스트이姆 +
_isolated(백업153130). RT2: E 에서 해당 조합 선택 (와 함께 미리보기) → 해당 지점 창 열림; 이동 + ENTER 스아브에스 해당 JSON. ### PATCH
v2.224.1.19
v2.224.1.21BETAPATCH
Seymour2026년 8월 3일
실시간 위치 편집 LINK: 컴포즈 러너가 빈에 사용자 정의 그리드를 적용합니다
BattleComposeRunner(실시간 위치 지정 2부): 새로운ReadCustomPositionsJson(modRoot)(후크에 저장된arena_positions.json를 읽음) +ApplyCustomPositions(...)(16×8 그리드를 실제 X/Z로 변환 — X ±28, Z 30→46 — 그리고BattleArenaPositionWriter.WritePositions를 통해 적용하며, Y/W는 유지함).- 작성 시:
arena_positions.json파일이 존재하면, 실행기는 카메라actorCount대신 사용자 정의 그리드(첫 번째 MonsterLive = PartyFront의 몬스터; 나머지 = auto-layout의 파티)를 사용합니다. 로그:[custom-positions] grid do hook aplicado em .... - 전체 흐름 (부분 1 + 2): 조합 선택 → Build 미리보기 → E → 이동 해당
Ps (아르르아우스/TAB) → ENTER 스아브에스 해당 JSON → 시작 → 조합 적용함 해당 사용자 지정 그리드 로 해당 브이느 → 해당 전투 시작함 와 함께 해당 편집됨 배치. - 게이트: 르아브 (C#) build 0 오류; 배포됨
ArenaMultiBossLab.dll로 해당 그아姆에 (백업180311). RT2: 편집 해당 프오스이션 에서 해당 흐우크 → 시작 → 해당 전투 와 함께 해당 사용자 지정 배치. ### PATCH
v2.224.1.20
v2.224.1.26BETAPATCH
Lulu2026년 8월 3일
매직 DLL 편집자: 1단계 (복제) + 2단계 (노클립 매직 재정의) + 3단계 (내장된 잠금 3D 미리보기)
- 1단계 — 복제 버튼: 새로운
CloneMagicCommand+TryCloneMagic(편집된 작업 바이트를 새로운magic_<id>.dll로 복사; .bak 백업; ID 검증). 도구 모음의 “복제” 버튼. - 2단계 —
MagicOverrideService: noclip 내의data/FinalFantasyX/11/<id>.bin를 사용자 정의 DLL로 덮어씁니다(기본 버전.magic3d.bak백업; 복원). noclip은 이미BIN.parseMagicFile를 통해 매직을 렌더링하므로, 별도의 RE 처리는 필요하지 않습니다. - 3단계 — 내장형 3D 미리보기: “미리보기” 버튼을 누르면 편집기 내에서 내장형 WebView2Host(미니 브라우저)가 열리며, 편집 중인 매직에 고정됩니다(
11/<id>.bin+ magic-studio URL 설정 무시). 닫기 버튼(✕). - 게이트: 릴리스 build 0 오류; MagicDll 76/76 + StringsIntegrity 3/3.
- A 단계 — 실제 유형의 인간화: 이제
DetailText필드에는 만와 같이 인간이 이해하기 쉬운 설명([u16], offset, width는 제외)이 표시됩니다. — 이전에 보셨던 원시 유형은 사라졌습니다. Read-only 또한 폴더 보기(non-editable)에서도 pppDrawMatrix와 같은 슬롯에 “Read-only” + 사유가 표시되는 것을 확인하실 수 있습니다. - B 단계 — IDA 대량 조사 (23개 핸들러 디컴파일): 3개SEM_PAYLOAD를 실제 필드(FECHADO (110개 DLL, 2
pppKeLnsLpSft개 플로트), lens-shift (10개 DLL, 콜백),pppDrawHook(모드))를 사용하여pppKeAcmCic로 재분류했습니다. 나머지(KeShpTail*, KeDMat*, Matrix*, DrawMatrixWood)는 host-only/stubs(분해 없음)임이 확인되었으며, 이는 문서화되어 있습니다. - C 단계 — 확장된 카탈로그: 새로운 ‘FECHADO’ 및 ‘host-only’SEM_PAYLOAD을 다루는 19개의 인간 설명(총 약 94개의 오프코드)이 추가되었습니다.
- 게이트: 릴리스 build 0 오류; MagicDll 76/76 + StringsIntegrity 3/3 (79/79).
- 필드 보기 재설계: 이제 필드는 카드 형식으로 이름 + 설명 + 가독성 있는 유형(e.g. "decimal (float)") + 편집 가능한 값을 표시합니다. 오프셋 및 원시 유형(
u16)은 숨겨짐 — 플레이어는 이를 직접 조작할 수 없습니다. - read-only 지우기: non-editable 필드에는 강조 표시된 “Read-only” 알림과 그 이유(e.g. “원시 데이터 — 편집기가 아직 이를 분석할 수 없음”)가 표시됩니다.
- 인간용 설명 카탈로그 (
MagicPppDescriptionCatalog.cs): 약 60개의 ppp 오프코드와 각 오프코드의 기능을 플레이어 용어로 설명한 내용 (IDA의 디컴파일 결과 및 RE 문서를 기반으로 함). 슬롯의 DetailText에 표시되어 있습니다. - Grow-size 툴팁: 4B/8B/12B/16B가 추가 바이트 수(1/2/3/4)를 의미한다고 설명합니다.
- 게이트: 릴리스 build 0 오류; StringsIntegrity 3/3 + MagicDll 76/76 (79/79).
v2.224.1.25
v2.224.1.28BETAREVISION
Lulu2026년 8월 4일
매직 DLL: 4단계 ? 3D 미리보기의 심층 분석 RE (소스 코드에 noclip 레이아웃 매핑됨)
- 새 문서:
docs/reverse/magic_dlls/NOCLIP_PREVIEW_LAYOUT_MAPPING_2026-08-03.md?는parseMagicFile의sniffMagic?parseParticleData? noclip.website 경로를 매핑합니다(실제 출처). - 결론: 필드 수정이 창 내부로 제한됨 = SAFE (미리보기용, noclip re-reads 동일한 오프셋; 고정 스트라이드 0x28/0x10 변경 없음); 레코드 중간에서 구조적 확장(noclip 스트라이드 초과) = BREAKS (미리보기용); 안전한 확장 = count-driven (꼬리 부분 목록 확장 + 카운트 증가).
- 복제 관련 주의사항: noclip은 해당 테이블(
magicTable)에 존재하는 ID만 렌더링합니다; ID outside 테이블에 포함되지 않나요?sniffMagicnull인가요? 빈 이미터(noclip의 제한 사항이며, 오버라이드 때문이 아님). - 문서/RE (REVISION)만 해당? 없음 동작 변경. — CUSTOMMIX MUSIC SOLVED: 전투 중 트랙 145 “Challenge” 재생.** Lane Jarvis-HOOK. [이전:
v2.224.1.26] - 성과: 4번의 실패한 경로 후: 후 4 failed routes (
SetArenaBattleMusicPending→ Arena+인터셉터만;PrepBattleTrack→ 엔진 계층, FMOD 아님;PlayTrackWithPreload→ setevent_index설정했지만tracks_array[].event_ptr),SwitchCrossfade(self, 145, 0, 1)가 이를 해결함 — IDA MCP에 대한ffxoficial.exe.i64(를 통해 (FFX.exe pid=49476). - 핵심 발견 (RE, 커밋
d4fdbc6c): FFX 오디오 트리에는 3개 계층이 있음 —PlayTrackByIndex(0x7097E0)는) silently skips 만약tracks_array[track].event_ptr == 0;PlayTrackWithPreload(0x886980)는 엔진event_index에서 sub-struct만 설정함;SwitchCrossfade(0x7089F0, 경로 B)는 만event_ptr테이블ReadEventByRuntimeId→MapRuntimeIdToFevIndex(를 통해0xB4F1C8) →EventSystem->GetEvent. - 145이 플레이해야 함을 증명하는 확인 사항:
dword_B4F1C8[145] = 0x48(FEV 인덱스 72, 유효 조건: ≤181);unk_CEC164 = 0(로드 게이트가 차단하지 않음);IsValidTrackIndex(145) = true(145 ≤ 0xB5). - Fix 내
MusicHook_Shim: 의 수정: 오버라이드 시SwitchCrossfade(overrideTrack, 0, 1)(대신PlayTrackWithPreload; 호출 (페이드=0, loadflag=1); 트램펄린g_trampolineSwitch(선호 (shim 건너뜀, 재귀 방지). - 사용자 확인 RT2: "이제 TRACK 145 작동! I'M 내 BATTLE 와 해당 새 MUSIC!" — Challenge가 CustomMix에서 재생됨.
- 게이트: 릴리스 build 0 오류; 배포 스트이姆 +
_isolated; 크오姆姆이트d4fdbc6c프우시드.
v2.224.1.27
v2.224.1.30BETAPATCH
Seymour2026년 8월 5일
CustomMix Gil: 전투 비용 NEVER 과다 청구됨 (레이스 컨디션 버그) + compose가 기본 빈을 절대 덮어쓰지 않음
- CustomMix Gil:
ArenaPlusComposePick_Close()잔액이 0으로 표시됨g_pendingLaunchGilCost이전LaunchComboBattleFromPump에서는 읽을 수 있음 — Gil는 메뉴에서 유효한 것으로 확인되었으나 결제가 이루어지지 않음 (컴포즈 기능이 구현된 이후 x3/x4/x5). 합계는 정확했습니다(e.g, Trio 기준 325000G). 그러나 로그에는gilCost=0라고 기록되었습니다. 수정 사항:Close()에서Open()으로 0을 이동시켰습니다(session-open는 닫을 때가 아니라 재설정 시에 적용됨). - Compose가 기본 빈(d5e56701)을 덮어썼습니다: 5개의 cross-map 시나리오(macalania_forest 3개, remiem 3/4/5개, bikanel 4개)가 전용 캐리어(
mcfr00_00,kino00_00,bika02_01) 대신 템플릿 빈(mcyt00_22,nagi05_23,nagi05_22)에 배포됨 — 엔진이 조합된 팀 대신 무작위 조우를 불러왔습니다. C#:ResolveOutputBattleId는carrier.BattleId를 반환합니다. C++: 후크 핀은route.battleId(캐리어)를 만남 이름으로 사용합니다. 기본 빈은 그대로 유지됩니다. - 배포: DLL 재빌드 및 Steam 배포 후 훅 적용. 게이트:
arena_plus_charge_gil.flag(활성화됨). - 3단계 ? 임베디드 ID RE: magic_0140과 magic_0141을 비교한 결과(크기는 동일, 22개 차이점), ID 함 아님가 .data 내 u32 LE로 존재하는 것을 확인했습니다. 3UTF-16LE 문자열("magic_0140" / "magic_0140.dll")만이 오프셋 0x07E3C6, 0x07E4B2, 0x07E4F2에 존재합니다..
- 3단계 ?
MagicDllNameRewriter: 3개의 문자열을 새로운 ID인 내,TryCloneMagic로 재작성합니다(4자리 zero-padded = 길이가 동일하므로 오프셋 이동 없음). 실제 DLL를 기준으로 검증한 결과, 3곳이 재작성되었으며 크기 차이(delta)는 0입니다(RT0, byte-faithful는 문자열 외부에 위치). - 4단계 ?
MagicCommandAssociation: command.bin 를 설정하여Anim1Id = newId행을 복제본에 연결합니다(확인된 체인: command.Anim1Id ? magic_%04d.dll). 편집를 통해Ability_Command.WriteList필드(grow 아님)를 처리합니다(텍스트 풀 유지). 명백한 한계: 원래 스킬의 시각 효과를 대체합니다. 원본을 보존하는 '새' 스킬을 구현하려면 'grow'가 필요합니다(참고:CommandGrowWriter.AppendElementWards). - 배포: LAB build 에서
FFX\Mods\FFXProjectEditor-v2.224.1.29\. offline_ci: 8 프아이르스 (모든 PhaseManager/전투 pre-existing ? NONE 에서 마법/PPP).
v2.224.1.29
v2.224.1.31BETAPATCH
Seymour2026년 8월 6일
F7 마라톤: 버그 6개 + CustomMix 울트라 + 컨트롤러
- 버그 6개 수정: F7 종료 시 검은 화면 현상 (모든 종료 경로에서 0x13407E4 값을 지움), 각 전투 시 챌린지 음악이 새어 나오는 현상 (F7_ApplyMusicBattle default=145 제거), double-input FSM 대 메뉴 (ClaimModal 하위 메뉴에서 ReleaseModal/F7), 확인/취소 버튼이 입력 스팸으로 고정되는 현상 (취소 시에도 쿨타임 적용), Nightmare의 올바른 요소 미반영 (현재 HP 3배, 스탯 ~2배, Haste+Regen+Protect+Shell, 약점/저항/Absorb 없음), 포획된 다크 에온/콤보 강제 전투 (F7_SetSkipForceCapture 필터).
- CustomMix Ultra Phase 1+2: Compose 엔진 C# (RunUltra — 몬스터 1~8마리, auto-layout, 배치) + F7 메뉴 통합 (Arena+ → CustomMix Ultra → Build+Launch). 캐리어 zzzz00_240, 토큰 0x00F000F0. 디버그 로그 13개.
- ComposePick의 컨트롤러: L2= 그리드 편집, R2= 카메라, R1= 다음, L1= 이전 (PadDir의 가장자리 감지 및 키보드 대체 기능 사용). PS+ Xbox 듀얼 레이블 (L2-LT, R2-RT, L1-LB, R1-RB).
- 배포: DLL + Lab C# 스팀에 배포됨. 향후 계획: 몬스터 AI 스왑, 울트라 3~4단계.
v2.224.1.30