eeuz pct Phonetic City Names - krcenov/RNS510-Map-Viewer GitHub Wiki

eeuz.pct — Phonetic City Names

Status: ✅ Cracked · 15.7 MB compressed / 27.4 MB decompressed · FLAT_COMPRESSED (see container format) · Record format is cracked and validated at full file scale; the trailing "group" field's grouping behavior AND its own derivation are both cracked — the latter closed out in a later session via eeu.mod, the disc's own schema dictionary.

A phonetic pronunciation catalog for city names, specifically — the same family as eeuz.prd (road names) but for major places, and covering many languages per place. Not previously examined — only its FLAT_COMPRESSED container was known.

Record format

94-byte header, then self-delimiting variable-length records:

uint8    name_len
bytes    name           -- name_len bytes
uint8    phon_len
bytes    phon           -- phon_len bytes, same phonetic alphabet as eeuz.prd
bytes[6] group           -- see below

Validated at full scale: parsing the entire 27,386,485-byte decompressed body this way consumes every byte with zero leftover at EOF, producing exactly 649,956 well-formed records.

The 6-byte "group" field — fully cracked

This field reliably groups every language's name variant for the same real place. Checked directly against real, complete groups (not a cherry-picked pair):

Group (hex) Members Real place
744f180bf414 26 Venice, Italy — VENEDIG, VELENCE, VENETSIA, VENICE, VENISE, BENÁTKY, VENETIA, VENEZA, ...
e4ac7f072c00 26 Vatican City — VATIKÁNVÁROS, CIUDAD DEL VATICANO, CITTÀ DEL VATICANO, VATICAN CITY, ...
9b7c220eb618 22 Munich — MÜNCHEN, MONACHIUM, MÚNICH, MONACHO, MNÍCHOV, MUNICH, ...
bb934d036b0e 22 Frankfurt am Main

314,645 distinct group values across 649,956 records; median group size 2. The single largest "group" — 000000000000, 73,396 members — is a sentinel for "no roads linked" (this project's established 0 = unset/padding-sentinel convention, seen elsewhere in e.g. the false-edge topology bug). Its members are small, single-language-looking local place names with presumably no road data recorded, not a real 73,396-way collision.

The group value's own derivation — CRACKED (via eeu.mod)

The 6 bytes are [uint32 LE offset][uint16 LE count] — a pointer into eeuz.prd, naming that city's own list of road/route phonetic entries. Confirmed directly by eeu.mod (the disc's own schema dictionary), whose real field names for this exact table (phCity) are .../phonemeRoadOffset/phonemeRoadCount.

This also explains the earlier grouping-behavior finding from the other direction: multi-language name variants of the same real city correctly share the identical group value because they all refer to the same underlying place's same roads — what first looked like a "language- variant grouping key" is really "this city's own roads," incidentally shared across every spelling of that city's name. It also retroactively explains why the three offset-into-eeu.cty/byte-offset/hash hypotheses tested earlier all failed: the field was never a eeu.cty or .fea pointer at all, it points into a completely different file.

Validated directly against real content in eeuz.prd, not just schema-name-matching: interpreting the bytes this way and looking at eeuz.prd right around the resulting offset finds real, clearly place-appropriate road/route entries for every example checked — Venice's group (744f180bf414) lands right next to real Adriatic ferry-route entries VENEZIA-CORFÙ and VENEZIA-PATRASSO; Vatican City's group lands among real Italian streets (VIA ARIANO IRPINO, VIA SORRENTO — Vatican City sits inside Rome, so nearby Italian street names is exactly right); Munich's lands at a real Munich square (LEONRODPLATZ); Frankfurt's lands among real Frankfurt streets (MANNHEIMER STRASSE, DÜSSELDORFER STRASSE).

The exact byte-level anchor convention (whether offset is a raw absolute file position or needs a small fixed adjustment) wasn't pinned down to the last byte — the landing point is sometimes a handful of bytes before the nearest clean eeuz.prd record boundary rather than exactly on one — but the overall mechanism (offset+count pointer to a city's own road phonetics) is no longer in doubt.

Reader code

research/pct_reader.py — iter_pct_records(), group_int(), parse_group(). Full methodology in its module docstring and in eeu.mod's.