The identity
A fracture with light behind it
The name is not a metaphor to be illustrated. It is a description of what happens: an egg cracks and something comes out. Every mark in this system is that event drawn once, at a different size.
Everything is generated. branding/ builds the whole set from parameters in the same way dragonkit/ builds the dragons, and for the same reason: a one-line critique should become a coherent edit, not a re-draw. The palette this page is painted with is generated out of that module into tokens.css, so the site cannot drift from the mark.
Counted at build time
What exists
Counted from the tree when this page was generated, excluding frame caches and study snapshots. Rule two of the voice is that no number ships from memory; this is that rule applied to the collection itself.
| what | count | where |
|---|---|---|
| Models (GLB) | 455 | 321 world props, 51 HumanoidKit people and variant GLBs, 1 separate Fairy GLB, the rest dragons |
| World-prop triangles | 101,870 | 73 mesh rows built into 321 declared variants |
| Films | 46 | 24 unique titles; the rest are retained earlier versions |
| Film footage | 848 MB | portrait-first, at 1080 × 1920 |
| Animated loops | 74 | turntables and single clips |
| Stills | 3,437 | review sheets, previews and lifecycle plates |
| Interactive viewers | 16 | self-contained WebGL, zero external requests |
| Brand surfaces | 18 | all generated from parameters |
| The story | 7,962 words | The Lamp Leans, in seven parts |
| Engineering record | 63,521 words | 26 numbered failure shapes plus 25 task handoffs |
The device
One jagged fault, descending left to right
It appears in the logomark as a crack across an egg, and in the wordmark as the same fault family driven through the letterforms. They share the seed, drop, direction and construction. Three parameters are load-bearing, and all three were defects before they were settings.
| parameter | value | why this and not something else |
|---|---|---|
| FAULT_DROP | 0.52 caps | The fault is specified as a drop across the full width in cap heights, not as an angle. At a fixed 11° it fell two and a half caps across DRAGONS CRACK — entering above the D and leaving below the final K, so the word CRACK had no crack in it. A drop holds for any string length. |
| FAULT_SPREAD | 0.075 caps | How far the halves part. Past about a tenth of a cap the two halves stop reading as one broken word and start reading as two words. |
| BREAK_HEIGHT | 0.56 caps | Where the fault crosses the letters, measured up from the baseline. A mask's midpoint is the baseline, so the default ran the crack along the feet of the letters instead of through them. |
Palette
Eight colours, none of them invented
Six are lifted from a line of a shipped dragon.py; the other two were measured off rendered pixels. The provenance is recorded in brand.SOURCE and reprinted on every build, because a palette whose origin is not written down gets “improved” by the next person to open the file.
void
#0d0d15
measured: rendered background of pfp + teaser (#0d0d15 both)
basalt
#23262b
westerndrake_v3/dragon.py C_DORSAL
ash
#3a3f47
westerndrake_v3/dragon.py C_FLANK
ember
#d9541f
westerndrake_v3/dragon.py C_EMBER_DEEP
flare
#f5a03c
westerndrake_v3/dragon.py C_EMBER_HOT
core
#fef39d
measured: brightest 1% of the flame in pfp_dragons_crack_1024
crystal
#3ff0dd
crystalwyrmling_v3/dragon.py C_CORE
bone
#e8e0cf
westerndrake_v3/dragon.py C_BONE
Type
Specified by cap height, never by point size
Two faces at one point size do not share a cap, and every layout rule here — clear space, tracking, the fault's jaggedness — is denominated in caps. fracture.size_for_cap() measures the face and returns the point size that yields the cap you asked for.
Clear space is 0.62 cap heights on every side of the wordmark. The bloom is explicitly allowed to run past that box — the mark's bounding box is its body, not its glow, and including the glow was what threw every centred layout off by half a bloom radius.
| setting | value | note |
|---|---|---|
| Wordmark tracking | 0.055 caps | Heavy, condensed, fractured. Never re-typed by hand. |
| Wordmark squeeze | 0.86 | In the print system the face is squeezed until the letterforms stop reading as the system font they are cut from. This site substitutes a face that is already condensed rather than scaling one horizontally in the browser; the crack is the load-bearing device, not the squeeze. |
| Eyebrow tracking | 0.34 caps | Small caps, in crystal. At most one per surface. |
| Fault steps | 22 | Across the full width, at seed 7, so every rebuild is identical. |
Layout
Type sits in the dark half
Every hero plate has a lit side and a dead side, because these dragons are lit by their own fire. Copy goes in the dead side — and which side that is, is measured. surfaces.dark_spot() scans the allowed region for the darkest rectangle large enough to hold the lockup, so layout asks the image where the copy goes instead of assuming the dragon stayed on the right.

Wordmark
The fault driven through the word.

Key art
Type sits in the dark half, and which side that is, is measured.

Poster
Bottom sixth kept clear of platform furniture; hook at the top, because a vertical feed is read downward.

Header
Excludes the profile-photo region and clamps the lockup inside the right edge.
Avatar
Composed for a circular crop: the inscribed disc is 78.5% of the tile and the corners are decoration only.
Icon
Designed downward from 32 px. No eye, no scale texture, no outline — anything that stopped reading at that size was removed rather than shrunk.

Palette plate
The eight, rendered from the same module this page reads.
Avatar, plate
A rendered dragon plate on the brand ground: pure light added onto black, so there is no matte and no seam.
Voice
Three rules, and one of them is machinery
Rule two is not an aspiration. branding/facts.py counts the dragons and the signature attacks off the repository, branding/copy.py interpolates those counts rather than hard-coding them, and the key art's eyebrow is rendered from the same source. It exists because a previous teaser claimed “30 animations” and counting gave 28 — the number came from memory, was plausible, and was about to be published.
Say the concrete noun. "Basalt", "gout", "shell" — not "epic", "stunning", "next-gen".
Every number is counted from the artefact at the time of writing. No number ships from memory.
One idea per surface. If a poster needs two sentences to land, the poster is wrong, not the reader.
Product name
13 charsDragons Crack
Tagline / lockup
31 / 48Every dragon starts in a shell.
App Store subtitle
21 / 30Climb out of the dark
Social bio
122 / 160Hatch three kilometres down. Eat what you kill, steal what it knew, and climb when the dark has nothing left to teach you.
Steam short description
270 / 300You hatch three kilometres under a village that has never heard of you. Eat what you can kill and take what it knew — every animal down here evolved something worth stealing. Climb when the dark runs out of teachers. 2.6 m of basalt and fire by the time you see the sun.
Long description
1691 charsEvery dragon starts in a shell.
A dragon is not a species. It is the world venting — deep rock takes on more heat than it can shed, and what calcifies at the bottom of the shaft hatches and starts climbing toward the only low place it knows.
You climb because the deep runs out. The world has dragons in it, so nothing else stayed ordinary: everything down there evolved something, and every one of those is a skill you can take. Watch a thing hunt and you learn the tactic. Eat enough of it and you take the organ. Eat enough chalk grubs and you can move through rock; eat the crawler that ate your siblings and you inherit its eyes.
Then the band runs dry — nothing new left to learn, prey too small to grow on, and something younger already coming up the shaft behind you. The warrens first, where you are the smallest thing that hunts. Then the middens, where something hunts you on purpose. Then the mines — straight lines, square corners, lamps, and the first enemy that has been told you are coming. They are also the one animal you can gain nothing from by eating, so you watch them instead, for a year, for free.
Then daylight, at 2.6 m, starving and unable to stop. A village is food. A town is a fight. A city is a decision.
Five lineages, told by the route each took up: the drake grows its wings last because wings are useless in a tunnel; the wyvern climbs on its wing knuckles and spits one compact bolt, because a sustained gout in a chimney cooks the animal that made it; the lung swims the flooded route and arrives without hunger. Each is built to be unmistakable at thumbnail size, and each has a signature attack that is a different *shape*, not a different colour.
Launch post
426 charsEvery dragon starts in a shell.
You hatch three kilometres down. Everything else down there evolved something too, and all of it is on the table: watch it to learn the tactic, eat enough of it to take the organ.
You climb when the dark runs out of teachers. Warrens, middens, mines, and out.
Below, the thing that kills you is bigger than you. Above, it is smaller than you and there are four hundred of it.
Dragons Crack.
Press boilerplate
475 charsDragons Crack is a game about climbing out. You hatch at the bottom of a shaft and grow by taking what the dark knows — watched, or eaten — until the band has nothing left to teach, then you climb, out into a surface that has heard of you only as a mining problem and is too busy fighting itself to agree on an answer. Five lineages, each explained by the route it took up, all authored in code: proportions, pose, palette and polygon budget are parameters, not baked assets.
Known limits
What this system does not have yet
Every plate is the Western Drake
The other four dragons are built and animated but do not appear in any brand surface. A collection shot needs staging work, not just another camera.
The wordmark is a treated system face
It is distinctive because of the squeeze and the fault, not because the glyphs are original — worth knowing before it goes on a trademark application.
There is no motion system
The fault is a natural animation, and it opens. This site is the first place that has been built, and it is not yet tied back into the brand module.