Atualização 2.219
02/08/2026
v2.219.0.0BETAMINOR
Seymour2 de ago. de 2026
i18n: tradução completa de 7 idiomas (ES/FR/DE/IT aplicadas + JA/KO/ZH em staging)
- Lane IFRT-2
- 2.197 chaves traduzidas em 7 idiomas usando o glossário oficial FFX (34 termos: Overdrive→Turbo/Ekstase, Scan→Libra/Analyse, etc.) + termos comuns UI (40 termos: Save/Load/Open/Close/Apply/etc.) + tradução natural.
- ES/FR/DE/IT aplicadas aos resx satellites (Strings.{es,fr,de,it}.resx): 2.197 chaves atualizadas em cada idioma. O editor agora tem UI completo em 5 idiomas (EN/ES/FR/DE/IT).
- JA/KO/ZH em staging (
work/_i18n_staging_{ja,ko,zh}.json): 2.197 traduções geradas com termos oficiais FFX em japonês/coreano/chines, NOT aplicadas ao resx (font-bank pendente — a tabelaSlotGlyphMetasó existe em runtime; aplicar agora mostraria caracteres errados). Isso vira uma obrigação AI de aplicar quando RT2 resolver (documentado emdocs/ai/SESSION_HANDOFF.md). - Pipeline de tradução:
work/_i18n_gen_all_translations.py(gera traduções latinas em batch) +work/_i18n_apply_translations.py(aplica ao resx) +work/_i18n_gen_asian_staging.py(gera asiáticas em staging JSON). - Gate: build 0 erros; suíte 379/379 PASS. Versionamento completo em 6 docs (csproj + CHANGELOG + changelogUS + VERSIONING + PORT_STATUS + SESSION_HANDOFF).
v2.218.5.0
v2.219.0.0BETAMINOR
Lulu2 de ago. de 2026
Magic DLL Editor: resolver de opcode UNIVERSAL (pppProgTbl_FP do .rdata do próprio DLL)
- Trigger: smoke manual do usuário —
magic_0117.dllaberto com slots ALL "opcode não catalogado / hex raw" (o catálogo embutido só tinha 0021/0098 e o mag_0117 não tem fp.h Yonishi). - Descoberta RE: a tabela local handler-name (pppProgTbl_FP) vive no .rdata DLL do próprio
.rdatacomo stringsppp*na ordem handler_table_index — .rdata do 0021 == fp.h Yonishi (37/37, ordem idêntica); .rdata do 0098 tem 39 vs 35 no PS2 (PC inseriu KeZCrct/KeZCrctShp/DrawMdl3/DrawShapeX mid-table). Universal: todo DLL tem (amostra de 12-DLL). - Fix:
MagicFpHandlerTable.TryExtractFromDll— ordem do resolver: Yonishi fp.h > .rdata DLL do próprio > catálogo embutido. Scan de cobertura: 30.436 slots nomeados (era ~32K RAW), 4 RAW, 0 opcodes fora do field_map (7 novas famílias SEM_PAYLOAD: pppDrawHook, pppDummyFunc, pppKeOfsMatXYZ, pppMatrixFront, pppNei*PointLight). - Caso concreto: s11 do P0 (chave 0x040C) no 0117 = handler #22 = pppDrawMatrixFront (não pppMatrixScl — a ordem do 0117 diverge do canônico a partir do #12).
- Gates: build 0 erros; suíte MagicDll 70/70 PASS (3 novos testes 0117/0021/0098); cobertura 49/49 DLL.
- Doc:
docs/reverse/PPP_RDATA_PPPROGTBL_UNIVERSAL_20260802.md. ### PATCH
v2.218.5.0
v2.219.0.1BETAPATCH
Seymour2 de ago. de 2026
gerador Dataset-driven plugado no compose:
- o perfil de cenário agora suporta
"layout_mode": "pattern"(oBuildMonsterPattern— dist ~105, arco ±55-90°, seed per-battle) em vez de preserve — party/câmera CONSTANT + monstros no padrão ever-changing. Default"preserve"(comportamento atual). Testado: padrão remiem x4 → 4 monstros num arco de ±60° (seed kino00_00-4) no preview ### MINOR
v2.219.0.0
v2.219.0.2BETAPATCH
Seymour2 de ago. de 2026
MUSIC FINALLY REALLY DISABLED + grid da caverna espaçado
- MUSIC (prioridade):
ModuleFlagEnabledsó checava a flag EXISTENCE (ignorava.flag.off) — meu.offanterior era inútil. Fixes: (1)arena_plus_music.flagrenomeado para.bakno jogo (MusicHook off no próximo boot — IMMEDIATE, sem rebuild); (2) código:ArenaPlusMusicFlagEnabledRaw/MusicHookEnabledFromConfigagora honram.flag.off(padrão do projeto). A música volta no próximo boot. - Caverna (Calm Lands) — monstros empacotados: o grid x4 do carrier tinha pontos same-side a ~29u (mon1-mon2 29u, mon1-mon3 27u — "empilhados"). Grids 4/5 espaçados (back 78/front 116 no x4): caverna x4 agora mon1-mon2 44u, mon1-mon3 52u, mon0-mon1 83u (o mapa mostra os 4 aeons distribuídos). Nudge de boss desabilitado (colidia com os aeons do meio).
- Deploy Steam (hooks 12:39 + lab). ### PATCH
v2.219.0.1
v2.219.1.0BETAPATCH
Seymour2 de ago. de 2026
ViewerShell PIN: viewer fixado na cena da desc (home/About do noclip bloqueados)
- Diagnóstico: o usuário viu o HOME do noclip (o menu deles com About) em vez do Monster Studio — o hash
#ffx/monster-studionão estava sendo mantido (o app caía de volta na home; o skin sozinho não resolve porque a home não tem os ids escondidos). WebView2Host.NavigatePinned(url, hash): (1) guard de domínio —NavigationStartingcancela qualquer navegação que saia da nossa origem (http://loopback:8769— bloqueia links externos como o GitHub do About); (2) aplicação de hash — noNavigationCompleted, selocation.hash≠ o hash da desc, re-applies viaExecuteScriptAsync(o noclip lida comhashchangee navega para a cena). O viewer nunca fica na home: mesmo que o app caia no menu dele, o shell traz de volta.ViewerShellusaNavigatePinnedno load e no Reload.- Gate: build 0 erros; smoke do editor (Extras → Monster Studio — deve abrir DIRECTLY no studio, sem home/About; links externos bloqueados).
v2.219.0.0
v2.219.2.0BETAPATCH
Lulu2 de ago. de 2026
Catálogo incorporado [98] REGENERADO a partir do .rdata do PC (35→39 handlers) + mapa completo effect→table versionado
- Fix de bug latente: o PS2 Yonishi (fp.h) para 0098 estava SHIFTED a partir do #26 — o PC inseriu KeZCrct(26)/KeZCrctShp(27)/DrawMdl3(32)/DrawShapeX(34) mid-table. O catálogo embutido agora usa a ordem real PC (39) — fallback correto quando o .rdata não está disponível.
- Artefato:
docs/reverse/PPP_PROGTBL_ALL_20260802.json— scan de 589 DLLs Steam, 583 com pppProgTbl_FP (efeito → tabela local na ordem handler_table_index) — o link efeito→opcode que o viewer precisa. - Gates: build 0 erros; suíte MagicDll 70/70 PASS (testes 0098 agora ancoram posições exatas: 39, KeZCrct@26, DrawMdl@28). ### REVISION
v2.219.1.0
v2.219.2.1BETAREVISION
Lulu2 de ago. de 2026
docs RE: 7 SEM_PAYLOAD verificados no DB canônico via IDA MCP + pppDrawMatrixFront descompilado (INFRA, sem payload)
- 5 comentários opcode→handler aplicados ao .i64 (0x757460 DrawHook / 0x7344D0 KeOfsMatXYZ / 0x737280 NeiChrPointLight / 0x74A2B0 + 0x74AF40 helpers Nei*PointLight) — nomes existentes confirmados corretos (não blind-rename: handler_ptr com offset 12 = campo de entrada pC=draw, pode ser um helper MagicHost).
- pppDrawMatrixFront (0x734CA0) = INFRA: copia ppvWorldMatrix → a3+128 e usa o retrato HUD (FFX_BtlUI_HudParty_GetPortrait) — NOT lê o record. O s11 do 0117 é um slot de comando (nome visível, edição raw correta).
- Doc:
docs/reverse/PPP_RDATA_PPPROGTBL_UNIVERSAL_20260802.md§6-7. ### PATCH
v2.219.2.0
v2.219.2.2BETAPATCH
Seymour2 de ago. de 2026
i18n: restauração das 441 traduções manuais ES que o apply em batch tinha sobrescrito + expansão de cobertura FR/DE/IT via dicionário de domínio (136 termos) + 2 literais crus ViewerShell migrados
- Lane IFRT-2
- Bug encontrado durante a validação post-translation: o apply automático (
_i18n_apply_translations.py) sobrescreveu as traduções manuais de qualidade ES (chrome, termos oficiais, descrições Mod_*) com EN+glossário. Fix:work/_i18n_restore_manual_es.py— mescla as 491 chaves manuais (_i18n_tr_es_1..5c.py) ON TOP das automáticas (441 atualizadas + 50 adicionadas); 50 órfãs (nomes inventados, sem prop em Strings.cs nem refs no codebase) removidas para manter o alinhamento 2197/2197. - Expansão de cobertura:
work/_i18n_expand_coverage.py+work/_i18n_domain_dict_{1,2}.py(136 termos FFX/domínio do editor) — aplicado ONLY a chaves ainda iguais a EN (idempotente): FR +495 (18.7%→41.2%), DE +454 (19.0%→39.7%), IT +498 (19.3%→41.9%). - 2 literais crus ViewerShell_Control.axaml (arquivo ViewerHub de outra lane) migrados — StringsIntegrityTests pegou
iniciando…eservidor in-process→ chavesU_*nos 9 resx + props em Strings.cs + substituição cirúrgica (só essas 2 linhas). - Gate: build 0 erros; suíte 396/396 PASS (StringsIntegrityTests verde). Cobertura final: ES 33.4% (qualidade manual), FR 41.2%, DE 39.7%, IT 41.9%; JA/KO/ZH ainda em staging (font-bank).
v2.219.2.1
v2.219.2.3BETAPATCH
Seymour2 de ago. de 2026
i18n: cobertura de FR/DE/IT/ES ampliada (dicionário PT→FR/DE/IT com 399 termos + 22 frases EN + domínio ES) E correção da corrupção de índice que misturava idiomas em FR/DE
- Lane IFRT-2
- Dicionário PT→FR/DE/IT:
work/_i18n_pt_dict_{a,b1,c1,c2,c3}.py(399 termos — verbos UI, gameplay FFX, mundo, material/tempo/raridade) +_i18n_en_phrases.py(22 frases comuns) +_i18n_expand_coverage.pyagora cobrindo ES (índice 0). - BUG encontrado no spot check: a 1ª execução de
_i18n_apply_pt_dict.pyusou índices 1/2/3 contra tuplas (fr,de,it) → FR recebeu valores GERMAN e DE recebeu valores ITALIAN (a 2ª execução corrigida não os sobrescreveu porque as chaves não eram mais iguais a EN). Fix:work/_i18n_regenerate_fr_de.pyregenera FR/DE do zero a partir do neutro com as 4 camadas na ordem correta (glossário oficial > domínio > frases EN > PT). - Cobertura real após o fix: ES 50.3% (+372), FR 58.6%, DE 55.8%, IT 59.9% (vs 33-42% antes desta rodada). 9/9 resx alinhados (2199 chaves).
- Gate: build 0 erros; suíte 396/396 PASS. PT 10.2% (termos oficiais; PT-BR é o neutro prático do editor); JA/KO/ZH ainda em staging (font-bank).
v2.219.2.2