Actualización 2.219
2/8/2026
v2.219.0.0BETAMINOR
Seymour2 ago 2026
i18n: traducción completa de 7 idiomas (ES/FR/DE/IT aplicado + JA/KO/ZH en puesta en escena)
- Carril IFRT-2
- 2,197 claves traducidas en 7 idiomas usando el glosario oficial FFX (34 términos: Overdrive→Turbo/Ekstase, Libra→Libra/Analyse, etc.) + términos comunes de UI (40 términos: Guardar/Cargar/Abrir/Cerrar/Aplicar/etc.) + traducción natural.
- ES/FR/DE/IT aplicado a archivos resx de satélite (Strings.{es,fr,de,it}.resx): 2.197 claves actualizadas en cada idioma. El editor ahora tiene UI completo en 5 idiomas (EN/ES/FR/DE/IT).
- JA/KO/ZH en preparación (
work/_i18n_staging_{ja,ko,zh}.json): 2197 traducciones generadas con términos oficiales FFX en japonés/coreano/chino, NO se aplica a resx (la tabla font-banco pendiente —SlotGlyphMetasolo existe en tiempo de ejecución; aplicar ahora mostraría caracteres incorrectos). Esto se convierte en una obligación AI que se aplicará cuando RT2 lo resuelva (documentado endocs/ai/SESSION_HANDOFF.md). - Canal de traducción:
work/_i18n_gen_all_translations.py(genera traducciones latinas en lote) +work/_i18n_apply_translations.py(se aplica a resx) +work/_i18n_gen_asian_staging.py(genera asiática en la preparación JSON). - Puerta: errores de compilación 0; conjunto 379/379 PASS. Versionado completo en 6 documentos (csproj + CHANGELOG + changelogUS + VERSIONING + PORT_STATUS + SESSION_HANDOFF).
v2.218.5.0
v2.219.0.0BETAMINOR
Lulu2 ago 2026
Editor Magia DLL: solucionador de código de operación UNIVERSAL (pppProgTbl_FP del propio .rdata de DLL)
- Activador: humo del manual del usuario:
magic_0117.dllse abrió con TODAS las ranuras "código de operación no catalogado/hexadecimal sin formato" (el catálogo integrado solo tenía 0021/0098 y mag_0117 no tiene Yonishi fp.h). - Descubrimiento RE: la tabla de nombres de controlador local (pppProgTbl_FP) se encuentra en el propio
.rdatade DLL como cadenasppp*en el orden handler_table_index — 0021 .rdata == Yonishi fp.h (37/37, orden idéntico); 0098 .rdata tiene 39 frente a 35 en PS2 (PC insertó KeZCrct/KeZCrctShp/DrawMdl3/DrawShapeX en la mitad de la tabla). Universal: cada DLL lo tiene (muestra 12-DLL). - Solución:
MagicFpHandlerTable.TryExtractFromDll— orden de resolución: Yonishi fp.h > .rdata propio de DLL > catálogo integrado. Escaneo de cobertura: 30,436 espacios con nombre (antes ~32K RAW), 4 RAW, 0 códigos de operación fuera de field_map (7 nuevas familias SEM_PAYLOAD: pppDrawHook, pppDummyFunc, pppKeOfsMatXYZ, pppMatrixFront, pppNei*PointLight). - Caso concreto: s11 de P0 (clave 0x040C) en 0117 = manejador #22 = pppDrawMatrixFront (no pppMatrixScl — el orden de 0117 difiere del canónico a partir del #12).
- Puertas: errores de compilación 0; MagicDll conjunto 70/70 PASS (3 nuevas pruebas 0117/0021/0098); Cobertura 49/49 DLL.
- Documento:
docs/reverse/PPP_RDATA_PPPROGTBL_UNIVERSAL_20260802.md. ### PARCHE
v2.218.5.0
v2.219.0.1BETAPATCH
Seymour2 ago 2026
Generador basado en conjunto de datos conectado a componer:
- el perfil del escenario ahora admite
"layout_mode": "pattern"(elBuildMonsterPattern— dist ~105, arco ±55-90°, semilla por batalla) en lugar de preservar — grupo/cámara CONSTANTE + monstruos en el siempre cambiante patrón. Valor predeterminado"preserve"(comportamiento ACTUAL). Probado: patrón remiem x4 → 4 monstruos en un arco de ±60° (semilla kino00_00-4) en la vista previa ### MENOR
v2.219.0.0
v2.219.0.2BETAPATCH
Seymour2 ago 2026
MÚSICA FINALMENTE REALMENTE DESHABILITADA + cuadrícula de caverna espaciada
- MÚSICA (prioridad):
ModuleFlagEnabledsolo marcó la EXISTENCIA del indicador (ignoró.flag.off): mi.offanterior era inútil. Correcciones: (1)arena_plus_music.flagrenombrado a.baken el juego (MusicHook desactivado en el siguiente arranque: INMEDIATO, sin reconstrucción); (2) código:ArenaPlusMusicFlagEnabledRaw/MusicHookEnabledFromConfigahora respeta.flag.off(patrón de proyecto). La música vuelve en el siguiente arranque. - Caverna (Calm Lands) — monstruos empaquetados: la cuadrícula del transportador x4 tenía puntos del mismo lado en ~29u (mon1-mon2 29u, mon1-mon3 27u — "apilados"). Cuadrículas espaciadas 4/5 (posterior 78/frontal 116 en x4): caverna x4 ahora mon1-mon2 44u, mon1-mon3 52u, mon0-mon1 83u (el mapa muestra los 4 eones distribuidos). Empujón del jefe desactivado (chocó en los eones medios).
- Implementación de Steam (ganchos 12:39 + lab). ### PARCHE
v2.219.0.1
v2.219.1.0BETAPATCH
Seymour2 ago 2026
PIN de ViewerShell: visor fijado a la escena de descripción (inicio de noclip/Acerca de bloqueado)
- Diagnóstico: el usuario vio el noclip HOME (su menú con Acerca de) en lugar de Monstruo Estudio; el hash
#ffx/monster-studiono se conservaba (la aplicación volvió al inicio; el aspecto por sí solo no lo soluciona porque el inicio carece de identificadores ocultos). WebView2Host.NavigatePinned(url, hash): (1) protección de dominio —NavigationStartingcancela cualquier navegación que salga de nuestro origen (http://loopback:8769— bloquea enlaces externos como el GitHub de Acerca de); (2) aplicación de hash: enNavigationCompleted, silocation.hash≠ el hash desc, re lo aplica a través deExecuteScriptAsync(el noclip manejahashchangey navega a la escena). El espectador nunca permanece en la página de inicio: incluso si la aplicación accede a su menú, el shell lo devuelve.ViewerShellusaNavigatePinneden carga y recarga.- Puerta: errores de compilación 0; editor humo (Extras → Monstruo Estudio: debe abrirse DIRECTAMENTE en el estudio, sin inicio/Acerca de; enlaces externos bloqueado).
v2.219.0.0
v2.219.2.0BETAPATCH
Lulu2 ago 2026
catálogo integrado [98] REGENERADO a partir de los datos .rdata del PC (35→39 controladores) + mapa completo de efecto→tabla versionado
- Corrección de error latente: el Yonishi (PS2) fp.h para 0098 fue CAMBIADO del n.° 26 en adelante: el PC insertó KeZCrct(26)/KeZCrctShp(27)/DrawMdl3(32)/DrawShapeX(34) en la mitad de la tabla. El catálogo integrado ahora utiliza el orden PC REAL (39): respaldo correcto cuando .rdata no está disponible.
- Artefacto:
docs/reverse/PPP_PROGTBL_ALL_20260802.json— escaneo de 589 DLL de Steam, 583 con pppProgTbl_FP (efecto → tabla local en orden handler_table_index): el efecto → enlace de código de operación que el espectador necesita. - Puertas: errores de compilación 0; MagicDll conjunto 70/70 PASS (las pruebas 0098 ahora anclan posiciones exactas: 39, KeZCrct@26, DrawMdl@28). ### REVISIÓN
v2.219.1.0
v2.219.2.1BETAREVISION
Lulu2 ago 2026
Documentos de RE: 7 SEM_PAYLOAD verificado en la base de datos canónica a través de IDA MCP + pppDrawMatrixFront descompilado (INFRA, sin carga útil)
- 5 códigos de operación→comentarios del controlador aplicados a .i64 (0x757460 DrawHook / 0x7344D0 KeOfsMatXYZ / 0x737280 NeiChrPointLight / 0x74A2B0 + 0x74AF40 Nei*PointLight ayudantes): nombres existentes confirmados como correctos (no cambie el nombre a ciegas: handler_ptr con desplazamiento 12 = pC=campo de entrada de sorteo, puede ser un ayudante MagicHost).
- pppDrawMatrixFront (0x734CA0) = INFRA: copia ppvWorldMatrix → a3+128 y usa retrato HUD (FFX_BtlUI_HudParty_GetPortrait) — NO lee el registro. s11 de 0117 es una ranura de comando (nombre visible, edición sin formato correcta).
- Documento:
docs/reverse/PPP_RDATA_PPPROGTBL_UNIVERSAL_20260802.md§6-7. ### PARCHE
v2.219.2.0
v2.219.2.2BETAPATCH
Seymour2 ago 2026
i18n: restauración de las 441 traducciones ES manuales que la aplicación por lotes había sobrescrito + expansión de cobertura FR/DE/IT a través del diccionario de dominio (136 términos) + 2 literales ViewerShell sin procesar migrados
- Carril IFRT-2
- Error encontrado durante la validación posterior a la traducción: la aplicación automática (
_i18n_apply_translations.py) sobrescribió las traducciones ES del manual de calidad (chrome, términos oficiales, descripciones Mod_*) con glosario EN+. Solución:work/_i18n_restore_manual_es.py: fusiona las 491 claves manuales (_i18n_tr_es_1..5c.py) ENCIMA de las automáticas (441 actualizadas + 50 agregadas); Se eliminaron 50 huérfanos (nombres inventados, sin accesorios en Strings.cs ni referencias en el código base) para mantener la alineación 2197/2197. - Expansión de cobertura:
work/_i18n_expand_coverage.py+work/_i18n_domain_dict_{1,2}.py(136 FFX/términos de dominio del editor): se aplica SÓLO a claves aún iguales a EN (idempotente): FR +495 (18.7%→41.2%), DE +454 (19.0%→39.7%), ESO +498 (19.3%→41.9%). - 2 literales ViewerShell_Control.axaml sin procesar (archivo ViewerHub de otro carril) migrados — StringsIntegrityTests capturó las claves
iniciando…yservidor in-process→U_*en los 9 resx + accesorios en Strings.cs + reemplazo quirúrgico (solo esas 2 líneas). - Puerta: errores de compilación 0; conjunto 396/396 PASS (StringsIntegrityTests verde). Cobertura final: ES 33.4% (calidad manual), FR 41.2%, DE 39.7%, IT 41.9%; JA/KO/ZH todavía están en escena (font-banco).
v2.219.2.1
v2.219.2.3BETAPATCH
Seymour2 ago 2026
i18n: cobertura de FR/DE/IT/ES ampliada (diccionario PT→FR/DE/IT de 399 términos + 22 frases EN + dominio ES) Y corrección de corrupción de índices que mezclaba idiomas en FR/DE
- Carril IFRT-2
- Diccionario PT→FR/DE/IT:
work/_i18n_pt_dict_{a,b1,c1,c2,c3}.py(399 términos: verbos UI, jugabilidad FFX, mundo, material/tiempo/rareza) +_i18n_en_phrases.py(22 frases comunes) +_i18n_expand_coverage.pyahora cubre ES (índice 0). - ERROR encontrado en la verificación aleatoria: la primera ejecución de
_i18n_apply_pt_dict.pyusó índices 1/2/3 contra (fr,de,it) tuplas → FR recibió valores ALEMANES y DE recibió valores ITALIANO (la segunda ejecución corregida no los sobrescribió porque las claves ya no eran iguales a EN). Solución:work/_i18n_regenerate_fr_de.pyregenera FR/DE desde cero desde el neutro con las 4 capas en el orden correcto (glosario oficial > dominio > frases EN > PT). - Cobertura REAL después de la corrección: ES 50.3% (+372), FR 58.6%, DE 55.8%, IT 59.9% (vs 33-42% antes de esta ronda). 9/9 resx alineado (2199 teclas).
- Puerta: errores de compilación 0; conjunto 396/396 PASS. PT 10.2% (términos oficiales; PT-BR es el neutral práctico del editor); JA/KO/ZH todavía están en escena (font-banco).
v2.219.2.2