mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 10:19:47 -04:00
f00631eaab
Adds a third translation path to the framework for UI text drawn glyph-by-glyph as sprites from a fixed-stride, space-padded EXE table (Tsumu's 59-slot level/stage-name array at 0x80070300..0x800708FE). Such labels carry no string pointer and no terminator, so the existing dispatch/arg-scan message hook can never reach them. Instead, [[glyph_label]] TOML entries drive a load-time RAM source patch: once the EXE label region is resident, each confirmed slot is verified byte-for-byte against its expected JP source bytes, then overwritten with the target-language text (fullwidth-Latin Shift-JIS, little-endian) re-padded with fullwidth spaces to exactly the slot width. The game's own per-glyph routine then draws English. Verify-before-patch means a slot is never touched unless the exact JP label is present; writing exactly `width` bytes (== the table stride) means a patch never spills into the adjacent slot. - label_transcode_le(): UTF-8 -> fixed-width LE fullwidth-SJIS, truncated to whole cells, fw-space padded; never exceeds width. - glyph_labels_patch_locked(): idempotent verify-and-patch scan, run from the dispatch hook while any label is unpatched (throttled; a single relaxed load once g_glyph_pending hits 0). - Loaded/gated exactly like message entries (language column, PSX_LANG, apply-armed). "xlate glyph" debug subcommand reports per-slot status. Verified (build-dbg, headless): all 59 slots patched (glyph_patched=59, pending=0), RAM byte-exact English at TOWER/SANDBOX/JELLYFISH/LOOP THE WARP, game alive at 26M dispatches. Framework code only; no regen, works in Release. Table + user visual sign-off in TsumuRecomp/translations. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>