How Carillon's levels are made: grown, proven, never repeated
Behind the scenes: how Carillon grows its fields, proves the fewest taps, measures difficulty in bits, and makes sure no two levels feel like the same one.

On this page
No Carillon level is drawn by hand. Every field is grown by one program, proven by another, then measured and put in order. Here is each step, and why it exists.
Why not just scatter dots?
Dropping dots at random does not work. Nearby normal dots reach each other both ways, so a random field tends to become one big tangle where every tap wins, a level with nothing to read. A good level needs a few hidden chain starts among tempting dots that something else reaches. So the generator grows fields instead.
Growing a field
The generator works in three stages.
- Roots. It places one root for each tap the level will need, big or normal, never small, since a small ring is too short to lead anywhere. The roots sit at least a third of the field’s height apart.
- Cores. The roots take turns growing a core around themselves. Each new dot goes inside the reach of a dot of its own tree, and no dot is allowed to reach a root.
- Free growth. The rest of the dots grow from whichever tree is smallest, so no chain is starved. A dot that will not fit at its size is tried smaller before it is given up.
Every dot but the roots sits inside some dot’s reach, so every dot belongs to a root’s chain. And since nothing can reach a root, the roots are exactly the chain starts. The taps a field needs are known by construction. (The first nine levels skip that rule on purpose, so any tap, or most taps, win while you learn.)
One more guard took two tries to get right: no other chain may ever lead into a root’s core, not even by a side door through ordinary dots. The generator now tracks, for every dot, which chains reach it and which cores it leads to, and refuses any dot that would join two trees.
Fair to read
Dots never come closer than 14 units edge to edge, on a field 640 units wide. And every ring either reaches a dot’s edge with at least 10 units to spare, or misses it by at least 10, so you can always tell by looking whether a circle touches a dot. Each chain must also pop a fair share of the field on its own, so the last tap of a five-tap level still has work to do.
Proven by a solver
The generator’s promise is checked, not trusted. A separate solver searches every tap and finds the true fewest. A level ships only if the two agree exactly, and the tests replay the solution through the game’s own rules. The solver finds the fewest taps for every shipped level in about a tenth of a second, and proves that none can be cleared in one tap fewer in about another tenth.
Measuring difficulty
Two levels that need the same number of taps can be a glance or a real puzzle, so the fewest taps is not enough to order them. Carillon measures difficulty in bits, as the luck needed by a player who never reads the field.
Picture that player. They hold dots and tap one at random, but they lean towards dots whose previews light up a lot. They only clear a level in the fewest taps by tapping a chain start every time. Difficulty is how unlikely that is: each bit halves their chance.
It rises with everything that makes a field harder: more dots, more circles over dots, fewer winning dots, showy decoys, and every extra tap. A tiny field of one big dot and two normals in a line comes out at 1.58 bits: only the big dot wins, and a guesser finds it one time in three.
On the real levels it starts at 0 bits on level 1, where any tap wins, and reaches 6.30 bits by level 30. The hardest level measures 13.19 bits: a player who never reads it clears it in the fewest taps about once in 9,300 tries.

Putting the levels in order
For each stretch of levels, the generator grows sixteen proven fields per level, then fills the levels in turn with the field nearest a target that rises in a straight line. A level is never easier than the one before it, and never has fewer dots.
The seams are smooth too. Each new number of taps starts just above where the last one ended, so its first level is an easy one of its kind: the first three-tap level, level 22, measures 5.38 bits against 5.23 for the level before it, and the first five-tap level, level 97, measures 11.75 against 11.65. Level 4, the first two-tap level, is still at 0 bits, because any tap on it wins. The biggest jump anywhere between neighbours is 0.57 bits, at level 11.

No two levels the same
A level can feel like a repeat without matching dot for dot, so the check compares levels the way you see them:
- Turned or mirrored. Fields are compared in all eight turns and mirrors, ignoring colour, which only sets the note.
- The same picture. Two levels are the same if more than half of the larger one’s dots line up with same-sized dots of the other.
- The answer in the same place. They are also the same if their chain starts sit on matching dots and a good part of the picture matches.
- The same chains. And they are the same if who-pops-whom is identical, whatever the picture.

Every candidate is checked against every level already chosen, and the tests check every pair again on every build.
The generator owns its random numbers, so the same seed always makes the same levels, byte for byte: change a rule, run it again, and the tests prove the new set is still fair.
For the maths of why “chain starts” is exactly the right idea, read chain reactions as graphs. For how this was built by a team of two, see made by two.



Comments
Sign in with GitHub to leave a comment or a question.