katsuji
活字, movable type. Variable-width font tooling for a816 SNES projects.
Build a project's fonts and strings
katsuji.toml at the project root:
[fonts.dialog]
png = "fonts/vwf.png"
cell = [8, 16]
table = "text/ff4fr.tbl"
output = "assets/font.dat"
widths = { "0xFF" = 3, "0xA0" = -1 } # negative trims, positive sets
kerning-candidates = ["Ta", "Te", "va"] # tested for collision kerning
kerning = { "tt" = 2 } # hand-tuned: pixels tighter
[fonts.menu]
png = "fonts/8x8vwf.png"
cell = [8, 8]
table = "text/ff4_menus.tbl"
output = "assets/menu_font.dat"
constants = "assets/menu_font.i" # a816 constants describing the file
[strings.items]
font = "menu"
file = "text/items.txt" # one string per line (or `texts = [...]`)
bpp = 2
ink = 3
paper = 1
blob = "assets/items_vwf.dat" # tiles, no string across a bank edge
index = "assets/items_vwf.idx" # 4 bytes per string: offset lo16, bank, tiles
katsuji build # writes every output, paths relative to katsuji.toml
katsuji banner "Tarot" --table text/ff4fr.tbl --font assets/font.dat
Library
Atlas: a font drawn as a PNG grid of cells.find_kerning/pair_kerning: pair kerning by collision (one diagonal touch, never side by side).VwfFont: the font file the a816 VWF runtime reads (1bpp rows + width per glyph, kerning pairs, height).render/measure: text set at build time exactly as the runtime sets it.Wrapper: word wrap by pixel width, the game's control codes as data.Window/WindowBuilder: fill text windows; a game's script rules drive them.encode_tiles/colourize: SNES 2bpp / 4bpp planar tiles.text_tiles/pack_runs: static strings pre-rendered to a bank-safe blob.
Grown from ff4's tooling: its five fonts rebuild byte for byte, its wrapping and dialog goldens pass.
uv sync
make check
Metadata
Release files for katsuji 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| katsuji-0.1.0.tar.gz | 92.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| katsuji-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 114.6 kB
Release files / katsuji-0.1.0.tar.gz
| Download URL | katsuji-0.1.0.tar.gz |
|---|---|
| Size | 92.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b83dd2564ebe882a4439fc0cd7d5fc1462f9c6a618c850356c50bbfbab8d9eab
|
|
BLAKE2b-256 checksum How to use checksums |
b0b966b6d5b3483f77b5e721fe1035740c42b0dd3e4150bd308a3d1543202da7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / katsuji-0.1.0-py3-none-any.whl
| Download URL | katsuji-0.1.0-py3-none-any.whl |
|---|---|
| Size | 21.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
947ace3908839cfd7e8030a81b01752613de4005e0b70ae047fb44bb221f6e7b
|
|
BLAKE2b-256 checksum How to use checksums |
9cb927f522a73f9698efe88f96164bc7a8de0bca0045bec70e317013de90d368
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|