FONTLOG for Zen Garden Pen ========================== This file provides detailed information on the Zen Garden Pen font software. This information should be distributed along with the Zen Garden Pen fonts and any derivative works. Basic Font Information ---------------------- Zen Garden Pen is the handwritten lettering of the game Zen Garden. It is a Modified Version, under the SIL Open Font License 1.1, of Nanum Pen Script by NHN Corporation, designed by Sandoll Communications Inc. (Copyright (c) 2010, NHN Corporation). The original's name is mentioned here only to credit its origin: the Reserved Font Names listed in OFL.txt are not used in any name of this font. Family Zen Garden Pen Style Regular Full name Zen Garden Pen Regular PostScript name ZenGardenPen-Regular Unique ID 1.002;UKWN;ZenGardenPen-Regular Files ZenGardenPen-Regular.ttf (55,600 bytes; the game's) ZenGardenPen-Regular.otf (343,552 bytes; CFF outlines) ZenGardenPen-Regular.woff2 (26,192 bytes; web) ZenGardenPen-Regular.woff (31,104 bytes; web) Version 1.002 Units per em 1000 (vertical metrics unchanged from the original: ascent 800, descent -200, line gap 250) Glyphs 296, mapping 289 code points Zen Garden Pen covers Latin only: Basic Latin, Latin-1 Supplement, the macron vowels used for romanised Japanese names (Ā ā Ē ē Ī ī Ō ō Ū ū), Œ œ Š š Ž ž Ÿ ı ȷ ƒ, combining accents, general punctuation (dashes, quotes, ellipsis, bullets, guillemets, primes), € ™ № and spaces and zero-width characters, and the letters and currency signs that App Store prices use (č ł ฿ ₦ ₪ ₫ ₱ ₸ ₹ ₺ ₽ and U+20C1, the Saudi riyal sign). Japanese and Korean are not included. The font is bundled with the game and is not sold on its own. Since 2026-10-11 it is also published on its own, free of charge, as TTF, OTF, WOFF2 and WOFF, for use outside the game. The font is built reproducibly from the unmodified original by build_zen_garden_pen.py (Python with fontTools only); the new drawings are kept in that script as outline data, and the scripts that drew them are in design/. ChangeLog --------- 2026-10-11 (the Zen Garden authors) Zen Garden Pen Version 1.002 - The characters App Store prices need. The app letters StoreKit's localized price (Product.displayPrice) in the pen; an audit of all 175 storefronts in every locale of their countries (macOS 27, iOS 26.5 and 27) found 12 characters the font lacked, which Core Text drew in the system font: č ł (Kč, zł) and ฿ ₦ ₪ ₫ ₱ ₸ ₹ ₺ ₽ and U+20C1 SAUDI RIYAL SIGN (Unicode 17.0; iOS 27 writes Saudi prices with it). Nanum Pen has none of them. Added in the same hand (advance in units): č 362 a composite of the unchanged c and the caron, like š ž; c is a mark base like the other letters, so c + U+030C is drawn exactly as č ł 262 Nanum's l with its hyphen laid across the stem at 30 degrees ₦ 530 Nanum's N with two of its hyphen bars, lighter than the letter (pen 0.75), at 0.38 and 0.62 of its height, so that the diagonal leaves the left stem above them and meets the right stem below them ₽ 406 Nanum's P (its advance and side bearings) with one hyphen bar across the stem under the bowl ₱ 454 Nanum's P with a deeper bowl (its centre line drawn out down from the top, the join with the stem from 364 to 290, the pen kept), its stem carried up into the top stroke by Nanum's l, laid exactly on the stem's own centre line at the stem's width (no step where the two meet) and ending inside the top stroke, and two hyphen bars (pen 0.75, so that the small bowl stays open) at a third and two thirds of the bowl ₫ 350 Nanum's d at about 0.9 of its height (along its spine, the pen kept), a hyphen bar across the ascender and a hyphen line under it ₸ 508 Nanum's T with its crossbar written twice: its own bar moved up, and a slightly shorter, flatter copy on the stem ฿ 534 Nanum's B, 16 % wider along its spine so that its counters stay open, with Nanum's l laid through both bowls from below the baseline to above the letter, leaning as the B does ₺ 426 Nanum's L, its stem drawn up (17 % above the foot) and its foot bent up into a quarter arc (along the spine), with two hyphen bars rising at 22 degrees across the stem ₹ 434 drawn: top bar, the bowl hanging from it, second bar, leg ₪ 609 drawn: an arch with a full-height left leg and a cup with a full-height right leg, set between each other's legs with about 90 units of paper between the legs, like the counters of u and n U+20C1 543 drawn after the Saudi Central Bank's 2025 symbol: two stems turning into feet to the left and to the right, a long bar across both and a short bar under the right foot, bars and feet rising at the symbol's 10.7 degrees The drawn signs use the marker pen of the drawn marks (60 units, round ends) with the hand's pressure: each stroke lands 6 % heavier, swells 5 % towards its middle and wavers 2.5 %, so it measures 61-63 units across like the letters (Nanum's stems 60-66) and varies along its length as theirs do; and 1.5 units of wobble and the slight backward lean of Nanum's verticals. All stand in the digits' zone (ink 17-720; $ € £ ¥ reach 13-680), with side bearings of 22-39 units (₽ and č keep P's and c's). Where crossing strokes left a pinhole counter (under 800 square units), it is filled. - Every 1.001 glyph keeps its glyph ID, outline, advance and side bearing, every 1.001 code point its glyph, and the layout features only gain one line (č as a mark base); the font still has no kerning. The new glyphs follow all 1.001 glyphs in the glyph order. U+00A0 stays as wide as the space (280) and U+202F half of it (140), the spaces that prices are written with. - OS/2: the Thai Unicode range (bit 24) and the Vietnamese code page (1258) are left clear: the baht and dong signs alone would set them, and the font does not write Thai or Vietnamese. xAvgCharWidth 394 -> 397. - Version 1.002 (name IDs 3, 5; head.fontRevision), head.modified 2026-10-11; name ID 10 mentions the currency signs. design/required.json adds the 13 characters prices use that the game's own text does not (the 12 above and ₩): 252 required characters. - Checks: the build verifies the kept glyphs against Nanum Pen and that all 252 required characters are mapped. identity_check finds every kept character and 3,436 segments of the game's text identical to Nanum Pen (54,818 checks, 0 failures) and, run against 1.001 itself, every character 1.001 drew and 3,130 segments identical to 1.001 (49,822 checks, 0 failures). coretext_load now also lays out 23 App Store prices (with their no-break spaces and direction marks) at 20, 24 and 34 pt: no fallback glyph; Kč decomposed lays out as Kč precomposed. Two clean copies of the build in a fontTools-only venv (PYTHONHASHSEED random and 12345), the build in the design venv and design/draw.py give the same file. The new outlines have no overlaps, outer contours all run one way and counters the other, and the smallest counter is 1,667 square units. In the app, scripts/check_lettering_coverage.sh now also sets App Store prices in every storefront currency in the pen. - The standalone files are made again from this version, the same way as for 1.001 (below): ZenGardenPen-Regular.ttf 55,600 bytes (the game's font, byte for byte, SHA-256 76911bc8...), .otf 343,552, .woff2 26,192 and .woff 31,104, with the game's 296 glyphs and 289 code points. OTS 9.2.0 accepts all four; the OTF's cubics match the TTF point for point (largest difference 0.0003 units); with Core Text the WOFF2 and WOFF render pixel for pixel like the TTF and the OTF lays out every line exactly like it; in Chrome the WOFF2 renders pixel for pixel like the TTF. All four: family "Zen Garden Pen", no Reserved Font Name, OS/2 fsType 0. 2026-10-11 (the Zen Garden authors) Zen Garden Pen Version 1.001, standalone files - No change to the font: same version, glyphs, outlines, metrics, names and features. It is now also published on its own, for websites, design tools and documents, in four files: ZenGardenPen-Regular.ttf 49,648 bytes the game's font, byte for byte (SHA-256 befcc5f6...) ZenGardenPen-Regular.otf 314,992 bytes the same font with CFF (PostScript) outlines ZenGardenPen-Regular.woff2 23,508 bytes the TTF, WOFF2-compressed ZenGardenPen-Regular.woff 27,956 bytes the TTF, WOFF-compressed The game's TTF is already the whole font (the build makes the Latin-only font and the game bundles that very file), so these files have exactly the game's 284 glyphs and 277 code points. - OTF: each glyph decomposed (CFF has no composites) and each TrueType quadratic segment written as the one cubic that traces the same curve (degree elevation, no merging or approximation); contours reversed to the PostScript direction. The coordinates stay exact: the thirds and halves this gives are stored as CFF fixed-point numbers, which is why the OTF is larger than the TTF. cmap, advance widths, vertical metrics, name, OS/2, GDEF, GSUB and GPOS are the TTF's own tables; post is format 3 (the glyph names are in the CFF charset), maxp 0.5, and each left side bearing is the xMin of its CFF outline. No hinting, as in the TTF. - WOFF2 (Brotli, glyf/loca transform) and WOFF (Zopfli) decompress to the TTF's tables and outlines (WOFF2 sets head flag bit 11, as its specification requires for the glyf transform). - Checks: OTS, the sanitizer browsers run on web fonts, accepts all four files. With fontTools, every OTF glyph is the TTF glyph as exact cubics, point for point (largest difference 0.0002 units, the CFF's fixed-point precision). With Core Text, the WOFF2 and the WOFF render every glyph at 26 sizes from 8 to 240 px and 107 lines of sample text at 20, 24 and 34 pt, @2x and @3x, pixel for pixel like the TTF. The OTF lays out every line exactly like the TTF (glyphs, positions, widths) and differs in under 0.005 % of the pixels, at curve extremes at some sizes, where the rasterizer flattens cubic curves differently from quadratic ones (Core Graphics also fills a TTF outline and the same outline as exact cubics a little differently). All four: family "Zen Garden Pen", no Reserved Font Name, OS/2 fsType 0 (installable embedding). 2026-10-10 (the Zen Garden authors) Zen Garden Pen Version 1.001 - Z and z without the crossbar. Nanum Pen writes both letters with a bar through the diagonal; it is gone, leaving the top stroke, the diagonal and the foot as the hand wrote them. Each letter keeps the original's one contour except the bar's points (Z 84 -> 65 points, z 77 -> 61), and four short bridges carry the diagonal's two edges on across where the bar crossed them. Each bridge leaves and reaches the kept edge along that edge's own tangent (a cubic with handles a third of the gap, as TrueType quadratics within 0.25 units); the kept edges and the gaps differ in direction by 0.1 to 2.7 degrees. The diagonal runs on at its own width through the old junction (Z 80-83 units across, z 79-82), with no stub or notch where the bar joined. - Advance widths and left side bearings are unchanged (Z 524 / 28, z 466 / 25), the original has no kerning, and the mark anchors of Z and z are still measured on Nanum's own letters, so Ž and ž (composites of Z z with the caron) keep their caron where it was and every line of text keeps its spacing and line breaks. Only the ink changes: z now ends at x 428 (the bar reached 440). The font has no Ź Ż ź ż; Ž ž are the only glyphs built from Z and z. - Version 1.001 (name IDs 3 and 5, head.fontRevision), head.modified 2026-10-10. OFL.txt's modification notice names the change. - Checks: the build verifies Z and z (the original's advance and side bearing, no ink outside the original letter, bare sand where the bar was, one diagonal whose width and centre line run on smoothly through the old junction). identity_check, now with Z and z as redrawn letters, finds every other kept character and 3,436 segments of the game's text identical to Nanum Pen, pixel for pixel, and the 208 segments that contain Z or z laid out and wrapped exactly as before: 54,818 checks, 0 failures. 2026-10-09 (the Zen Garden authors) Zen Garden Pen Version 1.000 - Subset to Latin: removed the Hangul syllables and jamo, the Hangul and CJK compatibility symbols, enclosed alphanumerics, box drawing and fullwidth forms, the 'fwid' GSUB feature, the empty GPOS and DSIG tables and the TrueType hinting, which Core Text does not use (3,201,664 -> 49,744 bytes; 13,751 -> 284 glyphs). - Kept every remaining glyph of the original (Basic Latin, ¢ £ ¥ § © ° ± ¶ × ÷ ‘ ’ “ ” † ‡ ‰ ₩ ℃ ℉ ℓ ℡ ™ Ω ≠: 120 code points) with identical outlines, advance widths and side bearings; the original has no kerning. Verified with fontTools and by rendering every kept character and 3,281 segments of the game's strings with Core Text against the original at 20, 24 and 34 pt, 2x and 3x: 50,635 checks, all identical. - Renamed per OFL 1.1 section 3: family "Zen Garden Pen", PostScript "ZenGardenPen-Regular", own unique ID, version 1.000 and vendor ID UKWN; removed the Korean-language and Macintosh name records; kept NHN's copyright notice and added "Modifications Copyright 2026, the Zen Garden authors"; name IDs 13 and 14 carry the OFL 1.1 text and URL. - Production glyph names (AGL / uniXXXX) instead of ".notdef.N". - Added 156 code points (162 glyphs), drawn to look written with the same felt pen. Most are the original's own strokes moved along their centre line, which keeps the original's stroke width, ends and texture: the hyphen gives the dashes, macrons and bars; the straight quote the acute, grave and primes; the period the dieresis, dot accent, ellipsis and middle dot; the comma the cedilla; ’ and ” the low quotes ‚ „ (88 % of their height, so „…” pair); the parenthesis the breve; ! and ? turned give ¡ ¿; Nanum's C with two hyphen bars gives €. Where a transformed stroke would crumple, the glyph is drawn as new strokes with the measured pen width (58-64 units, 60-62 for the drawn marks, 52 for superiors, 48-50 for the ring) and round marker ends: circumflex, caron, tilde, ring, the capital acute and grave, the guillemets, ß, ð, ¤, the small R of ®, the ogonek, the superiors and fractions, and the dotted circle. The macrons are the hyphen drawn out into long, nearly level bars with a slightly lighter pen (330 units on lowercase, 290 on capitals; pen about 54 and 58), because Nanum Pen's i has a 184-unit dash for its dot: a short macron made ī look like i, and every i next to an ō look like ī. Over ı the bar is as long as over o and sits 88 units higher than the other marks over ı (its bottom at 615, where the i dash ends at 576); ī and Ī are a little wider than i and I to make room for it. Precomposed letters (68), TrueType composites of the unchanged base letter and a mark (flatter capital forms of the marks on capitals, dotless i under marks): À Á Â Ã Ä Å Ç È É Ê Ë Ì Í Î Ï Ñ Ò Ó Ô Õ Ö Ù Ú Û Ü Ý à á â ã ä å ç è é ê ë ì í î ï ñ ò ó ô õ ö ù ú û ü ý ÿ Ā ā Ē ē Ī ī Ō ō Š š Ū ū Ÿ Ž ž Other letters (17): ı ȷ are i j without the tittle; Æ æ Œ œ join A a O o to E e; Ø ø add one slash stroke; Ð þ µ ƒ reuse D, b, u, f; Þ is the I's stroke drawn out to the height of Nanum's P with a D bowl across its middle; ß and ð (o with a rising, crossed ascender) are drawn; ª º are a small a and o over a short bar: ª µ º Æ Ð Ø Þ ß æ ð ø þ ı Œ œ ƒ ȷ Combining marks (12), with GPOS mark-to-base anchors measured on each letter's ink (mark feature: top, macron and bottom classes; the macron sits higher over ı so that ī does not read as i; marks on capitals clear the letter's ink within 150 units by 40, so they never sit on the arms of H K M N U X, and the long macron clears the ink under its whole length by 40, also over k n v and Y; the precomposed letters are bases too), mark-to-mark stacking (mkmk: 40 units between lowercase marks, 16 between capital marks, so that a capital with two marks such as O + macron + acute stays under the 800 ascent) and GSUB ccmp (i j -> dotless before a top mark; capital forms of the marks after capitals). Decomposed text renders exactly like precomposed text: U+0300 U+0301 U+0302 U+0303 U+0304 U+0306 U+0307 U+0308 U+030A U+030B U+030C U+0327 Punctuation, spacing accents and symbols (42): ¡ ¤ ¦ ¨ « ¬ ® ¯ ² ³ ´ · ¸ ¹ » ¼ ½ ¾ ¿ ˆ ˇ ˘ ˙ ˚ ˛ ˜ ˝ – — ‚ ‛ „ ‟ • … ′ ″ ‹ › ⁄ € ◌ The em dash has 92-unit side bearings (advance 892), so an unspaced dash ("sing—they", "—Bashō") does not run into its neighbours. The spacing ogonek ˛ is a small drawn hook, down to the left and back to the right. Spaces and format characters (11, empty; U+00A0 is exactly as wide as the space, U+2009 and U+202F are half of it, the zero-width ones have no advance): U+00A0 U+2007 U+2008 U+2009 U+200A U+200B U+200C U+200D U+202F U+2060 U+FEFF U+00AD soft hyphen is the hyphen (a composite of it). U+2010 and U+2011 map to the original hyphen glyph, U+2012 to the en dash, U+2015 to the em dash, U+2027 to the middle dot. - Redrew U+2116 NUMERO SIGN, the one kept code point whose glyph changes. The original drew a full-width handwritten "No." (advance 940); it is now the original capital N (its exact outline, at its own position) followed by a raised small o with a short pen bar under it. The o is the original's o, made smaller and grown back evenly to a pen of about 58 units, so it keeps its shape and the notch where its stroke starts; the bar is the original hyphen, shortened to a little more than the o's width. Advance 720 units, ink 43,135 to 671,580. "№ 5" at 24 pt is 33.2 pt wide (it was 38.5 pt). A variant with a bare raised o was drawn for comparison; the barred form was chosen. - GDEF: combining marks class 3 (mark); № changed from class 2 (ligature) to class 1 (base). - OS/2 Unicode ranges recalculated for the new character set, without bit 67 (Arabic Presentation Forms-B), which only U+FEFF would set. The new outlines have no duplicate consecutive points (zero-length segments). - Before release, after review (same version): longer, lighter, level macrons and a higher bar on ī (see above); marks on H K M N U X (and the macron on k n v Y) raised clear of the letters; capital mark stacks tightened; the ring drawn with a heavier pen (50, capital 48; it was 41 and 36) and a larger loop so its counter stays open; circumflex, caron, tilde and the capital acute and grave drawn with a 60-62 pen (was 56-58); Þ redrawn at full capital height, ð with a straighter ascender and a clearer cross stroke, ˛ as a hook (it was a mirrored comma); duplicate points removed; OS/2 bit 67 cleared. Every kept glyph is still identical to the original. Acknowledgements ---------------- Original design: Doo-yul Kwak, Hyunghwan Choi, Nicolas Noh (Sandoll Communications Inc.), for NHN Corporation. http://www.sandoll.co.kr Latin extension and modifications: the Zen Garden authors.