업데이트 2.219
2026. 8. 2.
v2.219.0.0BETAMINOR
Seymour2026년 8월 2일
i18n: 7개 언어의 번역 완료 (ES/FR/DE/그것 적용 완료 + JA/KO/ZH 스테이징 단계)
- Lane IFRT-2
- 2,197개 용어 번역: 공식 FFX 용어집을 사용하여 7개 언어로 번역 (34개 용어: Overdrive→ Turbo/Ekstase, Scan→Libra/Analyse 등) + 일반적인 UI 용어 (40개 용어: Save/Load/Open/Close/Apply 등) + 자연스러운 번역.
- ES/FR/DE/그것를 위성 resx 파일에 적용 (Strings.{es,fr,de,it}.resx): 각 언어별로 2,197개의 키가 업데이트되었습니다. 이제 편집기에는 5개 언어(UI/EN/ES/FR/DE)의 완전한 그것이 포함됩니다.
- 스테이징 환경의JA/KO/ZH (
work/_i18n_staging_{ja,ko,zh}.json): 일본어/한국어/중국어에 대해 FFX의 공식 용어를 사용하여 2,197개의 번역이 생성되었으며, resx 파일에아님가 적용됨 (font-bank는 보류 중, 아님 applied 으로 resx (font-bank pending —SlotGlyphMeta테이블은 런타임 시에만 존재하므로, 현재 적용하면 잘못된 문자가 표시될 수 있음). 이는 AI에서 문제가 해결되면 적용해야 하는 RT2 의무 가 됩니다docs/ai/SESSION_HANDOFF.md). - 번역 파이프라인:
work/_i18n_gen_all_translations.py(라틴어 번역을 일괄 생성) +work/_i18n_apply_translations.py(resx 파일에 적용) +work/_i18n_gen_asian_staging.py(JSON 스테이징 환경에서 아시아 언어 번역 생성). - 게이트: build 0 오류; 스위트 379/379 PASS. 완전한 브어션잉 에서 6 문서 (크스프르오즈 + CHANGELOG + changelogUS + VERSIONING + PORT_STATUS + SESSION_HANDOFF).
v2.218.5.0
v2.219.0.0BETAMINOR
Lulu2026년 8월 2일
Magic DLL 편집자: UNIVERSAL opcode resolver (DLL 자체 .rdata의 pppProgTbl_FP)
- 트리거: 사용자가 수동으로 연기를 발생시킴 —
magic_0117.dll페이지에서 모든 슬롯이 “opcode 아님 catalogued / raw hex”로 표시됨 (내장된 카탈로그에는 0021/0098만 포함되어 있었고, mag_0117에는 Yonishi fp.h가 없음). - RE에서 발견한 내용: 로컬 handler-name 테이블(pppProgTbl_FP)은 DLL의 자체
.rdata내에ppp*문자열 형태로, handler_table_index 순서대로 저장되어 있습니다 — 0021 .rdata == Yonishi fp.h (37/37, 순서 동일); 0098 .rdata는 PS2에서 39개 대 35개입니다(PC에 KeZCrct/KeZCrctShp/DrawMdl3/DrawShapeX mid-table가 삽입됨). 보편적: 모든 DLL에 존재합니다(12-DLL 샘플). - 수정:
MagicFpHandlerTable.TryExtractFromDll— 리졸버 순서: Yonishi fp.h > DLL 자체 .rdata > 내장 카탈로그. 커버리지 스캔: 30,436개의 명명된 슬롯(기존 약 32K RAW), 4개의 RAW, field_map 외부의 0개 오프코드 (7개의 새로운 SEM_PAYLOAD 패밀리: pppDrawHook, pppDummyFunc, pppKeOfsMatXYZ, pppMatrixFront, pppNei*PointLight). - 구체적인 사례: P0의 s11 (키 0x040C)에서 0117 = 핸들러 #22 = pppDrawMatrixFront (pppMatrixScl 아님 — 0117의 순서는 #12부터 표준 순서와 다릅니다).
- 게이트: build 0 오류; MagicDll 스위트 70/70 PASS (3 새로운 0117/0021/0098 테스트); 49/49 DLL 범위.
- 문서:
docs/reverse/PPP_RDATA_PPPROGTBL_UNIVERSAL_20260802.md. ### PATCH
v2.218.5.0
v2.219.0.1BETAPATCH
Seymour2026년 8월 2일
compose에 연동된 Dataset-driven 생성기:
- 시나리오 프로필이 이제 ‘preserve’ 대신 ‘
"layout_mode": "pattern"’ (BuildMonsterPattern— dist ~105, arc ±55-90°, per-battle 시드)를 지원합니다. 이는 ‘party/camera’ CONSTANT + ‘ever-changing’ 패턴의 몬스터를 생성합니다. 기본값은 ‘"preserve"’입니다 (현재 동작 방식). 테스트 결과: remiem x4 패턴 → 미리보기 화면에서 ±60° 호에 몬스터 4마리 (시드 kino00_00-4) ### MINOR
v2.219.0.0
v2.219.0.2BETAPATCH
Seymour2026년 8월 2일
MUSIC FINALLY REALLY DISABLED + 동굴 격자 간격이 넓어짐
- MUSIC (우선순위):
ModuleFlagEnabled에서는 EXISTENCE 플래그만 확인했고 (.flag.off는 무시됨) — 제가 이전에 올린.off는 소용이 없었습니다. 수정 사항: (1)arena_plus_music.flag게임 내에서.bak로 이름이 변경됨 (다음 부팅 시 MusicHook가 비활성화됨 — IMMEDIATE, 재빌드 불필요); (2) 코드:ArenaPlusMusicFlagEnabledRaw/MusicHookEnabledFromConfig에서 이제.flag.off를 준수합니다 (프로젝트 패턴). 다음 부팅 시 음악 재생 기능이 복원됩니다. - 동굴 (Calm Lands) — 밀집된 몬스터: 캐리어 x4 그리드에는 ~29u 지점에 same-side 지점이 있었습니다 (mon1-mon2 29u, mon1-mon3 27u — "쌓여 있음"). 그리드 4/5 간격 조정 (x4 기준 후면 78/전면 116): 동굴 x4는 이제 mon1-mon2 44u, mon1-mon3 52u, mon0-mon1 83u입니다 (지도에는 4개의 에온이 분산되어 표시됨). 보스 밀기 기능 비활성화 (중간 에온들과 충돌이 발생했음).
- Steam 배포 (후크 12:39 + 랩). ### PATCH
v2.219.0.1
v2.219.1.0BETAPATCH
Seymour2026년 8월 2일
ViewerShell PIN: 뷰어가 desc 장면에 고정됨 (noclip home/대해 차단됨)
- 진단: 사용자가 Monster Studio 대신 noclip의 HOME (정보가 포함된 메뉴)을 보게 되었습니다.
#ffx/monster-studio해시가 유지되지 않았기 때문입니다(앱이 홈 화면으로 돌아갔습니다. 홈 화면에는 숨겨진 ID가 없기 때문에 스킨만으로는 이 문제를 해결할 수 없습니다). WebView2Host.NavigatePinned(url, hash): (1) 도메인 가드 —NavigationStarting는 당사 오리진(http://loopback:8769)을 벗어나는 모든 이동을 차단합니다(예: ‘대해’ 페이지의 GitHub와 같은 외부 링크 차단); (2) 해시 강제 적용 —NavigationCompleted에서,location.hash가 desc 해시와 다를 경우, re-applies을ExecuteScriptAsync로 리디렉션합니다(noclip은hashchange을 처리하고 해당 장면으로 이동시킵니다). 뷰어는 절대 홈 화면에 머무르지 않습니다. 앱이 메뉴로 전환되더라도 셸이 다시 홈 화면으로 되돌려줍니다.ViewerShell은 로드 및 재로드 시NavigatePinned을 사용합니다.- 게이트: build 0 오류; 편집기 스姆오크에 (추가 기능 → 몬스터 스튜디오 — 해야 함 열기 DIRECTLY 에서 해당 스튜디오, 없음 흐오姆에/약; 외부 링크 차단됨).
v2.219.0.0
v2.219.2.0BETAPATCH
Lulu2026년 8월 2일
Embedded catalog [98] REGENERATED from the PC .rdata (35→39 handlers) + full effect→table map versioned
- 잠재적 버그 수정: 0098에 대한 Yonishi(PS2) fp.h는 #26부터 SHIFTED였습니다. PC에서 KeZCrct(26)/KeZCrctShp(27)/DrawMdl3(32)/DrawShapeX(34) mid-table가 삽입되었습니다. 임베디드 카탈로그는 이제 실제 PC 순서를 사용합니다(39) — .rdata를 사용할 수 없을 때 올바른 대체 처리를 수행합니다.
- 관련 자료:
docs/reverse/PPP_PROGTBL_ALL_20260802.json— 589개의 Steam DLL을 스캔한 결과, 583개에서 pppProgTbl_FP가 발견됨(효과 → handler_table_index 순서의 로컬 테이블) — 뷰어에 필요한 효과→오퍼코드 연결 정보. - 게이트: build 0 오류; MagicDll 스위트 70/70 PASS (0098 테스트 이제 앵커 정확한 프오스이션스: 39, 크에즈크르크트@26, DrawMdl@28). ### REVISION
v2.219.1.0
v2.219.2.1BETAREVISION
Lulu2026년 8월 2일
RE 문서: 7 SEM_PAYLOAD, DB의 정식 버전에서 IDA MCP 및 pppDrawMatrixFront를 통해 확인됨 (디컴파일 결과: INFRA, 페이로드 없음)
- .i64 파일에 5개의 오프코드→핸들러 주석 적용 (0x757460 DrawHook / 0x7344D0 KeOfsMatXYZ / 0x737280 NeiChrPointLight / 0x74A2B0 + 0x74AF40 Nei*PointLight 헬퍼) — 기존 이름이 올바른 것으로 확인됨 (blind-rename하지 말 것: 오프셋 12의 handler_ptr = pC=draw 입력 필드, MagicHost 헬퍼일 수 있음).
- pppDrawMatrixFront (0x734CA0) = INFRA: ppvWorldMatrix를 → a3+128로 복사하고 HUD의 세로형 초상화(FFX_BtlUI_HudParty_GetPortrait)를 사용합니다. — 아님에서 레코드를 읽을 수 있습니다. 0117의 s11은 명령 슬롯입니다(이름이 표시되며, 원시 편집이 올바릅니다).
- 문서:
docs/reverse/PPP_RDATA_PPPROGTBL_UNIVERSAL_20260802.md§6-7. ### PATCH
v2.219.2.0
v2.219.2.2BETAPATCH
Seymour2026년 8월 2일
i18n: 일괄 적용 과정에서 덮어쓰기된 441개의 매뉴얼 번역(ES) 복원 + 도메인 사전(136개 용어)을 통한 FR/DE/그것 적용 범위 확장 + 2개의 원문 리터럴(ViewerShell) 이전
- Lane IFRT-2
- post-translation 검증 과정에서 발견된 오류: 자동 적용(
_i18n_apply_translations.py)으로 인해 품질 매뉴얼ES의 번역 내용(chrome, 공식 용어, Mod_* 설명)이 EN+glossary로 덮어쓰여졌습니다. 수정:work/_i18n_restore_manual_es.py— 491개의 수동 키(_i18n_tr_es_1..5c.py)와 에 TOP 자동 키(441개 업데이트 + 50개 추가)를 병합했습니다. 2197/2197 정렬을 유지하기 위해 50개의 고아 항목(Strings.cs에 속성이 없고 코드베이스에 참조가 없는 임의의 이름)을 제거했습니다. - 범위 확장:
work/_i18n_expand_coverage.py+work/_i18n_domain_dict_{1,2}.py(136 FFX/editor 도메인 용어) — 여전히 만와 동일한 키에 EN를 적용함 (이멱포텐트): FR +495 (18.7%→41.2%), DE +454 (19.0%→39.7%), 그것 +498 (19.3%→41.9%). - 2 원시 ViewerShell_Control.axaml 리터럴 (기타 레인's ViewerHub 파일) 마이그레이션됨 — StringsIntegrityTests 포착됨
iniciando…및servidor in-process→U_*키 에서 모든 9 르스엑스 + 프르오프스 에서 Strings.cs + 스우르그이크얼 대체 (오직 그러한 2 르이느에스). - 게이트: build 0 오류; 스위트 396/396 PASS (StringsIntegrityTests 녹색). 최종 범위: ES 33.4% (수동 쿠얼이티), FR 41.2%, DE 39.7%, IT 41.9%; JA/KO/ZH 여전히 스트아그드 (font-bank).
v2.219.2.1
v2.219.2.3BETAPATCH
Seymour2026년 8월 2일
i18n: FR/DE/IT/ES coverage expanded (399-term PT→FR/DE/IT dictionary + 22 EN phrases + ES domain) AND index-corruption fix that mixed languages in FR/DE
- Lane IFRT-2
- PT→FR/DE/그것 사전:
work/_i18n_pt_dict_{a,b1,c1,c2,c3}.py(399개 용어 — UI 동사, FFX 게임플레이, 세계관, 재료/시간/희귀도) +_i18n_en_phrases.py(22개 자주 쓰이는 문구) +_i18n_expand_coverage.py이제 ES (인덱스 0)도 포함합니다. - BUG 점검에서 발견:
_i18n_apply_pt_dict.py의 첫 번째 실행이 (fr,de,그것) 튜플에 대해 인덱스 1/2/3을 사용함 → FR에 GERMAN 값이, DE에 ITALIAN 값이 전달됨 (수정된 두 번째 실행은 키가 더 이상 EN와 같지 않아 덮어쓰지 않음). 수정:work/_i18n_regenerate_fr_de.py가 중립 데이터에서 FR/DE를 올바른 순서(공식 용어집 > 도메인 > EN 구문 > PT)로 모든 4개 계층을 사용하여 처음부터 다시 생성. - 수정 후 실제 커버리지: ES 50.3% (+372), FR 58.6%, DE 55.8%, 그것 59.9% (이번 라운드 이전 33-42% 대비). 9/9 resx 정렬 완료 (2199 키).
- 게이트: build 0 오류; 스위트 396/396 PASS. PT 10.2% (공식 용어; PT-BR 임 해당 편집기's 프르아크트이크얼 느에우트르얼); JA/KO/ZH 여전히 스트아그드 (font-bank).
v2.219.2.2