Atualização 2.223
02/08/2026
v2.223.0.0BETAMINOR
Seymour2 de ago. de 2026
F7 KEYSTONE WIRED: menu nativo agora APPLIES RAM alavancas (efeito on-screen imediato) + regra HOOKS-IN-ENGLISH
- Wire keystone:
NativeMenu_PumpHook(dllmain) agora consome o resultado do menu nativo (g_ourClosed/g_ourResult/g_rowValue) e fecha o menu sozinho — as linhas interativas F7 têm efeito REAL in-game. F7_LeverApply(dllmain): alavancas RAM imediatas — Music (F7_MusicPreview— toca a trilha NOW, sem persistir), Debug Invincible (byte0xD2A8F8+1), Force Battle (novoF7_ForceFieldBattle(field, group)— campo arbitrário do stepper, tick-based), troca de opcode AI (byte+0xF78do primeiro inimigo vivo viag_BattleEnemyList0xD37634) e Difficulty (alavanca leve — aplica no próximo início de batalha).F7_ForceFieldBattle(F7InLive.h/.cpp): mesma máquina tick-based doF7_ForceLastBattlecom o field/group da alavanca (sem dependência da última batalha capturada).- Fix de compilação:
NativeMenuShell.hagora é self-contained (#include <stdio.h>— o_snprintf_sdo header exigia o include no TU). - EXTRA RULE (CLAUDE.md): hooks/runtime C++ — texto ALL (labels de menu, linhas de status, logs, strings de export) em ENGLISH; strings PT restantes em
ArenaPlusComposePicktraduzidas. - Gate: build Release 0 erros; deploy Steam OK (
deploy-arena-plus-compose.ps1). RT2 pendente: F7 → escolher uma alavanca → confirmar efeito on-screen imediato. ### PATCH
v2.222.2.0
v2.223.1.0BETAPATCH
Seymour2 de ago. de 2026
StudioWebServer: POST /api/edits (infra de gizmo F3.5) + TABELA DE DISPATCH PPP VERIFICADA NO BANCO DE DADOS CANÔNICO (RE)
- POST
/api/edits/<encId>emStudioWebServer(o servidor só aceitava GET/HEAD): body{ slot, position?, heading?, scale? }→ merge viaSidecarEditsWriterem<serveRoot>/data/FinalFantasyX/edits/<encId>.json(a junction data/ escreve na raiz real do noclip). Validações: decimal encId ≤10, slot 0-7, body ≤64KB, JSON válido. Fundação para o gizmo de drag (F3.5 parte 2: o save TS do noclip via fetch POST — sem processo externo, mesma origem). 4/4 testes novos (write+merge, encId ruim, slot ruim, body vazio). - RE — tabela de dispatch PPP verificada no banco de dados canônico ao vivo (
ffxoficial.exe.i64, ida-pro-mcp): 4 tabelas de entradas de 0x28 bytes comprovadas por bytes+strings+decompilados — variante0xC3A800(name@+0x20, fn@+0x04),0xC3BEC8/0xC3FC88/0xC863F0canônicas (name@+0x00, fn@+0x0C); refinamento em relação ao doc MAGIC de 2026-07-31:0xC3A500é o NAME POINTER VECTOR ppp* (não a tabela principal — main=0, terminador 0xFFFFFFFF); semântica real: +0x04=fnExtra, +0x0C=fnMain, +0x18=fnCleanup; 273 nomes de âncora; extrator autônomo reproduzívelscripts/ppp_dispatch_extractor.py(análise PE própria, sem IDA/lock) regenerascripts/ppp_dispatch_table.json(773 entradas, slots 0-2 validados contra a IDA em toda a tabela); renomeações aplicadas AO BANCO DE DADOS CANÔNICO (PPP_Table_DrawKe_Variant/DrawKe/MatrixKeDMat/ZCrct). Documento:docs/reverse/PPP_DISPATCH_TABLE_RECONCILED_2026-08-02.md. C2 retomável com um catálogo real de name→fn. - Gate: testes ViewerHub 17/17 PASS; build 0 erros.
- Pendente: consumidor da tabela (quem a varre — sem xrefs diretos; candidato HostContextTable 0xC64CE8); gizmo de drag no canvas (usa o POST acima); propagar renames MAGIC-07-31 da cópia para o DB canônico. ### MINOR
v2.223.0.0