Update 2.223
8/2/2026
v2.223.0.0BETAMINOR
SeymourAug 2, 2026
F7 KEYSTONE WIRED: native menu now APPLIES RAM levers (immediate on-screen effect) + HOOKS-IN-ENGLISH rule
- Keystone wire:
NativeMenu_PumpHook(dllmain) now consumes the native menu result (g_ourClosed/g_ourResult/g_rowValue) and closes the menu on its own — the F7 interactive rows have REAL in-game effect. F7_LeverApply(dllmain): immediate RAM levers — Music (F7_MusicPreview— plays the track NOW, no persist), Debug Invincible (byte0xD2A8F8+1), Force Battle (newF7_ForceFieldBattle(field, group)— arbitrary field from the stepper, tick-based), AI Opcode swap (byte+0xF78of the first living enemy viag_BattleEnemyList0xD37634) and Difficulty (light lever — applies on next battle start).F7_ForceFieldBattle(F7InLive.h/.cpp): same tick-based machine asF7_ForceLastBattlewith the lever's field/group (no dependency on the captured last battle).- Compile fix:
NativeMenuShell.his now self-contained (#include <stdio.h>— the header's_snprintf_srequired the include in the TU). - EXTRA RULE (CLAUDE.md): hooks/runtime C++ — ALL text (menu labels, status lines, logs, export strings) in ENGLISH; remaining PT strings in
ArenaPlusComposePicktranslated. - Gate: Release build 0 errors; Steam deploy OK (
deploy-arena-plus-compose.ps1). RT2 pending: F7 → pick a lever → confirm immediate on-screen effect. ### PATCH
v2.222.2.0
v2.223.1.0BETAPATCH
SeymourAug 2, 2026
StudioWebServer: POST /api/edits (F3.5 gizmo infra) + PPP DISPATCH TABLE VERIFIED IN THE CANONICAL DB (RE)
- POST
/api/edits/<encId>onStudioWebServer(the server only accepted GET/HEAD): body{ slot, position?, heading?, scale? }→ merge viaSidecarEditsWriterinto<serveRoot>/data/FinalFantasyX/edits/<encId>.json(the data/ junction writes into the real noclip root). Validations: decimal encId ≤10, slot 0-7, body ≤64KB, valid JSON. Foundation for the drag gizmo (F3.5 part 2: noclip TS saves via fetch POST — no external process, same origin). 4/4 new tests (write+merge, bad encId, bad slot, empty body). - RE — PPP dispatch table verified in the canonical DB live (
ffxoficial.exe.i64, ida-pro-mcp): 4 tables of 0x28-byte entries proven by bytes+strings+decompiles —0xC3A800variant (name@+0x20, fn@+0x04),0xC3BEC8/0xC3FC88/0xC863F0canonical (name@+0x00, fn@+0x0C); refinement vs the 2026-07-31 MAGIC doc:0xC3A500is the ppp* NAME POINTER VECTOR (not the main table — main=0, 0xFFFFFFFF terminator); real semantics: +0x04=fnExtra, +0x0C=fnMain, +0x18=fnCleanup; 273 anchor names; reproducible standalone extractorscripts/ppp_dispatch_extractor.py(own PE parse, no IDA/lock) regeneratesscripts/ppp_dispatch_table.json(773 entries, slots 0-2 validated against IDA on every table); renames applied TO THE CANONICAL DB (PPP_Table_DrawKe_Variant/DrawKe/MatrixKeDMat/ZCrct). Doc:docs/reverse/PPP_DISPATCH_TABLE_RECONCILED_2026-08-02.md. C2 resumable with a real name→fn catalog. - Gate: ViewerHub tests 17/17 PASS; build 0 errors.
- Pending: table consumer (who scans it — no direct xrefs; candidate HostContextTable 0xC64CE8); canvas drag gizmo (uses the POST above); propagate MAGIC-07-31 renames from the copy to the canonical DB. ### MINOR
v2.223.0.0