Sixteen .lzs files under data/ sit behind the
most text-heavy UI surfaces in the game: the bulletin board, mail editor,
item-name entry, locker, mail-order list, sale ranking, music-select
screen, shop info / profile / "make profile", default-costume picker,
catch-display, and the lower-screen letter and BBS chrome. The
inputstr/ directory adds five more files behind the
on-screen Japanese kana keyboard. The step-305 audit (2026-05-20) put
every one of them through a strict UTF-16-LE kana-required scan to
settle whether any of them carry translatable text the toolchain had
missed.
Headline result
19 of the 21 audited files are pure binary game-data
containers (TAD/RESC graphics, palette, screen, and cell
archives) with zero player-visible Japanese text. The two text-bearing
files are inside inputstr/ and are part of the on-screen
keyboard / profanity-filter machinery โ translating them would break
Japanese name input, not enable English UI. No new translation
work is opened by this audit.
Per-file findings
| Path | Raw โ decomp | Magic | Text? | Format |
|---|---|---|---|---|
data/inputbbs.lzs | 2,048 โ 4,688 | RESO | โ | TAD graphics (NCGR + NCLR + NCSR + NCER + palette) |
data/inputmail.lzs | 3,584 โ 6,912 | RESO | โ | TAD graphics |
data/entryitmname.lzs | 6,144 โ 32,384 | RESO | โ | TAD graphics |
data/goodslist.lzs | 7,168 โ 31,376 | RESC | โ | RESC v3.11 graphics |
data/locker.lzs | 33,280 โ 105,728 | RESO | โ | TAD graphics |
data/mailorder.lzs | 16,384 โ 68,400 | RESC | โ | RESC v3.11 graphics |
data/saleranking.lzs | 7,680 โ 20,752 | RESO | โ | TAD graphics |
data/selectmusic.lzs | 17,408 โ 40,400 | RESO | โ | TAD graphics |
data/shopinfo.lzs | 5,120 โ 11,808 | RESO | โ | TAD graphics |
data/shopprofile.lzs | 9,216 โ 43,488 | RESO | โ | TAD graphics |
data/makeprofile.lzs | 8,704 โ 28,144 | RESO | โ | TAD graphics |
data/defcos.lzs | 1,536 โ 6,576 | RESO | โ | TAD graphics |
data/global.lzs | 68,096 โ 166,176 | RESO | โ | TAD graphics |
data/letter.lzs | 3,584 โ 7,936 | RESO | โ | TAD graphics |
data/catchdisp.lzs | 4,096 โ 20,208 | RESO | โ | TAD graphics |
data/bbs.lzs | 9,728 โ 34,832 | RESO | โ | TAD graphics |
data/inputstr/inp_bg.lzs | 1,024 โ 4,336 | RESO | โ | TAD graphics (keyboard background) |
data/inputstr/inp_objcell.lzs | 2,048 โ 5,904 | RESO | โ | TAD cell container (keyboard sprite cells) |
data/inputstr/inp_objchara.lzs | 9,216 โ 35,696 | RESO | โ | TAD graphics (keyboard character sprites) |
data/inputstr/strdata.lzs | 1,536 โ 1,616 | RESO | internal | Kana keyboard button-glyph table |
data/inputstr/taboo.bin | 20,586 โ n/a | B0D0โฆ | internal | UTF-16-LE banned-word list (~486 entries) |
What the RESO / RESC payloads actually contain
The RESO / RESC header is followed by an entry
table laid out at a 0x10-byte stride: a 4-character lowercase ASCII
fourCC tag (rgcn, rlcn, rcsn,
recn, rcan, etc.), a 4-byte size, and a
4-byte offset, with the trailing 4 bytes zeroed. Each entry points at
a standard Nitro graphics block โ RGCN/NCGR
(character graphics), RLCN/NCLR (palette),
RCSN/NCSR (screen / tile map),
RECN/NCER (cell / OAM), and so on. None of
these blocks carry human-readable text; they encode tile pixels, 5-bit
color entries, tile indices, and OAM attribute words. The JP text
those screens display comes from the entries rows of the
relevant msg*.ofs files, not from the .lzs
containers themselves.
The two text-bearing files (do not translate)
inputstr/strdata.lzs โ kana keyboard glyph table
Decompressed payload is a 1,616-byte RESO container whose embedded data
block holds the kana characters that label the buttons of the on-screen
Japanese input keyboard. Examples: hiragana "a-column" labels
(ใใใใใชใฏใพใใใ) at offset 0x82, katakana
"a-column" (ใขใซใตใฟใใใใคใฉใฏ) at 0x2C2, and so on.
These are the glyphs the player taps to enter Japanese names. They are
not translation targets โ they are input alphabet data.
Romanizing or rewriting them would break the input UI for any player who
wants to enter a Japanese name. The English keyboard glyphs
(A-Z) are part of the same file and are already present
alongside the kana.
inputstr/taboo.bin โ banned-word filter
20,586-byte UTF-16-LE NUL-terminated string list. ~486 distinct
kana/kanji-only entries (slang, ethnic slurs, drug terms, adult terms,
yakuza idioms). This is the input-screen profanity filter:
the list is consulted when the player types a custom name; if a match is
found, the engine refuses the name. It is internal data,
never rendered on screen, and translating it would
weaken the filter (the JP entries catch JP slurs that an EN-only list
would not). Leave it alone. Note the file is not LZ-wrapped โ
.bin, not .lzs โ so it bypasses the
lzs.py decode path.
False positives the strict scan filtered out
A permissive first-pass scan reported thousands of "JP" hits across the
binary files. Every one investigated turned out to be a misread of
binary structure bytes as UTF-16-LE โ repeating ็ๆงใฎ runs
are the byte sequence 00 72 67 63 6E 30 ?? 00 00 ?? ?? 00 00
(trailing NUL of a size field + ASCII fourCC rgcn + leading
byte of the next field) read as UTF-16-LE; ๆๆฑฌๆนๆตฉใฅๅ is the
ASCII literal CellAnime0\0TXEUโฆ read as UTF-16-LE; two
pure-CJK hits in global.lzs sit inside 4bpp NCGR pixel
blobs. The strict scan (require โฅ1 kana per run, 5+ kana for
high-confidence) returns zero hits on the 19 binary files and only the
legitimate keyboard / banned-word data on the two
inputstr/ files.
Source
notes/_step305_ui_container_text_audit.mdโ full audit report (2026-05-20).notes/_step305_audit_v2_raw.jsonโ strict-scan raw results.src/translator/_step305_audit_v2.pyโ strict scanner.